github源码:我在这呢
在前一篇了解了智能合约的开发骨架后,接着就进入真正的智能合约开发阶段吧
在开发中最重要的就是如何对数据进行操作,因此本文说一下开发智能合约的数据持久化
本文将以代码形式引例,其他开发模式基本与其一致。
借助官网例子,自己多敲几遍,理解并融会贯通
在设计表结构的时候需要注意,区块链的表如果有data不能临时加入新column,所以在设计的时候尽可能考虑的周全一点。
1.项目结构

2.addressbook.hpp文件,说明如下:

3.addressbook.cpp文件,说明如下:

4.addressbook.hpp 代码如下:
#include <eosio/eosio.hpp>
using namespace std;
using namespace eosio;
CONTRACT addressbook : public contract {
public:
using contract::contract;
/**
声明两个action: upsert和deleteuser,具体实现将在cpp文件中
ACTION:是一个标签,一定要加,声明是一个action
*/
ACTION upsert(name user, string first_name, string last_name, string street, string city, string state);
ACTION deleteuser(name user);
private:
/**
TABLE:标签,声明这是一张table
*/
TABLE person { //定义一张table,用于存储data
name key;
string first_name;
string last_name;
string street;
string city;
string state;
auto primary_key() const { return key.value; } //定义主键
};
/**
设置为多索引
name("people") 命名为people
person 传入上面定义的表结构
address_index类型将用于实例化表
*/
typedef multi_index<name("people"), person> address_index;
};
5.addressbook.cpp 代码如下:
#include <addressbook.hpp>
ACTION addressbook::upsert(name user, string first_name, string last_name, string street, string city, string state) {
require_auth(user);
address_index addresses(get_self(), get_self().value); //实例化表
auto iterator = addresses.find(user.value); //创建迭代器
if(iterator == addresses.end()) {
addresses.emplace(user, [&](auto& row){ //mplace方法的回调函数必须使用lamba函数来创建引用,插入data
row.key = user;
row.first_name = first_name;
row.last_name = last_name;
row.street = street;
row.city = city;
row.state = state;
});
} else {
addresses.modify(iterator, user, [&](auto& row){ //更新data
row.key = user;
row.first_name = first_name;
row.last_name = last_name;
row.street = street;
row.city = city;
row.state = state;
});
}
}
ACTION addressbook::deleteuser(name user) {
require_auth(user);
address_index addresses(get_self(), get_self().value); //实例化表
auto iterator = addresses.find(user.value); //创建迭代器
check(iterator != addresses.end(), "Record does not exist");
addresses.erase(iterator); //删除record
}
EOSIO_DISPATCH(addressbook, (upsert)(deleteuser))
更多
想了解更多,请关注公众号哦!
