问题描述
我正在创建一个开发应用程序,例如每 5 分钟后,我想从我的 erc20 令牌的智能合约中运行一些代码。我如何在每 5 分钟稳固后调用该函数?
解决方法
Solidity(或一般的 EVM 字节码)中没有原生延迟(睡眠,或任何等待一段时间的东西)函数。
每个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;
}
}