-
Notifications
You must be signed in to change notification settings - Fork 0
/
transaction.js
81 lines (68 loc) · 2.21 KB
/
transaction.js
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
import chalk from 'chalk';
import { coin, coins } from '@cosmjs/proto-signing';
import {
assertIsDeliverTxSuccess,
GasPrice,
SigningStargateClient,
} from '@cosmjs/stargate';
const RPC = 'https://symphony-api.kleomedes.network/';
const GAS_PRICE = GasPrice.fromString('0.003note');
// Function to create and connect the Stargate client
async function connectClient(sender) {
return SigningStargateClient.connectWithSigner(RPC, sender, { gasPrice: GAS_PRICE });
}
// Function to log transaction details
function logTransaction(type, amount, from, to) {
console.log(
chalk.yellow(`Send 0.00000${amount} $MLD from ${from} to ${to} for ${type}`)
);
}
// Function to handle successful transactions
function logSuccess(transaction) {
assertIsDeliverTxSuccess(transaction);
console.log(chalk.green('Successfully broadcasted!'));
console.log(
chalk.green(`Hash: https://testnet.ping.pub/symphony/tx/${transaction.transactionHash}`)
);
console.log('');
}
// Function to handle errors gracefully
function handleError(error) {
console.error(chalk.red('Transaction failed!'), error);
}
// Function to perform a token transaction
export async function sendTransaction(sender, receiver) {
try {
const client = await connectClient(sender);
const [firstAccount] = await sender.getAccounts();
const amount = coins(Math.floor(Math.random() * 10) + 1, 'note');
logTransaction('sending', amount[0].amount, firstAccount.address, receiver);
const transaction = await client.sendTokens(
firstAccount.address,
receiver,
amount,
'auto'
);
logSuccess(transaction);
} catch (error) {
handleError(error);
}
}
// Function to perform a staking transaction
export async function stakeTransaction(sender, validator) {
try {
const client = await connectClient(sender);
const [firstAccount] = await sender.getAccounts();
const amount = coin(Math.floor(Math.random() * 10) + 1, 'note');
logTransaction('staking', amount.amount, firstAccount.address, validator);
const transaction = await client.delegateTokens(
firstAccount.address,
validator,
amount,
'auto'
);
logSuccess(transaction);
} catch (error) {
handleError(error);
}
}