以太坊私有链与联盟链的坑

记录局域网下,多个私有节点连接为联盟链的坑


创世区块的创建

保存为json格式

{
    "nonce": "0x0000000000000042",     
    "timestamp": "0x00",
    "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "extraData": "0x00",     
    "gasLimit": "0x8000000",     
    "difficulty": "0x400",
    "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "coinbase": "0x3333333333333333333333333333333333333333",     
    "alloc": {
     },
     "config": {
        "chainId": 15,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    }
}

difficulty:设置为0x400,设置过大,miner.start()会经常卡住。

初始化创世区块

geth --datadir "/home/ubt/mychain/" init  ./CustomGenesis.json


启动私有链

geth --identity "mychain" --datadir "/home/ubt/mychain/" --rpc --rpcapi "db,eth,net,web3,admin,miner,personal,rpc" --rpccorsdomain "*"--nodiscover --networkid 100 console 


坑:--nodiscover 使用这个参数,在连接多个私有节点时候一定要用,这样你的节点就不会被其他人发现,除非手动添加你的节点。否则,就只有一个被无意添加到一个陌生区块链上的机会,那就是跟你有相同的genesis文件和networkID,然后同步到他的节点区块高度,而不是原来自己节点的高度,造成联盟链转账不成功。

创建账户

personal.newAccount(‘123')


开启挖矿

miner.start(1)


局域网联盟链搭建

用虚拟机开启另一个节点,要求虚拟机为2G内存、2个cpu,同步联盟链节点高度需要。

通过addPeer添加第一个节点

admin.addPeer('enode://b4a4e74ded2c2ee0a5a6c8251036e098dd7e76594656708fdc6015d8de52b2631f197c4c7ab241ed9dfd5a429d582890c9a29299d7fc2f3ef8a35914faab8901@192.168.1.105:30303')

@[::]:30303 改为第一个节点的IP地址



添加完后会同步节点区块高度,注意对比第一个节点与第二个节点高度是否一致,通过eth.blockNumber查询


发起转账

personal.unlockAccount(eth.coinbase) //先解锁账户

eth.sendTransaction({from: eth.coinbase, to: '目标地址', value: 1000000000000000000}) //value单位wei

开启挖矿可看到目标地址的余额增加。



-------------------------------------------------------------------------------------

rpcapi常用操作

新建账户
personal.newAccount(‘123')

查看余额
eth.getBalance(eth.accounts[0])

查看钱包账户
personal.listWallets

解锁账户(转账时)

personal.unlockAccount('账户地址')

开始挖矿
miner.start(1)

区块高度
eth.blockNumber


停止挖矿
miner.stop()

挖矿奖励地址更换
miner.setEtherbase(eth.accounts[1])

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页