在上一期的技术视点中,我们讲解了合约原生 API,描写了如何利用智能合约展开ONT / ONG 账户。本期我们将辩论如何通过 Upgrade API 来展开合约升级。合约升级共计2个 API,网卓新闻网,分别为 Destroy 和 Migrate。
其用法如下:下面我们明确描写一下这两个 API 的用于方法。在这之前,小伙伴们可以在本体智能合约开发工具 SmartX 中新建一个合约,回来我们展开操作者。
跟以前的 API 介绍一样,在文章最后我们将得出这次介绍的视频示例。2. Upgrade API 用于方法用于这两个函数前必须引进。
下面两条语句分别引进了 Migrate 和 Destroy 这两个函数。from ontology.interop.Ontology.Contract import Migratefrom ontology.interop.System.Contract import Destroy2.1 Destroy APIDestroy API 用作封存合约,原有合约将不会在链上被移除。下面是用于该 API 的示例代码。from ontology.interop.System.Contract import Destroyfrom ontology.interop.System.Runtime import Notifydef Main(operation, args):if operation == "destroy_contract":return destroy_contract()return Falsedef destroy_contract():Destroy() # 调用destroy 封存此合约Notify(["The contract has been destoryed"])return True在 SmartX 上可以看见该示例代码的运营结果:将以上代码粘贴至 SmartX 编译器并部署;再度页面部署会弹出有「合约部署告终,该合约早已部署过」,因为链上早已不存在完全相同合约;3. 运营 destroy_contract 函数封存合约;4. 再度页面部署合约,不会找到合约可以再度部署,会再行插入「合约部署告终,该合约早已部署过」。
这可以证明原本合约早已在链上被封存。2.2 Migrate APIMigrate API 用作迁入合约, 原有合约将不会被新的合约代替,原有合约中的数据也将自动迁入到新的合约。迁入数据量越大,迁入费用越高。迁入顺利后,原有合约不会被移除。
特别注意:合约中的资产会被自动迁入,必须提早并转回头。否则该合约中的资产将无法拿回,相等于被转至黑洞地址。
Migrate 函数的起源于参数列表如下:某种程度,我们得出用于 Migrate 函数的合约示例代码:from ontology.interop.Ontology.Contract import Migratefrom ontology.interop.System.Runtime import Notifyfrom ontology.libont import AddressFromVmCodedef Main(operation, args):if operation == "migrate_contract":if len(args) != 7:return Falseavm_code = args[0]need_storage = args[1]name = args[2]version = args[3]author = args[4]email = args[5]description = args[6]return migrate_contract(avm_code, need_storage, name, version, author, email, description)return Falsedef migrate_contract(avm_code, need_storage, name, version, author, email, description):res = Migrate(avm_code, need_storage, name, version, author, email, description) # 调用Migrate 迁入此合约if res:Notify(["Migrate successfully"])new_contract_hash=AddressFromVmCode(avm_code) # 计算出来新的合约地址Notify(new_contract_hash) # 打印机出有合约地址return Trueelse:return False在 SmartX 上可以看见该示例代码的运营结果:1. 将以上代码粘贴至 SmartX 编译器,放入参数。参数放入时必须特别注意以下两点:a. 要证实 avm_code 在链上不不存在,不然不会报错;b. Migrate 必须较高的 gas limit,所以运营函数时要调整 gas limit。2. 部署顺利后,可以从控制器获得新的合约哈希。该示例中,be4606c4663081b70f745ed9fc64d4c3b0d9c183 即为新的合约哈希。
本文来源:新京葡最新官网-www.hikingwonders.com