DEVCON2:Joey Krug--复杂的Dapp以及更新
记者:Cathy
本文为大会演讲速记尝鲜版,给心急的小伙伴们先行浏览,精细校对版将会在大会后逐步发布。
今天我会来谈一下一些非常奇怪的东西,可能和其他以太坊上的合约不一样。在升级合约的时候,你要决定几件事情:首先你怎么去决定是否要生成合约,这个私钥可能会生成合约,你可能也会用多重的签名,比如说5个密钥当中有3个密钥同意才能够更新,或者说Augur的方法,你可以进行投票。所以我们要解决其他的这个问题,就是如果真的去升级合约,而不会失去你自己的数据或者转移数据的时候还要交钱。很简单的方法,设置一个合约。合约当中有数据还有函数,会转发你的函数到另外一个函数,这样就不需要调整你的合约。
比如说合约有一些钱,你希望能够更新你发送的函数,这样你就会再写一个合约。然后第一个合约始终转发请求到另外一个合约,第一个合约需要有第二个合约的地址,所以你要升级合约只需要改变合约的地址就可以了。问题在于你实际上没有办法改变参数,没有做不同的函数,所以你在升级的时候实际上是有局限性的。你还可以做操作代码,这样你可以运行另外一个合约的代码,就像它在你自己的合约上一样。但它和我们这次要讲的其实不太有关系,如果是那样的话你就没有办法轻松的改变ABI。每一个合约都有ABI,它的数据告诉你你的合约有什么样的函数,函数里面有什么样的参数,这样你就可以改变ABI,然后更新你的合约。但另外一种方法,如果你把Data到调用的合约,这样你就可以调用任何合约任何的函数,只要用户输入了相关的数据。但问题是,如果人们要审计你这个代码的话,他们就会觉得很混乱或者说想和你的代码进行互动的话,他们也会觉得很混乱。所以对于升级合约,我们把数据和业务逻辑分离开来,这样所有的数据是存储在不同的合约当中,所有的业务逻辑以及休止符也是在不同的合约当中。这样在Dapp合约当中,我们可以修饰它,这样你就可以升级你的函数,可以轻松的方式来修改你的状态,而且你还可以改变参数。
你在更新的时候,你可以没有任何限制的进行来做。如果你想要创建一个新的数据的话,你就可以再创造另外一个Dapp的合约。我们不是用Solidity,看Solidity它有一些非常复杂的性能。在我们开始的时候Solidity还没有呢,这也是非常重要的原因。但我们如何进行形式化验证呢?来证明智能合约的安全性呢?我们是从头开始,我们在Solidity上面建立Why3能够用来写智能合约。我研究了一下其实挺有意思的不是消化,有了EBM,有了WebAssembly你可以用代码。这是所有那些关键性的系统所使用的,我们在写这些软件就不需要再投资那么多的钱,如果你用Augur进行变成的话,你就可以自动的进行验证,自己不需要做的。如果你写声明什么也可以直接就证明,非常的简单,所以我希望人们能够用Augur来写合作。
比如说以太坊WebAssembly他们有一个C库,他们还可以指示你如何用以太坊,用这些语言写以太坊合约。我们有一万的赏金,如果有人确实用它来写合约,你就可以获得一万的以太币或者比特币。这个可能不是非常的关键,因为WebAssembly还不是非常的成熟,但如果你用C来写的话,这是很酷的。因为它比其他的语言功能要好一点。这周会再做一次测试运行,我们会在一周之后再发布。
作者:Cathy | 来源:Chainb
Scan QR code with WeChat