智能合约之合约数据表字段升级

有些时候,由于前期考虑不周,或者后期设计升级,导致合约table字段需要增加,或者类型需要更改,所以需要数据迁移,下面举例我常用的升级方法假设目前合约内有个tablexxxinfo

struct]xxxinfo{uint64_tid;uint64_ttest;//为测试添加的字段uint8_ttest1;//为测试添加的字段autoprimary_key()const{returnid;}};typedefeosio::multi_index<"xxxinfo"_n,xxxinfo>xxxinfo_tables;

现在升级需要解决的问题是test当初设计字段类型过大,导致ram浪费,test1选型过小,增加test2字段{uint32_t}.

数据:Cardano上智能合约数突破3000个:8月3日消息,Cardano Blockchain Insights的数据显示,截至8月1日,基于由Cardano支持的Plutus的智能合约总数突破3000个。(Finbold)[2022/8/3 2:56:19]

在合约中增加新的表结构xxxinfo1及其对象,并修正上面问题

struct]xxxinfo1{uint64_tid;uint32_ttest;//为测试添加的字段uint16_ttest1;//为测试添加的字段uint32_ttest2;//为测试添加的字段autoprimary_key()const{returnid;}};typedefeosio::multi_index<"xxxinfo1"_n,xxxinfo1>xxxinfo1_tables;

前NBA运动员:Chainlink是将数据带入智能合约的唯一解决方案:前NBA运动员、金·卡戴珊前夫Kris Humphries发推称:“世界越来越依赖数据,智能合约也不例外。Chainlink是通过去中心化、安全的方式将数据带入智能合约的唯一解决方案。未来已至。”[2020/4/9]

此时合约内同时存在xxxinfo1和xxxinfo1两张表.

增加迁移执行的action接口

//.hACTIONmigratexxx();//.cppvoidmigratexxx(){xxxinfo1_tablesxxxinfo1_table(_self,_self.value);xxxinfo_tablesxxxinfo_table(_self,_self.value);autoitr=xxxinfo_table.begin();while(itr!=xxxinfo_table.end()){xxxinfo1_table.emplace(_self,(auto&h){h.id=xxxinfo1_table.available_primary_key();h.test=itr->test;h.test1=itr->test1;});itr++;}}

动态 | 摩根大通前区块链团队负责人与Kadena合作发布混合区块链智能合约新版本:据coindesk消息,投资银行巨头摩根大通区块链团队前负责人Stuart Popejoy与区块链平台服务提供商Kadena合作发布了混合区块链智能合约新版本Pact,旨在使区块链上安全、简单的智能合约开发成为可能。Popejoy认为,Pact 3.0的扩展功能集最终将支持私有和公共网络之间的跨区块链智能合约执行。[2019/6/6]

停止Dapp,避免迁移期间数据改变,然后执行actioncleos-uhttps://api.eoslaomao.compushaction合约账户migratexxx'{}'-p合约账户

独家 | 区块链项目10%-20%的智能合约业务存在逻辑漏洞:多家交易所为了保护各平台投资者及自身的资产安全,委托独立第三方智能合约审计机构降维安全实验室对所有即将在交易所上线的项目方智能合约进行安全审计。在审计过的数百份智能合约中,降维安全实验室(Johnwick.io)发现超过70%的智能合约代码优质、业务逻辑严谨,但也有极少数项目方合约代码存在严重的业务逻辑风险,上线后可能会给交易平台及投资者造成巨大的资产损失。主要问题表现为合约Owner(合约所有者、创始团队)权限设置过大,可以无限增发代币,更为严重的是溢出可以随意增加和销毁任意地址的代币,甚至包含交易所自身的钱包地址。在这种情况下如果Owner自身作恶或者被盗取账号,在上线交易拉高币价后进行大量增发再砸盘至价格归0,可在短期内获得巨大收益,而蒙受巨大损失的只有交易所及广大投资者。降维安全实验室作为合约审计的受委托方,在审计合约时以最大程度的保护广大区块链投资者及交易平台的资产为唯一目标,对合约有极高的要求所以可能会出现审计不通过的情况,对于没有经过严格评估过的合约资产,可能在未来的某段时间内爆发资产风险,希望广大用户注意。[2018/7/12]

如果数据较多,且数据是累计增长,可以分区间执行迁移,迁移过程中,可以不停止dapp,等迁移差不多追上旧表了,再暂停dapp,然后等数据全部迁移完.

修正合约中的新表为

struct]xxxinfo{uint64_tid;uint32_ttest;//为测试添加的字段uint16_ttest1;//为测试添加的字段uint32_ttest2;//为测试添加的字段autoprimary_key()const{returnid;}};typedefeosio::multi_index<"xxxinfo1"_n,xxxinfo>xxxinfo_tables;

将旧表修改为

struct]xxxinfo_bak{uint64_tid;uint64_ttest;//为测试添加的字段uint8_ttest1;//为测试添加的字段autoprimary_key()const{returnid;}};typedefeosio::multi_index<"xxxinfo"_n,xxxinfo_bak>xxxinfo_bak_tables;

修正前后端调用的table名,重新上线,并运行dapp,建议等运行一段时间,在删除旧表增加清理旧表的action

//.hACTIONclearxxxbak();//.cppvoidclearxxxbak(){xxxinfo_bak_tablesxxxinfo_bak_table(_self,_self.value);autoitr=xxxinfo_bak_table.begin();while(itr!=xxxinfo_bak_table.end()){itr=xxxinfo_bak_table.erase(itr);}}

然后执行actioncleos-upushaction合约账户clearxxxbak'{}'-p合约账户最后再删除合约内旧表及对象就完成了此次合约表升级过程。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

银河链

中币互联网技术如何入门及学习路径大致如何?

大家好,这里是链客区块链技术问答社区,致力服务于区块链技术人才的培养和成长,为了区块链这个行业输送人才!中国(云南)自贸试验区红河片区利用互联网+区块链技术助推边民互市贸易:中国(云南)自由贸易.

[0:0ms0-1:734ms