TypeScript-oriented. In Zig, build JSON and post with
std.http.Client; use primitives.AbiEncoding for calldata and result decoding. Zig-native recipes will be added.Usage Patterns
Practical recipes for common blockchain interaction patterns.Getting Account State
Copy
Ask AI
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
Copy
Ask AI
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
Copy
Ask AI
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
Copy
Ask AI
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
}
Related
- Getting Started - Installation and basics
- Method API - Method patterns
- Events - Event subscriptions

