(元記事 https://medium.com/@totientlabs/why-and-how-to-port-from-ethereum-to-vechain-e18e3f474848)
Ethereumのスケーラビリティ問題が解決するのは1年以上先になりそうです。しかし、dAppの普及は今まさに始まろうとしています。VeChainはEVMベースの機能が揃ったスマートコントラクトプラットフォームで、現在ローンチされようとしている分散型アプリにとって最適のプラットフォームです。
なぜVeChain?
VeChainは普及とユーザーエクスペリエンスに力を入れている、スマートコントラクトプラットフォームです。高いスループットと簡単なアップグレードを実現するために、コンセンサスメカニズムとしてはDPoSをカスタマイズしたものを採用しています。車輪を再発明する代わりに、VeChainはEVMを使用し、web3スタンダードをサポートします。
最も重要なこととして、VeChainはネイティブで手数料支払いの委任や他のメタトランザクション機能を備えたことで、ユーザーに使ってもらえるアプリケーションを作るための主要な障害を解決した、唯一のスマートコントラクトプラットフォームです。
VeChainによって、ユーザーは簡単にアプリを使用できるようになります。
ユーザー獲得における最大の障壁は、仮想通貨の取得です。多くの分散型アプリでは、ユーザーはネットワークを使うための最低要件として、手数料を支払うために一定程度のトークンを保有することが求められています。仮想通貨に詳しくないユーザーにとって、これらのトークンを取得することは困難で不必要な作業です。
Ethereum上のdAppにおける、初回ユーザーの99%が初期利用フローを完了できません。
手数料の委任によって、ユーザーに代わってdAppsとウォレットがトランザクション手数料を支払うことができ、これによってユーザー獲得における最大の問題を解決できます。
Ethereum上での技術的には手数料の委託は可能ですが、クリーンなソリューションとは言い難く、さらに開発者にとっても適切に実装することが難しいです。Ethereum上では、手数料の委任はガスリレイヤー(gas relayers)によって実現し、分散性が犠牲になります。
ガスリレイヤーモデルでは、ユーザーは適切にトランザクションを自分たちの代わりに転送するために、単一のリレイヤーを信用しなければならず、リレイヤーはユーザーがトランザクションを他のリレイヤーに送っていないことを信用しないといけません。これは単一障害点を生み出し、実装において攻撃の可能性を生み出します。
ガスリレイヤーモデルはユーザー、開発者両方にとって、手数料委任を実装するのに不便な方法です。
VeChainはVIP191によって、ネイティブで手数料の委任を実装しており、 ガス支払い者指定(designated gas payer)モデルを採用しています。単一のリレイヤーに頼る代わりに、未署名のトランザクションをガス委託者(gas delegators)のプールにブロードキャストできます。委託者は委託者として、ガス代を支払いたいトランザクションに対して、委託者の署名を追加します。ユーザー、もしくはたいていはユーザーのウォレットは、確定したトランザクションを署名して、送信する前に、反応したガス委託者の中なら委託者を選びます。
ガス支払い者指定モデルでは、ユーザーはトランザクションの署名と送信を行うかどうか、そしていつ行うのかを完全に支配し続け、検閲耐性も維持します。
VeChainは強力なメタトランザクション機能を提供します。
手数料委託に加えて、VeChainはアトミックトランザクションやトランザクション依存性のような他のメタトランザクション機能をサポートしてきました。
アトミックトランザクション
トランザクションプロトコルの一部として、VeChainは複数機能の呼び出しを1つのトランザクションにまとめることができます。これによって、開発者はコントラクトをラッピングすることなく、順序に従ったアトミック機能を構成することができます。
アトミックトランザクションは、必要なセットアップトランザクションを1つにまとめることで、ユーザーが利用し始めるためのステップ数を劇的に減らすことができます。
トランザクション依存性
また、VeChainではトランザクションが互いに依存することできます。これはEthereumにおけるナンスの利用に似ていますが、別の特定トランザクションの完了をトランザクションの条件にすることができるなどその機能性はEthereumのそれを大きく上回ります。
トランザクション依存性を使うことでdAppは、それぞれのユーザーをブロックする代わりに、保留トランザクションのバックグラウンドDAGを作ることができます。
VeChainはスケーラブルなコンセンサスアルゴリズムとオンチェーンガバナンスを実現しています。
Ethereumを採用するための大きな問題の1つは、ネットワークが単一のdAppに対しても十分なレベルのスループットをサポートできないことです。CryptoKittiesが2017年に誕生し、有名になったとき、そのピーク時にはデイリーアクティブユーザーは15,000に達し、ブロックチェーン上でのトランザクションが止まるような事態になりました。
Ethereumのスケーラビリティ問題が解決するのは1年以上先になりそうです。しかし、dAppの普及は今まさに始まろうとしています。
VeChainはローンチ時から合理的にスケーラブルなプラットフォームを、日進月歩なブロックチェーンのスケーリングソリューションに応じてプロトコルを簡単にアップグレードするのに必要なツールと一緒に提供して、この問題に取り組むために、DPoSコンセンサスアルゴリズムをカスタマイズしたものを使用しています。
VeChain上での開発
VeChain上での開発はEthereum上での開発と似ています。VeChainはEVMを使用し、web3との互換性もあります。そして、開発者はTruffleのようなお気に入りの環境を使って、SolidityかVyperを使って、コントラクトを書くことができます。
類似点もありますが、このガイドでは以下のEthereumと違う点もカバーします。
VeChainのノードを使うための開発環境の設定
VeChainのスマートコントラクトエクステンションの使用
VeChainをサポートするように、Web3を拡張
注意: Vechainにおけるweb3のネイティブバージョンはConnexと呼ばれています。このガイドはEthereumからの移行にフォーカスしているので、VeChainでweb3 dAppを構築することに焦点を当てます。
開発環境
このガイドではtruffleを使用する前提で記載しますが、この設定はあらゆるEthereumのツールで機能します。
VeChain上でのweb3 dAppのための開発スタックの図
Web3ギア
VeChainのノードはEthereumのノードとインターフェースが違います。EthereumのツールをVeChainでも利用するためにweb3ギアと呼ばれるツールがあります。これはpythonプロキシサーバで、ローカルで実行でき、リクエストを変換してローカルのVeChainノードに転送しながら、EthereumのツールにEthereumと同様のインターフェースを提供します。実行したら、Ethereum開発環境はローカルのVeChainノードで期待通りに稼働します。
ローカルでのVeChain環境の設定に関しての詳細ドキュメントはこちらから
スマートコントラクトエクステンション
VeChain上でのコントラクトはEthereum上のそれとほぼ同じですが、built-insと呼ばれるコントラクトのエクステンションが追加されています。これらの支援機能は、オンチェーンガバナンスやコントラクトベースの手数料委託のサポートなど、Vechain固有の機能の多くを簡単に利用できるようにします。
純粋な移行には必要ありませんが、開発者はこの追加機能を既存のアプリケーションに役立てることができます。
built-insの利用に関する詳細なドキュメントはこちらから
ウェブレイヤー
Ethereumのように、アプリケーションのウェブレイヤーはweb3スタンダードを使って、構築することができます。VeChainにおける、EthereumでいうMetamaskに相当するCometは、dAppが標準インターフェースを維持するためにweb3をサポートします。
ThorifyはVeChainのノードインターフェースとの互換性を実現するためにweb3の拡張機能を使ったライブラリです。大半のweb3機能は期待通りに動きます。
署名規格(Signature Standards)
VIP190で定義されている、VeChain上での署名規格はEthereumのものと少し違います。この部分がアプリケーションを移行するために修正が必要となる数少ない部分の1つです。
さらにweb3規格との互換性を実現するために、CometはEIP712(VeChainとしてはVIP190を推奨はしますが)を直接サポートしており、これによってEthereumでの実装と互換性が実現され、アップデートが不要になります。
次のステップ
さらに詳しい開発者向けのドキュメントはhttps://doc.vechainworld.io/docsからご覧になれます。
VeChain上での構築に関して質問があるときは、以下に挙げているとても役に立つ開発者向けコミュニティに参加してください。
開発者コミュニティ
Vechain Dev Community (Telegram)
日本語での問い合わせなどは日本テレグラムへどうぞ
https://t.me/VeChainJapanCommunity