在CITA上如何升级智能合约?有无最佳实践

在CITA上如何升级智能合约?有无最佳实践

可引入代理合约,此处可咨询社区企业获得商业服务支持。

哦 原来talk不适合技术讨论么? 多一点的讨论都是建议商业服务支持。。。。。

欢迎讨论,可以提出具体的实现方法和思路供讨论,不然您的问题比较难回答。毕竟该特性与场景有较大关系,大部分厂商在业务上做了自己的定制与开发。推荐几家厂商供参考,例如 荷月科技,轻信科技,矢链科技在这里都有相关实现。

谢谢。 都有那些思路? 目前联盟链的应用场景还是比较有限吧,无非是溯源,存证,数字积分之类的。 简单列下,分析下就可以了。溯源的比较多,单独讲下溯源的也可以。
这些厂商的方案介绍是公开的吗?还是说我必须一个个去找到商务,然后再找到技术,联系获得吗?

智能合约升级也可以看成是逻辑与数据等解耦。即有的合约负责存储,有的合约负责逻辑。再考虑升级因素,前面可以放置代理合约,用来指向不同版本的逻辑或存储。
如果要进行学习
可以参考例如以太坊的ENS:https://github.com/ensdomains/ens
或者一些去中心化的交易所合约: https://0x.org/
以及此前我们写过的这篇文章:https://mp.weixin.qq.com/s/qTnmXvoPqr0JEV5NtUcySw
里面的参考代码地址:https://github.com/CryptapeHackathon/SummerWars
如果需要联系厂家,可以私信我。

从技术角度上讲,其实合约升级是一个改变合约 code 的一个行为。
你能怎么升级,取决到你对这条链的控制权限有多大,如果

  • 你可以控制链的管理员私钥,并且可以控制所有链的节点;你可以直接改其中的 code, 甚至可以重构整个链。
  • 你只控制链的管理员私钥,而不能控制所有链节点,你可以使用 amend 的方式来变更你的 code 。
  • 但如果你仅是链的使用者,你必须精心设计你的合约,使得它具备升级的能力。如 @dustin 所说,需要做层次化的设计。网上应该有很多材料,如 如何利用OpenZeppelin编写可升级的智能合约

后两者是在链上留下变更记录的,所有参与者都可以看到你的行为;而第一种,你可以直接修改节点的数据库(有一定的技术门槛)而不留痕。

至于最佳实践,还真得具体问题具体分析。

1赞

:+1: :+1: 感谢。非常有用的建议。收藏了。 :pray:
智能合约需要有自己迭代升级的能力,毕竟变化才是绝对的。
这个是对数据不可篡改理念的修正,但因为留痕,所以一样有意义。原教旨的绝对不可修改数据,即便证明是巨大错误也要坚持不改的想法我个人不认同。

@myfreshcity 做一个合约代理,就像接口版本控制一样,可以访问合约的不同版本,也可以留存合约内容;样例:https://github.com/UDLD/Solidity-demos/tree/develop 代理合约和测试合约均在,Java版的使用demo也在