131 lines
4.1 KiB
JavaScript
131 lines
4.1 KiB
JavaScript
/* Imports */
|
|
import fs from 'fs'
|
|
import axios from "axios"
|
|
import {getstars} from "./stars.js"
|
|
|
|
/* Definitions */
|
|
let graphQLendpoint = "https://subgraph-matic.poly.market/subgraphs/name/TokenUnion/polymarket"//"https://subgraph-backup.poly.market/subgraphs/name/TokenUnion/polymarket"//'https://subgraph-matic.poly.market/subgraphs/name/TokenUnion/polymarket3'
|
|
let units = 10**6
|
|
|
|
/* Support functions
|
|
async function fetchAllContractInfo(){ // for info which the polymarket graphql API
|
|
let data = fs.readFileSync("./data/polymarket-contract-list.json")
|
|
let response = JSON.parse(data)
|
|
return response
|
|
}
|
|
*/
|
|
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')
|
|
.then(query => query.data);
|
|
response = response.filter(res => res.closed != true)
|
|
return response
|
|
}
|
|
|
|
async function fetchAllContractData(){
|
|
let daysSinceEra = Math.round(Date.now()/(1000*24*60*60))-2
|
|
let response = await axios({
|
|
url: graphQLendpoint,
|
|
method: 'POST',
|
|
headers: ({ 'Content-Type': 'application/json' }),
|
|
data: JSON.stringify(({ query: `
|
|
{
|
|
fixedProductMarketMakers(first: 300
|
|
where: {
|
|
lastActiveDay_gt: ${daysSinceEra}
|
|
}){
|
|
id
|
|
creator
|
|
creationTimestamp
|
|
fee
|
|
tradesQuantity
|
|
buysQuantity
|
|
sellsQuantity
|
|
lastActiveDay
|
|
outcomeTokenPrices
|
|
outcomeTokenAmounts
|
|
liquidityParameter
|
|
collateralBuyVolume
|
|
collateralSellVolume
|
|
conditions {
|
|
outcomeSlotCount
|
|
}
|
|
}
|
|
}
|
|
`
|
|
})),
|
|
})
|
|
.then(res => res.data)
|
|
.then(res => res.data.fixedProductMarketMakers)
|
|
//console.log(response)
|
|
return response
|
|
}
|
|
|
|
async function fetch_all(){
|
|
let allData = await fetchAllContractData()
|
|
let allInfo = await fetchAllContractInfo()
|
|
|
|
let combinedObj = ({})
|
|
for(let info of allInfo){
|
|
let address = info.marketMakerAddress
|
|
let addressLowerCase = address.toLowerCase()
|
|
//delete info.history
|
|
if(info.outcomes[0]!="Long" || info.outcomes[1]!="Short")
|
|
combinedObj[addressLowerCase] = {
|
|
title: info.question,
|
|
url: "https://polymarket.com/market/" + info.slug,
|
|
address: address,
|
|
description: info.description,
|
|
outcomes: info.outcomes,
|
|
options: []
|
|
}
|
|
}
|
|
for(let data of allData){
|
|
let addressLowerCase = data.id
|
|
console.log(data)
|
|
if(combinedObj[addressLowerCase] != undefined){
|
|
//console.log(addressLowerCase)
|
|
let obj = combinedObj[addressLowerCase]
|
|
let numforecasts = data.tradesQuantity
|
|
let isbinary = Number(data.conditions[0].outcomeSlotCount) == 2
|
|
let tradevolume = (Number(data.collateralBuyVolume) + Number(data.collateralSellVolume))/units
|
|
let liquidity = Number(data.liquidityParameter)/units
|
|
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": obj.outcomes[outcome],
|
|
"probability": data.outcomeTokenPrices[outcome],
|
|
"type": "PROBABILITY"
|
|
})
|
|
}
|
|
|
|
combinedObj[addressLowerCase] = {
|
|
"title": obj.title,
|
|
"url": obj.url,
|
|
"platform": "PolyMarket",
|
|
"description": obj.description,
|
|
"options": options,
|
|
"numforecasts": Number(data.tradesQuantity).toFixed(0),
|
|
"stars": getstars(2)
|
|
/*liquidity: liquidity.toFixed(2),
|
|
tradevolume: tradevolume.toFixed(2),
|
|
address: obj.address*/
|
|
}
|
|
}
|
|
}
|
|
let result = Object.values(combinedObj)
|
|
//console.log(result)
|
|
return result
|
|
}
|
|
|
|
/* Body */
|
|
export async function polymarket(){
|
|
let result = await fetch_all()
|
|
console.log(result)
|
|
//console.log(result)
|
|
let string = JSON.stringify(result,null, 2)
|
|
fs.writeFileSync('./data/polymarket-questions.json', string);
|
|
console.log("Done")
|
|
}
|