Querying a Transaction
Querying a transaction in GenLayer means reading a submitted network transaction by its hash to inspect its details. Use transaction queries to monitor transaction status, debug behavior, and verify transaction details.
Basic Transaction Reading
Here's the simplest way to read a transaction:
import { simulator } from 'genlayer-js/chains';
import { createClient } from 'genlayer-js';
const client = createClient({
chain: simulator,
});
const transactionHash = "0x...";
const transaction = await client.getTransaction({
hash: transactionHash
});Error Handling
async function getTransactionWithRetry(
client: GenLayerClient,
hash: string,
maxAttempts = 3
): Promise<Transaction> {
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
try {
const tx = await client.getTransaction({ hash });
if (!tx) throw new Error('Transaction not found');
return tx;
} catch (error) {
if (attempt === maxAttempts) throw error;
if (error.message.includes('not found')) {
// Wait longer between retries for not found errors
await new Promise(resolve => setTimeout(resolve, 2000 * attempt));
continue;
}
throw error; // Rethrow other errors immediately
}
}
throw new Error('Failed to fetch transaction after max retries');
}Monitoring Transaction Status
async function monitorTransaction(
client: GenLayerClient,
hash: string,
interval = 1000
): Promise<Transaction> {
return new Promise((resolve, reject) => {
const checkStatus = async () => {
try {
const tx = await client.getTransaction({ hash });
if (!tx) {
setTimeout(checkStatus, interval);
return;
}
if (tx.status === 'pending') {
setTimeout(checkStatus, interval);
return;
}
resolve(tx);
} catch (error) {
reject(error);
}
};
checkStatus();
});
}
// Usage
const finalTx = await monitorTransaction(client, "0x...");