プライベートブロックチェーンネットワークのためのスマートコントラクト

WavesEnterpriseによる”Smart Contracts for the Private Blockchain Network” の日本語訳です。プライベートブロックチェーンをビジネスアプリケーションに適用する場合に求められる点を質疑形式で説明し、そのソリューションとして用意したコンテナ化したスマートコントラクトが紹介されています。また、パブリックブロックチェーンのスマートコントラクトとの比較も行われています。

Author

プライベートブロックチェーンネットワークのためのスマートコントラクト

パブリックネットワークとプライベートネットワークのスマートコントラクトの違い

ブロックチェーンは、決済システムの提供から、分散型アプリケーションを支えるプラットフォームの原動力へと進化しています。チャールズ・ホスキンソンは良い説明を提供しています:イーサリアムがプラットフォームを開発していたとき、彼らは資産の転送がその背後にある物語を持っていることに気づきました。 それは、資産の転送を完了するために、満たすべきさまざまな条件を構成することができるということです。その結果、さらなる技術開発と共に、ブロックチェーンのユーザーは、資産の移転以上のものが可能であることに気付き、さまざまな便利で面白い分散アプリケーションを構築し始めました。パブリックブロックチェーンに関する限り、主な使用例は次のとおりです:

  1. ゲーム ― Crypto KittiesRide on Waves、等
  2. 資産交換
  3. 堅牢な投票システム
  4. クラウドファンディング(ICO)

パブリックブロックチェーンプラットフォームの採用と人気の高まりにより、企業は、ブロックチェーンテクノロジーが実際にビジネスプロセスの一部にとって非常に効率的である可能性があることを理解しました。その進展とビジネスニーズへのフォーカスは、スマートコントラクトの開発にも影響を与えました。企業のお客様との経験を踏まえ、私たちはプライベートブロックチェーンの分野でスマートコントラクトを活用できる一般的なユースケースを提供できます。

  1. 企業文書フロー
  2. サプライチェーンのビジネスプロセス
  3. 保険
  4. 堅牢な投票システム
  5. サプライヤーとの相互合意の清算
  6. リースおよびレンタル機器
  7. 有形または無形の資産に裏付けられたデリバティブ金融商品の作成(例:負債のトークン化)
  8. あらゆる種類または複雑なオークション
  9. ブロックチェーンデータの予測分析

ご想像のとおり、パブリックブロックチェーンとプライベートブロックチェーンのスマートコントラクトには違いがあります。プライベートブロックチェーンでは、主な違いは次のとおりです:

  • スマートコントラクトによって運用されるデータは、パブリックネットワークと比較してはるかに機密性が高くなります。
  • 一般的なケースは、スマートコントラクトがブロックチェーンの外部に保存されたドキュメントとデータを操作できる必要があることです。これは、パブリックブロックチェーンプラットフォームでは不可能です。パブリックネットワークには、信頼された、または、非常に限られたデータオブジェクトをブロックチェーンに直接保存できるオラクルがあります。どちらの場合も、プライベートでの使用には重大な制限となります。
  • 権限のある関係者のみがコントラクトを暗号化解除して実行できるようなプライベートスマートコントラクトを扱っている場合、スマートコントラクトを呼び出すトランザクションを暗号化する必要がある場合があります。

企業顧客は、ビジネスアプリケーションのスマートコントラクト機能に何を期待していますか?

この質問への答えは比較的簡単です。彼らは複雑なビジネスプロセスを最小限の苦労でブロックチェーンロジックに変換したいと考えています。お客様のニーズを満たすために、調査を実施し、質問を定式化してスマートコントラクトで何をする必要があるかを理解しました。

Q:コントラクトはどの言語を使用する必要があり、どの程度安全である必要がありますか?

ご存知かもしれませんが、WavesにはRide言語が含まれています。これは非常に便利で、ブロックチェーンとうまく統合されていますが、アプリケーションのロジックがブロックチェーンに限定されている場合にのみ役立ちます。さまざまなドキュメントを操作する必要があるアプリケーションの場合、Rideは不便であり、開発者にとってより使いやすいものを使用する必要があります。

Q:システムは複雑なビジネスルールを簡単に表現できますか?

ほとんどの言語では、残念ながら答え”NO”です。これには多くの理由があります。企業の開発者は、スマートコントラクト開発のための言語とブロックチェーンテクノロジーの詳細を知らず、関連する言語はオフチェーンデータを扱うことができません。

Q:すべてのブロックチェーン構造を書き換えずに、将来コントラクトをアップグレードできますか?

繰り返しになりますが、市場のほとんどのアプローチではできません(Hyperledger Fabricを除く)。主な理由は、コントラクトがブロックチェーンとあまりにも密接に融合されていることです。これは、パブリックネットワークから継承されており、そこでは別の融合がシステムセキュリティに対する直接的な脅威となります。

Q:スマートコントラクトを既存の顧客インフラストラクチャに統合し、他のビジネスアプリケーションと連携するのはどれくらい簡単ですか?

残念ながら、ビジネスアプリケーションまたはそのAPIのほとんどは再設計する必要があり、スマートコントラクトに使用するのは困難です。これは、プロジェクトにブロックチェーンを採用する際に企業に追加コストをもたらします。

次のセクションでは、これらすべての問題にどのように取り組み、私たちの提供する完全なソリューションは何かを説明します。

Wavesエンタープライズスマートコントラクト

では、Waves Enterpriseで利用できるスマートコントラクトは何ですか?

Ride

ご存知のように、Waves EnterpriseはRideをサポートしていますが、他のほとんどのスマートコントラクト言語と同様に、もともとパブリックプラットフォーム用に開発されたものであり、オフチェーンデータを操作する機能がありません。Rideは非常に高速でブロックチェーンとうまく統合されているため、外部ソースからのデータ処理を伴わない単純なロジックの実装に関してはRideの使用を提案します。したがって、たとえば、パブリックオークション、投票、および公的保険はすべてRide言語を使用して実装できます。それ以外の場合は、新しい機能であるコンテナ化されたスマートコントラクトを使用することをお勧めします。

コンテナ化されたスマートコントラクト

Waves Enterpriseのコンテナ化されたスマートコントラクトは、実際にはDockerコンテナにラップされたプログラムです。Dockerコンテナは、Dockerレジストリ(1つまたは複数)に配置されます。各コンテナーには、ブロックチェーン上のアドレスとそれに関連付けられたイメージハッシュを持ちます(明確に有効なコンテナーを使用していることを確認するために、DockerCreateトランザクションに備えてイメージハッシュを事前に公開します。これについては、ドキュメントでさらに詳しく確認できます)。コントラクトを実行するために、必要な呼び出しパラメーターを使用してブロックチェーントランザクションが作成され、コントラクトは結果をブロックチェーンに書き込みます。Dockerコンテナを使用しているため、SDKによって開発者が制限されているHyperledger Fabricとは異なり、あらゆるプログラミング言語とフレームワークを使用できます。DockerはアプリケーションをWaves Enterpriseノードから分離し、コードレベルではノードにアクセスできないことに注意してください。ただし、ネットワーク接続は持ち、必要なときにHTTPリクエストを実行できます。これは、ノードだけでなく、知っている他のほぼすべてのサービスをリクエストできることを意味します。これまでの話を要約すると、Waves Enterpriseのコンテナ化されたスマートコントラクトの主な利点は次のとおりです:

  • プログラミング言語の柔軟性。開発者は、好みのフレームワークとライブラリと共にプログラミング言語を選択できます。
  • その結果、コントラクト内でニューラルネットワークやその他の機械学習モデルを実行して、AIのパワーをブロックチェーンアプリケーションにもたらすことができます。
  • スマートコントラクトを外部データソースに接続して、リアルタイムデータにアクセスし、ブロックチェーン外のアプリケーションと連携できます。
  • スマートコントラクトの複雑さは、コントラクトがデプロイされる仮想マシンの計算能力によってのみ制限されます。実行時間はマイクロブロック時間によってのみ制限されますが、ユーザーが希望する場合はより短くすることができます。
  • コントラクトパラメーターとステートは暗号化できるため、他のネットワークメンバーはそれらにアクセスできません。

コントラクトをコールするとどうなりますか?

前のセクションで説明したように、私たちはコンテナ化されたコンテナにいくつかのソフトウェアを持っています。しかし、誰かがノードトランザクションプールにコールトランザクションを入れると、実際には何がおこるのでしょか?プロシージャは次のとおりです。

  1. アクティブなコンテナーがない場合、Dockerレジストリーに保管されているイメージからデプロイされます。
  2. このコントラクトのインターネット接続が禁止されている場合、ファイアウォールをロードし、ドメインノードは環境変数で初期化されます。
  3. run.shスクリプトが実行され、コンテナが存在しない場合に依存関係がインストールされます。
  4. コントラクトは、OS環境変数を通じてノードとトランザクションに関する情報を取得できます。
  5. 計算に時間がかかりすぎると、タイムアウトでコントラクトが強制終了されます(正確なタイムアウトはユーザーが構成できます)。
  6. コントラクトの実行結果はSTDOUTに出力され、リスト[DataEntry]としてフォーマットされます。フォーマットと出力の詳細については、ドキュメントを確認してください。
  7. 契約が正常に実行された場合、マイナーはExecutedContractTransactionを作成して署名します。トランザクションには、コントラクトを呼び出したコールトランザクションと結果が含まれます。次に、他のトランザクションと同様に、ブロックに取り込まれてステートに反映されます。
  8. そのブロックを受信するすべての参加者は、トランザクション署名がマイナーとしての参加者によって生成されたことを検証し、txをステートに適用します。

例と必要なデプロイ手順を確認したい場合は、公式ドキュメントのこのガイドで確認できます。

市場で「最高」のモノとの簡単な比較

これらの技術ソリューションから得られる利点は重要であるため、ここでは、コンテナ化されたスマートコントラクトが他の一般的なスマートコントラクトとどのように比較されるかについて説明します。

  1. Ethereumには強力なコミュニティがあり、パブリックブロックチェーンの分野でナンバーワンのdApp開発プラットフォームとして長い間支配しています。また、プライベートブロックチェーン用に変更もされています(たとえば、QuorumとMasterchain)。しかし、一般にSolidityおよびEVM言語には、パブリックネットワークでの実行のために、重大な制限があります。Waves Enterpriseのコンテナー化されたコントラクトはそれを回避しています。
    • ガス。EVM言語はチューリングコンプリートですが、無限計算を実行してシステムを麻痺させる攻撃をされた場合にも安定稼働するために、EVMがコントラクトの実行ごとに実行できる操作の数と複雑さには制限があります。その結果、複雑なコントラクトがある場合、ガス不足エラーが発生する可能性があります。これは、プライベートネットワークでは非現実的です。ビジネスプロセスを完了する必要があるためです。
    • オフチェーンデータ。Ethereumスマートコントラクトに一部のデータを加えることができますが、ストレージは非常に限られており、高価です。たとえば、取引所に現在の価格を要求し、それらを他の操作に使用するコントラクトを作成することはできません。言い換えれば、Solidityを使用して小さなWebサーバーを作成することはできませんが、Waves Enterpriseでは、お気に入りのプログラミング言語とフレームワークを使用して作成することができます。
  2. Hyperledger Fabricは現在、プライベートブロックチェーンソリューションの最も有名なプラットフォームであり、Dockerコンテナのスマートコントラクトも提供しています。ただし、これらはSDKによって制限されており、Go、JSなどでのみ使用可能です。開発者は、ディスパッチや引数の検出など、多くの低レベルの操作を処理する必要があり、Goで”hello world”のプログラムを作るのでさえ 90行のコードになります。これは多くの開発者にとって非実用的かもしれません。

次は何?

私たちは絶えず技術を改善しており、今後数か月でリリースする主要な機能のいくつかですでに作業を開始しています。まず、現在のプロトコルのセキュリティ強化に取り組んでいます。将来、スマートコントラクトは、コントラクトの実行に関与するマイナーによるマルチシグネチャが必要とすることになるかもしれません。また、マイニングプロセスを強化して、複数のコンテナ化されたコントラクトを並行してマイニングするのと同時に、コンテナ化されたスマートコントラクトと通常のトランザクションの並行マイニングをサポートします。