Skip to content

Commit eed3e72

Browse files
committed
foo
1 parent 0e599a2 commit eed3e72

File tree

3 files changed

+120
-113
lines changed

3 files changed

+120
-113
lines changed

core/base/src/constants/guardians.ts

+72-113
Original file line numberDiff line numberDiff line change
@@ -1,121 +1,80 @@
1-
import type { MapLevels } from "./../utils/index.js";
2-
import { constMap, filterIndexes, zip, cartesianRightRecursive } from "./../utils/index.js";
1+
import {
2+
cartesianRightRecursive,
3+
constMap,
4+
filterIndexes,
5+
MapLevels,
6+
replaceElement,
7+
zip,
8+
} from "./../utils/index.js";
39
import type { Network } from "./networks.js";
410

5-
const guardianKeyAndNameEntries = [
6-
[
7-
"Mainnet",
8-
[
9-
[
10-
4,
11-
[
12-
["0x5893B5A76c3f739645648885bDCcC06cd70a3Cd3", "RockawayX"],
13-
["0xfF6CB952589BDE862c25Ef4392132fb9D4A42157", "Staked"],
14-
["0x114De8460193bdf3A2fCf81f86a09765F4762fD1", "Figment"],
15-
["0x107A0086b32d7A0977926A205131d8731D39cbEB", "ChainodeTech"],
16-
["0x8C82B2fd82FaeD2711d59AF0F2499D16e726f6b2", "Inotel"],
17-
["0x11b39756C042441BE6D8650b69b54EbE715E2343", "HashQuark"],
18-
["0x54Ce5B4D348fb74B958e8966e2ec3dBd4958a7cd", "ChainLayer"],
19-
["0x15e7cAF07C4e3DC8e7C469f92C8Cd88FB8005a20", "xLabs"],
20-
["0x74a3bf913953D695260D88BC1aA25A4eeE363ef0", "Forbole"],
21-
["0x000aC0076727b35FBea2dAc28fEE5cCB0fEA768e", "Staking Fund"],
22-
["0xAF45Ced136b9D9e24903464AE889F5C8a723FC14", "Moonlet"],
23-
["0xf93124b7c738843CBB89E864c862c38cddCccF95", "P2P Validator"],
24-
["0xD2CC37A4dc036a8D232b48f62cDD4731412f4890", "01node"],
25-
["0xDA798F6896A3331F64b48c12D1D57Fd9cbe70811", "MCF"],
26-
["0x71AA1BE1D36CaFE3867910F99C09e347899C19C3", "Everstake"],
27-
["0x8192b6E7387CCd768277c17DAb1b7a5027c0b3Cf", "Chorus One"],
28-
["0x178e21ad2E77AE06711549CFBB1f9c7a9d8096e8", "syncnode"],
29-
["0x5E1487F35515d02A92753504a8D75471b9f49EdB", "Triton"],
30-
["0x6FbEBc898F403E4773E95feB15E80C9A99c8348d", "Staking Facilities"],
31-
],
32-
],
33-
[
34-
3,
35-
[
36-
["0x58CC3AE5C097b213cE3c81979e1B9f9570746AA5", "JumpCrypto"],
37-
["0xfF6CB952589BDE862c25Ef4392132fb9D4A42157", "Staked"],
38-
["0x114De8460193bdf3A2fCf81f86a09765F4762fD1", "Figment"],
39-
["0x107A0086b32d7A0977926A205131d8731D39cbEB", "ChainodeTech"],
40-
["0x8C82B2fd82FaeD2711d59AF0F2499D16e726f6b2", "Inotel"],
41-
["0x11b39756C042441BE6D8650b69b54EbE715E2343", "HashQuark"],
42-
["0x54Ce5B4D348fb74B958e8966e2ec3dBd4958a7cd", "ChainLayer"],
43-
["0x15e7cAF07C4e3DC8e7C469f92C8Cd88FB8005a20", "xLabs"],
44-
["0x74a3bf913953D695260D88BC1aA25A4eeE363ef0", "Forbole"],
45-
["0x000aC0076727b35FBea2dAc28fEE5cCB0fEA768e", "Staking Fund"],
46-
["0xAF45Ced136b9D9e24903464AE889F5C8a723FC14", "Moonlet"],
47-
["0xf93124b7c738843CBB89E864c862c38cddCccF95", "P2P Validator"],
48-
["0xD2CC37A4dc036a8D232b48f62cDD4731412f4890", "01node"],
49-
["0xDA798F6896A3331F64b48c12D1D57Fd9cbe70811", "MCF"],
50-
["0x71AA1BE1D36CaFE3867910F99C09e347899C19C3", "Everstake"],
51-
["0x8192b6E7387CCd768277c17DAb1b7a5027c0b3Cf", "Chorus One"],
52-
["0x178e21ad2E77AE06711549CFBB1f9c7a9d8096e8", "syncnode"],
53-
["0x5E1487F35515d02A92753504a8D75471b9f49EdB", "Triton"],
54-
["0x6FbEBc898F403E4773E95feB15E80C9A99c8348d", "Staking Facilities"],
55-
],
56-
],
57-
[
58-
2,
59-
[
60-
["0x58CC3AE5C097b213cE3c81979e1B9f9570746AA5", "Certus One"],
61-
["0xfF6CB952589BDE862c25Ef4392132fb9D4A42157", "Staked"],
62-
["0x114De8460193bdf3A2fCf81f86a09765F4762fD1", "Figment"],
63-
["0x107A0086b32d7A0977926A205131d8731D39cbEB", "ChainodeTech"],
64-
["0x8C82B2fd82FaeD2711d59AF0F2499D16e726f6b2", "Inotel"],
65-
["0x11b39756C042441BE6D8650b69b54EbE715E2343", "HashQuark"],
66-
["0x54Ce5B4D348fb74B958e8966e2ec3dBd4958a7cd", "ChainLayer"],
67-
["0x15e7cAF07C4e3DC8e7C469f92C8Cd88FB8005a20", "xLabs"],
68-
["0x74a3bf913953D695260D88BC1aA25A4eeE363ef0", "Forbole"],
69-
["0x000aC0076727b35FBea2dAc28fEE5cCB0fEA768e", "Staking Fund"],
70-
["0xAF45Ced136b9D9e24903464AE889F5C8a723FC14", "Moonlet"],
71-
["0xf93124b7c738843CBB89E864c862c38cddCccF95", "P2P Validator"],
72-
["0xD2CC37A4dc036a8D232b48f62cDD4731412f4890", "01node"],
73-
["0xDA798F6896A3331F64b48c12D1D57Fd9cbe70811", "MCF"],
74-
["0x71AA1BE1D36CaFE3867910F99C09e347899C19C3", "Everstake"],
75-
["0x8192b6E7387CCd768277c17DAb1b7a5027c0b3Cf", "Chorus One"],
76-
["0x178e21ad2E77AE06711549CFBB1f9c7a9d8096e8", "syncnode"],
77-
["0x5E1487F35515d02A92753504a8D75471b9f49EdB", "Triton"],
78-
["0x6FbEBc898F403E4773E95feB15E80C9A99c8348d", "Staking Facilities"],
79-
],
80-
],
81-
[
82-
1,
83-
[
84-
["0x58CC3AE5C097b213cE3c81979e1B9f9570746AA5", "Certus One"],
85-
["0xfF6CB952589BDE862c25Ef4392132fb9D4A42157", "Staked"],
86-
["0x114De8460193bdf3A2fCf81f86a09765F4762fD1", "Figment"],
87-
["0x107A0086b32d7A0977926A205131d8731D39cbEB", "ChainodeTech"],
88-
["0x8C82B2fd82FaeD2711d59AF0F2499D16e726f6b2", "Inotel"],
89-
["0x11b39756C042441BE6D8650b69b54EbE715E2343", "HashQuark"],
90-
["0x54Ce5B4D348fb74B958e8966e2ec3dBd4958a7cd", "ChainLayer"],
91-
["0xeB5F7389Fa26941519f0863349C223b73a6DDEE7", "DokiaCapital"],
92-
["0x74a3bf913953D695260D88BC1aA25A4eeE363ef0", "Forbole"],
93-
["0x000aC0076727b35FBea2dAc28fEE5cCB0fEA768e", "Staking Fund"],
94-
["0xAF45Ced136b9D9e24903464AE889F5C8a723FC14", "Moonlet"],
95-
["0xf93124b7c738843CBB89E864c862c38cddCccF95", "P2P Validator"],
96-
["0xD2CC37A4dc036a8D232b48f62cDD4731412f4890", "01node"],
97-
["0xDA798F6896A3331F64b48c12D1D57Fd9cbe70811", "MCF"],
98-
["0x71AA1BE1D36CaFE3867910F99C09e347899C19C3", "Everstake"],
99-
["0x8192b6E7387CCd768277c17DAb1b7a5027c0b3Cf", "Chorus One"],
100-
["0x178e21ad2E77AE06711549CFBB1f9c7a9d8096e8", "syncnode"],
101-
["0x5E1487F35515d02A92753504a8D75471b9f49EdB", "Triton"],
102-
["0x6FbEBc898F403E4773E95feB15E80C9A99c8348d", "Staking Facilities"],
103-
],
104-
],
105-
],
106-
],
107-
["Testnet", [[1, [["0x13947Bd48b18E53fdAeEe77F3473391aC727C638", "Testnet guardian"]]]]],
11+
const guardianSet1 = [
12+
["0x58CC3AE5C097b213cE3c81979e1B9f9570746AA5", "Certus One"],
13+
["0xfF6CB952589BDE862c25Ef4392132fb9D4A42157", "Staked"],
14+
["0x114De8460193bdf3A2fCf81f86a09765F4762fD1", "Figment"],
15+
["0x107A0086b32d7A0977926A205131d8731D39cbEB", "ChainodeTech"],
16+
["0x8C82B2fd82FaeD2711d59AF0F2499D16e726f6b2", "Inotel"],
17+
["0x11b39756C042441BE6D8650b69b54EbE715E2343", "HashQuark"],
18+
["0x54Ce5B4D348fb74B958e8966e2ec3dBd4958a7cd", "ChainLayer"],
19+
["0xeB5F7389Fa26941519f0863349C223b73a6DDEE7", "DokiaCapital"],
20+
["0x74a3bf913953D695260D88BC1aA25A4eeE363ef0", "Forbole"],
21+
["0x000aC0076727b35FBea2dAc28fEE5cCB0fEA768e", "Staking Fund"],
22+
["0xAF45Ced136b9D9e24903464AE889F5C8a723FC14", "Moonlet"],
23+
["0xf93124b7c738843CBB89E864c862c38cddCccF95", "P2P Validator"],
24+
["0xD2CC37A4dc036a8D232b48f62cDD4731412f4890", "01node"],
25+
["0xDA798F6896A3331F64b48c12D1D57Fd9cbe70811", "MCF"],
26+
["0x71AA1BE1D36CaFE3867910F99C09e347899C19C3", "Everstake"],
27+
["0x8192b6E7387CCd768277c17DAb1b7a5027c0b3Cf", "Chorus One"],
28+
["0x178e21ad2E77AE06711549CFBB1f9c7a9d8096e8", "syncnode"],
29+
["0x5E1487F35515d02A92753504a8D75471b9f49EdB", "Triton"],
30+
["0x6FbEBc898F403E4773E95feB15E80C9A99c8348d", "Staking Facilities"],
31+
] as const;
32+
33+
const guardianSet2 = replaceElement(guardianSet1, 7, [
34+
"0x66B9590e1c41e0B226937bf9217D1d67Fd4E91F5",
35+
"FTX",
36+
]);
37+
38+
const guardianSet3 = replaceElement(guardianSet2, 7, [
39+
"0x15e7cAF07C4e3DC8e7C469f92C8Cd88FB8005a20",
40+
"xLabs",
41+
]);
42+
43+
const guardianSet4 = replaceElement(guardianSet3, 0, [
44+
"0x5893B5A76c3f739645648885bDCcC06cd70a3Cd3",
45+
"RockawayX",
46+
]);
47+
48+
const testnetGuardian = ["0x13947Bd48b18E53fdAeEe77F3473391aC727C638", "Testnet guardian"] as const;
49+
50+
// prettier-ignore
51+
const guardianKeyAndNameEntries = [[
52+
"Mainnet", [
53+
[1, guardianSet1],
54+
[2, guardianSet2],
55+
[3, guardianSet3],
56+
[4, guardianSet4],
57+
]], //[
58+
//"Testnet", [
59+
// [1, [testnetGuardian]]
60+
//]],
10861
] as const satisfies MapLevels<[Network, number, string, string]>;
10962

110-
// TODO: not sure how to implement these
63+
export const guardianSets = constMap(guardianKeyAndNameEntries, [
64+
[1, 0],
65+
[0, 1, 2, 3],
66+
]);
67+
68+
console.log(JSON.stringify(guardianSets));
69+
guardianSets.get(4, "Mainnet");
70+
71+
export const [guardianKeys, guardianNames] = filterIndexes(
72+
zip(cartesianRightRecursive(guardianKeyAndNameEntries)),
73+
[2, 3],
74+
);
11175

112-
//export const [guardianKeys, guardianNames] = filterIndexes(
113-
// zip(cartesianRightRecursive(guardianKeyAndNameEntries)),
114-
// [1, 2],
115-
//);
116-
//
117-
//export const guardianNameToKey = constMap(guardianKeyAndNameEntries, [[0, 2], 1]);
118-
//export const guardianKeyToName = constMap(guardianKeyAndNameEntries, [1, [0, 2]]);
76+
// export const guardianNameToKey = constMap(guardianKeyAndNameEntries, [[1, 0, 2], 3]);
77+
// export const guardianKeyToName = constMap(guardianKeyAndNameEntries, [2, [1, 0, 3]]);
11978

12079
export const devnetGuardianPrivateKey =
12180
"cfb12303a19cde580bb4dd771639b0d26bc68353645571a8cff516ab2ee113a0";

core/base/src/utils/array.ts

+17
Original file line numberDiff line numberDiff line change
@@ -174,3 +174,20 @@ export type Cartesian<L, R> =
174174
: R extends RoArray
175175
? [...{ [K in keyof R]: K extends `${number}` ? [L, R[K]] : never }]
176176
: [L, R];
177+
178+
export type ReplaceElement<T extends RoArray, I extends number, E> = {
179+
readonly [K in keyof T]: K extends `${I}` ? E : T[K];
180+
};
181+
182+
// Replace an element in an array at a given index
183+
export const replaceElement = <
184+
const T extends RoArray,
185+
const I extends number,
186+
const E
187+
>(arr: T, index: I, element: E,
188+
) => {
189+
const newArr = [...arr];
190+
newArr[index] = element;
191+
return newArr as ReplaceElement<T, I, E>;
192+
}
193+
+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { describe, test } from '@jest/globals';
2+
import { ethers } from 'ethers';
3+
import { EvmWormholeCore } from '@wormhole-foundation/sdk-evm-core';
4+
import { contracts } from '@wormhole-foundation/sdk-connect';
5+
import { guardians } from '@wormhole-foundation/sdk-base';
6+
7+
import '@wormhole-foundation/sdk-evm-core';
8+
9+
describe('Core tests', function () {
10+
test('Check latest mainnet guardian set', async () => {
11+
const rpc = ethers.getDefaultProvider('mainnet');
12+
const core = new EvmWormholeCore('Mainnet', 'Ethereum', rpc, {
13+
coreBridge: contracts.coreBridge.get('Mainnet', 'Ethereum'),
14+
});
15+
16+
const index = await core.getGuardianSetIndex();
17+
// If this test fails, the guardian set index may have changed
18+
expect(index).toBe(4);
19+
20+
const guardianSet = await core.getGuardianSet(index);
21+
expect(guardianSet.index).toBe(4);
22+
23+
console.log(guardianSet);
24+
console.log(guardians.guardianKeys);
25+
expect(guardians.guardianKeys.length).toBe(guardianSet.keys.length);
26+
27+
for (let i = 0; i < guardianSet.keys.length; i++) {
28+
expect(guardians.guardianKeys[i]).toBe(guardianSet.keys[i]);
29+
}
30+
});
31+
});

0 commit comments

Comments
 (0)