Skip to content

๐Ÿš€๐Ÿ’ฐโœจ OpDrop โ€” Token Airdrop Tool for OPNet ๐Ÿช‚๐Ÿ’Ž Drop tokens to hundreds of wallets in one click ๐ŸŽฏ๐Ÿ”ฅ Merkle claim pools on Bitcoin L1 โšก๐Ÿงฑ

Notifications You must be signed in to change notification settings

AnomalySecured/OpDrop

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

12 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿช‚๐Ÿ’Ž๐Ÿš€โœจ๐Ÿ”ฅ OpDrop ๐Ÿ”ฅโœจ๐Ÿš€๐Ÿ’Ž๐Ÿช‚

๐Ÿš€๐Ÿš€๐Ÿš€ Token airdrop tool for OPNet โšกโšกโšก โ€” Bitcoin L1 smart contracts ๐Ÿงฑ๐Ÿงฑ๐Ÿงฑ๐Ÿ’ช๐Ÿ’ช๐Ÿ’ช

๐Ÿ’ฐ๐Ÿ’ฐ๐Ÿ’ฐ Drop tokens to hundreds of addresses in one click ๐Ÿ‘†๐Ÿ’ฅ or set up a merkle claim pool ๐ŸŒณ๐ŸŒณ๐ŸŒณ and let recipients come to you ๐Ÿƒโ€โ™‚๏ธ๐Ÿ’จ๐ŸŽฏโœจโœจโœจ

๐ŸŒ๐Ÿ”—๐ŸŒ Live on IPFS: https://ipfs.opnet.org/ipfs/QmUzDHkNDjL3inLbj2dri3GcD4zz5RKuyLziAuwFHh9s81/ ๐Ÿ”—๐ŸŒ๐ŸŒ

๐Ÿ“œ๐Ÿ—๏ธโ›“๏ธ Contract (OPNet Testnet): opt1sqqytmrzdehfwsdld55k98efp37cqc6mcjc5sx08k โ›“๏ธ๐Ÿ—๏ธ๐Ÿ“œ


๐ŸŽฏ๐ŸŽฏ๐ŸŽฏ What It Does ๐ŸŽฏ๐ŸŽฏ๐ŸŽฏ

๐Ÿ”ฅ๐Ÿ’ธโšก Direct Send โ€” Paste addresses ๐Ÿ“‹, pick an amount ๐Ÿ”ข, hit send ๐Ÿš€. Tokens go out immediately ๐Ÿ’จ๐Ÿ’จ๐Ÿ’จ via a single on-chain transaction โ›“๏ธ. No waiting โฐโŒ, no claim links ๐Ÿ”—โŒ, no middlemen ๐Ÿง‘โ€๐Ÿ’ผโŒ. Just pure unfiltered airdrop energy ๐Ÿช‚๐Ÿ’Ž๐Ÿ’Ž๐Ÿ’Žโšกโšกโšก

๐ŸŒณ๐Ÿงฎ๐Ÿ” Merkle Claim Pools โ€” Deposit tokens into a pool ๐ŸŠโ€โ™‚๏ธ๐Ÿ’ฐ with a merkle root ๐ŸŒณ๐ŸŒณ. Recipients paste the shared recipient list ๐Ÿ“‹๐Ÿ“‹, their proof is computed locally in-browser ๐Ÿง ๐Ÿ’ป๐Ÿ”’, and they claim their share ๐ŸŽ๐ŸŽ‰๐ŸŽŠ. You can withdraw whatever's left at any time ๐Ÿ’ฐโ†ฉ๏ธ๐Ÿ‘‘

๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰ My Drops โ€” Dashboard ๐Ÿ–ฅ๏ธ showing every airdrop you've created ๐Ÿช‚๐Ÿช‚๐Ÿช‚. Track claim progress with live percentages ๐Ÿ“Š๐Ÿ“ˆ, withdraw unclaimed tokens from active pools ๐Ÿ’ฐ๐Ÿ’ฐ๐Ÿ’ฐ๐Ÿฆ

๐Ÿ› ๏ธ๐Ÿ”งโš™๏ธ Stack ๐Ÿ› ๏ธ๐Ÿ”งโš™๏ธ

  • โš›๏ธโš›๏ธโš›๏ธ Frontend: React 19 + TypeScript + Vite ๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ
  • ๐Ÿ”—โ›“๏ธ๐Ÿงฑ Contract Integration: OPNet SDK (opnet, @btc-vision/bitcoin, @btc-vision/transaction) ๐Ÿ’Ž๐Ÿ’Ž๐Ÿ’Ž
  • ๐ŸŒณ๐ŸŒณ๐ŸŒณ Merkle Tree: Custom SHA-256 implementation ๐Ÿ”, browser-native ๐ŸŒ, no dependencies ๐Ÿšซ๐Ÿ“ฆ
  • ๐ŸชŸโœจ๐Ÿ’… Styling: Pure CSS glassmorphism ๐Ÿซง๐Ÿซง๐Ÿซง โ€” no Tailwind โŒ, no UI library โŒ โ€” just vibes โœจโœจโœจ
  • ๐Ÿงชโœ…๐Ÿ”ฌ Tests: 229 tests via Vitest ๐Ÿ’ช๐Ÿ’ช๐Ÿ’ช ALL PASSING โœ…โœ…โœ…โœ…โœ…

๐Ÿƒ๐Ÿƒ๐Ÿƒ Running Locally ๐Ÿƒ๐Ÿƒ๐Ÿƒ

git clone https://github.com/AnomalySecured/OpDrop.git  # ๐Ÿ“ฅ๐Ÿ“ฅ๐Ÿ“ฅ
cd OpDrop                                                  # ๐Ÿ“‚๐Ÿ“‚๐Ÿ“‚
npm install                                                # ๐Ÿ“ฆ๐Ÿ“ฆ๐Ÿ“ฆ
npm run dev                                                # ๐Ÿš€๐Ÿš€๐Ÿš€

๐Ÿ–ฅ๏ธ Opens at http://localhost:5173 ๐ŸŒ. Requires the OP_WALLET browser extension ๐Ÿ”Œ๐Ÿ”‘๐Ÿ’ณ

๐Ÿ“‹๐Ÿ“‹๐Ÿ“‹ Scripts ๐Ÿ“‹๐Ÿ“‹๐Ÿ“‹

Command What
npm run dev ๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ Dev server with HMR โšกโšกโšก
npm run build ๐Ÿ—๏ธ๐Ÿ—๏ธ๐Ÿ—๏ธ TypeScript check + production build ๐Ÿ“ฆ๐Ÿ“ฆ๐Ÿ“ฆ
npm run test ๐Ÿงช๐Ÿงช๐Ÿงช Run all 229 tests โœ…โœ…โœ…
npm run lint ๐Ÿ”๐Ÿ”๐Ÿ” ESLint ๐Ÿงน๐Ÿงน๐Ÿงน
./host.sh ๐Ÿš€๐Ÿš€๐Ÿš€ Auto-install + dev server on 0.0.0.0 ๐ŸŒ๐ŸŒ๐ŸŒ

๐Ÿ›๏ธ๐Ÿ›๏ธ๐Ÿ›๏ธ Architecture ๐Ÿ›๏ธ๐Ÿ›๏ธ๐Ÿ›๏ธ

src/
  abi/            ๐Ÿ“œ๐Ÿ“œ๐Ÿ“œ Contract ABI definition
  components/     ๐Ÿงฉ๐Ÿงฉ๐Ÿงฉ Reusable UI (Alert, Modal, ProgressBar, Spinner, etc.)
  config/         โš™๏ธโš™๏ธโš™๏ธ Network configs, contract addresses
  contracts/      ๐Ÿ“‹๐Ÿ“‹๐Ÿ“‹ Contract source reference documentation
  hooks/          ๐Ÿช๐Ÿช๐Ÿช useDropOp (contract calls), useWallet, useNetwork
  pages/          ๐Ÿ“„๐Ÿ“„๐Ÿ“„ SendPage, ClaimPage, MyDropsPage
  services/       ๐Ÿ”ง๐Ÿ”ง๐Ÿ”ง Singleton provider + contract instance cache
  types/          ๐Ÿ“๐Ÿ“๐Ÿ“ TypeScript interfaces for contract + app state
  utils/          ๐Ÿ› ๏ธ๐Ÿ› ๏ธ๐Ÿ› ๏ธ Merkle tree, CSV parsing, formatting
  test/           ๐Ÿงช๐Ÿงช๐Ÿงช 12 test suites, 229 tests โœ…โœ…โœ…

โš™๏ธ๐Ÿ”„๐Ÿ’ก How It Works โš™๏ธ๐Ÿ”„๐Ÿ’ก

  1. ๐Ÿ”“๐Ÿ”‘โœ… Creator approves the OpDrop contract to spend their tokens (increaseAllowance)
  2. ๐Ÿ“ค๐Ÿš€๐Ÿ’ธ Creator calls createAirdrop (claim mode) or directAirdrop (direct mode)
  3. ๐Ÿ“‹โœ‰๏ธ๐Ÿ—ฃ๏ธ For claim mode: creator shares the recipient list off-chain
  4. ๐ŸŒณ๐Ÿงฎ๐Ÿง  Recipients paste the list into the Claim page โ€” merkle proof is computed client-side
  5. โœ…๐Ÿ’Ž๐ŸŽ‰ Recipient calls claim with their proof โ€” contract verifies and transfers tokens
  6. ๐Ÿ’ฐโ†ฉ๏ธ๐Ÿ‘‘ Creator can withdraw unclaimed tokens at any time

๐Ÿ”’๐Ÿ›ก๏ธ๐Ÿฐ Contract Security ๐Ÿฐ๐Ÿ›ก๏ธ๐Ÿ”’

The on-chain contract ๐Ÿ“œโ›“๏ธ (deployed separately as AssemblyScript/WASM ๐Ÿงฑ) implements:

  • ๐Ÿ›ก๏ธ๐Ÿ›ก๏ธ๐Ÿ›ก๏ธ ReentrancyGuard on all write methods
  • ๐Ÿงฎ๐Ÿงฎ๐Ÿงฎ SafeMath for all u256 operations
  • ๐Ÿ”„๐Ÿ”„๐Ÿ”„ Checks-effects-interactions pattern
  • ๐Ÿšซ๐Ÿšซ๐Ÿšซ Double-claim prevention via nested address mapping
  • ๐Ÿ“๐Ÿ“๐Ÿ“ Bounded loops (max 1000 recipients per direct airdrop)
  • ๐Ÿ‘‘๐Ÿ‘‘๐Ÿ‘‘ Only-creator authorization on withdrawals
  • ๐ŸŒณ๐ŸŒณ๐ŸŒณ Merkle proof verification for claim security

๐Ÿ’Œ๐Ÿ’Œ๐Ÿ’Œ A Brief & Entirely Professional Note to Danny ๐Ÿ’Œ๐Ÿ’Œ๐Ÿ’Œ

Danny. ๐Ÿซก๐Ÿซก๐Ÿซก

This project exists because of you ๐Ÿซต๐Ÿซต๐Ÿซต. Not in the inspirational way ๐ŸŒˆโŒ โ€” in the "someone had to build it because you mass-pinged a Discord server ๐Ÿ“ข๐Ÿ“ข๐Ÿ“ข๐Ÿ’€๐Ÿ’€๐Ÿ’€ asking why there's no airdrop tool" way. Every line of code carries the faint echo of your messages ๐Ÿ‘ป๐Ÿ‘ป๐Ÿ‘ป. Every merkle leaf ๐ŸŒฟ is hashed with the spiritual energy โœจ๐Ÿ”ฎโœจ of your relentless optimism ๐Ÿ˜Š๐Ÿ˜Š๐Ÿ˜Š. Every glass card ๐ŸชŸโœจ glows with the warmth ๐Ÿ”ฅ of your unwavering belief that things should simply exist when you want them to ๐Ÿช„๐Ÿ’ซ๐ŸŽฉ๐Ÿ‡.

You asked for an airdrop tool on a Monday ๐Ÿ“…โ˜•. It is now built ๐Ÿ—๏ธโœ…๐ŸŽ‰. The merkle trees are balanced โš–๏ธ๐ŸŒณ. The proofs verify โœ…โœ…โœ…. The glass cards shimmer against the void ๐Ÿซงโœจ๐Ÿ’Ž like the tears ๐Ÿ˜ญ๐Ÿ˜ญ๐Ÿ˜ญ of a developer who hasn't slept ๐Ÿ’€โ˜•โ˜•โ˜•โ˜•โ˜•.

We didn't add a "Danny Mode" ๐Ÿ”ด๐Ÿšจ button that just sends all tokens to your address ๐Ÿ’ธ๐Ÿ’ธ๐Ÿ’ธ, despite the fact that we both know that's what you actually wanted ๐ŸŽฏ๐Ÿ˜. The architecture wouldn't support it ๐Ÿš๏ธ๐Ÿ’ฅ. The architecture wouldn't support a lot of things you've asked for ๐Ÿ’€๐Ÿ“‹๐Ÿ“‹๐Ÿ“‹. But it supports this ๐Ÿ’ช, and honestlyโ“ That should be enough ๐Ÿคทโ€โ™‚๏ธโœ….

You're welcome ๐Ÿ™๐Ÿ™๐Ÿ™. Please don't request anything else for at least 48 hours โฐ๐Ÿ›‘๐Ÿšซโ›”๐Ÿ™…โ€โ™‚๏ธ.

With the deepest professional regard ๐ŸŽฉ๐Ÿง and a mass airdrop of respect ๐Ÿช‚๐Ÿช‚๐Ÿช‚๐Ÿ’๐Ÿ’๐Ÿ’,

โ€” The Dev ๐Ÿ‘จโ€๐Ÿ’ป๐Ÿ’€๐Ÿ˜ตโ€๐Ÿ’ซ๐Ÿซ 


๐Ÿ“„โš–๏ธ License ๐Ÿ“„โš–๏ธ

MIT ๐Ÿ“œ. Do whatever you want ๐Ÿคทโ€โ™‚๏ธ๐ŸŽ‰. Danny will anyway ๐Ÿคก๐ŸŽช๐Ÿช‚๐Ÿ’€๐Ÿ’€๐Ÿ’€.

About

๐Ÿš€๐Ÿ’ฐโœจ OpDrop โ€” Token Airdrop Tool for OPNet ๐Ÿช‚๐Ÿ’Ž Drop tokens to hundreds of wallets in one click ๐ŸŽฏ๐Ÿ”ฅ Merkle claim pools on Bitcoin L1 โšก๐Ÿงฑ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages