This repository contains Substrate's node-template
configured to include Substrate's pallet-contracts
‒ a smart contract module.
This repository is tracking Substrate's master.
It contains a couple of modifications that make it unsuitable for a production deployment, but a great fit for development and testing:
- The unstable features of the
pallet-contractsare enabled by default (see theruntime/Cargo.toml). - The consensus algorithm has been switched to
manual-sealin #42. Hereby blocks are authored immediately at every transaction, so there is none of the typical six seconds block time associated withgrandpaoraura. - If no CLI arguments are passed the node is started in development mode by default.
- With each start of the node process the chain starts from genesis ‒ so no
chain state is retained, all contracts will be lost! If you want to retain
chain state you have to supply a
--base-path. - For
pallet_contracts::Configwe increased the allowed contract sizes. This avoids running intoCodeTooLargewhen uploading contracts during development. See the comment inruntime/src/lib.rsfor more details.
If you are looking for a node suitable for production see these configurations:
- Substrate Node Template
- Substrate Cumulus Parachain Template
- Contracts Parachain Configuration for Rococo
The easiest way is to download a binary release from our releases page
and just execute ./substrate-contracts-node --dev.
Follow the official installation steps to set up all Substrate prerequisites.
Afterwards you can install this node via
cargo install contracts-node --git https://github.com/paritytech/substrate-contracts-node.git --force --lockedThe --locked flag makes the installation use the same versions
as the Cargo.lock in those repositories ‒ ensuring that the last
known-to-work version of the dependencies are used.
The latest confirmed working Substrate commit which will then be used is b0777b4.
To run a local dev node execute
substrate-contracts-node --devA new chain in temporary directory will be created each time the command is executed. This is the
default for --dev chain specs. If you want to persist chain state across runs you need to
specify a directory with --base-path.
To have only errors and contract debug output show up on the console you can
supply -lerror,runtime::contracts=debug when starting the node.
Important: Debug output is only printed for RPC calls or off-chain tests ‒ not for transactions!
See our FAQ for more details: How do I print something to the console from the runtime?.
Once the node template is running locally, you can connect to it with frontends like Contracts UI or Polkadot-JS Apps and interact with your chain.