From e6733cefa07985b31e6587107e881c56dea0999b Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Fri, 7 Jun 2024 14:41:30 +0300 Subject: [PATCH 1/5] replaced biased pools. Fixed filtering. --- src/API/api.js | 55 +++++++++++++++++++++--------------- src/containers/Home.js | 23 ++------------- src/containers/HomeRevamp.js | 4 +-- 3 files changed, 36 insertions(+), 46 deletions(-) diff --git a/src/API/api.js b/src/API/api.js index 05b1aff..0fc3532 100644 --- a/src/API/api.js +++ b/src/API/api.js @@ -7,15 +7,19 @@ import { BACKEND_URL } from '../manifestEnvs'; const backendUrl: string = BACKEND_URL; const BIAS_POOL_IDS = [ - 'df1750df9b2df285fcfb50f4740657a18ee3af42727d410c37b86207', - 'af22f95915a19cd57adb14c558dcc4a175f60c6193dc23b8bd2d8beb', - '04357793d81097a7d2c15ec6cd6067a58cdd2fb21aaf07e56c306ecf', - 'c34a7f59c556633dc88ec25c9743c5ebca3705e179a54db5638941cb', - 'c5293f2ba88ac474787358b9c2f4fae7b3c4408f79cdf89a12c9ece4', - '8145274aa1713d4569e0d946af510b4d2b80640d87c1a0e4e0517954', + 'dbda39c8d064ff9801e376f8350efafe67c07e9e9244dd613aee5125', // EMURA + '359d3f8e355c873b0b5cae1e18eb12e44dcfc2ad212706d93ac314ab', // EMURB + '8efb053977341471256685b1069d67f4aca7166bc3f94e27ebad217f', // EMUR7 + '0ef7aa564933ce75b695cdad66be4a39b43a22726de7c58908e0e033', // EMUR8 + '2a8294ad7538b15353b9ffd81e26dafe846ffc3f6b9e331d4c1dc030', // YOROI1 + 'b19f2d9498845652ae6eea5da77952b37e2bca9f59b2a98c56694cae', // YOROI2 ]; const BIAS_POOLS_SEARCH_QUERY = BIAS_POOL_IDS.join('|'); +/** + * Brackets used to insert non-top pools into the ranking. + * Must be at least 1-less elements than BIAS_POOL_IDS + */ const brackets = [ { startIndex: 6, positionGap: 4 }, { startIndex: 13, positionGap: 7 }, @@ -155,7 +159,7 @@ const rndSign = (seed: string) => { }; }; -const sortBiasedPools = (pools: Pool[], seed: string) => { +const sortBiasedPools = (pools: Array, seed: string): Array => { const rev = seed.split('').reverse().join(''); return [...pools].sort(rndSign(seed)).sort(rndSign(rev)); }; @@ -173,7 +177,7 @@ const tail = (input: string): string => { export type ListBiasedPoolsResponse = {| pools: Pool[], - saturationLimit: number, + saturationLimit: ?number, |}; export async function listBiasedPools( @@ -181,26 +185,32 @@ export async function listBiasedPools( searchParams: SearchParams, ): Promise { const unbiasedPoolsResponse = await getPools(searchParams); - const unbiasedPools = toPoolArray(unbiasedPoolsResponse.pools); + const originalPools = toPoolArray(unbiasedPoolsResponse.pools); - const saturationLimit = unbiasedPoolsResponse.world.saturation; + const saturationLimit = unbiasedPoolsResponse.world?.saturation; if (searchParams.search || searchParams.sort === Sorting.TICKER) { - return { pools: unbiasedPools, saturationLimit }; + // If user searched or sorted explicitly - then we don't bias + return { pools: originalPools, saturationLimit }; } + // Filter unsaturated pools + const unbiasedPools = saturationLimit == null ? originalPools + : originalPools.filter(p => p.total_stake < saturationLimit); + const [p1, p2, p3] = unbiasedPools; const internalSeed = tail(p1?.id) + tail(p2?.id) + tail(p3?.id); try { const biasedPoolsResponse = await getPools({ search: BIAS_POOLS_SEARCH_QUERY }); - if (!biasedPoolsResponse) return unbiasedPools; + if (!biasedPoolsResponse) return { pools: unbiasedPools, saturationLimit }; const biasedPools = toPoolArray(biasedPoolsResponse.pools) .filter((x) => x.id && BIAS_POOL_IDS.indexOf(x.id) >= 0) .sort((a, b) => { + // this sorting is to ensure that changes in the backend response order is not affecting the final ordering return BIAS_POOL_IDS.indexOf(a.id) - BIAS_POOL_IDS.indexOf(b.id); }); - if (biasedPools.length === 0) return unbiasedPools; + if (biasedPools.length === 0) return { pools: unbiasedPools, saturationLimit }; const biasedPoolsOrderByExternalSeed = sortBiasedPools(biasedPools, externalSeed); const topPool = biasedPoolsOrderByExternalSeed[0]; @@ -208,24 +218,23 @@ export async function listBiasedPools( const biasedLowerPools = biasedPools.filter((p) => p !== topPool); const biasedLowerPoolsOrderedByInternalSeed = sortBiasedPools(biasedLowerPools, internalSeed); - if (unbiasedPools.length === 0) return [topPool].concat(biasedLowerPoolsOrderedByInternalSeed); + if (unbiasedPools.length === 0) return { pools: [topPool].concat(biasedLowerPoolsOrderedByInternalSeed), saturationLimit }; // removes the Emurgo pools from the original list, as we are reinserting it later - for (let i = 0; i < BIAS_POOL_IDS.length; i += 1) { - const poolId = BIAS_POOL_IDS[i]; - const poolToRemoveIdx = unbiasedPools.findIndex((p) => p.id === poolId); - if (poolToRemoveIdx >= 0) { - unbiasedPools.splice(poolToRemoveIdx, 1); - } - } + const presentBiasedIds = new Set(biasedPools.map(p => p.id)); + const filteredUnbiasedPools = unbiasedPools.filter(p => !presentBiasedIds.has(p.id)); - const allPools = [topPool].concat(unbiasedPools); + // insert top pool + const allPools = [topPool].concat(filteredUnbiasedPools); + // insert lower pools for (let i = 0; i < brackets.length; i += 1) { const bracket = brackets[i]; const targetIndex = getRandomInt(internalSeed, 0, bracket.positionGap) + bracket.startIndex; const biasedPool = biasedLowerPoolsOrderedByInternalSeed.shift(); - allPools.splice(targetIndex, 0, biasedPool); + if (biasedPool != null) { + allPools.splice(targetIndex, 0, biasedPool); + } } return { pools: allPools, saturationLimit }; diff --git a/src/containers/Home.js b/src/containers/Home.js index eb2bc9d..4afdadd 100644 --- a/src/containers/Home.js +++ b/src/containers/Home.js @@ -183,25 +183,6 @@ function Home(props: HomeProps): Node { const alertText = null; - function filterPools(pools: ?Array, totalAda: ?number): ?Array { - if (pools == null) return pools; - - const limit: ?number = saturationLimit; - - // don't filter out saturated pools if the user explicitly searches - if (limit == null || (filterOptions.search != null && filterOptions.search !== '')) { - return pools; - } - - const lovelaceDelegation = totalAda == null ? 0 : totalAda * 1000000; - - if (lovelaceDelegation > limit) return pools; - - return pools.filter((item) => { - return item != null && Number(item.total_stake) + lovelaceDelegation < limit; - }); - } - const { urlParams: { selectedPoolIds, totalAda }, } = props; @@ -219,7 +200,7 @@ function Home(props: HomeProps): Node { @@ -228,7 +209,7 @@ function Home(props: HomeProps): Node { diff --git a/src/containers/HomeRevamp.js b/src/containers/HomeRevamp.js index 1e10396..98acd5a 100644 --- a/src/containers/HomeRevamp.js +++ b/src/containers/HomeRevamp.js @@ -241,7 +241,7 @@ function Home(props: HomeProps): Node { if (lovelaceDelegation > limit) return pools; return pools.filter((item) => { - return item != null && Number(item.total_stake) + lovelaceDelegation < limit; + return true; item != null && Number(item.total_stake) + lovelaceDelegation < limit; }); } @@ -289,7 +289,7 @@ function Home(props: HomeProps): Node { urlParams: { selectedPoolIds, totalAda }, } = props; - const filteredPools = filterPools(rowDataSorted || rowData, totalAda); + const filteredPools = rowDataSorted || rowData; return ( From 3a9f7176a8652622ba387b5b89c9a92e5ae6f09e Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Fri, 7 Jun 2024 14:45:01 +0300 Subject: [PATCH 2/5] stub emur8 on top --- src/API/api.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/API/api.js b/src/API/api.js index 0fc3532..6990427 100644 --- a/src/API/api.js +++ b/src/API/api.js @@ -213,7 +213,11 @@ export async function listBiasedPools( if (biasedPools.length === 0) return { pools: unbiasedPools, saturationLimit }; const biasedPoolsOrderByExternalSeed = sortBiasedPools(biasedPools, externalSeed); - const topPool = biasedPoolsOrderByExternalSeed[0]; + // const topPool = biasedPoolsOrderByExternalSeed[0]; + + // TODO: manual intervention to be removed when new pools are deemed viable + const topPool = biasedPoolsOrderByExternalSeed + .find(p => p.id === '0ef7aa564933ce75b695cdad66be4a39b43a22726de7c58908e0e033'); // EMUR8 const biasedLowerPools = biasedPools.filter((p) => p !== topPool); const biasedLowerPoolsOrderedByInternalSeed = sortBiasedPools(biasedLowerPools, internalSeed); From f4f908e6f45a6ce448fba758f4abdf9c80176469 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Fri, 7 Jun 2024 14:52:16 +0300 Subject: [PATCH 3/5] comment fix --- src/API/api.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/API/api.js b/src/API/api.js index 6990427..4603596 100644 --- a/src/API/api.js +++ b/src/API/api.js @@ -11,8 +11,8 @@ const BIAS_POOL_IDS = [ '359d3f8e355c873b0b5cae1e18eb12e44dcfc2ad212706d93ac314ab', // EMURB '8efb053977341471256685b1069d67f4aca7166bc3f94e27ebad217f', // EMUR7 '0ef7aa564933ce75b695cdad66be4a39b43a22726de7c58908e0e033', // EMUR8 - '2a8294ad7538b15353b9ffd81e26dafe846ffc3f6b9e331d4c1dc030', // YOROI1 - 'b19f2d9498845652ae6eea5da77952b37e2bca9f59b2a98c56694cae', // YOROI2 + '2a8294ad7538b15353b9ffd81e26dafe846ffc3f6b9e331d4c1dc030', // YORO1 + 'b19f2d9498845652ae6eea5da77952b37e2bca9f59b2a98c56694cae', // YORO2 ]; const BIAS_POOLS_SEARCH_QUERY = BIAS_POOL_IDS.join('|'); From 42c8d4eeab86f84a4f5d4fe111945daeccb33b05 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Fri, 7 Jun 2024 14:57:13 +0300 Subject: [PATCH 4/5] unused function removed --- src/containers/HomeRevamp.js | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/src/containers/HomeRevamp.js b/src/containers/HomeRevamp.js index 98acd5a..28fcfeb 100644 --- a/src/containers/HomeRevamp.js +++ b/src/containers/HomeRevamp.js @@ -226,25 +226,6 @@ function Home(props: HomeProps): Node { const alertText = null; - function filterPools(pools: ?Array, totalAda: ?number): ?Array { - if (pools == null) return pools; - - const limit: ?number = saturationLimit; - - // don't filter out saturated pools if the user explicitly searches - if (limit == null || (filterOptions.search != null && filterOptions.search !== '')) { - return pools; - } - - const lovelaceDelegation = totalAda == null ? 0 : totalAda * 1000000; - - if (lovelaceDelegation > limit) return pools; - - return pools.filter((item) => { - return true; item != null && Number(item.total_stake) + lovelaceDelegation < limit; - }); - } - const sortData = (sorting: Object) => { const defaultRowData = [].concat(rowData ?? []); if (sorting.sortDirection) { From 53aa41ed2ae755109f4840e6aa046c2348fcae22 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Fri, 7 Jun 2024 14:59:26 +0300 Subject: [PATCH 5/5] flow fixes --- src/API/api.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/API/api.js b/src/API/api.js index 4603596..a5539aa 100644 --- a/src/API/api.js +++ b/src/API/api.js @@ -196,7 +196,7 @@ export async function listBiasedPools( // Filter unsaturated pools const unbiasedPools = saturationLimit == null ? originalPools - : originalPools.filter(p => p.total_stake < saturationLimit); + : originalPools.filter(p => Number(p.total_stake) < saturationLimit); const [p1, p2, p3] = unbiasedPools; const internalSeed = tail(p1?.id) + tail(p2?.id) + tail(p3?.id); @@ -217,7 +217,8 @@ export async function listBiasedPools( // TODO: manual intervention to be removed when new pools are deemed viable const topPool = biasedPoolsOrderByExternalSeed - .find(p => p.id === '0ef7aa564933ce75b695cdad66be4a39b43a22726de7c58908e0e033'); // EMUR8 + .find(p => p.id === '0ef7aa564933ce75b695cdad66be4a39b43a22726de7c58908e0e033') // EMUR8 + ?? biasedPoolsOrderByExternalSeed[0]; const biasedLowerPools = biasedPools.filter((p) => p !== topPool); const biasedLowerPoolsOrderedByInternalSeed = sortBiasedPools(biasedLowerPools, internalSeed);