火星链 火星链
Ctrl+D收藏火星链
首页 > 莱特币 > 正文

YIELD:智能合约的调配模式:如何让你的智能合约安全协作?

作者:

时间:1900/1/1 0:00:00

本文来源:区块链大本营

原文作者:AlbertoCuestaCa?ada

翻译:火火酱

由于所有已部署合约都有24KB的硬限制,所以除了少数极其简单的应用程序外,其他所有的Ethereum应用都是由多个智能合约组成的。

如何才能确保各智能合约间的安全协作呢?

在将代码分解为多个可操作的合约后,我们便会发现有的合约中的函数需要通过另一个合约才能进行调用。

例如,在Uniswapv2中,只有合约工厂可以对UniswapPair进行初始化。

对于Uniswap团队来说,只需要稍微检查一下就可以解决的问题对于很多其他项目来说,却需要从头开始重新编写调配解决方案。

在了解问题和开发模式的过程中,我们深入理解了如何借助多个智能合约来构建应用程序,从而使Yield更加健壮且安全。

Fantom部署智能合约监控系统Watchdog:10月27日消息,Fantom 部署了一个名为 Watchdog 的自动化智能合约监控系统,以加强其区块链上去中心化应用程序的安全性。Fantom 基金会在一份声明中表示,该系统是与区块链安全公司 Debaub 合作开发。Watchdog 将自动扫描 Fantom 生态系统中智能合约的问题。一旦发现漏洞,安全公司 Dedaub 将通知项目方,并协助项目方分析风险,支持项目组及时修复漏洞。[2022/10/27 11:50:04]

在本文中,我们将借助几个知名项目中的实例来深入分析智能合约的调配方式。希望大家在读完本文之后可以对照自己项目的需求,选择出最适合自己的方法。

背景知识

前文提到,我们首先要把项目分解成多个智能合约,这是出于技术和精神两个层面的限制要求。

技术限制源于2016年11月发生的一项改变。当时,Ethereum主网实施了SpuriousDragon硬分叉。此举将已部署的智能合约的大小限制在24576字节以内。

在没有此项限制时,攻击者可以在部署智能合约期间进行无限次的计算。此举虽然不会对存储在区块链中的数据产生任何影响,但却是一种针对Ethereum节点的拒绝服务攻击。

由于当时的区块gas限制无法支持这种规模的智能合约,所以这项改变当时并没有受到重视:

以太坊推出的“Shandong”测试网将对执行智能合约的EVM进行更改:金色财经报道,10月17日,以太坊的核心开发人员推出了“Shandong”测试网,用于区块链网络的上海升级。上海升级预计将在2023年进行。这将是以太坊自9月合并以来的首次升级。此次升级对执行智能合约的技术以太坊虚拟机(EVM)进行了更改。另一个预期的提议将允许通过信标链提取质押的ETH和获得的奖励。目前,持有ETH的验证者无法直接提取资金。此外,升级还将引入对第2层协议的更改,通过均衡块大小和提高网络中的呼叫数据效率来降低gas价格。[2022/10/19 16:30:10]

“该解决方案为储存在区块链中的对象大小设置了最高上限,并使其略高于当前gas上限值”

在DeFi大爆炸之前,我们为Yield编写了2000行智能合约代码,部署后的代码加起来接近100KB,审核员完全没有觉得项目过于复杂。

但我们仍需把解决方案分解为多个合约。

复杂性和面向对象程序设计

将区块链应用分解为多个智能合约的第二个原因与技术限制无关,而是与“人”的精神限制有关。

在特定的时间内,我们大脑中能储存的信息量是一定的。相比于处理单一且涉及面广的大问题,人们在处理多个相互间存在关联的小问题时表现会更好。

实际上,Object-OrientedProgramming可以提高软件的复杂性。通过定义代表某种概念的“对象”,并将变量和函数看作该对象的属性,开发人员能够在心里更好地描画和理解需要解决的问题。

摩根大通:以太坊的高昂gas费和网络拥塞给智能合约平台带来了巨大风险:金色财经报道,银行业巨头摩根大通在最新报告中表示,以太坊的高昂gas费和网络拥塞给智能合约平台带来了巨大风险。这可能是“以太坊估值的问题”。以太坊可能会失去其 NFT 市场份额给竞争对手 Solana,后者在去年取得了巨大的进展。如果我们看数据,以太坊的 NFT 市场份额已经从 2021 年初的 95% 下降到 80%。摩根大通分析师还指出,数据显示 NFT 玩家已经从以太坊转向 Solana,因为后者的交易速度更快且成本更低。(coingape)[2022/1/20 9:01:25]

Solidity在合约层面使用了面向对象的编程技术。我们可以将合约看作是一个具有变量和函数的“对象”,在脑海中将复杂的区块链应用程序想象成多个合约的集合,每个合约代表一个单独的实体。

例如,在MakerDAO中,每种加密货币都有单独的合约,此外还有记录债务的合约、表示债务和外界间网关的单独合约等等。我们不可能将所有内容都编写在同一个合约中——即使可能,也会异常困难。

把一整个大问题分解成具有内在联系的多个小问题可以帮助我们更快地找出解决方案。

实现

接下来,让我们一起来研究一下Uniswap、MakerDAO以及?Yield?的实现方式。

从简单的例子开始——Uniswap和Ownable.sol

数据:以太坊网络每日新智能合约数量达309份创新高:10月19日消息,数据显示,以太坊网络每日新智能合约数量已达到309份,创下新高。与此同时,这种每日新增超百份智能合约的现象维持了超过一个月,而非创造峰值后就消失。而这个现象的导火索可能是DeFi。(Trustnodes)[2020/10/19]

我很喜欢Uniswapv2,因为它非常简单。开发人员用410行智能合约代码就成功建立了去中心化交易所。仅部署了两类合约:工厂和不限数量的配对交换合约。

其工厂合约的设计方式决定了其配对交易合约的部署需要经过两个步骤。首先部署合约,然后用将要进行交易的两个代币对其进行初始化。

由于需要确保只有创建配对交易合约的工厂才能对合约进行初始化,所以他们重新实施了Ownable模式。

IBM区块链负责人Jesse Lund:金融用例区块链与智能合约区块链将在10年内整合:5月17日,IBM区块链负责人Jesse Lund在与Reddit社区的AMA会议上谈到了IBM参与区块链领域的情况。在谈及金融用例区块链是否能够在智能合约区块链中生存下来时,他表示,IBM对这两个区块链都提供了支持。 他预测,10年之内,将看到这些区块链类型的整合,这样才能让两者共存。[2018/5/18]

此举取得的效果还不错,如果你也遇到了同样的问题,可以借鉴这个方法。如果你知道自己的合约只需要给另一个合约开通访问特权的话,可以使用Ownable.sol。甚至都用不到Uniswap这种工厂。你可以在一个用户中部署两个合同,然后执行minion.transferOwnership(address(boss))。

更为完善的例子——Yield

Yield的解决方案就没有Uniswapv2那么简单了。其核心由五个合约组成,并且特权访问关系并不是一一对应的。部分合约具备的限制功能可以帮助我们访问其他核心合约。

因此,我们只需扩展Ownable.sol以生成两个访问层,其中一层有多个成员:

合约所有者可以向特权列表中添加地址。继承合约可以包含onlyOrchestrated修改器以限制对授权地址的访问。

每个地址都会与一个函数签名共同注册,从而收紧对函数的访问权限,增强安全性。

由于我们会在期间部署orchestrate合约,所以没有取消访问权限的函数,owner会通过调用所有合约上的transferOwnership(adress(0))来放弃其特权访问。

我们自己的平台代币yDai,将从Orchestrated继承并限制mint在owner放弃其特权之前建立的特定合约:

这种模式相对容易实现和调试,并且可以实现我们合约中的函数。

极具迷惑性的例子——MakerDAO

大家都非常讨厌MakerDAO中各种难以理解的术语。但在搞清楚Yield的调配模式后,我才发现它们二者的实现方式几乎是完全相同的。

1.合约部署者是wards的原成员。

2.wards可以rely其他人,并使其同样成为watds。

3.可以限制函数,只有wards可以执行函数。

例如,MakerDAO的Vat.sol合约中的fold函数可被用于更新利率累加器,并且只能被其集合中的另一函数调用。如果我们观察一下该函数的话,便会发现用于调配的auth修改器,

从某种程度上来说,auth和其他调配实现是对private和internal函数概念的扩展,仅适用于在合约间进行访问控制。

MakerDAO与我们项目的实现方式非常类似。

1.合约部署者是wards原成员。在Yield中,即owner。

2.wards可以rely其他人并使其成为wards。在Yield中,只有owner可以orchestrate其他地址并authorized。

3.函数受限制,因此只有wards可以执行受限函数。在Yield中,我们提到onlyOrchestrated地址可以调用标记函数。进一步限制对函数的访问。

除了在Yield中使用了两个访问层以及函数限制以外,二者的实现方式是一样的。可见,合约调配是一种一经实现即可重复使用的常见模式。

从审核员和用户的角度出发,我们还开发了一个收集区块链事件,并展现合约所有权和调配图的脚本。

总结

智能合同的调配是一个在很多项目中反复出现的问题,在遇到此类问题,大家往往都会从零开始进行调配。但其实此类问题的解决方案都是十分类似的。

我们可以遵循以上标准来实现安全有效的调配,希望大家可以深入理解文中的示例原理,并形成适合自己的解决方案。

标签:区块链以太坊YIELDELD区块链币是什么币以太坊币价格今日行情价格红色是涨吗SAFUYIELD币Ethereum Yield

莱特币热门资讯
BIN:谁会成为未来数字金融生态的流量入口?

互联网时期的发展让我们都知道互联网流量入口的重要性。如果一个应用受到欢迎,那么就可以在这个应用上开发出更多的产品功能,就有能够吸引更多的用户使用这个产品.

1900/1/1 0:00:00
SDT:多头大清洗,市场危机信号

作者|哈希派分析团队动态 | 美国芝商所比特币期货合约多头头寸呈上升趋势:加密分析师Skew汇编的数据显示,美国芝商所(CME)的比特币期货合约自本月初以来,多头头寸呈上升趋势.

1900/1/1 0:00:00
加密货币:华尔街的「加密冷战」刚刚开始

作者:LeahMcGrathGoodman文本来自:institutionalinvestor编译:白夜2018年3月,在位于法国海岸的英国避税天堂泽西岛皇家游艇酒店.

1900/1/1 0:00:00
RTG:美联储报告 | 对比支付方式:中央银行数字货币的作用是什么?

本文来源:中钞区块链技术研究院,原文:美联储编译:练娜摘要本文着眼于在现有支付机制的背景下中央银行数字货币可能带来的好处.

1900/1/1 0:00:00
EFI:DeFi狂欢热情未减,以太坊链上智能合约活动水平创新高

DeFi将以太坊网络上的活动推向了前所未有的水平,这一世界上最受欢迎的去中心化计算协议正接受着智能合约应用程序和用户的压力测试.

1900/1/1 0:00:00
Barkis:中国区块链技术与产业应用落地高峰论坛暨Barkis生态3.0战略说明会圆满落幕

2020年9月6日,由中国科技体制改革研究会数字经济发展研究小组、中国移动通讯联合会区块链专业委员会、四川省大数据发展研究会主办的《中国区块链技术与产业应用落地高峰论坛暨Barkis生态3.0战.

1900/1/1 0:00:00