Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Router Payloads

Description

These are not standalone messages but forward-payload formats carried inside a jetton transfer_notification to the Router. The payload's leading op selects the action — fund a user's per-pool Account for minting, fund someone else's Account, or swap against a pool. The router derives the target pool from the sending jetton wallet, so a payload can only act on a real pool, and any leftover or failed funds are returned to the user via PAY_TO.

Messages

POOL_FUND_ACCOUNT

Opcode : 0x4468de77

This is not a message Op this is a payload format for JETTON_TRANSFER_NOTIFICATION
Access Rights: Not a standalone message — a forward payload any user attaches to a jetton transfer to fund their own per-pool Account (mint request). No authorization is needed: the user funds the Account that belongs to their own address, so they can only ever top up their own.

PathMnemonicTypeDescription
op Uint(32),op POOLV3_FUND_ACCOUNT (0x4468de77)
jetton_target_w Address(267) Address of the jetton0 wallet. Used to compute pool address
enough0 Coins(124) When temporary storage (user account) satisfy both enough0/1 amounts - mint would trigger
enough1 Coins(124) When temporary storage (user account) satisfy both enough0/1 amounts - mint would trigger
needPos Uint(64) Amount of positions that are enough for the order to be executed
passthrough Uint(4) Amount of positions that will be untouched
target_action Uint(32) Routing of the reforge result (ACTION_TARGET_DEFAULT / ACTION_TARGET_ALM) — see target_action in ACCOUNT_SET_ORDER for details
0 Maybe Cell(1) MintOrder0 Cell with mint order
0 op0 Uint(32) Mint mode (MINT_NOT_LESS / MINT_AS_MUCH_AS_POSSIBLE) — see mintOp in ACCOUNT_SET_ORDER for details
0 liquidity0 Uint(128) Amount of liquidity to mint
0 tickLower0 Int(24) lower bound of the range in which to mint
0 tickUpper0 Int(24) upper bound of the range in which to mint
0 receiver Address(267) Address of receiver of the NFT
1 Maybe Cell(1) MintOrder1 Cell with mint order
1 op1 Uint(32) Mint mode (MINT_NOT_LESS / MINT_AS_MUCH_AS_POSSIBLE) — see mintOp in ACCOUNT_SET_ORDER for details
1 liquidity1 Uint(128) Amount of liquidity to mint
1 tickLower1 Int(24) lower bound of the range in which to mint
1 tickUpper1 Int(24) upper bound of the range in which to mint
1 receiver Address(267) Address of receiver of the NFT
2 Maybe Cell(1) MintOrder2 Cell with mint order
2 op2 Uint(32) Mint mode (MINT_NOT_LESS / MINT_AS_MUCH_AS_POSSIBLE) — see mintOp in ACCOUNT_SET_ORDER for details
2 liquidity2 Uint(128) Amount of liquidity to mint
2 tickLower2 Int(24) lower bound of the range in which to mint
2 tickUpper2 Int(24) upper bound of the range in which to mint
2 receiver Address(267) Address of receiver of the NFT
3 Maybe Cell(1) MintOrder3 Cell with mint order
3 op3 Uint(32) Mint mode (MINT_NOT_LESS / MINT_AS_MUCH_AS_POSSIBLE) — see mintOp in ACCOUNT_SET_ORDER for details
3 liquidity3 Uint(128) Amount of liquidity to mint
3 tickLower3 Int(24) lower bound of the range in which to mint
3 tickUpper3 Int(24) upper bound of the range in which to mint
3 receiver Address(267) Address of receiver of the NFT
TL-B Description This is a preliminary tl-b - subject to change **Tlb for POOL_FUND_ACCOUNT**
POOL_FUND_ACCOUNT#4468de77 
    jetton_target_w:MsgAddress
    enough0:(VarUInteger 16)
    enough1:(VarUInteger 16)
    needPos:uint64
    passthrough:uint4
    target_action:uint32
    MintOrder0:(Maybe ^MintOrder0Type)
    MintOrder1:(Maybe ^MintOrder1Type)
    MintOrder2:(Maybe ^MintOrder2Type)
    MintOrder3:(Maybe ^MintOrder3Type)
= ContractMessages;
_ 
    op0:uint32
    liquidity0:uint128
    tickLower0:int24
    tickUpper0:int24
    receiver:MsgAddress
= MintOrder0Type;
_ 
    op1:uint32
    liquidity1:uint128
    tickLower1:int24
    tickUpper1:int24
    receiver:MsgAddress
= MintOrder1Type;
_ 
    op2:uint32
    liquidity2:uint128
    tickLower2:int24
    tickUpper2:int24
    receiver:MsgAddress
= MintOrder2Type;
_ 
    op3:uint32
    liquidity3:uint128
    tickLower3:int24
    tickUpper3:int24
    receiver:MsgAddress
= MintOrder3Type;

POOL_FUND_SOMEONES_ACCOUNT

Opcode : 0x134b6d30

This is not a message Op this is a payload format for JETTON_TRANSFER_NOTIFICATION
Access Rights: Not a standalone message — a forward payload that funds another user's (to_user) Account rather than the sender's. Used by the Arbiter, which acts like a WalletAccount but always credits itself when funding through this path.

PathMnemonicTypeDescription
op Uint(32),op
jetton_target_w Address(267) Address of the second jetton wallet (first is identified by sender_address). Used to compute pool address
to_user Address(267) User to fund
TL-B Description This is a preliminary tl-b - subject to change **Tlb for POOL_FUND_SOMEONES_ACCOUNT**
POOL_FUND_SOMEONES_ACCOUNT#134b6d30 
    jetton_target_w:MsgAddress
    to_user:MsgAddress
= ContractMessages;

POOL_SWAP

Opcode : 0xa7fb58f8

This is not a message Op this is a payload format for JETTON_TRANSFER_NOTIFICATION
Access Rights: Not a standalone message — a forward payload any user attaches to a jetton transfer to swap against a pool. No sender authorization is enforced here: the pool is derived from the sending jetton wallet, swapped funds and excess gas go to the owner/excess addresses carried in the payload, and the swap result is returned via PAY_TO.

PathMnemonicTypeDescription
op Uint(32),op
target_jetton_wallet Address(267) Router's jetton wallet of the OTHER side of the swap. Together with the sending jetton wallet it identifies the pool (and thus the swap direction)
sqrtPriceLimitX96 Uint(160),PriceX96 Limit price. Swap won't go beyond it
minOutAmount Coins(124) Minimum acceptable output amount (slippage guard). If the swap output is below this, it is reverted (LOWER_THEN_MIN_OUT) and funds are returned
owner_address Address(267) Address of the sender
0 Maybe Cell(1) multihop_cell Cell with multihop data
0 target_address Address(267) Address of the receiver
0 ok_forward_amount Coins(124) Amount of GRAM to use for forward payload that would be sent with the result of the swap
0 ok_forward_payload Cell(0),Maybe, Payload Payload for processing by target with swapped coins
0 ret_forward_amount Coins(124) Amount of GRAM to use for forward payload that would be sent with the change for the swap (if any)
0 ret_forward_payload Cell(0),Maybe, Payload Payload for processing by owner with change/return coins
0 excess_address Address(267) Address to get excess gas
1 Cell(0) referral_cell Indexer-only. Partner referral marker, not parsed on-chain (read off-chain by indexer)
1 code Uint(32),Indexer Partner referral code
TL-B Description This is a preliminary tl-b - subject to change **Tlb for POOL_SWAP**
POOL_SWAP#a7fb58f8 
    target_jetton_wallet:MsgAddress
    sqrtPriceLimitX96:uint160
    minOutAmount:(VarUInteger 16)
    owner_address:MsgAddress
    multihop_cell:(Maybe ^Multihop_cellType)
    referral_cell:^Referral_cellType   // optional ref (present only if a ref is left)
= ContractMessages;
_ 
    target_address:MsgAddress
    ok_forward_amount:(VarUInteger 16)
    ok_forward_payload:(Maybe ^Cell)
    ret_forward_amount:(VarUInteger 16)
    ret_forward_payload:(Maybe ^Cell)
    excess_address:MsgAddress
= Multihop_cellType;
_ 
    code:uint32
= Referral_cellType;