Closed poly-rodr closed 2 years ago
A script to test it once deployed and synced:
import axios from "axios";
import { BigNumber } from "ethers";
import { formatUnits } from "ethers/lib/utils";
const filterError = (g: any): boolean =>
g.collateralVolume !== g.tradesCollateralVolume ||
g.tradesQuantity !== g.tradesTradesQuantity;
const mapError = (g: any): any => {
if (g.collateralVolume !== g.tradesCollateralVolume) {
return {
id: g.id,
volume: g.collateralVolume,
buysVolume: g.collateralBuyVolume,
sellsVolume: g.collateralSellVolume,
tradeslVolume: g.tradesCollateralVolume,
buysTradesVolume: g.buyTradesCollateralVolume,
sellsTradesVolume: g.sellTradesCollateralVolume,
diff:
parseFloat(g.collateralVolume) - parseFloat(g.tradesCollateralVolume),
};
} else {
return {
id: g.id,
trades: g.tradesQuantity,
tradesTrades: g.tradesTradesQuantity,
diff: parseFloat(g.tradesQuantity) - parseFloat(g.tradesTradesQuantity),
};
}
};
const mapOk = (g: any): any => {
return {
id: g.id,
volume: g.collateralVolume,
buysVolume: g.collateralBuyVolume,
sellsVolume: g.collateralSellVolume,
tradeslVolume: g.tradesCollateralVolume,
buysTradesVolume: g.buyTradesCollateralVolume,
sellsTradesVolume: g.sellTradesCollateralVolume,
trades: g.tradesQuantity,
tradesTrades: g.tradesTradesQuantity,
};
};
const request = {
method: "post",
url: "http://localhost:8000/subgraphs/name/TokenUnion/polymarket",
headers: {
"Content-Type": "application/json",
},
data: JSON.stringify({
query: `query {
filledOrderBooks {
id
collateralVolume
collateralBuyVolume
collateralSellVolume
tradesQuantity
buys {
size
id
orderHash
}
sells {
size
id
orderHash
}
}
}`,
variables: {},
}),
};
axios(request)
.then(function (response) {
const filledOrderBooks = response.data.data.filledOrderBooks;
// group sells and buys to get the sizes
const grouped = filledOrderBooks.map((ob: any) => {
let tradesCollateralVolume = BigNumber.from("0");
let buyTradesCollateralVolume = BigNumber.from("0");
let sellTradesCollateralVolume = BigNumber.from("0");
let tradesTradesQuantity = 0;
if ("buys" in ob) {
ob.buys.forEach((buy: any) => {
tradesTradesQuantity++;
tradesCollateralVolume = tradesCollateralVolume.add(
BigNumber.from(buy.size)
);
buyTradesCollateralVolume = buyTradesCollateralVolume.add(
BigNumber.from(buy.size)
);
});
}
if ("sells" in ob) {
ob.sells.forEach((sell: any) => {
tradesTradesQuantity++;
tradesCollateralVolume = tradesCollateralVolume.add(
BigNumber.from(sell.size)
);
sellTradesCollateralVolume = sellTradesCollateralVolume.add(
BigNumber.from(sell.size)
);
});
}
return {
id: ob.id,
collateralVolume: formatUnits(BigNumber.from(ob.collateralVolume), 6),
buysAndSellsCollateralVolume: formatUnits(
BigNumber.from(ob.collateralBuyVolume).add(
BigNumber.from(ob.collateralSellVolume)
),
6
),
collateralBuyVolume: formatUnits(
BigNumber.from(ob.collateralBuyVolume),
6
),
collateralSellVolume: formatUnits(
BigNumber.from(ob.collateralSellVolume),
6
),
tradesCollateralVolume: formatUnits(
BigNumber.from(tradesCollateralVolume),
6
),
buyTradesCollateralVolume: formatUnits(
BigNumber.from(buyTradesCollateralVolume),
6
),
sellTradesCollateralVolume: formatUnits(
BigNumber.from(sellTradesCollateralVolume),
6
),
tradesQuantity: ob.tradesQuantity,
tradesTradesQuantity: tradesTradesQuantity.toString(),
};
});
// print results
if (grouped.find(filterError)) {
console.log("ERROR", grouped.filter(filterError).map(mapError));
} else {
console.log("OK", grouped.map(mapOk));
}
})
.catch(function (error) {
console.log(error);
});
Fixes: