Anti-Sybil Idea

Moonbound Anti-Sybil Protection Overview

Objective: Prevent wallet splitting and automated Sybil attacks during the Moonbound bonding curve sale, without introducing friction for real users.


The Problem: To enforce a 10% per-wallet token holding cap, we must deter attackers from:

  • Spinning up multiple wallets

  • Rapidly approving and buying tokens in batches

Because Kaspa's EVM Layer 2 runs at 10 blocks per second, attackers can exploit fast wallet rotations if not restricted properly.


Solution Summary: We implement a short, block-based delay between a user's first approval of wKAS and their first buy from the bonding curve. This delay prevents bots from performing approve + buy actions within the same block or rapid sequence.


How It Works:

  1. Track First Approval Block

mapping(address => uint256) public firstApprovalBlock;

function registerApproval() external {
    if (firstApprovalBlock[msg.sender] == 0) {
        firstApprovalBlock[msg.sender] = block.number;
    }
}
  1. Enforce a Short Delay Before Buying

  1. Track Buyers

This ensures that only first-time buyers are subject to the delay. Subsequent buys from the same wallet are not restricted.


Benefits:

  • Blocks same-block approve+buy combos

  • Disrupts Sybil bots using wallet cycling

  • Invisible to real users (a 2.5s delay fits naturally into normal UX)

  • No off-chain dependencies or wKAS contract modification


Frontend Integration:

  • After user approves wKAS, call registerApproval() in the same or next transaction

  • Display an optional note: "Your approval was registered. Please wait 2–3 seconds before buying."


Result: With just one additional mapping and a lightweight timing check, Moonbound gains powerful on-chain Sybil resistance tailored to Kaspa's high-speed L2 β€” without compromising UX for real users.

Last updated