オークションって面白いですよね。アート、中古車、不用品、鮮魚、公共事業など様々なものがオークションで値付けされています。ゲーム理論を勉強するのにうってつけの題材でもあります。
自分はこの興味からライトニングのいわゆるHodl Invoiceを利用したオークションサイトを作ったりしました。(今はたぶん改修しないと使えません)
さて、オークションといえばアートと連想する方も少なくないように、NFTなどの世界でも日常的にオークションが開催されていて、最近ではBitcoin上のOrdinal Inscriptionもオークションで売買されていたりします。その中で面白いと思ったのはPSBTを使ったダッチオークションです。詳細を見ていきましょう。
PSBTとは
PSBTとはPartially Signed Bitcoin Transaction (部分的に署名されたビットコイントランザクション)の略で、複数のウォレットが1つのトランザクションに署名する際に署名途中のトランザクションデータをやり取りするための規格のことです(BIP-174)。シンプルな利用例の1つにマルチシグからの送金があります。
例えばAさんとBさんが両方署名しないと送金することのできないビットコインUTXOを考えます。まずAさんがこのUTXOを入力に、新しい送金先アドレスXを出力にしたトランザクションを作成して署名します。(このとき、XはAさんとBさんが事前に話し合って決めたアドレスでも良いし、このAさんによって署名されたトランザクションをもってAさんがBさんに提案しても良い)
BさんはこのPSBTを受け取ると内容を確認し、問題なければ自身もマルチシグのUTXOに署名します。これでトランザクションの署名が集まったので、ビットコインネットワークに配信し、あとはマイナーがブロックに追加してくれるのを待つのみです。
PSBTはこのような手動のマルチシグの他にもライトニングチャネルの作成や更新、ミキシング、エアギャップされたウォレットからのトランザクション配信などにも使われており、ウォレット間の互換性を担う重要な規格の1つです。
ドライにウォレット間でデータをやり取りするだけのこれらのユースケースに対して、今回取り上げるオークションは例の中で注釈した「AさんがPSBTに署名してBさんに提案する」に近い側面があります。
SIGHASHフラグ
PSBTダッチオークションの説明に入る前に、ビットコイントランザクションに対する署名についてもう少し詳しく知る必要があります。