Deployments
The Manager and the Forwarder are both deployed via
CREATE2, so the address is identical on every chain they support. One constant works everywhere: the SDK exports them as TBI_MANAGER_ADDRESS and reads the Forwarder address off each target.
Campaigns currently pay rewards on Arbitrum (42161), Base (8453), and Worldchain (480). Positions can be tracked on other chains (Ethereum, Optimism, and Polygon all appear as event chains today), and a campaign can index activity on one chain while paying on another. See Campaigns, IDs, and Chains.
The reward chains above are the ones with live campaigns today, not a closed list. Confirm current coverage with the Boost team before you hardcode it.
The Claim Function
0x2e7ba6ef.
Three things about the arguments are easy to get wrong:
campaignIdis the index alone. The"chainId:campaignIndex"form is an API convention. On-chain you passcampaignIndex, and the chain you submit to is thechainId.useris the payee, notmsg.sender. Anyone can submit a claim on a user’s behalf and the rewards still land with the user, which is what makes relayer and account-abstraction flows work with no special support.cumulativeAmountgoes in verbatim. It is the user’s lifetime total from the merkle leaf. The Manager tracks what has already been claimed and pays the difference. SubtractingalreadyClaimedyourself produces a leaf that is not in the tree, and the call reverts withInvalidProof().
Revert Selectors
Catching a revert before the user signs costs one
eth_call:
Batch Claims On-Chain
claimAll wraps several claim calls into a single Multicall3 aggregate transaction. Every campaign in the batch must share one reward chain, and the batch is all-or-nothing: one failing subcall reverts the whole transaction.
Reading Claim State On-Chain
The API is served from short caches and can trail the chain by a few minutes right after a claim. When you need the authoritative answer immediately, for example to decide whether to re-enable a claim button, read it from the chain instead: fetch the campaign contract from the Manager, then read how much that address has claimed.The exact ABI fragments for this lookup are not published yet. Until they are, the simpler fix is to mark the campaign claimed client-side once you have a transaction receipt. See Claim Rewards.
Gas
A claim with a five-node merkle proof measured 132,443 gas. Proof length grows with the number of participants in the campaign, so treat that as a reference point rather than a fixed cost. Becauseclaim pays the user argument, you can submit claims through your own relayer and cover the gas without ever holding user rewards. Claim Rewards has the worked example.
Keep Exploring
Claim Rewards
The full claim flow, from proof to receipt.
How Claiming Works
Merkle roots, cumulative amounts, and what claimable really means.