async function loadGentks() {
const gentks = dataWithContracts;
statusLine(
`Rebuilding token generators. Sending transactions requests to the Tezos Tokens API.`
);
const rebuildStart = performance.now();
const gentkMap = {};
const blockMap = {};
async function getTransactions(contract, tokenArray, id, perf) {
await graph
.request("https://api.teztok.com/v1/graphql", getTezTokData, {
contract,
tokenArray
})
.then((r) => {
var gentk = gentkMap[JSON.stringify(id)];
gentk.dateMap = new Map();
var tokenMap = {};
r.events.forEach((d) => {
d.rate = d.quotes.eur;
d.glyph_power = (d.price / 1000000) * d.rate;
if (!tokenMap.hasOwnProperty(d.token_id)) {
tokenMap[d.token_id] = [];
}
tokenMap[d.token_id].push(d);
// add to block map
});
// reorder transactions by level (aka block) for each item
// then reassign to the gentk map
for (const token in tokenMap) {
//const token = tokenID.replace("FX0-", "");
tokenMap[token] = tokenMap[token].sort((a, b) => b.level - a.level);
gentk.collection[token].events = tokenMap[token];
}
// compute current glyph power
// for each transaction
r.events = r.events.sort((a, b) => a.level - b.level);
for (let k = 0; k < r.events.length; ++k) {
var lastlen = [];
// this whole part is fucked up
const len = k < 20 ? k : 20;
for (let i = k - len; i < k; ++i) {
lastlen.push(r.events[i].glyph_power);
}
lastlen.sort((a, b) => b - a);
var gpvalue;
if (k === 0 && gentk.pricingFixed) {
gpvalue = num(
(gentk.pricingFixed.price / 1000000) * r.events[k].rate
);
} else {
gpvalue = num(lastlen[Math.floor(len / 2)]);
}
if (gpvalue != NaN && gpvalue != undefined) {
r.events[k].median_glyph_power_at_transaction = gpvalue;
gentk.dateMap.set(new Date(r.events[k].timestamp), gpvalue);
}
}
r.events.forEach((d) => {
var blockLevel = JSON.stringify(d.level);
d.name = gentk.collection[d.token_id].metadata.name;
if (!blockMap.hasOwnProperty(blockLevel)) {
blockMap[blockLevel] = [];
}
blockMap[blockLevel].push(d);
});
if (r.events.length > 0) {
gentk.glyph_power =
r.events[r.events.length - 1].median_glyph_power_at_transaction;
} else {
gentk.glyph_power = 0;
}
for (const objkt in gentk.collection) {
gentk.collection[objkt].glyph_power = gentk.glyph_power;
}
//objkts
gentk.total_gentk_glyph_power = num(
gentk.glyph_power * gentk.entireCollection.length
);
gentk.reqPerf = performance.now() - perf;
statusLine(
`[TezTok] Anaverse generator [${gentk.name}] has ${
gentk.entireCollection.length
} iterations. \n ㅤㅤㅤㅤㅤㅤEach iteration yields ${
gentk.glyph_power
} γp, for a total of ${
gentk.total_gentk_glyph_power
} γp (in ${parseInt(gentk.reqPerf)}ms).`
);
});
}
for (let i = 0; i < gentks.length; ++i) {
const gentk = gentks[i];
// get gentk type
var type;
gentk.entireCollection[0].metadata.tags.forEach((d) => {
switch (d) {
case "room":
type = d;
break;
case "skybox":
type = d;
break;
case "firstPerson":
type = d;
break;
case "commune":
type = d;
break;
case "user":
type = d;
break;
}
});
const collection = {};
gentk.entireCollection.forEach(
(d) => (collection[JSON.stringify(d.id)] = d)
);
gentk.collection = collection;
gentk.type = type;
gentkMap[JSON.stringify(gentk.id)] = gentk;
const perf = performance.now();
const tokenArray = [];
gentk.entireCollection.forEach((d) => {
tokenArray.push(JSON.stringify(d.id));
});
await getTransactions(gentk.contract, tokenArray, gentk.id, perf);
}
statusLine(
`Tezos Tokens responses retrieved in ${Math.floor(
performance.now() - rebuildStart
)} ms.`
);
return { gentkMap, blockMap };
}