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-contracts
are enabled by default (see theruntime/Cargo.toml
). - The consensus algorithm has been switched to
manual-seal
in #42. Hereby blocks are authored immediately at every transaction, so there is none of the typical six seconds block time associated withgrandpa
oraura
. - 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::Config
we increased the allowed contract sizes. This avoids running intoCodeTooLarge
when uploading contracts during development. See the comment inruntime/src/lib.rs
for 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 --locked
The --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 --dev
A 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.