Four contracts share the EVM side. BlinkEscrow receives every deposit and pays refunds; its funds leave through a release to the solver, a refund that any executor can send to any address for any amount, or an owner withdraw. BlinkSolver holds the operator float and is the contract that pays fulfillments and gas drops; its executors pull deposits out of the escrow with pullFromEscrow, which takes any amount, forwards the referrer share it is given to the fee manager, and does not check that the deposits have settled (the operator and the signer cluster enforce that off chain), and any executor can send any amount of float to any address with payToken. BlinkFeeManager holds referrer fees and pays vouchers out of its own balance only, so the voucher key can never reach the solver float. The executor allowlist includes the router and BlinkBridger (the rebalancing contract, which lets any caller on its own allowlist send any amount of solver float into an allowlisted bridge or swap contract with calldata that caller chooses, including the recipient) as well as the operator wallets. BlinkRouter carries every entry point that swaps or takes a signature (aggregator deposits, permit and permit2 variants, gasless witness deposits, same-chain swaps, partner funding) and forwards the resulting funds into the escrow. The router is UUPS-upgradeable by the owner; the escrow, solver, and fee manager are not upgradeable. Solana is covered separately in SVM program. Prefer the router_address from the quote over these constants. A plain cross-chain deposit binds to the escrow, a swap deposit is sent to the router returned by GetSwapInstructions, and a same-chain swap binds to the router.

Escrow deposit entry points

Both emit Deposit and leave the funds in the escrow.

Router deposit entry points

depositWithSwapAndPermit and depositWithSwapAndPermit2 take the same arguments plus the respective signature parameters. Permit variants take the signed permit’s value as permitValue and pass it to the token unchanged, so it must equal the value the user signed; sign for the amount the call pulls, not for an unlimited allowance. They attempt the permit and ignore its failure, so an already-consumed permit does not revert the deposit. Token pulls credit what was actually received, so fee-on-transfer amounts are accounted at the escrow, not assumed. Two witness variants back gasless orders: depositTokenWithPermit2Witness and depositWithSwapAndPermit2Witness take an owner plus a permit2 SignatureTransfer witness signature binding the quote hash (and, for swaps, the bridge token and floor), so an operator wallet can submit the deposit on the signer’s behalf. Only callers on the router’s witness caller allowlist can call them; the owner manages it with setWitnessCaller(address caller, bool allowed), which emits WitnessCallerSet, and any other caller reverts with Unauthorized(). The allowlist holds the operator’s gasless relayer wallets and any integrator relayer wallet we have allowlisted. Their optional permitSignature is an EIP-2612 permit approving permit2 for the maximum uint256 value, signed with the same deadline as the permit2 signature; the router rebuilds the permit from those two values, so a permit signed for anything else is ignored and the deposit then needs a standing permit2 allowance.

Same-chain swap

Swaps and pays the recipient in one transaction, on the router. Delivery is floored at minAmountOut and capped at amountOut; the referrer share is forwarded to the fee manager and any surplus to the solver. swapAndForwardWithPermit adds permitValue, deadline, v, r, s and swapAndForwardWithPermit2 adds nonce, deadline, signature. See Same-chain swaps.

Partner funding

Forwards an allowlisted funding token to the solver and emits PartnerFunding tagged with the partner id, the partner’s account id left-padded to 32 bytes as returned by BuildPartnerFunding. The indexer credits the partner’s balance from the event once the transaction is final. See PartnerApi funding.

Voucher redemption

On the fee manager, callable by anyone while the solver is not paused. The EIP-712 signature (domain name BlinkFeeManager, version 1, the fee manager as verifying contract) is verified against the current voucher-signer set, the id is marked used so it cannot be redeemed twice, and the amount is paid to referrer from the fee manager’s balance. Releases and same-chain swaps fill that balance with the referrer share; the solver float is never touched. A voucher’s router_address is the fee manager it redeems against. See Referral program.

Operator functions

Restricted to the owner, registered executors, or BlinkBridger callers, listed for completeness.

Events

The indexer matches Deposit and SameChainSwap against stored quotes by quoteHash.

Reverts