火星链 火星链
Ctrl+D收藏火星链

UST:Rust智能合约养成日记(9)-ODAILY

作者:

时间:1900/1/1 0:00:00

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

1.合约升级的必要性

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

2.Solidity合约常见升级方式

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

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

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

EOS网络基金会创始人:Trust项目正式发布,将单独运营并在未来发行EVM代币:4月19日消息,EOS网络基金会在Twitter Space举办EOS EVM发布会活动,期间EOS 网络基金会创始人和首席执行官Yves La Rose宣布正式发布全新的官方EOS EVM平台Trust,并将其作为独立项目运营,近期Trust将正式开放开发者预览版本。另外,Yves还指出未来将发行名为EVM的代币,鼓励EOS DeFi发展,进一步完成生态的多样化,减少ENF的运营费用对于EOS网络代币通胀的依赖,助力打造更加成功的商业与价值闭环。EOS网络基金会是一个非营利性的组织,旨在倾听社区声音、传达社区意愿并扶持社区优质项目发展,成为EOS社区的信息共享桥梁,并为EOS生态提供资金、技术、运营、未来规划、生态构建等关键基础设施支持,进一步发挥EOS作为世界高性能治理型区块链的全部潜力。[2022/4/19 14:34:08]

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

加密资产管理公司Osprey Funds推出Osprey Polygon Trust:9月21日消息,加密资产管理公司Osprey Funds推出Osprey Polygon Trust。Osprey表示,这是美国第一个专门投资MATIC的基金产品。Osprey Polygon Trust目前可供合格投资者认购,最低投资额为10000美元。Osprey Funds计划尽快在OTCQX市场上线该产品,并在2023年1月之前免除所有投资者的管理费。Osprey的数字资产投资产品还包括Osprey Bitcoin Trust(OBTC)、Osprey Polkadot Trust、Osprey Algorand Trust和Osprey Solana Trust。(Businesswire)[2021/9/21 23:41:12]

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

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

Chorus One公布为Lido构建的SOL流动性质押协议进展:即将启动主网:为Lido构建Solana代币SOL质押服务的PoS节点专业服务商Chorus One公布路线图,该由Lido DAO治理的流动性质押协议名为“Lido for Solana”,允许通过Lido质押SOL来获得流动性质押代币stSOL,以将流动性质押引入Solana和将stSOL集成到Solana DeFi生态系统及其他领域。[2021/8/7 1:40:56]

3.NEAR合约升级常用方法

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

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

transaction如下

RNS Solutions和Trustedchain合作为伊斯兰开发银行集团开发区块链平台:6月14日消息,区块链软件开发公司RNS Solutions Pte Ltd.宣布,与ICD伊斯兰开发银行集团、Trustedchain软件开发和咨询公司达成合作,RNS Solutions和Trustedchain将开发一个基于区块链和人工智能的金融知识 (FinLit) 平台,该平台将设有一个基于区块链技术的众筹实验室(crowdfunding lab)。(Bitcinist)[2021/6/14 23:35:27]

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

transaction如下

Crust “方舟计划”激励测试网将于11月30号 22:00 开始计算积分:据官方消息,Crust Network 激励测试网“方舟计划”将于 11 月 30 号(今晚) 22:00 ?正式计算积分。截至目前,共有超过 260 个节点加入“方舟计划”,节点遍布中国、新加坡、俄罗斯、巴西、乌克兰、希腊、奥地利、德国、法国、英国、芬兰、加拿大、美国等国家。Crust 旨在构建一个重视数据隐私和所有权的分布式云生态系统。Crust Network 先后加入 Substrate Builders Program、Web3.0 Bootcamp,以及获得 Web3 基金会 Grant 。登陆 Crust Network 官方网站点击加入“方舟计划”按钮,即可参与活动。详情点击原文链接。[2020/11/30 22:35:57]

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

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.3Migrate升级智能合约

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

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

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

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

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

4.合约升级的安全考量

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

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

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

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

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

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

标签:USTSOLTRUSTTRUustc币爆雷对用户进行赔偿了嘛Cryptosolartechtrustwallet钱包客服buildyourtrust

比特币交易所热门资讯
区块链:区块客周刊:V神登上《时代》杂志封面-ODAILY

2022.3.21第110期本期关键字亚马逊推出类元宇宙游戏;Binance获得运营执照;芒果TVAPP推出数字头像;林俊杰展示无聊猿饰品;Layer2赛道的领跑者;时尚行业发力NFT.

1900/1/1 0:00:00
COIN:电信3.0——第二章-ODAILY

自现代电信诞生以来,该行业一直以闪电般的速度创新、发展和进步。然而,近年来,这种情况有所放缓。硬件和软件供应商为了保持在高层的地位而扼杀创新,导致全球覆盖面积增长率下降.

1900/1/1 0:00:00
ETHER:盘点那些在熊市中一蹶不振的加密新星-ODAILY

Mar.2022,GraceDataSource:FootprintAnalytics区块链中的新项目层出不穷,虽然是一片蓝海但成功的仍然是少数.

1900/1/1 0:00:00
ION:为科学提供一个去中心化的数据共享空间-ODAILY

科学数据的语料库是分散的、受访问控制的,它们的迅速增长已经超出了中心化服务的维护能力。点对点技术的最新发展使得建立一个对所有人开放的永久科学记录档案成为可能.

1900/1/1 0:00:00
NDR:Hundred与Agave闪电贷攻击事件分析-ODAILY

1.前言北京时间3月15日晚,知道创宇区块链安全实验室监测到Gnosis链上的借贷类协议HundredFinance与Agave均遭遇了闪电贷袭击.

1900/1/1 0:00:00
INE:Bitfinex一周简报(0404-0410)-ODAILY

链上数据:30分钟内火币地址向Bitfinex转账约1亿USDT链闻消息,据WhaleAlert显示.

1900/1/1 0:00:00