|
|
@@ -0,0 +1,56 @@
|
|
|
+import Web3, { eth } from "web3";
|
|
|
+import { BigNumber } from "bignumber.js";
|
|
|
+import { Wallet, Provider } from "zksync-web3";
|
|
|
+import { ethers } from "ethers";
|
|
|
+import spacefiRouterAbi from "./spacefiRouterAbi.json" assert { type: "json" };
|
|
|
+import spacefiFactoryAbi from "./spacefiFactoryAbi.json" assert { type: "json" };
|
|
|
+import spacefiPairAbi from "./spacefiPairAbi.json" assert { type: "json" };
|
|
|
+
|
|
|
+const rpc = "https://zksync2-testnet.zksync.dev/";
|
|
|
+const privateKey = "0xd768b0b3f8dedcb465ad680268453391f7da6ec4e1942a13fdfcdea8773aab3e";
|
|
|
+const spaceFiRouterAddress = "0x6eeF3310E09DF3aa819Cc2aa364D4f3Ad2E6fFe3";
|
|
|
+const usdcAddress = "0x0faF6df7054946141266420b43783387A78d82A9";
|
|
|
+
|
|
|
+const provider = new Provider(rpc);
|
|
|
+const wallet = new Wallet(privateKey).connect(provider);
|
|
|
+const web3 = new Web3(new Web3.providers.HttpProvider(rpc));
|
|
|
+
|
|
|
+const value = ethers.utils.parseEther("0.001");
|
|
|
+const spacefiRouter = new web3.eth.Contract(spacefiRouterAbi, spaceFiRouterAddress);
|
|
|
+const wethAddress = await spacefiRouter.methods.WETH().call();
|
|
|
+console.log(`wethAddress: ${wethAddress}`);
|
|
|
+const d = ethers.BigNumber.from(usdcAddress).gt(ethers.BigNumber.from(wethAddress));
|
|
|
+const inputToken = "eth";
|
|
|
+const inputEth = inputToken === "eth";
|
|
|
+console.log(`d: ${d}`);
|
|
|
+const factoryAddress = await spacefiRouter.methods.factory().call();
|
|
|
+console.log(`factoryAddress: ${factoryAddress}`);
|
|
|
+const factory = new web3.eth.Contract(spacefiFactoryAbi, factoryAddress);
|
|
|
+const pairAddress = await factory.methods.getPair(wethAddress, usdcAddress).call();
|
|
|
+console.log(`pairAddress: ${pairAddress}`);
|
|
|
+const pair = new web3.eth.Contract(spacefiPairAbi, pairAddress);
|
|
|
+const reserves = await pair.methods.getReserves().call();
|
|
|
+const amountOut = await spacefiRouter.methods
|
|
|
+ .quote(value.toHexString(), d ^ inputEth ? reserves[1] : reserves[0], d ^ inputEth ? reserves[0] : reserves[1])
|
|
|
+ .call();
|
|
|
+console.log(`out: ${ethers.utils.formatUnits(amountOut, 6)}`);
|
|
|
+
|
|
|
+const liquidity = await pair.methods.balanceOf(wallet.address).call();
|
|
|
+console.log(`liquidity: ${liquidity}`);
|
|
|
+
|
|
|
+const removeLiquidity = await spacefiRouter.methods.removeLiquidityETH(
|
|
|
+ usdcAddress,
|
|
|
+ liquidity,
|
|
|
+ 0,
|
|
|
+ 0,
|
|
|
+ wallet.address,
|
|
|
+ Math.floor(new Date().getTime() / 1000 + 60 * 30)
|
|
|
+);
|
|
|
+const gasLimit = await removeLiquidity.estimateGas({ from: wallet.address });
|
|
|
+console.log(`gasLimit: ${gasLimit}`);
|
|
|
+const tx = await wallet.sendTransaction({
|
|
|
+ to: spaceFiRouterAddress,
|
|
|
+ data: removeLiquidity.encodeABI(),
|
|
|
+ gasLimit,
|
|
|
+});
|
|
|
+console.log(tx);
|