以太坊智能合约快速入门

向作者提问
加密货币早期投资者,深度了解比特币、以太坊的内核机制,参与过ICO白皮书编写,熟悉以太坊智能合约的安全漏洞,知乎区块链话题的活跃回答者和作者(https://www.zhihu.com/people/nekomoto),长期分享区块链知识并从技术、政策、博弈等多方位分析加密货币的投资价值。
查看本场Chat

学习智能合约编程的目的

就像1998年的互联网和2008年的移动应用,区块链正处在颠覆旧世界的前夜,而其中最激动人心的前沿领域之一莫过于智能合约了。智能合约(smart contract)是运行在去中心化区块链上的代码,它能完成验证、决策、存储等各种功能,自动执行约定好的条款。在以太坊(Ethereum)等公共链、摩根大通(JP Morgan Chase)Quorum等企业链上,智能合约都是至关重要的核心功能。

你的本职工作可能还不涉及智能合约,但紧跟时代步伐的程序员不该对这门新兴技术一无所知。智能合约的运行环境与传统的桌面程序、web应用乃至移动app都大相径庭。学习它可以让我们换一种思维模式去理解、设计和开发代码,成为能力更全面的专业程序员。

学习以太坊智能合约的价值

比特币就具备智能合约的能力,但它的脚本语言能实现的逻辑相当有限,连循环语句也不支持(这倒不是中本聪的疏漏,而是在灵活性和简洁性之间作的权衡)。以太坊的功能则强大许多,具备一个图灵完备的虚拟机EVM。Tezos、EOS等新生币也有类似的虚拟机,但它们的影响力和生态环境还远远不及以太坊。另外,Qtum、RSK、Quorum等平台的虚拟机都与EVM兼容。因此以太坊是目前学习智能合约编程的首选平台。掌握它之后,你不仅能写出实用的、跨平台智能合约,还能触类旁通,快速了解其他平台,或者研发出更优秀的区块链。

以太坊智能合约编程语言

以太坊的编程语言有很多种,除了最底层的字节码外,包括类Lisp的LLL、类Python的Serpent、类Go的Mutan和类JavaScript的Solidity。其中Solidity的开发活跃度和普及率远超其他语言,在智能合约领域的地位相当于网站开发中的JavaScript。所以我们就从它学起。

Solidity开发工具

用任何文本编辑器加命令行就能开发Solidity程序。Ethereum/Mist客户端里也配备了Solidity编译器。但对于初学者而言,猫本聪强烈推荐Remix。它是一款非常好用的在线编程环境,不必安装任何本地软件就能零阻力上手。以后的课程里还会介绍truffle等框架和测试先行的开发模式(TDD),助你写出更复杂、安全的智能合约。

熟悉Remix环境

用浏览器访问 https://remix.ethereum.org 会看到以下的主界面:

Remix界面

首次运行时,Remix会打开一个ballot.sol的样例文件(Solidity的文件扩展名通常用.sol)。ballot.sol演示了投票合约的基本实现方法,暂时不必理会。

右侧面板的Compile页面显示的是Solidity编译结果和警告。默认设置下,我们每次修改代码都会触发自动编译(Auto compile),不必手工点击“Start to compile”按钮。编译成功时下方会显示绿框;错误会出现在红框里;黄框则表示警告。

Compile面板

有些警告(比如样例代码的两个gas requirement warnings)是误报,不必在意。如果你有编译结果洁癖症,不能容忍警告,那么请切换到Analysis页面,按下图所示关闭gas costs检查:

Analysis面板

曾小波
目前数字货币交易平台的交易价格是怎么计算出来的呢?
曾小波
合约中事件设计的目的是怎么呢?有什么作用?
谢谢
微信扫描登录