testnetSwap.js 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. const { CHAIN_ID } = require("@layerzerolabs/lz-sdk")
  2. task("testnetSwap", "swap using stargate")
  3. .addParam("poolId", "the poolId")
  4. .addParam("dstPoolId", "the destination poolId")
  5. .addParam("qty", "the quantity to swap")
  6. .addParam("targetNetwork", "the destination netowrk to swap() tokens to")
  7. .setAction(async (taskArgs) => {
  8. let accounts = await ethers.getSigners()
  9. let owner = accounts[0] // me
  10. console.log(`owner: ${owner.address}`)
  11. const factory = await ethers.getContract("Factory")
  12. console.log(`-> [stargate] factory.address: ${factory.address}`)
  13. const router = await ethers.getContract("Router")
  14. console.log(`-> [stargate] router.address: ${router.address}`)
  15. // get the token address from the router for the pool id so we know the address to approve
  16. let Pool = await ethers.getContractFactory("Pool")
  17. let poolData = await factory.getPool(taskArgs.poolId)
  18. let pool = await Pool.attach(poolData)
  19. let poolTokenAddr = await pool.token()
  20. console.log(`swap() poolTokenAddr: ${poolTokenAddr}`)
  21. let MockToken = await ethers.getContractFactory("MockToken") // erc20
  22. let mockToken = await MockToken.attach(poolTokenAddr)
  23. await (await mockToken.approve(router.address, taskArgs.qty)).wait(1)
  24. let bnQty = ethers.BigNumber.from(taskArgs.qty)
  25. let bnQtyMin = bnQty.mul(993).div(1000)
  26. let dstChainId = CHAIN_ID[taskArgs.targetNetwork]
  27. console.log(`source(${CHAIN_ID[hre.network.name]}) swap--> dstChainId(${dstChainId})`)
  28. let tx = await (
  29. await router.swap(
  30. dstChainId,
  31. taskArgs.poolId,
  32. taskArgs.dstPoolId,
  33. owner.address,
  34. bnQty,
  35. bnQtyMin,
  36. { dstGasForCall: 0, dstNativeAmount: 0, dstNativeAddr: "0x" },
  37. owner.address,
  38. "0x",
  39. { value: ethers.utils.parseEther("0.1") } // guess a value high enough , it refunds extra
  40. )
  41. ).wait()
  42. console.log(`tx.transactionHash: ${tx.transactionHash}`)
  43. })