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 ?

XVM

This chain extension enables usage of XVM in your contracts. More info in the ink! XVM SDK repo.

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
XVM
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