|
| 1 | +import '@acala-network/types'; |
| 2 | + |
| 3 | +import { ACA, LDOT } from '@acala-network/contracts/utils/AcalaTokens'; |
| 4 | +import { ApiPromise, WsProvider } from '@polkadot/api'; |
| 5 | +import { DEX } from '@acala-network/contracts/utils/Predeploy'; |
| 6 | +import { TransactionReceipt } from '@ethersproject/providers'; |
| 7 | +import { Wallet, constants } from 'ethers'; |
| 8 | +import { ethers } from 'hardhat'; |
| 9 | +import { parseUnits } from 'ethers/lib/utils'; |
| 10 | + |
| 11 | +import { ADDRESSES, CHAIN, ROUTER_TOKEN_INFO } from './consts'; |
| 12 | +import { DropAndBootstrapStakeFactory__factory, DropAndBootstrapStakeRouter__factory, ERC20__factory } from '../typechain-types'; |
| 13 | + |
| 14 | +const FACTORY_ADDR = '0x05598F8A9a74f6BDc31F9Da93B051114c0a41923'; |
| 15 | +const EUPHRATES_ADDR = '0x7Fe92EC600F15cD25253b421bc151c51b0276b7D'; |
| 16 | +const JITOSOL_ADDR = ROUTER_TOKEN_INFO.jitosol.acalaAddr; |
| 17 | +const FEE_ADDR = ADDRESSES[CHAIN.ACALA].feeAddr; |
| 18 | + |
| 19 | +const NODE_URL = 'wss://crosschain-dev.polkawallet.io/chopsticksAcala'; |
| 20 | + |
| 21 | +(async () => { |
| 22 | + const api = await ApiPromise.create({ |
| 23 | + provider: new WsProvider(NODE_URL), |
| 24 | + }); |
| 25 | + |
| 26 | + const [wallet] = await ethers.getSigners(); |
| 27 | + const aca = ERC20__factory.connect(ACA, wallet); |
| 28 | + const jitosol = ERC20__factory.connect(JITOSOL_ADDR, wallet); |
| 29 | + const factory = DropAndBootstrapStakeFactory__factory.connect(FACTORY_ADDR, wallet); |
| 30 | + |
| 31 | + // prepare the route instructions |
| 32 | + const recipient = Wallet.createRandom().address; |
| 33 | + const dropAmount = parseUnits(process.env.GAS_DROP ?? '0', 12); |
| 34 | + |
| 35 | + const insts = { |
| 36 | + euphrates: EUPHRATES_ADDR, |
| 37 | + dex: DEX, |
| 38 | + dropToken: ACA, |
| 39 | + otherContributionToken: LDOT, |
| 40 | + poolId: 7, |
| 41 | + recipient, |
| 42 | + dropFee: 0, |
| 43 | + feeReceiver: wallet.address, |
| 44 | + }; |
| 45 | + |
| 46 | + if (dropAmount.gt(0)) { |
| 47 | + console.log('approving ACA to fatory ...'); |
| 48 | + await (await aca.approve(FACTORY_ADDR, constants.MaxUint256)).wait(); |
| 49 | + } |
| 50 | + |
| 51 | + const routerAddr = await factory.callStatic.deployDropAndBootstrapStakeRouter( |
| 52 | + FEE_ADDR, |
| 53 | + insts, |
| 54 | + dropAmount, |
| 55 | + ); |
| 56 | + |
| 57 | + console.log({ routerAddr }); |
| 58 | + |
| 59 | + for (let i = 0; i < 3; i++) { |
| 60 | + console.log(''); |
| 61 | + console.log(`-------------------- RUN ${i} --------------------`); |
| 62 | + console.log('transfering jitosol to router ...'); |
| 63 | + const transferAmount = parseUnits('0.1', 9); |
| 64 | + await (await jitosol.transfer(routerAddr, transferAmount)).wait(); |
| 65 | + |
| 66 | + const _routerAddr = await factory.callStatic.deployDropAndBootstrapStakeRouter( |
| 67 | + FEE_ADDR, |
| 68 | + insts, |
| 69 | + dropAmount, |
| 70 | + ); |
| 71 | + |
| 72 | + if (_routerAddr !== routerAddr) { |
| 73 | + throw new Error('router address mismatch'); |
| 74 | + } else { |
| 75 | + console.log('router address match'); |
| 76 | + } |
| 77 | + |
| 78 | + const receipt = await (await factory.deployDropAndBootstrapStakeRouterAndRoute( |
| 79 | + FEE_ADDR, |
| 80 | + insts, |
| 81 | + JITOSOL_ADDR, |
| 82 | + dropAmount, |
| 83 | + )).wait(); |
| 84 | + |
| 85 | + console.log('querying tx info ...'); |
| 86 | + const blockHash = receipt.blockHash; |
| 87 | + const apiAt = await api.at(blockHash); |
| 88 | + const events = await apiAt.query.system.events(); |
| 89 | + const evmEvents = events.filter(e => e.event.section.toLocaleLowerCase() === 'evm'); |
| 90 | + |
| 91 | + for (const evmEvent of evmEvents) { |
| 92 | + console.log(evmEvent.event.toHuman()); |
| 93 | + } |
| 94 | + } |
| 95 | + |
| 96 | + await api.disconnect(); |
| 97 | +})(); |
0 commit comments