#include <eosiolib/eosio.hpp>
#include <eosiolib/transaction.hpp>
#include <eosiolib/datastream.hpp>
using namespace eosio;
class hello : public eosio::contract
{
public:
using contract::contract;
/// @abi action
void hi(account_name user)
{
print("Hello, ", name{user});
}
/// @abi action
void addstu(int64_t id)
{
students t(_self, _self);
auto existing = t.find(id);
eosio_assert(existing == t.end(), "id already exists");
t.emplace(_self, [&](auto &r) {
r.id = id;
});
}
/// @abi action
void update(std::string name)
{
students t(_self, _self);
auto r = t.begin();
if (r == t.end())
{
return; // 所有记录都已经更新完毕
}
students2 t2(_self, _self);
auto existing = t2.find(r->id);
if (existing == t2.end())
{
t2.emplace(_self, [&](auto &r2) {
r2.id = r->id;
r2.name = name;
});
}
auto id = r->id; // 构造有效的id
t.erase(r); // 删除对应的记录
transaction trx; // 构造新的 trx
trx.actions.emplace_back(std::move(action{permission_level{_self, N(active)}, _self, eosio::string_to_name("update"), std::tuple<std::string>{name}}));
constexpr size_t max_stack_buffer_size = 512;
size_t size = pack_size(trx);
char *buff = (char *)(size < max_stack_buffer_size ? malloc(size) : alloca(size));
datastream<const char *> ds(buff, size);
ds << trx;
send_deferred((uint128_t(id) << 64) | id, _self, buff, size); // 更新下一条记录
}
private:
/// @abi table student i64
struct student
{
int64_t id;
auto primary_key() const { return id; }
};
/// @abi table student2 i64
struct student2
{
int64_t id;
std::string name;
auto primary_key() const { return id; }
};
typedef eosio::multi_index<N(student), student> students;
typedef eosio::multi_index<N(student2), student2> students2;
};
EOSIO_ABI(hello, (hi)(addstu)(update))
EOSIO 升级数据表结构
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 前面5篇文章我们讲解了数据结构和算法的一些概述,我们应该对数据结构和算法有了一定的认识了,本篇文章将会带着大家学习...
- 前言 本文参考转发摘自:【郭霖博客】http://blog.csdn.net/guolin_blog?viewmo...
- 首先我们要下载JDBC的jar包,本项目中jar放在了lib目录中,大家可以直接使用我这个mysql-connec...