1.3.3 • Published 10 months ago

viem-tracer v1.3.3

Weekly downloads
-
License
MIT
Repository
github
Last release
10 months ago

viem-tracer

npm package Build Status Downloads Issues Commitizen Friendly Semantic Release

Debug transactions via traces by automatically decoding them with the help of openchain.xyz!

  • Automatically append traces to error messages of failed eth_estimateGas and eth_sendTransaction RPC requests.
  • Add support for debug_traceCall to a Viem client with correct types!

Installation

npm install viem-tracer
yarn add viem-tracer

Usage

import { createTestClient, http } from 'viem';
import { foundry } from 'viem/chains';
import { traceActions, traced } from 'viem-tracer';

const client = createTestClient({
  mode: "anvil",
  chain: foundry,
  transport: traced( // Automatically trace failed transactions (or programmatically)
    http(),
    { all: false, next: false, failed: true } // Optional, default tracer config
  ),
}).extend(traceActions); // Extend client with the `client.traceCall` action

// Returns the call trace as formatted by the requested tracer.
await client.traceCall({
   account: "0xA0Cf798816D4b9b9866b5330EEa46a18382f251e",
   to: "0x70997970c51812dc3a010c7d01b50e0d17dc79c8",
   value: parseEther("1"),
   // tracer: "prestateTracer", // Defaults to "callTracer".
});

// Failing `eth_estimateGas` and `eth_sendTransaction` RPC requests will automatically append the transaction traces to the error:
await client.writeContract({
   abi: erc20Abi,
   address: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
   functionName: "transfer",
   args: ["0xA0Cf798816D4b9b9866b5330EEa46a18382f251e", 100_000000n],
});

// 0 ↳ FROM 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266
// 0 ↳ CALL (0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48).transfer(0xf39F...0xf3, 100000000) -> ERC20: transfer amount exceeds balance
//   1 ↳ DELEGATECALL (0x43506849D7C04F9138D1A2050bbF3A0c054402dd).transfer(0xf39F...0xf3, 100000000) -> ERC20: transfer amount exceeds balance

client.transport.tracer.all = true; // If you want to trace all submitted transactions, failing or not.
client.transport.tracer.next = true; // If you want to trace the next submitted transaction.
client.transport.tracer.next = false; // If you DON'T want to trace the next submitted transaction.
client.transport.tracer.failed = false; // If you don't want to append traces to failed transactions.

!NOTE
You can disable colors via the colors package:

import { disable } from "colors";

disable();
1.3.3

10 months ago

1.3.2

10 months ago

1.3.1

10 months ago

1.3.0

10 months ago

1.2.0

10 months ago

1.1.1

10 months ago

1.1.0

10 months ago

1.0.1

10 months ago

1.0.0

10 months ago