当前位置:   article > 正文

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

逸学区块链【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

  1. // SPDX-License-Identifier: MIT
  2. // 一个依靠订阅获得资金的消费者合同的例子
  3. pragma solidity ^0.8.7;
  4. import "@chainlink/contracts/src/v0.8/interfaces/VRFCoordinatorV2Interface.sol";
  5. import "@chainlink/contracts/src/v0.8/VRFConsumerBaseV2.sol";
  6. contract VRFv2Consumer is VRFConsumerBaseV2 {
  7. VRFCoordinatorV2Interface COORDINATOR;
  8. // 您的订阅ID.
  9. //https://vrf.chain.link/
  10. uint64 s_subscriptionId;
  11. // Rinkeby协调员。对于其他网络,
  12. // 参照 <https://docs.chain.link/docs/vrf-contracts/#configurations>
  13. address vrfCoordinator = 0xc587d9053cd1118f25F645F9E08BB98c9712A4EE;
  14. // 要使用的gas通道,每个网络不一样.
  15. // 参照 <https://docs.chain.link/docs/vrf-contracts/#configurations>
  16. //交换地址https://pegswap.chain.link/
  17. bytes32 keyHash = 0x114f3da0a805b6a67d6e9cd2ec746f7028f1b7376365af575cfea3550dd1aa04;
  18. //取决于要发送到的请求值的数量
  19. //对于fulfillRandomWords()函数。存储一个数值需要消耗20000wei,
  20. //因此,对于这个示例合同,100000是个安全的默认值
  21. uint32 callbackGasLimit = 30000;
  22. // 请求的信息数量,默认是3,你可以设置更高
  23. uint16 requestConfirmations = 3;
  24. //此用例中,默认-次获得2个随机数
  25. uint32 numWords = 1;
  26. uint256[] public s_randomWords;
  27. uint256 public s_requestId;
  28. address s_owner;
  29. constructor(uint64 subscriptionId) VRFConsumerBaseV2(vrfCoordinator) {
  30. COORDINATOR = VRFCoordinatorV2Interface(vrfCoordinator);
  31. s_owner = msg.sender;
  32. s_subscriptionId = subscriptionId;
  33. }
  34. // /假设Link充足的情况下,执行此函数
  35. function requestRandomWords() external onlyOwner {
  36. // 如果没设置订阅的相关关系,就会报错
  37. s_requestId = COORDINATOR.requestRandomWords(
  38. keyHash,
  39. s_subscriptionId,
  40. requestConfirmations,
  41. callbackGasLimit,
  42. numWords
  43. );
  44. }
  45. function fulfillRandomWords(
  46. uint256,
  47. uint256[] memory randomWords
  48. ) internal override {
  49. s_randomWords = randomWords;
  50. }
  51. modifier onlyOwner() {
  52. require(msg.sender == s_owner);
  53. _;
  54. }
  55. }

需要配置网路和订阅

Supported Networks - Subscription Method | Chainlink Documentation

订阅

VRF | Subscription Management

部署的时候对应上

Remix - Ethereum IDE

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/263808
推荐阅读
相关标签
  

闽ICP备14008679号