| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- import { BaseChain, ChainId, initialChainTable } from "iziswap-sdk/lib/base/index.js";
- import Web3 from "web3";
- import {
- getLiquidities,
- getLimitOrders,
- getPointDelta,
- getPoolContract,
- getPoolState,
- } from "iziswap-sdk/lib/pool/index.js";
- import { getPoolAddress, getLiquidityManagerContract } from "iziswap-sdk/lib/liquidityManager/index.js";
- import { Orders } from "iziswap-sdk/lib/swapQuery/library/Orders.js";
- import { LogPowMath } from "iziswap-sdk/lib/swapQuery/library/LogPowMath.js";
- import { iZiSwapPool } from "iziswap-sdk/lib/swapQuery/iZiSwapPool.js";
- import { decimal2Amount, fetchToken } from "iziswap-sdk/lib/base/token/token.js";
- import { SwapQuery } from "iziswap-sdk/lib/swapQuery/library/State.js";
- import { SwapX2YModule } from "iziswap-sdk/lib/swapQuery/swapX2YModule.js";
- import JSBI from "jsbi";
- import { getQuoterContract, quoterSwapSingleWithExactInput } from "iziswap-sdk/lib/quoter/funcs.js";
- import { QuoterSwapSingleWithExactInputParams } from "iziswap-sdk/lib/quoter/index.js";
- async function main() {
- const chain = initialChainTable[ChainId.ZkSyncAlphaTest];
- // test net
- const rpc = "https://zksync2-testnet.zksync.dev/";
- console.log("rpc: ", rpc);
- const web3 = new Web3(new Web3.providers.HttpProvider(rpc));
- const liquidityManagerAddress = "0x25727b360604E1e6B440c3B25aF368F54fc580B6";
- const liquidityManagerContract = getLiquidityManagerContract(liquidityManagerAddress, web3);
- console.log("liquidity manager address: ", liquidityManagerAddress);
- const iZiAddress = "0xA5900cce51c45Ab9730039943B3863C822342034".toLowerCase();
- const iZi = await fetchToken(iZiAddress, chain, web3);
- const BNB = await fetchToken(BNBAddress, chain, web3);
- const fee = 2000; // 2000 means 0.2%
- const poolAddress = await getPoolAddress(liquidityManagerContract, iZi, chain.token, fee);
- const tokenXAddress = iZiAddress < BNBAddress ? iZiAddress : BNBAddress;
- const tokenYAddress = iZiAddress < BNBAddress ? BNBAddress : iZiAddress;
- const poolContract = getPoolContract(poolAddress, web3);
- const state = await getPoolState(poolContract);
- console.log("state: ", state);
- const pointDelta = await getPointDelta(poolContract);
- console.log("pointDelta: ", pointDelta);
- const leftPoint = state.currentPoint - 5000;
- const rightPoint = state.currentPoint + 5000;
- const batchsize = 2000;
- const liquidityData = await getLiquidities(
- poolContract,
- leftPoint,
- rightPoint,
- state.currentPoint,
- pointDelta,
- state.liquidity,
- batchsize
- );
- console.log(
- "liquidityData.liquidities: ",
- liquidityData.liquidities.map((e) => e.toString())
- );
- console.log("liquidityData.point: ", liquidityData.point);
- const limitOrderData = await getLimitOrders(poolContract, leftPoint, rightPoint, pointDelta, batchsize);
- console.log(
- "limitOrderData.sellingX: ",
- limitOrderData.sellingX.map((e) => e.toString())
- );
- console.log("limitOrderData.sellingXPoint: ", limitOrderData.sellingXPoint);
- console.log(
- "limitOrderData.sellingY: ",
- limitOrderData.sellingY.map((e) => e.toString())
- );
- console.log("limitOrderData.sellingYPoint: ", limitOrderData.sellingYPoint);
- const orders = {
- liquidity: liquidityData.liquidities,
- liquidityDeltaPoint: liquidityData.point,
- sellingX: limitOrderData.sellingX,
- sellingXPoint: limitOrderData.sellingXPoint,
- sellingY: limitOrderData.sellingY,
- sellingYPoint: limitOrderData.sellingYPoint,
- };
- const sqrtRate_96 = LogPowMath.getSqrtPrice(1);
- const swapQueryState = {
- currentPoint: state.currentPoint,
- liquidity: JSBI.BigInt(state.liquidity),
- sqrtPrice_96: LogPowMath.getSqrtPrice(state.currentPoint),
- liquidityX: JSBI.BigInt(state.liquidityX),
- };
- const pool = new iZiSwapPool(swapQueryState, orders, sqrtRate_96, pointDelta, fee);
- const lowPt = state.currentPoint - 1500;
- const inputAmountStr = decimal2Amount(5, iZi).toFixed(0);
- const { amountX, amountY } = SwapX2YModule.swapX2Y(pool, JSBI.BigInt(inputAmountStr), lowPt);
- console.log("cost: ", amountX.toString());
- console.log("acquire: ", amountY.toString());
- // compare with quoter
- const quoterAddress = "0x4bCACcF9A0FC3246449AC8A42A8918F2349Ed543";
- const quoterContract = getQuoterContract(quoterAddress, web3);
- const params = {
- inputToken: iZi,
- outputToken: BNB,
- fee: fee,
- inputAmount: inputAmountStr,
- boundaryPt: lowPt,
- };
- const { outputAmount, finalPoint } = await quoterSwapSingleWithExactInput(quoterContract, params);
- console.log("outputAmount: ", outputAmount);
- console.log("finalPoint: ", finalPoint);
- }
- main()
- .then(() => process.exit(0))
- .catch((error) => {
- console.error(error);
- process.exit(1);
- });
|