本文へスキップ
このページは英語からの機械翻訳を使用しており、誤りや不明瞭な表現が含まれている可能性があります。最も正確な情報については、オリジナルの英語版をご覧ください。頻繁な更新のため、一部のコンテンツはオリジナルの英語になっている可能性があります。Crowdinでの取り組みに参加して、このページの翻訳改善にご協力ください。 (Crowdin translation page, Contributing guide)

高可用性の設定

ServiceChainでブリッジが1つしか使用されていない場合、そのブリッジが単一障害点となる可能性がある。これを解決するために、2つ以上のブリッジでHAシステムを構築する方法を説明する。下図に示すように、少なくとも2組のブリッジが接続されるように構成し、一方のブリッジ接続に問題が発生しても、もう一方のブリッジを介してチェーン間のデータ・アンカリングとバリュー転送が正常に機能するようにする。

前提条件​

  • ENのメインブリッジとSCNのサブブリッジは接続されている。 If it's not, please refer to Baobab connection to establish the connection.
  • This section describes how to add an extra bridge between Baobab and a ServiceChain. 同じように、別のブリッジを追加してHAをセットアップすることもできる。

ステップ1:EN-SCN間に別のブリッジを追加する​

In Connecting to Baobab, we assume that the EN and the SCN connected by a bridge as EN-01 and SCN-L2-01, respectively. このセクションでは、EN-02とSCN-L2-02の間にもうひとつブリッジを加える。同じ手順なので、簡単に説明しよう。

EN-02 をビルドした後、conf/kend.conf で SC_MAIN_BRIDGE を 1 に設定し、EN-02 上で ken を再起動する。


SC_MAIN_BRIDGE=1

EN-02のKNI情報を以下のコマンドで確認する:


EN-02$ ken attach --datadir ~/data
> mainbridge.nodeInfo.kni
"kni://eb8f21df10c6562...25bae@[::]:50505?discport=0"

SCN-L2-02 にログインし、EN-02 の KNI で main-bridges.json を作成する。角括弧付きのJSON配列形式であることを確認してください。


SCN-L2-02$ echo '["kni://eb8f21df10c6562...25bae@192.168.0.5:50505?discport=0"]' > ~/data/main-bridges.json

SCN-L2-02 のシェル上で、kscn-XXXXXX-amd64/conf/kscnd.conf を以下のように編集します。ブリッジを接続するには、SC_SUB_BRIDGEを1に設定する。 SC_PARENT_CHAIN_ID is set to Baobob's chainID 1001. SC_ANCHORING_PERIOD` はアンカリングのトランザクションを親チェーンに送る期間を決めるパラメータである。 In this example, an anchor transaction is submitted to the parent chain (Baobab) for every 10 child blocks.


...
SC_SUB_BRIDGE=1
...
SC_PARENT_CHAIN_ID=1001
...
SC_ANCHORING_PERIOD=10
...

EN-02でkenを再起動すると、下図のようにEN-02とSCN-L2-02の間にブリッジが自動的に接続され、接続された箇所からデータアンカリングが開始されます。

EN-02とSCN-L2-02の間にブリッジを追加すると、以下のようにノード間の接続が確立されます。

ステップ2:ブリッジコントラクトの登録と加入​

上図のように、ブリッジ契約はEN-01とSCN-L2-01のみに登録されている。

SCN-L2-02 のコンソールに接続し、ブリッジ登録、ブリッジ加入、トークン登録の API を実行します。ブリッジとトークン契約は、Cross-Chain Value Transferのステップ2で、EN-01とSCN-L2-01でブリッジ契約を展開する際に作成されました。


$ kscn attach --datadir ~/data
> subbridge.registerBridge("0xCHILD_BRIDGE_ADDR", "0xPARENT_BRIDGE_ADDR")
null
> subbridge.subscribeBridge("0xCHILD_BRIDGE_ADDR", "0xPARENT_BRIDGE_ADDR")
null
> subbridge.registerToken("0xCHILD_BRIDGE_ADDR", "0xPARENT_BRIDGE_ADDR", "0xCHILD_TOKEN_ADDR", "0XPARENT_TOKEN_ADDR")
null

ブリッジ契約では、追加ブリッジに関する情報を更新する必要がある。 service-chain/value-transfer の erc20/erc20-addOperator4HA.js スクリプトは、Cross-Chain Value Transfer にデプロイされたブリッジ契約に、追加ブリッジのオペレーターを登録します。

まず、SCN-L2-02上の追加ブリッジのオペレータアドレスを確認し、それらをcommon/bridge_info.json内のbridgesに追加してください。


$ kscn attach --datadir ~/data
> subbridge.childOperator
"0x2ed72a9d7fe5da7672fd21567e07302431649b0b"
> subbridge.parentOperator
"0x5f4d5ac6da5d2d1f0af0e1bd8bc85a43a0ba41c5"


"bridges": [
{
"child": { "operator": "0x10221f7f9355017cd0c11444e7eecb99621bacce" },
"parent": { "operator": "0x3ce216beeafc62d20547376396e89528e1d778ca" }
},
{
"child": { "operator": "0x2ed72a9d7fe5da7672fd21567e07302431649b0b" },
"parent": { "operator": "0x5f4d5ac6da5d2d1f0af0e1bd8bc85a43a0ba41c5" }
}
]

ブリッジ契約の所有者のみが、オペレーターを登録することができます。 erc20-deploy.js は、ブリッジ契約の所有権を SCN-L2-01 の運営者に譲渡したため、このスクリプトには運営者の鍵で署名する必要があります。 SCN-L2-01 は、これらを ~/data/child_bridge_account および ~/data/parent_bridge_account に保存します。各ディレクトリには、キーストアファイルとそのパスワードファイルが含まれています。これら2つのディレクトリを、スクリプトを実行しているマシンにコピーし、そのパスをスクリプトに指定してください。 erc20-deploy.js によって transfer_conf.json が作成された erc20 ディレクトリ内で、このスクリプトを実行してください。


$ cd erc20
$ CHILD_OWNER_KEYSTORE=/path/to/child_bridge_account \
PARENT_OWNER_KEYSTORE=/path/to/parent_bridge_account \
node erc20-addOperator4HA.js

警告

ブリッジアカウントのディレクトリには、オペレーターのキーストアとその平文パスワードが含まれており、これらを利用することでオペレーターアカウントを完全に制御することが可能になります。スクリプトの実行後は、コピーを削除してください。

複数のブリッジがある場合、閾値を設定することで、より安全に値の伝達を行うことができる。バリュー・トランスファーは、通常、閾値以上のオペレーターがバリュー・トランスファーを要求した場合にのみ有効にすることができる。例えば、今回の例のように、ブリッジペアが2つあり、閾値が2に設定されている場合、両方が正常に要求された場合にのみ値転送を行うことができる。つまり、1つのブリッジが攻撃を受けて異常なリクエストを送信したとしても、それを防ぐことができる。このスクリプトは、bridge_info.json に記載されている橋の数をしきい値として設定します。別の値を使用するには、実行時に THRESHOLD を設定してください。例:THRESHOLD=1 node erc20-addOperator4HA.js。

このスクリプトは、SCN-L2-01のオペレーターアカウントから、ノード外部へトランザクションを送信します。処理が完了したら、SCN-L2-01上でkscnを再起動し、そのサブブリッジがオペレーターアカウントのノンスを再読み込みするようにしてください。


SCN-L2-01$ kscnd stop
SCN-L2-01$ kscnd start

登録が完了すると、下図のようにEN-02とSCN-L2-02の両方にブリッジ契約が登録され、HAが構成されます。

2つ以上のブリッジペアがHA用に接続されている場合、同じブロックに対するデータアンカリングトランザクションは複数回発生し、値移転トランザクションも複数回発生する可能性がある。つまり、追加料金が必要となる。

ページを改善してください。