burn.mjs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import Web3, { eth } from "web3";
  2. import { BigNumber } from "bignumber.js";
  3. import { Wallet, Provider } from "zksync-web3";
  4. import SyncSwapPoolAbi from "./SyncSwapClassicPool.json" assert { type: "json" };
  5. import SyncSwapPoolFactoryAbi from "./SyncSwapClassicPoolFactory.json" assert { type: "json" };
  6. import SyncSwapRouterAbi from "./SyncSwapRouter.json" assert { type: "json" };
  7. import { ethers } from "ethers";
  8. const rpc = "https://zksync2-testnet.zksync.dev/";
  9. const walletAddress = "0x93626e5d46772652a8100a3ffc34d7bad8b29e00";
  10. const privateKey = "0xd768b0b3f8dedcb465ad680268453391f7da6ec4e1942a13fdfcdea8773aab3e";
  11. const poolFactoryAddress = "0xf2FD2bc2fBC12842aAb6FbB8b1159a6a83E72006";
  12. const routerAddress = "0xB3b7fCbb8Db37bC6f572634299A58f51622A847e";
  13. const wethAddress = "0x20b28b1e4665fff290650586ad76e977eab90c5d";
  14. const usdcAddress = "0x0faF6df7054946141266420b43783387A78d82A9";
  15. const provider = new Provider(rpc);
  16. const wallet = new Wallet(privateKey).connect(provider);
  17. console.log("rpc: ", rpc);
  18. const web3 = new Web3(new Web3.providers.HttpProvider(rpc));
  19. const account = web3.eth.accounts.privateKeyToAccount(privateKey);
  20. console.log("address: ", account.address);
  21. const poolFactory = new web3.eth.Contract(SyncSwapPoolFactoryAbi, poolFactoryAddress);
  22. const poolAddress = await poolFactory.methods.getPool(wethAddress, usdcAddress).call();
  23. console.log("poolAddress: ", poolAddress);
  24. const pool = new web3.eth.Contract(SyncSwapPoolAbi, poolAddress);
  25. const liquidity = await pool.methods.balanceOf(walletAddress).call();
  26. console.log("liquidity: ", liquidity);
  27. const router = new web3.eth.Contract(SyncSwapRouterAbi, routerAddress);
  28. const burnLiquiditySingle = router.methods.burnLiquiditySingle(
  29. poolAddress,
  30. liquidity,
  31. ethers.utils.defaultAbiCoder.encode(
  32. ["uint256", "uint256", "uint8"],
  33. [ethers.constants.AddressZero, walletAddress, "0"]
  34. ),
  35. "0",
  36. ethers.constants.AddressZero,
  37. "0x"
  38. );
  39. const gasLimit = await burnLiquiditySingle.estimateGas({
  40. from: walletAddress,
  41. });
  42. console.log("gasLimit: ", gasLimit);
  43. const tx = await wallet.sendTransaction({
  44. // from: wallet.address,
  45. to: routerAddress,
  46. data: burnLiquiditySingle.encodeABI(),
  47. gasLimit,
  48. });
  49. console.log("tx: ", tx);