如何限制地址可以与函数交互的次数?
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;
}
}
我想知道如何限制地址可以与函数交互的次数,例如将地址与函数交互的次数保存为 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;
}
}