Ripple社のやったXRPのエスクローってなあに?
最短でわかるXRPのエスクローってなあに?
これ読め。
https://github.com/ripple/rippled/blob/release/src/ripple/app/tx/impl/Escrow.cpp
XRPのエスクローの基本
Escrowとは預託という意味の単語ですが、実際の取引としてはXRPの移動を途中で凍結させるような扱いです。
AliceがBobに単にXRPを送る際に必要な情報はAliceの帳簿とBobの帳簿、そしてXRPの量だけでしょう。
AliceがBobにエスクローを利用してXRPを送る際にはAliceの帳簿とBobの帳簿、そしてXRPの量だけでなく、エスクロー終了解除時間とキャンセル解除時間を付け加えられます。EscrowCreateトランザクションを発行するとAliceの帳簿から使えるXRPは減りますが、Bobの帳簿にはXRPは入りません。XRPは中空に浮いたままです。
エスクロー終了解除時間が過ぎると、EscrowFinishトランザクションが発行できるようになります。これはAliceもBobも、あるいはEscrowCreateの電子署名を知ってる人なら誰でも発行できます。すると中空に浮いていたXRPはきちんとBobの帳簿に入り、使えるようになります。良かったですね。
キャンセル解除時間が過ぎると、EscrowCancelトランザクションが発行できるようになります。こちらは発行するとAliceの帳簿にXRPが戻ります。こちらの解除時間を設定しなければ、キャンセルはできないようになります。
Ripple社が行なったXRPのエスクロー
Ripple社はこの仕組みをXRPのロックアップに使いました。先の説明でAliceとBobとしたところを、両方Ripple社としてEscrowCreateしたのです。すると、エスクロー終了解除時間が過ぎてEscrowFinishトランザクションを自分で発行するまで、XRPは中空に浮いたままで、Ripple社自身も使えません。Rippleの取引所全部を壊すようなアップデートでもしないと、これはもう仕組み的に不可能です。もちろんそんな事をしては信用が失墜し価値が0になるでしょう。これで自身の信用を人質にXRPのロックアップが完了したわけです。めでたしめでたし……
……ん?
…………????
終了解除時間じゃなくてキャンセル時間を設定してしまっている。つまりいつでもEscrowFinishを発行してXRPを引き出せる!!! 嘘吐き!!!!!
とちょっとした騒ぎになり、
https://www.xrpchat.com/topic/13626-an-update-on-ripples-xrp-escrow/ にてJoelがかる〜く謝罪して
https://xrpcharts.ripple.com/#/transactions/F1CFA020DB5DF2AF3E06D9E84B50EFAA2854D7269238C1F188BE007C9D2B5FB8 の通り今度こそロックアップが完了したのでした。あいつらアホやろ。めでたしめでたし。
1/6にEscrowFinishが発行され、Ripple社がこのXRPを動かせるようになりました。
https://xrpcharts.ripple.com/#/transactions/D1D8956E3DE11F71D038807D5F665A985276209D0920594900436A37413741A0
補遺
ソースコード読んでるとキャンセル時間と終了時間の他にsfConditionというのもEscrow関連のトランザクションに入ってますが、ここでのConditionというものは https://tools.ietf.org/html/draft-thomas-crypto-conditions-03 で仕様策定中のcrypto-conditionです。分散基盤上でトランザクションが同一のものであると確認するための署名でエスクロー自体とはあまり関係がないので説明を端折ってます。
実際には各種トランザクションはいつでも発行できますが、解除時間が過ぎてないと不正トランザクション扱いで無視されます。
他のロックアップに使用したEscrowCreateトランザクションは https://whyripple.com/ から確認できます。
SWIFTも全銀も嫌いなのでおもしろいプロジェクトとして観察してましたが、最近はファンもアンチも両方わりと脳内お花畑でそういう下々の週刊誌レベルの話題も含め全体として好きです。