feat: make polymarket fetcher more efficient
This commit is contained in:
parent
27652407fd
commit
b7409b23f2
|
@ -1,4 +1,3 @@
|
|||
/* Imports */
|
||||
import axios from "axios";
|
||||
import { databaseUpsert } from "../database/database-wrapper";
|
||||
import { calculateStars } from "../utils/stars";
|
||||
|
@ -12,14 +11,15 @@ async function fetchAllContractInfo() {
|
|||
// for info which the polymarket graphql API
|
||||
let response = await axios
|
||||
.get(
|
||||
"https://strapi-matic.poly.market/markets?active=true&_sort=volume:desc&_limit=-1"
|
||||
"https://strapi-matic.poly.market/markets?active=true&_sort=volume:desc&closed=false&_limit=-1"
|
||||
// "https://strapi-matic.poly.market/markets?active=true&_sort=volume:desc&_limit=-1" to get all markets, including closed ones
|
||||
)
|
||||
.then((query) => query.data);
|
||||
response = response.filter((res) => res.closed != true);
|
||||
return response;
|
||||
}
|
||||
|
||||
async function fetchAllContractData() {
|
||||
async function fetchIndividualContractData(marketMakerAddress) {
|
||||
let daysSinceEra = Math.round(Date.now() / (1000 * 24 * 60 * 60)) - 7; // last week
|
||||
let response = await axios({
|
||||
url: graphQLendpoint,
|
||||
|
@ -30,6 +30,7 @@ async function fetchAllContractData() {
|
|||
{
|
||||
fixedProductMarketMakers(first: 1000
|
||||
where: {
|
||||
id: "${marketMakerAddress}"
|
||||
lastActiveDay_gt: ${daysSinceEra}
|
||||
}){
|
||||
id
|
||||
|
@ -59,90 +60,76 @@ async function fetchAllContractData() {
|
|||
return response;
|
||||
}
|
||||
|
||||
async function fetch_all() {
|
||||
let allData = await fetchAllContractData();
|
||||
let allInfo = await fetchAllContractInfo();
|
||||
|
||||
let infos = {};
|
||||
for (let info of allInfo) {
|
||||
let address = info.marketMakerAddress;
|
||||
let addressLowerCase = address.toLowerCase();
|
||||
//delete info.history
|
||||
if (info.outcomes[0] != "Long" || info.outcomes[1] != "Long")
|
||||
infos[addressLowerCase] = {
|
||||
title: info.question,
|
||||
url: "https://polymarket.com/market/" + info.slug,
|
||||
address: address,
|
||||
description: info.description,
|
||||
outcomes: info.outcomes,
|
||||
options: [],
|
||||
category: info.category,
|
||||
};
|
||||
}
|
||||
|
||||
async function fetchAll() {
|
||||
let results = [];
|
||||
for (let data of allData) {
|
||||
let addressLowerCase = data.id;
|
||||
// console.log(data)
|
||||
if (infos[addressLowerCase] != undefined) {
|
||||
// console.log(addressLowerCase)
|
||||
let id = `polymarket-${addressLowerCase.slice(0, 10)}`;
|
||||
let info = infos[addressLowerCase];
|
||||
let numforecasts = Number(data.tradesQuantity);
|
||||
let tradevolume =
|
||||
(Number(data.collateralBuyVolume) + Number(data.collateralSellVolume)) /
|
||||
units;
|
||||
let liquidity = Number(data.liquidityParameter) / units;
|
||||
// let isbinary = Number(data.conditions[0].outcomeSlotCount) == 2
|
||||
// let percentage = Number(data.outcomeTokenPrices[0]) * 100
|
||||
// let percentageFormatted = isbinary ? (percentage.toFixed(0) + "%") : "none"
|
||||
let options = [];
|
||||
for (let outcome in data.outcomeTokenPrices) {
|
||||
options.push({
|
||||
name: info.outcomes[outcome],
|
||||
probability: data.outcomeTokenPrices[outcome],
|
||||
type: "PROBABILITY",
|
||||
});
|
||||
}
|
||||
let webpageEndpointData = await fetchAllContractInfo();
|
||||
for (let marketInfo of webpageEndpointData) {
|
||||
let address = marketInfo.marketMakerAddress;
|
||||
let addressLowerCase = address.toLowerCase();
|
||||
if (marketInfo.outcomes[0] != "Long" || marketInfo.outcomes[1] != "Long") {
|
||||
let moreMarketAnswer = await fetchIndividualContractData(
|
||||
addressLowerCase
|
||||
);
|
||||
if (moreMarketAnswer.length > 0) {
|
||||
let moreMarketInfo = moreMarketAnswer[0];
|
||||
let id = `polymarket-${addressLowerCase.slice(0, 10)}`;
|
||||
console.log(id);
|
||||
let numforecasts = Number(moreMarketInfo.tradesQuantity);
|
||||
let tradevolume =
|
||||
(Number(moreMarketInfo.collateralBuyVolume) +
|
||||
Number(moreMarketInfo.collateralSellVolume)) /
|
||||
units;
|
||||
let liquidity = Number(moreMarketInfo.liquidityParameter) / units;
|
||||
// let isbinary = Number(moreMarketInfo.conditions[0].outcomeSlotCount) == 2
|
||||
// let percentage = Number(moreMarketInfo.outcomeTokenPrices[0]) * 100
|
||||
// let percentageFormatted = isbinary ? (percentage.toFixed(0) + "%") : "none"
|
||||
let options = [];
|
||||
for (let outcome in moreMarketInfo.outcomeTokenPrices) {
|
||||
options.push({
|
||||
name: marketInfo.outcomes[outcome],
|
||||
probability: moreMarketInfo.outcomeTokenPrices[outcome],
|
||||
type: "PROBABILITY",
|
||||
});
|
||||
}
|
||||
|
||||
let result = {
|
||||
id: id,
|
||||
title: info.title,
|
||||
url: info.url,
|
||||
platform: "PolyMarket",
|
||||
description: info.description,
|
||||
options: options,
|
||||
timestamp: new Date().toISOString(),
|
||||
qualityindicators: {
|
||||
numforecasts: numforecasts.toFixed(0),
|
||||
liquidity: liquidity.toFixed(2),
|
||||
tradevolume: tradevolume.toFixed(2),
|
||||
stars: calculateStars("Polymarket", {
|
||||
liquidity,
|
||||
option: options[0],
|
||||
volume: tradevolume,
|
||||
}),
|
||||
},
|
||||
extra: {
|
||||
address: info.address,
|
||||
},
|
||||
/*
|
||||
*/
|
||||
};
|
||||
if (info.category != "Sports") {
|
||||
// console.log(result)
|
||||
results.push(result);
|
||||
let result = {
|
||||
id: id,
|
||||
title: marketInfo.title,
|
||||
url: marketInfo.url,
|
||||
platform: "PolyMarket",
|
||||
description: marketInfo.description,
|
||||
options: options,
|
||||
timestamp: new Date().toISOString(),
|
||||
qualityindicators: {
|
||||
numforecasts: numforecasts.toFixed(0),
|
||||
liquidity: liquidity.toFixed(2),
|
||||
tradevolume: tradevolume.toFixed(2),
|
||||
stars: calculateStars("Polymarket", {
|
||||
liquidity,
|
||||
option: options[0],
|
||||
volume: tradevolume,
|
||||
}),
|
||||
},
|
||||
extra: {
|
||||
address: marketInfo.address,
|
||||
},
|
||||
/*
|
||||
*/
|
||||
};
|
||||
if (marketInfo.category != "Sports") {
|
||||
// console.log(result)
|
||||
results.push(result);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return results; //resultsProcessed
|
||||
return results;
|
||||
}
|
||||
|
||||
/* Body */
|
||||
export async function polymarket() {
|
||||
let results = await fetch_all();
|
||||
let results = await fetchAll();
|
||||
await databaseUpsert({ contents: results, group: "polymarket" });
|
||||
|
||||
console.log("Done");
|
||||
}
|
||||
// polymarket()
|
||||
// polymarket();
|
||||
|
|
Loading…
Reference in New Issue
Block a user