Anti-Sybil Idea
mapping(address => uint256) public firstApprovalBlock;
function registerApproval() external {
if (firstApprovalBlock[msg.sender] == 0) {
firstApprovalBlock[msg.sender] = block.number;
}
}Last updated
mapping(address => uint256) public firstApprovalBlock;
function registerApproval() external {
if (firstApprovalBlock[msg.sender] == 0) {
firstApprovalBlock[msg.sender] = block.number;
}
}Last updated
uint256 constant APPROVE_DELAY = 25; // ~2.5 seconds (Kaspa L2 runs at 10 blocks/sec)
function buy(uint256 amount) external {
require(tx.origin == msg.sender, "No contract wallets allowed");
if (firstApprovalBlock[msg.sender] > 0 && lastBuyBlock[msg.sender] == 0) {
require(
block.number > firstApprovalBlock[msg.sender] + APPROVE_DELAY,
"Please wait ~2.5s after approving before buying"
);
}
lastBuyBlock[msg.sender] = block.number;
// Proceed with bonding curve logic
}mapping(address => uint256) public lastBuyBlock;