首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【翻译】升级智能合约(Hardhat)

原文链接 使用OpenZeppelin升级插件部署的智能合约可以通过升级来修改代码,同时保留原合约地址、状态和余额。这让帮助我们为项目添加新功能,或修复在生产中可能发现的任何错误。...在本指南中,我们将学习: 为什么升级很重要 使用升级插件升级我们的盒子。 了解升级在引擎盖下是如何工作的 学习如何编写可升级合约 什么是可升级的合约 以太坊中的智能合约默认情况下是不可更改的。...智能合约的用户总是与代理进行交互,代理永远不会改变其地址。这使您可以推出升级或修复错误,而无需要求用户在他们的端部改变任何东西 - 他们只是一如既往地与相同的地址进行交互。...可升级合约的局限 虽然任何智能合约都可以进行升级,但Solidity语言的一些限制需要解决。在编写初始版本的合约和我升级新版本时,都会出现这些问题。...接下来的步骤 现在你已经知道如何升级智能合约,并且可以迭代开发你的项目,是时候把你的项目带到测试网和正式网中去了。你可以放心,如果出现bug,你有工具来修改你的合约并修复它。

2.5K10

智能合约中:可升级的代理合约

这样做的主要目的包括: 可升级性:通过代理合约,实施合约可以在不影响外部接口的情况下被替换或更新,从而实现合约的升级。...资源共享:代理合约可以持有资源(如ETH或NFT),而实施合约可以访问这些资源,但不直接拥有它们。 2. 代理合约适合应用在什么业务场景?...代理合约特别适用于需要动态升级、资源隔离和增强安全性的场景,具体包括但不限于: 可升级的智能合约:允许合约逻辑的更新,而无需用户重新授权或进行新的部署。...去中心化金融(DeFi)应用:如借贷协议、流动性池,这些需要定期调整参数或添加新功能的场景。 NFT市场:代理合约可以用来控制NFT的交易流程,例如,实现更复杂的拍卖机制或版税分配。...通过upgradeTo函数,可以在不改变外部接口的情况下升级_implementation地址指向的新版本实施合约。

19110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    写出可升级的智能合约

    译文出自:登链翻译计划[1] 译者:Alvan[2] 校对:Tiny 熊[3] 随着其自身发展,智能合约已经远非一个基础的“合约”而已了。现在我们用智能合约创造了一整个生态!...主从合约(Master-Slave contracts) 主从合约是智能合约可升级化最基础和易懂的技术之一。这个方法就是在部署其他所有合约的同时,部署一个主合约( master contract )。...我们只需要把新的从合约部署上去然后在主合约上修改地址记录,既可以完成合约升级了。这自然不是开发可升级合约的最佳方法,但确是最简单的。这种方法有很多限制,比如老合约的数据和账户很难迁移到新合约。...数据合约做成永久的,不可升级的。逻辑合约可能多次升级,而数据合约去响应它的变化。...你也可以在 github 上看到我们的代理合约[7]。 希望这篇文章能帮您写出可升级的智能合约!

    79320

    以太坊智能合约升级策略

    本文是对以太坊中可升级智能合约领域的各种实现策略的总结 ,目的是汇总迄今为止的相关资源,以帮助我们在设计智能合约时,考虑如何对其进行升级和更新。...100%可升级机制 目前有两种主要策略用来实现可升级的智能合约: 使用代理合约 将逻辑和数据分离成不同的合约。 这两种方法要解决的根本问题是如何更新合同的逻辑,同时仍然保留对合同状态的访问。...在此策略中,智能合约的核心功能可以保留为不可升级。 其他可能不太完整或更复杂的组件则 采用可升级策略实施。...由于这个原因,它不是0x合约系统的可升级部分。 其他挑战 在所有情况下,都需要对是否保持智能合约的不变性进行取舍。 创建可选的可升级智能合约系统对用户来说是可能并且有价值的,但是增加了复杂性。... 可升级的智能合约 , Github项目 2017-08-21 Lukas K : 可升级的智能合约。

    97720

    本体技术视点 | Python智能合约教程之合约升级

    01 导语 在上一期的技术视点中,我们介绍了合约原生 API,讲述了如何利用智能合约进行ONT / ONG 转账。本期我们将讨论如何通过 Upgrade API 来进行合约升级。...合约升级共有2个 API,分别为 Destroy 和 Migrate。其用法如下: 下面我们具体讲述一下这两个 API 的使用方法。...03 结论 本次技术视点中我们介绍了本体区块链的 Upgrade API,开发者可以用来进行合约升级。...合约升级共有2个 API,其中 Destroy API 用于销毁合约,Migrate API 用于迁移合约。希望教程会对大家有帮助。...下一期我们将介绍本体 Python 智能合约语法的 Static & Dynamic Call API,讲述如何在 Python 智能合约中进行静态调用和动态调用。

    49220

    如何利用delegatecall进行以太坊智能合约升级

    本文作者:powervip[1] 以太坊智能合约升级 在以太坊[2]智能合约的开发过程中,对于一些复杂的合约开发,要开发出完美没有bug的智能合约[3],要求是相当高的。...即使编写出来的智能合约能完美没有bug,也很难保证以后的需求和应用业务逻辑一成不变。所以,在开发智能合约的同时,就要考虑好以后的合约更新和升级问题。...思路 以太坊智能合约的更新和升级,其中一种思路就是:在智能合约的编写过程中,要做到数据和应用逻辑的分离。简单来说,就是把数据和应用逻辑分别放在2个独立的合约里(本文称之为数据合约和业务合约)。...Solidity[4]有三种合约间的调用方式 call、delegatecall 和 callcode。其中,delegatecall可作为智能合约升级的一个较好的途径。...为了演示合约升级,我故意把contract B中的业务逻辑函数calcSum()中的加法运算故意写成乘法运算,以便后面进行合约升级。

    79330

    Foundry之使用OpenZeppelin插件进行智能合约升级

    合约的可升级性智能合约在部署后,通常无法像传统软件一样直接进行修改或更新。这是因为区块链上的智能合约一旦被部署,就会被记录在区块链上,并且其代码是不可更改的。...这种不可变性是区块链的一个重要特性,但也带来了一些问题,尤其是在智能合约的升级和维护方面。...具体来说,智能合约的可升级性主要有以下几个原因和优势:修复漏洞和错误:智能合约在开发和部署后,可能会发现潜在的漏洞或缺陷,无法通过传统方式进行修复。...可升级合约开发升级智能合约是一个多步骤且容易出错的过程,因此为了尽量减少人为错误的可能性,使用一个尽可能自动化该过程的工具是理想的。...OpenZeppelin提供了一系列的插件,可以帮助开发者在Solidity智能合约中实现可升级性。下面以Foundry为例,介绍如何使用OpenZeppelin插件进行智能合约升级。

    12210

    如何利用OpenZeppelin编写可升级的智能合约

    智能合约部署后就不能变更(设计上的不变性)。另一方面,软件质量在很大程度上取决于迭代升级和修补源代码的能力。...在这篇文章中,我们将学习: 1.为什么我们需要升级智能合约?2.了解升级是如何进行的?3.使用OpenZeppelin CLI[1]轻松编写/管理“可升级”智能合约。...5.可升级合约的一些局限性和解决方法 如果您只是在寻找一种写可升级合约的方式,并且不想经历“这一切的工作原理”,那么请直接转到第三部分: OpenZeppelin Upgrades[3]。...为什么我们需要升级智能合约 默认情况下,以太坊中的智能合约是不可变的。一旦创建了它们,就无法对其进行更改,从而有效地充当了参与者之间牢不可破的合约(Tiny熊注:指因为不变性提供了参与者的信任)。...•NuCypher的可升级合同方法[26]•升级智能合约[27]•撰写可升级合同[28] 翻译自:https://simpleaswater.com/upgradable-smart-contracts

    3.7K61

    2018-09-19 以太坊智能合约升级实践

    本文学习《深度剖析智能合约升级——inherited storage》实现,过程中遇到的坑在这里记录 过程中多次请教文章的作者王铁塔,这里也表示感谢 1、拉取代码 git clone https:/.../Upgradeable.sol'; 3、 如何初始化 a、部署Registry合约: 先要修改一下这个合约,增加变量 UpgradeabilityProxy public proxy ; 修改函数createProxy...(V1),并确保它继承了Upgradeable合约 在remix选择文件Token.sol,选择TokenV1_0,点击deploy c、向Registry合约中注册这个最初版本(V1)的地址 直接在发布后的...如何升级 a、部署一个继承了你最初版本合约的新版本(V2),V2必须继承V1 在remix选择文件Token.sol,选择TokenV1_1,点击deploy b、向Registry中注册合约的新版本V2...调用approve,参数0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c,100,调用成功,说明合约升级成功 5.

    49940

    如何编写一个可升级的智能合约

    写在前面 阅读本文前,你应该对以太坊、智能合约及Solidity语言有所了解,如果你还不了解,建议你先看以太坊是什么 当智能合约出现bug 一方面正式由于智能合约的不可修改的特性,因为只要规则确定之后,...我们知道一个智能合约包含两部分: 代码逻辑和数据,而代码逻辑又是最容易出问题的部分, 如在实现如下合约时,由于手抖在写addTen()时,10写成了11。...如果需要更新控制合约(如修复了addTen)则重新执行第2-3步,同时对老的控制合约执行denyAccess()。...大多数情况下,和用户交互的是DApp, 因此当控制合约升级之后,需要升级DApp,使之关联新的控制合约。...尽管合约可以通过本文的方式升级,但我们依然要谨慎升级,因为升级表示你可以重写逻辑,会降低用户对你的信任度。 本文介绍升级方法更多的是一种思路,实际项目中可能会对应多个控制合约及数据合约。

    1.3K10

    2018-09-20 以太坊智能合约升级实践2

    ,因此我抽取了全部必须的合约代码,并做了恰当的修改,然后演示如何在remix环境实现智能合约的升级功能,至于合约升级功能的原理需要参考以下两篇文章: 1、智能合约升级模式介绍 — 入门篇 https:/.../www.jianshu.com/p/e53a95ed1ad7 2、深度剖析智能合约升级——inherited storage https://www.jianshu.com/p/dad1f13e0949...如何通过remix部署可以升级的智能合约,需要参考本文 1、拉取代码 git clone https://github.com/oracle3/upgradable_contracts.git 2...,以后合约的调用和升级都是通过这个地址实现 6、通过代理调用第一个版本的合约 如图所示,打开文件MyContract.sol,选择MyContract_V1,在At address填写proxy的地址:...本来合约调用通过合约部署的地址调用,这里通过代理方式调用的好处是无论合约如何升级,代理的地址都不会发生变化,确保了调用接口的一致性 7、部署新版本合约 在remix中打开文件MyContract.sol

    35820

    如何在.NET应用中访问以太坊智能合约【Nethereum】

    在这个教程中,我们将首先编写并部署一个简单的智能合约,然后创建一个简单的.NET应用,并使用Nethereum来访问以太坊上的智能合约。...Nethereum是通过以太坊节点旳标准RPC接口访问智能合约,因此使用Nethereum可以对接所有的以太坊节点实现,例如geth或parity。...智能合约开发与部署 首先安装开发用以太坊节点软件Ganache: ~$ npm install -g ganache-cli 然后安装以太坊开发框架Truffle: ~$ npm install -g....Net应用开发与智能合约访问 创建一个新的控制台项目,添加对如下开发包的依赖: Nethereum.Web3 Nethereum.Contracts 然后按如下内容修改program.cs: using...用Nethereum很容易就可以为.Net应用添加访问以太坊智能合约的能力,由于Nethereum基于.NET平台,因此它可以用于.NET Core应用、.NET Standard应用、Xamarin以及各种

    1.7K20

    以太坊实现智能合约升级的三种代理模式

    但最大的缺点是,智能合约一旦部署后,则无法更改合约源码。中心化应用程序(例如Facebook或Airbnb)的开发人员会经常对程序进行更新,修复bug或引入新功能。...如果有一种方法可以在智能合约部署后,更新源代码…… 引入代理模式 虽然无法更新已部署的智能合约代码,但是可以通过设置一个代理合约架构,进而部署新的合约,以实现合约升级的目的。...重要要点 这种方式最实用,目标合约与代理合约耦合性最低。 关于合约升级 重要提示:如果您的逻辑合约依赖于其构造函数来设置一些初始状态,则在注册到代理合约后需要重新初始化该参数。...您的目标合约应如下所示: [contract Token is Ownable { ......如果您希望构建简单的东西,并且不会在未来的合约有巨大的变化,则可以参考这个非常简单的示例[19]。

    3.2K20

    以太坊一种可升级的可信存证智能合约设计与实现

    如果存证的内容本身能够自证真实性(如电子合同,已有相关参与方的签名),这种业务模型是可以满足需求的。...由于采用了控制层的代理结构,对于业务逻辑升级时,只需要部署新的业务逻辑,然后将新合约的地址注册到代理合约中,即可完成合约升级,并且对外提供服务的合约地址不变。 ?...代理模式的详细内容可阅读我之前写的另一篇文章《以太坊智实现智能合约升级的三种代理模式》[1] 代理合约的核心代码如下所示。...此时,已完成了逻辑合约的升级。...References [1] 《以太坊智实现智能合约升级的三种代理模式》: https://learnblockchain.cn/article/1102 本文作者:六天

    96720

    铂链第4课 如何在BOTTOS实现最简智能合约Hello World?

    (2) 编译合约产生WASM文件 上面合约代码其实铂链的编译工具已经自带了,辉哥就不重复上传了。...进入合约目录testHelloWorld,然后运行下面命令编译合约 python .....,其中action_name 是方法名,例如 "start"函数, type 是调用合约所要的参数; tables :合约持久化数据访问接口描述,即合约保存的数据描述,其中table_name 是表名...2.3 部署和运行合约 (1)部署智能合约与ABI文件 部署合约d的命令如下,该命令成功后将返回BCLI成功发送的Transaction信息。 ..../bcli contract deploy 参数描述如下: --contract 合约名 --code 合约文件(.WASM)所在路径 --filetype 合约文件类型:wasm/

    61730

    开发人员最难掌握的Web3.0概念

    代理合同如何在幕后运作 代理合约只定义了一个方法:回退函数(https://solidity.readthedocs.io/en/v0.6.12/contracts.html#fallback-function...有关详细示例,我建议您阅读OpenZeplin 关于可升级智能合约的文档的这一页(https://docs.openzeppelin.com/learn/upgrading-smart-contracts...可升级智能合约的优缺点 可升级的智能合约已经变得非常流行。然而,对于可升级合同是好事还是坏事,业内存在分歧。...结论 如果您是 Web 3.0 的新手或正在考虑学习 Web 3.0 开发,那么了解智能合约的不可变性质至关重要。这样,您就可以规划需要升级智能合约的场景。...您是采用更乏味的传统方法还是使用 OpenZeppelin 的可升级智能合约方案,取决于您的用例——以及您愿意做出的权衡。但是,无论哪种方式,都要制定计划。

    94620
    领券