Skip to main content
This page is a placeholder. All examples on this page are currently AI-generated and are not correct. This documentation will be completed in the future with accurate, tested examples.

Usage Patterns

Practical recipes for common blockchain interaction patterns.

Getting Account State

import * as Rpc from '@tevm/voltaire/jsonrpc';
import * as Address from '@tevm/voltaire/Address';

async function getAccountState(
  provider: Provider,
  address: Address.AddressType
) {
  // Create requests
  const balanceReq = Rpc.Eth.GetBalanceRequest(address, 'latest');
  const nonceReq = Rpc.Eth.GetTransactionCountRequest(address, 'latest');
  const codeReq = Rpc.Eth.GetCodeRequest(address, 'latest');

  const [balance, nonce, code] = await Promise.all([
    provider.request(balanceReq),
    provider.request(nonceReq),
    provider.request(codeReq)
  ]);

  if (balance.error || nonce.error || code.error) {
    return null;
  }

  return {
    balance: BigInt(balance.result),
    nonce: Number(nonce.result),
    isContract: code.result !== '0x'
  };
}

Monitoring Contract Events

import * as Address from '@tevm/voltaire/Address';
import * as Hash from '@tevm/voltaire/Hash';

const contractAddress = Address('0x...');
const transferSig = Hash(
  '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'
);

for await (const log of provider.events.logs({
  address: contractAddress,
  topics: [transferSig]
})) {
  console.log('Transfer in block:', log.blockNumber);
  console.log('From:', log.topics[1]);
  console.log('To:', log.topics[2]);
}

Waiting for Transaction Confirmation

import * as Rpc from '@tevm/voltaire/jsonrpc';
import * as Hash from '@tevm/voltaire/Hash';

async function waitForConfirmation(
  provider: Provider,
  txHash: Hash.HashType,
  confirmations: number = 3
): Promise<void> {
  const request = Rpc.Eth.GetTransactionReceiptRequest(txHash);
  const receiptRes = await provider.request(request);

  if (receiptRes.error || !receiptRes.result) {
    throw new Error('Transaction not found');
  }

  const targetBlock = BigInt(receiptRes.result.blockNumber) + BigInt(confirmations);

  for await (const block of provider.events.newHeads()) {
    if (BigInt(block.number) >= targetBlock) {
      break;
    }
  }
}

Estimating Gas with Buffer

import * as Rpc from '@tevm/voltaire/jsonrpc';
import * as Address from '@tevm/voltaire/Address';
import * as Hex from '@tevm/voltaire/Hex';

async function estimateGasWithBuffer(
  provider: Provider,
  params: {
    from: Address.AddressType;
    to: Address.AddressType;
    data: Hex.HexType;
  }
): Promise<bigint | null> {
  const request = Rpc.Eth.EstimateGasRequest(params);
  const response = await provider.request(request);

  if (response.error) {
    return null;
  }

  const estimate = BigInt(response.result);
  return estimate * 120n / 100n; // Add 20% buffer
}