Gully Core

Build

Splits, airdrops and multisend

Three distribution tools, all under Distribute: team splits, airdrops and multisend.

Team splits

One address that pays a team by fixed weights. Send it fees, revenue or tokens, and anyone can pay it out.

Create a split

Open Distribute, Team split. Name the split and list up to 100 payees with their weights. GullyCoreSplitFactory clones a GullyCoreSplit. Its payees and weights are fixed for good. Use the split's address as a fee wallet, a Launchpad's integrator wallet, or a token recipient.

From code, the steps are: read the factory's terms live (the fee and the protocol share the split is frozen with), check the draft, create the split, then run the permissionless pre-steps at each source (collect a locked launch position's LP fees, settle a pool's creator-tax pot). Finally one transaction collects every non-zero credit and runs releaseAll per currency. The SDK builds these calls. Not on npm yet: it runs from a checkout of the repository. See SDK.

Payouts

  • Payouts are permissionless. Anyone may collect what the split is owed and release it. A payout can only reach a payee or the protocol.
  • releaseAll pays every payee in one transaction.
  • A split should not be a token lock's beneficiary. Claim the lock to the split instead (see Locks).

Rotating a payee

A payee may hand its own slot to a new address in two steps. Nobody else can change a slot, a weight or the list.

Split fees

A flat creation fee of about $1 in the native coin, and a protocol share of 0.5% (50 basis points) of everything that flows through the split, frozen into each split when it is created. Governance sets both inside immutable caps (the share's cap is 1%). Increases apply to new splits only and only after a 7-day notice, decreases at once. A creator can refuse a share above a limit it names. The exact values are read from GullyCoreSplitFactory (splitFeeWei(), protocolShareBps(), maxProtocolShareBps(), noticeSeconds()).

Airdrops

One contract per campaign, funded once. Recipients claim their own share with a proof. Whatever is left after the expiry goes back to the creator.

Create a drop

Open Distribute, Airdrop, paste or upload a list of addresses and amounts (or snapshot a token's holders), and pick an expiry. The app builds the Merkle tree, publishes the claims file to IPFS, and GullyCoreDropFactory clones a GullyCoreMerkleDrop funded with the whole amount in the same transaction. The root, the currency, the amount and the expiry are fixed when the drop is created.

From code, the steps are:

  1. Parse the CSV into recipients. There is one Merkle leaf per row, so merge repeated addresses first.
  2. Build the claims file: root, total and every account's proof.
  3. Host the file before creating the drop, and put its URI in metadataURI (at most 2,048 bytes). Any host works, because a claimer rebuilds the root from the file and compares it with the root stored in the drop.
  4. Create, fund and list the drop in one transaction. For an ERC-20, approve the factory first. The expiry is between 1 day and 5 years.

Claiming

  • Each recipient claims on the drop's public page (/airdrop/<drop>). The proof comes from the claims file. Every drop is listed on Airdrops.
  • A claim always pays the listed account, whoever sends the transaction.
  • A contract account (a Safe, a smart wallet) must claim for itself.
  • Never trust the claims file's host. Rebuild the root from the file and compare it with the root the drop stores.

Expiry and sweep

After the expiry, claims close and only the creator may sweep what is left. A token of a different kind sent to the drop by mistake can be rescued by the creator. The drop's own currency can only leave through claims or the sweep after expiry.

Airdrop fee

One flat fee in the native coin per airdrop, charged by the contract itself. Governance sets it inside an immutable cap of ten times the starting value. An increase takes effect only after a 7-day notice, a decrease at once. Fees are paid out only to the governance Safe. The exact amount is read from GullyCoreDropFactory.

Multisend

Send a token or the native coin to many addresses in one transaction.

  • Open Distribute, Multisend and paste a list of addresses and amounts, or upload a CSV. Every amount is parsed exactly in the token's decimals. Nothing is dropped silently.
  • GullyCoreMultisend sends to up to 1,000 recipients per call. A token send needs one approval of the exact total first.
  • Nothing stays in the contract. Every unit goes from you to a recipient in the same transaction.
  • The CSV is one address,amount pair per line. A header, blank lines and # comments are fine. Amounts are exact decimals in whole tokens.

Multisend fee

One flat fee in the native coin per multisend transaction, read from the contract. The fee is per transaction, not per recipient: a list sent in three batches pays it three times.

Wrong or missing? Tell us at @Gully_Labs.