@garizonchain/transaction
v0.0.2
Published
transaction package for garizon
Downloads
1
Readme
@garizonchain/transaction
This package provides a collection of apis to create, sign/send transaction, and receive confirm/receipt.
Installation
npm install @garizonchain/transaction
Usage
Create a Garizon instance connecting to testnet
const { Garizon } = require('@garizonchain/core');
const {
ChainID,
ChainType,
hexToNumber,
numberToHex,
fromWei,
Units,
Unit,
} = require('@garizonchain/utils');
const gar = new Garizon(
'https://api.s0.b.hmny.io/',
{
chainType: ChainType.Garizon,
chainId: ChainID.GarTestnet,
},
);
Creating a new transaction using parameters
const txn = gar.transactions.newTx({
to: 'gar166axnkjmghkf3df7xfvd0hn4dft8kemrza4cd2',
value: new Unit(1).asGar().toWei(),
// gas limit, you can use string
gasLimit: '21000',
// send token from stageID
stageID: 0,
// send token to toStageID
toStageID: 0,
// gas Price, you can use Unit class, and use Gwei, then remember to use toWei(), which will be transformed to BN
gasPrice: new gar.utils.Unit('1').asGwei().toWei(),
});
Recovering transaction from raw transaction hash
const raw = '0xf86d21843b9aca00825208808094d6ba69da5b45ec98b53e3258d7de756a567b6763880de0b6b3a76400008028a0da8887719f377401963407fc1d82d2ab52404600cf7bea37c27bd2dfd7c86aaaa03c405b0843394442b303256a804bde835821a8a77bd88a2ced9ffdc8b0a409e9';
const tx = gar.transactions.recover(raw);
Getting the RLP encoding of a transaction (rawTransaction), along with raw transaction field values that were encoded
const [encoded, raw] = txn.getRLPUnsigned()
Sign the transaction using a wallet and send the transaction, wait for confirmation and print receipt
// key corresponds to gar103q7qe5t2505lypvltkqtddaef5tzfxwsse4z7, only has testnet balance
gar.wallet.addByPrivateKey('45e497bd45a9049bcb649016594489ac67b9f052a6cdf5cb74ee2427a60bf25e');
gar.wallet.signTransaction(txn).then(signedTxn => {
signedTxn.sendTransaction().then(([tx, hash]) => {
console.log('tx hash: ' + hash);
signedTxn.confirm(hash).then(response => {
console.log(response.receipt);
});
});
});
Asynchronous transaction sign, send, and confirm
async function transfer() {
gar.wallet.addByPrivateKey('45e497bd45a9049bcb649016594489ac67b9f052a6cdf5cb74ee2427a60bf25e');
const signedTxn = await gar.wallet.signTransaction(txn);
signedTxn
.observed()
.on('transactionHash', (txnHash) => {
console.log('');
console.log('--- hash ---');
console.log('');
console.log(txnHash);
console.log('');
})
.on('receipt', (receipt) => {
console.log('');
console.log('--- receipt ---');
console.log('');
console.log(receipt);
console.log('');
})
.on('cxReceipt', (receipt) => {
console.log('');
console.log('--- cxReceipt ---');
console.log('');
console.log(receipt);
console.log('');
})
.on('error', (error) => {
console.log('');
console.log('--- error ---');
console.log('');
console.log(error);
console.log('');
});
const [sentTxn, txnHash] = await signedTxn.sendTransaction();
const confiremdTxn = await sentTxn.confirm(txnHash);
// if the transactino is cross-stage transaction
if (!confiremdTxn.isCrossStage()) {
if (confiremdTxn.isConfirmed()) {
console.log('--- Result ---');
console.log('');
console.log('Normal transaction');
console.log(`${txnHash} is confirmed`);
console.log('');
console.log('please see detail in explorer:');
console.log('');
console.log('https://explorer.testnet.garizon.com/#/tx/' + txnHash);
console.log('');
process.exit();
}
}
if (confiremdTxn.isConfirmed() && confiremdTxn.isCxConfirmed()) {
console.log('--- Result ---');
console.log('');
console.log('Cross-Stage transaction');
console.log(`${txnHash} is confirmed`);
console.log('');
console.log('please see detail in explorer:');
console.log('');
console.log('https://explorer.testnet.garizon.com/#/tx/' + txnHash);
console.log('');
process.exit();
}
}
transfer();