我正在创建一个开发应用程序,在其中每隔5分钟,我想从我的ERC20代币的智能合约中运行一些代码。如何在solidity中每隔5分钟调用该函数?
Solidity(或一般的EVM字节码)中没有原生延迟(sleep或任何等待一定时间的函数)功能。
每个Solidity函数都作为事务的一部分执行。
因此,您可以在离线应用程序上设置计时器,每5分钟发送一个事务。请注意,在从应用程序发送事务和实际发布包含该事务的区块之间存在延迟(由矿工发布)。
JS示例:
function sendTx() {
myContract.methods.myFunction().send();
};
setInterval('sendTx', 5 * 1000 * 60);
您还可以在Solidity中验证延迟,并仅在自上次操作以来经过5分钟后执行操作。
pragma solidity ^0.8;
contract MyContract {
uint256 lastRun;
function myFunction() external {
require(block.timestamp - lastRun > 5 minutes, 'Need to wait 5 minutes');
// TODO perform the action
lastRun = block.timestamp;
}
}
您可以使用Gelato在智能合约中安排函数调用。 https://www.gelato.network/ 这是一个非常有用的工具,它需要一个智能合约地址、一个函数名称和一个执行计划来执行您选择的任务。