如何限制地址可以与函数交互的次数?

How do I limit the amount of times an address can interact with a function?

我想知道如何限制地址可以与函数交互的次数,例如将地址与函数交互的次数保存为 uint256,以便我可以将其重置为 0有另一个功能,谢谢!

对于单个函数,可以使用一个mapping,其中key是用户地址,value是交互量。

如果您需要扩展功能以跟踪与多个功能的单独交互,键应该是用户地址和功能选择器的组合。例如,您可以将它们组合在 keccak256 哈希中。

pragma solidity ^0.8;

contract MyContract {
    uint256 constant MAX_INTERACTIONS = 10;
    mapping(address => uint256) interactionCount;

    modifier limit {
        require(interactionCount[msg.sender] < MAX_INTERACTIONS);
        interactionCount[msg.sender]++;
        _;
    }

    function foo() external limit {
        // your implementation
    }

    function resetLimit(address user) external {
        // TODO you might want to restrict this function only to an authorized address
        interactionCount[user] = 0;
    }
}