[podcast]Covenants Everything

https://www.adoptblock.com/covenants-op-cat-op-ctv-english をinputとし、podcastfyを用いて作成したもの。 gpt-4o-mini-ttsを使うことで実用に耐える音声品質になった。 ビットコインのスケーラビリティ課題とKaspaとの比較 ビットコインのSidechainやLightningなどの拡張方法 Kaspaは高速だが、フルノードでない点がセキュリティ上の妥協になる ビットコインScriptとコヴナンツ入門 UTXOモデルとスタックベースの簡素な言語設計 コヴナンツ(Covenants)で“UTXOの使い方”を厳しく制限・管理できるアイデア 主なコヴナンツの種類と特徴 トランザクションのハッシュ検証型、トランザクション内容検証型など 再帰的に制限をかけることで、予期せぬ流動性の低下やファンジビリティ低下リスクがある OPコード(オペコード)の拡張 過去に無効化されたOP_CAT再導入と、そのメリット・懸念 OP_CHECKTEMPLATEVERIFY (OP_CTV) などのシンプルなコヴナンツ実装案 それぞれのアプローチのトレードオフ(柔軟性と安全性のバランス) ライトニングネットワークやEltooとの関係 ANYPREVOUT (BIP-118) でチャネル管理をシンプル化 Vaultのアイデアなど、資金盗難への対抗策も議論される ビットコイン開発の進め方 SegWitやTaprootの導入にも長いテストと合意形成が必要だった 大規模変更ほど、実装リスクとコミュニティの議論に時間を要する 今後の展望と注意点 コヴナンツ導入でDeFi的な活用も見据えられる ただし、BTCのファンジビリティや可用性を損なう恐れもあり、慎重な検証が必須

March 21, 2025

Github Copilot Chat Commit Message Rules

コミットメッセージを標準化するには、github.copilot.chat.commitMessageGeneration.instructionsを設定し、Copilot Chatが常に所定のルールに従うよう誘導するのが効果的である。たとえば、以下のように.vscode/settings.jsonに記述する。 他にも多様な方法があるが、ボタンをクリックするだけで設定できるため、結局これが使われていることが多いように思われる。 { "github.copilot.chat.commitMessageGeneration.instructions": [ { "text": "以下のルールに従ってコミットメッセージを生成:\n"+ "1) 1行目は50文字以内\n"+ "2) 本文が必要なら72文字幅で改行し、1行目と本文の間に空行\n"+ "3) 現在形で書く (例: 'Fix bug', 'Add feature')\n"+ "4) サブシステムやパッケージ名を先頭に (例: 'wallet: ')\n"+ "5) 箇条書きはハイフン(-)またはアスタリスク(*)で始める\n"+ "6) 最後に 'Generated by Copilot' と記載" } ] } Copilot Chatは、この設定を参照してコミットメッセージを提案する。結果として、コミットメッセージの書式を一貫させ、読みやすい履歴管理を実現できる。commitlintなどと併用すれば、さらに厳格なバリデーションを行うことが可能である。

March 21, 2025

Wifi Off

Wi-Fiを強制的にオフにすべきである。ネットからの通知やチャットへの意識を一掃し、思考を乱す要因を遮断できるからである。プログラミングや文章作成など、深い集中が必要な作業では特に有効である。 Wi-Fiを切る前に必要資料をあらかじめ開いておくことが望ましい。ネット接続が必要な箇所は作業後にまとめて調べるべきである。スクリプトを用いれば、一定時間オフにしたまま強制的に待機できる。たとえばmacOSでは、以下のワンライナーが使える。 networksetup -setairportpower en0 off && sleep 1800 && \ networksetup -setairportpower en0 on && \ osascript -e 'display notification "WiFiが復活しました" with title "通知"' 資料を読み込み、作業に没頭し、後で必要部分のみ確認すればよい。緊急の連絡が想定される場合は注意が必要だが、そうでないならオフラインで集中すべきである。この手法によってフロー状態を維持しやすくなり、結果的に作業効率が上がると断言できる。 または、私の実装したcliを使えば、より高度に設定することができる https://github.com/YusukeShimizu/rust-pomo rust-pomo --focus 1200 --break-time 600 --cycles 2 === Cycle 1/2: Focus time === Setting WiFi off Starting timer for 1200 seconds... [####################--------------------] 594s / 1200s

March 21, 2025

Greenlight における Scheduler と Signer/HSM のアーキテクチャ

greenlight proto をベースにした解説。 greenlightはLightning Network(LN)の運用を簡易化するためのサービスである。しかし、どこが自己ホスト(self host)で、どこに信頼を置く必要があるのかが分かりにくい。SchedulerはLNノードの管理やスケジューリング機能を担うが、これは非公開のコードで動作し、ユーザーはその内部を直接検証できない。一方、Signerはトランザクション署名を行う重要なコンポーネントであり、cln(Core Lightning)はLightning Networkの実装である。これらは公開リポジトリとして誰でも参照できる。 目的と結論 Greenlight では、Scheduler (Closed Source) が Node 管理の中心にあり、UserClient (with integrated Signer/HSM) が Self-Hosted 環境で秘密鍵を保持する構造をとる。結論として、UserClient 側が鍵操作を制御しつつ、Greenlight 側の Scheduler が Node (CLN) を起動・管理する。これにより、秘密鍵をローカルで保持したまま Node をリモートで稼働させる運用が可能となる。 全体構造 以下の図に示すように、UserClient (with integrated Signer/HSM) は自前の環境 (Self-Hosted) で動作する。一方、Scheduler は Greenlight が管理し、CLN (c-lightning+plugin) も Greenlight Hosted 環境で稼働する。UserClient は Scheduler に対して Manage API call を行い、Node に対する操作は Scheduler が CLN を経由して実行する。Signer/HSM は秘密鍵をローカルで保持し、署名要求のみを受け付ける。 (Self-Hosted) (Greenlight Hosted) +-----------------------------------+ (Manage API call) +----------------------------+ | UserClient (with integrated | --------------------> | Scheduler (Closed Source) | | Signer / HSM) | +-------------+--------------+ +-----------------------------------+ | | (Node management) | v | +------------------------+ |-----------------------> |CLN (c-lightning+plugin)| +-----------+------------+ ノード登録とスケジューリングフロー チャレンジ発行 (GetChallenge) スコープ (REGISTER や RECOVER) と node_id を指定し、Scheduler に GetChallenge をコールする。 Scheduler は一度きり有効な challenge を生成し、ChallengeResponse に含めて返す。 Register / Recover クライアントは challenge を秘密鍵で署名し、node_id、network、CSR などと共に送信する。 Scheduler は署名検証後にノード所有権を確認し、mTLS のための device_cert と device_key を発行する。 Register は新規発行、Recover は既存ノードの証明書再発行となる。 Schedule / GetNodeInfo クライアントは Schedule を呼び出し、ノード起動をリクエストする。 Scheduler は CLN を割り当て、grpc_uri など接続情報を返す。 すでに起動済みの場合、GetNodeInfo で接続情報を取得可能である。 接続・操作 クライアントは取得した device_cert と device_key を用い、mTLS で CLN (node) に接続する。 支払いやチャネル操作などの RPC 呼び出しを行う。 署名が必要な場合、CLN は Signer (HSM) へ HsmRequest を送信し、秘密鍵を外部に渡さずに署名のみを実行する。 Signer フロー (HSMRequest / HsmService) CLN は秘密鍵が必要なとき、Node Service の StreamHsmRequests を用いて外部サイナー (Signer/HSM) へ HsmRequest を通知する。Signer はローカルで署名を実施し、HsmResponse で返す。具体的な流れは以下の通りである。 ...

March 19, 2025