Cordaを用いたSTOのサンプルアプリ紹介

Zhao sheng
Aug 2 · 13 min read

前書き

こんにちは。SBIR3Japanの趙です。ブロックチェーンを使った多くのユースケースの中でも特に注目を浴びているユースケースの一つとしてSTO(Security Token Offering)があります。この記事では、Cordaで作ったSTOサンプルアプリケーションを使ったデモを記事形式でお届けしたいと思います。

STOって何が嬉しいの?

決済サイクルを短縮させることが可能です。決済サイクルとは、取引が成立してから最終的に決済されるまでの期間のことです。現在、ほとんどの証券は、T日目に取引が執行され、後日(通常は2日後のT+2)に決済されるというサイクルで決済されています。

取引が実行されると、その詳細が関連する第三者に送信され、決済内容を照合・確認します。このプロセスはクリアリングと呼ばれます。通常、清算には中央取引所(CCP)が関与し、取引相手を代替コストリスク(取引が決済されず、不利な価格で交換しなければならないリスク)から保護することができます。

プロセスが複雑で、多くの仲介業者が関わっていることから以下の点において、改善の余地があります。

証券トークンを用いることによって、決済プロセスを簡素化し、仲介者を排除することができます。そのメリットは以下の通りです。

決済コストの削減により、1回の注文に必要な最低株式数も減らすことができます。通常は1ロット1000株のところ、1ロット1株、あるいは0.0001株にまで減らすことができます。これにより、より多くの投資家を惹きつけ、流動性を高めることができます。その他、コスト構造上サービスとして成立できなかった金融商品を新たに創出することが可能です。

もちろんアセットクラスによってメリットは変わってきますが、多くのポテンシャルを秘めているユースケースであることは間違いないと考えられます。

サンプルアプリケーションの構成要素と概要

スコープ

参加者及び役割

投資家から取引の注文を受け付けるセカンダリーマーケットのことです。注文がマッチングされると、マッチングエンジンが直ちに決済のフローを実行します。

取引所は担保となる法定通貨を受け取り、ステーブルコインのような法定通貨トークンを発行します。法定通貨トークンが償還されると、投資家には担保分の現金が返還されます。今回のサンプルアプリでは、取引所では、法定通貨トークンと証券トークンで取引されます。

トークン発行者はSTOのプライマリーマーケットのことです。トークン発行者は企業の証券トークン発行の役割を担います。

金商業者はトークンの売買や保管を行います。

ブローカーはCordaにおけるAccountの形で個人及び機関投資家にブローカーサービスを提供します。

デモシナリオ

デモは大きく以下3つのステップで進めます。

①法定通貨トークンの発行

②証券トークンの発行

③株取引と即時決済の確認

法定通貨トークンの発行

まずは、金商業者Aが取引所で取引するために、法定通貨トークンを発行します。

では、早速法定通貨トークンの発行をしていきたいと思います。

シンプルな画面ですが、発行する数量、通貨の単位、法定通貨トークンを受け取るノードを選ぶことが可能です。また、オプションではありますが、Cordaノード内のどのAccountに発行するかも選ぶことが可能です。

取引所法定通貨トークン発行画面

金商業者Aは500万USD分の法定通貨トークンを取引所で発行しました。次に金商業者ノードAのポートフォリオ及びトランザクション履歴を見てみましょう。

金商業者Aのポートフォリオには、500万分のUSDトークンが発行されていることが確認できます。一方、まだ証券トークンは何も持っていないので、Emptyの状態となっています。

金商業者Aのポートフォリオ

また、金商業者Aのトランザクション履歴を見てみましょう。トランザクション履歴には2つの履歴があることが分かります。

最初のトランザクション(画面の下の位置のトランザクション)は金商業者AがCorda内のAccountを作成するトランザクションであり、上のトランザクション履歴は取引所で500万USDトークンを発行したトランザクションの履歴となります。

金商業者Aのトランザクション履歴

証券トークンの発行

次に、証券トークンの発行を行います。実際はどこかの会社が証券トークンを発行し、資金調達をすることとなります。ここでは、例として株式会社ZSという会社がIPOするシナリオで進めていきます。

では、早速証券トークンを発行していきたいと思います。

下に表示されているのは発行者の操作画面ですが、100万枚のZSトークンを発行者が発行しています。

発行者の操作画面:ZSトークンの発行

ZSトークンの発行が終わりましたので、100万枚発行した内、1万枚を金商業者Bに割り当てていきたいと思います。

発行者の操作画面:ZSトークンの割り当て

ZSトークンの発行と割り当てが終わりましたので、発行者ノードのトランザクション履歴を見ていきたいと思います。フロントエンドの画面からもトランザクション履歴を見ることはできますが、より見やすくするために、ここでは発行者ノードのノードエクスプローラーを使ってお見せしたいと思います。

以下に発行者のノードエクスプローラーが表示されています。トランザクション履歴として、5つあります。時系列順(下から上への順)で見ると発行者ノードにおけるAccount作成、証券の銘柄作成、証券トークン発行、金商業者Bのアカウント発行、証券トークンの割り当てがあります。

発行者のノードエクスプローラー:トランザクション履歴

留意点

証券トークンの発行時には、証券トークンの種類がネットワーク上の他のすべての関係者にブロードキャストされます。これにより、すべての関係者がこの新たに発行された証券とその詳細(ロットサイズやティックサイズなど)を認識し、流通市場での取引ができるようになります。

また、金商業者Bのアカウント発行が発行者のトランザクション履歴にも表示されるのは、証券トークンを金商業者Bに割り当てるためには、発行者ノードで金商業者BノードのAccount情報を知る必要があるからです。

証券取引と即時決済の確認

今まで、法定通貨を担保に発行された法定通貨トークン、ZS社の株を発行しました。次に取引所において証券トークンの売買を行い、即時決済されているかどうかを確認したいと思います。

以下のシナリオで進めていきます。

では、早速金商業者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つあります。

Outputは4つあります。

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次流通と異なり、ある程度流動性を確保することが重要です。もちろん、アセットクラスの種類よって、求められる流動性は異なりますし、扱うインセンティブも異なりますが、このような取り組みに関しては、取引所が主導して、推進していくことが大切でしょう。

今回は画面操作をメインとしたご紹介となりましたが、裏でどのような仕組みで動いているかについて興味がある方は是非私にご連絡頂ければと思います。

メールアドレス:sheng.zhao@sbir3japan.co.jp

また、弊社主催の夏の技術イベント(Corda 夏の陣)にてサンプル実装のデモを実施する予定です。単純なデモではありますが、興味のある方は是非ご参加ください。

最後までお読み頂き誠にありがとうございます。
記事へのご質問、またはブロックチェーンに関してお困りごとがございましたらお気軽にご連絡ください。
ブレインストーミングやアイデアソンも大歓迎です。

お問い合わせ:info-srj@sbir3japan.co.jp
HP: https://sbir3japan.co.jp/product.html
Twitter: https://twitter.com/R3Sbi
Facebook: https://www.facebook.com/R3DLTJapan

Corda japan

Cordaで世界を変えよう

Corda japan

Cordaで世界を変えよう

Zhao sheng

Written by

working at SBI R3 Japan

Corda japan

Cordaで世界を変えよう