交換(Exchange)
這是一個擴展Jetton的智能合約,它是用每個流動性對創建的。路由器在請求創建新池時部署它。儘管路由器實際上存儲了一對中的兩個代幣並通過它進行交換,但必須調用交換合約才能提供或獲取流動性。
Code
Github鏈接:(待更新)
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