逸学区块链【solidity】真随机数

参考Get a Random Number | Chainlink Documentation

但是很贵,价格

  • **Gas Price:**当前gas价格,根据网络状况而波动。
  • **Callback gas :**返回您所请求的随机值时,回调请求消耗的gas 量。
  • **验证gas :**量gas 用于验证链上的随机性。

我们可以定义两个内容限制总价格,也就是限制当前gas价格和回调请求消耗的gas 量

keyHash:Gas通道( 最大gas价格您愿意为请求支付的价格(以 wei 为单位)

callbackGasLimit: 回调上限 示例中100000是愿意为请求花费的上限,限制价格

有计算器VRF Billing | Chainlink Documentation

javascript 复制代码
// SPDX-License-Identifier: MIT
// 一个依靠订阅获得资金的消费者合同的例子
pragma solidity ^0.8.7;

import "@chainlink/contracts/src/v0.8/interfaces/VRFCoordinatorV2Interface.sol";
import "@chainlink/contracts/src/v0.8/VRFConsumerBaseV2.sol";

contract VRFv2Consumer is VRFConsumerBaseV2 {
  VRFCoordinatorV2Interface COORDINATOR;

  // 您的订阅ID.
  //https://vrf.chain.link/
  uint64 s_subscriptionId;

  // Rinkeby协调员。对于其他网络,
  // 参照 <https://docs.chain.link/docs/vrf-contracts/#configurations>
  address vrfCoordinator = 0xc587d9053cd1118f25F645F9E08BB98c9712A4EE;

  // 要使用的gas通道,每个网络不一样.
  // 参照 <https://docs.chain.link/docs/vrf-contracts/#configurations>
  //交换地址https://pegswap.chain.link/
  bytes32 keyHash = 0x114f3da0a805b6a67d6e9cd2ec746f7028f1b7376365af575cfea3550dd1aa04;

    //取决于要发送到的请求值的数量
    //对于fulfillRandomWords()函数。存储一个数值需要消耗20000wei,
    //因此,对于这个示例合同,100000是个安全的默认值
  uint32 callbackGasLimit = 30000;

  // 请求的信息数量,默认是3,你可以设置更高
  uint16 requestConfirmations = 3;

  //此用例中,默认-次获得2个随机数
  uint32 numWords =  1;

  uint256[] public s_randomWords;
  uint256 public s_requestId;
  address s_owner;

  constructor(uint64 subscriptionId) VRFConsumerBaseV2(vrfCoordinator) {
    COORDINATOR = VRFCoordinatorV2Interface(vrfCoordinator);
    s_owner = msg.sender;
    s_subscriptionId = subscriptionId;
  }

  // /假设Link充足的情况下,执行此函数
  function requestRandomWords() external onlyOwner {
    // 如果没设置订阅的相关关系,就会报错
    s_requestId = COORDINATOR.requestRandomWords(
      keyHash,
      s_subscriptionId,
      requestConfirmations,
      callbackGasLimit,
      numWords
    );
  }
  
  function fulfillRandomWords(
    uint256, 
    uint256[] memory randomWords
  ) internal override {
    s_randomWords = randomWords;
  }

  modifier onlyOwner() {
    require(msg.sender == s_owner);
    _;
  }
}

需要配置网路和订阅

Supported Networks - Subscription Method | Chainlink Documentation

订阅

VRF | Subscription Management

部署的时候对应上

Remix - Ethereum IDE

相关推荐
财迅通Ai7 小时前
商业航天概念领涨A股,航天ETF华安(159267.SZ)收盘上涨1.2%
大数据·人工智能·区块链·中国卫星·航天电子
pjwonline113 小时前
反向仲裁:去中心化知识网络中的社会性共识引擎
网络·人工智能·去中心化·区块链·智能合约
MicroTech202521 小时前
微算法科技(NASDAQ :MLGO)量子增强区块链联邦学习:基于量子拜占庭协议的技术革新
科技·算法·区块链
Web3VentureView1 天前
SYNBO 亮相香港 Web3 嘉年华:在 AI+Web3 时代重思链上一级市场基础设施
人工智能·web3·区块链·加密货币·web4·synbo
搬砖魁首2 天前
Fabric系列 - HSM之3 区块链上的结合
区块链·php·fabric·长安链·hsm
TechMasterPlus2 天前
FilAPP 技术深度解析:基于 Filecoin 的去中心化文件存储应用架构
架构·去中心化·区块链
许强0xq3 天前
订单流战争:AI、区块链与市场透明度的终极博弈
web3·区块链·智能合约·solidity·dapp
BlockChain8883 天前
以太坊交易全流程详解
区块链
weixin_413838563 天前
基于区块链的校园二手书交易系统
vue.js·spring·区块链·fabric
f16422543 天前
区块链入门知识
区块链