对区块链上的智能契约进行了编译。是否有任何制度,以核实所有公开的dapp合同做他们想做的事?
也就是说,这可以通过编译开放源代码契约和验证契约哈希签名来实现,或者在封闭源代码但公开的d-应用程序中,可能会对编译的字节码进行反编译,并验证代码路径/函数调用,尽管这是一个更加模糊的领域。
例如,参见https://etherscan.io/address/0xf97e0a5b616dffc913e72455fde9ea8bbe946a2b#code,这是CryptoKitties的“基因组合”算法。虽然CryptoKitties的其余部分是开源的,但这个特定的代码模块是封闭源代码的.然而,它已经被反向设计--以下是一篇关于它的博客文章,https://medium.com/@sean.soria/cryptokitties-mixgenes-function-69207883fc80。虽然这是一个小的代码功能,似乎有可能,dapp可以启动,提议和第一眼看上去是开源的,但实际上包含一个隐藏的定时炸弹,例如,把以太的余额转移到一个坏演员的帐户在硬编码的未来日期。
我们是否需要建立某种框架或服务,以便在某种程度上验证所有已发布的智能契约代码?
发布于 2018-04-17 20:03:08
这可以通过编译开放源代码契约和验证契约散列签名来完成。
这差不多就是以太扫描已经做的事。你知道以太扫描的能力吗?你的建议比以太扫描已经做的更多了吗?
对于没有发布源代码的智能契约,只需不信任它们。(或者相信他们,如果你有能力直接审计字节码,我会说几乎没有人能做到这一点。)
发布于 2018-04-17 20:33:16
This可以通过编译开放源代码契约和验证契约散列签名来完成,或者在使用封闭源代码但公开的d-应用程序的情况下,可能会对编译后的字节码进行反编译,并验证代码路径/函数调用,尽管这是一个更加模糊的领域。
如果使用编译稳固代码的编译器solc,则可以编译契约发布者声称代表区块链上的契约的源代码。您必须使用带有标志--bin-runtime的编译器来获取代码,如果编译和发布相关源代码,代码将放在块链上。看看这个答案:solc bin与bin运行时
然后,您可以将solc返回的二进制代码与geth eth.getCode(contractaddress)中的调用返回的代码进行比较(此调用返回存储在address contractaddress上的二进制代码。这是放置在区块链上的契约的EVM代码)。这两个操作的二进制代码应该匹配。
与您的声明一样,您也可以熟悉EVM契约编译到的虚拟机代码,该代码称为EVM。如果这样做,您将能够直接从区块链读取合同的内容。如果您想学习EVM,那么黄纸是一个很好的资源。
https://ethereum.stackexchange.com/questions/45951
复制相似问题