# Substrate Node Template A new FRAME-based Substrate node, ready for hacking :rocket: ## Local Development Follow these steps to prepare a local Substrate development environment :hammer_and_wrench: ### Simple Setup Install all the required dependencies with a single command (be patient, this can take up to 30 minutes). ```bash curl https://getsubstrate.io -sSf | bash -s -- --fast ``` ### Manual Setup Find manual setup instructions at the [Substrate Developer Hub](https://substrate.dev/docs/en/knowledgebase/getting-started/#manual-installation). ### Build Once the development environment is set up, build the node template. This command will build the [Wasm](https://substrate.dev/docs/en/knowledgebase/advanced/executor#wasm-execution) and [native](https://substrate.dev/docs/en/knowledgebase/advanced/executor#native-execution) code: ```bash cargo build --release ``` ## Run ### Single Node Development Chain Purge any existing dev chain state: ```bash ./target/release/node-template purge-chain --dev ``` Start a dev chain: ```bash ./target/release/node-template --dev ``` Or, start a dev chain with detailed logging: ```bash RUST_LOG=debug RUST_BACKTRACE=1 ./target/release/node-template -lruntime=debug --dev ``` ### Multi-Node Local Testnet To see the multi-node consensus algorithm in action, run a local testnet with two validator nodes, Alice and Bob, that have been [configured](/bin/node-template/node/src/chain_spec.rs) as the initial authorities of the `local` testnet chain and endowed with testnet units. Note: this will require two terminal sessions (one for each node). Start Alice's node first. The command below uses the default TCP port (30333) and specifies `/tmp/alice` as the chain database location. Alice's node ID will be `12D3KooWEyoppNCUx8Yx66oV9fJnriXwCcXwDDUA2kj6vnc6iDEp` (legacy representation: `QmRpheLN4JWdAnY7HGJfWFNbfkQCb6tFf4vvA6hgjMZKrR`); this is determined by the `node-key`. ```bash cargo run -- \ --base-path /tmp/alice \ --chain=local \ --alice \ --node-key 0000000000000000000000000000000000000000000000000000000000000001 \ --telemetry-url 'ws://telemetry.polkadot.io:1024 0' \ --validator ``` In another terminal, use the following command to start Bob's node on a different TCP port (30334) and with a chain database location of `/tmp/bob`. The `--bootnodes` option will connect his node to Alice's on TCP port 30333: ```bash cargo run -- \ --base-path /tmp/bob \ --bootnodes /ip4/127.0.0.1/tcp/30333/p2p/12D3KooWEyoppNCUx8Yx66oV9fJnriXwCcXwDDUA2kj6vnc6iDEp \ --chain=local \ --bob \ --port 30334 \ --ws-port 9945 \ --telemetry-url 'ws://telemetry.polkadot.io:1024 0' \ --validator ``` Execute `cargo run -- --help` to learn more about the template node's CLI options. ## Generate a Custom Node Template Generate a Substrate node template based on a particular commit by running the following commands: ```bash # Clone from the main Substrate repo git clone https://github.com/paritytech/substrate.git cd substrate # Switch to the branch or commit to base the template on git checkout # Run the helper script to generate a node template. This script compiles Substrate, so it will take # a while to complete. It expects a single parameter: the location for the script's output expressed # as a relative path. .maintain/node-template-release.sh ../node-template.tar.gz ``` Custom node templates are not supported. Please use a recently tagged version of the [Substrate Developer Node Template](https://github.com/substrate-developer-hub/substrate-node-template) in order to receive support.