本文へスキップ
このページは英語からの機械翻訳を使用しており、誤りや不明瞭な表現が含まれている可能性があります。最も正確な情報については、オリジナルの英語版をご覧ください。頻繁な更新のため、一部のコンテンツはオリジナルの英語になっている可能性があります。Crowdinでの取り組みに参加して、このページの翻訳改善にご協力ください。 (Crowdin translation page, Contributing guide)

Orakl Network

はじめに

Orakl Networkは、スマートコントラクトがオフチェーンのデータやその他のリソースに安全にアクセスできるようにする分散型オラクルネットワークである。 データフィード](https://docs.orakl.network/developers-guide/data-feed)、[VRF](https://docs.orakl.network/developers-guide/vrf)、[リクエスト・レスポンス](https://docs.orakl.network/developers-guide/request-response)、[プルーフ・オブ・リザーブ](https://docs.orakl.network/developers-guide/proof-of-reserve)のソリューションを提供するネイティブ・トークン・オラクルであることを誇りとしている。

Orakl Networkを使えば、ユーザーはスマートコントラクトに予測不可能で偏りのないランダム性を供給することができる。 Orakl Networkを使えば、ユーザーはスマートコントラクトに予測不可能で偏りのないランダム性を供給することができる。 Orakl Network Verifiable Random Function (VRF)は、スマートコントラクトが検証可能なランダム値を生成することを可能にし、ランダム性を必要とする様々なdAppsで使用することができる。 オラクルネットワークは、2つの異なるアカウントタイプを通じて、開発者にVRFサービスへのアクセスを提供します:恒久アカウントまたは一時アカウントです。 Orakl Networkは、2つの異なるアカウントタイプを通じて、開発者にVRFサービスへのアクセスを提供します:恒久アカウントまたは一時アカウントです。

このチュートリアルでは、Orakl NetworkのVRF機能を利用して、スマート・コントラクトの内部からランダムな単語をリクエストします。

前提条件

はじめに

以下のステップでは、Orakl Networkを使ってスマート・コントラクトにランダムな単語を要求する。 始めよう! 始めよう!

ステップ1:契約状態変数の初期化

このステップでは、Cosumerコントラクトを定義し、コントラクト機能に必要なステート変数を初期化する。 私たちのコンシューマ契約は VRFConsumerBase 契約に依存しており、この契約は VRFCoordinator 契約への呼び出しに使用される IVRFCoordinator インターフェースに継承されています。 次に、ランダムワードの結果を格納する変数 sRandomWord と、修飾子 onlyOwner の内部で使用する変数 sOwner を定義する。


pragma solidity ^0.8.16;
import { VRFConsumerBase } from "@bisonai/orakl-contracts/src/v0.1/VRFConsumerBase.sol";
import { IVRFCoordinator } from "@bisonai/orakl-contracts/src/v0.1/interfaces/IVRFCoordinator.sol";
contract VRFConsumer is VRFConsumerBase {
uint256 public sRandomWord;
address private sOwner;
error OnlyOwner(address notOwner);
modifier onlyOwner() {
if (msg.sender != sOwner) {
revert OnlyOwner(msg.sender);
}
_;
}

ステップ 2:VRF コーディネーターの初期化

スマートコントラクトでランダムな単語を要求するには、VRFCoordinator スマートコントラクトを初期化する必要がある。 VRFCoordinator インターフェースは、コンストラクタのパラメータで VRFCoordinator のアドレスを指定して結合し、ランダムワードのリクエスト (requestRandomWords) に使用することを推奨する。 VRFCoordinatorコントラクトはKaia Kairos 0xDA8c0A00A372503aa6EC80f9b29Cc97C454bE499とKaia Mainnet 0x3F247f70DC083A2907B8E76635986fd09AA80EFbの両方に配備されている。 VRFCoordinator インターフェースは、コンストラクタのパラメータで VRFCoordinator のアドレスを指定して結合し、ランダムワードのリクエスト (requestRandomWords) に使用することを推奨する。 VRFCoordinatorコントラクトはKaia Kairos 0xDA8c0A00A372503aa6EC80f9b29Cc97C454bE499とKaia Mainnet 0x3F247f70DC083A2907B8E76635986fd09AA80EFbの両方に配備されている。


IVRFCoordinator COORDINATOR;
constructor(address coordinator) VRFConsumerBase(coordinator) {
COORDINATOR = IVRFCoordinator(coordinator);
sOwner = msg.sender;
}

ステップ 3: 一時的なアカウントでランダムワードをリクエストする

一時的なアカウントでランダムな単語をリクエストするには、ユーザーはvalueプロパティを使用したコールとともに $KAIA。


function requestRandomWordsDirect(
bytes32 keyHash,
uint32 callbackGasLimit,
uint32 numWords,
address refundRecipient
)
public
payable
onlyOwner
returns (uint256 requestId)
{
requestId = COORDINATOR.requestRandomWords{value: msg.value}(
keyHash,
callbackGasLimit,
numWords,
refundRecipient
);
}

この関数は COORDINATOR で定義された関数 requestRandomWords() を呼び出し、引数として keyHashcallbackGasLimitnumWords および refundRecipient を渡す。 サービスに対する支払いは msg.value を通して COORDINATOR 契約の requestRandomWords() に送られる。 もし支払いが予定より多かった場合、超過分の支払いは refundRecipient アドレスに返される。 最終的には、ランダムな単語のリクエストを生成する。 requestRandomWords関数のmsg.valueを正確に指定するには、サービス料金の見積もり方法の説明を参照してください。 サービスに対する支払いは msg.value を通して COORDINATOR 契約の requestRandomWords() に送られる。 もし支払いが予定より多かった場合、超過分の支払いは refundRecipient アドレスに返される。 最終的には、ランダムな単語のリクエストを生成する。 requestRandomWords関数のmsg.valueを正確に指定するには、サービス料金の見積もり方法の説明を参照してください。

ステップ4:ランダムな言葉を満たす

fulfillRandomWords関数は、VRFCoordinatorコントラクトがランダムワードの要求を満たすときに呼び出される。


function fulfillRandomWords(
uint256 /* requestId */,
uint256[] memory randomWords
)
internal
override
{
// requestId should be checked if it matches the expected request
// Generate random value between 1 and 50.
sRandomWord = (randomWords[0] % 50) + 1;
}

それでは、Orakl VRFソリューションのコードを手に入れたので、実際に使ってみましょう。

実践的な実施

下の例では、ランダムな単語を要求し、その成就を受け取ることができる契約になっている。

サンプルコードの作成とデプロイ

Remix IDE

  • Remix IDE](https://remix.ethereum.org/)に移動します。
  • ファイルエクスプローラー**タブをクリックし、contractsフォルダにconsumer-vrf.solという名前のファイルを新規作成する。
  • 新しく作成したファイルに以下のコードを貼り付けます。
  • Remixで、Compile contractをクリックします。
  • プラグインをインストールしたら、左側の「Kaia」タブをクリックします。
  • Environment > Injected Provider - Kaia Wallet を選択します。
  • Contractで、契約を選択します。 例えば、VRFConsumerである。
  • コーディネーター契約アドレス 0xDA8c0A00A372503aa6EC80f9b29Cc97C454bE499 (Kairos), 0x3F247f70DC083A2907B8E76635986fd09AA80EFb (Mainnet) を渡す。
  • Deployをクリックします。

サンプルコード


// SPDX-License-Identifier: MIT
pragma solidity ^0.8.16;
import {VRFConsumerBase} from "@bisonai/orakl-contracts/src/v0.1/VRFConsumerBase.sol";
import {IVRFCoordinator} from "@bisonai/orakl-contracts/src/v0.1/interfaces/IVRFCoordinator.sol";
contract VRFConsumer is VRFConsumerBase {
uint256 public sRandomWord;
address private sOwner;
IVRFCoordinator COORDINATOR;
error OnlyOwner(address notOwner);
modifier onlyOwner() {
if (msg.sender != sOwner) {
revert OnlyOwner(msg.sender);
}
_;
}
constructor(address coordinator) VRFConsumerBase(coordinator) {
sOwner = msg.sender;
COORDINATOR = IVRFCoordinator(coordinator);
}
function requestRandomWordsDirect(
bytes32 keyHash,
uint32 callbackGasLimit,
uint32 numWords,
address refundRecipient
) public payable onlyOwner returns (uint256 requestId) {
requestId = COORDINATOR.requestRandomWords{value: msg.value}(
keyHash,
callbackGasLimit,
numWords,
refundRecipient
);
}
function fulfillRandomWords(
uint256 /* requestId */,
uint256[] memory randomWords
) internal override {
// requestId should be checked if it matches the expected request
// Generate random value between 1 and 50.
sRandomWord = (randomWords[0] % 50) + 1;
}
}

スマートコントラクトとの対話

はじめに この関数が正常に実行されるためには、ユーザは前述のようにKAIAを送信し(最低1KAIA)、 keyHashcallbackGasLimitnumWordsrefundRecipientパラメータを与える必要がある。 keyHashパラメータは、誰がリクエストを処理できるかを一意に定義する。 Orakl Network VRFは、Kaiaチェーンごとに1つのキーハッシュを提供します:

  • Kairos: 0xd9af33106d664a53cb9946df5cd81a30695f5b72224ee64e798b278af812779c
  • Mainnet: 0x6cff5233743b3c0321a19ae11ab38ae0ddc7ddfe1e91b162fa8bb657488fb157

残りのパラメーターは、以下のように設定することができる:

  • callbackGasLimit500000とする、
  • numWords1、そして
  • refundRecipientにEOAのアドレスを設定します。

その後、リクエストが満たされると、 sRandomWord() 関数を実行することができる。 この sRandomWord() 関数はランダムな単語を返す。 多田🎉! ランダムな単語を要求し、スマート・コントラクトで受け取っただけだ。

  • requestRandomWordsDirect(): Will be sending 1 KLAY to execute this function. 下の画像がそれを示している:

  • **sRandomWord()**である:VRFCoordinatorがランダムワードの要求を満たすと、そのレスポンスが sRandomWord変数に格納される。 レスポンスを得るには、関数sRandomWord()`を呼び出す。 スマート・コントラクトでランダムな単語を要求するには、まずrequestRandomWordsDirect()関数を実行しなければならない。 この関数が正常に実行されるためには、ユーザは前述のようにKAIAを送信し(最低1KAIA)、keyHashcallbackGasLimitnumWordsrefundRecipientパラメータを与える必要がある。 keyHash\パラメータは、誰がリクエストを処理できるかを一意に定義する。 Orakl Network VRFは、Kaiaチェーンごとに1つのキーハッシュを提供します:

多田🎉! ランダムな単語を要求し、スマート・コントラクトで受け取っただけだ。

結論

このチュートリアルでは、Orakl Network VRFソリューションを使用してスマートコントラクトにランダムな単語を生成する方法を学びました。 オラクルネットワークは、データフィード、リクエスト・レスポンス、プルーフ・オブ・リザーブなど、より多くのオラクルサービスを提供する。 オラクルネットワークの詳細および動作については、オラクルネットワークのドキュメントを参照してください。 オラクルネットワークは、データフィード、リクエスト・レスポンス、プルーフ・オブ・リザーブなど、より多くのオラクルサービスを提供する。 オラクルネットワークの詳細および動作については、オラクルネットワークのドキュメントを参照してください。

ページを改善してください。