[英]transaction fails when I call getRandomNumber() function from chainlink VRF v1
我正在使用 chainlink VRF v1 来获取随机数。 我正在使用 ethers.js 调用 getRandomNumber() function 但它总是失败并显示此消息: Error: transaction failed [ See: https://links.ethers.org/v5-errors-CALL_EXCEPTION ]
我的合同中有足够的 LINK,所以这不是原因。 我的代码是否还有其他可能或有任何问题?
我的智能合约:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.12;
import "@chainlink/contracts/src/v0.8/VRFConsumerBase.sol";
contract VRFConsumer is VRFConsumerBase {
bytes32 keyHash;
uint256 requiredFee;
uint256 public randomResult;
constructor()
VRFConsumerBase(
0x844ECf0B33EB65e1EC34AEa0d082D39879169890,
0xa36085F69e2889c224210F603D836748e7dC0088
)
{
keyHash = 0x6c3699283bda56ad74f6b855546325b68d482e983852a7a82979cc4807b641f4;
requiredFee = 0.1 * 10**18;
}
function getRandomNumber() public returns (bytes32 requestId) {
require(
LINK.balanceOf(address(this)) >= requiredFee,
"Not enough LINK - fill contract with faucet"
);
return requestRandomness(keyHash, requiredFee);
}
function fulfillRandomness(
bytes32, /*requestId*/
uint256 randomness
) internal override {
randomResult = randomness;
}
}
我的前端代码:
const provider: ethers.providers.Web3Provider = new ethers.providers.Web3Provider((window as any).ethereum;
);
const signer: ethers.providers.JsonRpcSigner = provider.getSigner();
const vrfConsumer = new ethers.Contract(
this.address,
vrfConsumerABI,
provider
);
console.log("Start");
const vrfConsumerWithSigner = vrfConsumer.connect(signer);
const tx = await vrfConsumerWithSigner.getRandomNumber({
gasPrice: 3000000000,
gasLimit: 2000000,
});
await tx.wait();
const result: BigNumber = await vrfConsumer.randomResult();
console.log(result.toNumber());
console.log("done");
我建议你检查一下Chainlink hardhat-starter-kit中的一些功能
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.