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.

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 extension | Shibuya | Shiden | Astar |
|---|---|---|---|
| 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