Skip to main content
Attribution links on-chain deposit and withdrawal volume back to your integration — enabling fee sharing and volume reporting in the Developer Portal. The SDK embeds attribution automatically on every transaction it builds.

Setup

You must request a builder code from Gauntlet — it is not self-serve. Request one as part of your partnership onboarding. The Gauntlet indexer must recognize your specific code for volume to be counted against your integration; using an arbitrary string will append bytes to calldata but attribution will not be tracked. Your builder code is separate from your API key — you may receive them together or at different stages of onboarding. Once you have it, set builderCode on GauntletClient:
Without builderCode, AttributionMode.PUBLIC appends nothing and transactions are unattributed.

How It Works

The SDK encodes attribution as an ERC-8021 calldata suffix appended to every transaction. It does not affect contract execution — the Gauntlet indexer reads it to attribute the volume. ERC-8021 format:
For example, builder code "acme" (4 bytes) becomes 0x61636d650400 followed by the 16-byte marker 80218021802180218021802180218021.

Sending Transactions

How attribution is carried depends on which submission path you use.

Path 1 — step.payload + sendTransaction

Attribution is baked into payload.data — the full calldata is already {ABI-encoded call}{attribution suffix}. The wallet receives a single opaque hex string and sends it as-is. Attribution cannot be lost regardless of what wallet or provider you use.
Best for: backend scripts, server-side signing, embedded wallets (Privy, Dynamic, passkey signers), any flow that uses eth_sendRawTransaction directly, or anywhere you want eth_call pre-simulation on the exact calldata that will be broadcast.

Path 2 — step.tx + writeContract

Attribution is in step.tx.attribution as standalone bytes. You must pass it as dataSuffix to writeContract — wagmi appends it to the ABI-encoded calldata before sending. If dataSuffix is omitted or the EIP-1193 provider strips it, the transaction succeeds on-chain but volume is not attributed.
Best for: browser wallets via wagmi (MetaMask, Coinbase Wallet, WalletConnect), or when you need wagmi’s type-safe simulation hooks (simulateContract). Note: Most major EIP-1193 providers used with wagmi honor dataSuffix. If you’re using a custom or obscure provider, verify it forwards unknown WriteContractParameters fields before relying on this path for attribution.

Attribution Modes

Currently only PUBLIC is supported. ENCODED and PRIVATE throw UnimplementedFeatureError if used.

Monitor Attributed Activity

Monitoring attribution is under development and not currently available.

Initialize

Query Attributed Activity

API
Use the vault’s chain_id:address string (e.g. gtBTC on Ethereum is 1:0xeff0ae5b39271b33f448cd408b51dc8aa72a672b) to filter events by vault: GET /v1/events?vault_id=1:0xeff0ae5b39271b33f448cd408b51dc8aa72a672b. Use transactions for user-facing activity and confirmations. Use events for monitoring, reconciliation, and reporting.

Trend Activity Over Time

API

Monitoring Options

On-Chain Verification

For trustless monitoring, read events directly from the gtUSDa vault on Base:

What’s Next

Attribution without SDK

Add attribution manually using Privy embedded wallets or wagmi.

SDK Reference

Full result shape, type definitions, and error reference.

Deposit Your First Dollar

SDK-based deposit and withdrawal flow using the Gauntlet SDK.

Deployed Vaults

gtUSDa contract addresses for on-chain verification.