Skip to main content

Chain Extensions

Chain extension is a way to extend contracts API to add contracts to runtime pallet interaction. By default, contracts can only do cross-contract calls within their environment (pallet-contracts). Chain extension allows to add custom callable pallet functions.

ink-ce

What chain extensions are available ?​

Assets​

This chain extension adds call to pallet_assets so that you can use Assets in your contracts. More info in the chain-extensions contracts repo.

Account Unification​

This chain extension adds query to pallet_unified_accounts so that you can query Unified addresses. Find usage and tests in ink! XVM SDK repo

Availability in networks​

Chain extensionShibuyaShidenAstar
Assets✅✅✅
Account Unification✅⬜⬜

Implementations​

There are two implementations: one in the runtime and one on the ink! side.

Runtine​

Implementation of the chain extension on runtime side is available on Astar repository, under chain-extensions folder

ink! implementation​

On contract side the implementation is made using ChainExtensionMethod that uses a custom environment (so it can be used with other libraries that use custom environment like OpenBrush). It is implemented as a crate that you can import in you contract. It can be found in chain-extension contracts repository

Contracts examples​

Video tutorials​

  • dApp Staking Chain Extension on ink! Smart Contracts by @AstarNetwork on Youtube
  • Build a Scheduler Chain Extension by @Parity on Youtube