如何使用 Chainlink VRF

  • BuildBear
  • 发布于 2024-08-31 14:24
  • 阅读 52

本文详细介绍了如何在BuildBear Sandbox中集成Chainlink的验证随机函数(VRF),为智能合约和去中心化应用程序请求和检索随机数字。内容涵盖了插件的主要特点、安装过程、订阅创建、资金支持以及部署消费者合约的步骤,适合需要实现随机性功能的开发者使用。

Chainlink 可验证随机函数(VRF)是为智能合约设计的随机数生成器。开发人员可以在 BuildBear Sandbox 上使用 Chainlink VRF 构建和测试依赖于不可预测结果的去中心化应用程序,例如游戏或彩票系统。

在本指南中,你将学习如何通过无缝集成 Chainlink VRF 到 BuildBear Sandbox 中,来请求和获取用于你的智能合约和 dApp 的随机单词。

你可以使用 BuildBear Chainlink 插件做什么?

BuildBear Chainlink VRF 插件让你可以将 Chainlink VRF 集成到你的开发工作流程中,以请求和管理你智能合约和 dApp 的随机数。

插件的主要特点包括:

  • 订阅方法:支持订阅方法,通过一个资助有 Link 代币的单一订阅账户管理多个消费者合约。
  • 轻松集成:轻松使用你现有的 Chainlink VRF 订阅或创建一个新的订阅。
  • 多网络支持:支持的网络包括以太坊、Sepolia、Arbitrum、Avalanche、BNB 和 Polygon。

使用 Chainlink 插件的步骤

在本教程中,我们将使用一个示例消费者合约,该合约请求随机单词并使用 Chainlink VRF 接收随机单词。消费者合约应与 Chainlink VRF v2.5 兼容。

通过这个插件,我们将在沙盒模式中使用我们的智能合约 / dApp,方式与在主网上使用智能合约 / dApp 完全相同,并且你的脚本测试中没有使用任何模拟值。

1. 创建一个 BuildBear 沙盒。

如果你是 BuildBear 的新用户,请参考我们的全面文档以注册并创建你的沙盒 在这里。请访问 这里 创建一个新的沙盒。

2. 安装 Chainlink VRF 插件。

要在你的沙盒中安装 Chainlink VRF 插件,请转到仪表板,选择“插件”选项,然后从可用列表中选择 Chainlink VRF 插件

3. 订阅 VRF 并资助订阅

(A) 订阅

可以使用现有的订阅或设置新的订阅。BuildBear 支持 Chainlink VRF 订阅方法来创建新订阅。

要创建新的订阅,请在你的沙盒中调用 VRF 协调器合约createSubscription(),并获得一个订阅 ID。请使用下面的脚本代码:

// 创建订阅
  console.log("[Coordinator] 创建订阅...");
  const subsTx = await vrfCoordinator.connect(signer).createSubscription();
  const subRecipt = await subsTx.wait();
  console.log({ createSubTxnHash: subsTx.hash });

你也可以通过调用 createSubscription 函数从 BuildBear Explorer 中执行相同的操作。

如果你有现有的 Chainlink VRF 订阅,只需在下面的脚本中传递订阅 ID。这允许你使用现有订阅从消费者合约请求随机单词。

// 使用现有订阅
  console.log("[Coordinator] 使用现有订阅...");
  const subId = ""// 在这里插入你的订阅 ID
  console.log({subId});

(B) 资助订阅

在请求 Chainlink VRF 的随机数之前,你需要通过 LINK 代币为你的订阅提供资金。如果订阅在主网上已资助,则你的智能合约调用将在 BuildBear 沙盒中正常工作(即,它们的功能完全与在主网上相同)。如果订阅尚未资助,你可以使用 LINK 代币以与在主网上完全相同的方式为订阅提供资金。但是,你可以使用 BuildBear Faucet 来轻松获得 LINK 代币。

一旦你在钱包地址中拥有 LINK 代币,你必须在 LINK Token Contract 中调用 transferAndCall 函数。请注意关于 transferAndCall 函数参数的以下几点:

(1) value 应为 Juel,这是 LINK 的最小面额和

(2) data 必须是以 ABI 格式编码的订阅 ID(subId)。

为了你的方便,你可以使用以下脚本来编码你的 subId 并用实际的 LINK 资助订阅:

//@ts-ignore
  const subId = // 在这里插入你的订阅 ID
  const abiCoder = new ethers.AbiCoder();
  const encodedSubId = abiCoder.encode(["uint256"], [subId]);
  console.log({ subId, encodedSubId });

   const linkToken = await ethers.getContractAt(
    "LinkTokenInterface",
    linkTokenAddr
  );
  const value = 50;
  console.log(`正在转移 ${value} LINK 到订阅...`);
  const linkTxn = await linkToken
    .connect(user)
    .transferAndCall(mainnetVRFCoordinatorAddr, BigInt(value * 1e18), encodedSubId);
  await linkTxn.wait();

4. 部署一个请求随机数的智能合约(消费者合约){下面是示例智能合约}

使用新创建的订阅 ID、VRF 协调器地址和密钥哈希部署消费者合约(请确保根据网络更改 VRF 协调器地址和密钥哈希值。你可以在 这里 找到支持的网络、相应的 VRF 协调器地址及其密钥哈希值)。出于本教程的目的,我们将使用以太坊主网。

参考完整示例 仓库脚本 以请sum-check随机单词。

const consumerMock = await ethers.deployContract(
    "RandomNumberConsumerV2_5",
    [\
      subId,\
      mainnetVRFCoordinatorAddr,  // 根据你的网络插入 VRF 协调器地址\
      "0x787d74caea10b2b357790d5b5247c2f63d1d91572a9846f780606e4d953677ae",\
    ],
    user
  );
  await consumerMock.waitForDeployment();
  console.log(`VRF 消费者模拟合约部署到 ${consumerMock.target}`);
  const consumerAddr = consumerMock.target;

在部署消费者合约后,接下来的步骤是将合约添加到协调器合约,请求消费者合约的随机单词,最后满足并验证随机单词。

将消费者添加到协调器

此步骤对于将消费者合约注册到协调器以请求随机单词至关重要。

const addCosumerTx = await updatedCoordinator
    .connect(user)
    .addConsumer(subId, consumerAddr);
  await addCosumerTx.wait();

请求随机单词

在这里,我们通过调用消费者合约上的 requestRandomWords() 函数请求随机数。

const requestRandomnessTx = await consumerMock
    .connect(user)
    .requestRandomWords();
  await requestRandomnessTx.wait();
  const reqId = await consumerMock.connect(user).s_requestId();
  console.log({ reqId });

满足并检查随机单词

自动满足随机单词并在无需任何额外步骤的情况下检索它们。以下是获取随机单词的脚本:

// 检查随机单词
  console.log("[Consumer] 检查随机单词...");
  let randomWord = await consumerMock.connect(user).s_randomWords(0);
  console.log({ randomWord });
  randomWord = await consumerMock.connect(user).s_randomWords(1);
  console.log({ randomWord });

随机单词成功输出如下所示:

结论

按照上述步骤,在 BuildBear Sandbox 中轻松集成 Chainlink VRF,以在你的合约中获取随机单词。安装 Chainlink 插件以构建和测试需要随机性的 web3 创新应用程序,确保在主网部署前的可用性。

关于 BuildBear:

BuildBear 是一个专为 DApp 开发和测试量身定制的平台。开发者可以在各种区块链网络上构建个性化的私有测试沙盒。生成无限的原生和 ERC20 代币的自由,以及在 BuildBear 上快速的交易时间(少于 3 秒!),大大提升了 DApp 开发周期。该平台配备了实时测试和调试的工具和插件,确保开发人员能够以无与伦比的轻松跟踪复杂的区块链交易。

与我们联系 Twitter | LinkedIn | Telegram | GitHub

  • 原文链接: medium.com/buildbear/how...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
BuildBear
BuildBear
https://medium.com/buildbear