区块链开发(二)部署并运行第一个以太坊智能合约
李赫2016年8月22日
本文首发8BTC
网络上不少部署智能合约的文章,但是都有一个共同的特点,就是采用命令行的方式来部署,先是建立SOLC的编译环境,然后部署Geth或者Eth节点,然后一步一步生成钱包、ABI、合约地址进行部署,对初学者来说晦涩难懂而且容易失败,本文主要介绍如何在图形化界面下一键部署和调用智能合约。对于其他区块链知识,请参考我的其他文章:http://blog.csdn.net/sportshark
一、 智能合约和DAPP概述
1、 智能合约基本概念
智能合约是一段代码和数据的集合,可以部署以太坊网络上运行。如果做比喻的话智能合约更像是JAVA程序,JAVA程序通过JAVA虚拟机(JVM)将代码解释字节进行执行,以太坊的智能合约通过以太坊虚拟机(EVM)解释成字节码进行执行,如果你学过汇编,会发现编译后的字节码和汇编很类似。同时智能合约有自己的账户,在时间或事件的驱动下能自动执行一些功能,如可以在相互之间传递信息,修改区块链的状态比如账户信息等。以太坊的智能合约最大的特点是图灵完备,通俗来说可以完全模拟一台计算机所能做的所有事情,大家熟知的比特币其实也可以执行一些简单脚本,但是他就不是图灵完备,比如循环指令比特币就无法执行。
以太坊虚拟机(EVM)
以太坊虚拟机(EVM)是以太坊中智能合约的运行环境。它不仅被沙箱封装起来,事实上它被完全隔离运行,也就是说运行在EVM内部的代码不能接触到网络、文件系统或者其它进程,甚至智能合约之间也只有有限的调用。
2、 DAPP基本概念
初学者经常把智能合约和DAPP搞混,以太坊社区把基于智能合约的应用称为去中心化的应用程序(Decentralized App)。DApp的目标是让你的智能合约有一个友好的界面,外加一些额外的有利于用户使用的东西。典型的DApp例子由一个html界面,web3运行库,一段JS代码以及部署在区块链上的一段智能合约组成。与一般CS架构的网站不同,DApp不能在普通的服务器上运行,DApp必须运行在一台能与以太坊节点交互的服务器上,或者任意一个以太坊节点上。DApp通过提交交易到区块链网络与对应的智能合约进行交互,并且从区块链网络而不是中心化数据库比如(MYSQL数据库)读取重要数据。相对于典型的BS架构用户登录系统不同,以太坊用户被表示成一个十六进制的地址而且所有用户数据和其他数据均保存在本地,与目前的web应用架构有很多不同。
3、 智能合约高级语言
用户不可能直接编写以太坊虚拟机(EVM)字节码,所以以太坊提供了几种编写智能合约的高级语言。
Solidity:类似JavaScript,这是以太坊推荐的旗舰语言,也是最流行的智能合约语言。具体用法参加Solidity文档,地址:https://solidity.readthedocs.io/en/latest/
Serpent:类似Python风格,文档地址:https://github.com/ethereum/wiki/wiki/Serpent
LLL:类似Lisp风格,目前已经被终止了。
可以根据不同的习惯选择不同的高级语言,目前最流行的是Solidity。
二、 在以太坊私有链上部署第一个智能合约
本文的智能合约采用以太坊官方的示例合约,功能就是在区块链上存储一个数字,并能够读取出来。代码如下: