準(zhǔn)備?
上面說了很多關(guān)于合約方面的操作耙厚, 那么主要說下multi_index
/// @abi table people i64
struct people {
uint64_t id; //用戶唯一識別Id
account_name account;//用戶賬戶名
string name; //用戶名
string address;//用戶地址
/// Define the people primary key
/// 主鍵索引
uint64_t primary_key() const { return account; }
//用戶id索引
uint64_t get_id() const { return id; }
/// Serialization people
EOSLIB_SERIALIZE(people, (account)(id)(name)(address))
};
/// 默認通過主鍵索引,使用indexed_by丹喻,可以通過自定義函數(shù)進行索引
typedef eosio::multi_index<N(people), people,
indexed_by<N(byid), const_mem_fun<people, uint64_t, &people::get_id>>
> people_index;
解釋一下腾降,使用上面的方式來定義索引,eosio::multi_index<...>的參數(shù)解釋如下:
people: multi_index容器的表名
people : 智能合約重定義的struct結(jié)構(gòu)體名稱俊性,也可以理解成表中的一行記錄;
indexed_by<...> :
N(byid) : 給索引起個名字 - byid
const_mem_fun<...> :
uint64_t : 索引的類型
&people ::get_id:通過people 結(jié)構(gòu)體中的get_id函數(shù)獲得(索引)
實例化:
multi_index(uint64_t code, uint64_t scope)
說明: scope 和 code 都是用來為表建立訪問權(quán)限
code 擁有這張mult_index 表的賬戶描扯, 該賬戶擁有對合約數(shù)據(jù)的讀寫權(quán)限
scope 用戶賬戶名下的區(qū)域定页, 可以在code下定義多個scope, 把屬于不同的scope的表隔離開荆烈;
people_index peopmul (_self, _self);
說明: peoplemul 就是一張新表拯勉, _self 就是當(dāng)前調(diào)用方法的賬戶