创建以太坊私链、建立节点集群,并发生交易

1. 启动节点, 加上console 表示启动后,启用命令行:
geth –datadir ./data/00 –networkid 168 console

在启动客户端时添加参数–dev,开发模式

2. 查看账户
eth.accounts

3. 创建用户:
personal.newAccount(“123456”)
personal.newAccount(“666666”)

其中参数为此账户的密码。
也可以先创建账户,然后输入密码:
personal.newAccount()

4. 查看区块数据
eth.blockNumber

5. 启动挖矿
miner.start()

返回结果为true则启动成功,具体执行情况可查看日志。

6. 停止挖矿
miner.stop()

当在执行挖矿时日志会不停刷屏,不用管,只要命令输入全,执行即可停止挖矿。

7. 查看账户余额
其中参数为区块链地址
eth.getBalance(“0x977f63283670a68bac3d2b0476006c9162ca154e”)

8. 转账
从账户 0x977f63283670a68bac3d2b0476006c9162ca154e 转账3个以太币到 0x730fded6881c18386475a03f064d16a67202dd51
eth.sendTransaction({from:”0x977f63283670a68bac3d2b0476006c9162ca154e”,to:”0x730fded6881c18386475a03f064d16a67202dd51″,value:web3.toWei(3,”ether”)})
当直接执行此方法时会抛出异常:
Error: authentication needed: password or unlock
at web3.js:3143:20
at web3.js:6347:15
at web3.js:5081:36
at :1:1

很明显,账户被锁。

9. 解锁转出账户
其中第一个参数为转出账户,第二个参数为密码。也可以直填写第一个参数,然后通过命令行提示再输入密码。

personal.unlockAccount(“0x977f63283670a68bac3d2b0476006c9162ca154e”,”123456″)
personal.unlockAccount(“0x730fded6881c18386475a03f064d16a67202dd51″,”666666”)

解锁完成之后,即可执行转账操作。但此时查看时会发现接收账户依旧为原来数值。此时需要执行挖矿命令,才会把转账真正完成。

10. 在以太坊私有网络中建立节点集群,并发生交易
geth –datadir ./data/00 –networkid 168 –ipcdisable –port 61910 –rpcport 8200 console
上面的命令以命令行的(console)的方式启动了节点, 所以我们可以通过继续输入下面的命令获取节点实例的enode url:
>admin.nodeInfo.enode
“enode://248b019d6b5cd57fb6ba5628a683146127b40a457ab2b1fbbd5ed88d5b225cda7527bcb8b9e62de080ea0f4279bab11aa6d5324ff528d68620b63b2a173bdbbd@[::]:61910”

###########################获取本机IP地址###########################
$ ifconfig|grep netmask|awk ‘{print $2}’
127.0.0.1
192.168.119.128
###########################

“enode://248b019d6b5cd57fb6ba5628a683146127b40a457ab2b1fbbd5ed88d5b225cda7527bcb8b9e62de080ea0f4279bab11aa6d5324ff528d68620b63b2a173bdbbd@192.168.119.128:61910”

再打开一个终端,初始化第二个节点:
geth –datadir ./data/01 init ./genesis.json
启动第二个节点:
geth –datadir ./data/01 –networkid 168 –ipcdisable –port 61911 –rpcport 8101 –bootnodes “enode://248b019d6b5cd57fb6ba5628a683146127b40a457ab2b1fbbd5ed88d5b225cda7527bcb8b9e62de080ea0f4279bab11aa6d5324ff528d68620b63b2a173bdbbd@192.168.119.128:61910” console
上面的命令中,–bootndoes 是设置当前节点启动后,直接通过设置–bootndoes 的值来链接第一个节点, –bootnoedes 的值可以通过在第一个节的命令行中,输入:admin.nodeInfo.enode命令打印出来.
也可以不设置 –bootnodes, 直接启动,启动后进入命令行, 通过命令admin.addPeer(enodeUrlOfFirst Instance)把它作为一个peer添加进来.
为了确认链接成功,第二个节点输入:
admin.nodeInfo
第一个节点输入:
net.peerCount
从得到的结果可以看出,第一个节点有1个peer链接, 链接的node id为:
“f36aeb617ec9c76e9dc907ec6b780b677eb55c03c56aad1af0fdb9914443426de7a56353332e540187a798c0400621e7dd135ac80537aba20e9a7547970abf81”
这个id,正好就是第二个节点的id.

按照这样的方式继续扩展,可以非常容易就可以建立本地节点集群.这些工作都可以写成脚本代码来完成, 里面还可以包含创建账户,挖矿等..
请参考:https://github.com/ethersphere/eth-utils下的gethcluster.sh脚本,以及README中的使用方法和示例.

链接成功后,使用文章中挖矿的账户,向第二个节点发送 “ether”.
首先查看第二个节点的Wei数量和整个网络的区块号,还有接收货币的账号id:
> eth.getBalance(eth.accounts[0])
530937500000000000000
> eth.accounts
[“0x730fded6881c18386475a03f064d16a67202dd51″]
> eth.blockNumber
1207

在第一个节点命令行中,执行下面的操作:
> eth.sendTransaction({from:”0x977f63283670a68bac3d2b0476006c9162ca154e”,to:”0x730fded6881c18386475a03f064d16a67202dd51″,value:web3.toWei(3,”ether”)})
Error: authentication needed: password or unlock
at web3.js:3143:20
at web3.js:6347:15
at web3.js:5081:36
at :1:1

> personal.unlockAccount(“0x977f63283670a68bac3d2b0476006c9162ca154e”,”123456″)
true
> eth.sendTransaction({from:”0x977f63283670a68bac3d2b0476006c9162ca154e”,to:”0x730fded6881c18386475a03f064d16a67202dd51″,value:web3.toWei(3,”ether”)})
INFO [02-02|01:15:53] Submitted transaction fullhash=0x1021f57a0014d0b5398aa63959ba31e3605a485fc1c2cece1e3998b25d5036d2 recipient=0x730FdEd6881c18386475A03f064d16A67202DD51
“0x1021f57a0014d0b5398aa63959ba31e3605a485fc1c2cece1e3998b25d5036d2”
> eth.pendingTransactions
[{
blockHash: null,
blockNumber: null,
from: “0x977f63283670a68bac3d2b0476006c9162ca154e”,
gas: 90000,
gasPrice: 18000000000,
hash: “0x1021f57a0014d0b5398aa63959ba31e3605a485fc1c2cece1e3998b25d5036d2”,
input: “0x”,
nonce: 1,
r: “0x343b301f40aca9f9694b6d0a02daa6dc1b0949d290640a11f11a8803f26cf907”,
s: “0x3ec038457fcc720752ea32a6247d2a2ab5cfba5a99c6799a893ef332e8a54487”,
to: “0x730fded6881c18386475a03f064d16a67202dd51”,
transactionIndex: 0,
v: “0x174”,
value: 3000000000000000000
}]

eth.sendTransaction就是执行发送以太币的操作, 参数from, to分别是发送账户和接收账户, web3.toWei(1, “ether”)是将1单位”ether”转换为相应的”Wei”数量.

然后执行挖矿,让交易生效
> eth.getBalance(eth.accounts[0])
533937500000000000000
第二个账户多了3个eth

11. 把–ipcdisable参数去掉,打开节点,则可以用wallet查看内容啦。
geth –datadir ./data/01 –networkid 168 –port 61911 –rpcport 8101 –bootnodes “enode://248b019d6b5cd57fb6ba5628a683146127b40a457ab2b1fbbd5ed88d5b225cda7527bcb8b9e62de080ea0f4279bab11aa6d5324ff528d68620b63b2a173bdbbd@192.168.119.128:61910” console

参考:
http://www.cnblogs.com/zl03jsj/category/997608.html
http://www.cnblogs.com/zl03jsj/p/6876064.html
http://blog.csdn.net/wo541075754/article/details/53073799
http://blog.csdn.net/sportshark/article/details/51855007
http://truffle.tryblockchain.org/index.html

欢迎关注我的微信公众号:

 

如无特殊说明,文章均为本站原创,转载请注明出处!

发表回复

您的电子邮箱地址不会被公开。