More relevant links:
- Find answers to your questions by joining our Stack Exchange community
- ink! ‒ The main ink! repository with smart contract examples
- Contracts UI ‒ Frontend for contract deployment and interaction
- Substrate Contracts Node ‒ Simple Substrate blockchain which includes smart contract functionality
In addition to Rust, installation requires a C++ compiler that supports C++17. Modern releases of gcc and clang, as well as Visual Studio 2019+ should work.
rustup component add rust-src.
cargo install --force --locked cargo-contract.
Step 3: (Optional) Install
brew install openssl
cargo install cargo-dylint dylint-link.
You can always update the
cargo-contract binary to the latest version by running the Step 2.
Installation using Docker Image
If you prefer to use Docker instead we have a Docker image available on the Docker Hub:
# Pull the latest stable image. docker pull paritytech/contracts-ci-linux:production # Create a new contract in your current directory. docker run --rm -it -v $(pwd):/sources paritytech/contracts-ci-linux:production \ cargo contract new --target-dir /sources my_contract # Build the contract. This will create the contract file under # `my_contract/target/ink/my_contract.contract`. docker run --rm -it -v $(pwd):/sources paritytech/contracts-ci-linux:production \ cargo contract build --manifest-path=/sources/my_contract/Cargo.toml
If you want to reproduce other steps of CI process you can use the following guide.
You can always use
cargo contract help to print information on available
commands and their usage.
For each command there is also a
--help flag with info on additional parameters,
cargo contract new --help.
cargo contract new my_contract
Creates an initial smart contract with some scaffolding code into a new
The contract contains the source code for the
contract, which is about the simplest "smart" contract you can build ‒ a
bool which gets flipped
false through the
cargo contract build
Compiles the contract into optimized WebAssembly bytecode, generates metadata for it,
and bundles both together in a
<name>.contract file, which you can use for
deploying the contract on-chain.
cargo contract check
Checks that the code builds as WebAssembly. This command does not output any
artifact to the
cargo contract upload
Upload a contract to a
pallet-contracts enabled chain. See extrinsics.
cargo contract instantiate
Create an instance of a contract on chain. See extrinsics.
cargo contract call
Invoke a message on an existing contract on chain. See extrinsics.
cargo contract decode
Decodes a contracts input or output data.
This can be either an event, an invocation of a contract message, or an invocation of a contract constructor.
The argument has to be given as hex-encoding, starting with
The entire code within this repository is licensed under the GPLv3.
Please contact us if you have questions about the licensing of our products.