Base58 開発者ワークショップ参加記録メモ - 2024年9月20日
Base58アジア初開催!ビットコイン基礎講座~マルチシグでの安全管理法からL2開発基盤のスクリプトまで一気に習得~
前半の部
- Jadeが配られたあと、まさかのFirmware Updateからのスタート。
-
- JadeのWebサイトを開いてUpdateを実行。 https://jadefw.blockstream.com/upgrade/fwupgrade.html
- ただしその後の初期セットアップのときにはChromeを閉じないとUSB接続が上手く認識されない。USB接続で少し詰まっていた人が自分を含めて結構居た模様。
- Sparrow インストール。
- ダウンロード後の開発者の署名確認について、講師のLisaさんがVerifyすることの重要性を強調していたのが印象的だった。
- 新規Wallet作成時のシードフレーズ(12単語)について、Joeさんの「今日はPC内に保存していいですよ」との説明を聞いたLisaさんが強めに「いや、それはダメ。ちゃんと紙に書きましょう。ペンが要る人は?」と言っていた。でも結局その後しばらくして彼女自身がJadeのUSB接続にトラブって何度もシードフレーズを作成し直しているうちに面倒になったのか、「本当は絶対にダメなんだけど」と言いながらテキストエディタにシードフレーズをメモし始めたのにはちょっと笑ってしまった。
- 途中で「質問はありますか?」というタイミングがあったので、とりあえず手を挙げて思いついたことをとっさに質問。
Q: BIP-32 HD Walletにおける鍵のインデックスの最大値は? A: 2^32 = 4,294,967,296
-
- 質問した後で「くだらない質問で申し訳ない!」と思ったけど、後の祭りだった。
- JadeのFirmware Update・初期設定とSparrowのダウンロード・署名確認・インストールまででかなりの時間を消化。すでに11時半をまわっていたのでは。ここまでは正直に言って"行き当たりばったり感"がかなりあった。まああれだけの人数がいたらそうなるのは仕方ないと思う。 笑)
- まずはSingle Sig Walletを各自で作成 & テストネットでLisaさんから一括送金してもらう。
- Google Sheetsに各自が貼り付けたアドレスのリストをLisaさんがvimにコピーしてからコマンドラインの文字列に加工して一括送金。
- 確か、lightning-cli の multiwithdraw コマンドを使っていた。
- BDK-CLIでも同じことは出来るはず。 https://bitcoindevkit.org/bdk-cli/interface/#create-tx
- これについては22日のAfter PartyでLisaさんに質問できた。
Q: オンチェーン送金にLightningのCLIを使ったのはなぜ? A: 単に自分が慣れているから。
- 12時すぎから1時まで昼休み。提供されたチキンのお弁当をテーブルでもくもくと食べる。美味しかった。
- Sparrowを使って 2 of 2 Multi Sig Walletを各自で作成。Single Sigから2 of 2への送金をテスト。Multi Sigを自分で作ったのは初めて。SparrowのUIはまあまあ分かりやすいので特に問題は無し。
- 3 of 4 Multi Sig Walletを隣の人とペアで作成。ここで初めて他の参加者と言葉を交わす。(Tさん、ありがとうございました!) お互いの公開鍵を交換するのに一苦労。MacBookを傾けてQRコード読み取りを試みるも上手く行かず、お互いMacだったので、エクスポートしたファイルをAir Dropして解決。Air DropするにはVPNを切る必要があった。
- 公開鍵の交換に手間取っているときに近くをまわっていたJoeさんに助けを求める。エクスポート時のファイルの形式が違うということを丁寧に説明していただいた。
- 普段Youtubeで観ているJoeさんと実際に会話が出来て感動。会場には加藤規新さん、Bitbankのジョナサンさんも来られていてテーブルを周ってこまめにヘルプしてくださっていて、講師陣はこれ以上ないくらいに豪華だった。これであの参加費は安い!
後半の部
- ビットコインの仕組みをロールプレイで体験するグループと、BDKを使ったウォレット開発体験のグループに分かれた。自分はウォレット開発のグループに参加。
- 部屋をパーティションで2つに区切って、開発グループのテーブルに移動。「講義の後で実習」みたいな形式を予想していたが、始まってみるとGoogle Docsの資料を共有された後いきなり「もくもく会」形式で各自やってくださいという感じになったので、少々戸惑った。
- とりあえずドキュメントを読みながらこの辺をやってみる。
- すでに数日前にBDKをCloneして example フォルダ内のソースコードをかなりいじっていた。それを手動で元に戻してから作業を始めたつもりだったのだけど、なぜか変なところで引っかかってハマってしまった。
- 1つ目の問題は、上の画像にもある、2つ目の引数「CHANGE_DESCRIPTOR」が指定されていない、というエラー。cargo runコマンドを資料で指定された通りに実行しているのにおかしいな〜、と思っているところにジョナサンさんが近くに来られたので質問。親切に対応してくださって、本当に感謝。
- 2つ目は、--network=regtest としてRegtestに接続しているはずなのに、なぜかスクリプトからは"Testnetに接続されているのでチェーンが不正です"という旨のエラーメッセージが表示されてしまう問題。
- じっとソースコードを追っても原因が分からず、Joeさんが近くに来られたので質問。しばらくMacの画面を見ながらDocker Composeの起動パラメータを確認したり試行錯誤してくれたけど、最後はJoeさんにも「分からないです」と言われてしまう。結局これが解決しないまま5時すぎになってしまいタイムオーバー。
- あと10分ぐらい時間があります、とアナウンスがあったので「一からやり直すか」と思って別フォルダを作ってBDKのCloneからやり直す。再度 exampleフォルダの最新のソースコードを編集して実行したところ、あっけなく正常に動作した。どうもやっぱり数日前に自分がいじったコードの状態からスタートしたのが悪かったみたい。痛恨のミスだった。
- セッションの最後に、Joeさんが参加者に「Miniscriptを使って何か動くものが出来た人はいますか?」と言われたのを聞いて思わず他の人に混じって手を上げてしまったけど、実際にはサンプルがようやく動いただけでオリジナルなものは何も作れていませんでした。Joeさんごめんなさい。実はMiniscriptがどういうものかもよく分かっていませんでした。今やっとこの記事を読んだところ。
- 後半の部ではとにかく自分の知識不足を思い知らされた。曲がりなりにもソフトウェア開発を職業としているので、ビットコインに関連する何らかのソフトウェアを作りたい、という情熱だけはある。これを機会にこれからしっかりと勉強していきたいと思った。PoWするしかない、これに尽きる。
最後に、ワークショップを企画・準備・実施してくださった方々、本当にありがとうございました〜!
以下は関連リンク集です。
【ビットコイン】ウォレットの概要とHDウォレットの仕組み - Gunosy Blockchain Blog https://blockchain.gunosy.io/entry/2017/12/21/165314
ビットコインのHDウォレットと鍵導出の仕組み https://zenn.dev/fikastudio/articles/f7fd09e672c43f
【ビットコイン】リカバリーフレーズ保管方法!秘密鍵・パスフレーズとの違いや注意点を解説 - 知っとこ!ビットコイン図鑑 https://bitcoin-zukan.com/technology/recovery-phrase/
joemphilips/BitcoinTokyo2024_TechnicalWorkshop https://github.com/joemphilips/BitcoinTokyo2024_TechnicalWorkshop
Miniscript: Bitcoinのスマートコントラクトのこれまでとこれから | by joemphilips | Medium https://medium.com/@joemphilips/miniscript-bitcoin%E3%81%AE%E3%82%B9%E3%83%9E%E3%83%BC%E3%83%88%E3%82%B3%E3%83%B3%E3%83%88%E3%83%A9%E3%82%AF%E3%83%88%E3%81%AE%E3%81%93%E3%82%8C%E3%81%BE%E3%81%A7%E3%81%A8%E3%81%93%E3%82%8C%E3%81%8B%E3%82%89-5071e5f1d8c
Braiins Books | Building bitcoin in Rust https://braiins.com/books/building-bitcoin-in-rust