DMMエンジニアによるブロックチェーン講座

Stellarでおれおれトークンを作る!![第1回]

今回はトークン、Stellarの概要について

 本稿では、ブロックチェーン、暗号通貨の概念を理解されている方を対象に進めていきます。実際に、「おれおれトークン」を発行することで、トークンに対する理解を深めていただければと思います。

はじめに

 2018年の年初より、暗号通貨界隈では「トークン」というワードを耳にすることが多くなりました。私自身、ネットで調べたり、実際にトークンを購入してみたりしましたが、トークンと呼ばれるものの意味を、いまいち理解するまでには至りませんでした。

 そこで、自分でトークンを作成してようと思い、Ethereumのスマートコントラクトでトークンを発行してみたのが、私にとって初めてのおれおれトークンでした。作ってみて初めて、トークンの意味を理解できるようになったと思います。

 それ以降、色々なブロックチェーンのトークンに対して興味をもつようになり、Stellarというブロックチェーンに出会いました。Stellarのトークン発行の仕組みは簡単で、初めてトークンを学ぶ方には最適なブロックチェーンだと思います。

トークンとは

 Stellarの解説に入る前に、「トークン」という言葉について認識を合わせておきましょう。暗号通貨界隈でトークンと言えば、トークン=Ethereumと言われるほど、Ethereumのイメージが強いです。理由としては、トークンを発行して資金を調達する手段のICO(Initial Coin Offering)においてEthereumのブロックチェーンが多く利用されていたためです。実際にICOしたトークンの7、8割がEthereum上のブロックチェーンで作成されたとも言われています。

 では、トークンとは何か? と聞かれたときに答えるのは難しく、窮してしまいます。Wikipediaで検索してみると、最初にでてくる答えとして、「しるし」「象徴」「記念品」「証拠品」とでてきます。抽象的すぎてわかりづらいですが、これらの共通点は、価値の表現、代替手段をあらわしています。

 これらを踏まえ、本稿でトークンいう言葉が出て来たら「ブロックチェーン上で誰でも発行できる代替通貨」という意味だと思ってください。

Stellarとは

 日本語でのStellarの情報は大変少なく、そのためか日本での知名度はあまり高くありません。StellarはRipple(XRP)の開発者であった、ジェッド・マカレブ(Jed McCaleb)氏が中心となって開発されたブロックチェーンです。国際送金、法定通貨、他の暗号通貨とのExchangeなどボーダレスなペイメントネットワークの構築をコンセプトに掲げています。

 元々、Ripple(XRP)ベースで開発されていたのですが、XRPのコンセンサスアルゴリズムからSCP(Stellar Consensus Protocol)という独自のコンセンサスアルゴリズムに移行してからは、XRPとは別物のブロックチェーンに生まれ変わりました。

 XRPとの大きな違いは、XRPはRipple社という法人が関わっており、StellarはStellar Foundationというコミュニティ中心に運営されている点があげられます。

 暗号通貨としての流通量、時価総額で見ますと、2017年10月の時点で、暗号通貨全体の上から6、7位ぐらいを占めております、Stellarネットワーク上の公式通貨としてXLM(ルーメン)があります。

著者注:

ジェッド・マカレブ(Jed McCaleb)氏……日本の取引所で有名なMt.Goxを設立し、その後、「Mt.Gox」事件の当事者であるマルク・カルプレス氏に売却しました。

Stellarの特徴

 下記にStellarの特徴をいくつかピックアップし書き出してみました。

処理性能

ブロックの生成時間

 新しくブロックを生成する時間は他の暗号通貨と比較しても高速な部類に入ります。またブロックに対するConfirmation(承認作業)もありませんので、トランザクションが即時にファイナライズされます。ここでBitcoin、Ethereumとのパフォーマンス比較図を示します。

Protocol Comparison(lumenauts Your unofficial Stellar guideより引用)

 ここではTransaction Confirmation Timeという欄を見ていただきますと、

 Stellarのブロック生成からファイナライズするまでの時間が高速なのが見て取れるかと思います。

 上記のBitcoinの1時間という数値の算出は、以下のような方式で算出されていると思います。

トランザクションの処理数

 トランザクションの処理性能も上の比較図のTransaciton Per Secondを見ていただけますと、1秒間あたりに処理できるトランザクション数もBitcoin、Ethereumと比較して処理能力が高いことがわかります。

コンセンサスアルゴリズム

 Bitcoin、Ethereumとは異なり、Stellarにはマイナーというブロックチェーンのトランザクションの承認作業を行う参加者は存在しません。Stellarは独自に開発した、コンセンサスアルゴリズムのSCP(Stellar Consensus Protocol)を使用して承認作業を行っています。Quorum Sliceという仕組みを通して、Peerを幾重のグループにわけ、多数決で合意形成をおこなっています。各Peerは信頼できるグループを自ら選択し、複数のグループに属することも可能です。それにより、自分のグループ内の他のPeerで障害が発生し、ダウンした場合であっても、新たなグループを構築するために、他のPeerと新しいグループを形成します。

手数料

 Stellarにおいて、手数料と呼ばれるものは2つ存在しています。1つ目は、トランザクションを発行する際に、Stellarネットワークに支払われる手数料で、base feeと呼ばれるものです。すでに書いてあるように、Stellarにはマイナーが存在していないため、マイナーに対して、マイニング活動に対する手数料を払う必要がありません。そのため0.00001XLMという少額が手数料として固定で設定されています。

 執筆時のレートでbase feeを計算してみますと、

 1トランザクションを発行するのに、Stellarでは日本円で0.00027円しかかかりません。もともとはスパム行為により大量にトランザクションを発行されることを抑制するために、低いbase feeが設定されています。

 2つ目の手数料は、ユーザーが自身のStellarアドレスの中でXLMを最低限、保有しないといけない手数料で、base reserveとよばれるものです。新規にStellarアドレスを作成しただけでは、アドレスを利用することができません。そのため新規に作成したアドレスに対しては、base reserve分のXLMを入金しないければなりません。下記にbase reserveの計算ルールについて書きました。注釈中の「各オペレーション」とは、送金、トラストラインなどStellarアドレスを利用した経済活動になります。

 次に、あるユーザーが新規にStellarアドレスを作成し、トラストライン、サイニングなどのオペレーションを行う場合のユースケース図を示します。このときに必要となる最低残高として2.0XLMの金額が残高として残ってなければなりません。もし、残高が1.1 XLMしかない場合は、「アドレスの有効化」だけが可能で、XLMの入送金しかできなくなります。

 base reserveは、例えるならば、日本の銀行で口座開設するときに、銀行員の方に「1000円以上入金してください」と言われて、口座を作成するのと似ている気がします。

インフレーション

 インフレーションは、かなり独特の機能で、毎年1%の割合で、新しいXLMをStellarネットワークに新規追加して発行数を増加させます。この機能によりXLMの価格が高騰しないように、意図的にインフレーションを発生させて、XLMの価格を抑えることを目的としています。追加された1%のXLMは、投票で0.05%以上の票を受けて選ばれた、代表者のアドレスに配布されます。

 AがXに投票を行うと、残高の100XLMがそのまま100票としてカウントされます。この票を多く集めたアドレスが代表者になります。当然、投票者にもメリットがないといけないため、投票者してくれたアドレス対して、代表者から配当が配られます。配当の比率は(投票数 = XLM)の残高に比例して投票数が多いアドレスほど、多くの配当がもらえます。

 またこの配当の中には、前述の「手数料」の中で説明しました、base feeも含まれています。Stellarネットワーク上に集まったbase feeはユーザーに定期的に配布し、Stellar自体がbase feeを保持しないような公平な仕組みになっています。

 投票を集めるサービスは、マイニングプールに近いイメージで、ルーメンプールと呼ばれるサービスがあります。ルーメンプールで代表アドレスに投票することで、毎週火曜日に配当がもらえます。ルーメンプールは、有名なサービスにLUMENAUT POOLなどがあります。

トラストライン

 StellarではEthereumなど他の暗号通貨で行われているようなトークン発行者から無料でトークンが配布されるAirDropが原則、行えないようになっています。トークンを送付するには、トラストラインが結ばれていなければなりません。下図で説明したいと思います。

 AirDropのようにトークン発行者からトークンを一方的に送付することはできません。そこで、Step1で送付先の人から、トラストラインを設定するというオペレーションを行い、トークン発行者との間で信頼関係を結びます。この時点でトラストラインが設定されました。

 Step2で、トラストラインが結ばれている、送付先に対して、トークンの送付が可能になります。トラストラインはStellarアドレス単位で結ぶ必要があります。

スマートコントラクト

 Stellarにも、Ethereumのようなスマートコントラクトと呼ばれる仕組みがあります。スマートコントラクトを利用することにより、XLMの送金、トークンの作成、発行などを自動化することができます。

 Ethereumのスマートコントラクトとの大きな違いは、Ethereumがスマートコントラクトのコードをブロックチェーン上にデプロイするのに対して、Stellarのスマートコントラクトは、SDKを介して外部からブロックチェーンにアクセスします。

 Stellarのスマートコントラクトを扱う上で、クライアントSDKが必要になります。現時点で、JavaScript、Go、Java、Ruby、Python、C#、C++、Scalaなど多様な言語に対応したSDKが用意されています。

Stellarネットワーク構造

 Stellarネットワーク構造について説明したいと思います。

Stellar Core

 Stellar Coreは、実際にブロックチェーンを管理するためのPeerになります。P2Pで他のPeerと接続することで、Stellarネットワークを構成していきます。Stellar本体といってもよいと思います。XDR(External Data Representation)形式でエンコードされたトランザクションデータの管理、Peerの管理、ログ管理、fuzz機能を利用したバグ検証など、Stellarネットワークで必要な機能を担当しています。C++14で開発されており、Linux、Mac、WindowsなどのOS上で動作します。ちなみにXDRとは、LinuxのKernelにも取り込まれているデータ構造で、元々はサン・マイクロシステムズ社が開発したデータ構造です。

Horizon

 HorizonはStellar CoreとApplicationの間を取り持つ、APIサーバーです。開発者が開発したApplicationはHorizonサーバー経由でStellar Coreにアクセスすることで、Stellarネットワークとつながります。Stellar Coreが「ブロックチェーン全般」を担当しているのに対して、Horizonサーバーは「API」を担当しており、Stellarエコシステム内での責務をはっきり分離させています。

 APIでアクセスできる主な機能として、アカウント、トランザクションの検索、アカウントの作成、トランザクションの作成など、HTTPのGET・POSTメソッドを提供しています。Horizonサーバー自体はGoで開発されています。

Application

 Stellarネットワークを使って、Applicationを作成する場合に、Horizonサーバーと通信しStellarネットワークにアクセスを行います。サーバーサイド、クライアントサイドアプリケーションどちらからでも、Horizonサーバーへはアクセスが可能です。おれおれトークンの発行プログラミングもこの位置になります。

次回

 今回は、トークン、Stellarの概要などの説明をさせていただきました。次回からおれおれトークン発行をクライアントSDKを使いながら、解説していきたいと思います。

高地 明

合同会社DMM.com CTO室 エンジニア。R&D、他事業部の支援活動を通して、暗号通貨のプロダクト開発プロジェクトに参加。好きな暗号通貨ブロックチェーンはStellar、好きなプログラミング言語はCrystal。