一、以太坊概述
(1)以太坊是什么?
以太坊是一个全新的区块链平台,允许任何人在以太坊平台上建立和使用通过区块链技术运行的去中心化应用,简称为Dapp。
以太坊可以转账,可以做数据存储。
以太坊可以执行程序(智能合约)。
以太坊是公有链,公有链上的每个节点就是运行以太坊客户端的计算机。每个用户都可以自由加入或退出以太坊网络。而且每一个以太坊节点都可以同步全部的账本/区块信息。
(2)以太坊的发展历史
2013年底,以太坊发明人Vitalik Buterin发布以太坊初版白皮书,召集了一批认可以太坊理念的开发者启动项目,其中就有项目联合创始人Gavin Wood和Jeffrey Wilcke。
2014年2月,以太坊社区、代码数量、wiki内容、商业基础结构和法律策略等逐渐完善。上述提到的以太坊爱好者Gavin Wood和Jeffrey Wilcke开始全职专注以太坊开发等工作
2014年4月,Gavin Wood发表以太坊虚拟机技术说明黄皮书,该文档成为以太坊的技术圣经。根据说明,以太坊客户端支持7种编程语言,包括C++、 Go、Python、Java、JavaScript、Haskell、Rust等,软件性能更加优化。
2014年7月24日,以太坊开放为期42天的以太币预售,共募集到31531个比特币,根据当时币价折合1843万美元,是当时排名第二大的众筹项目。预售时所使用的比特币地址是36PrZ1KHYMpqSyAQXSG8VwbUiq2EogxLo2,在比特币区块链浏览器里可以看到每一笔转入和转出,最终,售出的以太币的数量是60102216。
2015年5月,团队发布最后一个测试网络(POC9,此前已经有0~8个测试版本),代号为Olympic,经过两个月的测试,团队于2015年7月发布正式的以太坊网络,标准着以太坊区块链正式上线运行;月底,以太币开始在多家交易所交易。
以太坊官方网址:https://www.ethereum.org
交易浏览器:https://etherscan.io
github黄皮书:https://github.com/ethereum/yellowpaper
二、以太坊基础操作
(1)与以太坊网络交互
以太坊上有开发者和消费者。开发者可以使用web3.js库去链接以太坊网络。消费者可以通过第三方Dapp应用工具(比如Metamask)与以太坊网络进行交互。
(2)Metamask安装
第一步:Metamask只支持谷歌或火狐浏览器。首先,打开谷歌浏览器的应用商店,然后在搜索框中输入“metamask”回车,按照提示安装即可。
第二步:安装成功后,在浏览器右上角会出现一个小狐狸的图标。点击后会打开Metamask插件(如下图所示)。
第三步:当第一打开Metamask的时候,它会自动生成12个助记词。我们需要把这些助记词记下来,以后会经常使用。
第四步:输入帐号密码。
(3)以太坊网络环境介绍
以太坊网络分为主网络、测试网络。测试网络由分为私有网络和公有网络。
主网络:花费真实的以太币。
测试网络:
1)私有网络:需要自己搭建。
2)公有网络:以太坊公开的测试网络共有四个,目前仍在运行的有3个。每个网络都有自己的创世区块和名字,按开始运行时间的早晚,依次为:
Morden(已退役):Morden是以太坊官方提供的测试网络 . 2016年11月时,由于难度炸弹已经严重影响出块速度,不得不退役,Morden的共识机制为PoW。
Ropsten:Ropsten也是以太坊官方提供的测试网络,是为了解决Morden难度炸弹问题而重新启动的一条区块链,目前仍在运行,共识机制为PoW。
Kovan:为了解决测试网络中PoW共识机制的问题,以太坊钱包Parity的开发团队发起了一个新的测试网络Kovan。Kovan使用了权威证明(Proof-of-Authority)的共识机制,简称PoA。缺点:目前Kovan仅支持Parity钱包客户端。
Rinkeby:Rinkeby也是以太坊官方提供的测试网络,使用PoA共识机制。缺点:获取测试币的难度较大。
(4)以太坊的账户类型
外部账户:即普通账户,由私钥控制,没有代码。
内部账户:又称为合约账户,可以接收ETH,由外部账户控制,合约有代码。
(5)控制帐号的形式
私钥:一对一,可以在metamask的账户详情中查看。
JSON-file:一对一,由一个密码保护,可以导入metamask中。
助记词:一对多,可以在“设置 -> Security& Privacy -> 显示助记词”中查看。
(6)转账过程
第一步:打开metamask,点击首页发送按钮;
第二步:输入对方密钥地址和转账金额;
第三步:输入Gas Limit和Gas Price,代表转账人可以支付交易费的上限。
注意:1)在以太坊网络中,不同网络中可以拥有相同账户信息。但是,不同网络的同一个账户的金额可能不同。2)无法在不同网络之间执行转账操作。
下图显示每个操作的Gas,以供参考。
其实,数据上链就是发起交易的过程。上链的数据在发起交易之前先要转换成16进制的数据。将16进制数添加到 optional字段,记住前面要加上0x。
交易数据的结构如下图所示:
(7)比特币与以太坊的对比
出块时间 | 容量 | 奖励 | |
比特币 | 10分钟 | 1Mb | 每4年衰减一次 |
以太坊 | 15~30s | 由Gas数量决定 | 目前是3个奖励 |
三、智能合约
(1)构建智能合约
通俗地讲,一个由代码控制的账户(内部账户), 能与钱打交道的合同(程序),就是智能合约。
智能合约的特点:
1)合约由代码逻辑控制,且能触发支付;
2)合约部署后存储在区块链上,且无法被修改;
下面是一段简单的智能合约代码,使用solidity语言编写:
// specify compiler version.
pragma solidity ^0.4.24;
// define smart contract.
contract InBox {
// define a public variable, which type is string.
string public message;
// define a function of InBox, the payable is a key word.
function InBox() payable {
}
function setMessage(string newMessage) public {
message = newMessage;
}
function getMessage() public constant returns(string) {
return message;
}
}
当在以太坊上部署了智能合约之后,系统会返回一个地址,这个地址就是合约账户(有金额、代码逻辑)。
同一个合约可以部署多次,每次部署后都会产生一个新的合约账户。
(2)Remix在线编辑工具
Remix是官方出的一个在线版的编译器。官方地址:https://remix.ethereum.org
第一步:点击左上角加号,创建一个sol文件。
第二步:编写合约代码。
第三步:编译合约。Remix编译器已经自动集成了solidity编译器,所以可以自动编译合约代码。
第四步:选择部署环境。
JavaScript VM:默认初始化了5个帐号,每个帐号100ETH。
Injected Web3:与Metamask结合紧密。
Web3 Provider:链接自己本地启动的区块链环境(比如truffle、ganache、geth搭建的私有链)。
第五步:部署合约。
部署合约也是一笔交易,只不过不用填写to字段,且数据字段为合约字节码。
第六步:调用合约程序。
Send:所有改变区块链数据状态的叫做是send操作,相当于发起一笔交易。特点:花钱、速度慢。
Call:所有读取区块链合约数据的操作成为call操作。特点:免费、速度快。