-
Notifications
You must be signed in to change notification settings - Fork 24
/
Copy pathswap_transaction.ts
99 lines (81 loc) · 3.1 KB
/
swap_transaction.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import dotenv from "dotenv";
import SDK from "@pontem/liquidswap-sdk";
import { AptosAccount, CoinClient, FaucetClient } from 'aptos';
import { NODE_URL, TokensMapping, MODULES_ACCOUNT, RESOURCE_ACCOUNT, FAUCET_URL, NETWORKS_MAPPING } from "./common";
type TxPayloadCallFunction = {
type: 'entry_function_payload';
function: string;
type_arguments: string[];
arguments: string[];
};
dotenv.config();
(async() => {
// setup
const sdk = new SDK({
nodeUrl: NODE_URL,
networkOptions: {
resourceAccount: RESOURCE_ACCOUNT,
moduleAccount: MODULES_ACCOUNT,
modules: {
Scripts: `${MODULES_ACCOUNT}::scripts_v2`,
CoinInfo: '0x1::coin::CoinInfo',
CoinStore: '0x1::coin::CoinStore',
},
},
});
const client = sdk.client;
const coinClient = new CoinClient(client);
// create local account
const alice = new AptosAccount();
const faucetClient = new FaucetClient(NODE_URL, FAUCET_URL);
await faucetClient.fundAccount(alice.address(), 100_000_000);
console.log(`Account Balance ${await coinClient.checkBalance(alice)}`);
// Register account with coin
try {
const coinRegisterPayload = {
type: 'entry_function_payload',
function: '0x1::managed_coin::register',
type_arguments: [TokensMapping.USDT],
arguments: [],
}
const rawTxn = await client.generateTransaction(alice.address(), coinRegisterPayload);
const bcsTxn = await client.signTransaction(alice, rawTxn);
const { hash } = await client.submitTransaction(bcsTxn);
await client.waitForTransaction(hash);
console.log(`Coin ${TokensMapping.USDT} successfully Registered to Alice account`);
console.log(`Check on explorer: https://explorer.aptoslabs.com/txn/${hash}?network=${NETWORKS_MAPPING.DEVNET}`);
} catch(e) {
console.log("Coin register error: ", e);
}
try {
// get Rate for USDT coin.
const usdtRate = await sdk.Swap.calculateRates({
fromToken: TokensMapping.APTOS,
toToken: TokensMapping.USDT,
amount: 10000000, // 0.1 APTOS
curveType: 'uncorrelated',
interactiveToken: 'from',
});
console.log('SsdtRate: ', usdtRate);
// create payload for swap transaction
const swapTransactionPayload = await sdk.Swap.createSwapTransactionPayload({
fromToken: TokensMapping.APTOS,
toToken: TokensMapping.USDT,
fromAmount: 10000000, // 0.1 APTOS
toAmount: Number(usdtRate), // USDT
interactiveToken: 'from',
slippage: 0.005,
stableSwapType: 'normal',
curveType: 'uncorrelated',
}) as TxPayloadCallFunction;
console.log('Swap Transaction Payload: ', swapTransactionPayload);
const rawTxn = await client.generateTransaction(alice.address(), swapTransactionPayload);
const bcsTxn = await client.signTransaction(alice, rawTxn);
const { hash } = await client.submitTransaction(bcsTxn);
await client.waitForTransaction(hash);
console.log(`Swap transaction ${hash} is submitted.`);
console.log(`Check on explorer: https://explorer.aptoslabs.com/txn/${hash}?network=${NETWORKS_MAPPING.DEVNET}`);
} catch (e) {
console.log(e);
}
})();