金融是风险管理的艺术。资产和运营中都存在风险。资产具有价格,价格是其内在价值和综合风险的反映。我们不能不考虑其风险就无法评估资产。 操作中的风险主要来自容易出错和易受攻击的人员。资产和操作风险的评估是金融的核心,无论是指基于传统资产的传统金融还是在本机加密资产上运行的崭新的分散式金融(aka DeFi)。 损害控制是关键 加密资产的风险包括法规更改等外部风险,以及设计缺陷和实施错误等内部风险。在以太坊上,本机资产是ETH,非本机资产就是我们所谓的ERC代币,这是指符合ERC20标准及其同伴(例如ERC721和ERC777等)中任何一项的代币。
对于ERC令牌和DeFi,智能合约中的错误是最受关注的,因为作为系统的DeFi是一个复杂的网络,通过不同地方的不同开发人员创建的无穷智能合约将它们编织在一起。我们将由智能合约错误引起的风险称为智能合约风险。 许多研究工作都集中在智能合约的漏洞上,我们发现了许多防御方法。但是,众所周知,消除任何不平凡的智能合约(或任何程序)中的错误是不可能的。 我们生活在一个充满通信错误和随机性的世界中,它们在每个步骤中都会导致“失真”:我们无法将思想转变为精确的规范,同样,我们也无法将规范转换为完美的实现。 如果这是残酷的现实,我们不仅应在我们的加密资产实现中考虑主动防御和被动防御,还应采用破坏控制方法,以在发生某些不良情况时将损失降到最低,以避免将蝴蝶变成黑天鹅。 智能合约可以采用多种设计模式来进行损害控制,最重要的一种(我认为)是应用程序状态的分散化,因为应用程序状态的集中化会放大由智能合约错误引起的破坏。让我更详细地解释我的意思。 ERC代币的风险 ERC令牌标准在界面上有所不同,但具有一些共同的功能。ERC令牌的基本模式是使用令牌合同来管理令牌分类帐,并且用户与令牌合同进行交互以发行,转移或刻录令牌。 令牌分类帐的所有记录都存储在令牌合约中,而合约本身只是以太坊上的一个帐户。
这里的问题是所有逻辑和状态都保留在单个合约0x1234中。爱丽丝(Alice)和鲍勃(Bob)无法直接访问他们自己的记录,因为这些记录由合同0x1234保管。该令牌的所有用户都与该合同进行交互,并且管理其令牌的唯一方法是将消息发送到合同0x1234。 换句话说,令牌合约是中心点。任何系统的中心点也是最有利可图的攻击点。中心点的任何问题都会影响所有用户,因为所有令牌/记录都由中心保留,并且每个人都必须与之交互。
ERC令牌是由令牌合同而非个人用户持有的,这与以太坊的以太坊等本地令牌有很大不同。 ETH余额的记录不是由任何智能合约存储的,而是由用户直接控制的。每个ETH所有者都有自己的帐户和余额记录。
相反,不同的固有风险使ERC代币和以太币成为两种不同的资产类别。在分散网络上运行的智能合约与分散网络不同。 集中化问题是由ERC令牌再次在应用程序层上引入的,放大了任何智能合约错误的潜在损害,但是不幸的是,我们知道人类总是会犯错误。总是会有bug。网络/共识层的分散不能解决应用层上的集中化问题。 如何卸下风险放大器 集中化的观点出现在ERC代币中,因为它们的状态不是以太坊编程模型中的一等公民。状态是代码的附件,但不能直接引用和比较。 将具有相同验证规则(例如,相同令牌的记录)的状态放入同一合同是很自然的,但是,此合同随后成为集中化的要点。这是以太坊编程模型的结果。 在CKB上,由于国家是一等公民,因此模式是相反的。状态是用户直接玩耍的对象,代码是状态的附件。我们可以自然地使用相同的验证规则对状态进行比较和分组,即使这些状态由不同的用户直接持有也是如此。 我们将CKB上的非本机令牌称为“用户定义令牌”或UDT。对于给定的UDT,资产定义(代码)和资产记录(状态)是分开的,并且不同用户(地址)的记录也是分开的。
资产定义是由令牌开发者创建并存储在开发者拥有的单元(资产定义单元)中的合同,而记录保留在用户的单元中,并且所有记录均使用相同的“类型”脚本。 每个用户都使用自己的单元格来存储自己的令牌记录。这些令牌记录共享资产定义单元定义的相同验证规则。通过这种结构,记录以分散的方式存储。 如上图所示,Alice的令牌存储在Alice自己的单元中,并受她自己的锁定脚本保护,默认情况下为Secp256k1。即使资产定义中存在错误,攻击者也无法修改Alice的记录,因为这样做需要Alice的私钥。 由于令牌直接由爱丽丝持有,因此攻击者无法绕开爱丽丝的锁。通过分散令牌的状态,可以控制资产定义中错误的破坏。 影响每个人的错误的可能性仍然存在:例如,资产定义中可能存在一个错误,该错误允许任何人发行比预期更多的令牌。 UDT的好处是,首先,消除了许多错误。其次,资产定义单元受锁保护,该锁自然可以是令牌发行身份验证逻辑的一部分。可以很容易使用协议提供的身份验证机制。 授权与业务逻辑的这种分离是一种好的工程实践,并且是CKB中的默认设置。UDT比ERC令牌更分散,因此UDT的智能合约风险低于ERC令牌,但仍高于本机令牌。 安全的Nervos DAO 应用程序状态的分散化也可以帮助DeFi应用程序设计。该Nervos DAO是CKB第一DEFI应用。这是一个智能合约,用户可以与CKB上的任何智能合约以相同的方式进行交互。 Nervos DAO的一项功能是为CKByte持有人提供一种稀释对策。通过在Nervos DAO中存款,持有人可以获得成比例的次级奖励,这保证了他们的持股只像比特币那样受到硬性上限首次发行的影响。 在撰写本文时,DAO中已经存储了超过10亿个CKByte,并且数量还在增加,这对于攻击者来说是一个非常诱人的合同。我们应该担心吗? 可能不是很多,因为Nervos DAO中锁定的CKByte不在一个智能合约中合并在一起,而是由不同的用户持有!当用户想要向Nervos DAO进行存款时,他/她通过选择单元格(CKBytes的UTXO)来构建存款交易,并将其类型脚本引用设置为
这些单元格的锁定脚本保持不变。由于Nervos DAO类型的脚本与用户的锁定脚本是分离的,因此,攻击者永远无法在未经用户许可的情况下使用那些存放的CKByte。 要撤回已存储的CKByte,必须提供相应锁定脚本的见证人(签名)。这种验证是由CKB网络保证的,而不是由任何智能合约保证的,并且没有解决方法。Nervos DAO脚本可以确保提款时的补偿计算正确,而不是持有资金。 对DeFi的影响 很难定量分析智能合约风险对DeFi的影响,但是我们可以从Nexus Mutual提供的保险产品中获得一些线索,该产品是“分散式保险替代品”。 其第一个产品SmartContractCover允许用户购买任何智能合约的保险,因此,如果智能合约被黑客入侵,他/她可以获得补偿。SmartContractCover的权利金由市场决定,与承保期和承保金额成正比。 根据这篇文章,如果您在Nuo上进行1000天DAI的90天保险,将花费6.41 DAI,而在Uniswap中进行365天1 ETH的保险,您将花费0.013 ETH。根据这些数字,我们可以得出估计的年度智能合约风险成本约为2%。 2%的成本是由智能合约风险引起的市场效率低下,因此,改进智能合约编程模型非常重要。 不同的编程模型可以降低智能合约风险,为我们带来更高效的DeFi市场 作者:Jan Xie 译者:唐三藏 译文链接:https://medium.com/nervosnetwork/the-smart-contract-risk-in-defi-c28e53b92f03 欢迎留言指导,转发。谢谢! —- 编译者/作者:唐三藏取经 玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。 |
【三藏取经⑤】DeFi中的智能合约风险,以及Nervos DAO设计理念
2020-01-18 唐三藏取经 来源:区块链网络
LOADING...
相关阅读:
- 以太坊的DeFi Space刚看到一个出口骗局:这就是失败的原因2020-08-04
- 以太坊 Gas 费缘何暴涨 7 倍?该如何改善?2020-08-04
- 路还很远,但凡你对以太坊信心不足,愿景太小的话,就一定会被甩下2020-08-04
- 8/4 1万美元的比特币 你再也买不到了2020-08-04
- 以太坊迎来五周年,火币已成ETH合约最大交易主场2020-08-04