Skip to content

Commit 14c8eba

Browse files
authored
Merge pull request #598 from kleros/chore/remove-unnecesary-duplication
chore: remove unnecessary duplication in claim modal
2 parents 7213ee2 + cd8668e commit 14c8eba

2 files changed

Lines changed: 14 additions & 167 deletions

File tree

scripts/emit-snapshots.js

Lines changed: 8 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,20 @@
11
#!/usr/bin/env node
22
/**
3-
* 1. Verifies src/assets/snapshots.json still matches the `snapshots` arrays in
4-
* src/components/claim-modal.js, and fails the build if they have drifted.
5-
* 2. Copies the manifest to public/snapshots.json so the standalone
6-
* staking-rewards.html page can read it same-origin (files under public/ are
7-
* copied verbatim by the build and cannot import from src/).
3+
* Validates src/assets/snapshots.json — the source of truth for the monthly reward snapshot CIDs —
4+
* and copies it to public/snapshots.json, which the build publishes at court.kleros.io/snapshots.json.
85
*
9-
* The arrays in claim-modal.js are duplicated here on purpose, and only
10-
* temporarily: raw.githubusercontent.com/kleros/court/master/src/components/claim-modal.js
11-
* is scraped by klerosboard and proof-of-humanity-v2-web to locate the monthly
12-
* reward snapshots. Once those repos point at snapshots.json instead, delete the
13-
* arrays from claim-modal.js, have it import this manifest, and drop assertParity().
6+
* That published manifest is read same-origin by the standalone staking-rewards.html page and, cross-
7+
* origin, by klerosboard and proof-of-humanity-v2-web. src/components/claim-modal.js and
8+
* src/helpers/rewards.js import snapshots.json directly.
149
*
15-
* The array index of each snapshot is the on-chain `week` argument to
16-
* MerkleRedeem.claimWeek, so order and length must never change.
10+
* The array index of each snapshot is the on-chain `week` argument to MerkleRedeem.claimWeek,
11+
* so order and length must never change.
1712
*/
1813
const fs = require("fs");
1914
const path = require("path");
2015

2116
const root = path.join(__dirname, "..");
2217
const source = path.join(root, "src", "assets", "snapshots.json");
23-
const claimModal = path.join(root, "src", "components", "claim-modal.js");
2418
const destination = path.join(root, "public", "snapshots.json");
2519

2620
// Every chain the reward snapshots cover, declared once. To support a new chain, add one entry
@@ -80,29 +74,6 @@ function assertNewestMonthIsOnEveryChain(snapshots) {
8074
}
8175
}
8276

83-
// Read the `snapshots: [...]` array literal for a chain out of claim-modal.js. This is coupled to
84-
// that file's current indentation; reformatting it will throw here rather than pass silently.
85-
function readClaimModalSnapshots(code, chainId) {
86-
const block = code.match(new RegExp(`\\n ${chainId}: \\{[\\s\\S]*?snapshots: \\[([\\s\\S]*?)\\n \\]`));
87-
if (!block) throw new Error(`claim-modal.js: could not find the snapshots array for chain ${chainId}`);
88-
return Array.from(block[1].matchAll(/"([^"]+)"/g), (match) => match[1]);
89-
}
90-
91-
function assertParity(snapshots) {
92-
const code = fs.readFileSync(claimModal, "utf8");
93-
for (const chainId of CHAIN_IDS) {
94-
const expected = readClaimModalSnapshots(code, chainId);
95-
const actual = snapshots[chainId];
96-
const drifted = expected.length !== actual.length || expected.some((entry, i) => entry !== actual[i]);
97-
if (drifted) {
98-
throw new Error(
99-
`snapshots.json and claim-modal.js disagree for chain ${chainId} ` +
100-
`(${actual.length} vs ${expected.length} entries). Update both, keeping the order identical.`
101-
);
102-
}
103-
}
104-
}
105-
10677
const snapshots = JSON.parse(fs.readFileSync(source, "utf8"));
10778

10879
// Everything below is verified per chain in CHAIN_IDS, but the whole object is written out. Reject
@@ -111,7 +82,7 @@ const unverifiedChains = Object.keys(snapshots).filter((chainId) => !CHAIN_IDS.i
11182
if (unverifiedChains.length > 0) {
11283
throw new Error(
11384
`snapshots.json: chain(s) ${unverifiedChains.join(", ")} are not verified. Add them to CHAINS ` +
114-
`(and claim-modal.js) so they are validated before being published.`
85+
`so they are validated before being published.`
11586
);
11687
}
11788

@@ -122,6 +93,5 @@ for (const chainId of CHAIN_IDS) {
12293
assertEntriesAreWellFormed(snapshots[chainId], chainId);
12394
}
12495
assertNewestMonthIsOnEveryChain(snapshots);
125-
assertParity(snapshots);
12696

12797
fs.writeFileSync(destination, JSON.stringify(snapshots) + "\n");

src/components/claim-modal.js

Lines changed: 6 additions & 129 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import useChainId from "../hooks/use-chain-id";
1111
import ETHAmount from "./eth-amount";
1212
import { klerosboardSubgraph } from "../bootstrap/subgraph";
1313
import { IPFS_GATEWAY } from "../utils/ipfs";
14+
import snapshotsByChainId from "../assets/snapshots.json";
1415

1516
const StyledModal = styled(Modal)`
1617
max-width: calc(100vw - 32px);
@@ -84,143 +85,19 @@ const StyledHr = styled.hr`
8485
margin-bottom: 32px;
8586
`;
8687

88+
// Snapshot CIDs live in src/assets/snapshots.json (also published at court.kleros.io/snapshots.json,
89+
// consumed by klerosboard and proof-of-humanity-v2-web). The array index of each snapshot is the
90+
// on-chain `week` argument to MerkleRedeem.claimWeek, so the order in snapshots.json must never change.
8791
const chainIdToParams = {
8892
1: {
8993
contractAddress: "0xdbc3088Dfebc3cc6A84B0271DaDe2696DB00Af38",
90-
snapshots: [
91-
"QmYJGrQBh68kAvqk57FdynEixdu4VY87mHme821rtPS92u/snapshot-1.json",
92-
"QmUCTdvyAWU8eEV1nwgiF7CwKpL5FnXiDxGD9FedFdrHYU/snapshot-2021-03.json",
93-
"QmXG2EKcd3tyMwoxhrqmBAu7gsrzgF3jCde75CjQzmg1Am/snapshot-2021-04.json",
94-
"QmYEpiCACmZttwxFqsG4sSYsCpUeGchEgJGSRQFPuB6Txe/snapshot-2021-05.json",
95-
"QmQ6Bdih6SR4KjoMeAPwvkfp33pYTQXEAAkSeZxGeHXCpo/snapshot-2021-06.json",
96-
"QmUvo4mMGCz4dK8dMY1D68RBqEmyg1qpjxauo99FGDkMos/snapshot-2021-07.json",
97-
"Qmdv94xuQoe5yy88NyBC8sRFLXwx7sqpWJKbGX5xx1cKjM/snapshot-2021-08.json",
98-
"QmTJNeQ9mSyrKiPDaRxX9ektijkZXofra3wYwzbiej1ppB/snapshot-2021-09.json",
99-
"QmRPFBHemHrmGFQCvxtwA13VQs2dR9KujZCBYMXrpw6pHd/snapshot-2021-10.json",
100-
"QmRKxvfmskMboUcGb2jK6HMVDAPC7RtchxMbhaKH7aQFTm/snapshot-2021-11.json",
101-
"QmVoSJv7TP3KZp71vbbm1ocHrt1RfYarZW8zEn7vR67Bj2/snapshot-2021-12.json",
102-
"QmRARe8tM5wZwUmViqJFmMTMfm5XNUroLW4w8TPYfkDAR9/snapshot-2022-01.json",
103-
"QmWY3uExz6kWtAkKq7hZuoZAPa4NYvUyk2FD7u4Xkp22da/snapshot-2022-02.json",
104-
"Qmaz1f7ets65kCCYi5z2Feot3NLCKqQ8vn7zaLdm4Rbmqy/snapshot-2022-03.json",
105-
"Qmdcxpb4TDCPPEcgF3eVw7Nz2Ch2LzRNigPPLy9S4W6h2M/snapshot-2022-04.json",
106-
"Qmc2S1mcMjjHCX5TSrt1xioA9z7hB6seh9BKEfVjD1kwGG/snapshot-2022-05.json",
107-
"QmenR1R6NMfCPcwN1gyJAj9RbpqUQMAnDHCybpB6s4Tsff/snapshot-2022-06.json",
108-
"QmUWkVsXgGHsJ26VgphjZwDPzEtdkcPNAo1xogcPHfMCLt/snapshot-2022-07.json",
109-
"QmUaJ5vxD9zVRqNiU2t7GgUL1vLmWKFHanaCEik9Mkzm3v/snapshot-2022-08.json",
110-
"QmTDo9Mv2W6mQLqpxwRVpNTHEJzzNProiHQLppu95VVnXa/snapshot-2022-09.json",
111-
"QmdK6dgxuBCRJ7wTvQBnHrZWJuWGiiFpEDLM6nr38FgYGF/snapshot-2022-10.json",
112-
"QmbKotXSryjrRMEeeM51ChgBxpq8DFhwViG6rKLsJfu5wq/snapshot-2022-11.json",
113-
"QmU2XtH8sSC4rGgfpchqnFXKGaXzzj1PTpnUXdfR4NfUYL/snapshot-2022-12.json",
114-
"QmUrG7TNEjeYcCrvJ1WsCT7SVbBC81R2bJxRUmUVXBK3rx/snapshot-2023-01.json",
115-
"QmW1BkMv4pRDTjrNkrcp6njLc61HBmD2yD8Jk5nnPn7gmR/snapshot-2023-02.json",
116-
"QmUfaq5LctG4dZmSEBGnNoDgKqEdyooibYhnivKcp7Xvf2/snapshot-2023-03.json",
117-
"QmRSkssLsS4A4KMpdKRVW8vS72kXcRbC4aG5i5rGcoi2Gi/snapshot-2023-04.json",
118-
"QmbBQoSXrmQFj9cUNWbPcoE7B6MKs4sZ5mtt8Vnu3ZMWdE/snapshot-2023-05.json",
119-
"QmV3gpEkEv4btxAxnPjionT9QxbVo2fKj9fTFnuLjDTQ6N/snapshot-2023-06.json",
120-
"QmTqXB4i1wd3vvBNknFvixRD7dA36EWxQoBxsEvR3L3bWw/snapshot-2023-07.json",
121-
"QmfEb61fZ8QV9LX8Y7VU5AcnzCtjxDTFejzMAgAmUajrRH/snapshot-2023-08.json",
122-
"QmUaApTCER7A3cfJUMvakoP4BWGMHsSjqhChcr1pn5rJKL/snapshot-2023-09.json",
123-
"QmXSrwywMP5vipMbryJAezUP3zFAPTKAaCRkRLc4NZcRR7/snapshot-2023-10.json",
124-
"QmbZ9ZVxJhNDRGokQ1PSqaLLprhgtAAm4m7kB2CY9GiaGD/snapshot-2023-11.json",
125-
"QmZ1G5hK72tXynU8bj63QATopRgvV55h7Y5rgz3fofkCtw/snapshot-2023-12.json",
126-
"Qme5CAtUNaNF3D5QEV3K4Je2uCkaH1kUWM6zNb3W8xr3dk/snapshot-2024-01.json",
127-
"QmPmrHWcGrXD9F2YDDS4BiZxZbv5qDxakhDw1MRH58tUjP/snapshot-2024-02.json",
128-
"QmWDAc4nE2P6XuPXjj5FMs68oUg2Bdz2GHsUJXpywqbjz8/snapshot-2024-03.json",
129-
"QmbJ3tiiH7pRB6iLfSoJVtEG2dx7pY7YHCqc13y3FeekZQ/snapshot-2024-04.json",
130-
"QmSCLnDTGSonAzmLrpHdQMumRe3V35pGbnXHPGm71pAdXj/snapshot-2024-05.json",
131-
"QmUnVTiaqSTMyjQ31GWanKzN2ZVZoUiYQcPwgptxxfMptX/snapshot-2024-06.json",
132-
"QmTJ6dcTrdqW4SJZzcm14h7cavHepN9HF2qAHsRZVCpzby/snapshot-2024-07.json",
133-
"Qme4JAKA84Kvb7C6aNCQ3fcoTfrrMukdkNwUfqjJLhhHQz/snapshot-2024-08.json",
134-
"QmSNu2C8nSRLzF1E7UNyV8HDSrcVfSy8JWq86hcPRCJKWo/snapshot-2024-09.json",
135-
"QmcwjSjgtTD5JC52DNbXVv8tNxL1ou3Ap98k8ViwQxw6HJ/snapshot-2024-10.json",
136-
"QmT76RCkaMqPPHM5kyy9FKdjNATdYVEeZpWkNeTVKEMQRC/snapshot-2024-11.json",
137-
"QmRHKSvdm8MPnQy1GKwRtikDNAsbLoPS679vBR2Ype8mut/snapshot-2024-12.json",
138-
"QmfSrb13pZvvgSQ4oGtocshzsRDNMatBUxADdwG2uda5qR/snapshot-2025-01.json",
139-
"QmUfBdXtNwozCjBPmqjmFwpEDkopZ6Xua9zL9VVpc6ZSnw/snapshot-2025-02.json",
140-
"QmbXChWWrjS5LsmkRWVfxe3eYZrMs1PZ8w3sxQgKbShLop/snapshot-2025-03.json",
141-
"QmaLsXtgbAqVurvu2rsZScm1NkHVc4JX9G8xyAnh5NzDaC/snapshot-2025-04.json",
142-
"QmQi5hsCEwdSyeoqMqZcdPJ9avCp3oUFcetQQtUKBzZE5m/snapshot-2025-05.json",
143-
"QmXS6E2guk1S1joqacmVJ57rkk9SHfepU94jZbMubfciGm/snapshot-2025-06.json",
144-
"QmTL3stctAApqXScehRVRJsV48QyAVTPUPLw9JLTTQTxLK/snapshot-2025-07.json",
145-
"QmS9y2nF7pzsjH7UbN7fmfxxzmJ5KGjfq4Xi6wBLDxhsp4/snapshot-2025-08.json",
146-
"Qme31g7UyrGVarRa6LLoaLSuxNGS8tWBfs7CHD5cgNmcXM/snapshot-2025-09.json",
147-
"QmV6ELz1HGkZ2X9XEsgatcAbjvayzK5haXNBTPWtVM95TR/snapshot-2025-10.json",
148-
"QmbCX7i5jiXzRUtuz2SnHkEX1UeFH4sfPhA6qEJRaWWDy1/snapshot-2025-11.json",
149-
"QmUUnd3wykSXqT6vadg1vaXms4F7vDtpZLUggB43XwJtfi/snapshot-2025-12.json",
150-
"QmZMFHPvXunVJstEn4R3Y4DanPyBNH5Dgy115y7dgQicqu/snapshot-2026-01.json",
151-
"Qmazo37dq9vMBbFq8HgCjtA8Fw2umhy9opJfUwFmcaYhqH/snapshot-2026-02.json",
152-
"QmYFqvcPB2UUr3KZ8WoTk7fDpm8VSc29fgQ48PwTNN1pFo/snapshot-2026-03.json",
153-
"QmPpPgexYV32ug1h83kgfR6BrMPvwQYHjf62Fve6VMS8vN/snapshot-2026-04.json",
154-
"QmcjUmXzPS1X1pFFTxA7JZBzKt7LAup7zR8FNUgs6LCNtb/snapshot-2026-05.json",
155-
"QmPSTV5nFHuoc5nBcp41Ddv2gumVRuxJXLGaEBPJNeFXwJ/snapshot-2026-06.json",
156-
],
94+
snapshots: snapshotsByChainId["1"],
15795
blockExplorerBaseUrl: "https://etherscan.io",
15896
klerosboard: klerosboardSubgraph[1],
15997
},
16098
100: {
16199
contractAddress: "0xf1A9589880DbF393F32A5b2d5a0054Fa10385074",
162-
snapshots: [
163-
"QmRJQn5K3zaKH5TaSb3xEq8WBpJZhEaEKURj2kFssqEkeb/xdai-snapshot-2021-07.json",
164-
"QmUWvWmW53xZYqQEx1i1w4eCGg7nowpHZ6WY5caJdPDDZK/xdai-snapshot-2021-08.json",
165-
"QmeqtF2wFoUd5uNDuXwPTwCyaF5ZjgKFLuqSQQQ2uM5qEP/xdai-snapshot-2021-09.json",
166-
"QmUtVwhcqhX3vm6rtzEKD9K5eCMFR6b7VjotTGKts2Njmm/xdai-snapshot-2021-10.json",
167-
"QmcotSzkVhxK4AAaEyv4n7hks9oX6z8AjEfCL1QcGH9mB5/xdai-snapshot-2021-11.json",
168-
"QmSGLSzRNtDJ2Lt59muizuKrcpWs9KS9RdsEiBuDRsx7nR/xdai-snapshot-2021-12.json",
169-
"QmQ4yZgoUopYbudnz88i7MSXcTY4NDB1P9KuAMUejtawup/xdai-snapshot-2022-01.json",
170-
"Qmd7EAFoEBDuJkALRsE6pPtqaYjPt543omZQGipupntGWy/xdai-snapshot-2022-02.json",
171-
"QmUaWM1yjB9CdHohvTdTqaR8wDggLy4q3tDThS7kZV1p1M/xdai-snapshot-2022-03.json",
172-
"QmThLvjyhgWnK5a26i5ibajGBgnwZwN651TmWLvb9T4uZU/xdai-snapshot-2022-04.json",
173-
"QmStjhSzMiRUq2T64esc3AdCn5yK6ovArErNrBeJ5GatRU/xdai-snapshot-2022-05.json",
174-
"QmRtnaynSgVaEPZ9xWAfwmNi4JNnfxqYx8Qvx8V45Cvvmq/xdai-snapshot-2022-06.json",
175-
"QmaasQi77pSMuLg5gq3Kch7yv5Ek8mkwMeb3oqm6gQne1q/xdai-snapshot-2022-07.json",
176-
"Qmdy9dXZpRax7zhuPp1cYxz347H5RGcxDAhMSgAQ4Gdiwm/xdai-snapshot-2022-08.json",
177-
"QmX9ZkppuUfXaGo2u5NnCEvCoriqZp3VkeCYvmQmbnFoPC/xdai-snapshot-2022-09.json",
178-
"QmZKCAZK3RoFkugFBBJRFA4WQccJByEXuXnSATU6pwCgN1/xdai-snapshot-2022-10.json",
179-
"QmWS5p6xbqBvJ2GXbM4wDTKzL1hUEvYdzTm6D9syttdVd9/xdai-snapshot-2022-11.json",
180-
"QmWFMQB8riKYTfBfdz7n8faExwHC6dAZt1fBA5RriCUshv/xdai-snapshot-2022-12.json",
181-
"QmP2dmqWYLq9TU1ysmynBtn4rKqzKLx4MzeL6nNEkZjBQP/xdai-snapshot-2023-01.json",
182-
"Qmf1NihFrzywSamyeYLYSCpnY7jG45fWTU2M5rRHLpU8YY/xdai-snapshot-2023-02.json",
183-
"QmPkZbPygY5MMU6tTG6xG7esePBg1dUBb9rtNu9nSzzekh/xdai-snapshot-2023-03.json",
184-
"QmNV9qreJH7k7KwqsZUXV69Q9gDqaywenJ1B5EiUuwYa7x/xdai-snapshot-2023-04.json",
185-
"QmXmGbRFZcuBFuKPjRcuawd55fEYXfsWcM9k2ze48HYzZE/xdai-snapshot-2023-05.json",
186-
"QmaMvUbMYtyJVJqV6YCafENrjfN9ULybXRmZTZL7UsTcng/xdai-snapshot-2023-06.json",
187-
"QmNgZFkE1dtgPZbHPbGcaq47wsLffJ89Uwtt5Fgf25V7DY/xdai-snapshot-2023-07.json",
188-
"QmYCaK3FPJX6S5jkCCLKqNMVDku9vC7RYaSyyC8gPZYvMp/xdai-snapshot-2023-08.json",
189-
"QmewZj5jxML23gxkwHGJmAhutso83U7js8tRMoYLqcMQJj/xdai-snapshot-2023-09.json",
190-
"QmZkxygbpHdrpWC39PE8k7wEXgGkC7oJddkkzaiEu5bRMV/xdai-snapshot-2023-10.json",
191-
"Qma4dBYJedugVM7JFtbBaDuRK2nqULo8bSsSGR7tpdtw5e/xdai-snapshot-2023-11.json",
192-
"QmcXxdjPXQpj1uChX7AHM1Q3imEauB7hFW4J2qR74tXBsJ/xdai-snapshot-2023-12.json",
193-
"QmddfsZDD2oQLrskJDUk8AmDKJJvHFe3GLE2Zmm1n2rGrq/xdai-snapshot-2024-01.json",
194-
"QmdGBZ43WhtTVZNVCtu7fFfsgxoYwPzr8xSJGnFPQEcYcX/xdai-snapshot-2024-02.json",
195-
"QmcWw37anHSMcFkuZMZRLZRKMByTNAPUKEM6hQ1bPAZDnn/xdai-snapshot-2024-03.json",
196-
"QmUYBkvBEDXLvLtnKBvPCj6fJgTJ9nDQYseU4f1Wo33AY2/xdai-snapshot-2024-04.json",
197-
"QmasCmVBzZaxWcSHMc3uhK3ZdwSQXMdX5bdZBaistpXXxX/xdai-snapshot-2024-05.json",
198-
"QmPnL6Y3tZABGwKdn6XroBXB4f2FShrmKrdXzGXwfRJEbC/xdai-snapshot-2024-06.json",
199-
"QmfPhtSQib6ytndGXeGqE9k4EvaD9g25Zi1HH4JwAzJfpT/xdai-snapshot-2024-07.json",
200-
"QmcmDHECzY8YRv65nB6zjt28BYyY6FGSTJc9669JAb7brP/xdai-snapshot-2024-08.json",
201-
"QmU4W2w3UFkTP3Biyjx1ecxpaUrC3NpqKhACe7J8jNV197/xdai-snapshot-2024-09.json",
202-
"QmTBJ2bYMTE5eMGTtoKJ3ia8ET6wwngwgahaq3wfstCMM1/xdai-snapshot-2024-10.json",
203-
"QmPx9ABCPRvFuLDQxeVdV1fPHoDrsm1uH6zMnRNjk2PC7n/xdai-snapshot-2024-11.json",
204-
"QmNge4Ei6TWAK3m4GrC21GJc4RbPVE8KBftXrieM4zAgqj/xdai-snapshot-2024-12.json",
205-
"QmQhnESLtYoZy4DbjPrFa3x7Mm262jfDTW5b4p4MMccCiw/xdai-snapshot-2025-01.json",
206-
"QmXSvhfY5pP8umyBQJJKZUBmuE1mTRP8F2rUiYReM9UMkb/xdai-snapshot-2025-02.json",
207-
"QmRXwUA9amrXs6iMCiTDNyZqy8B2UtSRJEjdNowg92Evb6/xdai-snapshot-2025-03.json",
208-
"QmVSr6dUpENSMiD5xxgzVXYvUGaHcXq8LRBL5YepmyyeQB/xdai-snapshot-2025-04.json",
209-
"QmPFPpZfLBLon7CM16H319PvrhcDAxX3j1rsmoUnZ8mmnH/xdai-snapshot-2025-05.json",
210-
"QmZdNdecAhMKKsTy8oPGh13yzhUn8nf8457d87t6d1jWuV/xdai-snapshot-2025-06.json",
211-
"QmRWThHmg6eLxNj7m9tpN1w78EaRvUeBoHPhEexrhBaQwg/xdai-snapshot-2025-07.json",
212-
"QmU7iEXcvtVJ1j8WAML9CJCU62WXYa5MMgiqqR8rdKeVvt/xdai-snapshot-2025-08.json",
213-
"QmUcemx5p2FVxncj9geEkT2DgqMLTjPND2VenaMdibX4zx/xdai-snapshot-2025-09.json",
214-
"QmU3JiUbxDwdq7gbKTCjyRgX9YjZV1xY3U9tLgDqyF45C6/xdai-snapshot-2025-10.json",
215-
"QmUvjF29Ro4hmFF1RGB5HdpBFQ1NRJJQ3XtUueqcUJPhy6/xdai-snapshot-2025-11.json",
216-
"QmTFiPQWCrW6v39BpqTrp6Mjt9wpMWCT6jNYDA4th6wsn9/xdai-snapshot-2025-12.json",
217-
"QmULyr78YDTVARGWnSD76NZtMdtmbDufpNmXPk4V5P7XUX/xdai-snapshot-2026-01.json",
218-
"QmUiTATfPeNnXcbt8McNKNRcBPRRybTRnds9BfMeHEUSLw/xdai-snapshot-2026-02.json",
219-
"QmZzuEGbswT1nU7dCRsLbQZtfZBScGG5QNaUh9pq9T8btB/xdai-snapshot-2026-03.json",
220-
"QmNkHRcMG8tToBcuMeerxTfYqFDbF5dv639R3GH6Cbtdfb/xdai-snapshot-2026-04.json",
221-
"Qmf8SXvjjBUW3j5NiKatU4qLWcWizDxsC9YAzrXgKzENo4/xdai-snapshot-2026-05.json",
222-
"QmfY87DNa7Jh9v3CYcBqiSc1uY8erKgKgQU6zdKgo18iuu/xdai-snapshot-2026-06.json",
223-
],
100+
snapshots: snapshotsByChainId["100"],
224101
blockExplorerBaseUrl: "https://gnosisscan.io",
225102
klerosboard: klerosboardSubgraph[100],
226103
},

0 commit comments

Comments
 (0)