Skip to content

Latest commit

 

History

History
118 lines (91 loc) · 3.83 KB

File metadata and controls

118 lines (91 loc) · 3.83 KB

AUSD Bridge SDK

Summary

WormholePortal is an sdk support transfer aUSD from Acala to Karura with substract wallet.

Tips

  1. we recommend bounded the EVM address at first before transfer aUSD.
  2. please confirm that address in fromChain or toChain have enough native token as TX fee. the approve, transfer will charge fees at fromChain and the redeem will charge fees at toChain.
  3. the minimum transferable aUSD is 0.1 AUSD beacuse of that the aUSD existential deposit amount at Acala* is 0.1 and waUSD existential deposit at Karura is 0.1.

Transfer aUSD From Acala To Karura

  1. install
yarn add @acala-network/bodhi.js @acala-network/sdk@4.1.6.28
  1. setup sdk
import { EvmRpcProvider } from '@acala-network/eth-providers';
import { TransferParams, WormholePortal } from '@acala-network/sdk/wormhole-portal'
import { BigNumber } from "ethers"
import { Keyring } from '@polkadot/api';

const acalaProvider = new EvmRpcProvider(
  'wss://acala-polkadot.api.onfinality.io/public-ws',
  { subqlUrl: 'https://api.subquery.network/sq/AcalaNetwork/evm-acala' }
);

const karuraProvider = new EvmRpcProvider(
  'wss://karura.api.onfinality.io/public-ws',
  { subqlUrl: 'https://api.subquery.network/sq/AcalaNetwork/evm-karura' }
);

const sdk = new WormholePortal({
  ethProviders: {
    acala: acalaProvider,
    karura: karuraProvider
  }
});

await sdk.isReady;
  1. parper the transfer params
const keyring = new Keyring({ type: 'sr25519' });
const fromAccount = keyring.fromMenmonic('XXX);
const toAccount = keyring.fromMenominc('XXX);

const transferParams = {
  token: 'aUSD',
  fromChain: 'acala',
  toChain: 'karura',
  amount: BigNumber.from('1000000000000'),
  fromAddress: fromAccount.addres,
  toAddress: toAccount.addres
};
  1. approve balance and send balance
const approve = await sdk.approve(tranfesrParams);

await approve.signAndSend(fromAccount, { nonce: -1 });

// SHOULD WAIT APPROVE SUCCES

const transfer = await sdk.transfer(transferParams);

const hash = await transfer.signAndSend(fromAccount, { nonce: -1 });
  1. redeem
    when the tranfser finished, we should get signedVAA information from wormhole and send an redeem TX at toChain
// pass the transfer TX hash 
const redeem = await sdk.redeem({ ...transferParams, txHash: hash.toString() });

await redeem.signAndSend(toAccount, { nonce: -1 });

// SHOULD WAIT REDEEM SUCCES
  1. convert waUSD to aUSD
    the toAddress in karura will receive the same amount of waUSD in the distance of acala to karura after redeem TX successed, so we should send an additional TX to convert waUSD to aUSD
const convert = sdk.convert({ from: 'waUSD', to: 'aUSD', amount: 'all', address: transferParams.toAddress });

await convert.signAndSend(toAccount, { nonce: -1 });
  1. Congratulate that transfer aUSD from acala to karura successfully.

Transfer aUSD From Karura To Acala

Transfer aUSD from karura to acala is almost the same as from acala to karura, but should convert aUSD to waUSD at first.

const convert = sdk.convert({ from: 'aUSD', to: 'waUSD', amount: 'all', address: transferParams.toAddress });

await convert.signAndSend(fromAccount, { nonce: -1 });

const transferParams = {
  token: 'waUSD',
  fromChain: 'karura',
  toChain: 'acala',
  amount: BigNumber.from('1000000000000'),
  fromAddress: fromAccount.address,
  toAddress: toAccount.address
};

/** should complete approve and transfer **/

and then when the TX complated, we should redeem at toChain, but becareful should redeem aUSD this time.

const redeem = await sdk.redeem({ ...transferParams, token: 'aUSD', txHash: hash.toString() });

await redeem.signAndSend(toAccount, { nonce: -1 });