簡単なブロックチェーンをつくる(その8 複数ノード)

 ブロックチェーンを複数のノードでつくらせる.各ノードの名前は localhost:5000, localhost:5001 などのようにドメイン名とポート番号にする.

# ノードの所有者
node_owner = sys.argv[2]
print("node owner=", node_owner)

@app.route('/nodes/add', methods=['POST'])
def add_nodes():
    values = request.get_json()
    address = values.get('nodes')

    if address is None:
        responce = {
            'message': 'Missing node'
            }
        return jsonify(responce), 400

    for k in address:
        url = urlparse(k)
        bc.nodes.append(url.netloc)

    responce = {
        'message': 'New nodes added',
        'nodes': bc.nodes
    }
    return jsonify(responce), 201

# host: localhost
if __name__ == "__main__":
    app.run(port=int(sys.argv[1]))

1つのPC上で複数のノードをつくるには

> python hoge.py 5000 Sato
(別のターミナルから)
> python hoge.py 5001 Yamada

のように,ポートとノード所有者を入力して実行する.このままだとそれぞれのブロックチェーンがつくられるだけなので,まずは別ノードの存在を伝える必要がある.

> curl -X POST -H "Content-Type: application/json" -d "{\"nodes\": [\"http://localhost:5001\"]}" "http://localhost:5000/nodes/add" | jq

により,5000 のノードに対して 5001 のノードの存在を伝え,Blockchain.nodes に localhost:5001 を保存する.逆の場合も同様.

 ノード間の同期は次回に行う.全体のコードも次回.