以太坊搭建私链与组网

以太坊私链搭建步骤:

  1. 创建创世区块初始化文件(路劲:C:\Program Files\Geth\创建创世块的初始化文件genesis.json)
{
  "config": {
        "chainId": 10,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    },
  "alloc"      : {},
  "coinbase"   : "0x0000000000000000000000000000000000000000",
  "difficulty" : "0x02000000",
  "extraData"  : "",
  "gasLimit"   : "0x2fefd8",
  "nonce"      : "0x0000000000000042",
  "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "timestamp"  : "0x00"
}

  • [ ] 注释:
  • difficulty”: “0x40000”,//难度,该值越大,出块越慢.
  • “extraData”: “Genesis Block”,//附加信息,随意填写.
  • “gasLimit”: “0xffffffff”//每个块所能容载的gas上线,可以暂时理解为
  • [] 说明:
    配置自己的创世块是为了区分公有链,同一个网络中,创世块必须是一样的,否则无法联通
  1. 在Geth安装目录下放置创世区块文件并初始化
  • 初始化创世区块
geth --datadir "%cd%\chain" init genesis.json
//%cd%:代表Geth安装目录
  • 打开Geth开发交互控制台
geth -datadir "%cd%\chain" console

以太坊两台机器组网

  • [ ] 节点A:
geth --datadir "./" init genesis.json  //初始化创世区块
geth --datadir "./" --nodiscover --networkid 333 --ipcdisable --port 1111 --rpc --rpyitaicport 2222 console  //启动Geth控制台开发工具  
admin.nodeInfo.enode  //获取本节点信息  
(我的返回值:  
"enode://c4561d49c91090f4666969dd01b223adbe10c9eeb3d65326002099e4a9f3f17dec3d3c70c8dceffbe4438d3f5f0ee5a9a11841076063422b629be778d669c8df@[::]:1111")  
)
  • [ ] 节点B:(执行相同命令)
geth --datadir "./" init genesis.json  //初始化创世区块
geth --datadir "./" --nodiscover --networkid 333 --ipcdisable --port 3333 --rpc --rpcport 4444 console  //启动Geth控制台开发工具(注意端口不同)  
然后B节点加入A节点:(通过A的enode信息来连接,其中包括了ip地址和端口号)  
admin.addPeer("enode://c4561d49c91090f4666969dd01b223adbe10c9eeb3d65326002099e4a9f3f17dec3d3c70c8dceffbe4438d3f5f0ee5a9a11841076063422b629be778d669c8df@192.168.1.1(~~A节点Ip~~):1111")  (注意修改A节点IP)
  • [ ] 然后在两个节点上测试:
net.peerCount  (返回已经连接的其他节点的个数)  
admin.peers  (返回其他节点的信息)
  • [ ] 然后在一个节点创建账户,开始挖矿,另一个节点也会自动同步
    A节点可以将智能合约部署在私有链上,B节点可以根据合约部署地址来调用
- 创建账户,返回账户地址  
personal.newAccount()  
输入密码:*******  
- 查询存在的账户  
eth.accounts  
- 查询对应的账号  
eth.accounts[0]  
- 查询当前账户余额  
eth.getBalance(eth.accounts[0])  
- 交易  
#### 需要先解锁账户,以太坊的一个保护机制,每隔一段时间账户就会自动锁定,这个时候任何以太币在账户之间的转换都会被拒绝,除非把该账户解锁  
1. 解锁账户:
personal.unlockAccount(eth.accounts[0])
2. 格式化币数量
Amount = web3.toWei(5,’ether’)
3. 发起交易,返回交易hash值
eth.sendTransaction({from:发起交易账户地址,to:接收账户地址,value:货币数量})
4. 通过hash值查看交易  
eth.getTransaction(交易hash值)  
5. 开始挖矿--停止挖矿  
miner.start()----miner.stop() - 注意:挖矿页面可以不用管日志刷屏,确保输入完整命令然后回车就行,命令能够正常执行  
- 查看当前链上的未完成交易状态  
txpool.status  
- 查看当前区块数量  
eth.blockNumber  
- 通过区块号查看区块信息  
eth.getBlock(0)  //查看创世区块信息  
#### 开启挖矿默认会使用eth.accounts[0]账户,如果要切换挖矿账户,可以使用命令:  
miner.setEtherbase(eth.accounts[1])  

在私有链上部署智能合约

  1. 解锁账户,编写智能合约
var a_demotypesContract = web3.eth.contract([{"constant":false,"inputs":[{"name":"a","type":"uint256"}],"name":"f","outputs":[{"name":"b","type":"uint256"}],"payable":false,"type":"function"}]);
var a_demotyjipes = a_demotypesContract.new(
   {
     from: web3.eth.accounts[0], 
     data: '0x6060604052341561000c57fe5b5b60ab8061001b6000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063b3de648b14603a575bfe5b3415604157fe5b60556004808035906020019091905050606b565b6040518082815260200191505060405180910390f35b600060006008830290508091505b509190505600a165627a7a7230582010decdc0b0a43b565814fe904eae2544665457d6353c7d906fc2c43c81c867e40029', 
     gas: '4700000'
   }, function (e, contract){
    console.log(e, contract);
    if (typeof contract.address !== 'undefined') {
         console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
    }
 })
  1. 在Geth命令行输入智能合约并执行

其他注意事项

  • window以太坊钱包连接私有网络
  • Ethereum-Wallet.exe 有可能会超时失败,我们指定本机rpc
C:\Program Files\Ethereum-Wallet\Ethereum Wallet.exe --rpc "\\.\pipe\geth.ipc" (我装到了c盘,用管理员权限)
  • 启动命令包含字段说明
     --dev 表示自动创建一个账户并直接开始挖矿,--dev.period 1表示不用等有交易了才挖,如果设成0的话没有交易挖矿就是null
  • 命令详解:
geth –targetgaslimit 4294967295 –rpc –rpcaddr “192.168.1.5” –rpcport “8101” –port “30301” –rpcapi “eth,web3,personal” –networkid 20180401 –identity 20180401 -nodiscover -maxpeers 5 –datadir “chain” -unlock 0 -rpccorsdomain “*” –mine console 2>geth.log
******************************************************************************
targetgaslimit –每个块的gas上限,这里可以暂时理解为容量 
rpc –启动rpc通信,可以进行智能合约的部署和调试 
rpcaddr –rpc接口的地址 
rpcport –rpc接口的端口号 
port –网络监听端口,用于节点之间通信 
rpcapi –设置rpc的范围,暂时开启eth,web3,personal足够 
networkid –设置当前区块链的网络ID,是一个数字,可以随便写 
identity –区块链的标示,随便填写,用于标示目前网络的名字 
nodiscover 禁止被网络中其它节点发现,需要手动添加该节点到网络 
maxpeers 最大节点数量 datadir –设置当前区块链网络数据存放的位置 
unlock –解锁某用户(此处用用户坐标来控制,解锁后的用户调用接口发起交易时,不要需要提供密码) 
rpccorsdomain 限制rpc访问源的ip,代表不限制 
mine 允许挖矿 
console –启动命令行模式,可以在Geth中执行命令  
  • Geth的Javascript console执行环境,其内置了以下Javascript对象:
eth:包含一些跟操作区块链相关的方法
net:包含以下查看p2p网络状态的方法
admin:包含一些与管理节点相关的方法
miner:包含启动&停止挖矿的一些方法
personal:主要包含一些管理账户的方法
txpool:包含一些查看交易内存池的方法
web3:包含了以上对象,还包含一些单位换算的方法  

以太坊搭建私链与组网_第1张图片
通过交易hash查看交易信息.png
以太坊搭建私链与组网_第2张图片
查看交易暂存信息.png
以太坊搭建私链与组网_第3张图片
eth转账命令使用.png

你的赞赏,是我的动力

以太坊搭建私链与组网_第4张图片
谢谢赞赏Money随意.png

你可能感兴趣的:(以太坊搭建私链与组网)