ETH开发系列区块链

以太坊搭建私链与组网

2018-07-02  本文已影响24人  Blue_Sky_2017

以太坊私链搭建步骤:

  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"
}

  1. 在Geth安装目录下放置创世区块文件并初始化
geth --datadir "%cd%\chain" init genesis.json
//%cd%:代表Geth安装目录
geth -datadir "%cd%\chain" console

以太坊两台机器组网

geth --datadir "./" init genesis.json  //初始化创世区块
geth --datadir "./" --nodiscover --networkid 333 --ipcdisable --port 1111 --rpc --rpyitaicport 2222 console  //启动Geth控制台开发工具  
admin.nodeInfo.enode  //获取本节点信息  
(我的返回值:  
"enode://c4561d49c91090f4666969dd01b223adbe10c9eeb3d65326002099e4a9f3f17dec3d3c70c8dceffbe4438d3f5f0ee5a9a11841076063422b629be778d669c8df@[::]:1111")  
)
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  (返回其他节点的信息)
- 创建账户,返回账户地址  
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命令行输入智能合约并执行

其他注意事项

C:\Program Files\Ethereum-Wallet\Ethereum Wallet.exe --rpc "\\.\pipe\geth.ipc" (我装到了c盘,用管理员权限)
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中执行命令  
eth:包含一些跟操作区块链相关的方法
net:包含以下查看p2p网络状态的方法
admin:包含一些与管理节点相关的方法
miner:包含启动&停止挖矿的一些方法
personal:主要包含一些管理账户的方法
txpool:包含一些查看交易内存池的方法
web3:包含了以上对象,还包含一些单位换算的方法  

通过交易hash查看交易信息.png 查看交易暂存信息.png eth转账命令使用.png

你的赞赏,是我的动力

谢谢赞赏Money随意.png
上一篇 下一篇

猜你喜欢

热点阅读