A lot has happened recently and this page provides context of where ink! stands in February 2025 and what the plan for the future is. Let's dive right in!
๐ค Time at Parity (2019-2024)โ
In 2019, ink! started out as a small project at Parity. It grew into a sophisticated ecosystem over the years and a community did form around it. Throughout all these years Parity continued to allocate developer resource to the project, which is amazing!
In April 2024, ink! moved out of the Parity umbrella. Instead of one company, it is nowadays developed and maintained by an alliance of individual developers, companies, and community teams altogether. You can read more on our transition out of Parity here.
We continue to work closely with Parity, we contribute code to Parity-maintained components and regularly synchronize with Parity developers. Parity continues to be involved in ink! as well: in late 2024 SRLabs and the Parity security team conducted an audit of ink! v5 (read more here).
๐งโ๐ฌ Exploring alternatives to WebAssembly (2023)โ
From ink! v1 to v5, the execution platform was Substrate's smart contracts
module pallet-contracts
.
This pallet required the smart contracts that were uploaded to be in the WebAssembly
(Wasm) bytecode format. So ink! contracts were always compiled to a WebAssembly binary.
This could be done by invoking cargo build
/rustc
directly or via our CLI tool
cargo-contract
(which executes the
Rust compiler with optimal flags for smart contracts).
As an ongoing research project Parity was always looking at alternatives to WebAssembly for smart contract execution. Some of those investigations are persisted in the Polkadot Forum. The forum post on the eBPF investigation (eBPF is used in Solana) highlights some shortcomings of WebAssembly for smart contracts.
During 2023, Parity core developer Jan Bujak (@koute) did another exploration on alternatives for WebAssembly. His forum post gives a great overview on how he landed at RISC-V and its potential. His explorations yielded promising results and a new project was started: PolkaVM (the announcement contains more info). PolkaVM is intended to be a very fast RISC-V based virtual machine. Jan regularly shared performance benchmarks in the Polkadot Forum. Those were very good and got community enthusiasm started. For blockchains a very fast performance correlates with transaction throughput and transaction costs, which implies improved scalability and reduced costs for users. Eventually an idea emerged: move the Substrate stack in the long-term to RISC-V instead of WebAssembly.
๐ค RISC-V + pallet-revive
(2025)โ
As migrating the Substrate stack from WebAssembly to RISC-V is a highly complex undertaking, it was found that smart contracts are an ideal starting point to kick off this migration in a clearly delimited component.
Parity subsequently forked Substrate's pallet-contracts
into a new project called
pallet-revive
.
Smart contracts that are uploaded to this new pallet have to be
in the RISC-V bytecode format, and no longer in WebAssembly.
Besides the contract binary format, a number of other significant changes were made to provide first-class support for Solidity contracts:
-
Extensive changes were made in the inner logic of the pallet to bring its behavior closer to the EVM (e.g. types, events, and debugging was changed to be Solidity compatible).
-
In the
pallet-contracts
era the idea for Solidity compatibility was a project called Solang. It's a Solidity compiler that parses Solidity syntax and outputs WebAssembly. Parsing the Solidity syntax turned out to be a complex undertaking. Solidity as a language is also evolving and provided a moving target.
As an iteration on that approach, forpallet-revive
Parity started a new project calledrevive
แ a compiler from the Solidity bytecode YUL to a RISC-V contract that can be executed onpallet-revive
. This bytecode is more stable than the language syntax. Plus Solidity developers can continue to use the Solidity compilersolc
to compile their contracts. -
An RPC wrapper that maps Ethereum RPC's onto Substrate was created.
At the time of writing, pallet-revive
is deployed to the Polkadot testnet Westend
(on the AssetHub parachain).
A launch on Polkadot's canary network Kusama is targeted for early Q2/25.
The Polkadot launch is targeted for Q3/25.
๐ Migrating ink! to RISC-V + pallet-revive
(currently wip)โ
pallet-revive
and RISC-V is seen as the future of smart contracts in the Polkadot
ecosystem. We agree with that vision and are excited to work on making the ink! stack
ready for it!
In autumn 2024 the ink! Alliance created a Polkadot treasury proposal
around this.
The Polkadot community signaled its alignment and gave us the mandate of
migrating ink! to this new stack.
Hence, v5 of ink! and cargo-contract
are the last ones supporting pallet-contracts
and Wasm. We can still backport important fixes, but the coming releases (>= v6
) will
all no longer be compatible. In case you want to create a PR for a backport, we have
v5 release branches here and here.
The current state of this migration is that the master
branches of
ink! and cargo-contract
are compatible with polkadot-sdk
+ pallet-revive
+ PolkaVM from Jan 7, 2025.
That's the date to which we've caught up so far. We are working on catching up
to present day and aim to have a pre-release 6.0.0-alpha of both ink! and
cargo-contract
out in February 2025.
We are actively working on this migration guide. All breaking changes and new features will eventually be documented there.
What has not yet been migrated is Contracts UI
and external libraries (such as ink!athon, the
ink! Analyzer VS Code extension,
polkadot-js
, โฆ).
We are in contact with the maintainers of these external libraries about migrating as well.
๐ธ ink!ubator 2.0โ
The ink!ubator is a funding program for advancing the ink! ecosystem. The first round of projects was completed in autumn 2024! A final summary was posted by Toma, one of the curators, on the Polkadot Forum here.
Applications for the second round will open soon. The best way to follow this is to watch the ink!ubator 2.0 repository on GitHub.
โQuestions?โ
In case you have any questions, the best way to reach out is in our Telegram group or the Polkadot Forum.