当前位置:主页 > 列表页 > 正文

NEAR发布以太坊彩虹桥升级和治理方案

2021-03-05 22:55 | 出处: Near中文社区



对任何智能合约(尤其是持有/管理大量通证的合约)来讲,可升级性流程及其治理都是重要的一个方面。该流程定义了谁能够以及如何通过上传一套新版本的合约执行代码来改变智能合约的行为。显然,可升级性流程本身也是可以不断加以调整和“升级”的。
本文旨在介绍智能合约可升级性模式,将其与彩虹桥架构进行匹配,并提出对这些升级进行治理等改进的阶段性计划。我们会在这里对提出的计划进行讨论,并根据社区和验证节点的评论加以调整并确定最终方案。当前我们需要对主要方案达成一致,具体细节则可以以后慢慢调整。
我们会在2021年3月16日(星期二)结束讨论,形成对可升级性计划的最终决定。我们会根据用户的反馈对介绍提议的原始文章不断更新。
为什么这很重要
只要人们有办法对合约代码进行更改,那么即便是已经经过审计和广泛测试的合约,仍然会由于版本的更新而出现严重漏洞,并最终给该合约持有的通证带来损失。这对彩虹桥合约是至关重要的。彩虹桥合约需要跟锁定通证打交道,对桥接的通证的铸造和销毁拥有全部控制权。这也是为什么所有的升级都应该接受全面测试和验证,尤其是在项目晚期阶段更应如此。
然而,安全方面有利有弊。在理想状态下,合约代码没有缺陷,所以不需要快速的或隐性的升级以修补关键漏洞(有关此类升级的影响,可参见‘以太坊是一片黑森林’以及‘逃离黑森林’这两篇文章)。在这种情况下,我们可以分阶段升级并联合多方代表就升级进行投票(时间周期往往很长)。对此类方法的使用已有先例,比如比特币协议升级就是采用的这类方法。不过遗憾的是,投票周期可能会持续数月之久。

文章一:
https://twitter.com/ilblackdragon/status/1367408735837188096

文章二:
https://samczsun.com/escaping-the-dark-forest/
现实中的合约是存在漏洞的,尤其是在早期阶段,这种情况尤为明显。因此当通证存在风险的时候,能够快速升级以解决此类问题,将升级时间缩至最短就变得很有必要。这样就把分阶段升级和投票的方法排除在外,因为黑客将能够分析升级代码,找到真正的漏洞所在并加以利用。然而,如果开发者未对升级进行充分测试,或者故意实施某些恶意行为,被锁定的通证仍然可能失窃。
不存在一体适用的解决方案:全部方案都有各种权衡。因为彩虹桥是NEAR生态中很重要的一部分,包括不打算使用彩虹桥的用户在内的每个人都应该知道彩虹桥的治理方式和升级方式。
问题范围

“彩虹桥架构第二版”增加了这一问题的复杂性。以下是关于彩虹桥架构的几个不同方面:

1. NEAR区块链


2. 以太坊区块链


3. 非区块链服务


非区块链服务可能会由任何人运行,彩虹桥的设计方式决定了即使是这些服务的错误行为也不会将资金置于危险之中。只要有一对未被破坏的区块中继器和监管者便足以拥有一套健康的和最新的彩虹桥基础设施,我们将能够快速运转起来。服务若发生任何问题,它们会修复漏洞并重启。我们鼓励社区或者通过托管副本提升冗余,或者开发监管者脚本,后者会在发现异常行为时抛出警告。
尽管定制化连接器对本次讨论来说似乎不是很重要,但有两点考虑需要我们注意:

  1. 如果我们能就连接器的可升级性提供一个建议方法(目的是避免核心彩虹桥升级出现的一些问题),这对开发者来讲将会是很有帮助的。

  2. 定制化的连接器正使用核心合约,合约的接口(方法、参数)未来可能会根据升级发生改变,所以这些连接器应该采用一种通用的升级方案。


此外,需要我们记住的是存储通证/数据的合约是连接器,而核心的彩虹桥合约的用途仅限于验证。因此,我们需要在升级期间对连接器合约多加留意。核心的彩虹桥合约能够被再次部署至新地址,并且不会对系统造成任何重大损害(转账会有些延迟,连接器需要更改核心彩虹桥的链接以及调用接口)。
现有方法
这篇来自 OpenZepplin的博客是讲述以太坊可升级性方法的最全面同时也是最新的一篇文章。若想了解更多信息,也可查看Consensys博客。

OpenZepplin:
https://blog.openzeppelin.com/the-state-of-smart-contract-upgrades/

Consensys:
https://consensys.github.io/smart-contract-best-practices/software_engineering/

简而言之,以下方法被广泛使用:

1. 注册表。一个特殊的“注册表”合约,可对合约的各个版本进行追踪。用户/合约在与合约交互之前应该从注册表中获得最新版本的合约的地址。


2. 参数/策略配置/特定功能。合约拥有更新参数或地址链接的方法,此类地址会执行该逻辑中的部分片段。


3. 代理。一个特殊的代理合约,只负责将代码调用委托给执行合约。


4. 可变合约(metamorphic contracts)。合约使用CREATE2操作码部署,能够在使用selfdestruct操作码之后进行升级


治理
除了可升级性,升级治理还有很多不同的方法:

1. 单一秘钥/外部拥有账户。一把单一秘钥能够对合约进行升级


2. 多签。M把秘钥中要有N把对升级进行签名


3. 时间锁。合约的所有者(合约或单个秘钥)能够筹划升级,从筹划交易开始到完成,一般耗时1~7天


4. 可暂停性(带有逃生舱)。合约可以执行一个暂停全部操作的方法。在暂停模式下,对合约进行的任何操作都是不被允许的,或者用户也可以中止该项服务。


5. “提交-展示”升级。安全升级提议(以哈希形式)被提交给合约,代码被展示给受信任的安全专家。审批通过之后,升级就会被展示并同时被应用。

6. DAO/total voting。合约由利益相关者的投票治理。在NEAR的平台中,我们指的是验证节点投票。


当前事务状态
注:关于NEAR区块链智能合约的可升级性,目前还没有完全确定的指导方案。最值得注意的是这份提议。来自以太坊的全部方法也都可采用。

提议:https://github.com/near/NEPs/pull/123
目前彩虹桥的可升级性按照以下方法实现:

1. 以太坊


2. NEAR



可升级性方案
设想


一般考虑事项
将设想和通用实践考虑在内,我们建议就彩虹桥合约的可升级性使用分阶段的方法:早期阶段将会有简单的可升级性模型,治理模式将更为中心化,之后会发展为更为去中心化的方法。
阶段1:中心化治理,没有固定的接口


* 这样做的目的是为避免迁移桥接/锁定通证,同时让用户可以提取通证。
该方法十分简单,允许快速迭代,可通过将通证存放在安全地方的方式对重大漏快速做出反应。
重要:未来和彩虹桥集成(无论是合约层面还是区块链外部)的全部DApp都应该能够更新集成代码,包括合约地址和接口。
阶段2:独立的多签治理,代理模式


由一小组经验丰富的安全工程师和若干家企业组成了彩虹桥治理委员会。这些实体持有两条链的多签合约的秘钥。核心彩虹桥合约和以太坊连接器实现代理模式,不过合约的实际接口未来可能会有所改变。
相关文章