Chainlink VRF是一种使用VRF(可验证随机函数)来生成链上可验证的随机性的服务,智能契约提供了一个种子(对于提供种子的先知来说这应该是不可预测的),然后种子被用来生成一个随机数,该随机数被送回合同。
我读了一些文件和一些代码,函数RequestRandomWords在智能合同VRFCoordinator中预置到事件日志。然后,Oracle节点以预设的种子和块哈希作为输入,为VRF生成一个种子。最后,VRF利用种子及其私钥产生可验证的随机性。
我的问题是:
哪个块在VRF中被用来生成种子?它看起来像是VRF请求所在块之后的下一个块,但我没有看到文档中的详细信息。
提前谢谢。
发布于 2023-02-10 07:11:07
在其源代码中,请参见VRFCoordinatorV2#getRandomnessFromProof:
bytes32 blockHash = blockhash(rc.blockNum);
if (blockHash == bytes32(0)) {
blockHash = BLOCKHASH_STORE.getBlockhash(rc.blockNum);
if (blockHash == bytes32(0)) {
revert BlockhashNotInStore(rc.blockNum);
}
}使用包含请求的块的散列。
https://ethereum.stackexchange.com/questions/135713
复制相似问题