單機多節點 POA 實作

加密貨幣

  • 單機多節點 Proof of Authority(POA)
    • PoW,Miner 必須靠使用算力去解決密碼學問題來取得寫帳
    • PoA 思維是直接指定哪些節點有寫帳權,其他節點透過演算法如果是被授權的節點打包 Block 則判定 Block 有效

geth Clique Private chain (PoA 版本)

在同一個 machine 下建立 node

  • install geth
  • 4 node (建立四個資料夾)
    • node 是一般的 ethereum client (做 POW)
    • signer 在接下來的情境中當成打包 block 的角色
    • node1
    • node2
    • signer1
    • signer2
  • 為 node 建立 account
    • 分別到四個資料夾下做
    • geth --datadir ./data account new
    • 設定密碼

開始建立 Private chain

  • 創世塊
    • puppeth
    • 對你的創世塊命名
    • 選擇操作 2 來設定創世塊
    • 用 PoA,所以選擇 2
    • 設定多久可以挖到一塊 block (difficulties)
    • 指定一個 Account address 作為授權打包的角色。這裡使用上面產出的 Signer1 的 address (0x 結束輸入)
    • 指定要不要事先給一些 ether。這裡選 node1 和 signer1 的 address(0x 結束輸入)
    • Network Id,直接用 default(random)
    • 沒什麼需要特別加入 genesis 的,留空
    • 選 2 存檔
    • ctrl+c 離開 => 產生 .json 檔
  • 替 4 個節點初始化 Private chain
    • geth –datadir node1/data init 創世塊.json
    • geth –datadir node2/data init 創世塊.json
    • geth –datadir signer1/data init 創世塊.json
    • geth –datadir signer2/data init 創世塊.json
  • 啟動 geth client 並設定 peers 間的連線
    • 在 node1, node2 目錄使用指令啟動 geth
      • geth –datadir ./data –networkid 55661 –port 2000 console
      • 確認:
        • datadir 參數沒問題,先前的步驟已經在每個節點各自的目錄都建立了 data 目錄
        • networkid 大家一定都要用同一個值才可以互相連線
        • port 用來讓 geth 跟其他 geth 連線所 listen 的一個 port,由於四個節點都在本機,所以這裡必須都指定不同的值,以下使用 node1 2000, node2 2001, signer1 2002, signer2 2003 當範例
    • 節點是授權打包 block 的節點,那你啟動時要先 unlock 你的 account,這樣才可以進行交易的打包
    • 啟動 signer1 和 signer2 時都要用 unlock 參數帶入他們各自的 address 解鎖
      • geth --datadir ./data --networkid 55661 --port 2002 --unlock 5cc640ae524f70c39081d65bc699b3b61a67bd3f console

交易

  • 注意: PoS 沒有挖礦的動作,所以放著給他跑是不會生出新的 Eth 的
  • 解鎖帳號:
    • 使這個帳號可以轉出金錢
    • personal.unlockAccount("<A address>")
  • 轉帳
    • 從 A 到 B
    eth.sendTransaction({
        from:"<A address>",
        to:"<B address>",
        value: web3.toWei(0.05, "ether")
    })
    
comments powered by Disqus

Related