すべての投稿
ガイド

Solanaの多対多送金|ウォレットを一対一で組む

対にしたウォレット送金の仕組み。一行につき一トランザクション、送金ごとに0.001 SOL、そして金額を削らず行を飛ばすrentの規則。

12 分で読めます J Tools Editorial
ほぼ黒い地に赤い点の縦列が二つ並び、左の各点が細い直線でちょうど一つの右の点とつながっている図

Solanaで多くの支払いを一度に動かすやり方は三つあり、いつも取り違えられます。マルチセンダーは一覧へ払い、コレクターは多くのウォレットを一つに寄せます。

そして、どちらでも書き表せない場合が残ります。それが多対多送金で、送る側それぞれに自分の受取先を残します。ウォレット7はウォレット7へ、8は8へ払い、両者は互いを知りません。

細かい違いに聞こえます。実際には、資金の出どころが一つであることと、独立した四十の出どころがあることの差です。

  • 一行が一トランザクションです。その行の送るウォレットが、その行の費用をすべて払います。
  • プラットフォーム手数料は送金ごとに0.001 SOL、ネットワーク手数料は0.000005 SOLです。
  • そのトークンを一度も持ったことのない受取先には、0.00203928 SOLのrent預託が足されます。
  • 条件を満たさない行は金額を削られるのではなく、行ごと飛ばされます。

一括送金の三つのかたち

マルチセンダーは一対多です。ウォレット一つ、受取先の一覧、支払う側は一つ。エアドロップに要るかたちがこれです。

一括回収ツールは多対一です。ウォレット二十、宛先は一つ、終われば全部が一か所に収まります。

多対多ツールが三つめで、組を知っている唯一のかたちです。多対多送金では、一行目に一行目の出どころがあり、二行目には別の出どころがあります。共通の資金はなく、行が互いを埋め合わせることもありません。

左では明るい点がひとつ、扇のように十個の点の列へ広がり、右では直線が二つの列を一対一で結んでいる図

一行あたりの費用

多対多送金では一行に項目が三つまで載り、その行の送るウォレットが三つとも負担します。共通の資金口座はないので、自分の行をまかなえないウォレットが上の行から借りることもありません。ネットワークの項目は署名ごとに5000 lamportの基本手数料で、Solana自身の手数料ドキュメントがその内訳を書いています。

項目SOLモードトークンモード
プラットフォーム手数料0.001 SOL0.001 SOL
ネットワーク手数料0.000005 SOL0.000005 SOL
受取先のトークン口座該当なし0.00203928 SOL、ただしその受取先がこのトークンを一度も持ったことがない場合だけ

三行目は二度読む値打ちがあります。人がつまずくのはここだからです。SPLトークンを一度も触れたことのないアドレスへ送るとは、それを入れる口座を新しく作るということで、Solanaはその口座にrent預託を求めます。預託はネットワーク手数料のおよそ二百倍、プラットフォーム手数料の二倍です。

新しい受取先が百なら請求の0.204 SOLほどを占めますが、同じ条件でプラットフォーム手数料は0.1で止まります。預託はバーンされません。受取先のトークン口座に残り、あとでその口座を閉じた側へ戻ります。

飛ばされる行

多対多送金は署名の前に検査を二回走らせ、どちらも行を書き換えるのではなく止めます。

一つめはただの算数です。送るウォレットが自分の金額と手数料、そして開ける必要があるかもしれないトークン口座までまかなえなければ、その行に印が付き、そのまま残ります。半分だけ出ていくことはありません。

二つめは変わっていて、初めて見るとバグに見えます。Solanaは、残高が0より多くrent免除の下限より少ない口座を残すことを許しません。ふつうのウォレットならその下限は0.00089088 SOLで、Solanaの口座ドキュメントにある式から出ます。

口座を空にし切るのは許されます。0.0005 SOLを残すのは許されません。ウォレットをその隙間へ押し込む行にはrent dustの印が付き、送られないまま残ります。

横軸の図。ゼロに灯った点がひとつ、次に二本の棒で閉じた赤い帯の中に暗い点がひとつ、その先に灯った点が二つ

金額を削らない理由

多対多送金が金額を削らないのは、削るほうが悪いからです。数字は書いた本人が入れたものです。黙って別の数字を送る道具は、そのあとどんな表とも突き合わせられません。

残高を全部送るか、残りが下限を超えるまで金額を下げるかです。プレビューがどの行に当たるかを先に告げ、道具は何かに署名する前に宛先口座を一回の呼び出しで調べます。

一行に一トランザクション、その意味

多対多送金は行ごとに自分のトランザクションを作るので、落ちた行は一つで落ちます。全部を一つのトランザクションへ積む束なら、三十行目の誤りが手前の二十九行まで道連れにします。

代償はあります。四十組なら署名が四十、プラットフォーム手数料も四十です。かわりに行ごとに読める結果が残ります。その取引がどれくらいの速さで入るかは、Solanaの優先手数料の記事に数字を並べてあります。

多対多送金が正しいかたちになるとき

ウォレットの入れ替えが、多くの場合の正直な答えです。後ろに置いていきたい履歴の付いた一式があり、ウォレット一括生成で新しい一式を作り、古いウォレット7が新しいウォレット7だけに資金を入れてほしい、という場面です。

二つめは、行ごとに支払う側が変わる精算の一覧です。案件がいくつか、金庫がいくつか、シートは一枚。マルチセンダーでは書き表せません。出どころがちょうど一つだからです。

三つめはスナップショット後の再配分で、保有者ごとにあらかじめ割り当てたウォレットから払います。配る前にその分布を読む手順はトークン保有者の分布の読み方にまとめてあります。

一覧の準備

多対多送金の最初の一回は二行で回すほうが早いです。結果の表が、一行に実際いくらかかったかを、トークン口座の預託まで含めて教えてくれます。二千行を送る前にです。

受取先がすでにそのトークンを持っているかも見ておくと違います。半分が既存の保有者の一覧なら預託の項目は半分になり、百行の規模ではその項目が請求全体で一番大きな数字です。

どのウォレットがどの行を払うのかも、始める前に書き留めておくほうがいいです。走らせたあとで対応を組み直すのは、いま聞こえるより面倒です。送る側が作りたてで、見分けるための履歴をまだ持っていない場合はなおさらです。

残高について最後に一つ。送るウォレットには自分の金額より少し多めを残すほうがいいです。小数の末尾まで合わせるとrentの検査がその行をよけ、また入金し直すことになります。

一覧が大きくなると変わること

十行なら、ここまでは気楽な理屈です。多対多送金を二千行で回すと二つが本当の作業になり、どちらも道具の外で起きます。

一つめは入金です。送るウォレットはどれも、始まる前に自分の金額と手数料を持っている必要があり、ある行が別の行を埋める手はありません。つまり配る前段の一回が要り、たいていは一つの金庫から出し、ぴったりではなく余裕を持たせるほうがいいです。

二つめは終わったあとの突き合わせです。四十行なら表を見れば済みます。二千行なら結果を書き出して元のシートと行ごとに照らしたくなります。飛ばされた行はエクスプローラに一切現れないからです。トランザクションとして存在したことがありません。

目立たない三つめもあります。一覧に新しい受取先と既存の受取先が混ざっていると、一行あたりの費用は一定になりません。口座を新しく開く受取先が何件あるかを数え、その数だけを0.00203928 SOLに掛けるのが正しいやり方です。

よくある質問

マルチセンダーを何度も回すのと何が違いますか?

マルチセンダーは一回の実行で出どころがちょうど一つです。出どころが四十なら実行が四十回、手でのウォレット切り替えも四十回になります。多対多送金なら実行が一回で行が四十です。

落ちた行にも費用はかかりますか?

かかりません。事前の検査を通らなかった行は署名そのものをしないので、ネットワーク手数料もプラットフォーム手数料も出ません。

送る側と受け取る側が重なってもいいですか?

いいです。一つのウォレットがある行では送り、別の行では受け取れます。行ごとに別々に検査します。

なぜ自分の行にrent dustの印が付いたのですか?

送るウォレットの残りが0と0.00089088 SOLのあいだに落ちるからです。残高を全部送るか、金額を下げてください。

トークンだけを送るウォレットにもSOLは要りますか?

要ります。動かすものがトークンでも、ネットワーク手数料とプラットフォーム手数料はSOLで払います。

組の数に上限はありますか?

実際に効いてくるのは道具ではなく準備です。送るウォレットはどれも先に入金されている必要があります。

一行で決める

シートに支払う側の列があるなら、要るかたちは多対多送金です。全部の行が同じウォレットから出るならマルチセンダーを取り、四十回ではなく一回だけ払えば済みます。そして行が一つ足りないときは、バグと決める前にまずrentの下限を見てください。その下限についてはrent不足エラーの解説に続きがあります。

J
著者
J Tools Editorial

J Toolsチームからの投稿

J Tools Editorial のすべての投稿を見る →

関連投稿