2020年2月6日 2 min read

署名途中のマルチシグトランザクションの共通規格PSBT

署名途中のマルチシグトランザクションの共通規格PSBT
Photo by Travis Leery / Unsplash

皆さんはウォレットのアップデートがあるたびに、どのような機能が追加されているかお調べになることがあるでしょうか。私はずぼらなので、むしろ「追加されてたんだ!」と後から知ることが大変多いです。今日は、ウォレットの機能の中で最近少し盛り上がっているPSBTというものについて説明したいと思います。

PSBTとは

PSBT (Partially Signed Bitcoin Transaction - 部分的に署名されたビットコイントランザクション)とは、異なるウォレットを利用している人たちが1つのマルチシグトランザクションに署名する際に、自分の署名を加えて次の人に渡す際のデータのフォーマットを定めたものです。BIP-174として、2018年10月にBitcoin Core 0.17.0に実装されました。

2つ以上の署名を必要とするマルチシグアドレスから送金する際には、送金トランザクションに署名して、次の署名者に渡す必要があります。しかし、PSBTが登場するまで渡すデータの規格は定まっておらず、ウォレットごとに仕様が異なるためマルチシグの利用は署名者全員が同じウォレットを使っていないと難しいものでした。
普段使っているウォレットがPSBTを実装していれば、他の署名者がどのウォレットを使うか意識せずにマルチシグトランザクションを署名して次の人に渡すことができます。PSBTの枠組み内で他の署名者に使用するアドレスや送金手数料などを提示することもできます。

また、通常は署名の際に使用するUTXOにアクセスする必要があり、完全にオフラインなウォレット(エアギャップウォレットなど)では署名できませんが、PSBTを使えばそのようなウォレットでもオフラインのまま署名が可能になります。

仕組み(構造)

最初に、Creatorと呼ばれるユーザーが新規にPSBTを作成し、未署名のマルチシグトランザクションをセットします。

次に、Updaterと呼ばれるユーザーがそのPSBTにUTXOやredeemScriptsなど様々な情報を追加します。実用上、CreatorとUpdaterは同一人物で、UTXOセットを保持するノードで作業を行うことが多いでしょう。

このPSBTに署名するのはSignerと呼ばれるユーザーで、PSBTの内容を確認して、部分署名(Partial Signature)を追加します。これだけならエアギャップウォレットでも可能ですし、ソフトウェアウォレットを使えば足りないデータを補うUpdaterの役目も果たせます。

Combinerと呼ばれるユーザーは複数のPSBTを1つにまとめることが可能なので、必ずしも今までのようにトランザクションを順番に回していって署名する必要はなく、最終的には必要な署名が含まれるPSBTがすべて1人の元に集まればよいです。

けっこう長いのでこの程度にします。細かいことに興味がある方はBIP174またはChaintope安土さんの翻訳文をご覧ください。

対応ウォレット

現時点で対応・対応を表明しているのは、以下のウォレットです:

Great! You’ve successfully signed up.
Welcome back! You've successfully signed in.
You've successfully subscribed to ビットコイン研究所.
Your link has expired.
Success! Check your email for magic link to sign-in.
Success! Your billing info has been updated.
Your billing was not updated.