操作系统:CentOS 6.5
sudo yum install git gcc gcc-c++ ntp epel-release nodejs -y
下载并解压:
wget https://studygolang.com/dl/golang/go1.13.4.linux-amd64.tar.gz tar zxvf go1.13.4.linux-amd64.tar.gz mv go /usr/local/
配置环境变量:
vi /etc/profile
添加:
GOROOT=/usr/local/go
PATH=$GOROOT/bin:$PATH
配置生效:
source /etc/profile
查看 golang 版本:
go version
下载并编译以太坊:
git clone https://github.com/ethereum/go-ethereum.git cd go-ethereum make all
添加环境变量:
vi /etc/profile
PATH=$GOROOT/bin:/root/ethereum/go-ethereum/build/bin:$PATH
配置生效:
source /etc/profile
进入控制台:
geth --datadir data --nodiscover console
创建账户:
personal.newAccount("123456")
参数为私钥密码,返回账户的公钥。
查询账户列表:
eth.accounts
vim genesis.json
创建创世区块,输入并保存以下内容:
{
"nonce": "0x0000000000000042",
"timestamp": "0x00",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x00",
"gasLimit": "0x80000000",
"difficulty": "0x400",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x0000000000000000000000000000000000000000",
"alloc": {
"0x4f4db5c14123474b1b173a8d25e676f388202010": {
"balance": "1000"
}
},
"config": {
"chainId": 15,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0
}
}
参数 | 说明 |
---|---|
chainId | 区块链网络ID,以太坊公网网络 ID 是 1,私有链节点的时候要指定不同的网络 ID |
HomesteadBlock | 设置为 0 表示使用 Homestead 发布该链 |
nonce | 一个 64 位随机数,用于挖矿 |
timestamp | 设置创世块的时间戳 |
parentHash | 上一个区块的hash,创世块就为0 |
mixhash | 与 nonce 配合用于挖矿,由上一个区块的一部分生成的hash |
difficulty | 设置设置当前区块的难度,越大挖矿就越难 |
alloc | 用来预置账号以及账号的以太币数量 |
coinbase | 矿工账号 |
extraData | 附加信息 |
gasLimit | 用来限制区块能包含的交易信息总和 |
初始化区块链:
geth --datadir data init genesis.json
初始化成功后,会在数据目录 data 中生成 geth 和 keystore 两个文件夹。
如果出现错误,可以移除原来的创世块,再次初始化区块链。
geth removedb --datadir data
进入控制台:
geth --datadir data --networkid 15 console
启动挖矿:
miner.start(5)
线程数:5,第一次启动会先生成 DAG 文件,等进度达到 100% 后就开始挖矿,挖到一个区块奖励 5 个以太币,挖矿所得的奖励会进入矿工的账户,默认是本地账户中的第一个账户。
设置挖矿账户(默认第1个):
miner.setEtherbase(eth.accounts[0])
查询账户余额:
eth.getBalance(eth.accounts[0])
返回值的单位是wei,即以太币的最小单位,1个以太币 = 10的18次方个wei。
要查看有多少个以太币,可以换算成以太币:
web3.fromWei(eth.getBalance(eth.accounts[0]),'ether')
停止挖矿:
miner.stop()
交易转账:
// 转账 10 个以太币
amount = web3.toWei(10,'ether') eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:amount})
报错了,原因是账户每隔一段时间就会被锁住,要发送交易,必须先解锁账户,由于我们要从账户0发送交易,所以要解锁账户0:
personal.unlockAccount(eth.accounts[0])
如果发现金额还到账,此时交易已经提交到区块链,但还未被处理,这可以通过 txpool 来查看交易池中的状态:
txpool.status
{
pending: 1,
queued: 0
}
其中 pending: 1 表示还未被处理,要启动挖矿,然后等挖到一个区块之后就停止挖矿:
miner.start(1); admin.sleepBlocks(1); miner.stop()
查看区块数:
eth.blockNumber
退出控制台:
exit