gitpad
Protocol

Contracts

Deployed addresses, what each contract does, the EIP-712 authorizations and exactly what the owner can and cannot change.

Deployed addresses

Robinhood Chain mainnet, chain id 4663. The gitpad contracts are verified on Sourcify with an exact match.

Each market's token and vault addresses are listed on its market page and returned by GitpadFactory.marketAt(i).

GitpadFactory

Creates markets and holds the fixed launch terms.

  • launch(params, signature) creates the repository's vault (an EIP-1167 clone deployed with CREATE2, salt = the repository id), creates the Flap Tax Token V3 with the vault as tax beneficiary, makes the first buy, sends every bought token to the launcher, refunds unspent ETH and records the market.
  • Enforces one market per repository: tokenOf(repoId) must be empty.
  • Views: marketCount(), marketAt(i), marketsSlice(offset, limit), tokenOf(repoId), repoOf(token), predictVault(repoId).

Fixed terms, as constants:

Constant Value
buyTaxBps / sellTaxBps 200 / 200 (2%)
taxDuration 3650 days
antiFarmerDuration 1 day
dexThresh FOUR_FIFTHS
migratorType Uniswap V2
quoteToken native ETH
mktBps 10000 (all tax to the beneficiary)
tokenVersion Tax Token V3
builderBps 6000
platformBps 4000
discovererShareOfPlatformBps 5000
discoveryWindow 30 days

RepoVault

One clone per repository, the Flap tax beneficiary of its market. Flap pushes ETH to it with a plain call, so receive() is empty and accounting runs on balance changes.

Function Who can call What it does
harvest() Anyone Asks the token's tax processor to dispatch pending tax (errors are ignored), then splits new income.
claimBuilder(to, deadline, signature) Anyone holding a valid signature Harvests, splits, pays everything owed to builders to to, increments builderNonce.
claimDiscoverer() Anyone Harvests, splits, pays the discoverer balance to the launcher.
sweepPlatform() Anyone Harvests, splits, pays the platform balance to the factory's current treasury.
pending() View Builder, platform and discoverer amounts after a sync now.
discoveryEndsAt() View End of the 30-day discovery window.

The split terms are copied into each vault when it is created and no function changes them afterwards.

EIP-712 authorizations

Both types are signed by the verifier under the factory's domain:

EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)
name = "gitpad", version = "1", chainId = 4663, verifyingContract = GitpadFactory
Launch(uint64 repoId,bytes32 nameHash,bytes32 symbolHash,bytes32 metaHash,address launcher,uint256 deadline)
BuilderClaim(address vault,uint64 repoId,address to,uint256 nonce,uint256 deadline)
  • nameHash, symbolHash and metaHash are keccak256 of the exact UTF-8 strings passed to launch. launcher is the address that sends the launch transaction.
  • nonce is the vault's current builderNonce(). It increments on every successful claim.
  • The factory's current verifier is checked at launch time and at claim time.
  • Signatures must be 65 bytes with v in {27, 28} and a low s.
  • The web app sets launch authorizations to expire after 20 minutes and claim authorizations after 15 minutes.
  • Helpers: launchDigest(...), hashLaunch(...), builderClaimDigest(vault, repoId, to, nonce, deadline), domainSeparator().

Owner powers

The factory has an owner, transferable in two steps (transferOwnership, then acceptOwnership by the new owner). The owner can call exactly four other functions:

Function Effect
setVerifier(address) Replaces the key that authorizes launches and builder claims, for all vaults, immediately.
setTreasury(address) Changes where every vault's sweepPlatform pays the platform share. The Flap commission receiver of existing markets stays the treasury that was set at their launch; only later launches use the new one.
setPaused(bool) Pauses or resumes new launches only. Trading, harvesting and every claim keep working.
setMinBuy(uint256) Changes the minimum first buy for new launches.

The owner cannot:

  • Move ETH out of any vault directly. Vaults have no owner function.
  • Change the 60/40 split, the discoverer share or the 30-day window of any vault.
  • Change the tax rate, tax duration or beneficiary of any token. They are fixed in Flap at launch.
  • Change the launcher recorded in a vault, or where claimDiscoverer pays.
  • Pause trading, which happens on Flap.
  • Create a second market for a repository id.

Flap

Tokens, the bonding curve, graduation and tax collection are Flap's contracts, not gitpad's. gitpad's contracts call Flap's Portal newTokenV6 to create tokens, and the web app calls swapExactInput and quoteExactInput to trade.

Source

The contracts live in contracts/ in the gitpad repository. ABIs are exported in contracts/abi/. See Self-hosting to build and test them.

Found something wrong? Edit this page on GitHub.