這是一個擴展Jetton的智能合約,它是用每個流動性對創建的。路由器在請求創建新池時部署它。儘管路由器實際上存儲了一對中的兩個代幣並通過它進行交換,但必須調用交換合約才能提供或獲取流動性。
Code
Github鏈接:(待更新)
Read-Only Functions
Exchange Minter
get_jetton_data
(int, int, slice, cell, cell) get_jetton_data() method_id
cell exchange_wallet_code
get_lp_swap_data
(int, int, slice, slice, slice, int, int, slice, slice, int, int) get_lp_swap_data() method_id
slice jettonA_wallet_address
int jettonA_pending_balance
slice jettonB_wallet_address
int jettonB_pending_balance
get_lp_mining_data
(int, int, int, int, int, int, cell) get_lp_mining_data() method_id
get_lp_user_info_dict
(cell) get_lp_user_info_dict() method_id
cell ( dict ) total_user_info_dict
get_lp_user_info
(int, int, int, int) get_lp_user_info(slice user_address) method_id
get_wallet_address
slice get_wallet_address(slice owner_address) method_id
slice user_wallet_address
How to build transaction
// 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()
});
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()
});
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_id
get_wallet_extra_data
(int, int, slice, slice) get_wallet_extra_data() method_id
int jettonA_pending_balance
int jettonB_pending_balance