这是一个扩展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