區塊鏈——在本地Ubuntu16.04下搭建以太坊私有鏈網絡,與服務器上的ubuntu16.04進行連接、同步、發送交易

安裝環境

打開終端,依次輸入以下命令

sudo apt-get update

sudo apt-get install software-properties-common

sudo add-apt-repository -y ppa:ethereum/ethereum

sudo add-apt-repository -y ppa:ethereum/ethereum-dev

sudo apt-get update

sudo apt-get install ethereum

安裝完成後,輸入geth -h,如果有列出信息則說明安裝成功,可查看列出信息,方便後續的操作在這裏插入圖片描述

創建創世區塊

作爲區塊鏈, 鏈子總要有個頭,所以需要創建一個創世塊作爲頭部,纔好往下添加,創世文件名稱命名爲gen_hbt.json,內容如下,爲json格式

{
  "config": {
        "chainId": 20191111,
        "homesteadBlock": 0,
	"eip150Block": 0,
        "eip155Block": 0,
        "eip158Block": 0
    },
  "coinbase"   : "0x0000000000000000000000000000000000000000",
  "difficulty" : "0x20000",
  "extraData"  : "",
  "gasLimit"   : "0xffffffff",
  "nonce"      : "0x0000000000000042",
  "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "timestamp"  : "0x00",
  "alloc"      : {}
}

文件內容字段說明如下

在這裏插入圖片描述

  • 其中gasLimit應填的比較大,否則在接下去測試轉賬時會提示錯誤,提示超出gasLimit
  • alloc爲爲預置賬號充值以太幣,這些一般是在ico階段參與的用戶,可以在創世塊中爲這些初期支持用戶分發以太幣
  • 打開終端,cd到搭建一個文件夾中,在終端中輸入

geth --datadir ./data01 init gen_hbt.json

在這裏插入圖片描述
出現Successfully表示初始化成功了,其中geth/chaindata中存放的是區塊數據,keystore中存放的是賬戶數據。

啓動geth私有鏈客戶端

在終端輸入:

geth --syncmode full --datadir ./data01 --identity "my etherum" --ipcdisable --allow-insecure-unlock --rpc --rpccorsdomain "*" --rpcapi "db,eth,net,web3" --rpcport "8545" --port "30303" --networkid 20191111 --nodiscover console 2>>geth01.log

如果想將Ubuntu作爲永久區塊鏈節點使用,當使用nohup命令時,Geth啓動參數console必須去掉,否則Geth會自動停止。
使用不同的端口,記得要加—ipcdisable參數,否則會報錯,因爲同時打開兩個geth進程

創建賬戶

在控制檯中輸入
personal.newAccount("123456")
,注意“123456”就是密碼了,請自行更改爲其他的字符串。
在這裏插入圖片描述
爲什麼要創建賬戶?

因爲接下去要挖礦,沒有賬戶是挖不了礦的,因爲挖礦成功後,系統會獎勵5個ETH,需要有賬戶接受獎勵。

挖礦

在控制檯輸入
miner.start()
開始挖礦。括號裏填數字,如miner.start(1)表示1個線程,默認是4個線程

停止挖礦

miner.stop()

挖到一個區塊就停止

miner.start();admin.sleepBlocks(1);miner.stop()

添加節點(在本地ubuntu添加服務器ubuntu的節點)

  • 在服務器上
    在服務器上按同樣的命令搭建一個以太坊私有鏈節點,並在服務器上執行命令獲取當前節點的地址:
    admin.nodeInfo.enode
    在這裏插入圖片描述查詢服務器的ip地址:10.10.70.208

  • 在本地
    複製服務器上的節點地址,並將其中的127.0.0.1 改成之前查到的服務器上的ip地址10.10.70.208,然後在本地終端中通過
    admin.addPeer("其他節點的地址")
    進行連接
    在這裏插入圖片描述請注意這張圖中的服務器地址與上一張圖中的服務器地址的區別:127.0.0.1 改成了之前查到的服務器上的ip地址10.10.70.208
    可以通過net.peerCount查詢連接的節點個數

轉賬

eth.sendTransaction({from:支付方帳號, to:接收方帳號,value:以太幣數量})
如:

設置轉賬金額

amount = web3.toWei(5, 'ether')
在這裏插入圖片描述

解鎖賬戶

personal.unlockAccount(eth.accounts[0])
或者
personal.unlockAccount(eth.accounts[0], "lyh001", 300) # "lyh001"是密碼, 300是解鎖時間,0表示沒有限制
在這裏插入圖片描述

發送交易

eth.sendTransaction({from:eth.accounts[0], to:"0x94e3d08df19b19dc1dac61d4bf7354013fdad9fc", value:amount})
在這裏插入圖片描述

查看待確定交易

eth.getBlock("pending", true).transactions

> eth.getBlock("pending", true).transactions
[{
    blockHash: "0xe0665773366b0664e668ee268928cc9631764483b5729983705d45157dc62df8",
    blockNumber: 5139,
    from: "0x96742c1819ae615e8fe1d5a1c67d647572355ddb",
    gas: 10000000,
    gasPrice: 1000000000,
    hash: "0x3cbdc1dcd06eb7f7f46e1d45b8ea0fe786cd4a84bafa6b7fe24b4721696ee0ff",
    input: "0x60fe47b10000000000000000000000000000000000000000000000000000000000001f77",
    nonce: 7,
    r: "0x1aaa6ae78df9d07638f7796dd1aadf28f0cbaced17aa4c2ec5c1f7eca4aaa86e",
    s: "0x6b9abcc784fdac3773ca246dc37fc694bbf2711ecf4c9d536575059f9a3ff42c",
    to: "0x15e618f0df946009f290924637507ccc0e446b9f",
    transactionIndex: 0,
    v: "0x2682f32",
    value: 0
}]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章