Polkadotのマルチシグウォレットからの送金の仕様に関して
マルチシグウォレットからの送金方法
Polkadotのマルチシグウォレットからの送金は、Bitcoinのように複数の署名を1つのトランザクションに含めてネットワークに送信する方法とは異なります。
Polkadotの場合はマルチシグウォレットを構成する署名者毎に、マルチシグウォレットからの送金を承認するためのTransactionを作成、署名し、ネットワークに送信する必要があります。
ブロックに取り込まれた承認用のTransactionの数がマルチシグウォレットに設定された必要署名数集まることで、マルチシグウォレットからの送金が実行されます。
具体的にどう違うのか、以下に2 of 3でBitcoinの場合とPolkadotの場合を示します。
PolkadotでのM of Nのウォレットの場合、M - 1人目まではApproveAsMultiというメソッドを用いたTransactionを送信し、最後の人はAsMultiというメソッドを用いたTransactionを送信する必要があります。
ApproveAsMultiのTransactionがM - 1人分ブロックに入っている状態で、AsMultiのTransactionが承認されるとマルチシグアドレスからの送金が実行されます。
デポジットと手数料
Polkadotのマルチシグウォレットからの送金にはデポジットが必要になります。
このデポジット分の残高は一番最初に承認用のTransactionを送信する署名者のアドレスに準備する必要があり、承認用のTransactionがブロックに取り込まれるとネットワーク上ではリザーブ扱いとなり使用することができなくなります。
このリザーブは送金が完了するか、送金のキャンセル処理を行うことで再度使用可能になります。
必要なデポジット額は以下の式で計算され、約21DOT程度となります。
(DepositBase: 20.088DOT / threshold: 必要署名数(M) / DepositFactor: 0.032DOT)
https://wiki.polkadot.network/docs/learn-accounts#making-transactions-with-a-multi-signature-account
また、送金承認のためのTransactionは各署名者毎に実行する必要があるため、各署名者のアドレスには事前に手数料分の残高が必要になります。手数料は必要署名数などに影響をうけますが、約0.025DOT ~ 0.035DOT程度必要になります。
キャンセル処理
既にデポジット分の残高がリザーブされている送金をキャンセルする場合、そのリザーブを再度使用可能にするためのCancelAsMultiというメソッドを用いたTransactionを送信する必要があります。
このTransactionはデポジット分の残高がリザーブされている署名者のアカウントで実行する必要があり、このTransactionが承認されるとデポジット分の残高がリザーブから解放され使用可能な残高になります。
注意事項
Polkadotには最低残高の制約があり、アドレスの残高が1DOTを下回るとアドレスに紐づくnonceと残高が削除され0になります。