Public
Edited
Mar 8, 2024
Importers
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
gentks = loadGentks()
Insert cell
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();

// create a map of tokens, each with their own history
var tokenMap = {};

r.events.forEach((d) => {
// determine glyph power
d.rate = d.quotes.eur;
d.glyph_power = (d.price / 1000000) * d.rate;

// add to token map
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 };
}
Insert cell
Insert cell
Insert cell
async function getRawWithContract() {
var data = [...rawdata];

statusLine("Fetching Tezos Tokens contract data…");
const teztokcontstart = performance.now();

var gentkArray = [];

data.forEach((d) => gentkArray.push(d.id));

var test;

async function getContracts() {
await graph
.request("https://api.teztok.com/v1/graphql", getGeneratorcontracts, {
gentkArray
})
.then((r) => {
//start by remapping answer
var contractMap = {};
r.tokens.forEach((d) => {
if (!contractMap.hasOwnProperty(d.fx_issuer_id)) {
contractMap[d.fx_issuer_id] = d.fa2_address;
}
});
data.forEach((d) => {
d.contract = contractMap[d.id];
});
statusLine(
`Tezos Tokens response retrieved in ${Math.floor(
performance.now() - teztokcontstart
)} ms.`
);

statusLine(
`[TezTok] ${
Object.keys(contractMap).length
} contract relevant to anaver.se native tokens retrieved.`
);
});
}

await getContracts();

return data;
}
Insert cell
Insert cell
Insert cell
Insert cell
async function getTotal() {
const raw = [];
var curCount = 50;

statusLine("Starting SYNOD [dashboard data] retrieval.");
statusLine("Sending requests to the fx(hash) API…");
const fxstart = performance.now();

async function getres(i) {
await graph
.request("https://api.fxhash.xyz/graphql", getAnaglyphicData, {
skip: i * 50
})
.then((r) => {
r.user.generativeTokens.forEach((d) => {
if (d.entireCollection.length > 0) {
if (d.supply === 0) {
d.supply = d.entireCollection.length;
}
if (d.entireCollection[0].metadata.hasOwnProperty("tags")) {
d.entireCollection[0].metadata.tags.forEach((tag) => {
if (tag === "anaverse") {
d.entireCollection.forEach(
(iter) =>
(iter.id = parseInt(
iter.id
.replace("FX0-", "")
.replace("FX1-", "")
.replace("FX2-", "")
))
);

raw.push(d);
}
});
}
}
});

curCount = r.user.generativeTokens.length;
});
}

for (let i = 0; i < 10; ++i) {
if (curCount === 50) {
await getres(i);
}
}

statusLine(
`fx(hash) response retrieved in ${Math.floor(
performance.now() - fxstart
)} ms.`
);
statusLine(`[FX(HASH)] ${raw.length} Anaver.se generators retrieved.`);

return raw;
}
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more