Exchange
This is a smart contract to expand Jetton that is created with every liquidity pair. The Router deploys this as new pool creation is requested. Although the Router actually stores the two tokens of a pair and swapping takes place through it, the Exchange Contract must be called for liquidity to be provided or taken.
Code
Github Link: (Will be updated)
Read-Only Functions
Exchange Minter
get_jetton_data
(int, int, slice, cell, cell) get_jetton_data() method_idint totalSupply
int mintable
slice admin_address
cell exchange_content
cell exchange_wallet_code
get_lp_swap_data
(int, int, slice, slice, slice, int, int, slice, slice, int, int) get_lp_swap_data() method_idint swap_fee
int min_amount
slice router_address
slice jettonA_address
slice jettonA_wallet_address
int jettonA_balance
int jettonA_pending_balance
slice jettonB_address
slice jettonB_wallet_address
int jettonB_balance
int jettonB_pending_balance
get_lp_mining_data
(int, int, int, int, int, int, cell) get_lp_mining_data() method_idint mining_amount
int datetime_amount
int minable_time
int half_life
int last_index
int last_mined
cell mining_rate_cell
get_lp_user_info_dict
(cell) get_lp_user_info_dict() method_idcell ( dict ) total_user_info_dict
get_lp_user_info
(int, int, int, int) get_lp_user_info(slice user_address) method_idint find
int balance
int user_reward_sum
int last_user_index
get_wallet_address
slice get_wallet_address(slice owner_address) method_idslice user_wallet_address
How to build transaction
Add Liquidity
// 1. add liquidity tokenA
await sendInternalMessageWithWallet({
walletContract,
secretKey,
to: userJettonAWalletAddress,
value: toNano(0.7),
body: beginCell()
.storeUint(0xf8a7ea5, 32)
.storeUint(query_id, 64)
.storeCoins(jettonAAmount)
.storeAddress(lpAddress)
.storeAddress(responseAddress)
.storeDict(beginCell().endCell())
.storeCoins(toNano(0.5))
.storeDict(beginCell()
.storeCoins(minAmountForJettonA)
.storeCoins(minAmountForJettonB)
.endCell())
.endCell()
});
// 2. add liquidity tokenB
await sendInternalMessageWithWallet({
walletContract,
secretKey,
to: userJettonBWalletAddress,
value: toNano(0.7),
body: beginCell()
.storeUint(0xf8a7ea5, 32)
.storeUint(query_id, 64)
.storeCoins(jettonBAmount)
.storeAddress(lpAddress)
.storeAddress(responseAddress)
.storeDict(beginCell().endCell())
.storeCoins(toNano(0.5))
.storeDict(beginCell()
.storeCoins(minAmountForJettonA)
.storeCoins(minAmountForJettonB)
.endCell())
.endCell()
});Remove Liquidity
await sendInternalMessageWithWallet({
walletContract,
secretKey,
to: lpAddress,
value: toNano(0.35),
body: beginCell()
.storeUint(0x595f07bc, 32)
.storeUint(query_id, 64)
.storeCoins(lpAmount)
.storeDict(beginCell()
.storeCoins(minAmountForJettonA)
.storeCoins(minAmountForJettonB)
.endCell())
.endCell()
});Claim
await sendInternalMessageWithWallet({
walletContract,
secretKey,
to: lpAddress,
value: toNano(0.15),
body: beginCell()
.storeUint(0x6b14cfe1, 32)
.storeUint(query_id, 64)
.endCell()
});Exchange Wallet
get_wallet_data
(int, slice, slice, cell) get_wallet_data() method_idint balance
slice owner_address
slice lp_minter_address
cell lp_wallet_code
get_wallet_extra_data
(int, int, slice, slice) get_wallet_extra_data() method_idint jettonA_pending_balance
int jettonB_pending_balance
slice jettonA_address
slice jettonB_address
Last updated