最近想给同事做一次以太坊智能合约编写的分享,PPT写着写着越来越多。想想还算是把它弄成文章。
1.1 ETH介绍
ETH 是我们的V神发起的一个开源的去中心化的数字货币项目。ETH在比特币的基础上提出了“智能合约”(Smart Contract)的概念。ETH更像是一个底层的操作系统。就像IOS 和安卓一样,提供丰富的API接口。 学习ETH 的相关的地址如下:
白皮书:https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-White-Paper
官方网站:https://www.ethereum.org
区块查询:https://etherscan.io/ https://etherchain.org/
1.2 ETC 介绍
老有朋友问ETC 和ETH是什么关系。其实他们就是亲兄弟。ETH 是ETC出现了一次BUG,导致有人损失了资产以后分裂出来的项目。但是有一些认为数字货币就是去中心化,是民主的,BUG的产生本身也是系统规则本身。 于是他们坚持在了ETC社区。
2.2 私有链搭建
- 代码安装方式
- 创世块配置
- 编译代码
2.2.1 代码安装方式
初学者我们推荐使用 Installing from PPA 安装
本人的安装目录 : ~/Library/Ethereum/geth
sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo add-apt-repository -y ppa:ethereum/ethereum-dev
sudo apt-get update
sudo apt-get install ethereum
2.2.2 机器环境
localhost:~ lei$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.13.2
BuildVersion: 17C88
2.2.3 GO 环境安装
这里先不介绍GO的环境配置,请自行查询。
版本需求为: version 1.7+ 本人使用的GO版本
localhost:~ lei$ go version
go version go1.9.3 darwin/amd64
2.3 私有链数据准备
2.3.1 初始化文件 genesis.json
{
“config”: {“
chainId”: 88888,
“homesteadBlock”: 0,
“eip155Block”: 0,
“eip158Block”: 0
},
“coinbase”: “0x0000000000000000000000000000000000000000”,
“difficulty”: “0x1”,
“extraData”: “0x00”,
“gasLimit”: “0x47e7c5”,
“nonce”: “0x0000000000000042”,
“mixhash”: “0x0000000000000000000000000000000000000000000000000000000000000000”,
“parentHash”: “0x0000000000000000000000000000000000000000000000000000000000000000”,
“timestamp”: “0x00”,
“alloc”: {
“430e986e0cca10a174baad96871ec9cb308c6d05”: {
“balance”: “111111”
}
}
}
2.3.2参数说明
参数 | 解释说明 |
---|---|
mixhash | 与nonce配合用于挖矿,由上一个区块的一部分生成的hash。注意他和nonce的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity,(44)章节所描述的条件。. |
nonce | nonce就是一个64位随机数,用于挖矿,注意他和mixhash的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。 |
difficulty | 设置当前区块的难度,如果难度过大,cpu挖矿就很难,这里设置较小难度 |
alloc | 用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以我们不需要预置有币的账号,需要的时候自己创建即可以。 |
coinbase | 矿工的账号,(可以随便填写) |
timestamp | 设置创世块的时间戳 |
parentHash | 上一个区块的hash值,因为是创世块,所以这个值是0 |
Data | 附加信息,随便填,可以填你的个性信息 |
gasLimit | 该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填最大。 |
3启动步骤
初始化数据
geth --datadir "./" init genesis.json
运行以后会出现两个目录
geth中保存的是区块链的相关数据
keystore中保存的是该链条中的用户信息
启动控制台
geth --datadir "./" --nodiscover console 2>>geth.log
在这个环境里也内置了一些用来操作以太坊的Javascript对象,可以直接使用这些对象。这些对象主要包括:
- eth:包含一些跟操作区块链相关的方法
- net:包含以下查看p2p网络状态的方法
- admin:包含一些与管理节点相关的方法
- miner:包含启动&停止挖矿的一些方法
- personal:主要包含一些管理账户的方法
- txpool:包含一些查看交易内存池的方法
- web3:包含了以上对象,还包含一些单位换算的方法