Skip to content

Create parallel reality of your Substrate network.

License

Notifications You must be signed in to change notification settings

moondance-labs/chopsticks

This branch is 22 commits ahead of, 377 commits behind AcalaNetwork/chopsticks:master.

Folders and files

NameName
Last commit message
Last commit date
Nov 20, 2023
Jun 9, 2023
Nov 20, 2023
Nov 22, 2023
Nov 20, 2023
Nov 20, 2023
Nov 23, 2023
Nov 20, 2023
Nov 20, 2023
Nov 20, 2023
Oct 17, 2022
Nov 20, 2023
Nov 20, 2023
Nov 20, 2023
Nov 20, 2023
Feb 24, 2023
Nov 20, 2023
May 1, 2023
Dec 18, 2022
Nov 20, 2023
Nov 20, 2023
Nov 20, 2023
Nov 20, 2023
Nov 20, 2023
Nov 20, 2023
Nov 20, 2023
Nov 20, 2023
Nov 20, 2023

Repository files navigation

Chopsticks

Create parallel reality of your Substrate network.

Quick Start

Fork Acala mainnet: npx @acala-network/chopsticks@latest --endpoint=wss://acala-rpc-2.aca-api.network/ws

It is recommended to use config file. You can check configs for examples.

Run node using config file

# npx @acala-network/chopsticks@latest --config= url | path | config_file_name
# i.e: using configs/acala.yml

npx @acala-network/chopsticks@latest -c acala

Web testing

Run Chopsticks in browser? Now you can turn a mainnet into a devnet and play with it directly in your browser!

An example is available at acalanetwork.github.io/chopsticks, and the corresponding code can be found in web-test.

Environment Variables

  • PORT: Set port for Chopsticks to listen on, default is 8000
  • LOG_LEVEL: Set log level, default is info. Available options: trace, debug, info, warn, error
  • VERBOSE_LOG: If set, do not truncating log messages

Example configs can be found here

Install

Make sure you have setup Rust environment (>= 1.64).

  • Clone repository with submodules (smoldot)
    • git clone --recurse-submodules https://github.com/AcalaNetwork/chopsticks.git && cd chopsticks
  • Install deps
    • yarn
  • Build wasm. Please do not use IDE's built-in tools to build wasm.
    • yarn build-wasm

Run

  • Replay latest block
    • npx @acala-network/chopsticks@latest run-block --endpoint=wss://acala-rpc-2.aca-api.network/ws
    • This will replay the last block and print out the changed storages
    • Use option -b|--block to replay certain block hash
    • Use option --output-path=<file_path> to print out JSON file
    • Use option --html to generate storage diff preview (add --open to automatically open file)

Dry-run

  • Dry run hep:
npx @acala-network/chopsticks@latest dry-run --help
  • Dry run extrinsic, same as run-block, example:
npx @acala-network/chopsticks@latest dry-run --config=configs/mandala.yml --html --open --extrinsic=0x39028400d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d01183abac17ff331f8b65dbeddd27f014dedd892020cfdc6c40b574f6930f8cf391bde95997ae2edc5b1192a4036ea97804956c4b5497175c8d68b630301685889450200000a00008eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a480284d717
  • Dry run call, make sure mock-signature-host: true to fake caller's signature:
npx @acala-network/chopsticks@latest dry-run --config=configs/mandala.yml --html --open --extrinsic=0xff00000080969800 --address=5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY --at=<block_hash_optional>
  • Dry run a preimage:
npx @acala-network/chopsticks@latest dry-run --endpoint=wss://rpc.polkadot.io --preimage=<preimage> --open
  • Dry run a preimage and execute an extrinsic after that:
npx @acala-network/chopsticks@latest dry-run --endpoint=wss://rpc.polkadot.io --preimage=<preimage> --extrinsic=<extrinsic> --open
  • Dry run a preimage and execute a call after that, make sure mock-signature-host: true to fake caller's signature:
npx @acala-network/chopsticks@latest dry-run --config=configs/mandala.yml --preimage=<preimage> --extrinsic=<call> --address=<who> --open
  • Run a test node

    • npx @acala-network/chopsticks@latest --endpoint=wss://acala-rpc-2.aca-api.network/ws
    • You have a test node running at ws://localhost:8000
    • You can use Polkadot.js Apps to connect to this node
    • Submit any transaction to produce a new block in the in parallel reality
    • (Optional) Pre-define/override storage using option -s|--import-storage=storage.[json/yaml]. See example storage below.
    {
      "Sudo": {
        "Key": "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY"
      },
      "TechnicalCommittee": {
        "Members": ["5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY"]
      },
      "Tokens": {
        "Accounts": [
          [
            ["5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY", { "token": "KAR" }],
            {
              "free": 1000000000000000,
            }
          ]
        ]
      },
      "Whitelist": {
        "WhitelistedCall": [
          [
            ["0x3146d2141cdb95de80488d6cecbb5d7577dd59069efc366cb1be7fe64f02e62c"],
            "0x" // please use 0x for null values
          ],
        ]
      }
    }
  • Run Kusama fork

    • Edit configs/kusama.yml if needed. (e.g. update the block number)
    • npx @acala-network/chopsticks@latest --config=configs/kusama.yml
  • Setup XCM multichain NOTE: You can also connect multiple parachains without a relaychain

npx @acala-network/chopsticks@latest xcm -r kusama -p karura -p statemine

Proxy

Chopsticks respect http_proxy and https_proxy environment variables. Export ROARR_LOG=true environment variable to enable log printing to stdout. To learn more, see https://www.npmjs.com/package/global-agent?activeTab=readme

Documentation

External documentation on Chopsticks can be found at the following links:

Plugins

Chopsticks is designed to be extensible. You can write your own plugin to extend Chopsticks' functionality.

There are 2 types of plugins: cli and rpc. cli plugins are used to extend Chopsticks' CLI, while rpc plugins are used to extend Chopsticks' RPC.

To create a new plugin, you could check out the run-block plugin as an example.

About

Create parallel reality of your Substrate network.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • TypeScript 83.9%
  • Rust 12.2%
  • HTML 2.4%
  • JavaScript 1.1%
  • Other 0.4%