Documentation Index
Fetch the complete documentation index at: https://initialabs-mintlify-changelog-interwovenkit-1777853576.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
Sending transactions using InitiaJS is straightforward. First, import the
necessary classes and functions.
import {
Wallet,
RESTClient,
MnemonicKey,
MsgSend,
Tx,
WaitTxBroadcastResult,
} from '@initia/initia.js'
Next, set up your environment variables. You will need the following:
MNEMONIC: The mnemonic of the account that will be sending the transaction.
REST_URL: The URL of the Initia REST.
GAS_PRICES: The gas prices for the transaction.
SENDER_ADDRESS: The address of the account that will be sending the
transaction.
RECIPIENT_ADDRESS: The address of the account that will be receiving the
transaction.
AMOUNT: The amount of tokens to send.
if (!process.env.MNEMONIC) {
throw new Error('MNEMONIC environment variable is required')
}
const mnemonic = process.env.MNEMONIC
const restUrl = process.env.REST_URL || 'https://rest.testnet.initia.xyz'
const gasPrices = process.env.GAS_PRICES || '0.015uinit' // Will be INIT for mainnet
const senderAddress =
process.env.SENDER_ADDRESS || 'init1w4cqq6udjqtvl5xx0x6gjeyzgwtze8c05kysnu'
const recipientAddress =
process.env.RECIPIENT_ADDRESS || 'init1w4cqq6udjqtvl5xx0x6gjeyzgwtze8c05kysnu'
const amount = process.env.AMOUNT || '1000uinit'
You can then use these variables to ultimately create the wallet client, as
well as the sendMsg object. Since for this example you’re making a token
transfer, we’ll use the MsgSend object. But the SDK provides many other
message types for different actions related to staking, governance, and more.
const key: MnemonicKey = new MnemonicKey({ mnemonic }) // Create a key from the mnemonic
const restClient: RESTClient = new RESTClient(restUrl, { gasPrices })
const wallet: Wallet = new Wallet(restClient, key)
const sendMsg: MsgSend = new MsgSend(senderAddress, recipientAddress, amount)
Next, create the function to send the transaction.
- First, create the transaction by calling
wallet.createAndSignTx. This
function takes in the raw message object, signs it using the wallet, and
returns a signed transaction object.
- Then, broadcast the transaction by calling
restClient.tx.broadcast. This
function takes in the signed transaction object and broadcasts it to the
network.
async function sendTransaction(): Promise<WaitTxBroadcastResult> {
try {
const signedTx: Tx = await wallet.createAndSignTx({
msgs: [sendMsg],
memo: 'memo',
})
const result: WaitTxBroadcastResult =
await restClient.tx.broadcast(signedTx)
console.log('Transaction successful')
console.log('Transaction hash:', result.txhash)
return result
} catch (error: unknown) {
if (error instanceof Error) {
console.error('Transaction failed:', error.message)
} else {
console.error('Transaction failed with an unknown error')
}
throw error
}
}
Finally, call the function to send the transaction.
sendTransaction()
.then(() => process.exit(0))
.catch(() => process.exit(1))
If you then run the script using npx ts-node src/sending-transactions.ts, you
should see an output similar to the following:
Transaction successful
Transaction hash: 4F0B810D15FA7D6A2B9EC2B98B263B0A20E791A8DABCB549620445941B25C699
Full Example
src/sending-transactions.ts
import {
Wallet,
RESTClient,
MnemonicKey,
MsgSend,
Tx,
WaitTxBroadcastResult,
} from '@initia/initia.js'
const mnemonic = process.env.MNEMONIC
const restUrl = process.env.REST_URL || 'https://rest.testnet.initia.xyz'
const gasPrices = process.env.GAS_PRICES || '0.015uinit' // Will be INIT for mainnet
const senderAddress =
process.env.SENDER_ADDRESS || 'init1w4cqq6udjqtvl5xx0x6gjeyzgwtze8c05kysnu'
const recipientAddress =
process.env.RECIPIENT_ADDRESS || 'init1w4cqq6udjqtvl5xx0x6gjeyzgwtze8c05kysnu'
const amount = process.env.AMOUNT || '1000uinit'
const key: MnemonicKey = new MnemonicKey({ mnemonic })
const restClient: RESTClient = new RESTClient(restUrl, { gasPrices })
const wallet: Wallet = new Wallet(restClient, key)
const sendMsg: MsgSend = new MsgSend(senderAddress, recipientAddress, amount)
async function sendTransaction(): Promise<WaitTxBroadcastResult> {
try {
const signedTx: Tx = await wallet.createAndSignTx({
msgs: [sendMsg],
memo: 'memo',
})
const result: WaitTxBroadcastResult =
await restClient.tx.broadcast(signedTx)
console.log('Transaction successful')
console.log('Transaction hash:', result.txhash)
return result
} catch (error: unknown) {
if (error instanceof Error) {
console.error('Transaction failed:', error.message)
} else {
console.error('Transaction failed with an unknown error')
}
throw error
}
}
sendTransaction()
.then(() => process.exit(0))
.catch(() => process.exit(1))