创建一个genesis.json文件,并保存
mkdir ~/privatechain
cd privatechain
vi genesis.json
内容如下:
{
"config": {
"chainId": 10,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc" : {},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x20000",
"extraData" : "",
"gasLimit" : "0x2fefd8",
"nonce" : "0x0000000000000042",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00"
}
geth init(初始化创世区块)
geth --datadir data0 init genesis.json
geth console(console启动命令行模式,即可以在Geth中执行命令)
geth --datadir data0 --networkid 110 --rpc console --port 3000 --nodiscover
其中,--datadir
后跟文件目录位置(datadir表示设置当前区块链网络数据存放的位置);
--networkid
后跟一个数字,表示指定私有链的网络id为110,并且开启rpc服务。
注意:在以前的版本中,我们只用使用–dev然后执行miner.start()就可以挖矿,但是在后面的版本中,好像不管用了~~。
我miner.start()之后,返回null,查了资料才知道是因为新增了–dev.period value配置项。此配置默认值为0,也就是说只有有pending中的交易才会挖矿。
所以,之前的–dev参数依旧使用,然后再在后面添加–dev.period 1,注意,参数值为1,不是默认的0。
再重新启动节点,然后执行挖矿,先不管返回是否是null,执行之后,无论查看日志或执行eth.blockNumber都会发现块在不停的增高。
参考:https://blog.csdn.net/wo541075754/article/details/79260040
至此,就启动了区块链节点并进入了该节点的控制台,可以通过一些命令访问:
personal.newAccount():创建账户;
personal.listAccounts:查看账户,同eth.accounts
personal.unlockAccount(eth.accounts[0]):解锁账户;
eth.accounts:枚举系统中的账户;
eth.getBalance(eth.accounts[0]):查看账户余额,返回值的单位是 Wei(Wei 是以太坊中最小货币面额单位,类似比特币中的聪,1 ether = 10^18 Wei);
miner.setEtherbase(eth.accounts[1]):将账户1设置成coinbase
eth.blockNumber:列出区块总数;
eth.getBlock():获取区块;
miner.start():开始挖矿;
miner.stop():停止挖矿;
eth.coinbase:挖矿奖励的账户
web3.fromWei(eth.getBalance(eth.accounts[0]),‘ether’):Wei 换算成以太币;
amount = web3.toWei(5,‘ether’):以太币换算成 Wei;
eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:amount}):发起交易
txpool.status:交易池中的状态;
eth.getTransaction():获取交易;
admin.addPeer():连接到其他节点;
admin.nodeInfo:查看节点摘要信息
>eth.accounts
或>personal.listAccounts
> personal.newAccount() Passphrase: Repeat passphrase: "0xb327a595dfbc769d73144c060b4f34c392021dad"
> eth.getBalance(eth.accounts[0])
0
> eth.getBalance(eth.accounts[1])
0
获取余额的办法:1、从别的账户转过来;2、通过挖矿以获得以太币奖励。
>miner.start(1)
miner.setEtherbase(eth.accounts[1])
>miner.stop()
getBalance()
的返回值是wei,是以太币的最小单位,1以太币=10的18次方wei。要查看有多少个以太币,可以用web3.fromWei()
将返回值换算成以太币:> web3.fromWei(eth.getBalance(eth.accounts[0]),'ether')
8
> web3.fromWei(eth.getBalance(eth.accounts[1]),'ether')
12
> personal.unlockAccount(eth.accounts[0])
Unlock account Unlock account 0xdd00ebfa79050f5e3bec4b4f586977aff156d0f6
Passphrase:
true
> amount = web3.toWei(5,'ether')
"10000000000000000000"
> eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:amount})
INFO [02-22|20:05:04.454] Submitted transaction fullhash=0x52969edb7bccf6288d2c6690231e78cfefc03d8c0f6da6365 recipient=0x1816aa3Ce318DABDB266b7A72D8c06AF595D
"0x52969edb7b29ad918de1915ecccf6288d2c6690231e78cfefc03d8c0f6da6365"
> web3.fromWei(eth.getBalance(eth.accounts[1]),'ether')
12
发现账户余额没有发生改变,此时交易已经提交到区块链,但还未被处理,这可以通过用 txpool.status
命令可以看到本地交易池中有一个待确认的交易:
> txpool.status
{
pending: 1,
queued: 0
}
pending表示已提交但还未被处理的交易。要使交易被处理,必须要挖矿,启动挖矿,然后等挖到一个区块后stop
>miner.start(1);admin.sleepBlocks(1);miner.stop()
>
再次查看余额,发现收到了10个以太币,还多了5个以太币(即挖矿奖励)
web3.fromWei(eth.getBalance(eth.accounts[1]),'ether')
22.000378