const std = @import("std");
const voltaire = @import("voltaire");
const Contract = voltaire.Contract;
const Provider = voltaire.Provider;
pub fn main() !void {
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
defer _ = gpa.deinit();
const allocator = gpa.allocator();
// Initialize provider
var provider = try Provider.init(allocator, "https://eth.llamarpc.com");
defer provider.deinit();
// Create contract instance
const usdc = Contract.init(allocator, .{
.address = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
.abi = @embedFile("erc20.abi.json"),
.provider = provider,
});
// Read balance
const balance = try usdc.read.balanceOf("0x742d35...");
defer allocator.free(balance);
std.debug.print("Balance: {}\n", .{balance});
// Transfer tokens
const tx_hash = try usdc.write.transfer("0x742d35...", 1000);
std.debug.print("Transaction: {s}\n", .{tx_hash});
// Estimate gas
const gas = try usdc.estimateGas.transfer("0x742d35...", 1000);
std.debug.print("Gas estimate: {}\n", .{gas});
// Iterate events
var events = try usdc.events.Transfer(.{ .from = "0x742d35..." });
defer events.deinit();
while (try events.next()) |log| {
std.debug.print("{s} -> {s}: {}\n", .{
log.args.from,
log.args.to,
log.args.value,
});
}
}