有些时候,由于前期考虑不周,或者后期设计升级,导致合约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}.
DeBank钱包Rabby:Swap智能合约存在漏洞,建议尽快撤销Rabby Swap批准:10月11日消息,DeBank钱包Rabby发推称,其Rabby Swap智能合约存在漏洞,请用户撤销所有链上的Rabby Swap批准。目前团队正在解决问题。
此前据Supremacy安全团队监测,DeBank钱包Rabby的Swap Router疑似存在一个漏洞,可任意转移用户资产,建议尽快取消对Rabby的授权。攻击者地址为0xb687550842a24d7fbc6aad238fd7e0687ed59d55。[2022/10/11 10:31:18]
在合约中增加新的表结构xxxinfo1及其对象,并修正上面问题
DAML被选为区块链服务网络BSN的专用智能合约语言:9月14日,北京红枣科技和Digital Asset宣布了关于DAML智能合约技术和区块链服务网络(BSN) 集成的合作协议。作为协议的一部分,由Digital Asset创建的智能合约编程语言DAML,将成为BSN生态内分布式应用(DApp)编写的标准语言。
BSN是由国家信息中心顶层规划,联合中国移动、中国银联和北京红枣科技共同发起的全球性区块链基础设施,旨在让开发者和企业在统一的标准下更高效地创建和访问新一代分布式应用程序。四家发起方早在2018年便启动了BSN项目,目前BSN是中国最大的区块链基础设施网络。[2020/9/15]
struct]xxxinfo1{uint64_tid;uint32_ttest;//为测试添加的字段uint16_ttest1;//为测试添加的字段uint32_ttest2;//为测试添加的字段autoprimary_key()const{returnid;}};typedefeosio::multi_index<"xxxinfo1"_n,xxxinfo1>xxxinfo1_tables;
动态 | 币安实验室向智能合约验证平台CertiK投资数百万美元:据Coindesk消息,币安实验室近日向智能合约验证平台CertiK投资,投资额达数百万美元。据悉,CertiK为初创型企业,其中两名创始人分别来自美国的耶鲁大学和哥伦比亚大学。[2018/10/8]
此时合约内同时存在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++;}}
动态 | 媒体区块链通过智能合约的形式可应用于数字版权等传媒领域:人民网刊文,区块链技术由互联网金融纵深发展而来,相较于传统的“厂商-中间商-消费者”,区块链技术成为了新的中间商,通过简化厂商与消费者之间的机构,来实现去中心化的、更为透明的、更为精准的“分布式记账”,媒体区块链通过智能合约的形式可应用于内容付费、数字版权、信息共享、广告精准投放等传媒领域。[2018/9/19]
停止Dapp,避免迁移期间数据改变,然后执行actioncleos-uhttps://api.eoslaomao.compushaction合约账户migratexxx'{}'-p合约账户
如果数据较多,且数据是累计增长,可以分区间执行迁移,迁移过程中,可以不停止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合约账户最后再删除合约内旧表及对象就完成了此次合约表升级过程。
截至发稿时,Santiment显示LINK加权情绪为-0.781。LINK在当前市场条件下被低估了.
1900/1/1 0:00:00自推出以来,Pawswap的价格已上涨约5500%。超过450亿个PAW已被销毁。PawSwap是一种基于Shibarium协议的去中心化交易所,今天正乘着看涨浪潮,其价格上涨13%至0.000.
1900/1/1 0:00:00大家好,这里是链客区块链技术问答社区,链客,有问必答!今天给大家来讲一讲互联网学习编程以及如何入门等相关知识.
1900/1/1 0:00:00让我们想象一下这样一个案例:一家加密货币初创公司已经从风险投资公司为一个股权实体筹集了资金,并且未来计划为该股权实体筹集更多资金。该初创公司还计划在未来的某一天推出一个代币.
1900/1/1 0:00:00Uniswap治理投票刚通过了4千万张"赞成"票,预计UniswapV3将在4-6周内在zkSync上部署。 有趣的是,部署本身不会由Uniswap团队完成.
1900/1/1 0:00:00大家好,这里是链客区块链技术问答社区。链客,专为区块链技术开发者而生,有问必答!区块链和比特币的基本原理除非你去年一直在青藏高原默默冥想,不问世俗,否则你很可能会被各种投资建议、固执的文章和有关.
1900/1/1 0:00:00