如何在智能合约中使用 ANU 的量子随机数生成器
为了满足智能合约对随机性的需求,去中心化伪随机数生成器是一种常用的方法。
原文:A Guide to Using ANU’s Quantum Random Number Generator in Your Smart Contracts
作者:Vansh Wassan
原用标题(译后):指南:在智能合约中使用 ANU 的量子随机数生成器
编译:ChinaDeFi
随机数生成器 (RNG) 一直是使用智能合约时最大的问题之一。确定性虚拟机无法产生 “真正的” 随机性。
为了满足智能合约对随机性的需求,去中心化伪随机数生成器是一种常用的方法。最常用的方法之一是 Chainlink 的 VRF 或可验证随机函数,它在链上提供密码可证明的随机数。它生成一个链下随机数和用于验证结果的加密证明。
然而,这种配置与其他第三方预言机网络存在相同的问题。设置一个可以提供 PRNG 的预言机节点会暴露潜在的攻击载体,比如女巫攻击,也缺乏源透明性和去中心化。例如,需要信任治理实体来选择网络参与者,这意味着去中心化的 PRNG 只与治理实体一样安全和去中心化。
量子随机数生成
QRNG 通过量子现象产生随机性。它使用一个 “真正的” 熵源,利用量子物理的独特特性来产生真正的随机性。
实现 QRNG 的方法各不相同,但共同点是得到的数字将是真正随机的,因为量子事件的结果在理论上是不确定的。因此,QRNG 是随机数生成的黄金标准。
澳大利亚国立大学的 QRNG Airnode

正如我们已经讨论过的,通过第三方预言机网络提供 RNG 会为攻击载体打开大门。但是由 QRNG API 提供商直接运营的第一方预言机 (airnode) 会以最佳方式应对女巫攻击风险。
API3 QRNG 是澳大利亚国立大学 (ANU) 提供的公共实用程序。它由 ANU 量子随机数托管的 Airnode 提供动力,这也意味着它是第一方服务。澳大利亚国立大学的量子光学部是该领域世界领先的研究机构之一。该部门还运行一个 REST API,即量子随机数 API,以服务于 Web2 中的 QRNG。
它作为一种公共产品,所以也是免费的 (除了 gas 成本),当需要链上 RNG 时,它通过一个易于使用的解决方案提供了 “真正的” 量子随机性。
Airnode 和 API3 QRNG 是如何工作的?

首先,我们需要使用能够匹配上的赞助者钱包进行部署并赞助 QrngRequester。QrngRequester 将是检索随机数的主合约。
QrngRequester 向 AirnodeRrpV0 提交一个随机数请求。Airnode 从 AirnodeRrpV0 协议合约中收集请求,从链下检索随机数,并将其发送回 AirnodeRrpV0。一旦接收到,它将使用随机数执行回调到请求程序。
编码 QrngRequester.sol
开始
请确保已安装以下软件:
- Node.js
- yarn/NPM
另外,请确保已经克隆并安装了 Airnode Monorepo。如果还没有,用以下命令克隆 Airnode Monorepo:
$gitclonehttps://github.com/api3dao/airnode.git要安装依赖项,请执行以下步骤:
$ yarn run bootstrap要构建所有的包,使用这个命令:
$ yarn run build编制合约
为了编译 QrngRequester 合约,我们将使用 Remix IDE。它是一个在线 IDE,可以为与 EVM 兼容的区块链开发、部署和管理智能合约。
//SPDX-License-Identifier: MITpragma solidity 0.8.9;import "@api3/airnode-protocol/contracts/rrp/requesters/RrpRequesterV0.sol";contract RemixQrngExample is RrpRequesterV0 { event RequestedUint256(bytes32 indexed requestId); event ReceivedUint256(bytes32 indexed requestId, uint256 response); address public airnode; bytes32 public endpointIdUint256; address public sponsorWallet; mapping(bytes32 => bool) public waitingFulfillment; // These are for Remix demonstration purposes, their use is not practical. struct LatestRequest { bytes32 requestId; uint256 randomNumber; } LatestRequest public latestRequest; constructor(address _airnodeRrp) RrpRequesterV0(_airnodeRrp) {} // Normally, this function should be protected, as in: // require(msg.sender == owner, "Sender not owner"); function setRequestParameters( address _airnode, bytes32 _endpointIdUint256, address _sponsorWallet) external { airnode = _airnode; endpointIdUint256 = _endpointIdUint256; sponsorWallet = _sponsorWallet; } function makeRequestUint256() external { bytes32 requestId = airnodeRrp.makeFullRequest( airnode, endpointIdUint256, address(this), sponsorWallet, address(this), this.fulfillUint256.selector, "" ); waitingFulfillment[requestId] = true; latestRequest.requestId = requestId; latestRequest.randomNumber = 0; emit RequestedUint256(requestId); } function fulfillUint256(bytes32 requestId, bytes calldata data) external onlyAirnodeRrp{ require( waitingFulfillment[requestId], "Request ID not known" ); waitingFulfillment[requestId] = false; uint256 qrngUint256 = abi.decode(data, (uint256)); // Do what you want with `qrngUint256` here... latestRequest.randomNumber = qrngUint256; emit ReceivedUint256(requestId, qrngUint256); }}QrngRequester 有三个主要函数:setRequestParameters(), makeRequestUint256() 和 fulfillUint256()。
- setRequestParameters() 函数接受 airnode、endpointIdUint256、sponsorWallet 并设置这些参数。
- makeRequestUint256() 函数调用协议合约的 airnodeRrp.makeFullRequest() 函数,该函数将请求添加到其存储中并返回一个 requestId。
- 目标链下 ANU Airnode 收集请求并使用随机数向请求者执行回调。
请求参数
makeRequestUint256() 函数需要以下参数发出有效请求。
- airnode (地址) 和 endpointiduint256 指定端点。
- sponsorWallet 指定将使用哪个钱包来完成请求。
响应参数
对 QrngRequester 的回调包含两个参数:
- requestId:在发出请求时会被首次获取,并在这里作为参考传递,以识别响应所针对的请求。
- data:在成功响应的情况下,这是已被编码的请求数据,除了其他响应数据外,还包含时间戳。使用 abi 对象中的 Decode() 函数对其进行解码,以获得随机数。
转到 Remix IDE,创建一个合约,并将其粘贴到 QrngRequester 代码中。

现在,点击仪表板右侧的 compile 并编译智能合约。

部署合约
我们将把我们的 QrngRequester 部署到 Goerli。确保钱包中有足够的测试网 ETH 来部署合约,并在以后资助 sponsorWallet。

转到部署,运行交易,并在环境下选择 “Injected Provider — MetaMask” 选项。连接 MetaMask。确保是在 Goerli。
_rrpaddress 是主 airnodeRrpAddress。RRP 合约已经部署在链上。
填充_rrpAddress 之后,单击 “Deploy”。确认 MetaMask 上的交易,并等待它部署 Requester 合约。

确保是在 Goerli。
调用合约
当 QrngRequester 部署完成后,转到 Deploy,运行交易,然后单击已部署合约下的请求者并下拉列表。
现在选择 setRequestParameters 并下拉菜单来设置所有的参数。

将以下内容添加到函数的相应字段中。
- _airnode:所需 QRNG 服务提供者的 airnode 地址。从 ANU Airnode 查看它的值。
- _endpointIdUint256: Airnode 端点 ID 将返回一个随机数。从 ANU Airnode 查看它的值。
- _sponsorWallet:一个由请求者合约地址、Airnode 地址和 Airnode xpub 派生的钱包。这个钱包用来支付 gas 费用,以获得一个随机数。赞助者钱包必须使用命令 derived -sponsor-wallet-address 从 Admin CLI 中派生。使用命令输出的赞助者钱包地址的值。
在设置好 Airnode CLI,安装并构建所有依赖项和包之后,运行以下命令来派生自己的_sponsorWallet。
Linux
npx @api3/airnode-admin derive-sponsor-wallet-address \ --airnode-xpub xpub6CUGRUo... \ --airnode-address 0xe1...dF05s \--sponsor-address0xF4...dDyu9Windows
npx @api3/airnode-admin derive-sponsor-wallet-address ^ --airnode-xpub xpub6CUGRUo... ^ --airnode-address 0xe1...dF05s ^ --sponsor-address 0xF4...dDyu9用一些测试网 ETH 资助 sponsorWallet。单击交易按钮并确认交易以设置参数。

发出请求,单击 makeRequestUint256 按钮调用函数,并发出完整的请求。

现在可以前往并检查自己的新交易了。https://goerli.etherscan.io/sponsorWallet`
可能需要等待一段时间,因为 Airnode 调用 AirnodeRrpV0.sol 中的 fulfill() 函数,它将使用函数 fulfillment functionid 在 fulfillAddress 处回调请求者合约来传递数据 (随机数)。

在这里,我们可以看到最新的 fulfillment 交易。
现在回到 Remix 并点击 latestRequest 按钮检查响应。

如果回调已经成功完成,randomNumber 将会出现。waitingFulfillment 的值将为假。
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
您可能感兴趣
-
火币HTX《VIP守护者计划》|Yarra:守护每一次交易体验《VIP守护者计划》是火币HTX推出的系列访谈栏目,聚焦大客户服务实践,每周二邀请平台一线服务团队分享真实服务经历、市场观察及客户需求洞察,传递长期主义的服务理念,展现火币HTX专业、稳健的客户服务能
-
三星电话会:存储供不应求“明年比今年更紧张”,60-70%产能已分给长期协议,HBM4收入将占六成作者:董静在生成式AI与Agentic AI(代理型AI)需求的强力驱动下,三星电子2026年第二季度交出了一份极具爆发力的答卷。 财报数据显示,三星电子当季实现营收171.5万亿韩元,同比暴增130
-
美股芯片半导体跌跌不休,到底要回调到什么时候?近来美股的存储芯片板块抛售,已经不能用单纯的"回调"两个字来形容了。昨晚,SK海力士、美光、闪迪这些昔日的芯片明星股继续集体下挫。费城半导体指数(SOX)从一个月前14,600多点的高位,一路跌到目前
-
不发币、只收过路费:Visa 的稳定币算盘比发行方更狠作者:Chloe,ChainCatcherVisa 公布 2026 年第三季度财报,净营收 116 亿美元、同比增长 14%,季度内支付额首度突破 4 万亿美元,是公司历史上的第一次。但真正被市场放大
-
早报|富达 Q3 信号报告:BTC、ETH、SOL 的净未实现盈亏均处历史低位,多项指标接近投降区间;韩国金融委拟提交统一数字资产法案,在野党同步推动废除加密税整理:ChainCatcher过去 24 小时发生了哪些重要的事? 泰国 SEC 指控 Bitkub 高管隐瞒 5000 万美元黑客损失,已提起刑事投诉 ChainCatcher 消息,泰国证券交易委
-
加密行业每日观察:美国仲裁协会(AAA)设立 Web3 专项小组,链上纠纷进入“正规军”调解时代直击痛点:填补 Web3 商业纠纷的司法空白 过去,加密行业的纠纷往往因为智能合约的不可篡改性(Code is Law)和去中心化底层架构,难以在传统法庭获得有效且具备执行力的裁决。 为了彻底解决这一
-
Bitget UEX 日报|特朗普称美军将痛击伊朗;美联储按兵不动沃什重申2%目标;微软业绩超预期Meta资本开支大增 (2026年07月30日)一、热点要闻 美联储动态 美联储按兵不动,沃什重申2%通胀目标并淡化前瞻指引美联储维持利率不变。主席沃什在新闻发布会开场明确重申,委员会坚定致力于实现2%的同比通胀目标,不存在“软目标”或任何其他隐含
-
沃什:2% 通胀目标不动摇,保持独立性,关注AI变革(附全文)美联储主席沃什将市场利率上行视为金融条件已在收紧的信号,同时重申2%通胀目标“没有任何弹性空间”,并宣布实质性退出前瞻指引,呼吁华尔街脱离对央行表态的依赖,“去捕捉真实的经济信号”。 美联储以9比3的
- 成交量排行
- 币种热搜榜
World Liberty Financial USDv
泰达币
比特币
以太坊
USD Coin
Solana
瑞波币
Ronin Network
币安币
莱特币
艾达币
狗狗币
大零币
Wormhole
比特现金
SHIB
UNI
OKB
AR
ICP
DOT
LUNC
YGG
DYDX
LPT
ETC