1. 以太坊概述
以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统,以太坊从诞生到2017年5月,短短3年半时间,全球已有200多个以太坊应用诞生。以太坊是一个平台和一种编程语言,使开发人员能够建立和发布下一代分布式应用。 以太坊可以用来编程,分散,担保和交易任何事物:投票,域名,金融交易所,众筹,公司管理, 合同和大部分的协议,知识产权,还有得益于硬件集成的智能资产。
1.1 以太坊的技术特点
1) 以太坊是一个区块链的开发平台,而非用于交易的加密货币—--创始人Vitalik Buterin。因此,其显著特性是可编程性。
2) 客户端支持多种语言:Go、C++、Python、JavaScript; v Go:go-ethereum(geth)
v C++:cpp-ethereum(ceth)
3) 客户端支持多种操作系统和设备:Linux、FreeBSD、OS X、Windows、Docker、ARM、IOS、智能手机、智能手表、平板电脑;
v 得益于C++的跨平台;
4) 客户端既是服务器端软件(P2P通信、区块链管理、API接口服务)和挖矿软件,又是命令行工具,还是控制台程序。只需客户端即可运行完整的节点;
5) 客户端(geth、ceth)支持Docker容器部署;
6) 提供图形化钱包软件(Mist),内嵌客户端工具,支持转账和智能合约;
7) 支持多种编程接口:JAX-RPC、WS-RPC、IPC-RPC、JavaScript;功能最完善的是JavaScript接口库web3.js;
8) 控制台下可以直接运行JavaScript脚本,可以直接使用Web3.js库;
9) Web应用的页面,可以直接使用Web3.js库,也可以通过Ajax/HttpClient使用JAX-RPC、WS-RPC接口。
10) 以太坊合约的代码使用低级的基于堆栈的字节码的语言写成的,被称为“以太坊虚拟机代码”或者“EVM代码”。
1.2 以太坊的账户
以太坊账户分为两类(均使用20字节的地址代表账户,HEX16转换后是40字节串):
1) 外部控制账户(EOA):由私钥保护的“实体” 账户,存储以太坊网络的以太币;
2) 智能合约账户:由合约代码控制的账户,从区块链的角度看形同一个实体账户,只是人无法直接操作;
3) 前者只能由人发起进行以太币的转账,后者只能在代码的控制下进行以太币转账;
4) 前者可以发送消息给后者,触发其执行相应的指令或业务逻辑,如转账、产品申购等。
5) 交易费用总是由前者提供。如要触发后者运行,前者既要提供发送消息的费用,还要提供合约运行的费用。如提供的费用不足,则合约可能运行到中途结束。此时,全部影响被自动撤销,但交易费用不会退还。交易结束后,多余的Gas自动退还。
1.3 智能合约
1.3.1 业务角度看智能合约
1) 智能合约是根据事先任意制订的规则来自动转移数字资产的系统;
2) 智能合约是事件驱动的、具有状态的、获得多方承认的、运行在区块链之上的程序。该程序能够按照预设的条件,自动地处理其管理的资产。
3) 智能合约是一个机器人,拥有自己的账户,按照其设定程序,可以代替自然人或法人严格地进行仲裁和执行合约;
4) 智能合约存储在区块链上,被矿工计算机自动执行;
5) 智能合约具有数据透明、代码透明、不可篡改、永久运行的特点;
1.3.2 程序员角度看智能合约
1) 智能合约像构建在区块链数据库上的存储过程;
2) 智能合约像类,有属性、方法和构造、析构函数;
3) 智能合约像服务,对外提供同步和异步的消息接口;
4) 智能合约使用类JavaScript高级语言编写,被编译为可以被以太坊区块链虚拟机(EVM)运行的二进制码;
5) 智能合约支持继承;
6)