🍌
EVM-XCM Jungle Toolkit
  • πŸ“—Introduction
    • 🌴What is the EVM-XCM Jungle Toolkit?
    • 🧐Why use this toolkit?
    • πŸ‘ͺWho is this toolkit made for?
    • βš’οΈWhat tools are this toolkit made of?
  • ↔️Build an EVM+Substrate wallet compatible architecture in your dApp
    • ⁉️Two different standards
      • ℹ️Addresses Format
      • 🎭Public Key vs Hash-based
      • πŸ“©Multichain compatibility
      • ⚑Account Types
    • β˜‘οΈRecommended wallets
      • 🦊MetaMask
      • ☸️SubWallet
      • 🀚Talisman
    • 🟒The EVM address standard
      • πŸ”Get an address for a Signer
        • πŸ‘οΈCheck the validity of the address
      • πŸ’°Get the native balance of a Signer
        • Get an ERC20 token's balance
      • πŸŽ‡Get the chain information for a Signer
    • πŸ”΅The Substrate address standard
      • πŸ”Get an address for a Signer
        • πŸ‘οΈCheck the validity of the address
      • πŸ’°Get the native balance of a Signer
      • πŸŽ‡Get the chain information for a Signer
    • πŸ“§Mapping of addresses
    • 🀝Implement multiple wallet support on your dApp front-end
      • πŸ’šUnderstanding the EVM provider/signer concepts
      • ❀️Understanding the Keyring concept
      • πŸ”‘Sign and send EVM transactions
      • πŸ—οΈSign and send Substrate extrinsics
    • πŸ“šRessources
  • ➑️Build a cross-chain transaction from any EVM-chain to a Substrate-based chain using IBC and XCM
    • ⁉️Understanding the flow
    • πŸ¦‘Transfer tokens to Moonbeam Parachain using Squid SDK from any EVM chain
    • πŸͺCreate & execute a transaction on the source chain before bridging tokens (pre-hook)
    • πŸͺCreate & execute a transaction on Moonbeam after bridging tokens (post-hook)
    • ✨Create & execute a swap using Stellaswap pools to obtain xcTokens
    • πŸ™ŒWrap-up
    • πŸ“šRessources
  • ⬅️Build a cross-chain transaction from a Substrate-based chain to Moonbeam chain
    • ⁉️Understanding the flow
    • πŸ’‘Using LightSpell API to generate valid XCM calls
    • πŸŒ‰Transfer tokens between parachains (or relay chain) using XCM and ParaSpell SDK
    • πŸ™ŒWrap up
    • πŸ“šRessources
  • ⏩Build batches on source and destination chains using Squid and batch precompile
    • ⁉️Understanding the flow
    • πŸ‘ŒUnderstanding the batch precompile
    • βœ…Create a batch transaction compatible with Squid router
    • πŸͺIntegrate a batch into a Hook using Squid
    • πŸ™ŒWrap up
    • πŸ“šRessources
  • πŸ”Build a gas-less transaction from/to an EVM/Substrate chain using callPermit
    • ⁉️Understanding the flow
    • πŸ”‹Generating the data to sign
    • ✍️Collecting the signature
    • 🌐Relaying the signature
    • ⚑Executing the transaction
    • πŸ™ŒWrap up
    • πŸ“šRessources
  • πŸ”€Build a custodial solution to make your dApp wallet-less & gas-less using EIP-712
    • ⁉️Understanding the flow
    • ⛓️Smart contract
    • βš™οΈBack end
  • πŸ”½Examples of working cross-chain dApps made using the Jungle Toolkit
    • 🌴Case Study: The Great Escape
      • The Player Structure
      • The xDeposit Function
      • The xRegister Function
Powered by GitBook
On this page
  • "XCM is too complicated"
  • LightSpell and ParaSpell: the secret ingredients
  • Asking for a XCM route using ParaSpell API
  1. Build a cross-chain transaction from a Substrate-based chain to Moonbeam chain

Using LightSpell API to generate valid XCM calls

To move assets between a parachain to another parachain or directly to the relay chain, we need to sign an extrinsic to create a proper XCM message

"XCM is too complicated"

When it comes to XCM, it appears that it's often seen as a complicated tech, even sometimes obscure. The fact is, it is not and by using the proper tools, you can teleport tokens very easily in several directions, in a trusless and interoperable way. Better than easy, these operations between chains are very fast (about a minute) and not too costy regarding gas.

LightSpell and ParaSpell: the secret ingredients

To teleport our assets, we'll use LightSpell XCM API and Paraspell XCM SDK which are two very handy tools facilitating the task. Basically, these tools are doing the computation allowing us to focus on what we really want to achieve. A bit like Squid before, we just have to forge a proper route request to obtain a valid XCM call, easily executable later on.

Asking for a XCM route using ParaSpell API

const xcmApiUrl = "https://api.lightspell.xyz/";

// Construct XCM call from Relay chain to Parachain (DMP)
const dmpResponse = await fetch(
    `${xcmApiUrl}/x-transfer?` +
    new URLSearchParams({
        to: "Moonbeam",   // Replace "Moonbeam" with the destination Parachain
        amount: 100,      // Replace 100 with the amount you wish to transfer (Numeric value)
        address: "0x1234" // Replace "0x1234" with the destination wallet address (In AccountID32 or AccountKey20 Format)
    })
);

// Construct XCM call from Parachain chain to Relay chain (UMP)
const umpResponse = await fetch(
    `${xcmApiUrl}/x-transfer?` +
    new URLSearchParams({
        from: "Acala",    // Replace "Acala" with the sender Parachain
        amount: 200,      // Replace 200 with the amount you wish to transfer (Numeric value)
        address: "0x5678" // Replace "0x5678" with the destination wallet address (In AccountID32 or AccountKey20 Format)
    })
);

// Construct XCM call from Parachain to Parachain (HRMP)
const hrmpResponse = await fetch(
    `${xcmApiUrl}/x-transfer?` +
    new URLSearchParams({
        from: "Acala",      // Replace "Acala" with the sender Parachain
        to: "Moonbeam",     // Replace "Moonbeam" with the destination Parachain
        currency: "DOT",    // Replace "DOT" with asset id or symbol
        amount: 300,        // Replace 300 with the amount you wish to transfer (Numeric value)
        address: "0xABCD"   // Replace "0xABCD" with the destination wallet address (In AccountID32 or AccountKey20 Format)
    })
);

Last updated 1 year ago

⬅️
πŸ’‘