-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdriver.ts
72 lines (52 loc) · 3.62 KB
/
driver.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
import { constants } from "./constants/constants"
import { rpcClientConnection } from "./client/rpcClientConnection"
import { OfflineDirectSigner } from "@cosmjs/proto-signing"
import { rpcSigningClientConnection } from "./client/rpcSigningClientConnection"
import { checkPersonalAndFaucetBalance, getBalance } from "./utils/balanceUtil"
import { getGasFee, getCoinAmount, getDeserializedTransaction, getTransaction, signAndBroadcast, signTx, getEncodedTransaction, broadcastTx } from "./utils/transactionUtil"
import { getDecodedMessage, getDeserializedMessage, getFaucetAddress, getMessage } from "./utils/messageUtil"
import { getVijayAddress, getVijaySignerFromMnemonic } from "./utils/signerUtil"
const runAll = async(): Promise<void> => {
const rpcClient = await rpcClientConnection.getClient()
console.log("Chain Details, chain id: ", await rpcClient.getChainId(), ",height: ", await rpcClient.getHeight())
const balance = await getBalance(rpcClient, constants.address)
console.log("Vijay's balances: ", balance)
const faucetTx = await getTransaction(rpcClient, constants.faucetHash)
console.log("Faucet Tx: ", faucetTx)
const decodedTx = getDeserializedTransaction(faucetTx)
console.log("Deserialized Tx: ", decodedTx)
const decodedMessages = getDecodedMessage(decodedTx)
console.log("Decoded messages: ", decodedMessages)
const deserializedMessage = getDeserializedMessage(decodedMessages)
console.log("Sent message: ", deserializedMessage)
const faucetAddress = getFaucetAddress(deserializedMessage)
console.log("Faucet address: ", faucetAddress)
const vijaySigner: OfflineDirectSigner = await getVijaySignerFromMnemonic()
const vijayAddress = await getVijayAddress(vijaySigner)
console.log("Vijay's address from signer: ", vijayAddress)
const rpcSigningClient = await rpcSigningClientConnection.getClient(vijaySigner)
console.log("Chain Details, chain id: ", await rpcSigningClient.getChainId(), ", height: ", await rpcSigningClient.getHeight())
// Check Gas fee and limit
console.log("Gas fee: ", decodedTx.authInfo!.fee!.amount)
console.log("Gas limit: ", decodedTx.authInfo!.fee!.gasLimit.toString(10))
// Check all balances
checkPersonalAndFaucetBalance(rpcSigningClient, vijayAddress, faucetAddress)
// ################################################################ //
// Sign & Broadcast transaction
// ################################################################ //
// Transaction building
const coin = getCoinAmount(constants.denomination, constants.amount)
const fee = getGasFee(constants.denomination, constants.gasAmount, constants.gasLimit)
// Compose send message using the transaction amount and broadcast transaction
const sendMessage = getMessage(vijayAddress, faucetAddress, coin)
// Uncomment and use the next 3 lines if you want to sign and broadcast separately (dont forget to comment the signAndBroadcast line)
// const txRaw = await signTx(rpcSigningClient, vijayAddress, [sendMessage], fee)
// const txBytes = await getEncodedTransaction(txRaw)
// const broadcastResult = await broadcastTx(rpcSigningClient, txBytes, constants.timeoutMs, constants.pollIntervalMs)
const broadcastResult = await signAndBroadcast(rpcSigningClient, vijayAddress, [sendMessage], fee)
console.log("Transfer result: ", broadcastResult)
console.log("Check your transaction in: https://explorer.theta-testnet.polypore.xyz/transactions/" + broadcastResult.transactionHash)
// Check all balances
checkPersonalAndFaucetBalance(rpcSigningClient, vijayAddress, faucetAddress)
}
runAll()