@berachain/berajs 0.2.8-beta.9 → 0.2.9
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/dist/{BeraError-_mQdkanr.d.cts → BeraError-7-A5JYy_.d.ts} +31 -2
- package/dist/{HoneyConfigProvider-DVP_9KZn.d.ts → HoneyConfigProvider-Dkj-_a5x.d.ts} +1 -1
- package/dist/{RequestError-BRIiJgHk.d.ts → RequestError-DBOIV65x.d.ts} +1 -1
- package/dist/abi/exports.mjs +4452 -2
- package/dist/actions/clients/exports.d.ts +2 -0
- package/dist/actions/clients/exports.mjs +12 -0
- package/dist/actions/exports.d.ts +104 -189
- package/dist/actions/exports.mjs +853 -2
- package/dist/actions/governance/exports.d.ts +140 -0
- package/dist/actions/governance/exports.mjs +226 -0
- package/dist/actions/server/exports.d.ts +13 -0
- package/dist/actions/server/exports.mjs +27 -0
- package/dist/chunk-3EARVV7K.mjs +414 -0
- package/dist/chunk-4Z4AK6SH.mjs +211 -0
- package/dist/chunk-75M6TF7M.mjs +25 -0
- package/dist/chunk-AFN4CVD3.mjs +326 -0
- package/dist/chunk-BGMRHTBQ.mjs +23 -0
- package/dist/chunk-CDFWPU2R.mjs +473 -0
- package/dist/chunk-CDK4YV3D.mjs +571 -0
- package/dist/chunk-DKMAIU74.mjs +62 -0
- package/dist/chunk-EXIUPSFN.mjs +86 -0
- package/dist/chunk-FFB5LFDW.mjs +35 -0
- package/dist/chunk-HQCOU6GY.mjs +243 -0
- package/dist/chunk-HSSJKHZ4.mjs +135 -0
- package/dist/chunk-J5I45WGQ.mjs +1769 -0
- package/dist/chunk-KQUMKB66.mjs +89 -0
- package/dist/chunk-NBYLMO2L.mjs +14 -0
- package/dist/chunk-NPBQLVL3.mjs +80 -0
- package/dist/chunk-O2NQFKJK.mjs +170 -0
- package/dist/chunk-QJIXTYTZ.mjs +4054 -0
- package/dist/chunk-SGIJVHZO.mjs +12 -0
- package/dist/chunk-SZ5C44L5.mjs +35 -0
- package/dist/chunk-WXXOISTU.mjs +96 -0
- package/dist/chunk-XIYN6AL6.mjs +160 -0
- package/dist/contexts/exports.d.ts +2 -2
- package/dist/contexts/exports.mjs +85 -2
- package/dist/enum/exports.d.ts +1 -1
- package/dist/enum/exports.mjs +46 -2
- package/dist/enum/governance/exports.d.ts +60 -0
- package/dist/enum/governance/exports.mjs +14 -0
- package/dist/errors/exports.d.ts +4 -3
- package/dist/errors/exports.mjs +48 -2
- package/dist/exports-BcUTGFUb.d.ts +40 -0
- package/dist/{getValidatorQueuedOperatorAddress-BcyxE9uw.d.ts → getValidatorQueuedOperatorAddress-Dw5KN5sh.d.ts} +2 -2
- package/dist/{global.d-5w_lvl2J.d.ts → global.d-BuGDKh4k.d.ts} +4 -240
- package/dist/hooks/exports.d.ts +69 -211
- package/dist/hooks/exports.mjs +7434 -4
- package/dist/hooks/governance/exports.d.ts +181 -0
- package/dist/hooks/governance/exports.mjs +888 -0
- package/dist/pol.d-CqPA9K6m.d.ts +142 -0
- package/dist/{txnEnum-7_o92X3N.d.cts → txnEnum-ByI5dtDi.d.ts} +2 -60
- package/dist/types/exports.d.ts +9 -9
- package/dist/types/exports.mjs +0 -1
- package/dist/types/governance/exports.d.ts +109 -0
- package/dist/types/governance/exports.mjs +0 -0
- package/dist/{useHoneySwapState-B494PQDl.d.ts → useHoneySwapState-vFmuFF0g.d.ts} +1 -1
- package/dist/utils/exports.d.ts +15 -6
- package/dist/utils/exports.mjs +825 -2
- package/package.json +49 -13
- package/src/actions/__test/transports.ts +61 -0
- package/src/actions/clients/exports.ts +4 -0
- package/src/actions/clients/getApolloClient.ts +58 -23
- package/src/actions/clients/getEnsoClient.ts +20 -9
- package/src/actions/dex/aggregators/enso/enso.ts +27 -17
- package/src/actions/dex/aggregators/enso/ensoErc4626.ts +2 -2
- package/src/actions/dex/aggregators/kyberswap.ts +18 -23
- package/src/actions/enso/__tests__/getEnsoUserTokensWithBalances.debug.test.ts +3 -6
- package/src/actions/exports.ts +4 -9
- package/src/actions/governance/exports.ts +9 -0
- package/src/actions/governance/getAllProposals.ts +10 -65
- package/src/actions/governance/getProposalDetails.ts +6 -33
- package/src/actions/governance/getProposalVotes.ts +8 -15
- package/src/actions/honey/getChartData.ts +27 -21
- package/src/actions/honey/getHoney24hVolume.ts +19 -22
- package/src/actions/pol/getAutoclaimedIncentives.ts +30 -0
- package/src/actions/pol/getBeraTokenTotalSupply.ts +45 -0
- package/src/actions/pol/getBgtIncentiveDistributorPaused.ts +35 -0
- package/src/actions/pol/getEarnedStakedBeraVault.ts +7 -11
- package/src/actions/pol/getGlobalData.ts +1 -0
- package/src/actions/pol/getHeroEarnVaults.ts +62 -0
- package/src/actions/pol/getIncentiveFeeClaimStats.ts +19 -38
- package/src/actions/pol/getSWBeraVaultMetadata.ts +1 -1
- package/src/actions/pol/getStakingDailyAssets.ts +7 -10
- package/src/actions/server/exports.ts +1 -0
- package/src/actions/server/getDailyValidatorBlockStats.ts +33 -0
- package/src/actions/tokens/getWalletBalances.integration.test.ts +3 -6
- package/src/actions/transactions/beraWriteContract.integration.test.ts +3 -6
- package/src/actions/validators/getDailyValidatorBlockStats.ts +25 -24
- package/src/actions/validators/getValidatorAnalytics.ts +20 -21
- package/src/actions/validators/getValidatorIncentiveDistribution.ts +33 -0
- package/src/enum/contracts.ts +1 -0
- package/src/enum/exports.ts +0 -1
- package/src/enum/governance/exports.ts +1 -0
- package/src/errors/BeraError.ts +47 -7
- package/src/errors/BeraTracing.unit.test.ts +65 -0
- package/src/errors/RequestError.ts +13 -1
- package/src/errors/exports.ts +5 -0
- package/src/errors/getRevertReason.integration.test.ts +3 -3
- package/src/errors/spanStatus.ts +78 -0
- package/src/errors/spanStatus.unit.test.ts +62 -0
- package/src/hooks/dex/useCreatePool.ts +1 -88
- package/src/hooks/dex/useOnChainPoolData.ts +27 -2
- package/src/hooks/dex/usePriceImpact.ts +12 -5
- package/src/hooks/enso/useBendDemultiply.ts +9 -1
- package/src/hooks/enso/useBendMultiply.ts +9 -1
- package/src/hooks/enso/useBendZapSupply.ts +26 -7
- package/src/hooks/enso/useEnsoSwapBundle.ts +17 -3
- package/src/hooks/enso/useEnsoUserTokensWithBalances.ts +13 -2
- package/src/hooks/exports.ts +2 -15
- package/src/hooks/governance/exports.ts +14 -0
- package/src/hooks/pol/useAutoclaimedIncentives.ts +49 -0
- package/src/hooks/pol/useStakedAPR.ts +2 -2
- package/src/hooks/pol/useStakedSnapshots.ts +5 -9
- package/src/hooks/validators/useValidator.ts +2 -0
- package/src/hooks/validators/useValidatorIncentiveDistribution.ts +39 -0
- package/src/types/bribe-boost.d.ts +8 -0
- package/src/types/exports.ts +0 -1
- package/src/types/governance/exports.ts +1 -0
- package/src/utils/beraFetch.ts +9 -3
- package/src/utils/exports.ts +1 -0
- package/src/utils/getServerSideClient.ts +4 -2
- package/src/utils/sanitizeRpcUrl.ts +22 -0
- package/src/utils/tracedTransport.ts +35 -0
- package/dist/BeraError-_mQdkanr.d.ts +0 -94
- package/dist/BexStatusProvider-DRymVlQf.d.cts +0 -70
- package/dist/HoneyConfigProvider-DfkjmzEf.d.cts +0 -390
- package/dist/RequestError-DSUzJ1Iy.d.cts +0 -144
- package/dist/abi/exports.cjs +0 -2
- package/dist/abi/exports.cjs.map +0 -1
- package/dist/abi/exports.d.cts +0 -6574
- package/dist/abi/exports.mjs.map +0 -1
- package/dist/actions/exports.cjs +0 -2
- package/dist/actions/exports.cjs.map +0 -1
- package/dist/actions/exports.d.cts +0 -1650
- package/dist/actions/exports.mjs.map +0 -1
- package/dist/chunk-45HIEVNI.cjs +0 -4
- package/dist/chunk-45HIEVNI.cjs.map +0 -1
- package/dist/chunk-47ILYVHC.mjs +0 -2
- package/dist/chunk-47ILYVHC.mjs.map +0 -1
- package/dist/chunk-575OK77P.mjs +0 -2
- package/dist/chunk-575OK77P.mjs.map +0 -1
- package/dist/chunk-5NVZG5N6.mjs +0 -2
- package/dist/chunk-5NVZG5N6.mjs.map +0 -1
- package/dist/chunk-6DIA6PXV.cjs +0 -2
- package/dist/chunk-6DIA6PXV.cjs.map +0 -1
- package/dist/chunk-6JJIZCVY.cjs +0 -2
- package/dist/chunk-6JJIZCVY.cjs.map +0 -1
- package/dist/chunk-7F72ZH4Q.mjs +0 -2
- package/dist/chunk-7F72ZH4Q.mjs.map +0 -1
- package/dist/chunk-AUA42YIG.mjs +0 -4
- package/dist/chunk-AUA42YIG.mjs.map +0 -1
- package/dist/chunk-BC2WX6O6.cjs +0 -2
- package/dist/chunk-BC2WX6O6.cjs.map +0 -1
- package/dist/chunk-CJOZC5Z2.cjs +0 -2
- package/dist/chunk-CJOZC5Z2.cjs.map +0 -1
- package/dist/chunk-D6L7LTA2.cjs +0 -2
- package/dist/chunk-D6L7LTA2.cjs.map +0 -1
- package/dist/chunk-DDEQFR3M.cjs +0 -2
- package/dist/chunk-DDEQFR3M.cjs.map +0 -1
- package/dist/chunk-GXV2JA36.mjs +0 -2
- package/dist/chunk-GXV2JA36.mjs.map +0 -1
- package/dist/chunk-ISYNEDET.mjs +0 -2
- package/dist/chunk-ISYNEDET.mjs.map +0 -1
- package/dist/chunk-JDDRTHFG.mjs +0 -2
- package/dist/chunk-JDDRTHFG.mjs.map +0 -1
- package/dist/chunk-JDZGYU5T.mjs +0 -2
- package/dist/chunk-JDZGYU5T.mjs.map +0 -1
- package/dist/chunk-LVOXBZMA.cjs +0 -2
- package/dist/chunk-LVOXBZMA.cjs.map +0 -1
- package/dist/chunk-MK5NS5B5.mjs +0 -2
- package/dist/chunk-MK5NS5B5.mjs.map +0 -1
- package/dist/chunk-NAXAZJJY.mjs +0 -2
- package/dist/chunk-NAXAZJJY.mjs.map +0 -1
- package/dist/chunk-NLVWRMGD.mjs +0 -2
- package/dist/chunk-NLVWRMGD.mjs.map +0 -1
- package/dist/chunk-OGBD5YOG.mjs +0 -2
- package/dist/chunk-OGBD5YOG.mjs.map +0 -1
- package/dist/chunk-OGJMSGB2.mjs +0 -2
- package/dist/chunk-OGJMSGB2.mjs.map +0 -1
- package/dist/chunk-OIYXOKTT.cjs +0 -2
- package/dist/chunk-OIYXOKTT.cjs.map +0 -1
- package/dist/chunk-OUD27MU7.cjs +0 -2
- package/dist/chunk-OUD27MU7.cjs.map +0 -1
- package/dist/chunk-PRLVZIKD.mjs +0 -2
- package/dist/chunk-PRLVZIKD.mjs.map +0 -1
- package/dist/chunk-Q2SNRLW3.cjs +0 -2
- package/dist/chunk-Q2SNRLW3.cjs.map +0 -1
- package/dist/chunk-REWME3FY.cjs +0 -2
- package/dist/chunk-REWME3FY.cjs.map +0 -1
- package/dist/chunk-RJN36GBU.mjs +0 -2
- package/dist/chunk-RJN36GBU.mjs.map +0 -1
- package/dist/chunk-RWOICHRW.cjs +0 -2
- package/dist/chunk-RWOICHRW.cjs.map +0 -1
- package/dist/chunk-S4CDSVLK.cjs +0 -2
- package/dist/chunk-S4CDSVLK.cjs.map +0 -1
- package/dist/chunk-SFEULGSX.cjs +0 -2
- package/dist/chunk-SFEULGSX.cjs.map +0 -1
- package/dist/chunk-WBTS6KFG.mjs +0 -2
- package/dist/chunk-WBTS6KFG.mjs.map +0 -1
- package/dist/chunk-WRFDB3QJ.cjs +0 -2
- package/dist/chunk-WRFDB3QJ.cjs.map +0 -1
- package/dist/chunk-XNJLSA6P.cjs +0 -2
- package/dist/chunk-XNJLSA6P.cjs.map +0 -1
- package/dist/contexts/exports.cjs +0 -2
- package/dist/contexts/exports.cjs.map +0 -1
- package/dist/contexts/exports.d.cts +0 -66
- package/dist/contexts/exports.mjs.map +0 -1
- package/dist/defaultFlags-D6KfkTZx.d.cts +0 -10
- package/dist/dex-C_BB0b0O.d.cts +0 -37
- package/dist/enum/exports.cjs +0 -2
- package/dist/enum/exports.cjs.map +0 -1
- package/dist/enum/exports.d.cts +0 -23
- package/dist/enum/exports.mjs.map +0 -1
- package/dist/errors/exports.cjs +0 -2
- package/dist/errors/exports.cjs.map +0 -1
- package/dist/errors/exports.d.cts +0 -327
- package/dist/errors/exports.mjs.map +0 -1
- package/dist/getValidatorQueuedOperatorAddress-Cql_D50j.d.cts +0 -562
- package/dist/global.d-B7IeayVX.d.cts +0 -474
- package/dist/honey-CYm0RWf4.d.cts +0 -14
- package/dist/hooks/exports.cjs +0 -4
- package/dist/hooks/exports.cjs.map +0 -1
- package/dist/hooks/exports.d.cts +0 -1734
- package/dist/hooks/exports.mjs.map +0 -1
- package/dist/polling-BKnyavLI.d.cts +0 -8
- package/dist/txnEnum-7_o92X3N.d.ts +0 -164
- package/dist/types/exports.cjs +0 -1
- package/dist/types/exports.cjs.map +0 -1
- package/dist/types/exports.d.cts +0 -90
- package/dist/types/exports.mjs.map +0 -1
- package/dist/useHoneySwapState-D6vpv19r.d.cts +0 -32
- package/dist/utils/exports.cjs +0 -2
- package/dist/utils/exports.cjs.map +0 -1
- package/dist/utils/exports.d.cts +0 -420
- package/dist/utils/exports.mjs.map +0 -1
- package/src/actions/dex/getIsTokenExploited.ts +0 -63
- package/src/hooks/dex/useExploitedTokens.ts +0 -57
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { AbiParameter, Address, PublicClient, AbiFunction, TransactionReceipt } from 'viem';
|
|
2
|
+
import { ProposalErrorCodes, ProposalState } from '../../enum/governance/exports.js';
|
|
3
|
+
import { ProposalStatus, ProposalSelectionFragment, Proposal_Filter, Proposal_OrderBy, OrderDirection, ProposalWithVotesFragment, GetProposalVotesQueryVariables, GetProposalVotesQuery } from '@berachain/graphql/governance';
|
|
4
|
+
import { CustomProposal, GovernanceTopic, CustomProposalErrors } from '../../types/governance/exports.js';
|
|
5
|
+
import graymatter from 'gray-matter';
|
|
6
|
+
|
|
7
|
+
type CheckProposalFieldResultMinimal = ProposalErrorCodes | null;
|
|
8
|
+
type CheckProposalFieldResult = ProposalErrorCodes | null | CheckProposalFieldResultMinimal[] | Record<string, CheckProposalFieldResultMinimal>;
|
|
9
|
+
/**
|
|
10
|
+
* Validates a single proposal field or ABI-typed value.
|
|
11
|
+
* Returns `null` if valid, or a `ProposalErrorCodes` value describing the problem.
|
|
12
|
+
*/
|
|
13
|
+
declare function checkProposalField(arg: {
|
|
14
|
+
fieldOrType: "address" | "hex" | "abi" | "string" | "bool" | `uint${string}` | `int${string}` | "action" | "title" | "forumLink" | "description" | "logoURI" | "url";
|
|
15
|
+
value: unknown;
|
|
16
|
+
required?: boolean;
|
|
17
|
+
baseUrl?: string;
|
|
18
|
+
components?: readonly (AbiParameter | readonly AbiParameter[])[];
|
|
19
|
+
}): CheckProposalFieldResultMinimal;
|
|
20
|
+
/**
|
|
21
|
+
* For tuple/tuple[] types, may return nested error structures.
|
|
22
|
+
*/
|
|
23
|
+
declare function checkProposalField(arg: {
|
|
24
|
+
fieldOrType: "tuple[]" | "tuple";
|
|
25
|
+
value: unknown;
|
|
26
|
+
required?: boolean;
|
|
27
|
+
baseUrl?: string;
|
|
28
|
+
components?: readonly (AbiParameter | readonly AbiParameter[])[];
|
|
29
|
+
}): CheckProposalFieldResult;
|
|
30
|
+
|
|
31
|
+
declare const MOCKED_PROPOSAL_STATUSES: readonly ProposalStatus[];
|
|
32
|
+
/**
|
|
33
|
+
* Derives the effective `ProposalStatus` by reconciling subgraph data with the
|
|
34
|
+
* on-chain contract state. Falls back to subgraph timestamps when the on-chain
|
|
35
|
+
* state is unavailable.
|
|
36
|
+
*/
|
|
37
|
+
declare function computeActualStatus(
|
|
38
|
+
/** Subgraph proposal data */
|
|
39
|
+
proposal: ProposalSelectionFragment,
|
|
40
|
+
/** Value returned by the `state` function of the governance contract */
|
|
41
|
+
proposalOnChainState?: ProposalState): ProposalStatus;
|
|
42
|
+
|
|
43
|
+
type GetAllProposalsArgs = BeraJS.BaseFunctionArgs & {
|
|
44
|
+
/** Subgraph filter applied to the proposals query */
|
|
45
|
+
where: Proposal_Filter;
|
|
46
|
+
/** Number of proposals to skip (for pagination) */
|
|
47
|
+
offset?: number;
|
|
48
|
+
/** Maximum proposals per page; must be ≤ 1000 */
|
|
49
|
+
perPage?: number;
|
|
50
|
+
orderBy?: Proposal_OrderBy;
|
|
51
|
+
orderDirection?: OrderDirection;
|
|
52
|
+
/** Full-text search query; switches to the search endpoint when provided */
|
|
53
|
+
text?: string;
|
|
54
|
+
};
|
|
55
|
+
/** Fetches a paginated list of governance proposals from the subgraph */
|
|
56
|
+
declare function getAllProposals(_args: GetAllProposalsArgs): Promise<ProposalSelectionFragment[] | undefined>;
|
|
57
|
+
|
|
58
|
+
interface GetBodyErrorsArgs {
|
|
59
|
+
/** The proposal to validate */
|
|
60
|
+
proposal: CustomProposal;
|
|
61
|
+
/** The current governance topic, used for forum link base URL validation */
|
|
62
|
+
currentTopic: GovernanceTopic;
|
|
63
|
+
}
|
|
64
|
+
/** Validates the body fields (title, description, forum link) of a proposal */
|
|
65
|
+
declare function getBodyErrors({ proposal, currentTopic, }: GetBodyErrorsArgs): CustomProposalErrors;
|
|
66
|
+
|
|
67
|
+
interface GetDecodedFunctionDataArgs {
|
|
68
|
+
/** Contract address that emitted the calldata */
|
|
69
|
+
address: Address;
|
|
70
|
+
/** Raw calldata to decode */
|
|
71
|
+
callData: `0x${string}`;
|
|
72
|
+
/** @default defaultChainId */
|
|
73
|
+
chainId?: number;
|
|
74
|
+
publicClient: PublicClient;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Decodes the function data from a given contract address and calldata.
|
|
78
|
+
*
|
|
79
|
+
* Attempts to decode using a known set of ABIs first, then falls back to
|
|
80
|
+
* fetching the ABI from the block-explorer API.
|
|
81
|
+
*
|
|
82
|
+
* @returns An object with the decoded ABI item, function signature, function name, and arguments.
|
|
83
|
+
*/
|
|
84
|
+
declare function getDecodedFunctionData({ address, callData, chainId, publicClient, }: GetDecodedFunctionDataArgs): Promise<{
|
|
85
|
+
args: never[];
|
|
86
|
+
abiItem?: undefined;
|
|
87
|
+
functionSignature?: undefined;
|
|
88
|
+
functionName?: undefined;
|
|
89
|
+
} | {
|
|
90
|
+
abiItem: AbiFunction | undefined;
|
|
91
|
+
functionSignature: string | undefined;
|
|
92
|
+
functionName: string;
|
|
93
|
+
args: unknown[];
|
|
94
|
+
}>;
|
|
95
|
+
|
|
96
|
+
type GetProposalDetailsArgs = BeraJS.BaseFunctionArgs & {
|
|
97
|
+
/** On-chain proposal ID */
|
|
98
|
+
proposalId: string;
|
|
99
|
+
client?: PublicClient;
|
|
100
|
+
};
|
|
101
|
+
/** Fetches a single proposal with its vote data from the subgraph */
|
|
102
|
+
declare function getProposalDetails(_args: GetProposalDetailsArgs): Promise<ProposalWithVotesFragment | undefined>;
|
|
103
|
+
|
|
104
|
+
type GetProposalFromTxArgs = {
|
|
105
|
+
/** Viem public client used to fetch block and receipt data */
|
|
106
|
+
publicClient: PublicClient | undefined;
|
|
107
|
+
} & ({
|
|
108
|
+
/** Pre-fetched transaction receipt */
|
|
109
|
+
tx: TransactionReceipt;
|
|
110
|
+
} | {
|
|
111
|
+
/** Transaction hash to look up */
|
|
112
|
+
txHash: Address;
|
|
113
|
+
});
|
|
114
|
+
/**
|
|
115
|
+
* Reconstructs a `ProposalWithVotesFragment` from the `ProposalCreated` event
|
|
116
|
+
* emitted in a given transaction. Returns `null` if the event is not found.
|
|
117
|
+
*/
|
|
118
|
+
declare function getProposalFromTx(args: GetProposalFromTxArgs): Promise<ProposalWithVotesFragment | null>;
|
|
119
|
+
|
|
120
|
+
type GetProposalVotesArgs = BeraJS.BaseFunctionArgs & {
|
|
121
|
+
/** GraphQL variables forwarded to the GetProposalVotes query */
|
|
122
|
+
variables: GetProposalVotesQueryVariables;
|
|
123
|
+
};
|
|
124
|
+
/** Fetches the votes for a proposal from the subgraph */
|
|
125
|
+
declare function getProposalVotes(_args: GetProposalVotesArgs): Promise<{
|
|
126
|
+
data: GetProposalVotesQuery;
|
|
127
|
+
}>;
|
|
128
|
+
|
|
129
|
+
type ParseProposalBodyResult = graymatter.GrayMatterFile<string> & {
|
|
130
|
+
/** Whether the body uses YAML front-matter (true) or legacy heading format (false) */
|
|
131
|
+
isFrontMatter: boolean;
|
|
132
|
+
};
|
|
133
|
+
/**
|
|
134
|
+
* Parses the body of a governance proposal into structured front-matter and content.
|
|
135
|
+
* Supports YAML front-matter format and a legacy heading-based format.
|
|
136
|
+
* Falls back to raw description on parse failure.
|
|
137
|
+
*/
|
|
138
|
+
declare function parseProposalBody(proposal?: Pick<ProposalSelectionFragment, "description">): ParseProposalBodyResult;
|
|
139
|
+
|
|
140
|
+
export { type GetAllProposalsArgs, type GetBodyErrorsArgs, type GetDecodedFunctionDataArgs, type GetProposalDetailsArgs, type GetProposalFromTxArgs, type GetProposalVotesArgs, MOCKED_PROPOSAL_STATUSES, type ParseProposalBodyResult, checkProposalField, computeActualStatus, getAllProposals, getBodyErrors, getDecodedFunctionData, getProposalDetails, getProposalFromTx, getProposalVotes, parseProposalBody };
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import {
|
|
2
|
+
checkProposalField,
|
|
3
|
+
getAllProposals,
|
|
4
|
+
getBodyErrors,
|
|
5
|
+
getProposalDetails,
|
|
6
|
+
getProposalFromTx,
|
|
7
|
+
getProposalVotes,
|
|
8
|
+
parseProposalBody
|
|
9
|
+
} from "../../chunk-AFN4CVD3.mjs";
|
|
10
|
+
import "../../chunk-DKMAIU74.mjs";
|
|
11
|
+
import "../../chunk-KQUMKB66.mjs";
|
|
12
|
+
import "../../chunk-J5I45WGQ.mjs";
|
|
13
|
+
|
|
14
|
+
// src/actions/governance/computeActualStatus.ts
|
|
15
|
+
import {
|
|
16
|
+
ProposalStatus
|
|
17
|
+
} from "@berachain/graphql/governance";
|
|
18
|
+
var GOVERNANCE_ACCELERATE_PROPOSAL = false;
|
|
19
|
+
var MOCKED_PROPOSAL_STATUSES = [
|
|
20
|
+
ProposalStatus.Active,
|
|
21
|
+
ProposalStatus.PendingQueue,
|
|
22
|
+
ProposalStatus.PendingExecution,
|
|
23
|
+
ProposalStatus.Defeated,
|
|
24
|
+
ProposalStatus.QuorumNotReached
|
|
25
|
+
];
|
|
26
|
+
function computeActualStatus(proposal, proposalOnChainState) {
|
|
27
|
+
const timestampInSeconds = Date.now() / 1e3;
|
|
28
|
+
if (proposalOnChainState !== void 0) {
|
|
29
|
+
if (proposal.status === ProposalStatus.CanceledByGuardian) {
|
|
30
|
+
return ProposalStatus.CanceledByGuardian;
|
|
31
|
+
}
|
|
32
|
+
if (proposalOnChainState === 2 /* Canceled */) {
|
|
33
|
+
if (Number(proposal.voteStartAt) < timestampInSeconds)
|
|
34
|
+
return ProposalStatus.CanceledByUser;
|
|
35
|
+
return ProposalStatus.CanceledByGuardian;
|
|
36
|
+
}
|
|
37
|
+
if (proposalOnChainState === 3 /* Defeated */) {
|
|
38
|
+
if (!proposal.pollResult) {
|
|
39
|
+
return ProposalStatus.QuorumNotReached;
|
|
40
|
+
}
|
|
41
|
+
if (
|
|
42
|
+
// Quorum might be null if no votes were cast.
|
|
43
|
+
!proposal.quorum || BigInt(proposal.quorum) > BigInt(proposal.pollResult.totalTowardsQuorum)
|
|
44
|
+
) {
|
|
45
|
+
return ProposalStatus.QuorumNotReached;
|
|
46
|
+
}
|
|
47
|
+
return ProposalStatus.Defeated;
|
|
48
|
+
}
|
|
49
|
+
if (proposalOnChainState === 4 /* Succeeded */) {
|
|
50
|
+
return ProposalStatus.PendingQueue;
|
|
51
|
+
}
|
|
52
|
+
if (proposalOnChainState === 5 /* Queued */) {
|
|
53
|
+
if (Number(proposal.queueEnd) < Date.now() / 1e3) {
|
|
54
|
+
return ProposalStatus.PendingExecution;
|
|
55
|
+
}
|
|
56
|
+
return ProposalStatus.InQueue;
|
|
57
|
+
}
|
|
58
|
+
if (proposalOnChainState === 6 /* Expired */) {
|
|
59
|
+
console.warn("Unexpected expired state on proposal id: ", proposal.id);
|
|
60
|
+
return ProposalStatus.Defeated;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (proposal.status === ProposalStatus.InQueue) {
|
|
64
|
+
if (Number(proposal.queueEnd) < Date.now() / 1e3) {
|
|
65
|
+
return ProposalStatus.PendingExecution;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (GOVERNANCE_ACCELERATE_PROPOSAL && proposalOnChainState === 1 /* Active */ && proposal.quorum && BigInt(proposal.quorum) < BigInt(proposal.pollResult.totalTowardsQuorum) && Number(proposal.pollResult.forPercentage) > Number(proposal.pollResult.againstPercentage)) {
|
|
69
|
+
return ProposalStatus.PendingQueue;
|
|
70
|
+
}
|
|
71
|
+
if (proposal.status === ProposalStatus.Pending) {
|
|
72
|
+
if (Number(proposal.voteStartAt) < timestampInSeconds && Number(proposal.voteEndAt) > timestampInSeconds) {
|
|
73
|
+
return ProposalStatus.Active;
|
|
74
|
+
}
|
|
75
|
+
if (Number(proposal.voteEndAt) < timestampInSeconds) {
|
|
76
|
+
if (!proposal.pollResult) {
|
|
77
|
+
return ProposalStatus.QuorumNotReached;
|
|
78
|
+
}
|
|
79
|
+
if (!proposal.quorum || BigInt(proposal.quorum) > BigInt(proposal.pollResult.totalTowardsQuorum)) {
|
|
80
|
+
return ProposalStatus.QuorumNotReached;
|
|
81
|
+
}
|
|
82
|
+
if (proposal.pollResult?.against > proposal.pollResult?.for) {
|
|
83
|
+
return ProposalStatus.Defeated;
|
|
84
|
+
}
|
|
85
|
+
return ProposalStatus.PendingQueue;
|
|
86
|
+
}
|
|
87
|
+
return ProposalStatus.Pending;
|
|
88
|
+
}
|
|
89
|
+
if (proposal.status === ProposalStatus.Active && Number(proposal.voteEndAt) < timestampInSeconds) {
|
|
90
|
+
if (!proposal.quorum || BigInt(proposal.quorum) > BigInt(proposal.pollResult.totalTowardsQuorum)) {
|
|
91
|
+
return ProposalStatus.QuorumNotReached;
|
|
92
|
+
}
|
|
93
|
+
if (BigInt(proposal.pollResult?.against ?? 0n) > BigInt(proposal.pollResult?.for ?? 0n)) {
|
|
94
|
+
return ProposalStatus.Defeated;
|
|
95
|
+
}
|
|
96
|
+
return ProposalStatus.PendingQueue;
|
|
97
|
+
}
|
|
98
|
+
if (proposal.status === ProposalStatus.InQueue) {
|
|
99
|
+
if (Number(proposal.queueEnd) < Date.now() / 1e3) {
|
|
100
|
+
return ProposalStatus.PendingExecution;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return proposal.status;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// src/actions/governance/getDecodedFunctionData.ts
|
|
107
|
+
import {
|
|
108
|
+
decodeFunctionData,
|
|
109
|
+
erc20Abi,
|
|
110
|
+
pad,
|
|
111
|
+
toFunctionSignature,
|
|
112
|
+
trim
|
|
113
|
+
} from "viem";
|
|
114
|
+
import { appConfig, defaultChainId } from "@berachain/config/internal";
|
|
115
|
+
import { beraChefAbi } from "@berachain/abis/pol/rewards/beraChef";
|
|
116
|
+
import { rewardVaultAbi } from "@berachain/abis/pol/rewards/rewardVault";
|
|
117
|
+
function isProxyABI(abi) {
|
|
118
|
+
return abi.some((item) => {
|
|
119
|
+
const i = item;
|
|
120
|
+
return i.name === "implementation" || i.name === "proxyType" || i.type === "constructor" && i.inputs?.[0]?.name === "implementation";
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
async function _getAbi({
|
|
124
|
+
contractAddress,
|
|
125
|
+
chainId,
|
|
126
|
+
publicClient
|
|
127
|
+
}) {
|
|
128
|
+
const url = `https://api.etherscan.io/v2/api?module=contract&action=getabi&address=${contractAddress}&apikey=${appConfig.apiKeys.private.etherscan}&chainId=${chainId}`;
|
|
129
|
+
const response = await fetch(url);
|
|
130
|
+
if (!response.ok) {
|
|
131
|
+
throw new Error(`Failed to fetch ABI: ${response.statusText}`);
|
|
132
|
+
}
|
|
133
|
+
const data = await response.json();
|
|
134
|
+
if (data.status === "0") throw new Error(data.result);
|
|
135
|
+
const abi = JSON.parse(data.result);
|
|
136
|
+
if (!isProxyABI(abi)) return abi;
|
|
137
|
+
const implementationResult = await publicClient.getStorageAt({
|
|
138
|
+
address: contractAddress,
|
|
139
|
+
// bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)).
|
|
140
|
+
slot: "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"
|
|
141
|
+
});
|
|
142
|
+
if (!implementationResult || trim(implementationResult) === "0x00")
|
|
143
|
+
return abi;
|
|
144
|
+
const implementationAddress = pad(trim(implementationResult), { size: 20 });
|
|
145
|
+
return _getAbi({
|
|
146
|
+
contractAddress: implementationAddress,
|
|
147
|
+
chainId,
|
|
148
|
+
publicClient
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
async function _getAbiForCallData({
|
|
152
|
+
address,
|
|
153
|
+
callData,
|
|
154
|
+
knownAbi,
|
|
155
|
+
chainId,
|
|
156
|
+
publicClient
|
|
157
|
+
}) {
|
|
158
|
+
try {
|
|
159
|
+
if (decodeFunctionData({ data: callData, abi: knownAbi })) {
|
|
160
|
+
return knownAbi;
|
|
161
|
+
}
|
|
162
|
+
} catch {
|
|
163
|
+
}
|
|
164
|
+
return _getAbi({ contractAddress: address, chainId, publicClient }).catch(
|
|
165
|
+
() => void 0
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
function _decodeCallData(callData, abi) {
|
|
169
|
+
try {
|
|
170
|
+
return decodeFunctionData({ data: callData, abi });
|
|
171
|
+
} catch {
|
|
172
|
+
return void 0;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
function _findAbiItem(abi, functionName) {
|
|
176
|
+
return abi.find(
|
|
177
|
+
(a) => a.type === "function" && a.name === functionName
|
|
178
|
+
);
|
|
179
|
+
}
|
|
180
|
+
function _getFunctionSignature(abiItem) {
|
|
181
|
+
if (!abiItem) return;
|
|
182
|
+
try {
|
|
183
|
+
return toFunctionSignature(abiItem);
|
|
184
|
+
} catch (error) {
|
|
185
|
+
console.error(error);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
async function getDecodedFunctionData({
|
|
189
|
+
address,
|
|
190
|
+
callData,
|
|
191
|
+
chainId = defaultChainId,
|
|
192
|
+
publicClient
|
|
193
|
+
}) {
|
|
194
|
+
const knownAbi = [...beraChefAbi, ...rewardVaultAbi, ...erc20Abi];
|
|
195
|
+
const abi = await _getAbiForCallData({
|
|
196
|
+
address,
|
|
197
|
+
callData,
|
|
198
|
+
knownAbi,
|
|
199
|
+
chainId,
|
|
200
|
+
publicClient
|
|
201
|
+
});
|
|
202
|
+
const decodedData = _decodeCallData(callData, abi);
|
|
203
|
+
if (!abi || !decodedData) {
|
|
204
|
+
return { args: [] };
|
|
205
|
+
}
|
|
206
|
+
const abiItem = _findAbiItem(abi, decodedData.functionName);
|
|
207
|
+
const functionSignature = _getFunctionSignature(abiItem);
|
|
208
|
+
return {
|
|
209
|
+
abiItem,
|
|
210
|
+
functionSignature,
|
|
211
|
+
functionName: decodedData.functionName,
|
|
212
|
+
args: decodedData.args
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
export {
|
|
216
|
+
MOCKED_PROPOSAL_STATUSES,
|
|
217
|
+
checkProposalField,
|
|
218
|
+
computeActualStatus,
|
|
219
|
+
getAllProposals,
|
|
220
|
+
getBodyErrors,
|
|
221
|
+
getDecodedFunctionData,
|
|
222
|
+
getProposalDetails,
|
|
223
|
+
getProposalFromTx,
|
|
224
|
+
getProposalVotes,
|
|
225
|
+
parseProposalBody
|
|
226
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Address } from 'viem';
|
|
2
|
+
import { GetValidatorBlockStatsQuery } from '@berachain/graphql/pol/subgraph';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Server-only RSC variant. Goes directly to the pol subgraph upstream
|
|
6
|
+
* (no auth required) through the shared Apollo client factory.
|
|
7
|
+
*/
|
|
8
|
+
declare function getDailyValidatorBlockStats({ pubKey, first, ...args }: BeraJS.BaseFunctionArgs & {
|
|
9
|
+
pubKey: Address;
|
|
10
|
+
first?: number;
|
|
11
|
+
}): Promise<GetValidatorBlockStatsQuery | undefined>;
|
|
12
|
+
|
|
13
|
+
export { getDailyValidatorBlockStats };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getApolloClient
|
|
3
|
+
} from "../../chunk-4Z4AK6SH.mjs";
|
|
4
|
+
import "../../chunk-75M6TF7M.mjs";
|
|
5
|
+
import "../../chunk-SZ5C44L5.mjs";
|
|
6
|
+
import "../../chunk-XIYN6AL6.mjs";
|
|
7
|
+
import "../../chunk-J5I45WGQ.mjs";
|
|
8
|
+
|
|
9
|
+
// src/actions/server/getDailyValidatorBlockStats.ts
|
|
10
|
+
import {
|
|
11
|
+
GetValidatorBlockStats
|
|
12
|
+
} from "@berachain/graphql/pol/subgraph";
|
|
13
|
+
async function getDailyValidatorBlockStats({
|
|
14
|
+
pubKey,
|
|
15
|
+
first = 1,
|
|
16
|
+
...args
|
|
17
|
+
}) {
|
|
18
|
+
const client = getApolloClient("pol.subgraph", args);
|
|
19
|
+
const result = await client.query({
|
|
20
|
+
query: GetValidatorBlockStats,
|
|
21
|
+
variables: { pubKey, first }
|
|
22
|
+
});
|
|
23
|
+
return result.data;
|
|
24
|
+
}
|
|
25
|
+
export {
|
|
26
|
+
getDailyValidatorBlockStats
|
|
27
|
+
};
|