使用dev的方式创建以太坊私链(单节点)
启动私链
# 开启私链
geth --networkid 123 --dev --datadir data1 --rpc --rpcaddr 192.168.1.114 --rpcport 8989 --port 3000
# 进入私链控制台
cd data1
geth attach ipc:geth.ipc
创建合约
- 使用npm下载solcjs
npm install -g solc@0.4.17
- 新建 HelloWorld.sol 文件,并写如下代码
pragma solidity ^0.4.17;
contract HelloWorld{
function mutiply(uint number) public returns(uint){
return number*6;
}
}
- 使用solcjs编译代码,得到二进制和abi文件
solcjs --bin --abi HelloWorld.sol
部署合约
var code = "0x..." //将编译生成的二进制内容拷贝到字符串中
var abi = ... //将abi内容拷贝过来
var myContract = eth.contract(abi)
web3.eth.estimateGas({data:code}) //评估汽油费
personal.unlockAccount(personal.listAccount[0]) //输入密码,解锁第一个账户
//部署合约
var contract = myContract.new({from:personal.listAccount[0],data:code,gas:200000})
//挖矿,将合约加入区块链
miner.start()
miner.stop()
//测试方法
contract.mutiply.call(6) //结果为 36
使用创世纪块初始化以太坊私链,并部署多节点
新建创世块文件,genesis.json 并写入以下内容:
{
"config": {
"chainId": 101,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc": {},
"coinbase": "0x0000000000000000000000000000000000000000",
"difficulty": "0x400",
"extraData": "",
"gasLimit": "0xffffffff",
"nonce": "0x0000000000000042",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp": "0x00"
}
节点1
- 初始化节点1的创世块
geth --datadir data1 init genesis.json
- 启动节点1
geth --datadir data1 --rpcport 8481 --port 30301 --networkid 29381 console
节点2
- 初始化节点2的创世块
geth --datadir data2 init genesis.json
- 启动节点2
geth --datadir data2 --rpcport 8482 --port 30302 --networkid 29381 console
连接两个节点并验证连接的有效性
- 查看节点1的信息
admin.nodeInfo
结果:
{
enode: "enode://49d1e1238345d2a457d42da3a87a22cfbecca9c55bab57fa0f15ab8d05c3c107147da17b38e1fbe7ce608f02e8968d4d16501eb794eb0edf2404fdf26d9bffa7@113.46.147.90:30301",
id: "61fa75d7e36d6949d8486e485a58a81454b69692fc78e47c5a104b60e02d2649",
ip: "113.46.147.90",
listenAddr: "[::]:30301",
name: "Geth/v1.8.17-stable/linux-amd64/go1.9.7",
ports: {
discovery: 30301,
listener: 30301
},
protocols: {
eth: {
config: {
chainId: 101,
eip150Hash: "0x0000000000000000000000000000000000000000000000000000000000000000",
eip155Block: 0,
eip158Block: 0,
homesteadBlock: 0
},
difficulty: 1024,
genesis: "0x2720038ef46044a7a895296b85745294340ecfcedc32f8c9e9802129aeb62890",
head: "0x2720038ef46044a7a895296b85745294340ecfcedc32f8c9e9802129aeb62890",
network: 29381
}
}
}
- 将节点1的enode信息加入节点2
在节点2的终端输入以下内容:
admin.addPeer("enode://49d1e1238345d2a457d42da3a87a22cfbecca9c55bab57fa0f15ab8d05c3c107147da17b38e1fbe7ce608f02e8968d4d16501eb794eb0edf2404fdf26d9bffa7@113.46.147.90:30301")
- 验证节点是否加入成功
admin.peers
结果:
[{
caps: ["eth/63"],
enode: "enode://49d1e1238345d2a457d42da3a87a22cfbecca9c55bab57fa0f15ab8d05c3c107147da17b38e1fbe7ce608f02e8968d4d16501eb794eb0edf2404fdf26d9bffa7@113.46.147.90:30301",
id: "61fa75d7e36d6949d8486e485a58a81454b69692fc78e47c5a104b60e02d2649",
name: "Geth/v1.8.17-stable/linux-amd64/go1.9.7",
network: {
inbound: false,
localAddress: "192.168.1.114:38360",
remoteAddress: "113.46.147.90:30301",
static: true,
trusted: false
},
protocols: {
eth: {
difficulty: 1024,
head: "0x2720038ef46044a7a895296b85745294340ecfcedc32f8c9e9802129aeb62890",
version: 63
}
}
}]
网友评论