今週のニュースレターでは、アウトプットスクリプトディスクリプターに補足情報を含めるためのBIP提案を取り上げています。 また、Bitcoin Stack Exchangeで人気の質問とその回答や、新しいリリースとリリース候補の発表、 人気のBitcoin基盤ソフトウェアの最近の更新など恒例のセクションも含まれています。

ニュース

  • アウトプットスクリプトディスクリプターのアノテーションに関するBIPドラフト: Craig Rawは、 BIP392(ニュースレター #387参照)に関する議論で生じたフィードバックに対応するため、 Bitcoin-Devメーリングリストに新しいBIPのアイディアを投稿しました。 Rawによると、ウォレットの誕生日をブロック高で表現するなどのメタデータがあれば、 サイレントペイメントのスキャンをより効率的にできる可能性があります。 しかし、メタデータはアウトプットスクリプトを決定するのに技術的には必須ではないため、 ディスクリプターに含めるのは適切ではないと考えられています。

    Rawが提案するBIPは、有用なメタデータをアノテーションとして提供するもので、 キー/バリューのペアとして表現され、URLのようなクエリ区切り文字列を使ってディスクリプター文字列に直接付加されます。 アノテーション付きのディスクリプターは次のようになります:SCRIPT?key=value&key=value#CHECKSUM。 注目すべきことに、?&および=といった文字はBIP380で既に定義されているため、 チェックサムアルゴリズムを更新する必要がありません。

    BIPのドラフトでは、Rawはサイレントペイメントのスキャンをより効率的にするための 3つの初期アノテーションキーも定義しています:

    • ブロック高bh: ウォレットが最初に資金を受け取ったブロック高

    • ギャップリミットgl: 導出を停止するまでの未使用のアドレス数

    • 最大ラベルml: サイレントペイメントアドレスでスキャンする最大ラベルインデックス

    最後に、Rawはアノテーションを一般的なウォレットバックアッププロセスに使用すべきではなく、 ディスクリプターが生成するスクリプトを変更することなく、資金の復元をより効率的にするためにのみ使用すべきだと述べました。

Bitcoin Stack Exchangeから選ばれたQ&A

Bitcoin Stack ExchangeはOptech Contributor達が疑問に対して答えを探しに(もしくは他のユーザーの質問に答える時間がある場合に)アクセスする、 数少ない情報ソースです。この月刊セクションでは、前回アップデート以降にされた、最も票を集めた質問・回答を紹介しています。

リリースとリリース候補

人気のBitcoinインフラストラクチャプロジェクトの新しいリリースとリリース候補。 新しいリリースにアップグレードしたり、リリース候補のテストを支援することを検討してください。

  • Bitcoin Core 28.4rc1は、以前のメジャーリリースシリーズのメンテナンスリリースのリリース候補です。 主にウォレット移行の修正と、信頼性の低いDNSシードの削除が含まれています。

  • Rust Bitcoin 0.33.0-betaは、Bitcoinデータ構造を扱うためのこのライブラリのベータリリースです。 300以上のコミットを含む大規模な更新で、新しいbitcoin-consensus-encodingクレートの導入、 P2Pネットワークメッセージエンコードトレイトの追加、重複するインプットや MAX_MONEYを超えるアウトプットを持つトランザクションのデコード時の拒否、 そしてすべてのサブクレートのメジャーバージョンアップが含まれています。

注目すべきコードとドキュメントの変更

最近のBitcoin CoreCore LightningEclairLDKLNDlibsecp256k1Hardware Wallet Interface (HWI)Rust BitcoinBTCPay ServerBDKBitcoin Improvement Proposals(BIP)Lightning BOLTsBitcoin InquisitionおよびBINANAsの注目すべき変更点。

  • Bitcoin Core #34568は、マイニングIPCインターフェース(ニュースレター #310参照)に いくつかの破壊的な変更を加えました。非推奨のメソッドgetCoinbaseRawTx()getCoinbaseCommitment()および getWitnessCommitmentIndex()ニュースレター #388参照)が削除され、 createNewBlockcheckBlockcontextパラメーターが追加されたことで、 Cap’n Protoイベントループをブロックせずに別スレッドで実行できるようになりました。 またデフォルトオプション値がスキーマで宣言されるようになりました。 Init.makeMiningのバージョン番号が引き上げられ、 古いクライアントが新しいスキーマを暗黙的に誤って解釈するのではなく、 明確なエラーを受け取るようになりました。スレッドの変更は、次に説明するクールダウン機能の前提条件です。

  • Bitcoin Core #34184は、マイニングIPCインターフェースのcreateNewBlock()メソッドに オプションのクールダウンを追加しました。これを有効にすると、このメソッドは IBD(Initial Block Download)の完了と先端の同期を常に待ってからブロックテンプレートを返します。 これにより、起動時にStratum v2クライアントが急速に古くなるテンプレートで溢れるのを防ぎます。 また、IPCクライアントがブロッキング中のcreateNewBlock()waitTipChanged()呼び出しをクリーンに中断できるよう、 新しいinterrupt()メソッドも追加されました。

  • Bitcoin Core #24539は、承認済みの各アウトプットを使用するトランザクションのインデックスを保持する新しい -txospenderindexオプションを追加しました。これを有効にすると、gettxspendingprevoutRPCが、 既存のmempoolのルックアップに加えて、承認済みトランザクションのspendingtxidblockhashを返すように拡張されます。 RPCには2つの新しいオプション引数も追加されました: mempool_onlyはインデックスが利用可能な場合でもルックアップをmempoolに制限し、 return_spending_txは使用トランザクション全体を返します。 このインデックスは-txindexを必要とせず、プルーニングとは互換性がありません。 これは、ライトニングや他のセカンドレイヤープロトコルが、使用トランザクションのチェーンを追跡する必要がある場合に特に有用です。

  • Bitcoin Core #34329は、プライベートトランザクションブロードキャスト(ニュースレター #388参照)を 管理するための2つのRPCを追加しました: getprivatebroadcastinfoは、プライベートブロードキャストキューにある現在のトランザクションに関する情報( 選択されたピアアドレスや各ブロードキャストの送信時刻など)を返し、abortprivatebroadcastは、 特定のトランザクションのブロードキャストと保留中の接続をキャンセルします。

  • Bitcoin Core #28792は、ASMapデータをBitcoin Coreのバイナリに直接バンドルすることで、 組み込みASMapシリーズのPRを完了しました。これにより、-asmapを有効にするユーザーは、 データファイルを別途入手する必要がなくなります。ビルドオプションWITH_EMBEDDED_ASMAPを削除することでデータを除外できます。 ASMapは、自律システム間でピア接続を多様化することでエクリプス攻撃への耐性を向上させます(ニュースレター #52および#290参照)。この機能はデフォルトでオフのままであり、 有効にするにはユーザーが-asmapを指定する必要があります。新しいドキュメントファイルには、 データの取得とBitcoin Coreリリースに組み込むプロセスが概説されています。

  • Bitcoin Core #32138は、settxfee RPCと-paytxfee起動オプションを削除しました。 これらはすべてのトランザクションに静的な手数料率を設定できるもので、 Bitcoin Core 30.0で非推奨になっていました(ニュースレター #349参照)。 ユーザーは代わりに手数料推定機能を利用するか、 トランザクション毎に手数料率を設定する必要があります。

  • Bitcoin Core #34512は、getblockRPCレスポンスの詳細度レベル1以上に coinbase_txを追加しました。このフィールドには、コインベーストランザクションの versionlocktimesequencecoinbaseスクリプトおよびwitnessデータが含まれます。 レスポンスをコンパクトに保つために、アウトプットは意図的に除外されています。これまでは、 コインベースのプロパティにアクセスするには詳細度2が必要で、ブロック内のすべてのトランザクションがデコードされていました。 これは、BIP54コンセンサスクリーンアップ)のコインベースロックタイム要件の監視や、 コインベーススクリプトからマイニングプールを特定するのに便利です。

  • Core Lightning #8490は、新しいpayment-fronting-node設定オプションを追加しました。 これは着信支払いのエントリーポイントとして常に使用する1つ以上のノードを指定するものです。 設定すると、BOLT11インボイスのルートヒントやBOLT12オファーやインボイス、 インボイスリクエストのブラインドパス導入ポイントは、 指定されたフロントノードのみを使用するよう構築されます。これまでは、 CLNはノードのチャネルピアから自動的に選択していたため、インボイス毎に異なるピアが公開される可能性がありました。 このオプションはグローバルに設定するか、オファー毎に上書きできます。

  • Eclair #3250は、ローカルノードがチャネルタイプを明示的に設定せずにチャネルを開く際に、 OpenChannelInterceptorが自動的にchannel_typeを選択できるようにしました。 これまでは、自動チャネル作成(例:LSPがクライアントにチャネルを開く場合)は、 タイプが提供されない限り失敗していました。現在のデフォルトはアンカーチャネルが優先され、後続のPRでSimple Taproot Channelが優先されるようになる予定です。

  • LDK #4373は、ローカルノードがインボイスの合計金額の一部のみを支払うマルチパスペイメントの送信サポートを追加しました。RecipientOnionFieldsの 新しいtotal_mpp_amount_msatフィールドにより、このノードが送信する金額よりも大きいMPP合計を宣言でき、 複数のウォレットやノードがそれぞれ支払いの一部を負担して、単一のインボイスに対して協力して支払うことが可能になります。 受信者はすべての参加ノードからHTLCを収集し、全額が到着した時点で支払いを請求します。 BOLT12のサポートは後続に委ねられています。

  • BDK #2081は、SpkTxOutIndexKeychainTxOutIndexspent_txouts()created_txouts()メソッドを追加しました。トランザクションを与えると、 追跡対象のどのアウトプットが使用され、どの新しい追跡対象アウトプットが作成されたかを返します。 これにより、ウォレットは関心のあるトランザクションに関係するアドレスと金額を容易に判定できるようになります。

もっと知りたいですか?

このニュースレターで言及されたトピックについてもっと議論したい方は、 17:30 UTCに Riverside.fmで毎週配信されているBitcoin Optech Recapにご参加ください。 この議論は録画もされ、ポッドキャストページからご覧いただけます。