apeescape2.com
  • メイン
  • トレンド
  • リモートの台頭
  • 仕事の未来
  • バックエンド
バックエンド

イーサリアムオラクル契約:セットアップとオリエンテーション

イーサリアムスマートコントラクトは、単なる「新しいホットなもの」ではありません。彼ら(または関連する何か)は、インターネットの次の新しい時代に人間が互いにビジネスを行う方法を変える準備ができていると私は信じています。それが事実かどうかは時が経てばわかります。

これは、に関する3部構成の記事の最初の記事です。 イーサリアムのスマートコントラクト開発 Solidityを使用して、最も具体的には、いわゆる「オラクル」とのコントラクトの使用を調査します。これは基本的に、他のスマートコントラクトで使用するためにデータをブロックチェーンに送り込むコントラクトです。

  • パート1:Truffleを使用した開発の概要、およびさらなる実験のためのプロジェクトのセットアップ
  • パート2:より深い調査のためにコードを掘り下げる
  • パート3:スマートコントラクトを使用したオラクルの概念的な説明

このシリーズのパート1の目標は、オラクル契約の概念、その背後にある哲学、またはそれらが何であるかについて深く理解することではありません。イーサリアムオラクルチュートリアルのこの部分の目標は、単に次のことです。



  • Truffleとのスマートコントラクトの構築を準備しましょう。
  • パート2とパート3で役立つスマートコントラクトプロジェクトを構築します。
  • イーサリアムのスマートコントラクトとスマートコントラクトのコーディングに関連するいくつかの概念を紹介します。
  • Truffleとスマートコントラクトを使用してコンパイル/実行/デバッグサイクルを導入します。

定義:オラクル。スマートコントラクトがブロックチェーン外の世界からのデータにアクセスするための手段。オラクルはそれ自体がスマートコントラクトの一種であり、外部からデータを取得してブロックチェーンに入れ、他のスマートコントラクトが消費できるようにします。

この記事の最初の部分は、すべての前提条件を設定することで構成されます。次に、単一のイーサリアムコントラクトを設定し、Truffleでテストします。最後に、オラクルをクライアントから分離し、それらを共同でテストします。

ソフトウェア要件

  • 主要なOSはどれでも動作しますが、インストールとセットアップの一部はもちろんシステムによって異なります。私はこれらすべてをUbuntuLinux(16.04)で実行しました。また、Windowsでの環境設定にも問題はありませんでした。私はMacを試したことがありませんが、Macでも試すのが一般的であることは承知しています。
  • 完全なethノードを実行する必要はありません。独自のテストネットが付属しているTruffleを使用します。自分が何をしているかについて少し知っている場合は、他の任意のテストネットを使用できます。 Truffleのローカル開発テストネットは、このチュートリアルの目的にとって最も簡単でアクセスしやすいものです。

知識要件

  • ブロックチェーンの仕組みに関する基本的な知識
  • ブロックチェーンベースのスマートコントラクトとは何かを理解する
  • スマートコントラクトの開発に関する基本的なハローワールドの経験は役に立ちますが、スマートで野心的な場合は必要ありません。 (そして私はあなたがそうであることを知っています!)

この記事シリーズ できる スマートコントラクトの最初の紹介として機能しますが、より高度な概念に急速に移行します。初めてのスマートコントラクトチュートリアルの場合は、すぐに高度に登る準備をしてください。あなたが自信を持っていると感じたら、素晴らしいです。そうでない場合は、最初に、より単純な「HelloWorld」タイプのチュートリアルを1つか2つ入手してください。チェックアウト イーサリアムの記事の1つまたは以前 そして クリプトゾンビ 、初心者向け。

警告:スマートコントラクトスペースは非常に新しく、急速に変化します。この記事が書かれたときに新しくなったSolidity構文機能は、これを読んでいる時点で非推奨または廃止されている可能性があります。ゲスバージョンは行き来しているかもしれません。 Solidityは常に新しい言語機能を追加し、古い機能を廃止しています。現在、多くの新機能が開発中です。したがって、必要に応じて、この記事の情報を将来の新しい状況に適合させる準備をしてください。あなたがスマートコントラクト開発の学習に真剣に取り組んでいるなら、私はあなたを信じています。

サンプルアプリの説明

ユースケース:ユーザーはボクシングの試合に賭けます。

  • ユーザーは、賭けることができるボクシングの試合のリストを引き出すことができます。
  • ユーザーは試合を選択し、勝者に賭けることができます。
  • ユーザーは、指定された最小額を超える金額を賭けることができます。
  • ユーザーのピックが負けた場合、ユーザーは賭けの全額を失います。
  • ユーザーのピックが勝った場合、ハウス(契約所有者)が勝ちのわずかな割合を獲得した後、ユーザーは自分の賭けのサイズと試合の敗者に賭けた合計金額に基づいてポットの一部を受け取ります。 。

イーサリアムオラクルとは何ですか?

スマートコントラクトはまだ新しいものです。それらはまだ主流になっておらず、それらがどのように機能するかについての非常に多くの側面がまだ打ち出されて標準化されていません。 「オラクル」のアイデアの背後にある推進力について簡単に説明し、辛抱強く説明します。これについては、後の部分で詳しく説明します。

ブロックチェーン契約のエンジニアリング クライアントサーバーアプリのプログラミングとは異なります。重要な違いの1つは、コントラクトが相互作用するデータがすでにブロックチェーン上にある必要があることです。呼び出しはありません でる ブロックチェーンの。言語でサポートされていないだけでなく、ブロックチェーンパラダイムでもサポートされていません。契約は、イーサリアムベースの通貨の形で賭けを行い、それらを契約に保存し、試合の勝者が宣言されたときに、式に従って正しいウォレットアドレスにリリースすることができます。しかし、契約はどのようにして勝者を知るのでしょうか? RESTAPIなどをクエリすることはできません。すでにブロックチェーンにあるデータのみを使用できます!スマートコントラクトの多くのユースケースで同様の問題が発生します。ブロックチェーン外の世界とやり取りできない限り、それらは深刻に制限されます。

コントラクトがブロックチェーン上のデータとのみ対話できる場合、明らかな解決策は、必要なデータをブロックチェーンに挿入することです。そしてそれがオラクルです。オラクルは別のコントラクトであり、データをブロックチェーンに挿入して、他のコントラクトがデータを消費できるようにします。それは信頼と信頼性についての疑問を提起するかもしれませんが、それがオラクルであるということを今のところ受け入れてください。このシリーズのパート3では、これらのニュアンスについて説明します。この例のユースケースでは、オラクルは、(a)利用可能な一致、および(b)一度決定されたそれらの一致に勝った人に関して、データをブロックチェーンに挿入するコントラクトになります。

イーサリアム開発環境のセットアップ

基本的なセットアップでは、以下をインストールします。

  • ゲス(今のところオプション)
  • トリュフ
  • ガナッシュCLI(オプション)
  • 開発環境(オプション)

この記事には、環境設定の完全なガイドとなるスペースはありませんが、大まかなガイドとして機能します。ただし、特定のOS向けの完全なセットアップガイドはすでにたくさんあり、インターネットには新しいものは必要ないため、問題ありません。だから私はあなたをすぐに道に連れて行き、必要に応じてより多くの詳細を得るためのいくつかのリソースにあなたを向けます。システムの要件とGoogleの指示に従って、要件と前提条件をインストールする準備をしてください。

Oracle契約プロセスの図

Gethのインストール(オプション)

Gethインストールのスクリーンショット フルサイズの画像を表示するにはクリックしてください。

Gethは、EthereumコアソフトウェアであるGo-ethereumです。この演習はまったく必要ありませんが、イーサリアムの開発者になる可能性のある人なら誰でもそれを持っていて、それに精通している必要があります。スマートコントラクトをライブのイーサリアムネットワークに展開する場合は、これが必要になります。

  • http://www.talkcrypto.org/blog/2018/01/23/what-is-geth/
  • https://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-for-Ubuntu
  • https://github.com/ethereum/go-ethereum/wiki/Installation-instructions-for-Windows

Truffleをインストールする

Truffleインストールのスクリーンショット フルサイズの画像を表示するにはクリックしてください。

トリュフは私たちが開発に使用する主なものであり、このガイドの絶対的な要件です。お使いのOSの特定の指示を見つけてそれに従ってTruffleをインストールしてください。以下は、うまくいけばあなたを助けるいくつかのリンクです。

  • https://truffleframework.com/docs/truffle/getting-started/installation
  • https://github.com/trufflesuite/truffle
  • https://truffleframework.com/tutorials/how-to-install-truffle-and-testrpc-on-windows-for-blockchain-development

Ganache CLIのインストール(オプション)

GanacheCLIインストールのスクリーンショット フルサイズの画像を表示するにはクリックしてください。

別のテストツールとして使用するためにGanacheCLIをインストールすることをお勧めしますが、チュートリアルでは実際には使用しません。オプションです。

https://github.com/trufflesuite/ganache-cli

イーサリアム開発環境

このチュートリアル全体を、Notepad ++、gedit、viなどの単純なテキストエディター、または任意のテキストエディターやIDEを使用して実行することは可能です。私は個人的に次の拡張機能を備えたVisualStudioCodeを使用しています。

  • 堅牢性
  • 堅牢性の拡張
  • 素材アイコンテーマ

注:拡張機能は必須ではありません。拡張機能は、コーディング環境を改善するだけです。

コードの設定

プロジェクトの設定

Truffleは、スマートコントラクトをコンパイルしてブロックチェーンに移行するための非常に便利なツールであり、開発およびデバッグユーティリティも提供します。 Truffleと統合するには、いくつかのプロジェクト設定が必要になります。次に、Truffleとディレクトリ構造の両方でプロジェクトのシェルを設定します。ただ座って、今のところロボットで手順に従って、楽しんでください。

オープンソースプログラムのソースコードへの変更を製品に追加することはできません。

すべてのコードを格納するディレクトリを作成します。あれを呼べ oracle-example 。

最終的にプロジェクトは2つのサブプロジェクトで構成されるため、ルートディレクトリ内に2つのサブディレクトリを作成します。ディレクトリを作成します。

  • / oracle-example / client
  • / oracle-example / oracle

これが開発する最初のプロジェクトであるため、クライアントフォルダに移動します。でターミナル(コマンドライン)ウィンドウを開きます / oracle-example / client フォルダ。

コマンドtruffle initを実行します。

作成された多くのファイルの中には truffle-config.js そして truffle.js 。両方は必要ないので削除します truffle-config.js (混乱や混乱を避けるためだけに)。

編集する必要があります truffle.js 、テストのためにトリュフを正しい方向に向けるため。の内容を置き換えます truffle.js 次のように:

module.exports = { networks: { development: { host: 'localhost', port: 8545, network_id: '*' // Match any network id } } };

https://github.com/jrkosinski/oracle-example/tree/part1-step1/client/truffle.js

Truffleinitがというディレクトリを作成したことに注意してください 移行 (( oracle-example / client / migrations )。そのフォルダ内には、 1_initial_migration.js 。

移行ディレクトリに別のファイルを追加し、名前を付けます 2_deploy_contracts.js 、次の内容で:

var BoxingBets = artifacts.require('BoxingBets'); module.exports = function(deployer) { deployer.deploy(BoxingBets); };

https://github.com/jrkosinski/oracle-example/tree/part1-step1/client/migrations/2deploycontracts.js

コードの追加

簡単なセットアップが邪魔にならないので、コーディングを開始する準備が整いました。記事のこの部分はまだ紹介とセットアップであるため、コードをかなりすばやく説明することを忘れないでください。パート2でコードのより詳細な説明を、パート3でアーキテクチャと概念のより詳細な説明を行います。それでも、コードで明らかないくつかのコア概念にすばやく触れます。追いつくために注意深く従ってください。

プロセスのこのステップの完全なコードは、GitHubで入手できます。 https://github.com/jrkosinski/oracle-example/tree/part1-step1

堅実な契約

Solidityの「コントラクト」は、他のオブジェクト指向言語のクラスとほぼ同じです。言語自体は、とりわけGolangやJavaScriptと比較されています。 Solidityの他のいくつかの言語構造(後で例を示します)は、修飾子、ライブラリ、およびインターフェイスです。継承(多重継承を含む)は、コントラクトでサポートされています。 Solidityコントラクトファイルの拡張子は.solです。

Oracleインターフェース

このファイルをプロジェクトに追加します。 /oracle-example/client/contracts/OracleInterface.sol

https://github.com/jrkosinski/oracle-example/tree/part1-step1/client/contracts/OracleInterface.sol

オラクルインターフェースのスクリーンショット フルサイズの画像を表示するにはクリックしてください。

通常、オラクルのインターフェースはまさにそれ、つまりインターフェースです。この最初のイテレーションでは、今のところプレースホルダーとして、Solidityプロジェクトに含まれている単純なクラスです。 Truffleでコントラクトを正常にコンパイルして実行した後、次のステップで移動します。後でこれを実際のインターフェイスに変換すると、関数の実装は空になります。

クライアント契約

このファイルをプロジェクトに追加します。 /oracle-example/client/contracts/BoxingBets.sol

国境税調整とは

https://github.com/jrkosinski/oracle-example/tree/part1-step1/client/contracts/BoxingBets.sol

これはボクシングの試合データを消費し、ユーザーが利用可能な試合を照会し、それらに賭けることを可能にする契約です。後の反復では、賞金を計算して支払います。

コンパイルと実行

今こそ、最初にすべてが正しく行われたかどうかを確認するときです。

契約のコンパイルと移行

でターミナルを開きます / oracle-example / client / フォルダ

次のコマンドでコードをコンパイルします。

truffle compile 契約のコンパイルと移行の2番目のスクリーンショット フルサイズの画像を表示するにはクリックしてください。 イーサリアムオラクル契約プロセスの図 フルサイズの画像を表示するにはクリックしてください。

別の方法:recompile.shシェルスクリプトを使用します( https://github.com/jrkosinski/oracle-example/tree/part1-step1/client/recompile.sh )。

コードがまだ最終的な形になっていないため、多くの警告が表示されることに注意してください。

Truffle開発コンソールを開きます。

truffle develop

次に、Truffle開発者コンソールで、テストネットワークに移行します。

truffle(develop)> migrate

契約を実行する

開発コンソールのプロンプトで、次のコード行を入力します。

truffle(develop)> BoxingBets.deployed().then(inst => { instance = inst })

現在、「インスタンス」はBoxingBetsコントラクトを参照する変数であり、そのパブリックメソッドを呼び出すために使用できます。

次のコマンドを使用してテストします。

truffle(develop)> instance.test(3, 4)

パブリック「テスト」機能が含まれていることに注意してください BoxingBets.sol 。コントラクトがコードを実行していること、およびTruffle開発コンソールから呼び出すことができることを示すために、渡した2つの数値を合計します。正気に見える応答(以下を参照)が得られれば、ここでの作業は完了です(少なくとも今のところ)。

イーサリアムオラクルを分離する

これまでにすべてが成功した場合、私たちはこぶを超えています。次に行うことは、oracleコントラクトをBoxingBetsコントラクトから分離することです。実際の使用では、オラクルのコントラクトはブロックチェーン上のクライアントコントラクトとは別に存在するため、次のことができる必要があります。

  • ブロックチェーンアドレスでインスタンス化します。
  • クライアントコントラクトがオラクルを参照するために使用するオラクルアドレスを動的に変更します。

つまり、これから行うことは、オラクルとクライアントを2つの別々のブロックチェーンコントラクトエンティティに分離し、それらを相互に通信させることです。クライアントは、アドレスによってオラクルをインスタンス化し、それを呼び出します。

githubフローとgitフロー

クライアント契約

まず、具体的なクラスではなく、オラクルへの動的インターフェースを参照するように、クライアントコントラクト(クライアント)を変更します。次に、外部契約からオラクルをインスタンス化することを確認します。

に入る /oracle-example/client/contracts/OracleInterface.sol 。前に述べたように、これは現在インターフェースではありませんが、これからインターフェースにします。そこにあるものを次の内容に置き換えます。

https://github.com/jrkosinski/oracle-example/tree/part1-step2/client/contracts/OracleInterface.sol

pragma solidity ^0.4.17; contract OracleInterface { enum MatchOutcome { Pending, //match has not been fought to decision Underway, //match has started & is underway Draw, //anything other than a clear winner (e.g. cancelled) Decided //index of participant who is the winner } function getPendingMatches() public view returns (bytes32[]); function getAllMatches() public view returns (bytes32[]); function matchExists(bytes32 _matchId) public view returns (bool); function getMatch(bytes32 _matchId) public view returns ( bytes32 id, string name, string participants, uint8 participantCount, uint date, MatchOutcome outcome, int8 winner); function getMostRecentMatch(bool _pending) public view returns ( bytes32 id, string name, string participants, uint participantCount, uint date, MatchOutcome outcome, int8 winner); function testConnection() public pure returns (bool); function addTestData() public; }

に BoxingBets.sol 、次の行を置き換えます。

OracleInterface internal boxingOracle = new OracleInterface();

これらの2行で:

address internal boxingOracleAddr = 0; OracleInterface internal boxingOracle = OracleInterface(boxingOracleAddr);

ここで必要なのは、オラクルのアドレスを動的に設定する方法と、現在のオラクルアドレスを見つけるために呼び出すことができる関数です。これらの2つの関数をに追加します BoxingBets.sol :

/// @notice sets the address of the boxing oracle contract to use /// @dev setting a wrong address may result in false return value, or error /// @param _oracleAddress the address of the boxing oracle /// @return true if connection to the new oracle address was successful function setOracleAddress(address _oracleAddress) external onlyOwner returns (bool) { boxingOracleAddr = _oracleAddress; boxingOracle = OracleInterface(boxingOracleAddr); return boxingOracle.testConnection(); } /// @notice gets the address of the boxing oracle being used /// @return the address of the currently set oracle function getOracleAddress() external view returns (address) { return boxingOracleAddr; }

そして最後に、クライアントとオラクルの間の接続をテストするために、 テスト Oracle接続をテストする関数を備えたBoxingBetsの関数:

/// @notice for testing; tests that the boxing oracle is callable /// @return true if connection successful function testOracleConnection() public view returns (bool) { return boxingOracle.testConnection(); }

所有可能

setOracleAddressの定義に注意してくださいonlyOwnerがありますそれに続く修飾子。これにより、関数がパブリックであっても、この関数がコントラクトの所有者以外から呼び出されることは制限されます。それは言語機能ではありません。これは、OpenZeppelinの一般ユーティリティSolidity契約のライブラリから削除されたOwnable契約によって提供されます。その詳細についてはパート2で説明しますが、その使用を容易にするためにonlyOwner修飾子、いくつかの変更を加える必要があります:

コピー Ownable.sol から https://github.com/jrkosinski/oracle-example/tree/part1-step2/client/contracts/Ownable.sol に / oracle-example / client / Contracts / 。

上部に参照を追加します BoxingBets.sol 、 そのようです:

import './Ownable.sol';

(インポートする行のすぐ下に追加できます OracleInterface.sol 。)

BoxingBetsのコントラクト宣言を変更して、Ownableから継承するようにします。

contract BoxingBets {

これに:

contract BoxingBets is Ownable {

そして、私たちはすべて準備ができているはずです。あなたが迷子になった場合に備えて、完全なコードはここにあります: https://github.com/jrkosinski/oracle-example/tree/part1-step2/client/contracts

Oracle契約

セットアップ

BoxingBetsコントラクトがアドレスによって完全に別個のコントラクト(つまり、オラクル)を参照しようとしているので、次の仕事はそのオラクルコントラクトを作成することです。そこで、オラクルコントラクトを含むまったく別のプロジェクトを作成します。これは基本的に、クライアント契約プロジェクトに対してすでに行った設定と同じです。つまり、コンパイルと開発のためにTruffleをセットアップします。

あなたはすでにというフォルダを持っているはずです / oracle-example / oracle / これは前の手順で作成しました(そうでない場合は、先に進んで空のディレクトリを作成してください)。そのディレクトリでターミナルを開きます。

  • コマンドtruffle initを実行します。
  • 削除 /oracle-example/oracle/truffle-config.js 。
  • 編集 /oracle-example/oracle/truffle.js そのようです:
module.exports = { networks: { development: { host: 'localhost', port: 8545, network_id: '*' // Match any network id } } };

ここの例を参照してください: https://github.com/jrkosinski/oracle-example/tree/part1-step2/oracle/truffle.js

内部 / oracle-example / oracle / migrations / 、というファイルを作成します 2_deploy_contracts.js 、次の内容で:

var BoxingOracle = artifacts.require('BoxingOracle'); module.exports = function(deployer) { deployer.deploy(BoxingOracle); };

ここの例を参照してください: https://github.com/jrkosinski/oracle-example/tree/part1-step2/oracle/migrations/2_deploy_contracts.js

Oracleコード

この手順では、次の3つのファイルをからコピーするだけです。 https://github.com/jrkosinski/oracle-example/tree/part1-step2/oracle/contracts/ あなたの/oracle-example/oracle/contracts/にフォルダ:

  • BoxingOracle.sol: 主なオラクル契約。
  • Ownable.sol: すでにクライアント契約で使用した、所有者のみの機能の場合。
  • DateLib.sol: 日付ライブラリ。このシリーズのパート2でさらに詳しく見ていきます。

Oracleのテスト

さて、プロジェクトの現在の反復では、スマートコントラクトオラクルを徹底的にテストする必要があります。これは、プロジェクトの残りの部分を構築するためのベースになるためです。したがって、oracleプロジェクトを設定してコードをコピーしたので、次のことを行います。

  • オラクルをコンパイルします。
  • オラクルが実行されていることを確認してください。
  • Truffleコンソールでいくつかの関数を実行して、オラクルが期待どおりに機能していることを確認します。

オラクルのコンパイルと移行

/oracle-example/oracle/に開いているターミナルで、次のコマンドを実行します。繰り返しますが、これらの手順は、クライアント契約をコンパイルして移行するためにすでに行った手順と同じです。

truffle compile

別の方法:recompile.shシェルスクリプトを使用します( https://github.com/jrkosinski/oracle-example/tree/part1-step2/oracle/recompile.sh )。

awsソリューションアーキテクト学習ガイド

Truffle開発コンソールを開きます。

truffle develop

テストネットワークに移行します。

truffle(develop)> migrate

Oracleを実行してテストする

引き続きTruffle開発コンソールで、これを入力して、Oracleコントラクトへの使用可能なポインターをキャプチャします。

truffle(develop)> BoxingOracle.deployed().then(inst => { instance = inst })

これで、Oracleコントラクトに対して一連のテストを実行してテストできます(実行する必要があります)。次のコマンドを順番に実行して、結果を確認してください。

truffle(develop)> instance.testConnection() ... truffle(develop)> instance.getAllMatches() ... truffle(develop)> instance.addTestData() ... truffle(develop)> instance.getAllMatches() ...

この時点で、oracleコードを調べ、使用可能なパブリックメソッドを確認し、コード内のコメントを読んで、実行する独自のテストをいくつか考え出すことをお勧めします(そして、ここでコンソールで実行します。上に示しました)。

テストとデバッグ

これで、最終テストの準備が整いました。クライアントコントラクトがすでにブロックチェーン上にあるオラクルコントラクトを呼び出し、そのデータを取得して使用できることをテストします。これらすべてが機能する場合は、さらに実験するために使用できるクライアントとオラクルのペアがあります。エンドツーエンドテストを実行するための手順:

  • オラクルコントラクトをコンパイルして実行します
  • クライアント契約をコンパイルして実行する
  • オラクル契約のアドレスを取得します
  • クライアント契約でOracleアドレスを設定します
  • オラクル契約にテストデータを追加する
  • クライアント契約でそのデータを取得できることをテストします

2つのターミナルウィンドウを開きます。

  • 1つ / oracle-example / client /
  • そして他の / oracle-example / oracle /

私はあなたが保つことをお勧めします / oracle-example / client / 1つは左側に開いており、 / oracle-example / oracle / 1つは右側に開いており、混乱を避けるために注意深く進んでください。

Oracleコントラクトをコンパイルして実行します

で次のコマンドを実行します / oracle-example / oracle / ターミナル:

bash recompile.sh truffle develop truffle(develop)> migrate truffle(develop)> BoxingOracle.deployed().then(inst => { instance = inst })

クライアント契約をコンパイルして実行する

で次のコマンドを実行します / oracle-example / client / ターミナル:

bash recompile.sh truffle develop truffle(develop)> migrate truffle(develop)> BoxingBets.deployed().then(inst => { instance = inst })

Oracle契約のアドレスを取得する

次のコマンドを実行して、 / oracle-example / oracle / ターミナル:

truffle(develop)> instance.getAddress()

この呼び出しからの出力であるアドレスをコピーします。次のステップで使用します。

アジャイルソフトウェア開発のドキュメント

クライアント契約でOracleアドレスを設定する

次のコマンドを実行して、 / oracle-example / client / ターミナル:

truffle(develop)> instance.setOracleAddress('')

そしてそれをテストします:

truffle(develop)> instance.testOracleConnection()

出力がtrueの場合は、問題ありません。

クライアント契約でそのデータを取得できることをテストします

次のコマンドを実行して、 / oracle-example / client / ターミナル:

truffle(develop)> instance.getBettableMatches()

オラクル側にテストデータがまだ追加されていないため、空の配列が返されるはずです。

次のコマンドを実行して、 / oracle-example / oracle / テストデータを追加する端末:

truffle(develop)> instance.addTestData()

次のコマンドを実行して、 / oracle-example / client / ターミナル、クライアントから新しく追加されたテストデータを取得できるかどうかを確認します。

truffle(develop)> instance.getBettableMatches()

ここで、getBettableMatches()によって返された配列から個々のアドレスを取得し、それらをgetMatch()に接続するとします。

この時点で、クライアントコードを調べ、使用可能なパブリックメソッドを確認し、コード内のコメントを読んで、実行する独自のテストをいくつか考え出すことをお勧めします(そして、ここでコンソールで実行します。上記)。

パート1の結論

この演習の結果は限られていますが、現実的なペースを維持するための目標も限られています。私たちのクライアントはまだ賭けをしたり、資金を処理したり、賞金を分割したりする能力を持っていません。私たちが持っているのは、知識と経験を除いて、次のとおりです。

  • 主に機能的なスマートコントラクトオラクル
  • オラクルに接続して対話できるクライアント
  • さらなる開発と学習のためのフレームワーク

そして、それは短い記事としてはそれほど悪くはありません。

に このシリーズのパート2 、コードをさらに深く掘り下げて、スマートコントラクト開発に固有の機能のいくつかと、Solidityに固有の言語機能のいくつかを見ていきます。この部分で説明したばかりのことの多くは、次で説明します。

に このシリーズのパート3 、特にオラクルでの使用に関連して、スマートコントラクトの哲学と設計について少し説明します。

その他のオプションの手順

単独実験は学ぶのに良い方法です。このチュートリアルを拡張して知識を深める方法を考えている場合は、いくつかの簡単な提案を次に示します(以下のいずれもパート2および3では取り上げません)。

  • コントラクトをGanache(以前のtestrpc)にデプロイし、同じテストを実行して機能を検証します。
  • コントラクトをropstenまたはrinkebyテストネットにデプロイし、同じテストを実行して機能を検証します。
  • オラクルまたはクライアント(あるいはその両方)のweb3jsフロントエンドを構築します。

幸運を祈ります。ご不明な点がございましたら、お気軽にお問い合わせください。必ずしも迅速な返信を保証することはできませんが、最善を尽くします。

基本を理解する

イーサリアムはどのプログラミング言語を使用していますか?

イーサリアム開発で使用されるプログラミング言語はSolidityです。これは、JavaScript、Python、およびC ++に触発された契約指向のプログラミング言語です。

ブロックチェーンのオラクルとは何ですか?

いわゆる* blockchain oracle *は、スマートコントラクトで使用されるさまざまな状態と発生に関する情報を提供する信頼できるデータソースです。

スマートコントラクトオラクルは何に使用されますか?

スマートコントラクトオラクルは、実際のイベントとデジタルコントラクトの間のリンクを提供するために使用されます。オラクルによって提供されるこの外部データは、スマートコントラクトの実行をトリガーする場合とトリガーしない場合があります。

モバイルエクスペリエンスのためのeコマースUX

Uxデザイン

モバイルエクスペリエンスのためのeコマースUX
ReactコンポーネントがUIテストを容易にする方法

ReactコンポーネントがUIテストを容易にする方法

技術

人気の投稿
正しい方法でアプリビジネスを始める
正しい方法でアプリビジネスを始める
カードの並べ替え:ユーザーのメンタルモデルに合わせた情報アーキテクチャの改善
カードの並べ替え:ユーザーのメンタルモデルに合わせた情報アーキテクチャの改善
PeerJSでWebRTCを使いこなす:シンプルなP2PWebゲームの作成
PeerJSでWebRTCを使いこなす:シンプルなP2PWebゲームの作成
落ち着いて新しい開発チームに移行する
落ち着いて新しい開発チームに移行する
HorusLPを使用した最適化アルゴリズムの設計
HorusLPを使用した最適化アルゴリズムの設計
 
誰が、何を、そしてなぜ–ユーザーテスト方法のガイド
誰が、何を、そしてなぜ–ユーザーテスト方法のガイド
WebVRとブラウザエッジコンピューティング革命
WebVRとブラウザエッジコンピューティング革命
Laravelゼロダウンタイム展開
Laravelゼロダウンタイム展開
現代のCFOの役割と責任–移行期の機能
現代のCFOの役割と責任–移行期の機能
ApeeScapeでの製品管理:リモートで成功するための戦略
ApeeScapeでの製品管理:リモートで成功するための戦略
人気の投稿
  • プログラミング言語の作成方法
  • 組織のゲシュタルト原則を彼らのイラストと一致させます。
  • 複合現実と仮想現実
  • gulp vs grunt vs webpack
  • ソリューションを使用した資本予算の例
  • フラッシュ開発者とフラッシュアニメーター
カテゴリー
計画と予測 Uxデザイン ヒントとツール 人とチーム 設計プロセス デザイナーライフ 革新 分散チーム プロセスとツール エンジニアリング管理

© 2021 | 全著作権所有

apeescape2.com