【发布时间】:2021-09-02 13:04:18
【问题描述】:
我正在创建一个开发应用程序,例如每 5 分钟后我想从我的 erc20 代币的智能合约中运行一些代码。我如何在每 5 分钟后调用该函数?
【问题讨论】:
我正在创建一个开发应用程序,例如每 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;
}
}
【讨论】: