ink-xvm-sdk
ink-xvm-sdk copied to clipboard
The Ink! smart contract SDK for XVM interface.
Ink! XVM SDK
This repository contains examples contracts using XVM to call EVM from ink! needed to use XVM from WASM contracts. It contains an implementation of XVM chain-extension to use in your contracts. As well as ink! contracts SDK that implements XVM chain-extension to be used as is.
Contracts SDK
PSP22 Wrapper
This implementation is a wrapper of an underlying ERC20
on EVM. Interact with native substrate addresses.
As it implements wrapper pattern it has deposit
& withdraw
function and can be used as a bridgeless solution between WASM VM & EVM.
It implements PSP22
standard, thus can be used in any DEX/wallet supporting it.
Please have a look at the tests that describe the flow to use deposit
and withdraw
.
PSP34 Wrapper
This implementation is a wrapper of an underlying ERC721
on EVM. Interact with substrate native substrate addresses.
As it implements wrapper pattern it has deposit
& withdraw
function and can be used as a bridgeless solution between WASM VM & EVM.
It implements PSP34
standard, and thus can be used in any DEX/wallet supporting it.
Library
XVM environment
Implementation of XVM chain extension added to a custom XvmDefaultEnvironment
.
- Import the crate in your Cargo.toml
- Add it to your contract in ink! macro
#[ink::contract(env = xvm_sdk::XvmDefaultEnvironment)]
. - In your contract use it with
self.env().extension().xvm_call(..args)
.
XVM Builder
This crate exposes Xvm
struct that implements xvm_call with chain-extension builder from ink_env.
It makes it compatible with other custom environment like openbrush.
Have a look at PSP22 Wrapper for an example.
- Import the crate in your Cargo.toml
- Import struct in your contract use
use xvm_helper::*;
- Use it with
XvmErc20::transfer(..args)
Usage
Try it!
- Clone the repo
- Run
yarn
- Build ink! contracts
yarn build:ink
To run on local node:
Ensure you have a local node running with ./target/release/astar-collator --dev -lruntime::contracts=debug -l=runtime=debug,xvm=trace --enable-evm-rpcp
(to have XVM and ink! logs).
Then run yarn test
.
To run on Shibuya:
Create a .env file from .env.example and fill it with your credentials:
Add your Shibuya EVM private key in ACCOUNT_PRIVATE_KEY_EVM
And your Shibuya Substrate passphrase in SUBSTRATE_MNEMO
.
Then run yarn test:shibuya
.