eng-labs

普段はNEOのdAppsを開発していますが、NEOとEthereumの違いや、どのように選べば良いかなどの質問が多いので、dApps開発者としての意見をまとめます。

そもそもdAppsとは?

dAppsはDecentralized Applicationsの略称で、日本語ですと分散型アプリケーションなどと呼ばれます。定義としては、オープンソーストークンを利用ユーザの合意による改良の3つがあげられます。しかし、実際には、ブロックチェーン上で動くアプリケーションをdAppsとして語られることも多くあります。また、定義で見るとBitcoinなどもdAppsと言えます。
音楽の配信サービスや分散型取引所、さらにはゲームまで様々なジャンルが存在します。
dAppsはスマートコントラクトと呼ばれる契約をペーパーレスで自動化することが可能なデジタルな契約をブロックチェーンにアップロードし、その契約に基づきアプリケーションが動いていきます。そのため、契約に時間がかかるようなものやミドルマンにより手数料が取られるようなもののコストダウンに応用できるとして注目を集めています。
スマートコントラクトは、一般的にプログラミング言語で書かれ、何らかの条件が発生した時にブロックチェーン上で自動的に動き出し、契約を進めることができます。例えば、毎月15日になったら給料を振り込むなどです。

NEOとEthereumの特徴を比較

NEOとEthereumの違いを見ていきましょう。NEOよりもEthereumの方が知名度が高く知っている人も多いと思います。NEOとEthreumは両方ともトークンを作成したり、スマートコントラクトを書いてdAppsを開発したりすることができます。NEOは中国で外発されていることもあり、中国版Ethereumとよく呼ばれています。日本では2018年9月現在では日本に取引所がないこともあり知名度が低いという印象があります。以下の表に比較をまとめて見ます。

NEO Ethereum
基軸通貨 NEO ETH
GAS NEOGas ETH
トークン規格 NEP5 ERC20
コンセンサスアルゴリズム dBFT PoW(近い将来PoSに移行予定)
ブロック生成時間 約15秒 約15秒
トランザクション処理スピード 1000件/秒 15件/秒

大きな差としては、トランザクションの処理スピードが大きく異なり、スマートコントラクトを実行するための手数料であるGASがNEOやETHといったユーティリティートークンと別れているかというところに差があります。NEOの場合は、スマートコントラクトを実行するのにNEOGasを使用しますが、EthereumではユーティリティートークンのETHを使用します。

コンセンサスアルゴリズムとトランザクションスピード

NEOとEthereumで大きくトランザクション処理スピードが異なる理由として、コンセンサスアルゴリズムが影響しています。コンセンサスアルゴリズムは日本とだと合意形成の方法などと訳されます。ブロックチェーンは発生した取引(トランザクション)を承認し、ブロックを作成しますが、このブロックの作成方法だと思っていただければ良いと思います。
NEOはdBFT、EthereumはPoWと呼ばれるコンセンサスアルゴリズムが使用されています。詳しく書くとものすごい量になってしまうので簡単に比較して見ます。

NEOに使用されるコンセンサスアルゴリズムdBFT

dBFTはdelegated Byzantine Fault Toleranceの略で、民主的なコンセンサスアルゴリズムなどと訳されます。民主的な投票により、ブックキーパーと呼ばれるブロックを作る権利をえたノードが複数選出され、その権利を持ったノードによりブロックの生成を行います。NEOのアルゴリズムの場合には、ブックキーパーのことをコンセンサスノードと呼びます。NEOの保有者の投票により数個のコンセンサスノードが選出され、選出されたコンセンサスノードの中からランダムに選ばれた一つのコンセンサスノード(スピーカー)がブロックを生成します。生成したブロックに対して他のコンセンサスノードが66%以上賛成により、初めてブロックが生成されます。現在では、50%ほどのNEOを開発団体が所有しているため、中央集権化が進んでしまう可能性もあります。

コンセンサスノードは身分が公表されるため、不正なノードが参入しづらい環境を用意しております。また、ブロックが分岐することがないため、ハードフォークすることが不可能であり、認証を高速化できます。

Ethereumに使用されるコンセンサスアルゴリズムPoW

PoWはProof of Workの略で、仕事量の証明などと訳されます。Bitcoinにも同じものが採用されています。特定の難しい問題をコンピュータによって解かせていち早く問題を解いた人がブロックの生成する権利を持つことができるというコンセンサスアルゴリズムです。莫大な量の計算が必要になるため、リソースにコストがかかるところが特徴で、これにより、改ざんが起きづらいとされています。ブロックを発行するために多くの計算量が使用されます。PoWの特性上、トランザクションの処理スピードも落ちてしまい、ブロックが派生することもあるため、トランザクションの認証に時間がかかってしまうというような問題もあります。
そのためEthereumではコンセンサスアルゴリズムを将来的に変更することを公表しています。

スマートコントラクト言語について

NEOとEthereumの違いの概要については理解していただけたと思います。おそらく開発者が気になるのはdAppsの作り方やスマートコントラクトを作成する言語についてだと思います。NEOは既存の汎用性のあるPythonやC#で書くことが可能です。一方、Ethereumはsolidityと呼ばれるコントラクト指向型言語と呼ばれるものなどを使用してスマートコントラクトを作成します。一から新しい言語を勉強するよりは、既存の言語の方が開発コストが低くなると考えている人も多いと思います。ですが、dAppsを開発している身からすると、導入部分でNEOの方が敷居が低いというような差しかないと考えています。NEOの場合はコンパイラを使用してNEOのスマートコントラクトを実行する仮想マシン(VM)で実行できるようにしますが、既存の言語が使用できるからといって、既存のライブラリが100%使用できるわけではありませんので、NEOのコンパイラに合わせてスマートコントラクトを書く必要が出てきます。より複雑なコントラクトを書く場合ですと、現状ですと様々な検証を行う必要が出てくるでしょう。このような状況が生まれてくる以上、コントラクト指向型言語のsolidityのような言語を学ぶのとほとんど同じコストがかかってきます。実際、Ethereumは開発者が多くドキュメントが揃いつつあります。一方で、NEOは既存の言語を使用できるというようなメリットがありますが検証や既存のパッケージが使えないなどの問題が発生したりします。この辺をしっかりと見極めながらNEOとEthereumどちらを使えばいいのか?他のプラットフォームがいいのかを検証する必要があると思います。

実際にどのように選べばいいのか?

NEOとEthereumの一般的な概要を見てきましたが、実際にどのように選べばいいのか、現時点(2018/09)での意見をまとめて見ます。Webアプリやスマートフォン向けのアプリやウォレットに関しては実際に大きな差はないと思いますので、それぞれの特徴や、スマートコントラクト言語などから考えて見ます。

NEOの方が良いと思われるdApps

  • 認証のスピードがなるべく早い方が良いアプリケーション
  • どうしても既存の言語がいい場合
  • 自ら検証をする時間がある場合(ドキュメントが少ないため)
  • NEOの将来に期待する場合

NEOの方が良いと思われるdApps

  • 認証のスピードが遅くてもいいアプリケーション
  • 世界中にあるドキュメントを使用したい場合(検証時間を短縮したい)
  • トークンを利用した価値の交換をしたい場合(NEO日本の取引所に上場していないため)
  • Ethereumの将来に期待する場合

現時点では、トランザクション処理スピードが一番の差だと思います。ですが、Ethereumはコンセンサスアルゴリズムを将来的に変更することも発表しており、トランザクションの処理スピードは解決されると思います。もし、あなたが、通貨としてトークンを発行したい場合は流動性を気にする必要があると思います。そのため、どちらに将来性があるのか、しっかりと吟味する必要があり、明確な答えがありません。また、NEOはコンパイラが発展しコンテンツが充実することで、スマートコントラクトを書いていることを感じさせないようなレベルまで成長していくでしょう。今後、どのようなチェーンがスマートコントラクトの業界を引っ張っていくかは注目です。