STOの業界背景やサンプルアプリのシステム概要やDEMOを通じた
はじめに
こんにちは。SBIR3Japanの趙です。ブロックチェーンを使った多くのユースケースの中でも特に注目を浴びているユースケースの一つとしてSTO(Security Token Offering)があります。この記事では、Cordaで作ったSTOサンプルアプリケーションを使ったデモを記事形式でお届けしたいと思います。
STOって何が嬉しいの?
決済サイクルを短縮させることが可能です。決済サイクルとは、取引が成立してから最終的に決済されるまでの期間のことです。現在、ほとんどの証券は、T日目に取引が執行され、後日(通常は2日後のT+2)に決済されるというサイクルで決済されています。
取引が実行されると、その詳細が関連する第三者に送信され、決済内容を照合・確認します。このプロセスはクリアリングと呼ばれます。通常、清算には中央取引所(CCP)が関与し、取引相手を代替コストリスク(取引が決済されず、不利な価格で交換しなければならないリスク)から保護することができます。
プロセスが複雑で、多くの仲介業者が関わっていることから以下の点において、改善の余地があります。
- 決済にかかる時間が長く(通常2日)
- 決済コストも高い
証券トークンを用いることによって、決済プロセスを簡素化し、仲介者を排除することができます。そのメリットは以下の通りです。
- 決済にかかる時間をN日間から数秒に大幅短縮
- 決済コストの削減
決済コストの削減により、1回の注文に必要な最低株式数も減らすことができます。通常は1ロット1000株のところ、1ロット1株、あるいは0.0001株にまで減らすことができます。これにより、より多くの投資家を惹きつけ、流動性を高めることができます。その他、コスト構造上サービスとして成立できなかった金融商品を新たに創出することが可能です。
もちろんアセットクラスによってメリットは変わってきますが、多くのポテンシャルを秘めているユースケースであることは間違いないと考えられます。
サンプルアプリケーションの構成要素と概要
スコープ
- 法定通貨と証券のトークン化
- トークンの移動
- 取引所
- 即時決済(法定通貨トークンと証券トークン)
- ノードをホストすることを望まない(あるいはできない)個人投資家や機関投資家を代表するCordaアカウント
参加者及び役割
- 取引所
投資家から取引の注文を受け付けるセカンダリーマーケットのことです。注文がマッチングされると、マッチングエンジンが直ちに決済のフローを実行します。
取引所は担保となる法定通貨を受け取り、ステーブルコインのような法定通貨トークンを発行します。法定通貨トークンが償還されると、投資家には担保分の現金が返還されます。今回のサンプルアプリでは、取引所では、法定通貨トークンと証券トークンで取引されます。
- トークン発行者
トークン発行者はSTOのプライマリーマーケットのことです。トークン発行者は企業の証券トークン発行の役割を担います。
- 金商業者A、金商業者B
金商業者はトークンの売買や保管を行います。
- ブローカー
ブローカーはCordaにおけるAccountの形で個人及び機関投資家にブローカーサービスを提供します。
デモシナリオ
デモは大きく以下3つのステップで進めます。
- 法定通貨トークンの発行
- 証券トークンの発行
- 株取引と即時決済の確認
1.法定通貨トークンの発行
まずは、金商業者Aが取引所で取引するために、法定通貨トークンを発行します。
- 金商業者Aが既に取引所に担保となる法定通貨を預けていると仮定します。
- 取引所は同額の法定通貨トークンを金商業者Aに手動で発行します(現実世界においてこのプロセスは、実際は自動で行われるはずです)。
では、早速法定通貨トークンの発行をしていきたいと思います。
シンプルな画面ですが、発行する数量、通貨の単位、法定通貨トークンを受け取るノードを選ぶことが可能です。また、オプションではありますが、Cordaノード内のどのAccountに発行するかも選ぶことが可能です。
取引所法定通貨トークン発行画面
金商業者Aは500万USD分の法定通貨トークンを取引所で発行しました。次に金商業者ノードAのポートフォリオ及びトランザクション履歴を見てみましょう。
金商業者Aのポートフォリオには、500万分のUSDトークンが発行されていることが確認できます。一方、まだ証券トークンは何も持っていないので、Emptyの状態となっています。
金商業者Aのポートフォリオ
また、金商業者Aのトランザクション履歴を見てみましょう。トランザクション履歴には2つの履歴があることが分かります。
最初のトランザクション(画面の下の位置のトランザクション)は金商業者AがCorda内のAccountを作成するトランザクションであり、上のトランザクション履歴は取引所で500万USDトークンを発行したトランザクションの履歴となります。
金商業者Aのトランザクション履歴
2.証券トークンの発行
次に、証券トークンの発行を行います。実際はどこかの会社が証券トークンを発行し、資金調達をすることとなります。ここでは、例として株式会社ZSという会社がIPOするシナリオで進めていきます。
- 発行者はZS社による100万の証券トークンをプライマリーマーケットで発行し、資金調達を支援します。
- 発行者は金商業者Bに10,000枚のZSトークンを割り当て、IPOに成功。
では、早速証券トークンを発行していきたいと思います。
下に表示されているのは発行者の操作画面ですが、100万枚のZSトークンを発行者が発行しています。
発行者の操作画面:ZSトークンの発行
ZSトークンの発行が終わりましたので、100万枚発行した内、1万枚を金商業者Bに割り当てていきたいと思います。
発行者の操作画面:ZSトークンの割り当て
ZSトークンの発行と割り当てが終わりましたので、発行者ノードのトランザクション履歴を見ていきたいと思います。フロントエンドの画面からもトランザクション履歴を見ることはできますが、より見やすくするために、ここでは発行者ノードのノードエクスプローラーを使ってお見せしたいと思います。
以下に発行者のノードエクスプローラーが表示されています。トランザクション履歴として、5つあります。時系列順(下から上への順)で見ると発行者ノードにおけるAccount作成、証券の銘柄作成、証券トークン発行、金商業者Bのアカウント発行、証券トークンの割り当てがあります。
発行者のノードエクスプローラー:トランザクション履歴
留意点
証券トークンの発行時には、証券トークンの種類がネットワーク上の他のすべての関係者にブロードキャストされます。これにより、すべての関係者がこの新たに発行された証券とその詳細(ロットサイズやティックサイズなど)を認識し、流通市場での取引ができるようになります。
また、金商業者Bのアカウント発行が発行者のトランザクション履歴にも表示されるのは、証券トークンを金商業者Bに割り当てるためには、発行者ノードで金商業者BノードのAccount情報を知る必要があるからです。
3.証券取引と即時決済の確認
今まで、法定通貨を担保に発行された法定通貨トークン、ZS社の株を発行しました。次に取引所において証券トークンの売買を行い、即時決済されているかどうかを確認したいと思います。
以下のシナリオで進めていきます。
- 金商業者BはZSトークンの売却を希望し、取引所に売り注文を出します
- 金商業者Aが金商業者Bの注文に対して買い注文を出します
- この2つの注文がマッチすると、マッチングエンジンが自動的にCorDappの決済Flowを起動します
- 買い手と売り手が(2日も待たずに)すぐにトークンをスワップするDvP決済となります
- トークンは自分のノードのvaultに保管されます。中央証券保管振替機構(CSD)が不要になります
では、早速金商業者Bが割り当てられた1万枚のZSトークンの内、5,000枚を市場で売り出すとします。下記画面のよに、1ZSトークン当たり、100USDで5,000枚売るオーダーを出しています。
金商業者B画面:ZSトークンの売り注文
次に、金商業者AはZSトークンの買い注文をします。99USDで1,000枚、100USDで1,000枚の買い注文をし、100USDの買い注文は約定されます。
金商業者Aノード画面:ZSトークンの買い注文
注文が一部約定されました。金商業者Bのポートフォリオを見てみましょう。1万ZSトークンのうち、1,000ZSトークンが市場で約定され、残り9,000枚が残っています。100USDで1,000ZSトークンが約定されていますので、100USD×1,000枚=100,000USDを持っていることになります。
金商業者Bのポートフォリオ
金商業者Aと金商業者Bの間で法定通貨トークンと証券トークンのDvP決済が発生しましたが、もう少し詳しくどのような取引だったのかについてみていきたいと思います。
Inputは2つあります。
- Input1:5,000,000USDトークン 持ち主:金商業者A
- Input2:10,000ZSトークン 持ち主:金商業者B
Outputは4つあります。
- Output1:100,000USDトークン 持ち主:金商業者B
- Output2:4,900,000USDトークン 持ち主:金商業者A
- Output3:1,000ZSトークン 持ち主:金商業者A
- Output4:9,000ZSトークン持ち主:金商業者B
DvP決済のトランザクション
CordaはUTXOモデルを使用しています。今回のデモにおけるUSDトークン見ると、最初に発行されたトークンは500万枚です。そのため、500万枚のファンジブルトークンのStateがあります。実際1,000枚のZSトークンを購入するには、500万のUSDトークンStateを490万USDトークンのStateと10万USDトークンのStateに分割し、10万USDトークンを金商業者Bに渡す必要があります。
ZSトークンを1万枚持っている金商業者Bも同様、9,000と1,000に分け、1,000を金商業者Aに渡す必要があります。
ブローカー経由の個人顧客の売買
今回のサンプルアプリにおいて、個人の顧客もブローカーを通せば、売買できるような仕様になっています。
個人の顧客はブローカーで取引をするための口座を作ります。下の画面はとてもシンプルなものですが、口座が作られると、自動的にブローカーノードの中でCordaのAccountが作成されます。今回はXYZという個人顧客のケースを見ていきたいと思います。
個人顧客の口座作成
当然ながら、XYZは口座を作成しただけで、何も持っていないので、取引所でUSDトークンの発行をします。今回のサンプルアプリでは、ブローカーノードが代わりに取引所で自ノード内のXYZアカウントに20,000USDトークンを発行する手続きをする仕様となっています。実際はXYZがブローカーによって提供されている画面でUSDトークンの発行申請を行えば、USDトークンをもらえるような仕組みの方が良いかもしれません。
XYZへのUSDトークン発行
ここからは実質上記の金商業者Aと金商業者BのDvP決済と同様となります。XYZが買い注文をし、約定されれば自動的にUSDトークンとZSトークンのDvP決済が行われます。
XYZの買い注文金商業者Bのポートフォリオ
実現に向けて
STOサンプルをご紹介しましたが、如何でしたしょうか。日本においては、Progmatのようなプライマリー発行を担うサービス提供者様も出現していますが、今回のサンプルアプリにおいては、セカンダリーマーケットも対象となっています。セカンダリーマーケットは1次流通と異なり、ある程度流動性を確保することが重要です。もちろん、アセットクラスの種類よって、求められる流動性は異なりますし、扱うインセンティブも異なりますが、このような取り組みに関しては、取引所が主導して、推進していくことが大切でしょう。
今回は画面操作をメインとしたご紹介となりましたが、裏でどのような仕組みで動いているかについて興味がある方は是非、当社までご連絡頂ければと思います。
<ご質問・ご要望の例>
- Corda Portalの記事について質問したい
- ブロックチェーンを活用した新規事業を相談したい
- 企業でのブロックチェーン活用方法を教えて欲しい 等々
SBI R3 Japan ビジネス推進部
デジタルアセットのプロジェクトをしています。
パブリックチェーン大好きでした(今も)が、Cordaの魅力に惹かれました!