Skip to main content
Pass destinationPayload + destinationGasLimit on a userOps=tx quote to run arbitrary logic atomically after tokens are delivered on the destination chain — stake, swap, vault deposit, etc.
Only supported on userOps=tx routes. Not available for deposit-address routes or Sui destinations.

Quote parameters

Both destinationPayload and destinationGasLimit must be set together — passing only one is rejected.

How it works

Tokens are delivered to Socket’s BungeeReceiver contract (same address on all supported chains via CREATE3), which then calls your executor:
BungeeReceiver pre-approves amount of token before the call, so your executor can pull from it directly.

IBungeeExecutor interface

This is the v3 / OpenRouter single-output signature. Do not use the older marketplace executor (different multi-output signature).
callData is exactly what was passed as destinationPayload at quote time.

Constraints

  • destinationPayload + destinationGasLimit are all-or-nothing.
  • Not supported on Sui or deposit-address (userOps=deposit) routes.
  • BungeeReceiver is deployed on all OPEN_ROUTER_CHAIN_IDS (Ethereum, Arbitrum, Base, Optimism, Polygon, BNB, Gnosis, Linea, Mantle, Scroll, Sonic, Soneium, Unichain, Worldchain, HyperEVM, and more).
  • CalldataExecutor (0xC914...9008) is a reference no-op executor that forwards calldata to an arbitrary target — useful for simple forwarding. No registration needed; security is handled by BungeeReceiver’s per-quote signature verification.

Examples

For example purposes only — audit before production use.