Pool

This section contains op codes of the pool contract as well as corresponding SDK methods

Off-chain get methods

get_pool_data

Returns the current state of the pool: Jetton token reserves, Jetton wallet addresses and fee parameters.

(int, int, slice, slice, int, int, int, slice, int, int) get_pool_data() method_id;

Arguments

None

Result

Returns PoolData structure containing current state of the pool.

PoolData structure

KeyTypeIndexDescription

reserve0

BN

0

Amount of the first token (in basic token units)

reserve1

BN

1

Amount of the second token (in basic token units)

token0WalletAddress

Address

2

Address of the first Jetton token

token1WalletAddress

Address

3

Address of the second Jetton token

lpFee

BN

4

Liquidity pool fee value

protocolFee

BN

5

Protocol fee

refFee

BN

6

Referral fee

protocolFeeAddress

Address

7

Address for receiving protocol fees

collectedToken0ProtocolFee

BN

8

Amount of collected protocol fees of the first token (in basic token units)

collectedToken1ProtocolFee

BN

9

Amount of collected protocol fees of the second token (in basic token units)

Notes:

  • fee ratio is the value of fee divided by FEE_DIVIDER (10000); so a fee of 1% has a value of 100

get_expected_outputs

Estimate expected result of the amount of jettonWallet tokens swapped to the other type of tokens of the pool.

(int, int, int) get_expected_outputs(int amount, slice token_wallet) method_id;

Arguments

NameTypeDescription

amount

AmountType

Amount of tokens to swap (in basic token units)

jettonWallet

AddressType

Token Jetton address (must be equal to one of the Jetton addresses of the pool)

Result

Returns ExpectedOutputsData structure with expected result of a token swap

ExpectedOutputsData structure

KeyTypeIndexDescription

jettonToReceive

BN

0

Amount of tokens received (in basic token units)

protocolFeePaid

BN

1

Amount tokens paid for protocol fees (in basic token units)

refFeePaid

BN

2

Amount tokens paid for referral fees (in basic token units)

get_expected_tokens

Estimate an expected amount of lp tokens minted when providing liquidity.

(int) get_expected_tokens(int amount0, int amount1) method_id;

Arguments

KeyTypeDescription

amount0

AmountType

Amount of tokens for the first Jetton (in basic token units)

amount1

AmountType

Amount of tokens for the second Jetton (in basic token units)

Result

Returns an estimated amount of liquidity tokens to be minted

get_expected_liquidity

Estimate expected liquidity freed upon burning liquidity tokens.

(int, int) get_expected_liquidity(int jetton_amount) method_id;

Arguments

KeyTypeDescription

jettonAmount

AmountType

Amount of liquidity tokens (in basic token units)

Result

Returns PoolAmountsData structure with expected freed liquidity

PoolAmountsData structure

KeyTypeIndexDescription

amount0

BN

0

Amount of tokens for the first Jetton (in basic token units)

amount1

BN

1

Amount of tokens for the second Jetton (in basic token units)

get_lp_account_address

Get the lp account address of a user

slice get_lp_account_address(slice owner_address) method_id;

Arguments

KeyTypeDescription

ownerAddress

AddressType

Address of a user

Result

Function getLpAccountAddress returns the lp account address of a user

Additional functions

async getLpAccount(params: {
    ownerAddress: AddressType
}): Promise<LpAccount | null>

Arguments

KeyTypeDescription

ownerAddress

AddressType

Address of a user

Result

Function getLpAccount returns an LpAccount object for address returned by getLpAccountAddress

get_jetton_data

Standard jetton 'get' methods from TonWeb JettonMinter.

(int, int, slice, cell, cell) get_jetton_data() method_id;

Arguments

None

Result

Returns a structure with Jetton data

Return structure

KeyTypeIndexDescription

totalSupply

BN

0

Total token supply (in basic token units)

isMutable

boolean

1

If mutable

adminAddress

Address

2

Admin address

jettonContentUri

string

3

Offchain uri with Jetton data

jettonWalletCode

Cell

4

Code of the lp Jetton wallet

get_wallet_address

Get lp wallet address of a user.

slice get_wallet_address(slice owner_address) method_id;

Arguments

NameTypeDescription

ownerAddress

AddressType

Address of a user

Result

Function getJettonWalletAddress returns a calculated lp wallet address of a user

Additional functions

async getJettonWallet(params: {
    ownerAddress: AddressType;
}): Promise<JettonWallet>

JettonWallet is implemented TonWeb.

Arguments

KeyTypeDescription

ownerAddress

AddressType

Address of a user

Result

Function getJettonWallet returns a JettonWallet object for an address returned by getJettonWalletAddress

On-chain queries

On-chain counterparts of getter methods.

Operations table

NameValueDescription

getter_pool_data

0x43c034e6

Sends a message with the current state of the pool

getter_expected_outputs

0xed4d8b67

Sends a message with an estimated result of the token swap

getter_lp_account_address

0x9163a98a

Sends a message with the lp account address of a user

getter_expected_tokens

0x9ce632c5

Sends a message with an estimated amount of lp tokens minted when providing liquidity

getter_expected_liquidity

0x8751801f

Sends a message with estimated liquidity freed upon burning of liquidity tokens

provide_wallet_address

0x2c76b973

Sends a message with the lp wallet address of a user

getter_pool_data (0x43c034e6)

Sends a message with the current state of the pool. On-chain equivalent of get_pool_data.

TL-B

getter_pool_data#43c034e6 query_id:uint64 = InternalMsgBody;

Message body

None

Outgoing messages

Sends a message with current pool data to the sender_address

Response message body

NameTypeDescription

op

uint32

Operation code is equal to getter_pool_data

query_id

uint64

Query id

storage::reserve0

coins

Amount of the first token (in basic token units)

storage::reserve1

coins

Amount of the second token (in basic token units)

storage::token0_address

address

Address of the first Jetton token

storage::token1_address

address

Address of the second Jetton token

ref_fee_data

cell

Cell with fee data

ref_fee_data body

NameTypeDescription

storage::lp_fee

uint8

Liquidity pool fee value

storage::protocol_fee

uint8

Protocol fee

storage::ref_fee

uint8

Referral fee

storage::protocol_fee_address

address

Address for receiving protocol fees

storage::collected_token0_protocol_fee

coins

Amount of collected protocol fees of the first token (in basic token units)

storage::collected_token1_protocol_fee

coins

Amount of collected protocol fees of the second token (in basic token units)

getter_expected_outputs (0xed4d8b67)

Sends a message with an estimated result of the token swap. On-chain equivalent of get_expected_outputs.

TL-B

getter_expected_outputs#ed4d8b67 query_id:uint64 amount:Grams token_wallet:MsgAddress = InternalMsgBody;

Message body

NameTypeDescription

amount

coins

Amount of tokens (in basic token units)

token_wallet

address

Token Jetton address

Outgoing messages

Sends a message with an estimated result of the token swap to sender_address

Response message body

NameTypeDescription

op

uint32

Operation code is equal to getter_expected_outputs

query_id

uint64

Query id

out

coins

Amount of tokens to be received (in basic token units)

protocol_fee_out

coins

Amount tokens paid for protocol fees (in basic token units)

ref_fee_out

coins

Amount tokens paid for referral fees (in basic token units)

getter_lp_account_address (0x9163a98a)

Sends a message with the lp account address of a user. On-chain equivalent of get_lp_account_address.

TL-B

getter_lp_account_address#9163a98a query_id:uint64 user_address:MsgAddress = InternalMsgBody;

Message body

NameTypeDescription

user_address

address

Address of a user

Outgoing messages

Sends a message with the lp account address of a user to sender_address

Response message body

NameTypeDescription

op

uint32

Operation code is equal to getter_expected_outputs

query_id

uint64

Query id

lp_account_address

address

lp account address of a user

Notes:

  • the current version of the contract returns a message with getter_expected_outputs op code instead of getter_lp_account_address so the user must differentiate those messages with some other means

getter_expected_tokens (0x9ce632c5)

Sends a message with an estimated amount of lp tokens minted when providing liquidity. On-chain equivalent of get_expected_tokens

TL-B

getter_expected_tokens#9ce632c5 query_id:uint64 user_address:MsgAddress amount0:Grams amount1:Grams = InternalMsgBody;

Message body

NameTypeDescription

user_address

address

User address (unused)

amount0

coins

Amount of tokens for the first Jetton (in basic token units)

amount1

coins

Amount of tokens for the second Jetton (in basic token units)

Outgoing messages

Sends a message with an estimated amount of liquidity tokens to be minted to sender_address

Response message body

NameTypeDescription

op

uint32

Operation code is equal to getter_expected_tokens

query_id

uint64

Query id

liquidity

coins

Expected amount of liquidity tokens (in basic token units)

getter_expected_liquidity (0x8751801f)

Sends a message with estimated liquidity freed upon burning liquidity tokens. On-chain equivalent of get_expected_liquidity.

TL-B

getter_expected_liquidity#8751801f query_id:uint64 jetton_amount:Grams = InternalMsgBody;

Message body

NameTypeDescription

jetton_amount

coins

Amount of liquidity tokens to burn (in basic token units)

Outgoing messages

Sends a message with estimated liquidity to sender_address

Response message body

NameTypeDescription

op

uint32

Operation code is equal to getter_expected_tokens

query_id

uint64

Query id

amount0_out

coins

Amount of tokens for the first Jetton (in basic token units)

amount1_out

coins

Amount of tokens for the second Jetton (in basic token units)

provide_wallet_address (0x2c76b973)

Sends a message with the lp wallet address of a user. On-chain equivalent of get_wallet_address.

TL-B

provide_wallet_address#2c76b973 query_id:uint64 owner_address:MsgAddress include_address?:Bool = InternalMsgBody;

Message body

NameTypeDescription

owner_address

address

Address of a user

include_address?

uint1

Include user address in the response message

Outgoing messages

Sends a message back to sender with the calculated lp wallet address of a user

Response message body

NameTypeDescription

op

uint32

Operation code is equal to take_wallet_address (0xd1735400)

query_id

uint64

Query id

lp_wallet_address

address

Calculated lp wallet address

ref_address

cell | null

Cell with data if include_address? evaluates to true

ref_address body

NameTypeDescription

included_address

address

Address of a user

Jetton handlers

Handles operations sent from a Jetton wallet.

Operations table

NameValueDescription

burn_notification

0x7bdd97de

Sent by LP wallet after burning LP jettons to release liquidity

burn_notification (0x7bdd97de)

Sent by LP wallet after burning LP jettons to release liquidity.

TL-B

burn_notification#7bdd97de query_id:uint64 jetton_amount:Grams from_address:MsgAddress response_address:MsgAddress = InternalMsgBody;

Message body

NameTypeDescription

jetton_amount

coins

Amount of liquidity tokens to burn (in basic token units)

from_address

address

User address

response_address

address

Address for a response message

Outgoing messages

Sends a message with op excesses (0xd53276db) to response_address

Sends a message with a released amount of both tokens to be received by a user as a result of the burn operation to the router, which initiates pay_to operation to from_address

Router internal message handlers

Handles messages from the router.

Operations table

NameValueDescription

swap

0x25938561

Swap tokens

provide_lp

0xfcf9e58f

Provide liquidity

reset_gas

0x42a0fb43

Reset gas

collect_fees

0x1fcb7d3d

Collect fees

set_fees

0x355423e5

Set new fee parameters

swap (0x25938561)

Swap tokens. This message is received from the router when the user initiates a token swap.

TL-B

ref_bodycell$_ from_real_user:MsgAddress ref_address:MsgAddress = RefBodyCell;
swap#25938561 query_id:uint64 from_user:MsgAddress token_wallet:MsgAddress amount:Grams min_out:Grams ref_bodycell:(Either RefBodyCell ^RefBodyCell) = InternalMsgBody;

Message body

NameTypeDescription

from_user_address

address

User address

token_wallet

address

Incoming Jetton wallet address

amount

coins

Amount of incoming tokens (in basic token units)

min_out

coins

Minimum amount of received tokens (in basic token units)

has_ref

uint1

If referral is present

ref_bodycell

cell

Cell with data

Notes:

  • swap will fail if a user should receive less than min_out of tokens as a result

ref_bodycell body

NameTypeDescription

from_real_user

address

Who initialized the swap

ref_address

address

Referral address; present only if has_ref is 1

Outgoing messages

Sends a message with an amount of the other tokens to be received by a user as a result of the swap to the router, which initiates pay_to operation

Additionally may send a message with referral fees to the router, which initiates pay_to operation to ref_address

provide_lp (0xfcf9e58f)

Provide liquidity for the pool. A user must submit an amount of both tokens to receive lp tokens and add new liquidity to a pool. This message is routed to liquidity pool account with add_liquidity operation code.

TL-B

provide_lp#fcf9e58f query_id:uint64 owner_addr:MsgAddress min_lp_out:Grams amount0:Grams amount1:Grams = InternalMsgBody;

Message body

NameTypeDescription

owner_addr

address

User address

min_lp_out

coins

Minimum amount of received liquidity tokens (in basic token units)

amount0

coins

Amount of the first Jetton token (in basic token units)

amount1

coins

Amount of the second Jetton token (in basic token units)

Outgoing messages

Sends a message to liquidity pool account with add_liquidity operation code.

reset_gas (0x42a0fb43)

Updates the amount of $TON (in nanoTons) on the pool to REQUIRED_TON_RESERVE (10000000) of the pool. The remaining amount of $TON will be sent back to the router.

TL-B

reset_gas#42a0fb43 query_id:uint64 = InternalMsgBody;

Message body

None

Outgoing messages

Sends an empty message back to the router with the remaining $TON

collect_fees (0x1fcb7d3d)

Collect protocol fees. The amount of fees in both tokens will be sent to storage::protocol_fee_address address.

TL-B

collect_fees#1fcb7d3d query_id:uint64 = InternalMsgBody;

Message body

None

Outgoing messages

Sends a message with collected fees in both tokens to the router, which initiates pay_to operation to storage::protocol_fee_address.

set_fees (0x355423e5)

Set new fee values including liquidity pool fees, protocol fees and referral fees as well as an address for receiving collected protocol fees.

TL-B

set_fees#355423e5 query_id:uint64 new_lp_fee:uint8 new_protocol_fee:uint8 new_ref_fee:uint8 new_protocol_fee_address:MsgAddress = InternalMsgBody;

Message body

NameTypeDescription

new_lp_fee

uint8

New liquidity pool fee ratio (multiplied by FEE_DIVIDER)

new_protocol_fee

uint8

New protocol fee ratio (multiplied by FEE_DIVIDER)

new_ref_fee

uint8

New referral fee ratio (multiplied by FEE_DIVIDER)

new_protocol_fee_address

address

Address for receiving protocol fees

Notes:

  • fee ratio is the value of fee divided by FEE_DIVIDER (10000); so to set a fee to 1% the value must be 100

  • fees must be between MIN_FEE (0) and MAX_FEE (100)

Outgoing messages

None


LP Account internal message handlers

Handles messages from an lp account.

Operations table

NameValueDescription

cb_add_liquidity

0x56dfeb8a

Sent by user's lp_account after adding liquidity

cb_refund_me

0x89446a42

Sent by user's lp_account after adding liquidity

cb_add_liquidity (0x56dfeb8a)

Add new liquidity to the pool. Sent by user's lp account after an appropriate amount (greater than 1000) of both Jetton tokens is sent by a user. The resulting added liquidity must be greater than min_lp_out for the operation to be successful.

TL-B

cb_add_liquidity#56dfeb8a query_id:uint64 tot_am0:Grams tot_am1:Grams user_address:MsgAddress min_lp_out:Grams = InternalMsgBody;

Message body

NameTypeDescription

tot_am0

coins

Amount of the first Jetton token (in basic token units)

tot_am1

coins

Amount of the second Jetton token (in basic token units)

user_address

address

User address

min_lp_out

coins

Minimum amount of received liquidity tokens (in basic token units)

Notes:

  • addition of liquidity will fail if a user should receive less than min_lp_out of lp tokens as a result

  • cannot add liquidity if a supply of either tokens becomes greater than MAX_COINS (2^120 - 1)

Outgoing messages

Sends a message with internal_transfer (0x178d4519) op code to the lp wallet of user_address with minted liquidity tokens; on initial liquidity addition tokens are minted to addr_none

cb_refund_me (0x89446a42)

Sent by user's lp account after a user initiates refund_me operation to cancel addition of new liquidity. The amount of previously stored tokens will be sent back to the user.

TL-B

cb_refund_me#89446a42 query_id:uint64 tot_am0:Grams tot_am1:Grams user_address:MsgAddress = InternalMsgBody;

Message body

NameTypeDescription

tot_am0

coins

Amount of the first Jetton token (in basic token units)

tot_am1

coins

Amount of the second Jetton token (in basic token units)

user_address

address

User address

Outgoing messages

Sends a message with tot_am0 of the first token and tot_am1 of the second token to the router, which initiates pay_to operation


User message handlers

Handles direct messages from a user.

Operations table

NameValueDescription

collect_fees

0x1fcb7d3d

Called by anyone; collect fees; the caller receives a bounty

collect_fees (0x1fcb7d3d)

Collect protocol fees which will be sent to storage::protocol_fee_address. A user which initiates this operation receives a bounty equal to 1/1000 of collected amount of both tokens.

TL-B

collect_fees#1fcb7d3d query_id:uint64 = InternalMsgBody;

Message body

None

Outgoing messages

Sends a message with collected fees (minus the bounty) to storage::protocol_fee_address

Sends a message with an amount of tokens to be received by a user as a bounty (equal to collected fees divided by 1000) to the router, which initiates pay_to operation

Build transaction

Build collect_fees transaction.

async buildCollectFeeTxParams(params?: {
    queryId?: QueryIdType;
}): Promise<MessageData>

params structure

KeyTypeDescription

queryId

QueryIdType | undefined

Optional; query id

MessageData structure

NameTypeDescription

to

Address

Address of the lp account

payload

Cell

Payload created by createCollectFeesBody

gasAmount

BN

Recommended amount of $TON (in nanoTons) sent as gas

Notes:

  • param is entirely optional

  • the default value for gasAmount is equal to 0.5 $TON

Create payload

Create a payload to initiate a collect_fees transaction; params structure is the same a the tx builder.

async createCollectFeesBody(params: {
    queryId?: QueryIdType
}): Promise<Cell>

Constants

NameValueDescription

WORKCHAIN

0

Workchain id

REQUIRED_TON_RESERVE

10000000

Amount of $TON (in nanoTons) to be left on the pool contract as gas

REQUIRED_MIN_LIQUIDITY

1000

Minimum amount of liquidity required

REQUIRED_MIN_COLLECT_FEES

1000000

Minimum amount of tokens (in basic token units) collected as fees

MAX_COINS

2^120 - 1

Maximum amount of tokens (in basic token units) stored as liquidity

PROVIDE_ADD_GAS_CONSUMPTION

10000000

Additional gas (in nanoTons) for providing a wallet

FEE_DIVIDER

10000

Fee values are divided by this value

MIN_FEE

0

Minimum fee allowed

MAX_FEE

100

Maximum fee allowed

Last updated