Skip to content

kendricktan/ethtxd

main
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
nix
 
 
src
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

ethtxd

build GitHub tag (latest SemVer pre-release)

Lightweight Ethereum Tx Decoder with a built in REST API.

Whats this?

A simple tool with an API to extract out Ethereum call traces.

Install from Source

Unfortunately due to some low-level functions in glibc, this can't be compiled into a static binary. It requires to be built from source for the time being.

sh <(curl -L https://nixos.org/nix/install) --daemon

make build

cp dist-newstyle/<...>/ethtxd ~/.local/bin/ethtxd

Usage

# Terminal 1
ethtxd -p 3000 -r https://mainnet.infura.io/v3/<PROJECT_ID>

# Terminal 2
curl localhost:3000/tx/<TX_HASH>

Example Return

Note that you can compose this tool with 4byte.directory or abi-decoder to decode the function signatures and event topics.

{
  "tag": "SuccessResponse",
  "txHash": "0xc7963f40f6e62de89ca32e4b39d4a26e354ed743e0e922ad1917e3d90b6bbc2e",
  "traces": [
    {
      "tag": "TxCall",
      "callTarget": "0x95c4b6c7cff608c0ca048df8b81a484aa377172b",
      "callSigBytes": "0xa9059cbb",
      "callData": "0x0000000000000000000000009389e143dff86096766cd9ff82198857745a8d7b00000000000000000000000000000000000000000000000863a750c3291ed23b",
      "callTrace": [
        {
          "tag": "TxEvent",
          "eventBytes": "0x00000000000000000000000000000000000000000000000863a750c3291ed23b",
          "eventTopics": [
            "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
            "0x3a22df48d84957f907e67f4313e3d43179040d6e",
            "0x9389e143dff86096766cd9ff82198857745a8d7b"
          ]
        },
        {
          "tag": "TxReturn",
          "returnData": "0x0000000000000000000000000000000000000000000000000000000000000001"
        }
      ]
    },
    {
      "tag": "TxEvent",
      "eventBytes": "0x00000000000000000000000000000000000000000000000863a750c3291ed23b",
      "eventTopics": [
        "0x7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5",
        "0x9389e143dff86096766cd9ff82198857745a8d7b"
      ]
    }
  ]
}

Build

# Install Nix
sh <(curl -L https://nixos.org/nix/install) --daemon

# Get Cachix
nix-env -iA cachix -f https://cachix.org/api/v1/install

# Use cachis
cachix use dapp

make build

Development

We're using VSCode with the vscode-haskell plugin. The supplied nix-shell should have all the dependencies installed by default.

git clone git@github.com:kendricktan/ethtxd.git
cd ethtxd
nix-shell
code .
# Alternatively
make repl # For a ghci repl

Upgrading Packages

To upgrade packages, use niv.

rm nix/sources.*

niv init # To update nix pkgs
niv drop nixpkgs
niv drop niv
niv add nixos/nixpkgs
niv add dapptools/dapptools
make build