Chainlink VRF 回调函数 gas 超过 gasLimit 上限如何解决?

Chainlink Chainlink 提出于 2022-07-18 17:58 3900 浏览

请教一下,VRF 在接收结果的函数中,对数组进行赋值会无法成功执行,测试过在其他函数中执行循环和数组赋值没问题,放到 VRF 的回调函数中就不行。

WechatIMG629.png

后来发现,VRF 在回调函数中做了一个小型的循环,花费的 gas 费高,如果我有较大的循环和处理,有没比较好的方法能减少 gas 费?

举个例子,我外部有个 10000 个值的 mapping,想在回调里循环并给对应的赋值,现在需要循环 10000 次并对应赋值,这样的话就会超出 Chainlink 回调函数的 gaslimit 上限。

最佳答案

2022-07-25 10:48

Chainlink VRF 节点在收到随机数的 request 之后,会通过执行 fulfillRandomWords() 函数来给用户的合约写入随机数。

然而为了避免合约错误,在 fulfillRandomWords() 函数中会有一个 gaslimit 的限制,这个限制主要是为了防止 VRF subscription 中的余额被一个错误的交易消耗光。你最开始遇到的问题大概率是 fulfillment 函数消耗的 gas 费用超过了gaslimit。

如果说在 fullfillRandomWords() 中要使用多个随机数的话,可以一次申请多个随机数写入数组,这样比在 fullfillRandomWords() 通过算法计算出多个随机数要节省 gas。

其它 0 个回答

写回答

你需要登录后才可以回答问题,登录