mint.fast docs

Claim fees

How Fletcher recipients pull ETH from SocialFeeVault (social attestation or wallet claim).

Harvest deposits the Fletcher cut into SocialFeeVault, keyed by identity:

  • social: keccak256(platform ‖ handleHash)
  • wallet: keccak256(uint8(3) ‖ paddedAddress)

The vault owner (2/4 multisig) cannot sweep escrow. Claims are the only exit.

Wallet beneficiaries

If your Fletcher row is a wallet (kind 3), or you are the default creator wallet from an empty create:

function claimWallet(address payable to) external;

Permissionless and relayer-friendly, but it can only pay to for the key derived from to. Call with to equal to the beneficiary wallet.

await walletClient.writeContract({
  address: feeVault,
  abi: vaultAbi,
  functionName: "claimWallet",
  args: [beneficiaryWallet],
})

Social beneficiaries (X / GitHub)

function claim(
    uint8 platform,      // 1 = X, 2 = GitHub
    bytes32 handleHash,  // keccak256(bytes(normalizedHandle))
    address claimer,
    uint256 nonce,
    uint256 deadline,
    bytes calldata signature
) external;

Flow:

  1. Prove you own the handle via the mint.fast attester (OAuth).
  2. Attester returns an EIP-712 signature over SocialClaim(...).
  3. Anyone submits claim with that signature. Payout goes to claimer inside the signed message.
  4. Nonce increments. Attestation deadlines cannot sit farther than MAX_ATTESTATION_TTL (1 hour) ahead of the claim tx.

Domain: name MintFastSocialFeeVault, version 1.

Typehash:

SocialClaim(uint8 platform,bytes32 handleHash,address claimer,uint256 nonce,uint256 deadline)

Handle hashing

import { keccak256, toBytes, encodePacked } from "viem"

const handle = "alice" // already normalized
const handleHash = keccak256(toBytes(handle))
const platform = 1 // X
const identityKey = keccak256(encodePacked(["uint8", "bytes32"], [platform, handleHash]))

Check accrued(identityKey) and nonces(identityKey) before claiming.

Attesters

  • Initial attester is set at vault deploy
  • New attesters: owner queueAttester, then anyone activateAttester after 24 hours
  • Owner can removeAttester immediately (also cancels a queued add)

Operational note from the contract: keep attester keys in a multisig or HSM and watch Claimed events.