testnetSwap.js 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. const {getEndpointIdByName} = require("../utils/layerzero")
  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 = getEndpointIdByName(taskArgs.targetNetwork)
  27. console.log(`source(${getEndpointIdByName(hre.network.name)}) swap--> dstChainId(${dstChainId})`);
  28. console.log('disChainId', dstChainId);
  29. console.log("poolId", taskArgs.poolId);
  30. console.log("dstPoolId", taskArgs.dstPoolId);
  31. console.log("address", owner.address);
  32. console.log("bnQty", bnQty);
  33. console.log("bnQtyMin", bnQtyMin);
  34. let tx = await (
  35. await router.swap(
  36. dstChainId,
  37. taskArgs.poolId,
  38. taskArgs.dstPoolId,
  39. owner.address,
  40. bnQty,
  41. bnQtyMin,
  42. {dstGasForCall: 0, dstNativeAmount: 0, dstNativeAddr: "0x"},
  43. owner.address,
  44. "0x",
  45. {value: ethers.utils.parseEther("0.1")} // guess a value high enough , it refunds extra
  46. )
  47. ).wait()
  48. console.log(`tx.transactionHash: ${tx.transactionHash}`)
  49. })