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

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

智能合约中USDC供应量百分比已上升至42.08%:金色财经报道,Glassnode 3 月 27 日发布的最新报告强调,智能合约中 USDC 供应量的百分比有望飙升。数据表明该百分比已上升至 42.08%,创六个月高点。USDT 在智能合约中的供应量占比为 14.0%,今年最高占比仅为 14.7%。这表明 USDC 被更广泛地用于与智能合约相关的交易。[2023/3/28 13:30:37]

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

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

报告:ETH开发者活跃度创新高,三季度智能合约数量增加40%:10月14日消息,区块链开发平台Alchemy发布发布《2022年第三季度Web3开发者报告》,报告显示,尽管ETH年初至今下跌60%,但开发者活跃度反创新高,第三季度部署在以太坊上的智能合约数量增加了40%,创历史新高。

此外,36%已部署和验证的智能合约于2022年完成,在合并后的2周内智能合约部署增加了14%。[2022/10/14 14:27:41]

此时合约内同时存在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++;}}

数据:根据智能合约活动,鲸鱼用户正在购买狗狗币:111月27日消息,据WhaleStats提供的数据,狗狗币是排名前1000的BSC钱包使用最多的智能合约之一,狗狗币在链上互动最活跃的智能合约中排名第七。智能合约的使用通常意味着购买活动的增加。虽然链上数据表明越来越多的用户开始使用狗狗币,但市场行情却与此相左。根据TradingView的数据,Doge/USD交易对目前跌幅高达10%。(U.Today)[2021/11/27 12:35:15]

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

“末日博士”教授唱衰智能合约:据ccn消息,纽约大学教授,被称为“末日博士”的Nouriel Roubini一直以其看跌的经济预测而闻名,但在加密货币世界,他以对区块链的鄙视而闻名。今天Roubini在其社交媒体称,“智能合约”既不聪明也不是合约,每1000行代码中有100多个错误 。不是合约是因为没有法院可以执行这些合约。[2018/6/2]

如果数据较多,且数据是累计增长,可以分区间执行迁移,迁移过程中,可以不停止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合约账户最后再删除合约内旧表及对象就完成了此次合约表升级过程。

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

金星链

SHIB区块链:区块链中的独立交易验证时是什么?

大家好,这里是链客区块链技术问答社区。链客,专为开发者而生,有问必答! 独立交易验证 美股三大指数小幅高开,区块链股多数走高:行情显示,美股三大指数小幅高开,道指涨0.04%,标普500涨0.1.

[0:62ms0-0:452ms