Skip to main content

Tips for CKB Development

Nervos CKB is the layer 1 of Nervos Network, a public/permissionless blockchain, which is an open source project on github. There are some tips for ckb development below, hope it will be useful for you.


We have developed a particular serialization format called Molecule. It is recommended to check the molecule github repo for more details.

Well-known Hashes

The command ckb list-hashes prints the well-known hashes for current effective chain spec.

The file docs/hashes.toml in ckb release package and source code repository contains the well-known hashes for all the bundled chain specs. The file is generated by:

cargo run list-hashes -b > docs/hashes.toml

Running Test

Install dependencies

rustup component add rustfmt
rustup component add clippy

Run tests

make ci

Run acceptance integration tests

make integration

Debug CKB

Note: Only support linux system.

Track Memory Usage in Logs

Add the follow configuration into ckb.toml:

filter = "error,ckb-memory-tracker=trace"

# Seconds between checking the process, 0 is disable, default is 0.
interval = 600

Profile Memory

  • Compile ckb with feature profiling.

    make build-for-profiling

    After compiling, a script named jeprof will be generated in target directory.

    find target/ -name "jeprof"
  • Enable RPC module Debug in ckb.toml.

    modules = ["Debug"]
  • Run ckb.

  • Dump memory usage to a file via call RPC jemalloc_profiling_dump.

    curl -H 'content-type: application/json' -d '{ "id": 2, "jsonrpc": "2.0", "method": "jemalloc_profiling_dump", "params": [] }' http://localhost:8114

    Then, a file named ckb-jeprof.$TIMESTAMP.heap will be generated in the working directory of the running ckb.

  • Generate a PDF of the call graph.

    Required: graphviz and ghostscript

    jeprof --show_bytes --pdf target/debug/ckb ckb-jeprof.$TIMESTAMP.heap > call-graph.pdf