好奇的探索者,理性的思考者,踏实的行动者。
Table of Contents:
rpcapi.h
定义了所有的json api接口
wasm_gettable 获取合约的存储数据的接口
rpcapiconf.h
所有rpcapi定义的地方
test_abi.cpp
测试abi功能
rpcsubmittx.cpp
submitsetcodetx() 部署合约
读取wasm, validate()验证wasm, 二进制的格式
读取abi的json文件--> 生成json对象-->转化为abi_def对象,-->并用wasm::pack<wasm::abi_def>进行序列化
生成CUniversalTx,并提交交易
其中的 action_data = wasm::pack(std::make_tuple(contract, payer, (uint8_t)vm, code, abi, memo));
建块的时候合约和abi是如何存储的
submittx() 执行合约
得到合约的abi, 部署合约时序列化后的abi
根据abi 将action data序列化:
1、Multi-Index API 是EOS提供的访问数据库的C++接口,使智能合约能够读取和修改EOS数据库中的数据;
2、Multi-Index源文件位置在:eos/contracts/eosiolib/multi_index.hpp;
3、Multi-Index来源于boost库的boost::multi_index,但又有一些重要不同,eos中使用eosio::multi_index;
4、eosio::multi_index在概念上和传统数据库的“表(table)”类似,数据“行(rows)”是独立的对象,数据“列(columns)”是对象的成员属性;
5、eosio::multi_index提供和传统数据库的“键(key)”类似的成员属性,用于快速查找对象;
6、eosio::multi_index允许使用自定义函数作为索引,但它的返回值是受限制的,只能是支持的键类型;
7、eosio::multi_index支持主键(primary key),但必须是唯一的无符号64位整型(uint64_t);
8、eosio::multi_index按主键排序时,使用升序;
9、Multi-Index表允许多索引排序,最多可以使用16个二级索引;
10、Multi-Index迭代器可以双向迭代,即const_iterator或const_reverse_iterator;
11、二级索引作为Multi-Index表构造函数的一部分创建,不支持直接构建。