Skip to content

Commit 6c7ead7

Browse files
authored
Merge pull request #1712 from pyth-network/mc/keys-schema
[xc-admin-frontend] Unify publisher keys file schema with observer and balance tracker
2 parents 2faaa43 + 09d2245 commit 6c7ead7

File tree

4 files changed

+45
-22
lines changed

4 files changed

+45
-22
lines changed

.tool-versions

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
nodejs 18.19.1
2+
pnpm 9.3.0
3+
rust 1.78.0
4+
python 3.12.4

governance/xc_admin/packages/xc_admin_frontend/package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@
3535
"react-hot-toast": "^2.4.0",
3636
"sharp": "^0.33.4",
3737
"use-debounce": "^9.0.2",
38-
"web3": "^4.8.0"
38+
"web3": "^4.8.0",
39+
"yaml": "^2.1.1",
40+
"zod": "^3.23.8"
3941
},
4042
"devDependencies": {
4143
"@svgr/webpack": "^6.3.1",

governance/xc_admin/packages/xc_admin_frontend/pages/index.tsx

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import YAML from 'yaml'
2+
import { z } from 'zod'
13
import { Tab } from '@headlessui/react'
24
import * as fs from 'fs'
35
import type { GetServerSideProps, NextPage } from 'next'
@@ -13,27 +15,36 @@ import { StatusFilterProvider } from '../contexts/StatusFilterContext'
1315
import { classNames } from '../utils/classNames'
1416
import '../mappings/signers.json'
1517

18+
const keyToNameMappingSchema = z.array(
19+
z.object({ key: z.string(), name: z.string() })
20+
)
21+
22+
const readPublisherKeyToNameMapping = async (filename: string) => {
23+
let data = ''
24+
try {
25+
data = await fs.promises.readFile(filename, 'utf8')
26+
} catch {
27+
return {}
28+
}
29+
30+
const yaml = YAML.parse(data)
31+
32+
const arr = await keyToNameMappingSchema.parseAsync(yaml)
33+
return Object.fromEntries(arr.map((key, name) => [key, name]))
34+
}
35+
1636
export const getServerSideProps: GetServerSideProps = async () => {
1737
const MAPPINGS_BASE_PATH = process.env.MAPPINGS_BASE_PATH || 'mappings'
18-
const PUBLISHER_PYTHNET_MAPPING_PATH = `${MAPPINGS_BASE_PATH}/publishers-pythnet.json`
19-
const PUBLISHER_PYTHTEST_MAPPING_PATH = `${MAPPINGS_BASE_PATH}/publishers-pythtest.json`
20-
21-
const publisherKeyToNameMapping = {
22-
pythnet: fs.existsSync(PUBLISHER_PYTHNET_MAPPING_PATH)
23-
? JSON.parse(
24-
(
25-
await fs.promises.readFile(PUBLISHER_PYTHNET_MAPPING_PATH)
26-
).toString()
27-
)
28-
: {},
29-
pythtest: fs.existsSync(PUBLISHER_PYTHTEST_MAPPING_PATH)
30-
? JSON.parse(
31-
(
32-
await fs.promises.readFile(PUBLISHER_PYTHTEST_MAPPING_PATH)
33-
).toString()
34-
)
35-
: {},
36-
}
38+
const PUBLISHER_PYTHNET_MAPPING_PATH = `${MAPPINGS_BASE_PATH}/pythnet/publishers.yaml`
39+
const PUBLISHER_PYTHTEST_MAPPING_PATH = `${MAPPINGS_BASE_PATH}/pythtest/publishers.yaml`
40+
41+
const [pythnet, pythtest] = await Promise.all(
42+
[PUBLISHER_PYTHNET_MAPPING_PATH, PUBLISHER_PYTHTEST_MAPPING_PATH].map(
43+
(path) => readPublisherKeyToNameMapping(path)
44+
)
45+
)
46+
const publisherKeyToNameMapping = { pythnet, pythtest }
47+
3748
const MULTISIG_SIGNER_MAPPING_PATH = `${MAPPINGS_BASE_PATH}/signers.json`
3849
const multisigSignerKeyToNameMapping = fs.existsSync(
3950
MULTISIG_SIGNER_MAPPING_PATH

pnpm-lock.yaml

Lines changed: 8 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)