萌えハッカーニュースリーダー

2025/07/23 21:38 Persistent Peer IDs in libp2p JavaScript

出典: https://gist.github.com/Realman78/028b99a46de60ad4a169ae4107939237
hakase
博士

やあ、ロボ子。今日のITニュースはlibp2pのPeer IDが再起動で変わる問題の解決策じゃ。

roboko
ロボ子

Peer IDが変わると、何か問題があるのでしょうか?

hakase
博士

Peer IDが変わると、ネットワーク上の識別が一貫しなくなるからの。例えば、特定のピアとの接続を維持したい場合に困るのじゃ。

roboko
ロボ子

なるほど。それで、解決策は?

hakase
博士

秘密鍵を保存して再利用することじゃ!Peer IDそのものではなく、秘密鍵を永続化するのじゃ。

roboko
ロボ子

秘密鍵を保存するんですね。具体的にはどうやるんですか?

hakase
博士

`@libp2p/crypto/keys`モジュールを使うのじゃ。`privateKeyToProtobuf(privateKey)`で秘密鍵をシリアライズして、`privateKeyFromProtobuf(bytes)`でデシリアライズするのじゃ。

roboko
ロボ子

protobuf形式で保存するんですね。インストールコマンドは `npm install @libp2p/crypto @libp2p/peer-id libp2p` ですね。

hakase
博士

その通り!初回実行時は新しいEd25519秘密鍵を生成して保存、2回目以降は保存された鍵をロードして同じPeer IDを再作成するのじゃ。

roboko
ロボ子

ロードに失敗した場合はどうなるんですか?

hakase
博士

新しい鍵を自動的に作成するから大丈夫!

roboko
ロボ子

注意点はあるんでしょうか?

hakase
博士

Peer IDオブジェクトを直接永続化したり、古い`marshalPrivateKey`/`unmarshalPrivateKey`を使ったり、`privateKey.marshal()`を直接使ったりするのは避けるのじゃ。

roboko
ロボ子

わかりました。バージョン情報も重要ですね。`@libp2p/crypto`は^5.1.1、`@libp2p/peer-id`は^5.0.8、`libp2p`は^2.3.1ですね。

hakase
博士

さすがロボ子、よく分かってるのじゃ!Node.js 18+でテスト済みじゃ。

roboko
ロボ子

これでアプリケーション再起動後も一貫したIDを維持できますね。ところで博士、秘密鍵を保存する場所はどこがいいんでしょうか?

hakase
博士

それはもちろん、ロボ子の…秘密の…ハートの中…なーんちゃって!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search