@moonwell-fi/moonwell-sdk 0.20.3 → 0.20.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/_cjs/actions/governance/governor-api-client.js +3 -2
- package/_cjs/actions/governance/governor-api-client.js.map +1 -1
- package/_cjs/actions/governance/proposals/common.js +11 -296
- package/_cjs/actions/governance/proposals/common.js.map +1 -1
- package/_cjs/actions/governance/proposals/getProposal.js +9 -25
- package/_cjs/actions/governance/proposals/getProposal.js.map +1 -1
- package/_cjs/actions/governance/proposals/getProposals.js +23 -14
- package/_cjs/actions/governance/proposals/getProposals.js.map +1 -1
- package/_cjs/errors/version.js +1 -1
- package/_cjs/types/proposal.js.map +1 -1
- package/_esm/actions/governance/governor-api-client.js +21 -4
- package/_esm/actions/governance/governor-api-client.js.map +1 -1
- package/_esm/actions/governance/ipfs.js +2 -2
- package/_esm/actions/governance/proposals/common.js +28 -302
- package/_esm/actions/governance/proposals/common.js.map +1 -1
- package/_esm/actions/governance/proposals/getProposal.js +23 -35
- package/_esm/actions/governance/proposals/getProposal.js.map +1 -1
- package/_esm/actions/governance/proposals/getProposals.js +48 -20
- package/_esm/actions/governance/proposals/getProposals.js.map +1 -1
- package/_esm/errors/version.js +1 -1
- package/_esm/types/proposal.js.map +1 -1
- package/_types/actions/governance/getUserVoteReceipt.d.ts +4 -4
- package/_types/actions/governance/governor-api-client.d.ts +34 -4
- package/_types/actions/governance/governor-api-client.d.ts.map +1 -1
- package/_types/actions/governance/ipfs.d.ts +2 -2
- package/_types/actions/governance/proposals/common.d.ts +12 -39
- package/_types/actions/governance/proposals/common.d.ts.map +1 -1
- package/_types/actions/governance/proposals/getProposal.d.ts +2 -1
- package/_types/actions/governance/proposals/getProposal.d.ts.map +1 -1
- package/_types/actions/governance/proposals/getProposals.d.ts.map +1 -1
- package/_types/errors/version.d.ts +1 -1
- package/_types/types/proposal.d.ts +11 -0
- package/_types/types/proposal.d.ts.map +1 -1
- package/actions/governance/getUserVoteReceipt.ts +4 -4
- package/actions/governance/governor-api-client.ts +35 -4
- package/actions/governance/ipfs.ts +2 -2
- package/actions/governance/proposals/common.ts +28 -466
- package/actions/governance/proposals/getProposal.ts +25 -49
- package/actions/governance/proposals/getProposals.ts +57 -30
- package/errors/version.ts +1 -1
- package/package.json +1 -1
- package/types/proposal.ts +11 -0
|
@@ -87,6 +87,25 @@ async function getMoonbeamProposals(governanceEnvironment) {
|
|
|
87
87
|
});
|
|
88
88
|
}
|
|
89
89
|
});
|
|
90
|
+
return buildProposals(apiProposals, governanceEnvironment);
|
|
91
|
+
}
|
|
92
|
+
async function getMoonriverProposals(governanceEnvironment) {
|
|
93
|
+
let apiProposals = [];
|
|
94
|
+
try {
|
|
95
|
+
apiProposals = await (0, governor_api_client_js_1.fetchAllProposals)(governanceEnvironment, {
|
|
96
|
+
chainId: chains_1.moonriver.id,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
catch (reason) {
|
|
100
|
+
console.warn(`[getProposals] Failed to fetch proposals for chainId=${chains_1.moonriver.id}; continuing with an empty Moonriver list.`, reason);
|
|
101
|
+
governanceEnvironment.onError?.(reason, {
|
|
102
|
+
source: "governance-proposals",
|
|
103
|
+
chainId: chains_1.moonriver.id,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
return buildProposals(apiProposals, governanceEnvironment);
|
|
107
|
+
}
|
|
108
|
+
async function buildProposals(apiProposals, governanceEnvironment) {
|
|
90
109
|
const [, crossChainQuorums] = await Promise.all([
|
|
91
110
|
(0, ipfs_js_1.resolveIpfsDescriptions)(apiProposals, governanceEnvironment),
|
|
92
111
|
(0, common_js_1.readCrossChainQuorums)(apiProposals, governanceEnvironment),
|
|
@@ -134,10 +153,13 @@ async function getMoonbeamProposals(governanceEnvironment) {
|
|
|
134
153
|
description: apiProposal.description,
|
|
135
154
|
targets: apiProposal.targets,
|
|
136
155
|
calldatas: apiProposal.calldatas,
|
|
137
|
-
signatures: [],
|
|
156
|
+
signatures: apiProposal.signatures ?? [],
|
|
138
157
|
stateChanges: formattedData.stateChanges,
|
|
139
158
|
environment: governanceEnvironment,
|
|
140
159
|
};
|
|
160
|
+
if (apiProposal.snapshotBlocks) {
|
|
161
|
+
proposal.snapshotBlocks = apiProposal.snapshotBlocks;
|
|
162
|
+
}
|
|
141
163
|
if (isMultichain) {
|
|
142
164
|
proposal.multichain = {
|
|
143
165
|
id: apiProposal.proposalId,
|
|
@@ -148,17 +170,4 @@ async function getMoonbeamProposals(governanceEnvironment) {
|
|
|
148
170
|
});
|
|
149
171
|
return proposals;
|
|
150
172
|
}
|
|
151
|
-
async function getMoonriverProposals(governanceEnvironment) {
|
|
152
|
-
const [_proposals, _xcProposals, _extendedDatas] = await Promise.all([
|
|
153
|
-
(0, common_js_1.getProposalData)({ environment: governanceEnvironment }),
|
|
154
|
-
(0, common_js_1.getCrossChainProposalData)({ environment: governanceEnvironment }),
|
|
155
|
-
(0, common_js_1.getExtendedProposalData)({ environment: governanceEnvironment }),
|
|
156
|
-
]);
|
|
157
|
-
const proposals = [..._proposals, ..._xcProposals];
|
|
158
|
-
proposals.forEach((proposal) => {
|
|
159
|
-
proposal.environment = governanceEnvironment;
|
|
160
|
-
});
|
|
161
|
-
(0, common_js_1.appendProposalExtendedData)(proposals, _extendedDatas);
|
|
162
|
-
return proposals;
|
|
163
|
-
}
|
|
164
173
|
//# sourceMappingURL=getProposals.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getProposals.js","sourceRoot":"","sources":["../../../../actions/governance/proposals/getProposals.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"getProposals.js","sourceRoot":"","sources":["../../../../actions/governance/proposals/getProposals.ts"],"names":[],"mappings":"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"}
|
package/_cjs/errors/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proposal.js","sourceRoot":"","sources":["../../types/proposal.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"proposal.js","sourceRoot":"","sources":["../../types/proposal.ts"],"names":[],"mappings":";;;AAqDA,IAAY,aAWX;AAXD,WAAY,aAAa;IACvB,uDAAW,CAAA;IACX,qDAAU,CAAA;IACV,yDAAY,CAAA;IACZ,yDAAY,CAAA;IACZ,2DAAa,CAAA;IACb,qDAAU,CAAA;IACV,uDAAW,CAAA;IACX,yDAAY,CAAA;IACZ,yEAAoB,CAAA;IACpB,6EAAsB,CAAA;AACxB,CAAC,EAXW,aAAa,6BAAb,aAAa,QAWxB;AAGD,IAAY,uBAOX;AAPD,WAAY,uBAAuB;IACjC,yEAAU,CAAA;IACV,6GAA4B,CAAA;IAC5B,6EAAY,CAAA;IACZ,6EAAY,CAAA;IACZ,+EAAa,CAAA;IACb,6EAAY,CAAA;AACd,CAAC,EAPW,uBAAuB,uCAAvB,uBAAuB,QAOlC;AAGY,QAAA,8BAA8B,GAAG;IAC5C,CAAC,uBAAuB,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,MAAM;IACtD,CAAC,uBAAuB,CAAC,wBAAwB,CAAC,EAAE,aAAa,CAAC,MAAM;IACxE,CAAC,uBAAuB,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,QAAQ;IAC1D,CAAC,uBAAuB,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,QAAQ;IAC1D,CAAC,uBAAuB,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC,SAAS;IAC5D,CAAC,uBAAuB,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,QAAQ;CAC3D,CAAC"}
|
|
@@ -9,9 +9,25 @@ const getGovernorApiUrl = (environment) => {
|
|
|
9
9
|
};
|
|
10
10
|
/**
|
|
11
11
|
* Chains the governor indexer serves. Ethereum first because that's where the
|
|
12
|
-
* active multigov contract lives; Moonbeam follows for the historical archive
|
|
12
|
+
* active multigov contract lives; Moonbeam follows for the historical archive,
|
|
13
|
+
* then Moonriver (legacy standalone governor).
|
|
14
|
+
*
|
|
15
|
+
* This is the fan-out set for `getUserVoteReceipt` — a bare proposalId is
|
|
16
|
+
* queried on every chain and non-empty receipts are concatenated. Do NOT use it
|
|
17
|
+
* as the single-proposal fallback in `getProposal`: Moonriver has its own
|
|
18
|
+
* explicit route there, and reaching a 1285 proposal through a Moonbeam env
|
|
19
|
+
* would surface a degraded result (see `MULTIGOV_PROPOSAL_FALLBACK_CHAIN_IDS`).
|
|
20
|
+
*/
|
|
21
|
+
export const SUPPORTED_GOVERNOR_CHAIN_IDS = [1, 1284, 1285];
|
|
22
|
+
/**
|
|
23
|
+
* Fallback chains for a single multigov proposal lookup (`getProposal` with no
|
|
24
|
+
* explicit `chainId`), tried first-hit-wins. Deliberately excludes Moonriver
|
|
25
|
+
* (1285): Moonriver proposals are fetched through their own env via an explicit
|
|
26
|
+
* chainId, so a bare Moonbeam/Ethereum lookup must never resolve to a 1285
|
|
27
|
+
* proposal — that would return `quorum: 0n` (cross-chain quorum skips
|
|
28
|
+
* governor-less chains) and the wrong `environment`.
|
|
13
29
|
*/
|
|
14
|
-
export const
|
|
30
|
+
export const MULTIGOV_PROPOSAL_FALLBACK_CHAIN_IDS = [1, 1284];
|
|
15
31
|
/**
|
|
16
32
|
* Build the chain-prefixed proposal key the indexer requires
|
|
17
33
|
* (e.g. chainId=1, proposalId=7 → "1-0000000007").
|
|
@@ -71,8 +87,9 @@ async function fetchProposalScoped(url, chainId, proposalId, resourceLabel) {
|
|
|
71
87
|
/**
|
|
72
88
|
* Fetch proposals from Governor API
|
|
73
89
|
*
|
|
74
|
-
* `chainId` is required by the indexer — 1 (Ethereum multigov)
|
|
75
|
-
* 1284 (Moonbeam historical). Missing/unsupported
|
|
90
|
+
* `chainId` is required by the indexer — 1 (Ethereum multigov),
|
|
91
|
+
* 1284 (Moonbeam historical), or 1285 (Moonriver legacy). Missing/unsupported
|
|
92
|
+
* chainId returns 400.
|
|
76
93
|
*/
|
|
77
94
|
export async function fetchProposals(environment, options) {
|
|
78
95
|
const baseUrl = getGovernorApiUrl(environment);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"governor-api-client.js","sourceRoot":"","sources":["../../../actions/governance/governor-api-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD;;;GAGG;AACH,MAAM,iBAAiB,GAAG,CAAC,WAAwB,EAAU,EAAE;IAC7D,OAAO,WAAW,CAAC,oBAAoB,CAAC;AAC1C,CAAC,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"governor-api-client.js","sourceRoot":"","sources":["../../../actions/governance/governor-api-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,8 +42,8 @@ export const fetchIpfsContent = async (hash) => {
|
|
|
42
42
|
* fetches run in parallel.
|
|
43
43
|
*
|
|
44
44
|
* Failures are logged via console.warn AND surfaced through
|
|
45
|
-
* `env.onError` (matching the convention used by `
|
|
46
|
-
* `
|
|
45
|
+
* `env.onError` (matching the convention used by `getProposalsOnChainData` /
|
|
46
|
+
* `readCrossChainQuorums`), then swallowed per-proposal: the `ipfs://` URI
|
|
47
47
|
* is left untouched so consumers can detect (e.g. via
|
|
48
48
|
* `description.startsWith("ipfs://")`) and render a fallback. The bulk call
|
|
49
49
|
* never rejects, so a single bad pin doesn't kill `getProposals()` for
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import axios from "axios";
|
|
2
|
-
import last from "lodash/last.js";
|
|
3
|
-
import { moonriver } from "viem/chains";
|
|
4
2
|
import { Amount } from "../../../common/index.js";
|
|
5
3
|
import { publicEnvironments } from "../../../environments/index.js";
|
|
6
4
|
import { MultichainProposalState, MultichainProposalStateMapping, ProposalState, } from "../../../types/proposal.js";
|
|
7
|
-
import { postWithRetry } from "../../axiosWithRetry.js";
|
|
8
5
|
export const WORMHOLE_CONTRACT = "0xc8e2b0cd52cf01b0ce87d389daa3d414d4ce29f3"; // Moonbeam
|
|
9
6
|
// Wormhole Core Bridge addresses for chains that can host the multichain
|
|
10
7
|
// governance hub. Moonbeam was the historical hub; Ethereum is the current
|
|
@@ -99,11 +96,21 @@ export const isMultichainHomeChain = (chainId) => {
|
|
|
99
96
|
* falls back to the home/bridge checks. Omit it or pass `undefined` when the
|
|
100
97
|
* count read failed so the unknown-cutoff bias above applies. (No `= 0` default:
|
|
101
98
|
* that would coerce an explicit `undefined` back to 0 and defeat the bias.)
|
|
99
|
+
*
|
|
100
|
+
* `hasMultichainGovernor` gates rule 4: the unknown-cutoff bias only makes sense
|
|
101
|
+
* on a chain that actually has a multichain governor to route to. On a
|
|
102
|
+
* legacy-only chain (Moonriver — legacy `governor`, no `multichainGovernor`) a
|
|
103
|
+
* failed Artemis count must NOT flip the proposal to multichain, which would
|
|
104
|
+
* route reads to a null contract and surface a spurious `multichain` field.
|
|
105
|
+
* Defaults to `true` so callers that don't supply it keep the dual-governor
|
|
106
|
+
* (Moonbeam) bias behavior.
|
|
102
107
|
*/
|
|
103
|
-
export const classifyProposalMultichain = (proposal, legacyArtemisMaxId) => isMultichainHomeChain(proposal.chainId) ||
|
|
108
|
+
export const classifyProposalMultichain = (proposal, legacyArtemisMaxId, hasMultichainGovernor = true) => isMultichainHomeChain(proposal.chainId) ||
|
|
104
109
|
isMultichainProposal(proposal.targets) ||
|
|
105
|
-
legacyArtemisMaxId === undefined ||
|
|
106
|
-
(legacyArtemisMaxId
|
|
110
|
+
(legacyArtemisMaxId === undefined && hasMultichainGovernor) ||
|
|
111
|
+
(legacyArtemisMaxId !== undefined &&
|
|
112
|
+
legacyArtemisMaxId > 0 &&
|
|
113
|
+
proposal.proposalId > legacyArtemisMaxId);
|
|
107
114
|
/**
|
|
108
115
|
* @deprecated Use `classifyProposalMultichain` — this variant misses hub-homed
|
|
109
116
|
* proposals when the Artemis count is unavailable. Kept for compatibility.
|
|
@@ -215,9 +222,8 @@ const getLegacyArtemisMaxId = async (governanceEnvironment) => {
|
|
|
215
222
|
* the `options.crossChainQuorums?.get(...) ?? 0n` pattern.
|
|
216
223
|
*
|
|
217
224
|
* Read failures are routed through `onError` so Sentry-wired consumers see
|
|
218
|
-
* them — matching `
|
|
219
|
-
* `
|
|
220
|
-
* `onError` since we don't have one per foreign chain in scope.
|
|
225
|
+
* them — matching `getProposalsOnChainData`. The caller's `governanceEnvironment`
|
|
226
|
+
* carries `onError` since we don't have one per foreign chain in scope.
|
|
221
227
|
*/
|
|
222
228
|
export const getEnvironmentByChainId = (chainId) => Object.values(publicEnvironments).find((e) => e.chainId === chainId);
|
|
223
229
|
export const readCrossChainQuorums = async (apiProposals, governanceEnvironment) => {
|
|
@@ -257,6 +263,15 @@ export const getProposalsOnChainData = async (apiProposals, governanceEnvironmen
|
|
|
257
263
|
}
|
|
258
264
|
catch (error) {
|
|
259
265
|
console.warn("Failed to fetch quorum:", error);
|
|
266
|
+
// Report so a swallowed quorum failure (which leaves quorum at 0n) is
|
|
267
|
+
// still observable to onError-wired consumers — the legacy Moonriver path
|
|
268
|
+
// surfaced this too. Uses a distinct `source` from the state/proposals
|
|
269
|
+
// reads (and from readCrossChainQuorums' "governance-cross-chain-quorum")
|
|
270
|
+
// so a local quorum-read failure is attributable on its own.
|
|
271
|
+
governanceEnvironment.onError?.(error, {
|
|
272
|
+
source: "governance-quorum",
|
|
273
|
+
chainId: governanceEnvironment.chainId,
|
|
274
|
+
});
|
|
260
275
|
}
|
|
261
276
|
}
|
|
262
277
|
const legacyArtemisMaxId = await getLegacyArtemisMaxId(governanceEnvironment);
|
|
@@ -277,8 +292,10 @@ export const getProposalsOnChainData = async (apiProposals, governanceEnvironmen
|
|
|
277
292
|
// (Ethereum multigov, no Artemis predecessor) classify as multichain
|
|
278
293
|
// regardless of targets via classifyProposalMultichain. Computed once
|
|
279
294
|
// here and returned on ProposalOnChainData so callers don't re-classify
|
|
280
|
-
// and drift (see getProposal/getProposals).
|
|
281
|
-
|
|
295
|
+
// and drift (see getProposal/getProposals). `hasMultichainGovernor` keeps
|
|
296
|
+
// the unknown-cutoff bias from misrouting legacy-only chains (Moonriver)
|
|
297
|
+
// to a nonexistent multichain governor when the Artemis count read fails.
|
|
298
|
+
const isMultichain = classifyProposalMultichain(p, isLocal ? legacyArtemisMaxId : 0, Boolean(homeEnv?.contracts.multichainGovernor));
|
|
282
299
|
if (!homeEnv) {
|
|
283
300
|
const formatted = formatApiProposalData(p);
|
|
284
301
|
return {
|
|
@@ -389,295 +406,4 @@ export const getProposalsOnChainData = async (apiProposals, governanceEnvironmen
|
|
|
389
406
|
}));
|
|
390
407
|
return onChainDataList;
|
|
391
408
|
};
|
|
392
|
-
/**
|
|
393
|
-
* Get proposal data from on-chain (Ponder-based, for Moonriver)
|
|
394
|
-
*/
|
|
395
|
-
export const getProposalData = async (params) => {
|
|
396
|
-
try {
|
|
397
|
-
if (params.environment.contracts.governor) {
|
|
398
|
-
let count = 0n;
|
|
399
|
-
let quorum = 0n;
|
|
400
|
-
if (params.environment.chainId === moonriver.id) {
|
|
401
|
-
[count, quorum] = await Promise.all([
|
|
402
|
-
params.environment.contracts.governor.read.proposalCount(),
|
|
403
|
-
params.environment.contracts.governor.read.getQuorum(),
|
|
404
|
-
]);
|
|
405
|
-
}
|
|
406
|
-
else {
|
|
407
|
-
[count, quorum] = await Promise.all([
|
|
408
|
-
params.environment.contracts.governor.read.proposalCount(),
|
|
409
|
-
params.environment.contracts.governor.read.quorumVotes(),
|
|
410
|
-
]);
|
|
411
|
-
}
|
|
412
|
-
if (params.id) {
|
|
413
|
-
if (BigInt(params.id) > count) {
|
|
414
|
-
return [];
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
const ids = params.id
|
|
418
|
-
? [BigInt(params.id)]
|
|
419
|
-
: Array.from({ length: Number(count) }, (_, i) => count - BigInt(i));
|
|
420
|
-
const proposalDataCall = Promise.all(ids.map((id) => params.environment.contracts.governor?.read.proposals([id])));
|
|
421
|
-
const proposalStateCall = Promise.all(ids.map((id) => params.environment.contracts.governor?.read.state([id])));
|
|
422
|
-
const [proposalsData, proposalsState] = await Promise.all([
|
|
423
|
-
proposalDataCall,
|
|
424
|
-
proposalStateCall,
|
|
425
|
-
]);
|
|
426
|
-
const proposals = proposalsData?.map((item, index) => {
|
|
427
|
-
const state = proposalsState?.[index];
|
|
428
|
-
const [id, proposer, eta, startTimestamp, endTimestamp, startBlock, forVotes, againstVotes, abstainVotes, totalVotes, canceled, executed,] = item;
|
|
429
|
-
const proposal = {
|
|
430
|
-
chainId: params.environment.chainId,
|
|
431
|
-
id: Number(id),
|
|
432
|
-
proposalId: Number(id),
|
|
433
|
-
proposer,
|
|
434
|
-
eta: Number(eta),
|
|
435
|
-
startTimestamp: Number(startTimestamp),
|
|
436
|
-
endTimestamp: Number(endTimestamp),
|
|
437
|
-
startBlock: Number(startBlock),
|
|
438
|
-
forVotes: new Amount(forVotes, 18),
|
|
439
|
-
againstVotes: new Amount(againstVotes, 18),
|
|
440
|
-
abstainVotes: new Amount(abstainVotes, 18),
|
|
441
|
-
totalVotes: new Amount(totalVotes, 18),
|
|
442
|
-
canceled,
|
|
443
|
-
executed,
|
|
444
|
-
quorum: new Amount(quorum, 18),
|
|
445
|
-
state,
|
|
446
|
-
};
|
|
447
|
-
return proposal;
|
|
448
|
-
});
|
|
449
|
-
return proposals;
|
|
450
|
-
}
|
|
451
|
-
else {
|
|
452
|
-
return [];
|
|
453
|
-
}
|
|
454
|
-
}
|
|
455
|
-
catch (error) {
|
|
456
|
-
console.warn(`[getProposalData] RPC failed for chain ${params.environment.chainId}:`, error);
|
|
457
|
-
params.environment.onError?.(error, {
|
|
458
|
-
source: "governance-proposals",
|
|
459
|
-
chainId: params.environment.chainId,
|
|
460
|
-
});
|
|
461
|
-
return [];
|
|
462
|
-
}
|
|
463
|
-
};
|
|
464
|
-
/**
|
|
465
|
-
* Get cross-chain proposal data (Ponder-based, for Moonriver)
|
|
466
|
-
*/
|
|
467
|
-
export const getCrossChainProposalData = async (params) => {
|
|
468
|
-
try {
|
|
469
|
-
if (params.environment.contracts.governor) {
|
|
470
|
-
const xcGovernanceSettings = params.environment.custom.governance;
|
|
471
|
-
if (params.environment.contracts.multichainGovernor &&
|
|
472
|
-
xcGovernanceSettings &&
|
|
473
|
-
xcGovernanceSettings.chainIds.length > 0) {
|
|
474
|
-
const xcEnvironments = xcGovernanceSettings.chainIds
|
|
475
|
-
.map((chainId) => Object.values(publicEnvironments).find((env) => env.chainId === chainId))
|
|
476
|
-
.filter((xcEnvironment) => !!xcEnvironment)
|
|
477
|
-
.filter((xcEnvironment) => xcEnvironment.custom?.wormhole?.chainId &&
|
|
478
|
-
xcEnvironment.contracts.voteCollector);
|
|
479
|
-
const [xcCount, xcQuorum] = await Promise.all([
|
|
480
|
-
params.environment.contracts.multichainGovernor.read.proposalCount(),
|
|
481
|
-
params.environment.contracts.multichainGovernor.read.quorum(),
|
|
482
|
-
]);
|
|
483
|
-
if (params.id) {
|
|
484
|
-
params.id =
|
|
485
|
-
Number(params.id) -
|
|
486
|
-
(params.environment.custom?.governance?.proposalIdOffset || 0);
|
|
487
|
-
if (params.id < 0)
|
|
488
|
-
return [];
|
|
489
|
-
if (BigInt(params.id) > xcCount)
|
|
490
|
-
return [];
|
|
491
|
-
}
|
|
492
|
-
const ids = params.id
|
|
493
|
-
? [BigInt(params.id)]
|
|
494
|
-
: Array.from({ length: Number(xcCount) }, (_, i) => xcCount - BigInt(i));
|
|
495
|
-
const xcProposalsDataCall = Promise.all(ids.map((id) => params.environment.contracts.multichainGovernor?.read.proposals([
|
|
496
|
-
id,
|
|
497
|
-
])));
|
|
498
|
-
const xcProposalsStateCall = Promise.all(ids.map((id) => params.environment.contracts.multichainGovernor?.read.state([id])));
|
|
499
|
-
const xcVotesCall = Promise.all(xcEnvironments.map((xcEnvironment) => Promise.all(ids.map((id) => params.environment.contracts.multichainGovernor?.read.chainVoteCollectorVotes([xcEnvironment.custom.wormhole.chainId, id])))));
|
|
500
|
-
const [xcProposalsData, xcProposalsState, xcVotes] = await Promise.all([
|
|
501
|
-
xcProposalsDataCall,
|
|
502
|
-
xcProposalsStateCall,
|
|
503
|
-
xcVotesCall,
|
|
504
|
-
]);
|
|
505
|
-
const proposals = ids.map((xcId, proposalIndex) => {
|
|
506
|
-
const state = xcProposalsState?.[proposalIndex];
|
|
507
|
-
const id = Number(xcId) +
|
|
508
|
-
(params.environment.custom?.governance?.proposalIdOffset || 0);
|
|
509
|
-
const votesCollected = false;
|
|
510
|
-
const votes = xcVotes.reduce((prevVotes, currVotes) => {
|
|
511
|
-
const voteData = currVotes[proposalIndex];
|
|
512
|
-
if (!voteData) {
|
|
513
|
-
return prevVotes;
|
|
514
|
-
}
|
|
515
|
-
// chainVoteCollectorVotes returns [forVotes, againstVotes, abstainVotes]
|
|
516
|
-
const forVotes = voteData[0] || 0n;
|
|
517
|
-
const againstVotes = voteData[1] || 0n;
|
|
518
|
-
const abstainVotes = voteData[2] || 0n;
|
|
519
|
-
const totalVotes = forVotes + againstVotes + abstainVotes;
|
|
520
|
-
return {
|
|
521
|
-
totalVotes: prevVotes.totalVotes + totalVotes,
|
|
522
|
-
forVotes: prevVotes.forVotes + forVotes,
|
|
523
|
-
againstVotes: prevVotes.againstVotes + againstVotes,
|
|
524
|
-
abstainVotes: prevVotes.abstainVotes + abstainVotes,
|
|
525
|
-
};
|
|
526
|
-
}, {
|
|
527
|
-
totalVotes: 0n,
|
|
528
|
-
forVotes: 0n,
|
|
529
|
-
againstVotes: 0n,
|
|
530
|
-
abstainVotes: 0n,
|
|
531
|
-
});
|
|
532
|
-
const proposalData = xcProposalsData?.[proposalIndex];
|
|
533
|
-
if (!proposalData) {
|
|
534
|
-
throw new Error(`Proposal data not found for index ${proposalIndex}`);
|
|
535
|
-
}
|
|
536
|
-
const [proposer, _voteSnapshotTimestamp, votingStartTime, votingEndTime, crossChainVoteCollectionEndTimestamp, voteSnapshotBlock, proposalForVotes, proposalAgainstVotes, proposalAbstainVotes, proposalTotalVotes, canceled, executed,] = proposalData;
|
|
537
|
-
const multichainState = MultichainProposalStateMapping[state];
|
|
538
|
-
const proposal = {
|
|
539
|
-
chainId: params.environment.chainId,
|
|
540
|
-
id,
|
|
541
|
-
proposalId: Number(xcId),
|
|
542
|
-
proposer,
|
|
543
|
-
eta: Number(crossChainVoteCollectionEndTimestamp),
|
|
544
|
-
startTimestamp: Number(votingStartTime),
|
|
545
|
-
endTimestamp: Number(votingEndTime),
|
|
546
|
-
startBlock: Number(voteSnapshotBlock),
|
|
547
|
-
forVotes: new Amount(proposalForVotes + votes.forVotes, 18),
|
|
548
|
-
againstVotes: new Amount(proposalAgainstVotes + votes.againstVotes, 18),
|
|
549
|
-
abstainVotes: new Amount(proposalAbstainVotes + votes.abstainVotes, 18),
|
|
550
|
-
totalVotes: new Amount(proposalTotalVotes + votes.totalVotes, 18),
|
|
551
|
-
canceled,
|
|
552
|
-
executed,
|
|
553
|
-
quorum: new Amount(xcQuorum, 18),
|
|
554
|
-
state: multichainState,
|
|
555
|
-
multichain: {
|
|
556
|
-
id: Number(xcId),
|
|
557
|
-
votesCollected,
|
|
558
|
-
},
|
|
559
|
-
};
|
|
560
|
-
return proposal;
|
|
561
|
-
});
|
|
562
|
-
return proposals;
|
|
563
|
-
}
|
|
564
|
-
else {
|
|
565
|
-
return [];
|
|
566
|
-
}
|
|
567
|
-
}
|
|
568
|
-
else {
|
|
569
|
-
return [];
|
|
570
|
-
}
|
|
571
|
-
}
|
|
572
|
-
catch (error) {
|
|
573
|
-
console.warn(`[getCrossChainProposalData] RPC failed for chain ${params.environment.chainId}:`, error);
|
|
574
|
-
params.environment.onError?.(error, {
|
|
575
|
-
source: "governance-proposals",
|
|
576
|
-
chainId: params.environment.chainId,
|
|
577
|
-
});
|
|
578
|
-
return [];
|
|
579
|
-
}
|
|
580
|
-
};
|
|
581
|
-
export const appendProposalExtendedData = (proposals, extendedDatas) => {
|
|
582
|
-
proposals.forEach((proposal) => {
|
|
583
|
-
const extendedData = extendedDatas.find((item) => item.id === proposal.proposalId);
|
|
584
|
-
if (extendedData) {
|
|
585
|
-
proposal.title = extendedData.title;
|
|
586
|
-
proposal.calldatas = extendedData.calldatas;
|
|
587
|
-
proposal.description = extendedData.description;
|
|
588
|
-
proposal.signatures = extendedData.signatures;
|
|
589
|
-
proposal.stateChanges = extendedData.stateChanges.map((change) => ({
|
|
590
|
-
blockNumber: change.blockNumber,
|
|
591
|
-
transactionHash: change.transactionHash,
|
|
592
|
-
state: change.state,
|
|
593
|
-
chainId: proposal.chainId,
|
|
594
|
-
}));
|
|
595
|
-
proposal.subtitle = extendedData.subtitle;
|
|
596
|
-
proposal.targets = extendedData.targets;
|
|
597
|
-
}
|
|
598
|
-
});
|
|
599
|
-
};
|
|
600
|
-
export const getExtendedProposalData = async (params) => {
|
|
601
|
-
const result = [];
|
|
602
|
-
let lastId = -1;
|
|
603
|
-
let shouldContinue = true;
|
|
604
|
-
const MAX_PAGES = 100;
|
|
605
|
-
let page = 0;
|
|
606
|
-
try {
|
|
607
|
-
while (shouldContinue && page < MAX_PAGES) {
|
|
608
|
-
page++;
|
|
609
|
-
const response = await postWithRetry("https://ponder-eu2.moonwell.fi", {
|
|
610
|
-
query: `
|
|
611
|
-
query {
|
|
612
|
-
proposals(
|
|
613
|
-
limit: 1000,
|
|
614
|
-
orderDirection: "desc",
|
|
615
|
-
orderBy: "proposalId",
|
|
616
|
-
where: {
|
|
617
|
-
chainId: ${params.environment.chainId}
|
|
618
|
-
${params.id ? `, proposalId: ${params.id}` : lastId >= 0 ? `, proposalId_lt: ${lastId}` : ""}
|
|
619
|
-
}
|
|
620
|
-
) {
|
|
621
|
-
items {
|
|
622
|
-
id
|
|
623
|
-
proposalId
|
|
624
|
-
description
|
|
625
|
-
targets
|
|
626
|
-
calldatas
|
|
627
|
-
signatures
|
|
628
|
-
stateChanges(orderBy: "blockNumber") {
|
|
629
|
-
items {
|
|
630
|
-
txnHash
|
|
631
|
-
blockNumber
|
|
632
|
-
newState
|
|
633
|
-
}
|
|
634
|
-
}
|
|
635
|
-
}
|
|
636
|
-
}
|
|
637
|
-
}
|
|
638
|
-
`,
|
|
639
|
-
});
|
|
640
|
-
if (response.status === 200 && response.data?.data?.proposals) {
|
|
641
|
-
const proposals = response.data.data.proposals.items.map((item) => {
|
|
642
|
-
const extendedProposalData = {
|
|
643
|
-
id: item.proposalId,
|
|
644
|
-
title: `Proposal #${item.proposalId}`,
|
|
645
|
-
subtitle: extractProposalSubtitle(item.description),
|
|
646
|
-
description: item.description,
|
|
647
|
-
calldatas: item.calldatas,
|
|
648
|
-
signatures: item.signatures,
|
|
649
|
-
stateChanges: item.stateChanges.items.map((change) => {
|
|
650
|
-
return {
|
|
651
|
-
blockNumber: change.blockNumber,
|
|
652
|
-
state: change.newState,
|
|
653
|
-
transactionHash: change.txnHash,
|
|
654
|
-
};
|
|
655
|
-
}),
|
|
656
|
-
targets: item.targets,
|
|
657
|
-
};
|
|
658
|
-
return extendedProposalData;
|
|
659
|
-
});
|
|
660
|
-
if (proposals.length < 1000 || proposals.length === 0) {
|
|
661
|
-
shouldContinue = false;
|
|
662
|
-
}
|
|
663
|
-
else {
|
|
664
|
-
lastId = last(proposals).id;
|
|
665
|
-
}
|
|
666
|
-
result.push(...proposals);
|
|
667
|
-
}
|
|
668
|
-
else {
|
|
669
|
-
shouldContinue = false;
|
|
670
|
-
}
|
|
671
|
-
}
|
|
672
|
-
}
|
|
673
|
-
catch (error) {
|
|
674
|
-
console.warn(`[getExtendedProposalData] Ponder failed for chain ${params.environment.chainId}:`, error);
|
|
675
|
-
params.environment.onError?.(error, {
|
|
676
|
-
source: "governance-proposals",
|
|
677
|
-
chainId: params.environment.chainId,
|
|
678
|
-
});
|
|
679
|
-
return result;
|
|
680
|
-
}
|
|
681
|
-
return result;
|
|
682
|
-
};
|
|
683
409
|
//# sourceMappingURL=common.js.map
|