Gift history
Please access after login.


Wait a moment...

【Symbol Mainnet】Symbolノード運用格闘記(ノード復旧編)【ShizuiNet】

993
2
2021-03-27 10:25:28
100000 mXYM
(1)

さて、前回はどのようにして僕がノードを再起不能なまでに崩壊させたかについて報告しました。ツィッターにも書きましたけど、スパコン系を独学でやってきたプログラマーは、ちょっと挙動がおかしくなると独特の行動に出ます。とりあえず全く動かなくなるまで情報採取のためにシステムを破壊し尽くして、その後クリーンインストールするという流れが染み付いています。サーバー系のプログラマーは絶対やらないようなことを平気でやる野蛮人です。ですから、普通の人はここまでシステムをおかしくすることはないと思います。では、このどん底から復活までの道のりを書いていきましょう。

 

システムを破壊しながら、バックアップを取ることもまた身についています。testnetでの経験で、targetディレクトリをバックアップしておけばなんとかなる可能性が高いということを知っていましたから、トラブルが匂ってきた初期の段階でコピーを保存してありました(復旧ポイント1)。mvで他の場所にとりあえず移動させるだけの簡易バックアップでしたが、後で非常に役に立ちました。しかし残念だったのは、ノードアカウントリンクがおかしくなった状態でのバックアップしか取れていなかったことです(失敗その5)。よくあることですが、バックアップを取ってあるから大丈夫と思う僕みたいなのに限って、使えないバックアップを取ってたりします。

 

それは、symbol-bootstrap config -p mainnet -a dual -c mypreset.yml --resetというコマンドを打った時にわかりました。ブロックデータを含めてtargetディレクトリ内のすべてのファイルが正常に再構築されるのですが、中身を検証してみると、ノードに設定したアカウントも新しいものに書き換わってしまっていたのです。ノードアカウントはノードのアイデンティティとも言えるもので、できれば元に戻したい。

(追記)この時、復旧に必要なノード証明書(certificate)も上書きされてしまったようです。

 

ここで使ったmypreset.ymlは、カスタムプリセットといいます。なくても問題ありませんが、targetの中のaddresses.yml, preset.ymlに必要なカスタム設定を書き込むのに使われます。今回は、以下のようなものをセットしてありました。

 

maxAccountRestrictionValues: 10
unfinalizedBlocksDuration: 10m
beneficiaryAddress: NBTCMO65TJCPCY7G4OX4Q6C464FCVZZB6LW6TNI

nodes:
    -
        friendlyName: ibone73
        host: symbol.shizuilab.com
        minFeeMultiplier: 10
        transactionSelectionStrategy: oldest

 

maxAccountRestrictionValuesは、最大受け入れ委任ハーベストアカウント数で、ここではデフォルトの10になっていますが、100とかにすることもできます。

unfinalizedBlockDurationは、NGLの初期設定ミスで0になっていたものを、10m(10分?)に再設定して、dualノードでもファイナライズがちゃんと進むようにする設定です。

beneficiaryAddressも、1.0.0では空欄になっていたのを、ノード報酬がちゃんと得られるように自分で特定のアカウントを指定したものです。このアドレスをエクスプローラーで見てもらうと分かりますが、実は僕のノードに委任してくださった方が多くいて、ノード崩壊までかなりの額のハーベスト報酬が入ってました。この収入を失いたくないという気持ちが生じてしまったために、若干の不具合を嗅ぎつけながらもノードをきちんと設定することに迷いがあったのも事実です(失敗その6)。

 

node:で区切ったところから下にあるのは、ノードに関する設定です。

friendlyNameとhostは、ノードの愛称とホスト名で、ノードリストに出てくるやつです。

minFeeMultiplierは、手数料の低いトランザクションをどこまで受け入れるかで、デフォルトは100 (=0.1xym?)です。ibone73はその1/10の手数料でも受け入れています。

transactionSelectionStrategyは、ノードが取る手数料戦略で、ibone73は低額でも先に並んだ人を優先するoldestにしてあります。日本人はちゃんと並べる民族なのです。

 

さて、ここまでは問題ないのですが、確かノードのアカウントを設定する方法がどこかにあったはずなのに、どうしても見つけられませんでした。コアデブのJaguarさんでも、どこかに書いてあったんだけどみたいなコメントしてたりしますよね。仕方がないのでaddresses.ymlのバックアップにあったノードアカウントに関する部分をそのまま貼り付けました。

 

target/addresses.yml
--------------------
version: 2
networkType: 104
nemesisGenerationHashSeed: 57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6
sinkAddress: NBRZOLFGSZGWJVDKUP4JOYVZLYBWEJSGY2XUCNQ
nodes:
    -
        name: node
        friendlyName: ibone73
        roles: 'Peer,Api'
        main:
            privateKey: >-
                ENCRYPTED:***********************************************
            publicKey: ***********************************************
            address: NCPPDLXGYBHNPQAXQ6RTNS3T46A7FNTXDFBD43Y
        transport:
            privateKey: >-
                ENCRYPTED:***********************************************
            publicKey: ***********************************************
            address: NA7WPAE4S2GSHKYF6O7JVSVQ6TJTFO5EVSEGOMQ
        remote:
            privateKey: >-
                ENCRYPTED:***********************************************
            publicKey: ***********************************************
            address: NBKIRGXRGDK74XDSSGDWIJ6YIY5IN2N6KJWP6FQ
        vrf:
            privateKey: >-
                ENCRYPTED:***********************************************
            publicKey: ***********************************************
            address: NB23ZH4SSDGQQVQBT7WNVTKFRKIJMEBGGUZLNKY

 

これの、node:以下の部分をそのままmypreset.ymlに貼り付けたわけです。書式がpresetと良く似ているのでいけるかなと思ったらいけませんでした(失敗その7)。symbol-bootstrap configをするたびに新しいアカウントが作られるので、しびれを切らしてsymbol-bootstrap linkでブロックチェーンに新しいノードアカウントをリンクしてしまいました(失敗その8)。

(追記)このリンク操作で、前のアカウントと結びついていた委任ハーベスターさんたちとの絆が完全に絶たれてしまいました。

 

NEMのslack等で教えてもらって、ようやく分かった正しい書き方はこうでした。Symbolのドキュメンテーションを探しても見つからず、結局はgithubの中にありました。気持ちが焦っている時は、必要な情報にたどり着けないのがgithub。

 

maxAccountRestrictionValues: 10
unfinalizedBlocksDuration: 10m
beneficiaryAddress: NBTCMO65TJCPCY7G4OX4Q6C464FCVZZB6LW6TNI

nodes:
    -
        friendlyName: ibone73
        host: symbol.shizuilab.com
        minFeeMultiplier: 10
        transactionSelectionStrategy: oldest

        mainPrivateKey: >-
                ENCRYPTED:******************************************
        transportPrivateKey: >-
                ENCRYPTED:******************************************
        remotePrivateKey: >-
                ENCRYPTED:******************************************
        vrfPrivateKey: >-
                ENCRYPTED:******************************************

 

***********で示した部分は、適宜自分のaddresses.ymlからコピーしてくださいね。ENCRYPTEDでも、パスワードさえ失ってなければちゃんと復活できます(復旧ポイント2)。ただし、これでtargetディレクトリ内のaddresses.ymlまでは復旧できますが、一度リンクしてしまったノードアカウントの再リンクには、ブロックチェーンに書き込まれたリンク情報を書き換えなければなりません。その時は、symbol-bootstrap linkを使った復旧をします。

 

symbol-bootstrap -p mainnet -a dual -c mypreset.yml --resetで、正しいノードアカウントがセットされたtargetディレクトリができたところで、symbol-bootstrap composeし、symbol-bootstrap run -dでノードを走らせます。ブロックチェーンの最新ブロックまで追いついたら、symbol-bootstrap linkを実行します(復旧ポイント3)。

 

? Enter password to use to encrypt and decrypt custom presets, addresses.yml, and preset.yml files. When providing a password, private keys will be encrypted
. Keep this password in a secure place! **********
2021-03-26T02:10:26.490Z info     Password has been provided
2021-03-26T02:10:26.759Z info     Linking nodes
2021-03-26T02:10:26.769Z info     Connecting to node http://localhost:3000
2021-03-26T02:10:26.873Z info     Node's minFeeMultiplier is 10
2021-03-26T02:10:26.893Z info     
2021-03-26T02:10:26.893Z info     Creating transactions for node: node, ca/main account: NCPPDLXGYBHNPQAXQ6RTNS3T46A7FNTXDFBD43Y
2021-03-26T02:10:26.894Z warn     Node node is already linked to Remote public key FD42E4307B6398EBCDBA5D554C2B6D73EEA627D070ACF7FF431751212E468CB2 which is different from the configured public key 956106B52975EF22979DD0D0C13434573C1225B73AF0B82E30908940C798D74E.
? Do you want to unlink the old Remote public key FD42E4307B6398EBCDBA5D554C2B6D73EEA627D070ACF7FF431751212E468CB2? Yes
2021-03-26T02:10:37.364Z info     Creating Unlink AccountKeyLinkTransaction from Node node to Remote public key FD42E4307B6398EBCDBA5D554C2B6D73EEA627D070ACF7FF431751212E468CB2.
2021-03-26T02:10:37.365Z info     Creating Link AccountKeyLinkTransaction from Node node to Remote public key 956106B52975EF22979DD0D0C13434573C1225B73AF0B82E30908940C798D74E.
2021-03-26T02:10:37.366Z warn     Node node is already linked to VRF public key 04CC48EEF9F715DDF8622AE2C64A990D460105E04E47E2458B1A1A005E52E65D which is different from the configured public key BD349CE9BA0739251D9DB38228528804FD3E1B25C01D2D0CE75E27460F6AF838.
? Do you want to unlink the old VRF public key 04CC48EEF9F715DDF8622AE2C64A990D460105E04E47E2458B1A1A005E52E65D? Yes
2021-03-26T02:10:46.964Z info     Creating Unlink VrfKeyLinkTransaction from Node node to VRF public key 04CC48EEF9F715DDF8622AE2C64A990D460105E04E47E2458B1A1A005E52E65D.
2021-03-26T02:10:46.966Z info     Creating Link VrfKeyLinkTransaction from Node node to VRF public key BD349CE9BA0739251D9DB38228528804FD3E1B25C01D2D0CE75E27460F6AF838.
? Do you want to announce 4 transactions for node node Yes
2021-03-26T02:11:01.049Z info     The node's main account is a multig account with Address: 3 min approval. Cosigners are: NBBIDMZP2ZWI3ROXOLVGVY7264HGWYGPNER5TNA, NBGPYXTWYKVQDUHBYGODJRK2HGT4KYPWAOFLZGA, NB7SS6ADE62RGFZVXBC3VJE6B4M23HMH3MHNPJI, NCP25RY7YIORU32SZUXEGDMHD4AHTZ65KHYKGUQ. The tool will ask for the cosigners provide keys in order to announce the transactions. These private keys are not stored anywhere!
? Enter the 64 HEX private key of one of the addresses NBBIDMZP2ZWI3ROXOLVGVY7264HGWYGPNER5TNA, NBGPYXTWYKVQDUHBYGODJRK2HGT4KYPWAOFLZGA, NB7SS6ADE62RGFZVXBC3
VJE6B4M23HMH3MHNPJI, NCP25RY7YIORU32SZUXEGDMHD4AHTZ65KHYKGUQ. Already entered 0 out of 3 required cosigners. [hidden]
? Do you want to enter more cosigners? Yes
Please provide an additional private key....
? Enter the 64 HEX private key of one of the addresses NBGPYXTWYKVQDUHBYGODJRK2HGT4KYPWAOFLZGA, NB7SS6ADE62RGFZVXBC3VJE6B4M23HMH3MHNPJI, NCP25RY7YIORU32SZUXE
GDMHD4AHTZ65KHYKGUQ. Already entered 1 out of 3 required cosigners. [hidden]
? Do you want to enter more cosigners? Yes
Please provide an additional private key....
? Enter the 64 HEX private key of one of the addresses NBGPYXTWYKVQDUHBYGODJRK2HGT4KYPWAOFLZGA, NB7SS6ADE62RGFZVXBC3VJE6B4M23HMH3MHNPJI. Already entered 2 ou
t of 3 required cosigners. [hidden]
Min Approval of 3 has been reached. Aggregate Complete transaction can be created.
2021-03-26T02:11:58.808Z info     Cosigner NBBIDMZP2ZWI3ROXOLVGVY7264HGWYGPNER5TNA is initializing the transactions.
2021-03-26T02:11:58.898Z info     Announcing Multisig Aggregate Complete Transaction hash 13E2FDDE8DE549912D21DD0E0D916EC7C09AFD35913B72F0E05D1657AE89BBB0

 

ノードアカウントは3/4のマルチシグにしているため、非常にごちゃごちゃして見づらいです。すでに別なキーがリンクされていることをブロックチェーンのデータから自動的に検出してくれます。そして、RemoteキーとVRFキーがすでにリンクされているので、今回コンフィグ(mypreset.ymlや新しくできているtarget/addresses.yml)で指定したものに置き換えますか?というメッセージが出ます。Yと答えると、それぞれのキーについてマルチシグの秘密鍵を求められますので、順番に入れていきます。するとunlinkとlinkをセットにしたマルチシグトランザクションがアナウンスされます。

 

・・・・・・・・・・・・・

 

そしてここで、画面が固まりました。やはりだめだったかとウォレットでもunlinkを試したところ、下記のようなcacheエラーが出ました。

 

 

後になってみると、これがsymbol-bootstrapによる修復トランザクションがすでにアナウンスされていたという意味だったようです。

 

そして、途方に暮れながら真っ白に燃え尽きていたところ、ウォレット画面にトランザクションが承認されましたのメッセージが出ました。緑の帯がピコーンと。確認してみると、ちゃんと変更が受理されているではないですか(復旧ポイント4)。

 

 

RemoteとVRFキーのUnlinkとLink、合計4つのアグリゲートトランザクションです。承認までに10分くらいかかったのは、symbol-bootstrapが設定した手数料が少なすぎたせいかもしれません。

 

このようにして、ほぼ丸一日かかった復旧は成功しました。しかし、ノードアカウントを変更し、リンクしなおしてしまったせいで、委任ハーベストははずれてしまい、委任してくださっていたハーベスターさんにはご迷惑をおかけしましたし、順調に得られていたインフレ報酬も永遠に失われました。でも、不完全な状態でかろうじて動いているノードは、いずれもっと深刻な状態でトラブルを生じていたでしょうし、正常に動いてないノードはブロックチェーン全体にとってはお荷物です。むしろこうしてトラブル情報を公開することが、symbolをより健全で安定したものにするのだと思っています。

(追記)リンクに矛盾が生じている状態のノードは、委任ハーベスト枠に余裕があっても、委任しようとするとウォレットで有効化(進行中)と表示されたまま進まず、ハーベストできない状態が確認できました。ご注意ください。


長い文章にお付き合いいただき、どうもありがとうございました。この記録が、ノードを運用するみなさんのお役に立つことを願っております。

 

目指せ北海道

 

Writer
歯の神経の中にいる「歯髄(しずい)細胞」を再生医療に活用するための研究をしています。再生医療の実用化に足りないものは細胞のトレーサビリティだと気づき、Symbolのブロックチェーン技術を使って、細胞の流通や製造管理のための「ShizuiNet」を開発中。現在、実用化のための大学発ベンチャー起業を準備しています。しずいノード(symbol.shizuilab.com)を運用しており、委任ハーベスト収入は研究開発費として使わせていただきます。下記リンクからノード実績を御覧いただけます。

Comment
Login required to post comment
Loading...
https://symbol-sakura-16.next-web-technology.com:3001,https://symbol.harvest-monitor.com:3001,https://hideyoshi-node.net:3001,https://harvest-01.symbol.farm:3001,https://criptian-xym-node.net:3001,https://35665.xym.stir-hosyu.com:3001,https://yuna.keshet.finance:3001,https://cryptocat-xym-node.com:3001,https://misaki-xym.com:3001,https://ik1-305-12844.vs.sakura.ne.jp:3001,https://17107.xym.stir-hosyu.com:3001,https://23639.xym.stir-hosyu.com:3001,https://sym-main-01.opening-line.jp:3001,https://sym-main-02.opening-line.jp:3001,https://sym-main-03.opening-line.jp:3001,https://sym-main-04.opening-line.jp:3001,https://sym-main-05.opening-line.jp:3001,https://sym-main-06.opening-line.jp:3001,https://sym-main-07.opening-line.jp:3001,https://sym-main-08.opening-line.jp:3001,https://sym-main-09.opening-line.jp:3001,https://sym-main-10.opening-line.jp:3001,https://symbol-node-01.kokichi.tokyo:3001,https://50038.xym.stir-hosyu.com:3001,https://27423.xym.stir-hosyu.com:3001,https://angel.vistiel-arch.jp:3001,https://xym.stakeme.tokyo:3001,https://00-symbol-node.yagiyoshi.com:3001,
6BED913FA20223F8,051FAEC15105C808,73019335A785A3AE,5289A9B0DBB7EB25,6B245EAF1302E444,2C4A4893229DD0A9,63509D495CAD7B80,481D74291A71FD1F,009388A38C91A8B2,4E94920841641B77,027C6AD49DE2C9F9,