长推:以太坊智能合约可组合性的利弊探讨

原文作者:Robert Mao、jolestar原文来源:Twitter

Robert Mao:

jolestar你好,读了你的几篇文章引发一些思考想请教和讨论一下。主要是这篇“从智能合约的演进看 Move 的架构设计”,与这篇“为什么是 Move 之编程语言的生态构建”:

我很赞同智能合约的可组合性是一个重要的特点,Ethereum的 DeFi繁荣很大程度来自其智能合约可组合带来的特性。 但是,我对Eth的这种设计合理性产生了一些怀疑(可能会被ETH支持者口水淹死)

我想思考一个问题,究竟eth那样的支持smart contract 嵌套组合有没有意义? 那是一个bug 还是一个feature?

Eth这种嵌套导致可以实现“闪电贷”这类DeFi,然而闪电贷也许在现实世界应该视为一种金融的bug,而不应该作为feature。在有监管的世界,我甚至怀疑这样行为是否合法。

jolestar

中国房市,贷款买房,又是通过房本抵押贷款,不就是闪电贷么。看问题要看本质。

又国家强力控制你在一个transaction里先贷款,再拿到房本,再回过头来用房本抵押。

Robert Mao

ETH这种的嵌套组合方式还导致了一些常见的不安全合约pattern,例如通过一个合约调用另一个抽奖合约,来破解其利用区块hash产生的随机数(本来这是个很好的链上确定性随机数产生方法)。 这导致eth 在需要随机的时候,必须靠第三方预言机才可能安全,这导致整个系统架构的不必要负责性以及更为缓慢。

jolestar

同一个交易里的多个合约用的是同一个种子,所以有这个问题。维护一个全局的自增序列,每次调用 + 1, 这样一定程度能避免这个问题。但这种方式也只能用在小应用的场景,毕竟矿工是知道结果的。

Robert Mao

其他一些用法是把某些合约的部分作为共享lib,用来减少gas fee,减少重复部署,但这可以认为是eth的一个设计缺陷才导致的,因为ETH不能支持代码模块,gas机制,以及需要大量重复部署合约,这是一种work around。 Partity钱包事件说明了这个问题的严重后果。

还有一个用处是实现upgradable 合约, 但这又是一个ETH的设计缺陷的work around,因为智能合约显然有升级的需求和必要(bug fix,需求改变),但eth却把这个设计为不可升级(最容易实现)。

那么这种ETH的嵌套智能合约有有没有正面积极有价值的例子呢? 我觉得ETH的设计就如同PHP语言一样,快糙猛,但其市场占有说明了其作为“最好的语言”有很多做对的地方。 在讨论一个新的链、新的合约语言的时候 ,客观讨论一下其利弊。

责任编辑:MK

转载声明:本文 由CoinON抓取收录,观点仅代表作者本人,不代表CoinON资讯立场,CoinON不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。若以此作为投资依据,请自行承担全部责任。

声明:图文来源于网络,如有侵权请联系删除

风险提示:投资有风险,入市需谨慎。本资讯不作为投资理财建议。

(0)
上一篇 2022年9月7日 上午11:45
下一篇 2022年9月7日 上午11:52

相关推荐

长推:以太坊智能合约可组合性的利弊探讨

星期三 2022-09-07 11:49:14

Robert Mao:

jolestar你好,读了你的几篇文章引发一些思考想请教和讨论一下。主要是这篇“从智能合约的演进看 Move 的架构设计”,与这篇“为什么是 Move 之编程语言的生态构建”:

我很赞同智能合约的可组合性是一个重要的特点,Ethereum的 DeFi繁荣很大程度来自其智能合约可组合带来的特性。 但是,我对Eth的这种设计合理性产生了一些怀疑(可能会被ETH支持者口水淹死)

我想思考一个问题,究竟eth那样的支持smart contract 嵌套组合有没有意义? 那是一个bug 还是一个feature?

Eth这种嵌套导致可以实现“闪电贷”这类DeFi,然而闪电贷也许在现实世界应该视为一种金融的bug,而不应该作为feature。在有监管的世界,我甚至怀疑这样行为是否合法。

jolestar

中国房市,贷款买房,又是通过房本抵押贷款,不就是闪电贷么。看问题要看本质。

又国家强力控制你在一个transaction里先贷款,再拿到房本,再回过头来用房本抵押。

Robert Mao

ETH这种的嵌套组合方式还导致了一些常见的不安全合约pattern,例如通过一个合约调用另一个抽奖合约,来破解其利用区块hash产生的随机数(本来这是个很好的链上确定性随机数产生方法)。 这导致eth 在需要随机的时候,必须靠第三方预言机才可能安全,这导致整个系统架构的不必要负责性以及更为缓慢。

jolestar

同一个交易里的多个合约用的是同一个种子,所以有这个问题。维护一个全局的自增序列,每次调用 + 1, 这样一定程度能避免这个问题。但这种方式也只能用在小应用的场景,毕竟矿工是知道结果的。

Robert Mao

其他一些用法是把某些合约的部分作为共享lib,用来减少gas fee,减少重复部署,但这可以认为是eth的一个设计缺陷才导致的,因为ETH不能支持代码模块,gas机制,以及需要大量重复部署合约,这是一种work around。 Partity钱包事件说明了这个问题的严重后果。

还有一个用处是实现upgradable 合约, 但这又是一个ETH的设计缺陷的work around,因为智能合约显然有升级的需求和必要(bug fix,需求改变),但eth却把这个设计为不可升级(最容易实现)。

那么这种ETH的嵌套智能合约有有没有正面积极有价值的例子呢? 我觉得ETH的设计就如同PHP语言一样,快糙猛,但其市场占有说明了其作为“最好的语言”有很多做对的地方。 在讨论一个新的链、新的合约语言的时候 ,客观讨论一下其利弊。

责任编辑:MK