Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion contracts/Migrations.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.12;
pragma solidity ^0.6.6;

contract Migrations {
address public owner;
Expand Down
2 changes: 1 addition & 1 deletion contracts/MyContract.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.12;
pragma solidity ^0.6.6;

import "@chainlink/contracts/src/v0.6/ChainlinkClient.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
Expand Down
6 changes: 3 additions & 3 deletions contracts/PriceConsumerV3.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.12;
pragma solidity ^0.6.6;

import "@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface.sol";

Expand All @@ -11,8 +11,8 @@ contract PriceConsumerV3 {
* Aggregator: ETH/USD
* Address: 0x9326BFA02ADD2366b30bacB125260Af641031331
*/
constructor() public {
priceFeed = AggregatorV3Interface(0x9326BFA02ADD2366b30bacB125260Af641031331);
constructor(address _priceFeed) public {
priceFeed = AggregatorV3Interface(_priceFeed);
}

/**
Expand Down
15 changes: 9 additions & 6 deletions contracts/RandomNumberConsumer.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.12;
pragma solidity ^0.6.6;

import "@chainlink/contracts/src/v0.6/VRFConsumerBase.sol";

Expand All @@ -8,6 +8,7 @@ contract RandomNumberConsumer is VRFConsumerBase {
bytes32 internal keyHash;
uint256 internal fee;
uint256 public randomResult;
event RequestedRandomness(bytes32 requestId);

/**
* Constructor inherits VRFConsumerBase
Expand All @@ -17,22 +18,24 @@ contract RandomNumberConsumer is VRFConsumerBase {
* LINK token address: 0xa36085F69e2889c224210F603D836748e7dC0088
* Key Hash: 0x6c3699283bda56ad74f6b855546325b68d482e983852a7a82979cc4807b641f4
*/
constructor(address _linkTokenAddress)
constructor(address _linkTokenAddress, bytes32 _keyHash,
address _vrfCoordinatorAddress, uint256 _fee)
public
VRFConsumerBase(
0xdD3782915140c8f3b190B5D67eAc6dc5760C46E9, // VRF Coordinator
_vrfCoordinatorAddress, // VRF Coordinator
_linkTokenAddress // LINK Token
)
{
keyHash = 0x6c3699283bda56ad74f6b855546325b68d482e983852a7a82979cc4807b641f4;
fee = 0.1 * 10 ** 18; // 0.1 LINK
keyHash = _keyHash;
fee = _fee;
}

/**
* Requests randomness from a user-provided seed
*/
function getRandomNumber(uint256 userProvidedSeed) public returns (bytes32 requestId) {
return requestRandomness(keyHash, fee, userProvidedSeed);
requestId = requestRandomness(keyHash, fee, userProvidedSeed);
emit RequestedRandomness(requestId);
}

/**
Expand Down
4 changes: 4 additions & 0 deletions contracts/test/MockV3Aggregator.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;

import "@chainlink/contracts/src/v0.6/tests/MockV3Aggregator.sol";
4 changes: 4 additions & 0 deletions contracts/test/VRFCoordinatorMock.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;

import "@chainlink/contracts/src/v0.6/tests/VRFCoordinatorMock.sol";
6 changes: 5 additions & 1 deletion migrations/3_price_consumer_v3.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
const PriceConsumerV3 = artifacts.require('PriceConsumerV3')
const KOVAN_ETH_USD_PRICE_FEED = '0x9326BFA02ADD2366b30bacB125260Af641031331'

module.exports = async (deployer, network, [defaultAccount]) => {
// Local (development) networks need their own deployment of the LINK
// token and the Oracle contract

// currently hardcoded for Kovan
let priceFeedAddress = KOVAN_ETH_USD_PRICE_FEED
try {
await deployer.deploy(PriceConsumerV3, { from: defaultAccount })
await deployer.deploy(PriceConsumerV3, KOVAN_ETH_USD_PRICE_FEED, { from: defaultAccount })
} catch (err) {
console.error(err)
}
Expand Down
15 changes: 6 additions & 9 deletions migrations/4_random_number_consumer.js
Original file line number Diff line number Diff line change
@@ -1,19 +1,16 @@
const RandomNumberConsumer = artifacts.require('RandomNumberConsumer')
const { LinkToken } = require('@chainlink/contracts/truffle/v0.4/LinkToken')

module.exports = async (deployer, network, [defaultAccount]) => {
// Local (development) networks need their own deployment of the LINK
// token and the Oracle contract
if (!network.startsWith('kovan')) {
LinkToken.setProvider(deployer.provider)
try {
await deployer.deploy(LinkToken, { from: defaultAccount })
await deployer.deploy(RandomNumberConsumer, LinkToken.address)
} catch (err) {
console.error(err)
}
console.log("only for Kovan right now!")
} else {
// For now, this is hard coded to Kovan
deployer.deploy(RandomNumberConsumer, '0xa36085F69e2889c224210F603D836748e7dC0088')
const KOVAN_KEYHASH = '0x6c3699283bda56ad74f6b855546325b68d482e983852a7a82979cc4807b641f4'
const KOVAN_FEE = '100000000000000000'
const KOVAN_LINK_TOKEN = '0xa36085F69e2889c224210F603D836748e7dC0088'
const KOVAN_VRF_COORDINATOR = '0xdD3782915140c8f3b190B5D67eAc6dc5760C46E9'
deployer.deploy(RandomNumberConsumer, KOVAN_LINK_TOKEN, KOVAN_KEYHASH, KOVAN_VRF_COORDINATOR, KOVAN_FEE)
}
}
6 changes: 3 additions & 3 deletions scripts/price-consumer-scripts/get-latest-price.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ const PriceConsumerV3 = artifacts.require('PriceConsumerV3')
*/

module.exports = async callback => {
const priceConsumerV3 = await PriceConsumerV3.deployed()
const latestPrice = await priceConsumerV3.getLatestPrice()
callback(latestPrice)
const priceConsumerV3 = await PriceConsumerV3.deployed()
const latestPrice = await priceConsumerV3.getLatestPrice()
callback(latestPrice)
}
15 changes: 10 additions & 5 deletions test/PriceConsumerV3_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,28 @@
This repo is for testing on kovan network only.
You can get truffle teams and do a forking version of
these tests.

*/

const { assert } = require('chai')

contract('PriceConsumerV3', accounts => {
const MockPriceFeed = artifacts.require('MockV3Aggregator')
const PriceConsumerV3 = artifacts.require('PriceConsumerV3')

const defaultAccount = accounts[0]
// The addresses here can be found in the chainlink docs
// https://docs.chain.link/docs/ethereum-addresses

let priceConsumerV3
let priceConsumerV3, mockPriceFeed

// TODO
describe('#getLatestPrice', () => {
let price = "2000000000000000000"
beforeEach(async () => {
mockPriceFeed = await MockPriceFeed.new(8, price)
priceConsumerV3 = await PriceConsumerV3.new(mockPriceFeed.address)
})
it('returns a price', async () => {
priceConsumerV3 = await PriceConsumerV3.new()
assert(true, true)
assert.equal(await priceConsumerV3.getLatestPrice(), price)
})
})
})
37 changes: 37 additions & 0 deletions test/RandomNumberConsumer_test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
const { assert } = require('chai')
const { expectRevert } = require('@openzeppelin/test-helpers')

contract('RandomNumberConsumer', accounts => {
const RandomNumberConsumer = artifacts.require('RandomNumberConsumer')
const VRFCoordinatorMock = artifacts.require('VRFCoordinatorMock')
const { LinkToken } = require('@chainlink/contracts/truffle/v0.4/LinkToken')
const defaultAccount = accounts[0]
let randomNumberConsumer, vrfCoordinatorMock, seed, link, keyhash, fee

describe('#request random number', () => {
beforeEach(async () => {
keyhash = '0x6c3699283bda56ad74f6b855546325b68d482e983852a7a82979cc4807b641f4'
fee = '1000000000000000000'
seed = 123
link = await LinkToken.new({ from: defaultAccount })
vrfCoordinatorMock = await VRFCoordinatorMock.new(link.address, { from: defaultAccount })
randomNumberConsumer = await RandomNumberConsumer.new(link.address, keyhash, vrfCoordinatorMock.address, fee, { from: defaultAccount })
})
it('it revert without LINK', async () => {
await expectRevert.unspecified(
randomNumberConsumer.getRandomNumber(seed, { from: defaultAccount })
)
})
it('returns a random number with link', async () => {
await link.transfer(randomNumberConsumer.address, web3.utils.toWei('1', 'ether'), { from: defaultAccount })
let transaction = await randomNumberConsumer.getRandomNumber(seed, { from: defaultAccount })
assert.exists(transaction.receipt.rawLogs)
// This is the event that is emitted
let requestId = transaction.receipt.rawLogs[3].topics[0]
// let requestId = await randomNumberConsumer.lastRequestId({ from: defaultAccount })
await vrfCoordinatorMock.callBackWithRandomness(requestId, '777', randomNumberConsumer.address, { from: defaultAccount })
let randomNumber = await randomNumberConsumer.randomResult({ from: defaultAccount })
assert.equal(randomNumber, 777)
})
})
})
26 changes: 0 additions & 26 deletions test/RandomNumberConsumer_text.js

This file was deleted.

4 changes: 2 additions & 2 deletions truffle-config.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const HDWalletProvider = require('@truffle/hdwallet-provider')
require('dotenv').config();
require('dotenv').config()

const mnemonic = process.env.MNEMONIC
const url = process.env.RPC_URL
Expand All @@ -26,7 +26,7 @@ module.exports = {
},
compilers: {
solc: {
version: '0.6.12',
version: '0.6.6',
},
},
}