Skip to content

Developer Docs

6.1 Contracts (high‑level)

  • SqudyToken (BEP‑20, fixed supply)

  • TreasuryRouter (fee splitter; burn/prize/treasury)

  • PrizePoolFactory / PrizePool (tickets, draws, claims)

  • VRFAdapter (Chainlink VRF wrapper)

  • dCampaignCore (campaign registry, quests, adapters)

  • Badge/XP (SBT/metadata; supports off‑chain attestations)

6.2 Events (indexing)

// Token
event Burn(address indexed from, uint256 amount);

// Prize Pools
event Enter(address indexed user, uint256 epoch, uint256 burned, uint256 tickets);
event Draw(uint256 indexed epoch, bytes32 vrfRequestId);
event Win(address indexed user, uint256 epoch, uint256 prizeId, uint256 amount);

// dCampaign
event CampaignCreated(uint256 indexed id, address indexed organizer);
event QuestCompleted(uint256 indexed id, address indexed user, bytes32 questHash);

6.3 Example: Entering a Prize Round (JS)

const amt = ethers.utils.parseUnits('50000', 18); // burn 50k SQUDY
await prizePool.enter(amt); // tickets minted, SQUDY burned

6.4 Example: Creating a Campaign (JS)

await dCampaign.create({
  name: 'Launch Sprint',
  quests: [
    { type: 'twitter_follow', handle: 'Squdira', reward: 10 },
    { type: 'onchain_hold', token: SQUDY, min: '100000' },
  ],
  rewardAsset: SQUDY,
  rewardBudget: ethers.utils.parseUnits('1000000', 18),
  startsAt, endsAt
});