@skalenetwork/ima-js
Version:
Simple TS/JS library to interact with SKALE IMA
98 lines (77 loc) • 3.33 kB
text/typescript
import { Wallet, Contract } from "ethers";
import { Logger, ILogObj } from "tslog";
import * as utils from '../test/test_utils';
import { MainnetChain, SChain } from "../src";
import TxOpts from '../src/TxOpts';
const log: Logger<ILogObj> = new Logger();
async function ethM2S(
mainnet: MainnetChain,
sChain: SChain,
wallet: Wallet,
destChainName: string,
value: bigint = utils.TEST_WEI_TRANSFER_VALUE
) {
const balanceBefore: bigint = await sChain.ethBalance(wallet.address)
const txOpts: TxOpts = { value, address: wallet.address, privateKey: wallet.privateKey }
const tx = await mainnet.eth.deposit(destChainName, txOpts)
await sChain.waitETHBalanceChange(wallet.address, balanceBefore)
let balanceAfter: bigint = await sChain.ethBalance(wallet.address)
return { tx, balanceBefore, balanceAfter }
}
async function ethS2M(
mainnet: MainnetChain,
sChain: SChain,
wallet: Wallet,
value: bigint = utils.TEST_WEI_TRANSFER_VALUE
) {
const balanceBefore: bigint = await mainnet.ethBalance(wallet.address)
const txOpts: TxOpts = { value, address: wallet.address, privateKey: wallet.privateKey }
const tx = await sChain.eth.withdraw(value, txOpts)
await mainnet.waitETHBalanceChange(wallet.address, balanceBefore)
const balanceAfter: bigint = await mainnet.ethBalance(wallet.address)
return { tx, balanceBefore, balanceAfter }
}
async function erc20M2S(
mainnet: MainnetChain,
sChain: SChain,
wallet: Wallet,
tokenSource: Contract,
tokenDest: Contract,
destChainName: string,
value: bigint = utils.TEST_WEI_TRANSFER_VALUE
) {
const symbol = await tokenSource.symbol()
if (!mainnet.erc20.tokens[symbol]) {
mainnet.erc20.addToken(symbol, tokenSource)
}
if (!sChain.erc20.tokens[symbol]) {
sChain.erc20.addToken(symbol, tokenDest)
}
let balanceBefore: bigint = await sChain.getERC20Balance(tokenDest, wallet.address)
let txOpts: TxOpts = { value, address: wallet.address, privateKey: wallet.privateKey }
const tx = await mainnet.erc20.deposit(destChainName, symbol, value, txOpts)
await sChain.waitERC20BalanceChange(tokenDest, wallet.address, balanceBefore)
let balanceAfter: bigint = await sChain.getERC20Balance(tokenDest, wallet.address)
return { tx, balanceBefore, balanceAfter }
}
async function transferETH() {
const wallet = new Wallet(utils.SCHAIN_PRIVATE_KEY);
const mainnet = utils.initTestMainnet();
const sChain1 = utils.initTestSChain(utils.SCHAIN_ENDPOINT);
log.info(await mainnet.ethBalance(wallet.address))
log.info(await sChain1.ethBalance(wallet.address))
await ethM2S(mainnet, sChain1, wallet, utils.CHAIN_NAME_SCHAIN)
log.info(await mainnet.ethBalance(wallet.address))
log.info(await sChain1.ethBalance(wallet.address))
await ethS2M(mainnet, sChain1, wallet)
log.info(await mainnet.ethBalance(wallet.address))
log.info(await sChain1.ethBalance(wallet.address))
}
async function test() {
const sChain1 = utils.initTestSChain(utils.SCHAIN_ENDPOINT);
const mainnetHash = await sChain1.communityLocker.contract.MAINNET_HASH()
const limit = await sChain1.communityLocker.contract.timeLimitPerMessage(mainnetHash)
console.log(limit)
}
// await transferETH()
await test()