11 unstable releases (3 breaking)

0.22.0 Feb 27, 2024
0.22.0-dev.0 Feb 23, 2024
0.21.0 Nov 7, 2023
0.20.2 May 6, 2023
0.19.3 Sep 21, 2022

#3 in #pink

MIT license

505KB
11K SLoC

pink-web3

Port of rust-web3 to Pink contract.

web3

Ethereum JSON-RPC multi-transport client. Rust implementation of Web3.js library.

Crates.io

Documentation: crates.io

Usage

First, add this to your Cargo.toml:

[dependencies]
pink-web3 = "0.19.0"

Example

fn in_some_ink_query() {
    use pink_web3 as web3;

    let transport = web3::transports::PinkHttp::new("http://localhost:3333")?;
    let web3 = web3::Web3::new(transport);

    // Calling accounts
    let mut accounts = web3.eth().accounts().resolve().unwrap();
    accounts.push("00a329c0648769a73afac7f9381e08fb43dbea72".parse().unwrap());

    for account in accounts {
        let balance = web3.eth().balance(account, None).resolve().unwrap();
        debug_println!("Balance of {:?}: {}", account, balance);
    }

    Ok(())
}

If you want to deploy smart contracts you have written you can do something like this (make sure you have the solidity compiler installed):

solc -o build --bin --abi contracts/*.sol

The solidity compiler is generating the binary and abi code for the smart contracts in a directory called contracts and is being output to a directory called build.

General

  • More flexible API (accept Into<X>)
  • Contract calls (ABI encoding; debris/ethabi)
  • Batch Requests

Transports

  • Pink HTTP transport

Types

  • Types for U256,H256,Address(H160)
  • Index type (numeric, encoded to hex)
  • Transaction type (Transaction from Parity)
  • Transaction receipt type (TransactionReceipt from Parity)
  • Block type (RichBlock from Parity)
  • Work type (Work from Parity)
  • Syncing type (SyncStats from Parity)

APIs

  • Eth: eth_*
  • Eth filters: eth_*
  • Eth pubsub: eth_*
  • net_*
  • web3_*
  • personal_*
  • traces_*

Parity-specific APIs

  • Parity read-only: parity_*

  • Parity accounts: parity_* (partially implemented)

  • Parity set: parity_*

  • signer_*

  • Own APIs (Extendable)

let web3 = Web3::new(transport);
web3.api::<CustomNamespace>().custom_method().wait().unwrap()

Cargo Features

The library supports following features:

  • pink - Enable pink HTTP and (or) signing support
  • signing - Enable account namespace and local-signing support
  • std - Enable std features for dependencies

Dependencies

~11–15MB
~256K SLoC