イーサリアムオラクル契約:セットアップとオリエンテーション
公開: 2022-03-11イーサリアムスマートコントラクトは、単なる「新しいホットなもの」ではありません。 彼ら(または関連する何か)は、インターネットの次の新しい時代に人間が互いにビジネスを行う方法を変える準備ができていると私は信じています。 それが事実かどうかは時が経てばわかるでしょう。
これは、Solidityを使用したEthereumスマートコントラクト開発に関する3部構成の記事の最初の記事であり、特に「オラクル」と呼ばれるコントラクトの使用について説明しています。これは基本的に、他のスマートコントラクトで使用するためにデータをブロックチェーンに送り込むコントラクトです。
- パート1:Truffleを使用した開発の概要、およびさらなる実験のためのプロジェクトのセットアップ
- パート2:より深い調査のためにコードを掘り下げる
- パート3:スマートコントラクトを使用したオラクルの概念的な議論
シリーズのパート1であるこの目標は、オラクル契約の概念、その背後にある哲学、またはそれらが何であるかを深く理解することではありません。 イーサリアムオラクルチュートリアルのこの部分の目標は、単に次のことです。
- Truffleとのスマートコントラクトの構築を準備しましょう。
- パート2とパート3で役立つスマートコントラクトプロジェクトを構築します。
- イーサリアムのスマートコントラクトとスマートコントラクトのコーディングに関連するいくつかの概念を紹介します。
- Truffleとスマートコントラクトを使用してコンパイル/実行/デバッグサイクルを導入します。
定義:オラクル。 スマートコントラクトがブロックチェーン外の世界からのデータにアクセスするための手段。 オラクルはそれ自体がスマートコントラクトの一種であり、外部からデータを取得してブロックチェーンに入れ、他のスマートコントラクトが消費できるようにします。
この記事の最初の部分は、すべての前提条件を設定することで構成されます。 次に、単一のイーサリアムコントラクトを設定し、Truffleでテストします。 最後に、オラクルをクライアントから分離し、それらを共同でテストします。
ソフトウェア要件
- 主要なOSはどれでも動作しますが、インストールとセットアップの一部はもちろんシステムによって異なります。 私はこれらすべてをUbuntuLinux(16.04)で実行しました。 また、Windowsでの環境設定にも問題はありませんでした。 私はMacを試したことがありませんが、Macでも試すのが一般的であることは承知しています。
- 完全なethノードを実行する必要はありません。 独自のテストネットが付属しているTruffleを使用します。 自分が何をしているかについて少し知っている場合は、他の任意のテストネットを使用できます。 Truffleのローカル開発テストネットは、このチュートリアルの目的にとって最も簡単でアクセスしやすいものです。
知識要件
- ブロックチェーンの仕組みに関する基本的な知識
- ブロックチェーンベースのスマートコントラクトとは何かを理解する
- スマートコントラクト開発に関する基本的なハローワールドの経験は役に立ちますが、スマートで野心的な場合は必要ありません。 (そして私はあなたがそうであることを知っています!)
この一連の記事は、スマートコントラクトの最初の紹介として役立ちますが、より高度な概念に急速に移行します。 それが初めてのスマートコントラクトチュートリアルである場合は、すぐに高度に登る準備をしてください。 あなたが自信を持っていると感じたら、素晴らしいです。 そうでない場合は、最初に、より単純な「HelloWorld」タイプのチュートリアルを1つか2つ入手してください。 手始めに、以前のイーサリアムの記事とクリプトゾンビのいずれかをチェックしてください。
警告:スマートコントラクトスペースは非常に新しく、急速に変化します。 この記事が書かれたときに新しくなったSolidity構文機能は、これを読んでいる時点で非推奨または廃止されている可能性があります。 Gethバージョンが出入りしている可能性があります。 Solidityは常に新しい言語機能を追加し、古い機能を廃止しています。 現在、多くの新機能が開発中です。 したがって、必要に応じて、この記事の情報を将来の新しい状況に適合させる準備をしてください。 あなたがスマートコントラクトの開発を真剣に学ぶことを真剣に考えているなら、私はあなたを信じています。
サンプルアプリの説明
ユースケース:ユーザーはボクシングの試合に賭けます。
- ユーザーは、賭けることができるボクシングの試合のリストを引き出すことができます。
- ユーザーは試合を選択し、勝者に賭けることができます。
- ユーザーは、指定された最小額を超える金額を賭けることができます。
- ユーザーのピックが負けた場合、ユーザーはベットの全額を失います。
- ユーザーのピックが勝った場合、ハウス(契約所有者)が勝ちのわずかな割合を獲得した後、ユーザーは自分の賭けのサイズと試合の敗者に賭けた合計金額に基づいてポットの一部を受け取ります。 。
イーサリアムオラクルとは何ですか?
スマートコントラクトはまだ新しいものです。 それらはまだ主流になっておらず、それらがどのように機能するかについての非常に多くの側面がまだ打ち出されておらず、標準化されていません。 「オラクル」のアイデアの背後にある推進力について簡単に説明し、辛抱強く説明します。 これについては、後の部分で詳しく説明します。
ブロックチェーンコントラクトのエンジニアリングは、クライアントサーバーアプリのプログラミングとは異なります。 重要な違いの1つは、コントラクトが相互作用するデータがすでにブロックチェーン上にある必要があることです。 ブロックチェーンからの呼び出しはありません。 言語でサポートされていないだけでなく、ブロックチェーンパラダイムでもサポートされていません。 契約は、イーサリアムベースの通貨の形で賭けを行い、それらを契約に保存し、試合の勝者が宣言されたときに、式に従って正しいウォレットアドレスにリリースすることができます。 しかし、契約はどのようにして勝者を知るのでしょうか? RESTAPIなどをクエリすることはできません。 すでにブロックチェーンにあるデータのみを使用できます! スマートコントラクトの多くのユースケースで同様の問題が発生します。ブロックチェーン外の世界とやり取りできない限り、それらは深刻に制限されます。
コントラクトがブロックチェーン上のデータとのみ対話できる場合、明らかな解決策は、必要なデータをブロックチェーンに注入することです。 そして、それがオラクルです。 オラクルは別のコントラクトであり、データをブロックチェーンに挿入して、他のコントラクトがデータを消費できるようにします。 それは信頼と無信頼についての疑問を提起するかもしれませんが、それがオラクルであるということを今のところ受け入れてください。 このシリーズのパート3では、これらのニュアンスについて説明します。 このユースケースの例では、オラクルは、(a)利用可能な一致と、(b)一度決定されたそれらの一致に勝った人に関して、データをブロックチェーンに挿入するコントラクトになります。
イーサリアム開発環境のセットアップ
基本的なセットアップとして、以下をインストールします。
- ゲス(今のところオプション)
- トリュフ
- Ganache CLI(オプション)
- 開発環境(オプション)
この記事には、環境設定の完全なガイドとなるスペースはありませんが、大まかなガイドとして機能します。 ただし、特定のOS用のより完全なセットアップガイドがすでにたくさんあり、インターネットは実際には新しいものを必要としないため、それは問題ありません。 それで、私はあなたをすぐに道に連れて行き、必要に応じてより多くの詳細を得るためにいくつかのリソースにあなたを向けます。 システムの要件とGoogleの指示に従って、要件と前提条件をインストールする準備をしてください。
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をインストールする

トリュフは私たちが開発に使用する主なものであり、絶対にこのガイドの要件です。 お使いの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をインストールすることをお勧めします。 オプションです。
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を正しい方向に向けるために、 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
Truffle initは、 migrations ( 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
コードの追加
簡単なセットアップが邪魔にならないので、コーディングを開始する準備が整いました。 記事のこの部分はまだ紹介とセットアップであるため、コードをかなり迅速に説明することを忘れないでください。 パート2でコードのより詳細な説明を、パート3でアーキテクチャと概念のより詳細な説明を行います。それでも、コードで明らかないくつかのコア概念にすばやく触れます。 追いつくために注意深く従ってください。
プロセスのこのステップの完全なコードは、GitHubで入手できます:https://github.com/jrkosinski/oracle-example/tree/part1-step1
Solidityの契約
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


別の方法: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つの別個のブロックチェーンコントラクトエンティティに分離し、それらを相互に通信させることです。 クライアントは、アドレスによってオラクルをインスタンス化し、それを呼び出します。
クライアント契約
まず、クライアントコントラクト(client)を変更して、具象クラスではなくOracleへの動的インターフェイスを参照するようにします。 次に、外部契約からオラクルをインスタンス化することを確認します。
/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 (eg 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; }
そして最後に、クライアントとオラクルの間の接続をテストするために、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コントラクトがアドレスによって完全に別個のコントラクト(つまり、オラクル)を参照しようとしているので、次の仕事はそのオラクルコントラクトを作成することです。 そこで、Oracleコントラクトを含むまったく別のプロジェクトを作成します。 これは基本的に、クライアント契約プロジェクトに対してすでに行った設定と同じです。 つまり、コンパイルと開発のために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:主要なOracleコントラクト。
- Ownable.sol:すでにクライアント契約で使用した、所有者のみの関数用。
- DateLib.sol:日付ライブラリ。 このシリーズのパート2では、これについてさらに詳しく見ていきます。
Oracleのテスト
さて、プロジェクトの現在のイテレーションでは、スマートコントラクトオラクルを徹底的にテストする必要があります。これは、プロジェクトの残りの部分を構築するためのベースになるためです。 したがって、oracleプロジェクトを設定してコードをコピーしたので、次のことを行います。
- オラクルをコンパイルします。
- オラクルが実行されていることを確認してください。
- Truffleコンソールでいくつかの関数を実行して、オラクルが期待どおりに機能していることを確認します。
Oracleのコンパイルと移行
まだ/oracle-example/oracle/
を開いているターミナルで、次のコマンドを実行します。 繰り返しになりますが、これらの手順は、クライアントコントラクトをコンパイルおよび移行するためにすでに行った手順と同じです。
truffle compile
別の方法:recompile.shシェルスクリプト(https://github.com/jrkosinski/oracle-example/tree/part1-step2/oracle/recompile.sh)を使用します。
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コントラクトを呼び出し、そのデータを取得して使用できることをテストします。 これらすべてが機能する場合は、クライアントとOracleのペアがあり、これを使用してさらに実験を行うことができます。 エンドツーエンドテストを実行するための手順:
- Oracleコントラクトをコンパイルして実行します
- クライアント契約をコンパイルして実行します
- オラクル契約のアドレスを取得します
- クライアント契約でOracleアドレスを設定します
- オラクル契約にテストデータを追加する
- クライアント契約でそのデータを取得できることをテストします
2つのターミナルウィンドウを開きます。
- / oracle-example /client/に1つ
- そしてもう1つは/oracle-example/oracle/にあります
/ oracle-example / client /を左側に開いたままにし、 / oracle-example / oracle /を右側に開いたままにして、混乱を避けるために注意深く従うことをお勧めします。
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を実行するには、次のコマンドを実行します。
truffle(develop)> instance.getAddress()
この呼び出しからの出力であるアドレスをコピーします。 次のステップで使用します。
クライアント契約でOracleアドレスを設定する
次のコマンドを実行して、 / oracle-example /client/ターミナルでトリュフします。
truffle(develop)> instance.setOracleAddress('<insert address here, single quotes included>')
そしてそれをテストします:
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フロントエンドを構築します。
幸運を祈ります。ご不明な点がございましたら、お気軽にお問い合わせください。 必ずしも迅速な返信を保証することはできませんが、最善を尽くします。