本題のPay to Anchor(P2A)というのは、以下の形式のスクリプトを持つアウトプットのこと↓
<OP_1> <4e73>
- witness versionが
1
(OP_1
= 0x51
)で、witness programが2 byteの4e73
※ BIP-141によりwitness programの長さは2〜40 byteと定められているため、2 byteは最小のwitness program
- hex値にシリアライズすると
51024e73
(02
は2 byteをプッシュするpushdata opcode)
- Bech32mアドレスにすると
bc1pfeessrawgf
で、(Vanity addressとして)アドレスにfees
が入るように選択されたのが↑のwitness programの値
witness versionが1だけど、witness programが32 byteではないので、Taprootのルールは適用されない。つまり、このロックスクリプトは単に2つのデータをスタックにプッシュするだけのスクリプト。LNの既存のアンカーアウトプットと違って、鍵もロックスクリプトに含まれないので、基本的に誰でもこのアウトプットを使用できる(anyone can spendな)アウトプットになる。
OP_TRUE
をwitness scriptとしたP2WSHアウトプットでも同様のことが可能だけど、その場合はアウトプットのサイズが大きくなるため、アウトプットの作成と使用において最もサイズの小さくなるように↑のような設計になったみたい。
Bitcoin Core v28.0での対応
今回、Bitcoin CoreにマージされたPay to Anchor(P2A)アウトプットの使用を標準リレーポリシーでサポートしたPR↓
github.com
このような未知のwitness programを持つアウトプットを持つトランザクションはこれまでも作成/リレーが可能だったけど、インプットとして使用する場合、そのトランザクションは標準リレーポリシーで許可されていなかったため、Bitcoin Coreではリレーされなかった。Bitcoin Core v28.0では、このようなP2Aアウトプットを使用するトランザクションのリレーが標準ポリシーとしてサポートされるようになった。
※ ネットワーク内でBitcoin Core v28.0にアップグレードしているノードが少ない内は、まだリレーされにくいので注意。