English / 中文
Blockchain is a very secure and reliable network for the exchange of value, but there is no way to secure and tamper-proof access to off-chain data or send data to off-chain systems. Use Chainlink predictor to feed prices and obtain real-time financial market price data directly on the chain through the predictor network
The private key put in .env in the format "PRIVATE_KEY= XXXX ", from which the code automatically reads.
// .env
PRIVATE_KEY = xxxxxxxxxxxxxxxx;
INFURA_ID = yyyyyyyy;
yarn install
npx hardhat run scripts/01-PriceConsumerV3Deploy.js --network goerli
// ./UsingDataFeedsByEthers.js
require('dotenv').config();
const { ethers } = require('ethers'); // for nodejs only
const provider = new ethers.providers.JsonRpcProvider(`https://goerli.infura.io/v3/${process.env.INFURA_ID}`);
const aggregatorV3InterfaceABI = require('@chainlink/contracts/abi/v0.8/AggregatorV3Interface.json');
const addr = '0x9326BFA02ADD2366b30bacB125260Af641031331';
const priceFeed = new ethers.Contract(addr, aggregatorV3InterfaceABI, provider);
async function test() {
const roundData = await priceFeed.latestRoundData();
console.log("Latest Round Data", roundData);
const price = roundData[1];
const decimal = await priceFeed.decimals();
console.log("decimal = ", decimal);
console.log("eth's price = ", price.toNumber() / 10 ** decimal + "USD");
}
test();
The returned data format is as follows:
Latest Round Data [
BigNumber { _hex: '0x0200000000000029f5', _isBigNumber: true },
BigNumber { _hex: '0x5b755c30c0', _isBigNumber: true },
BigNumber { _hex: '0x61c3c368', _isBigNumber: true },
BigNumber { _hex: '0x61c3c368', _isBigNumber: true },
BigNumber { _hex: '0x0200000000000029f5', _isBigNumber: true },
roundId: BigNumber { _hex: '0x0200000000000029f5', _isBigNumber: true },
answer: BigNumber { _hex: '0x5b755c30c0', _isBigNumber: true },
startedAt: BigNumber { _hex: '0x61c3c368', _isBigNumber: true },
updatedAt: BigNumber { _hex: '0x61c3c368', _isBigNumber: true },
answeredInRound: BigNumber { _hex: '0x0200000000000029f5', _isBigNumber: true }
]
- See a for the full example 👉 UsingDataFeedsByEthers.js
Chainlink VRF verifiable random function is a provably fair and verifiable source of randomness. As a tamper-proof random number generator, build smart contracts for any application builds that rely on unpredictable results.
- Blockchain game and NFT
- Randomly assigned responsibilities and resources (e.g. randomly assigned judges to hear cases)
- Selection of representative samples for consensus mechanisms
- Create ChainLink SubscriptionID
Login ChainLink VRF Test network , Click on" Create Subscription" to Create a SubscriptionID and you can see the created SubscriptionID under "My Subscriptions"
- Save SubscriptionID
Save the SubscriptionID created in the previous step to .env
## .env
SubscriptionId=ddddd
-
Run the deployment script to deploy the contract
npx hardhat run scripts/02-RandomNumberConsumerDeploy.js --network rinkeby
-
Access to ChainLink coins
Login ChainLink Faucet , Get ChainLink coins for subsequent RandomNumberConsume, where Network selects Rinkeby and "Testnet Account Address "enters the account address of the contract owner
- Empower contracts to consume ChainLink coins for random number capture
Login ChainLink VRF test network , and Click SubscriptionID
Then on the new page, "Add Funds" and "Add Consumer ". Where "Add Funds" is the number of ChainLink coins deposited, and "Add Consumer "needs to fill in the successfully deployed RandomNumberConsumer contract address, which is the contract address printed in Step 3
-
Run the test script
npx hardhat run scripts/03-RandomNumberConsumer --network rinkeby
The result may take 2 to 3 minutes, and you can see two random values returned by ChainLink
❯ npx hardhat run scripts/03-RandomNumberConsumer.js --network rinkeby
Listen on random number call...
Listen on random number result...
first transaction hash: 0xb822b742836e3e028102b938ff9b52f5c31ecbf00a663b4865c50f83d141c441
event RequestId(address,uint256)
random0 requestID: BigNumber { value: "68813323376039607636454911576409413136200025762802867082556497319163019860937" }
event FulfillRandomness(uint256,uint256[])
args[0] : BigNumber { value: "68813323376039607636454911576409413136200025762802867082556497319163019860937" }
random0Res: 21345191237588857524675400331731955708910062406377169110385405370996391926856,49611358654743768743671276783545638722996121599596073254340228099561828202433
Will add aggregate obtain.
Reference documents are linked below: