区块见闻 区块见闻
Ctrl+D收藏区块见闻
首页 > NEAR > 正文

PLO:Rust智能合约养成日记(9)_PLOCK币

作者:

时间:

程序维护中的一个基本问题是——缺陷修复总会以%的机率引入新的bug。所以整个过程是前进两步,后退一步。——布鲁克斯《人月神话》

智能合约本质上是程序,既然是程序,缺陷就不可避免。即便是经过大量测试和审计的智能合约,仍然可能会有漏洞。合约的漏洞如果被攻击者利用,可能造成用户资产的损失,导致严重的后果。漏洞的修复往往需要通过合约升级来实现。除了漏洞修复,新特性的加入也需要合约升级。因此合约的可升级性非常有必要。本期Rust智能合约养成日记,将为大家介绍Rust合约的升级方式。2.Solidity合约常见升级方式

以太坊中,智能合约具有不可变性,一旦被部署到链上,没有人可以改变它。

那么如果合约存在漏洞或合约需要添加新功能,该如何修改合约的代码?解决方案是将新的合约部署到区块链上。

TRC20-USDT流通量突破309亿枚,独立地址数突破422万:据最新消息,TRC20-USDT流通量已突破309亿枚,独立地址数已突破422万。TRC20-USDT是Tether公司基于波场TRON网络发行的锚定美元的稳定币,转账速度快、低手续费的特点已经吸引了大批用户,且已经有Binance、Huobi、OKEx、Bitfinex、MXC抹茶、BiKi、KuCoin、Gate.io、P网Poloniex等多家交易所的支持。基于TRC20版本的USDT将大幅提升波场TRON现有的去中心化应用生态系统,带来更高的整体价值存储和更强的去中心化交易所流动性,并为企业级合作伙伴与机构投资者提供更便捷的区块链入口。[2021/5/13 21:57:12]

该方法面临的挑战是,solidity每次部署合约后,合约都会被分配一个唯一的地址。因此所有用到了该合约的DApps都需要修改合约地址来适配新的合约。此外,旧版本合约中的状态需要迁移到新版本合约中,状态较为复杂的合约迁移的工作量很大,容易出错,而且复制数据的Gas费用高。

TRC20-USDT流通量突破219亿枚,独立地址数突破284万:据最新消息,TRC20-USDT流通量已突破219亿枚,独立地址数已突破284万。TRC20-USDT是Tether公司基于波场网络发行的锚定美元的稳定币,转账速度快、低手续费的特点已经吸引了大批用户,且已经有Binance、Huobi、OKEx、Bitfinex、MXC抹茶、BiKi、KuCoin、Gate.io、P网Poloniex等多家交易所的支持。基于TRC20版本的USDT将大幅提升波场现有的去中心化应用生态系统,带来更高的整体价值存储和更强的去中心化交易所流动性,并为企业级合作伙伴与机构投资者提供更便捷的区块链入口。[2021/4/12 20:11:39]

因此,我们通常采用数据和逻辑分离的架构,将数据保存在一个不处理任何逻辑的合约中,所有的逻辑在另一个合约中实现。通常合约升级修改的是逻辑,使用该架构只需要升级逻辑合约,不需要担心状态迁移。

TRC20-USDT流通量突破134亿枚,独立地址数突破211万:据最新消息,TRC20-USDT流通量已突破134亿枚,独立地址数已突破211万。据悉,TRC20-USDT是Tether公司基于波场网络发行的锚定美元的稳定币,转账速度快、低手续费的特点已经吸引了大批用户,且已经有Binance、Huobi、KuCoin、Gate.io等多家交易所的支持。基于TRC20版本的USDT将大幅提升波场现有的去中心化应用生态系统,带来更高的整体价值存储和更强的去中心化交易所流动性,并为企业级合作伙伴与机构投资者提供更便捷的区块链入口。[2021/2/17 17:24:43]

为了解决这个问题,可以使用代理合约,具体架构如下图所示。

代理合约用来来存储数据,并且使用delegatecall调用逻辑合约A,这样合约A读写的数据都存储在代理合约中。如果需要升级逻辑合约,部署新的合约B,然后发一条交易给代理合约,让代理合约指向新的逻辑合约B即可。

自由职业市场Braintrust计划通过Compound分叉币提高招聘效率:金色财经报道,为企业寻找专业人才的自由职业市场Braintrust于周三退出了保密模式,并获得了由True Ventures、Homebrew Ventures、Uprising Ventures、Galaxy Digital、IDEO CoLab、Kindred Ventures和Vy Capital支持的600万美元的种子融资。该公司将完全使用Compound区块链的分叉币,以在雇佣决策中削减中间人。据悉,其最小化费用并为用户带来价值的新网络模型将由区块链代币支持。其代币将允许用户设置平台的管理参数,并根据操作(例如成功引荐)进行支付。[2020/6/25]

3.NEAR合约升级常用方法

接下来我们将以StatusMessage项目为例,给大家介绍NEAR合约的常用升级方法,如下是StatusMessage的合约代码

我们先将编译好的合约部署在测试网上。

transaction如下

接着我们调用set_status方法,向合约中存储数据

transaction如下

接下来我们详细讨论两种不同的合约升级情况

3.1合约数据结构未被修改

例如我们增加一个函数:

编译后使用deploy重新部署:

编译后使用deploy重新部署:

接着我们调用get_status方法读取之前写入的数据

原来合约中的数据能成功读取:

这是因为NEAR合约可以重复部署,如果一个账户已经部署过合约,再次调用neardeploy命令可以将新的合约代码部署到该账户上。如果我们只修改合约逻辑,不涉及数据结构的修改,可以直接使用neardeploy部署新的代码。

3.2?合约数据结构被修改

我们将该合约升级,修改了原来的数据结构,去除了records,新增了taglines和bios

我们尝试再次重新部署:

合约还是成功部署了:

但是我们调用get_tagline方法读取存储的数据:

会发现出错了,错误提示如下:

Cannotdeserializethecontractstate.

具体的transaction见:

https://explorer.testnet.near.org/transactions/4hQQ1zAwU5bsbfb6tA6DQDqjmFcHsBwaBctdHaPiCKHu

这是因为合约的状态是以序列化数据的形式进行持久化存储的,重新部署合约后,代码中的数据结构变了,状态没有变,新的数据结构匹配不上旧状态,就出错了。

3.3?Migrate升级智能合约

NEAR提供了Migrate方法去帮助我们对合约进行升级,针对3.2中所出现的错误,我们在新的合约中加入migrate方法:

代码中的#表示在migrate函数执行前不要加载状态。接着,我们重新部署合约,但是在部署的同时调用migrate方法

如下所示,该合约被成功部署:

我们尝试调用合约新增的方法get_tagline去获取新增的数据taglines

可以看到方法被成功调用,旧的合约数据也被迁移到新的合约

4.合约升级的安全考量

合约安全升级首先要考虑权限控制,一般合约只能由开发者或DAO升级。上一期Rust智能合约养成日记合约安全之权限控制介绍了特权函数的访问控制,一般合约的升级函数为onlyowner函数,确保只能由owner调用。

我们推荐尽可能将合约的owner设置为DAO,通过提案和投票来共同管理合约。因为owner设置为个人账户,合约高度中心化,owner可以随意修改合约数据,还存在owner私钥丢失的风险。

除此之外,开发者在做合约迁移时,还可以考虑以下几点建议

在迁移函数前加入#,确保执行迁移函数前不加载状态。

迁移完成后尽量删除迁移函数,确保迁移函数只被调用一次。

新增的数据结构在迁移时完成初始化。

标签:SDTUSDUSDTPLOglobalusdtokenUSDC价格usdt币怎么挖矿PLOCK币

NEAR热门资讯
ING:Gate.io’s Current Lending & Single-Asset Vault Volume Reaches 3,207,180 ?USDT?_GATE

Thesingle-currencyminingpoolUSDThasthehighestlendingvolumetoday,reaching3,207.

HTT:ZT創新板即將上線NFTY_TPS

親愛的ZT用戶: ZT創新板即將上線NFTY,並開啟NFTY/USDT交易對。具體上線時間如下: 充值:已開啟; 交易:2022年3月30日18:00; NFTY 項目簡介:NFTY是一個跨鏈W.

SDT:TRC20-USDT流通量突破417亿枚_USDT

据最新消息,TRC20-USDT流通量突破417亿枚,在USDT总流通量中的占比进一步提升。此外,TRC20-USDT持有账户数现已突破1186万.

MAC:4.2主流走出强势反弹,日内还能继续下跌吗?_以太坊

币圈咨询4月2日热点; 1.V神发文支持比特币最大主义:比特币是值得持有的强大资产2.美国参议员提出法案禁止美联储直接向个人发行CBDC并与私营部门竞争3.

QUID:Web2资金进入Web3,都在用哪些产品和工具?_STO

加密资产经过长时间的发展和考验,已经在全球金融领域中拥有了属于自己的位置。根据Coinmarketcap数据显示,截至目前,加密市场的总市值已经达到2万亿美元,整个生态的发展也越加完善.

EDO:数据解读「NFT Farmer」MOBOX的崛起_WEB

本文来自Dapprader,原文作者:IanKanaOdaily星球日报译者|Moni如今,玩赚类游戏开始结合DeFi和NFT的优势,利用金融机制和游戏体系来赋予用户权力.