1# Substrate Node Template23A new Substrate node, ready for hacking. This node includes:45* A FRAME-based runtime6* A template pallet7* Aura block authoring8* Grandpa finality gadget910## Build1112Install Rust:1314```bash15curl https://sh.rustup.rs -sSf | sh16```1718Initialize your Wasm Build environment:1920```bash21./scripts/init.sh22```2324Build Wasm and native code:2526```bash27cargo build --release28```2930## Run3132### Single Node Development Chain3334Purge any existing developer chain state:3536```bash37./target/release/node-template purge-chain --dev38```3940Start a development chain with:4142```bash43./target/release/node-template --dev44```4546Detailed logs may be shown by running the node with the following environment variables set: `RUST_LOG=debug RUST_BACKTRACE=1 cargo run -- --dev`.4748### Multi-Node Local Testnet4950If you want to see the multi-node consensus algorithm in action locally, then you can create a local testnet with two validator nodes for Alice and Bob, who are the initial authorities of the genesis chain that have been endowed with testnet units.5152Optionally, give each node a name and expose them so they are listed on the Polkadot [telemetry site](https://telemetry.polkadot.io/#/Local%20Testnet).5354You'll need two terminal windows open.5556We'll start Alice's substrate node first on default TCP port 30333 with her chain database stored locally at `/tmp/alice`. The bootnode ID of her node is `QmRpheLN4JWdAnY7HGJfWFNbfkQCb6tFf4vvA6hgjMZKrR`, which is generated from the `--node-key` value that we specify below:5758```bash59cargo run -- \60 --base-path /tmp/alice \61 --chain=local \62 --alice \63 --node-key 0000000000000000000000000000000000000000000000000000000000000001 \64 --telemetry-url ws://telemetry.polkadot.io:1024 \65 --validator66```6768In the second terminal, we'll start Bob's substrate node on a different TCP port of 30334, and with his chain database stored locally at `/tmp/bob`. We'll specify a value for the `--bootnodes` option that will connect his node to Alice's bootnode ID on TCP port 30333:6970```bash71cargo run -- \72 --base-path /tmp/bob \73 --bootnodes /ip4/127.0.0.1/tcp/30333/p2p/QmRpheLN4JWdAnY7HGJfWFNbfkQCb6tFf4vvA6hgjMZKrR \74 --chain=local \75 --bob \76 --port 30334 \77 --telemetry-url ws://telemetry.polkadot.io:1024 \78 --validator79```8081Additional CLI usage options are available and may be shown by running `cargo run -- --help`.8283## Advanced: Generate Your Own Substrate Node Template8485A substrate node template is always based on a certain version of Substrate. You can inspect it by86opening [Cargo.toml](Cargo.toml) and see the template referred to a specific Substrate commit(87`rev` field), branch, or version.8889You can generate your own Substrate node-template based on a particular Substrate90version/commit by running following commands:9192```bash93# git clone from the main Substrate repo94git clone https://github.com/paritytech/substrate.git95cd substrate9697# Switch to a particular branch or commit of the Substrate repo your node-template based on98git checkout <branch/tag/sha1>99100# Run the helper script to generate a node template.101# This script compiles Substrate and takes a while to complete. It takes a relative file path102# from the current dir. to output the compressed node template.103.maintain/node-template-release.sh ../node-template.tar.gz104```105106Noted though you will likely get faster and more thorough support if you stick with the releases107provided in this repository.