When to Render It
CheckrequiresForwarderDeposit on the campaign. When it is false, render nothing from this page and let users deposit as usual. When it is true, this button is the only way a new position starts earning.
Activation is a one-time event. Once a user’s first deposit routes through the Forwarder, every later deposit, withdrawal, and transfer counts normally. They never have to use the Forwarder again.
The Component
components/deposit-button.tsx
Event Chain, Not Reward Chain
The Claim Button needs the wallet on the reward chain. This one needs it on the event chain,campaign.target.chainId, because that is where the vault is. For same-chain campaigns they are identical. For cross-chain campaigns a user can end up switching networks between depositing and claiming, which is expected.
Multi-Asset Targets
A few targets accept more than one asset.target.acceptedTokens lists them, and acceptedToken is the default. To let users pick, add a select over acceptedTokens and pass the choice as inputToken:
TbiValidationError before anything reaches the wallet.
Limits
- Same chain, accepted asset only.
buildDepositproduces direct deposits into registered targets. There is no swap or bridge routing here. Users holding a different asset or sitting on another chain need to swap or bridge first. - Deposits only. There is no withdraw path through the Forwarder. Users exit through your protocol directly, and doing so does not affect their activation.
- Registered targets only. If
useForwarderTargetreturnsnull, the vault is not set up for Forwarder deposits. Ask the team to register it.
Keep Exploring
Forwarder Deposits
The endpoints, the target shape, and every deposit action type.
Earning Activation
Why a campaign requires Forwarder deposits, and what it does not restrict.
Opportunities List
Surface the campaign this button deposits into.