Docker 實作 PoW

加密貨幣

安裝


快速安裝

叢集版本

安裝

  • docker 詳情請看 docker 筆記

  • 執行 & 進入 ubuntu docker

    docker pull ubuntu
    docker run --name first_node -i -t ubuntu /bin/bash # 這個 docker 是用來跑私鏈的
    
  • docker 內安裝 geth

    • 升級 ubuntu apt-get
    apt-get update
    apt-get upgrade
    
    • 安裝 geth
    apt-get install software-properties-common
    add-apt-repository -y ppa:ethereum/ethereum
    apt-get update
    apt-get install ethereum
    

以上動作

你也可以考慮直接使用 geth-node,裡面的功能更完備 XD

docker pull blakeberg/geth-node

docker run -d -h geth --name geth -p 20022:22 -p 8545:8545 blakeberg/geth-node
ssh geth@localhost -p 20022

撰寫創世區塊 (Genesis)

  • 利用 puppeth 幫助撰寫
  • 照著互動式指令即可
    1. puppeth 指令
    2. 對此創世區塊命名
    3. 選擇 2 新增設定檔
    4. 選擇 1 PoW
    5. 若希望有一開始就存在的節點,將其節點地址複製到此,最後保留一個 0x 結束
    6. 設定 network id (留白則會預設 random)
    7. 其他想要設定的資訊
    8. 選擇 2 儲存設定檔
    9. Ctrl-C 結束設定

架設節點

  • 初始化節點
    • geth --datadir "./[資料存放資料夾]" --networkid [剛剛設定的 networdid] --rpc init [創世區塊.json]
    • 出現 “successfully wrote genesis block and/or chain rule set:…” 字樣則成功開啟
    • --maxpeers: 最多可連結點數
    • --nodiscover: 不可讓一般人找到 (需要手動加入節點)
      • 在 geth 指令加入 --bootnodes 參數
      • 進到 console 裡使用 admin.addPeer()
      • 存成 static-nodes.json 檔,讓geth自動連線
    • --netrestrict: 讓節點只會接受在指定IP子網域內的連線
    • --rpc: 启动 rpc 通信,可以进行智能合约的部署和调试
  • 新增帳戶(account)
    • geth account new
    • 也可以在 js console 裡下 personal.newAccount("passphrase")
    • 預設位置是放在 ./ethereum/keystorm
    • --datadir: 設定檔放置位置
  • 啟動並進入節點 console
    • geth --datadir "./[資料存放資料夾]" --networkid [剛剛設定的 networdid] console --mine
    • 最後面也可以不用加 console
    • --rpc: 啟動 rpc 通信,可以进行智能合約的部署和調適
    • --rpcaddr: default rpc ip 是 0.0.0.0,只有內部網路才能連,加 --rpcaddr {ip} 後,rpc 的 port 才會是外部也可以連,只是可能會不安全
    • --rpcport: 指定 rpc port

啟動其他節點

其實就是 架設節點

  • 節點初始化
    • geth --datadir "./[資料存放資料夾]" --networkid [剛剛設定的 networdid] --bootnodes enode://[主鏈 id]@[主鏈 ip]:30303 console --mine
    • 30303: 預設 port
    • 主機 ip: docker 了話,可以使用 docker inspect [container name] | grep IPAddress 來查找 container 被配置的區域 ip
    • --mine: 直接開始 mining
    • --bootnodes: 若不加入這個參數,節點可能會需要在網路上找其他節點找很久
    • 主鏈 id: 可以用 admin.nodeInfo 查找
  • 新增帳戶(account)
    • 一定要有帳戶才能收到挖礦的 $$ 啊~~~
  • 啟動節點
    • geth --datadir "./[資料存放資料夾]" --networkid [剛剛設定的 networdid] console --mine

確認節點同步

  • net.listening: 確認是否有在監聽其他節點
  • net.peerCount: 監聽其他節點數
  • admin.peers: 查看節點資訊

檢查錢包

這是最重要的 XD web3.fromWei(eth.getBalance(eth.coinbase), "ether")

交易

  • 參數版 eth.sendTransaction({from: eth.coinbase, to: "0x154230ed91d1e711e56b9c0f88b5ba5fd2b0503f", value: web3.toWei(1, "ether"),gas:22000,gasPrice:web3.toWei(45,"Shannon"),data: web3.toHex('ZeroCool')})
  • 簡單版 eth.sendTransaction({from: eth.coinbase, to: "0x154230ed91d1e711e56b9c0f88b5ba5fd2b0503f", value: web3.toWei(1, "ether")})
comments powered by Disqus

Related