npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@xyrusworx/web3-cli

v0.8.6

Published

A command line tool which offers low-level EVM interaction for Web3 developers

Downloads

37

Readme

XyrusWorx Web3 Utility CLI

This CLI tool offers options to interact with EVM-based blockchains.

Installing

Use the following command with Node 16+ installed:

    npm install -g @xyrusworx/web3-cli

Usage

The program is called using web3. Each call is structured the following way:

web3 [global options] <command name> [command options]

There are two kinds of options: those for the CLI itself (global options), and those for a specific command. The key difference is that those for the CLI come directly after the web3 program, the ones for the command follow the command name. The global options are generally available for all commands and control overall program behavior.

Supported commands

| Command | Description | |------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | call | Executes eth_call using given call data to a given contract address. | | simulate | Sends a simulated transaction to a given contract address. The transaction is executed on an ephemeral fork of the chain, so no real transaction is sent. This also enables sending transactions as any address. | | replay | Similar to simulate, except that the parameters of the transaction including the block are derived from a given transaction hash, allowing to replay a past (real) transaction and obtain diagnostic information. | | encode | Encodes a list of parameters using a given function signature, to obtain valid calldata, usable in call and simulate. The output of this command can be piped to the aforementioned commands, if the -q option was passed. | | decode | Decodes arbitrary hex data using a comma-separated list of Solidity data types (such as uint256, address, ...). If call was invoked with the -q option, its output can be piped to this command, which needs to receive the -i option. | | dump | Fetches the contents of the contract storage at a given address (and optionally a slot index) and writes it to the console and/or a binary output file. If no slot index is given, the contract storage is scanned until a completely empty slot is encountered. | | layout | Compiles a standard Solidity input JSON file or Solidity source code and extracts a structured description of the contract variable storage layout. The structured output is provided as JSON and can be sent to a file or the standard output. The input JSON can be provided as a parameter or be piped to the command using the -i option. | | read | Offers an easy way to read the state of a smart contract, either from a dump file (created with the dump command) or directly from the blockchain. It is required to provide a storage layout file (created using the layout command). The layout can also be piped into this command. |

Hint: in several commands, standard Solidity input JSON is processed. You can generate this from Hardhat using the @xyrusworx/hardhat-solidity-json package.

Global options

| Option | Shortcut(s) | Description | |-------------|-------------|---------------------------------------------------------------------------------------------------------------------------| | --help | -h, -? | Shows the help screen | | --nologo | None | Suppresses the output of the program name and version. This is automatically applied with the -q / --quiet flag. | | --quiet | -q | Suppresses all output except essential data. This is useful for piping. | | --verbose | -v | Adds more diagnostic output to the execution. This is mutually exclusive with --quiet. |

Command options

To see the respective command options, run web3 <command> -h.

Examples

Example 1: Encode the call data for a token transfer

# WETH
TOKEN=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
ADDRESS=0x752031bb91c61bfc0b280e36434e67e0d43fadbc

# Send 1 token (1,000,000,000,000,000,000 with 18 decimals)
web3 encode "transfer(address,uint256)" $ADDRESS 1000000000000000000

The resulting calldata (0x...) can be attached to a transaction using a wallet.

Example 2: Simulate a token transfer at a given block

For the values of ADDRESS and TOKEN, see the above example.

# Special environment variable, which is picked up by the web3 command
export WEB3_ACCOUNT=0x55b11bb935685f3ea5ea6385410bd1f5aef57ce6

web3 -q encode "transfer(address,uint256)" $ADDRESS 1000000000000000000 | \
web3 simulate -b 16320406 -i $TOKEN 

Using the -q flag, you can instruct web3 to only output data relevant for further processing. Please note that it must be placed between web3 and the respective command (encode), unlike the -i flag, which is owned by the command, hence must be placed after it. The latter flag instructs simulate to use STDIN instead of an argument for the calldata.

Using the -b flag, you can instruct simulate to use a specific block, instead of the latest.

Example 3: Get the balance of a token holder

For the values of ADDRESS and TOKEN, see the above example.

web3 -q encode "balanceOf(address)" $ADDRESS | \
web3 -q call -i $TOKEN | \
web3 decode -i uint256 

You can pipe the output of call to decode to extract readable / processable results instead of a raw hex string. The last parameter is a comma-separated list of data types, which are passed to the decoder. This is arbitrary, meaning you can decode any hex data interpreting them as any Solidity type.

Example 4: Dump the contract storage of a smart contract into a binary file

For the value of ADDRESS, see the above example.

web3 -q dump --start 0 --count 20 -i $ADDRESS -o storage.bin

This will fetch 20 slots starting from slot #0 from the provided smart contract address and store it into storage.bin. The data is padded to 32 bytes due to the way EVM storages work.

Example 5: Create a storage layout map and use it to decode a storage dump

For the value of ADDRESS, see the above example.

cat "contract.sol" | \ 
web3 -q layout -i | \
web3 read -i --dump storage.bin $ADDRESS

The smart contract source code in contract.sol will be used to create a storage layout map, which is a JSON file. This is piped into the read command, which then uses the binary storage dump in storage.bin to decode the smart contract data.

WARNING: The dump is assumed to start with slot #0. If you created a dump with a different starting slot index, the decoding will lead to unexpected and most certainly wrong results.

You can pass the --offline parameter, to prevent the program from fetching missing slots from the blockchain.

How to build

Just run:

    npm install
    npm run pack

This will create a dist/ folder with the deployable package. It can be released with cd dist/ && npm publish