GIC:手把手部署以太坊可升级智能合约

本文作者:区块链行业专业打杂-为理想而活

为什么要升级合约?

根据设计,智能合约是不可变的。另一方面,软件质量在很大程度上取决于升级和修补源代码以生成迭代版本的能力。尽管基于区块链的软件从技术的不变性中获益匪浅,但修复错误和潜在的产品改进仍然需要一定程度的可变性。OpenZeppelinUpgrades通过为智能合约提供易于使用、简单、健壮和可选的升级机制来解决这一明显的矛盾,该机制可以由任何类型的治理控制,无论是多重签名钱包、简单地址还是复杂的DAO。

首次部署

需要部署三个合约,分别是逻辑合约,代理管理合约,代理合约。逻辑合约就是我们自己的业务合约,需要满足OpenZeppelin可升级合约的条件。以下业务合约以逻辑合约为例进行说明。本文使用remix部署合约,如需快速部署请参考:用Hardhat进行升级部署|登链社区

Robinhood将允许用户在交易日内24小时买卖个股和ETF:5月11日消息,股票和加密货币交易平台 Robinhood 将从 5 月 16 日起允许部分用户在一周的 5 个交易日内 24 小时买卖个股和 ETF,包括苹果、特斯拉、亚马逊等个股及 ETF 在内的 43 种证券,未来计划扩大范围,且到 6 月所有客户都将能进行这样的交易。其中客户可以在限价订单流程中下达 24 小时市价订单,输入他们愿意为证券支付的最高价格或者他们愿意出售的最低价格,然后选择 24 小时市场交易时段并选择限价订单应在何时执行或到期。[2023/5/11 14:56:29]

第一步,逻辑合约

首先部署逻辑合约。

//SPDX-License-Identifier:MITpragmasolidity^0

动态 | 调研机构CBInsights发布“Fintech 250” 多家区块链企业入选:据Bitdays消息,知名风投调研机构CBInsights近日发布了金融科技企业250强榜单“Fintech 250”,Ripple、Coinbase等多家区块链、加密货币行业企业入选。[2018/10/24]

mapping(string=>uint256)privatelogic;eventlogicSetted(stringindexed_key,uint256_value);functionSetLogic(stringmemory_key,uint256_value)external{logic=_value;emitlogicSetted(_key,_value);}functionGetLogic(stringmemory_key)publicviewreturns(uint256){returnlogic;}functionGetInitializeData()publicpurereturns(bytesmemory){returnabi

LTC、QTUM将于3月8日上市Cobinhood:根据Cobinhood官方消息,将在3月8日上线LTC、QTUM。Cobinhood是美国完全零手续费的数字货币交易所。自今年1月下旬,Cobinhood不断上新币。目前LTC全球均价192.93美元,跌幅达4.77%;QTUM全球均价23.56美元,跌幅达6.05%。[2018/3/7]

}

选中逻辑合约并部署。

image

image.png

部署新的业务合约,结束后应有三个逻辑合约实例

image.png

新的逻辑合约地址:0xb27A31f1b0AF2946B7F582768f03239b1eC07c2c

印度政府计划2023年第一季度最终确定其对加密货币合法性的立场:9月21日消息,印度政府计划在明年2023年2月至3月之前最终确定其对加密货币合法性的立场,在5月之前符合金融行动特别工作组(FATF)的要求。此外,Outlook India周一援引一位高级政府官员表示,预计10月将发布金融稳定委员会(FSB)报告,有助于印度政府决定是禁止加密货币交易还是为处理印度的加密货币交易提供法律框架。(Bitcoin.com)[2022/9/21 7:10:33]

替换旧的逻辑合约

此时调用部署好的管理合约进行升级,此合约提供了两个升级方法

upgrade,需要传入proxy地址,新的逻辑实现地址。

upgradeAndCall,需要传入roxy地址,新的逻辑实现地址,初始化调用数据。

由于数据是保存在代理合约中,这份数据已经初始化过了,不需要再初始化,所以调用upgrade方法即可,传入参数如下:

代理合约地址:0xddaAd340b0f1Ef65169Ae5E41A8b10776a75482d

新的逻辑合约地址:0xb27A31f1b0AF2946B7F582768f03239b1eC07c2c

测试新逻辑合约

此时升级已完成,也是最后一步。

此时不需要修改任何地方,只需要使用已经传入代理合约地址的AtAddress方法。

image.png

生成后将有四个逻辑合约实例:1.首次部署的逻辑合约,2.代理后的逻辑合约,3.部署的新逻辑合约,4.以升级的逻辑合约

调用生成的新逻辑合约中的GetLogic方法,传入,此时应返回100,这证明您的合约以成功升级,因为旧的逻辑合约传入了,修改后的逻辑合约中GetLogic方法在返回值上加上了,若为99证明升级失败。

至此,可升级的代理合约就部署并测试完成。

参考资料

区块链行业专业打杂-为理想而活:https://learnblockchain.cn/people/1877

用Hardhat进行升级部署|登链社区:https://learnblockchain.cn/article/2908

免责声明:作为区块链信息平台,本站所发布文章仅代表作者个人观点,与链闻ChainNews立场无关。文章内的信息、意见等均仅供参考,并非作为或被视为实际投资建议。

本文来源于非小号媒体平台:

登链社区

现已在非小号资讯平台发布105篇作品,

非小号开放平台欢迎币圈作者入驻

入驻指南:

/apply_guide/

本文网址:

/news/10311795.html

免责声明:

1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险

2.本文版权归属原作所有,仅代表作者本人观点,不代表非小号的观点或立场

上一篇:

每周编辑精选WeeklyEditors'Picks

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

链链资讯

[0:15ms0-3:388ms