Important
This guide assumes that you have a basic understanding of the Rust programming language and the Unix command line.
Directory | Purpose |
---|---|
core | Core type that is shareable across any Rust project; it operates independently of the runtime. |
node | Client-side code used to execute and build the blockchain network. |
pallet | Polkadot-SDK-like pallet code. |
precompile | EVM precompile code. |
runtime | Runtime code. |
tests | External tests that interact with the node, as opposed to the internal tests conducted with cargo test . |
tool | Some handy standalone tools, primarily for developers. |
- Use EditorConfig to ensure consistent coding styles (excluding Rust) across various editors and IDEs.
- Use rustfmt to format Rust code.
- The project is using the stable Rust toolchain by default, which means that some options configured in .rustfmt.toml are not available. To format the code, use
cargo +nightly fmt
.
- The project is using the stable Rust toolchain by default, which means that some options configured in .rustfmt.toml are not available. To format the code, use
The default toolchain is specified in the rust-toolchain.toml. To activate it, ensure that you have rustup installed and execute the following command in the project root directory:
rustup show
This isn't a complete list of dependencies, you should have the basic development environment set up.
Here are the specific dependencies that are required:
# macOS.
brew install protobuf openssl
# Ubuntu.
apt install protobuf-compiler libssl-dev
Feel free to submit a PR to add additional dependencies or OS if you come across any issues.
Setup cargo-make (OPTIONAL)
cargo install cargo-make
# Long command.
cargo make <ACTION>-<MODE>-<OBJECT>-<CHAIN>
# Short command.
cargo make <A><M><O><C>
See the task section for more details.
Important
All commands below should be executed in the project root directory.
# Format Rust code.
## With cargo-make.
cargo make fmt
## Without cargo-make.
cargo +nightly fmt
# Clippy check. (skip WASM build could speed up the process)
## With cargo-make.
### Long version.
cargo make clippy
### Short version.
cargo make c
## Without cargo-make.
SKIP_WASM_BUILD=1 cargo clippy
# Build the node with all runtime.
## With cargo-make.
### Long version.
cargo make build-node
### Short version.
cargo make bn
## Without cargo-make.
cargo build --locked -p darwinia --features all-runtime
# Build the debug node with Darwinia runtime. (for Darwinia and Crab, replace the `darwinia` with the lowercase chain name)
## With cargo-make.
### Long version.
cargo make build-darwinia
### Short version.
cargo make bd
## Without cargo-make.
cargo build --locked -p darwinia --features darwinia-runtime
# Build the release node with all runtime.
## With cargo-make.
### Long version.
cargo make build-release-node
### Short version.
cargo make brn
## Without cargo-make.
cargo build --locked -p darwinia --features all-runtime -r
# Build the release node with Darwinia runtime. (for Darwinia and Crab, replace the `darwinia` with the lowercase chain name)
## With cargo-make.
### Long version.
cargo make build-release-darwinia
### Short version.
cargo make brd
## Without cargo-make.
cargo build --locked -p darwinia --features darwinia-runtime -r
# Build the benchmark node with all runtime.
## With cargo-make.
### Long version.
cargo make build-benchmark
### Short version.
cargo make bb
## Without cargo-make.
cargo build --locked -p darwinia --features all-runtime --features runtime-benchmarks -r
# Build the benchmark node with Darwinia runtime. (for Darwinia and Crab, replace the `darwinia` with the lowercase chain name)
## With cargo-make.
### Long version.
cargo make build-benchmark-darwinia
### Short version.
cargo make bbd
## Without cargo-make.
cargo build --locked -p darwinia --features darwinia-runtime --features runtime-benchmarks -r
# Run dev Darwinia node. (for Darwinia and Crab, replace the `darwinia` with the lowercase chain name)
## With cargo-make.
### Long version.
cargo make run-dev-darwinia
### Short version.
cargo make rdd
## Without cargo-make.
cargo run --locked -p darwinia --features darwinia-runtime -- --unsafe-rpc-external --tmp --rpc-cors all --rpc-methods unsafe --alice --unsafe-force-node-key-generation --chain darwinia-dev
# Run release dev Darwinia node. (for Darwinia and Crab, replace the `darwinia` with the lowercase chain name)
## With cargo-make.
### Long version.
cargo make run-release-dev-darwinia
### Short version.
cargo make rrdd
## Without cargo-make.
cargo run --locked -p darwinia --features darwinia-runtime -r -- --unsafe-rpc-external --tmp --rpc-cors all --rpc-methods unsafe --alice --unsafe-force-node-key-generation --chain darwinia-dev
# Run benchmark Darwinia node. (for Darwinia and Crab, replace the `darwinia` with the lowercase chain name)
## With cargo-make.
### Long version.
cargo make run-benchmark-darwinia
### Short version.
cargo make rbd
## Without cargo-make.
cargo run --locked -p darwinia --features darwinia-runtime --features runtime-benchmarks -r -- benchmark pallet --header .maintain/license-header --heap-pages 4096 --chain darwinia-dev --output runtime/darwinia/src/weights --pallets \* --extrinsic \* --steps 50 --repeat 20
://rpc.darwinia.network
(https
orwss
)://darwinia-rpc.dwellir.com
(https
orwss
)
://crab-rpc.darwinia.network
(https
orwss
)://darwiniacrab-rpc.dwellir.com
(https
orwss
)
- Darwinia:
ws://c1.darwinia2.darwinia.network:9944
- Crab:
ws://c1.crab2.darwinia.network:9944
[
{
"name": "Alith",
"p": "0x02509540919faacf9ab52146c9aa40db68172d83777250b28e4679176e49ccdd9f",
"s": "0x5fb92d6e98884f76de468fa3f6278f8807c48bebc13595d45af5bdc4da702133"
},
{
"name": "Baltathar",
"p": "0x033bc19e36ff1673910575b6727a974a9abd80c9a875d41ab3e2648dbfb9e4b518",
"s": "0x8075991ce870b93a8870eca0c0f91913d12f47948ca0fd25b49c6fa7cdbeee8b"
},
{
"name": "Charleth",
"p": "0x0234637bdc0e89b5d46543bcbf8edff329d2702bc995e27e9af4b1ba009a3c2a5e",
"s": "0x0b6e18cafb6ed99687ec547bd28139cafdd2bffe70e6b688025de6b445aa5c5b"
},
{
"name": "Dorothy",
"p": "0x02a00d60b2b408c2a14c5d70cdd2c205db8985ef737a7e55ad20ea32cc9e7c417c",
"s": "0x39539ab1876910bbf3a223d84a29e28f1cb4e2e456503e7e91ed39b2e7223d68"
},
{
"name": "Ethan",
"p": "0x025cdc005b752651cd3f728fb9192182acb3a9c89e19072cbd5b03f3ee1f1b3ffa",
"s": "0x7dce9bc8babb68fec1409be38c8e1a52650206a7ed90ff956ae8a6d15eeaaef4"
},
{
"name": "Faith",
"p": "0x037964b6c9d546da4646ada28a99e34acaa1d14e7aba861a9055f9bd200c8abf74",
"s": "0xb9d2ea9a615f3165812e8d44de0d24da9bbd164b65c4f0573e1ce2c8dbd9c8df"
}
]