- 浏览: 784858 次
- 性别:
- 来自: 深圳
-
文章分类
- 全部博客 (1045)
- 数据结构 (36)
- UML与设计模式 (42)
- c++ (87)
- rust (36)
- Qt (41)
- boost模板元编程 (43)
- Linux (77)
- 汇编 (4)
- 其它 (2)
- 烹饪 (3)
- unix c / socket (73)
- 软件工程 (4)
- shell (53)
- Python (37)
- c++ primer 5th(c++11) (22)
- 数据库/MySQL (27)
- 数据存储 (4)
- lisp (7)
- git (4)
- Utility (3)
- CDN与DNS (54)
- Http (53)
- php (7)
- nginx/lua/openresty (41)
- redis (11)
- TCP/IP (16)
- 互联网 (6)
- kernel (2)
- go (34)
- 区块链 (43)
- 比特股 (13)
- 以太坊 (23)
- 比特币 (23)
- 密码学 (10)
- EOS (53)
- DAG (1)
- docker (1)
- filecoin (7)
- solidity (65)
- ipfs (8)
- 零知识证明 (1)
- openzeppelin (3)
- java (1)
- defi (7)
- Ton (0)
最新评论
EOS的数据库就是chainbase,而调用数据库服务的C++的API是由eosio::multi_index负责的
eosio::multi_index是基于boost::multi_index库改进的,它提供了针对不同类型索引对象的迭代器Multi-Index Iterators.
1.每一个multi_index的表对象都必须包含一个uint64类型的主键,同时每张表都必须包含一个常量函数primary_key()用于获得主键
2.multi_index支持额外16个二级索引,这些二级索引的类型可以是uint64,uint128,uint256,double或long double
一个multi_index的表需要三个参数
1.表名
2.表内存储数据类型(包括数据结构,都可以自定义,要包含主键)
3.索引(指的是二级索引,同样定义在对象数据中,并且包含get该索引的函数)
API
1.multi_index(uint64_t code,uint64_t scope):构建一个multi_index表的实例
2.get_code():获取code成员值,当前table的拥有者
3.get_scope():获取scope成员值,当前table的接收者范围
4.begin()/end(),iterator,const_iterator:返回当前table最小(大)主键对应的值,即最前对象(end批向最后对象的后一个位置,如果=end(),则证明在迭代器对象中不存在目标对象)
5.cbegin()/cend(),const_iterator:无条件返回一个常量迭代器对象
6.cbegin()/cend(),const reverse iterator:返回常量倒转迭代器对象
7.rbegin()/rend(),reverse iterator:返回倒转迭代器对象
8.lower_bound(uint64_t primary):设置主键(或二级索引)最小边界值,返回大于或等于该值的迭代器.若未查到则返回-1
9.upper_bound(uint64_t primary):设置最大值,存在则返回小于或等于该值的迭代器,查找不存在则返回大于该值的迭代器,如果在最后则返回-1
10.available_primary_key():返回一个可用主键,当table新增一条数据时,需要设置主键的值,通过该函数返回一个自增的主键id,不可重复
11.get_index<N(secondary indexName>():返回一个二级索引,可通过名字类型指定某个二级索引
12.iterator_to(const T & obj):返回一个给定对象引用的迭代器
13.emplace(uint64_t payer,Lambda && constructor):table新增一条数据.第一个参数是为新增数据的空间资源及其他开销的付费者;第二个参数为新增数据的对象内容,是一个当场初始化创建一个对象的Lambda函数
a.在multi_index中创建一个新对象,对象指定一个唯一主键,对象被序列化写入table,如果不存在,则先创建表
b.二级索引更新引用新添加的对象,如果不存在,则先创建二级索引,返回一个主键迭代器指向新创建的对象
14.Modify(const_iterator itr,uint64_ payer,Lambda && updater):修改table中的一条对象数据.第一个参数是指向需要更新的对象迭代器,第二个参数是开销付费者,第三个参数是目标对象内容的Lambda函数
a.修改后的对象会替代现有的
b.二级索引会更新,主键不发生更新
c.如果原对象的付款者与更新对象的付款者是同一个账户,则仅向差异化开销付费;如果更新后所占空间变小,则还会退款
d.如果付款者不同,则退还空间开销到原对象的付款账户
15.get(uint64_t primary):返回一个常量,包含特定主键对应table中的对象的引用.除根据主键查找外,还可以通过指定二级索引进行查找
16.find(uint64_t primary):返回一个迭代器,包含与传入值相等的主键的对象.除根据主键查找外,还可以通过指定二级索引进行查找
17.erase(const_iterator itr):传入一个迭代器,指向待删除的对象.通过该对象的主键从table中删除对象.
a.对象从表中删除,所有相关存储资源被回收
b.表中二级索引会更新
c.原对象付款者会被退还空间开销
eosio::multi_index是基于boost::multi_index库改进的,它提供了针对不同类型索引对象的迭代器Multi-Index Iterators.
1.每一个multi_index的表对象都必须包含一个uint64类型的主键,同时每张表都必须包含一个常量函数primary_key()用于获得主键
2.multi_index支持额外16个二级索引,这些二级索引的类型可以是uint64,uint128,uint256,double或long double
一个multi_index的表需要三个参数
1.表名
2.表内存储数据类型(包括数据结构,都可以自定义,要包含主键)
3.索引(指的是二级索引,同样定义在对象数据中,并且包含get该索引的函数)
API
1.multi_index(uint64_t code,uint64_t scope):构建一个multi_index表的实例
2.get_code():获取code成员值,当前table的拥有者
3.get_scope():获取scope成员值,当前table的接收者范围
4.begin()/end(),iterator,const_iterator:返回当前table最小(大)主键对应的值,即最前对象(end批向最后对象的后一个位置,如果=end(),则证明在迭代器对象中不存在目标对象)
5.cbegin()/cend(),const_iterator:无条件返回一个常量迭代器对象
6.cbegin()/cend(),const reverse iterator:返回常量倒转迭代器对象
7.rbegin()/rend(),reverse iterator:返回倒转迭代器对象
8.lower_bound(uint64_t primary):设置主键(或二级索引)最小边界值,返回大于或等于该值的迭代器.若未查到则返回-1
9.upper_bound(uint64_t primary):设置最大值,存在则返回小于或等于该值的迭代器,查找不存在则返回大于该值的迭代器,如果在最后则返回-1
10.available_primary_key():返回一个可用主键,当table新增一条数据时,需要设置主键的值,通过该函数返回一个自增的主键id,不可重复
11.get_index<N(secondary indexName>():返回一个二级索引,可通过名字类型指定某个二级索引
12.iterator_to(const T & obj):返回一个给定对象引用的迭代器
13.emplace(uint64_t payer,Lambda && constructor):table新增一条数据.第一个参数是为新增数据的空间资源及其他开销的付费者;第二个参数为新增数据的对象内容,是一个当场初始化创建一个对象的Lambda函数
a.在multi_index中创建一个新对象,对象指定一个唯一主键,对象被序列化写入table,如果不存在,则先创建表
b.二级索引更新引用新添加的对象,如果不存在,则先创建二级索引,返回一个主键迭代器指向新创建的对象
14.Modify(const_iterator itr,uint64_ payer,Lambda && updater):修改table中的一条对象数据.第一个参数是指向需要更新的对象迭代器,第二个参数是开销付费者,第三个参数是目标对象内容的Lambda函数
a.修改后的对象会替代现有的
b.二级索引会更新,主键不发生更新
c.如果原对象的付款者与更新对象的付款者是同一个账户,则仅向差异化开销付费;如果更新后所占空间变小,则还会退款
d.如果付款者不同,则退还空间开销到原对象的付款账户
15.get(uint64_t primary):返回一个常量,包含特定主键对应table中的对象的引用.除根据主键查找外,还可以通过指定二级索引进行查找
16.find(uint64_t primary):返回一个迭代器,包含与传入值相等的主键的对象.除根据主键查找外,还可以通过指定二级索引进行查找
17.erase(const_iterator itr):传入一个迭代器,指向待删除的对象.通过该对象的主键从table中删除对象.
a.对象从表中删除,所有相关存储资源被回收
b.表中二级索引会更新
c.原对象付款者会被退还空间开销
发表评论
-
eos快照
2019-10-06 08:31 402快照:为区块链提供临时 ... -
eos待确认/分叉库
2019-10-05 08:32 270fork_database:管理了轻量级状态数据,是由未确认的 ... -
eos controller概述
2019-10-03 17:28 308EOS中的模型层是blocks.log和基于chainbase ... -
eos chainbase状态库
2019-10-01 08:03 457chainbase:是一个快速包含 ... -
eos action
2019-09-28 17:18 195action:在EOS中,action被分配到对应程序(一般是 ... -
eos事务结构
2019-09-28 16:34 416transaction_header:事务头的数据大小是固定的 ... -
eos区块头结构
2019-09-28 08:54 298block_header:区块头 struct block ... -
eos rpc set
2019-09-26 19:27 294set contract:设置合约 xjdeMacBook- ... -
eos rpc create
2019-09-26 19:18 2971.创建公私钥对 xjdeMacBook-Pro:safeco ... -
EOS blocks.log
2019-09-26 07:40 380区块数据通过blocks.log与blocks.index持久 ... -
引用区块
2019-09-25 07:26 323trx.set_reference_block(ref_blo ... -
EOS事务
2019-09-24 07:36 373调用函数add_standard_transaction_op ... -
全节点搭建
2019-09-22 09:34 2741.通过system regproducer命令可将普通账户注 ... -
eos名词解释
2019-09-14 09:34 6761.Authority:权力,要与Permission做好区分 ... -
智能合约依赖库
2019-08-29 07:32 373Action:这部分定义了查询或发送action的API.在E ... -
eos_rpc_system资源获取
2019-08-21 07:39 379资源主要有CPU,net bandwidt ... -
eos_rpc_sign
2019-08-21 07:22 252sign [OPTIONS] transaction:完成EO ... -
eos_rpc_wallet
2019-08-20 07:31 3301.wallet create [OPTIONS]:创建一个新 ... -
eos_rpc_get
2019-08-18 08:38 3051.get info:通过指定全节点API接口获取其连接的EO ... -
nodeos,cleos,keosd
2019-08-16 07:17 316nodeos:是运行在服务端的 ...
相关推荐
EOS提供两种类型的主键:`uint64_t`(单主键)和`multi_index`(多主键,包括联合主键)。在这里,我们使用`multi_index`来设置联合主键: ```cpp EOSIO_TABLE(Account, id) { uint64_t id; name username; ...
3、Multi_index定义,建立数据表 4、实例化multi_index 5、操作数据,增删改查 #玩转table表 1、Table表producers 2、Table表global 3、Table表voters 4、Table表rammarket (获取RAM实时价格) 5、Table表...
代码层面详解eosio.token合约,并对用到的multi-index数据库首先进行了解读。token合约的中用到的各种数据结构,以及create、issue、transfer、sub_balance、add_balance都有详细解读。
EOS的数据库模型支持多种类型的数据结构,如tables、multi-index tables等。在这个合约中,可能包括创建、更新和查询用户账户的时刻记录。例如,合约可能定义了一个表来存储用户的特定时刻,如生日、纪念日等,并...
You are visitor as of October 17, 1996. The Art of Assembly Language Programming <br>Forward Why Would Anyone Learn This Stuff? 1 What's Wrong With Assembly Language 2 What's Right With ...