diff --git a/README.md b/README.md index fcc0e26..39a9a0e 100644 --- a/README.md +++ b/README.md @@ -2,17 +2,12 @@ Consumer smart contract that utilizes VRF functionality from [Orakl Network](https://www.orakl.network). -Internally, the scripts access following smart contracts: - -Baobab +> Warning: This repository and smart contract are meant to be for deployment on [`Baobab`](https://docs.klaytn.foundation/misc/faq#what-is-cypress-what-is-baobab). -- `Prepayment` ([0xf37a736b476fCEaB261371A3B3B330772630b0bF](https://baobab.klaytnfinder.io/account/0xf37a736b476fCEaB261371A3B3B330772630b0bF)) -- `VRFCoordinator` ([0x6B4c0b11bd7fE1E9e9a69297347cFDccA416dF5F](https://baobab.klaytnfinder.io/account/0x6B4c0b11bd7fE1E9e9a69297347cFDccA416dF5F)) - -Cypress +Internally, the scripts access following smart contracts: -- `Prepayment` ([0xCD54643C2Cd905e31d1ca1bF6617cbA9746F2e37](https://www.klaytnfinder.io/account/0xCD54643C2Cd905e31d1ca1bF6617cbA9746F2e37)) -- `VRFCoordinator` ([0xCfB34D7af29E070Ec2fd726e130862F7771217A8](https://www.klaytnfinder.io/account/0xCfB34D7af29E070Ec2fd726e130862F7771217A8)) +- `Prepayment` ([0xf37a736b476fCEaB261371A3B3B330772630b0bF](https://baobab.scope.klaytn.com/account/0xf37a736b476fCEaB261371A3B3B330772630b0bF)) +- `VRFCoordinator` ([0x6B4c0b11bd7fE1E9e9a69297347cFDccA416dF5F](https://baobab.scope.klaytn.com/account/0x6B4c0b11bd7fE1E9e9a69297347cFDccA416dF5F)) If you want to access different deployments of `Prepayment` or `VRFCoordinator`, you can change it inside `hardhat.config.ts` in `namedAccounts` property. diff --git a/contracts/VRFConsumer.sol b/contracts/VRFConsumer.sol index 3442ba7..3c46571 100644 --- a/contracts/VRFConsumer.sol +++ b/contracts/VRFConsumer.sol @@ -1,71 +1,77 @@ // 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"; -import {IPrepayment} from "@bisonai/orakl-contracts/src/v0.1/interfaces/IPrepayment.sol"; +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; + uint256 public sRandomWord; + address private sOwner; - IVRFCoordinator COORDINATOR; + IVRFCoordinator COORDINATOR; - error OnlyOwner(address notOwner); + error OnlyOwner(address notOwner); - modifier onlyOwner() { - if (msg.sender != sOwner) { - revert OnlyOwner(msg.sender); - } - _; - } + modifier onlyOwner() { + if (msg.sender != sOwner) { + revert OnlyOwner(msg.sender); + } + _; + } - constructor(address coordinator) VRFConsumerBase(coordinator) { - sOwner = msg.sender; - COORDINATOR = IVRFCoordinator(coordinator); - } + constructor(address coordinator) VRFConsumerBase(coordinator) { + sOwner = msg.sender; + COORDINATOR = IVRFCoordinator(coordinator); + } - // Receive remaining payment from requestRandomWordsPayment - receive() external payable {} + // Receive remaining payment from requestRandomWordsPayment + receive() external payable {} - function requestRandomWords( - bytes32 keyHash, - uint64 accId, - uint32 callbackGasLimit, - uint32 numWords - ) public onlyOwner returns (uint256 requestId) { - requestId = COORDINATOR.requestRandomWords(keyHash, accId, callbackGasLimit, numWords); - } + function requestRandomWords( + bytes32 keyHash, + uint64 accId, + uint32 callbackGasLimit, + uint32 numWords + ) + public + onlyOwner + returns (uint256 requestId) + { + requestId = COORDINATOR.requestRandomWords( + keyHash, + accId, + callbackGasLimit, + numWords + ); + } - 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 requestRandomWordsDirect( + bytes32 keyHash, + uint32 callbackGasLimit, + uint32 numWords + ) + public + payable + onlyOwner + returns (uint256 requestId) + { + requestId = COORDINATOR.requestRandomWords{value: msg.value}( + keyHash, + callbackGasLimit, + numWords, + address(this) + ); + } - 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; - } - - function cancelRequest(uint256 requestId) external onlyOwner { - COORDINATOR.cancelRequest(requestId); - } - - function withdrawTemporary(uint64 accId) external onlyOwner { - address prepaymentAddress = COORDINATOR.getPrepaymentAddress(); - IPrepayment(prepaymentAddress).withdrawTemporary(accId, payable(msg.sender)); - } + 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; + } } diff --git a/deploy/0-VRFConsumer.ts b/deploy/0-VRFConsumer.ts index 4cfafc3..add8bb2 100644 --- a/deploy/0-VRFConsumer.ts +++ b/deploy/0-VRFConsumer.ts @@ -8,7 +8,7 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { console.log('0-VRFConsumer.ts') - if (network.name == 'localhost') { + if (network.name != 'baobab') { console.log('Skipping') return } diff --git a/hardhat.config.ts b/hardhat.config.ts index 5fffb1e..95fb481 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -56,12 +56,10 @@ const config: HardhatUserConfig = { default: 0 }, prepayment: { - baobab: '0xf37a736b476fCEaB261371A3B3B330772630b0bF', - cypress: '0xCD54643C2Cd905e31d1ca1bF6617cbA9746F2e37' + baobab: '0xf37a736b476fCEaB261371A3B3B330772630b0bF' }, vrfCoordinator: { - baobab: '0x6B4c0b11bd7fE1E9e9a69297347cFDccA416dF5F', - cypress: '0xCfB34D7af29E070Ec2fd726e130862F7771217A8' + baobab: '0x6B4c0b11bd7fE1E9e9a69297347cFDccA416dF5F' } } } @@ -83,22 +81,6 @@ task('createAccount', 'Create new account').setAction(async (taskArgs, hre) => { console.log(`Account created with ID: ${accId}`) }) -task('cancelAccount', 'Cancel account') - .addParam('to', 'Account address') - .addOptionalParam('accountId', 'Account Id') - .setAction(async (taskArgs, hre) => { - const { prepayment: prepaymentAddress } = await hre.getNamedAccounts() - const prepayment = await ethers.getContractAt(Prepayment__factory.abi, prepaymentAddress) - - const accId = taskArgs.accountId || process.env.ACC_ID - const to = taskArgs.amount - - const txReceipt = await (await prepayment.cancelAccount(accId, to)).wait() - - console.log(txReceipt) - console.log(`Account canceled with ID: ${accId}`) - }) - task('deposit', 'Deposit $KLAY to account') .addParam('amount', 'The amount of $KLAY') .addOptionalParam('accountId', 'Account Id') diff --git a/scripts/request-vrf-direct.ts b/scripts/request-vrf-direct.ts index 917a794..dd037b4 100644 --- a/scripts/request-vrf-direct.ts +++ b/scripts/request-vrf-direct.ts @@ -1,4 +1,4 @@ -import { ethers, getNamedAccounts } from 'hardhat' +import { ethers } from 'hardhat' async function main() { const vrfConsumer = await ethers.getContract('VRFConsumer') @@ -7,9 +7,8 @@ async function main() { const callbackGasLimit = 500_000 const numWords = 1 - const { deployer } = await getNamedAccounts() const txReceipt = await ( - await vrfConsumer.requestRandomWordsDirect(keyHash, callbackGasLimit, numWords, deployer, { + await vrfConsumer.requestRandomWordsDirect(keyHash, callbackGasLimit, numWords, { value: ethers.utils.parseEther('1.0') }) ).wait()