[区块链技术细节探究]智能合约就是公开透明的吗?

in #blockchain4 years ago (edited)
  • 智能合约

区块链智能合约提供了链上可编程实现的业务逻辑,从以太坊提供了便捷的智能合约编译,大大促进了智能合约的繁荣。尤其是曾经火爆的代币合约,人人皆可发币;造成以太坊严重拥堵的以太猫游戏;现在正在风风火火的Defi合约。

  • 公开透明

对于不了解技术的人,听到宣传智能合约”公开透明“,就无条件选择信任,似乎相信既然是公开的,那应该不敢作假吧?总有懂的人看的吧?在一些介绍区块链的书籍或者文章中也是这样说的,比如下面这段:
image.png

  • 不公开也不透明的智能合约

对于以太坊上的智能合约,其实上链的内容是以太坊里面EVM虚拟机能够理解的字节码,说白了就是机器能知道要做什么的指令,比如这样的
0x608060405234801561001057600080fd5b5060df8061001f6000396000f3006080604052600436106049576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806360fe47b114604e5780636d4ce63c146078575b600080fd5b348015605957600080fd5b5060766004803603810190808035906020019092919050505060a0565b005b348015608357600080fd5b50608a60aa565b6040518082815260200191505060405180910390f35b8060008190555050565b600080549050905600a165627a7a723058209bbd78b7ab56ff92bd89ca6f13a9770820ab218548ced4aff88e6ff532bc001c0029
链上能直接获取到的就是这样的,它不是人能直接看懂的,你说合约透明,确实透明,谁都能看到,可是看到了没用啊……

其实字节码是通过编译器获得的,人们容易看懂的是通过编程语言(比如solidity语言)书写的代码,像下面这样的:

pragma solidity ^0.4.24;

contract SimpleStorage {
    uint storedData;

    function set(uint x) public {
        storedData = x;
    }

    function get() public view returns (uint) {
        return storedData;
    }
}

这一小段代码其实就是上面那段看不懂的字节码的solidity源代码,看这个我们可以明白这是一个简单的存储合约,里面有两个方法setget

  • 合约透明化

那怎么样才是正确的合约透明化呢?这就需要发布合约的人公开并验证合约源代码。
以太坊的区块浏览器etherscan.io上提供了这一功能:

image.png

这就是让部署合约的人验证其合约源代码,证明提交到链上的合约内容就是依据该源码编译得到的。
所以,当你看到什么新项目,什么代币合约,什么Defi合约,不妨都先看看这些合约是否公布了源代码,源码内容是否与其说的一致,避免掉坑里!

image.png

和我探讨区块链技术内容,欢迎加我微信

image.png

发文时比特币价格:11609.17 USDT

Coin Marketplace

STEEM 0.21
TRX 0.26
JST 0.040
BTC 101666.04
ETH 3693.34
USDT 1.00
SBD 3.13