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

有些时候,由于前期考虑不周,或者后期设计升级,导致合约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}.

N26向五个新市场推出加密货币交易:金色财经报道,德国数字银行N26正在五个新市场推出其加密货币产品。N26 Crypto 于去年年底在奥地利推出,现在将使德国、瑞士、比利时、葡萄牙和爱尔兰的符合条件的客户能够在其 N26 应用程序中买卖近 200 种加密货币。[2023/1/17 11:17:02]

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

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

声音 | 法学教授:智能合约不一定会扰乱传统合同法:据cointelegraph报道,德国弗里德里希席勒大学法学教授Giesela Ruhl近日发文称,智能合约不一定会扰乱传统合同法,她认为智能合约与既定法律先例之间的摩擦可能被过分夸大了。智能合约将使商品和服务的交换不受国家法律的约束,但这一预期似乎没有实现。事实上,合同法的经典问题也出现在当事人签订智能合约的时候。就像所有其他合约一样,它需要法律来解决。因此,重要的不是智能合约是否应受法律约束,而是应受哪些法律的约束。[2019/1/24]

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

增加迁移执行的action接口

动态 | Netta发现以太坊智能合约虚拟机重大漏洞 覆盖80%虚拟机:11月9日讯,近日,Netta研究院表示,其和清华大学软件学院动态分析小组合作发现以太坊智能合约虚拟机(EVM)重大漏洞,目前该漏洞已被美国国家信息安全漏洞库CVE认证,并称这次漏洞远比“The DAO”事件要严重,如被利用,或将严重破坏整个以太坊经济模型,对全球运行多数公链造成冲击。 据提供ID,经登录CVE官方网站确已查询到收录信息,但该漏洞描述显示“RESERVED”,漏洞被保密,并未披露具体细节。[2018/11/9]

//.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++;}}

EDU团队发布关于EduCoin(EDU)智能合约升级的公告声明:EDU团队发布关于EduCoin(EDU)智能合约升级的公告声明:

1、EDU团队内部技术工程师在昨日发现合约漏洞之后,为确保用户资产安全,我们第一时间通知交易所,并暂停了充提业务和交易业务。

2、EDU团队已对异常账户出现前的资产地址进行快照,快照时间为2018年5月23日22:51分。智能合约升级后,将对快照地址做资产映射,快照时的用户资产不会受到任何影响。

3、EDU团队正在全力做智能合约的升级,预计24-96小时升级成功。

4、重要提示:EDU的交易所充提及交易业务将在智能合约升级完成后重新开启,请各位耐心等待。

EDU团队还建议用户在智能合约升级期间,不要进行任何交易行为(场外交易等),以免被投机分子利用,造成财产损失。[2018/5/24]

停止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合约账户最后再删除合约内旧表及对象就完成了此次合约表升级过程。

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

金智博客

[0:15ms0-3:309ms