每 x 时间后运行 Solidity 代码

问题描述

我正在创建一个开发应用程序,例如每 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;
    }
}