コイン、残高、アカウント:「いくら持っているか」に三つの答えがある理由

·6 分で読める·SSP Editorial Team 著
SSP Academy カバー:UTXO モデル、アカウント残高、ソラナの賃料

コイン、残高、アカウント:「いくら持っているか」に三つの答えがある理由

複数のチェーンに対応したウォレットを開いて、よく見ると妙なことに気づきます。ビットコインの残高もイーサリアムの残高も、画面上ではどちらもただの数字ですが、その下では計算のされ方がまったく違います――そしてソラナには、さらに三つめの仕組みがあります。

これは豆知識ではありません。ビットコインの手数料がなぜ取引履歴に左右されるのか、イーサリアムの取引がなぜ失敗しても費用がかかりうるのか、ソラナのアカウントがなぜ単純にゼロまで空にできないのか――その説明になっています。

UTXO モデル:あなたが持っているのは残高ではなくコイン

ビットコインにアカウントはなく、残高も保存されません。保存されているのは未使用取引出力――UTXO――の集合で、その一つひとつが、なんらかの支払い条件で施錠された、切り離された価値のかたまりです。

現金を思い浮かべてください。ポケットに「4700 円」があるのではありません。二千円札が一枚、千円札が二枚、五百円玉が一枚、百円玉が二枚あるのです。2300 円を払うなら二千円札と五百円玉を渡し、200 円のお釣りを受け取ります。お札を半分に破ることはできません。

UTXO はまさにこの通りに動きます。それぞれ丸ごと使わねばなりません。1 BTC の出力から 0.3 BTC を払うには、ウォレットは 1 BTC 全体を消費し、新しい出力を二つ作ります。受取人へ 0.3、そしておよそ 0.7 がお釣りとしてあなたに戻る。1 BTC の UTXO は存在しなくなります。

つまりあなたの「残高」は導き出された数字です。ウォレットがチェーンを走査し、あなたが満たせる条件で施錠された出力を集めて合計する。ビットコインのブロックチェーンのどこにも、あなたが特定の額を持っているという記録はありません。

ここから三つのことが導かれ、どれも実務的です。

手数料は金額だけでなく、あなたの履歴に左右されます。 手数料はバイト単位で課され、入力を一つ使うたびにバイトが増えます。大きな UTXO 一つから 5000 円を払うのは安い。同じ 5000 円を、ごく小さな UTXO 三十個を組み合わせて払うのは高い。取引が物理的に大きいからです。手数料が安いうちに UTXO をまとめておく値打ちはここにあります。

お釣りは、どこかへ行かねばならない本物の出力です。 どのウォレットも自動で処理しますが、チェーン分析者があなたのアドレス同士を結びつけるのに使う、お釣りアドレスの推定手法を支えているのがこの仕組みです。

支払いは本来的に並行です。 異なる UTXO は互いに独立なので、取引を厳密な順番に縛るものは何もありません。

ビットコイン、ライトコイン、ドージコイン、ビットコインキャッシュ、Zcash、Ravencoin、Flux はすべてこの方式です。より古いモデルであり、「あなたの鍵でなければ、あなたのコインでもない」が最も文字通りに当てはまるモデルでもあります。アカウントは存在せず、条件の付いたコインがあるだけなのです。

アカウントモデル:あなたが持つのは残高と、カウンター

イーサリアムはそれを捨て、銀行の元帳に近いものを採りました。チェーンが保存するのは状態です。アドレスから残高への(コントラクトなら保存データへの)巨大な対応表。0.3 ETH を送るとは、ある数字から 0.3 を引き、別の数字に足すこと。入力も出力もお釣りもありません。

こちらのほうが単純で、スマートコントラクトを実用にしているのもこれです。コントラクトには読み書きできる永続的な保存領域が要りますが、世界が切り離されたコインでできていると、それは扱いにくい。

ただしアカウントモデルは、UTXO にはない問題を持ち込みます。取引が「アリスから 0.3 引く」だけなら、それを見た誰もが繰り返し再送信し、口座を空にできてしまう。手当てが nonce です。アカウントごとのカウンターで、すべての取引に含まれ、ちょうど一ずつ増えねばなりません。7 番の取引は 6 番のあとでしか、しかも一度しか採掘されません。

EVM チェーンがあのように振る舞う理由が、この nonce です。

あなたの取引は厳密に順序づけられます。 詰まった取引が一つあると、同じアドレスからの後続すべてが止まります。順番を飛ばして処理できないからです。

取引が失敗しても手数料は支払われます。 ガスが支払うのは試みられた計算であって、成功した計算ではありません。差し戻されたコントラクト呼び出しも検証者の労力を消費したのですから、やはり費用がかかります。これは絶えず人を驚かせますし、無効な取引が単に承認されず一銭もかからない UTXO の世界との、本物の違いです。

nonce の管理は本物のインフラです。 普通のウォレットでは見えません。二台の端末が合意してから送信するマルチシグでは、nonce を確保し、追跡し、解放する必要があります。nonce の扱いが二台構成の署名で繰り返し話題になり、実装の細部で済まされない理由がこれです。

イーサリアム、Polygon、BSC、Avalanche、Base、XDC はいずれもこのモデルです。

ソラナ:賃料を払うアカウント

ソラナもアカウント方式ですが、人の意表を突くひねりがあります。

ソラナではほぼすべてがアカウントです――あなたのウォレットも、保有する各トークンも、各プログラムのデータも。そしてそれらのアカウントは検証者のメモリを占めるため、生き続けるには最低残高を保たねばなりません。これが賃料免除です。十分に入れておけばアカウントは無期限に存続し、下回れば回収されうる。

実務上の効果として、SPL トークンを保有するには、そのトークンを誰かがあなたに送れるようになる前に、少量の SOL で資金手当てされた専用のトークンアカウントが要ります。受け取りは無料ではないのです。これは変わった性質で、必要になる前に理解しておく値打ちがあります。「トークンを送ったのに何も届かない」は、たいてい単にトークンアカウントが無いだけだからです。

マルチチェーンのウォレットが三つとも実装せねばならない理由

これらのチェーンに対応するウォレットは、「残高」という内部概念を一つで共有できません。必要なのは次のものです。

  • UTXO チェーン向け:金額とスクリプトを持つ出力の集合と、どれを使うかを決めるコイン選択のロジック。
  • EVM チェーン向け:単一の残高の値と nonce、そして順序を守るキュー。
  • ソラナ向け:残高、関連トークンアカウントの集合、そして賃料の下限への配慮。

セキュリティの設計も適応せねばなりません。UTXO チェーンでは、SSP の 2-of-2 はスクリプトです。解錠に二つの署名を要求する P2WSH 出力で、チェーン自身のスクリプト規則によって強制されます。EVM チェーンには通常のアカウント向けに相当するスクリプトの仕組みがないので、マルチシグはアカウント抽象化で実現されます――検証ロジックが両方の署名を要求するスマートコントラクトのアカウントです。ソラナではプログラム由来アドレスで、オンチェーンのプログラムが制御します。

まったく異なる三つの仕組みと、利用者から見た一つの考え方――二台の端末なしには何も動かない。土台となる実装が似ても似つかないことこそ、この保証が受け継がれると仮定されるのではなく、チェーンごとに立て直され、改めて監査されねばならない理由なのです。

これがあなたにとって意味すること

少額の支払いでビットコインの手数料が高く見えるときは、入力を見てください。 金額よりも、それが何個の断片でできているかが効きます。

イーサリアムの取引が詰まったら、同じアドレスからの後続はその後ろで止まっています。 それは不具合ではなく nonce です。最初の一つを解けば列が動きます。

失敗した EVM 取引でも課金されるなら、モデルは設計どおりに働いています。 シミュレーションはそれを避ける助けになります。署名前のシミュレーションが、UTXO チェーンよりアカウント方式のチェーンで価値を持つ理由です。

ソラナのトークン送金が「消えた」ら、トークンアカウントを確認してください。 失われてはいません。宛先がまだ存在していなかっただけかもしれません。

どれも特定のウォレットの癖ではありません。各チェーンが何年も前に下した設計判断の帰結であり、自分がどちらのモデルにいるのかが見えるようになると、それまで不可解だった振る舞いの多くが予測できるものに変わります。

この記事をシェアする

関連記事