hiro99ma blog

何か技術的なこと

btc: libwally-core を使う (3)

2025/01/28

はじめに

C言語で libwally-core を使って P2TR のトランザクションを作る。
前回で P2TR key path アドレスへ送金されたトランザクションを解いて送金するトランザクションを作るところまで行った。

libwally-core を使った簡単なサンプルコードが見つからずに苦労している。

Anti-Exfil ?

libwally-core の API 分類を見ていてわからなかったのが Anti-Exfil。

単語が既にわからない。反exfil とはなんぞや。
ChatGPT氏に訊ねる。

libwally-core の anti-exfil は、秘密鍵を用いた署名の際に不正な署名リクエストによる秘密鍵漏洩を防ぐための仕組みです。特に、マルチパーティ署名やハードウェアウォレットとの連携で重要な役割を果たします。 ibwally-core の anti-exfil は、署名前に追加のチェックを行い、不正な署名リクエストを検出 することで、秘密鍵の漏洩を防ぎます。

ほう、さすがだ。
MuSig や PSBT で利用できるとのこと。

“exfiltration” はサイバー攻撃の解説でも見つかるので、そういう系統で使われることばなのだろう。
leak ではないのだね。

BUILD_STANDARD_SECP では使えない ようになっているので secp256k1-zkp で何か拡張されているのだろう。

サンプルを探す

普通にネットで検索しているのだが見つからない。
サンプル、がよくないんだろうか。
しかし、ばりばりに使われているサイトから API の使い方だけ探すのは大変だし、 API が絞れていないので「この API を使ったサンプル」という探し方もできていない。
“p2tr”, “taproot”, “keypath”, “bip340”, “bip341”, “bip342”, …

使っているだけではなく P2TR であることも条件にすると Jade くらいだろうか。
sign_tx_process() がよいか。
txn_count で index をぐるぐる回して wally_map_add_integer()sha_scriptpubkeys を作っているのだろう。
そっちの処理は sign_tx.c なのだが wally_tx_get_btc_taproot_signature_hash() で sighash を作るのは wallet.c なのが気になった。
まあ、それを呼び出している wallet_get_tx_input_hash()sign_tx.c だからそういう役割になっているだけということなのか。

運用しているコードだとこういう風にあちこちに API が出てくるので関係を探るのが難しいのよねぇ。
とはいえ、今回は P2TR しか処理しないと決めているからまだ楽だけど、実際にウォレットアプリを作ろうと思ったら少なくとも P2PK, P2PKH, P2WPKH, P2TR(key path) のいくつかは対応しないといかんだろう。
ウォレットの作成時に受け付ける形式を決めてしまえばそこまで大変にならないのか? だから BIP32 関係の処理と連動するように作っているのか?

などなど、いろいろ考え込んでしまう。

PSBT

PSBT にしようか、とふんわり思っているのだが、BIP に書いているちゃんとした PSBT のことではなく、 部分的に署名できるようにしておいた方が無難か、というくらいの気持ちだ。
あとから PSBT 対応するのは大変そうだが、内部で PSBT にしておけば外側にそれを見せないようにすることはできるし。

libwally-core の PSBT ページを見たが、長い。
この中から使いたい API だけ探し出すのはかなりの労力だ。

おわりに

今日は別件の作業がいくつかあったので、短いがここまで。

< Top page