+
+
votes
@@ -115,7 +128,16 @@ export default function ProposalDetails({
className="sm:w-52"
/>
-
+
quorum
@@ -148,7 +170,7 @@ export default function ProposalDetails({
@@ -164,16 +186,21 @@ export default function ProposalDetails({
-
-
-
-
-
+ {[StatusEnum.PENDING, StatusEnum.CANCELED_BY_USER].includes(
+ proposal.status as StatusEnum,
+ ) && (
+ <>
+
+
+
+
+ >
+ )}
>
)}
diff --git a/apps/hub/src/app/governance/proposal/[proposalId]/components/proposal-timeline.tsx b/apps/hub/src/app/governance/proposal/[proposalId]/components/proposal-timeline.tsx
index 4bc2091c0..8b97324d1 100644
--- a/apps/hub/src/app/governance/proposal/[proposalId]/components/proposal-timeline.tsx
+++ b/apps/hub/src/app/governance/proposal/[proposalId]/components/proposal-timeline.tsx
@@ -1,5 +1,7 @@
+import { Proposal } from "@bera/berajs";
+import { ProposalStatus } from "@bera/proto/ts-proto-gen/cosmos-ts/cosmos/gov/v1/gov";
import { cn } from "@bera/ui";
-import { useBlockNumber } from "wagmi";
+import { StatusEnum } from "~/app/governance/types";
const dateFormatter = new Intl.DateTimeFormat("en-US", {
year: "numeric",
@@ -35,27 +37,82 @@ const Step = ({
);
};
-export const ProposalTimeline = () => {
- const activeStep: number = 0;
- const now = Date.now();
+export const ProposalTimeline = ({ proposal }: { proposal: Proposal }) => {
+ const steps = [
+ {
+ title: "Initiated",
+ date: new Date(proposal.createdAt),
+ isActive: proposal.status === StatusEnum.PENDING,
+ },
+ ];
+
+ if (proposal.status === StatusEnum.CANCELED_BY_USER) {
+ steps.push({
+ title: "Canceled by proposer",
+ date: new Date(proposal.createdAt),
+ isActive: true,
+ });
+ } else {
+ steps.push({
+ title: "Voting Period Begins",
+ date: new Date(proposal.start.timestamp),
+ isActive: proposal.status === StatusEnum.ACTIVE,
+ });
+ }
+
+ if (proposal.status === StatusEnum.ACTIVE) {
+ steps.push({
+ title: "Voting Period Ends",
+ date: new Date(proposal.start.timestamp),
+ isActive: false,
+ });
+ } else if (proposal.status === StatusEnum.DEFEATED) {
+ steps.push({
+ title: "Proposal Defeated",
+ date: new Date(0),
+ isActive: true,
+ });
+ } else {
+ steps.push({
+ title: "Proposal Passed",
+ date: new Date(0),
+ isActive: proposal.status === StatusEnum.PENDING_QUEUE,
+ });
+
+ if (proposal.status !== StatusEnum.PENDING_QUEUE) {
+ steps.push({
+ title: "Proposal Queued",
+ date: new Date(0),
+ isActive: proposal.status === StatusEnum.PENDING_EXECUTION,
+ });
+
+ if (proposal.status === StatusEnum.CANCELED_BY_GUARDIAN) {
+ steps.push({
+ title: "Canceled by guardian",
+ date: new Date(0),
+ isActive: true,
+ });
+ } else if (proposal.status === StatusEnum.EXECUTED) {
+ steps.push({
+ title: "Proposal Executed",
+ date: new Date(0),
+ isActive: proposal.status === StatusEnum.EXECUTED,
+ });
+ } else if (proposal.status === StatusEnum.PENDING_EXECUTION) {
+ steps.push({
+ title: "Proposal Executs",
+ date: new Date(0),
+ isActive: true,
+ });
+ }
+ }
+ }
+
return (
-
-
-
-
+ {steps.map((step) => (
+
+ ))}
);
};
diff --git a/apps/hub/src/app/governance/types.ts b/apps/hub/src/app/governance/types.ts
index d5b207875..57e7b4024 100755
--- a/apps/hub/src/app/governance/types.ts
+++ b/apps/hub/src/app/governance/types.ts
@@ -5,8 +5,10 @@ import { PROPOSAL_GENRE } from "./governance-genre-helper";
export enum StatusEnum {
PENDING = "pending",
ACTIVE = "active",
+ CANCELED_BY_GUARDIAN = "canceled-by-guardian",
+ CANCELED_BY_USER = "canceled",
+ SUCCEEDED = "succeeded",
DEFEATED = "defeated",
- CANCELED = "canceled",
PENDING_QUEUE = "pending-queue",
IN_QUEUE = "in-queue",
PENDING_EXECUTION = "pending-execution",
diff --git a/apps/hub/src/app/layout.tsx b/apps/hub/src/app/layout.tsx
index 83d37787b..43e3247ce 100755
--- a/apps/hub/src/app/layout.tsx
+++ b/apps/hub/src/app/layout.tsx
@@ -25,6 +25,10 @@ const fontSans = IBM_Plex_Sans({
export const metadata: Metadata = {
metadataBase: new URL(hubUrl),
+ title: {
+ template: `%s | ${hubName}`,
+ default: hubName,
+ },
};
export default function RootLayout(props: { children: React.ReactNode }) {
@@ -57,9 +61,10 @@ export default function RootLayout(props: { children: React.ReactNode }) {
{props.children}
diff --git a/packages/berajs/package.json b/packages/berajs/package.json
index 408c03398..849ff7c8b 100755
--- a/packages/berajs/package.json
+++ b/packages/berajs/package.json
@@ -4,7 +4,6 @@
"main": "dist/index.js",
"module": "dist/index.js",
"sideEffects": false,
- "types": "dist/index.d.ts",
"type": "module",
"files": ["dist"],
"author": "deez",
diff --git a/packages/berajs/src/actions/governance/getAllProposals.ts b/packages/berajs/src/actions/governance/getAllProposals.ts
index c39a66d06..387110659 100755
--- a/packages/berajs/src/actions/governance/getAllProposals.ts
+++ b/packages/berajs/src/actions/governance/getAllProposals.ts
@@ -42,7 +42,7 @@ export const getAllProposals = async ({
const data = await response.json();
return data.data.proposals.nodes;
} catch (e) {
- console.log("getAllProposals:", e);
+ console.error("getAllProposals:", e);
return [];
}
};
diff --git a/packages/berajs/src/hooks/modules/governance/index.ts b/packages/berajs/src/hooks/modules/governance/index.ts
index 4a428edd4..19df9b13a 100644
--- a/packages/berajs/src/hooks/modules/governance/index.ts
+++ b/packages/berajs/src/hooks/modules/governance/index.ts
@@ -5,3 +5,4 @@ export * from "./usePollProposalThreshold";
export * from "./useGetPastVotes";
export * from "./useProposalSnapshot";
export * from "./useCancellerRole";
+export * from "./useProposalState";
diff --git a/packages/berajs/src/hooks/modules/governance/useGetPastVotes.ts b/packages/berajs/src/hooks/modules/governance/useGetPastVotes.ts
index 00fd88184..8fbca4994 100644
--- a/packages/berajs/src/hooks/modules/governance/useGetPastVotes.ts
+++ b/packages/berajs/src/hooks/modules/governance/useGetPastVotes.ts
@@ -58,8 +58,6 @@ export const useGetPastVotes = (
args: [wallet, BigInt(ts!)],
});
- console.log(QUERY_KEY, formatUnits(votes, 18));
-
return formatUnits(votes, 18);
});
};
diff --git a/packages/berajs/src/hooks/modules/governance/useProposalSnapshot.ts b/packages/berajs/src/hooks/modules/governance/useProposalSnapshot.ts
index 6a6d852b0..620251f0f 100644
--- a/packages/berajs/src/hooks/modules/governance/useProposalSnapshot.ts
+++ b/packages/berajs/src/hooks/modules/governance/useProposalSnapshot.ts
@@ -26,8 +26,6 @@ export const useProposalSnapshot = ({
args: [BigInt(proposalId!)],
});
- console.log(QUERY_KEY, snapshot.toString());
-
return snapshot.toString();
});
};
diff --git a/packages/berajs/src/hooks/modules/governance/useProposalState.ts b/packages/berajs/src/hooks/modules/governance/useProposalState.ts
new file mode 100644
index 000000000..ca69328bf
--- /dev/null
+++ b/packages/berajs/src/hooks/modules/governance/useProposalState.ts
@@ -0,0 +1,57 @@
+import useSWRImmutable from "swr/immutable";
+import { usePublicClient } from "wagmi";
+import { GOVERNANCE_ABI } from "../../../abi";
+import { SWRResponse } from "swr";
+import { Address } from "viem";
+
+enum ProposalState {
+ Pending = 0,
+ Active = 1,
+ Canceled = 2,
+ Defeated = 3,
+ Succeeded = 4,
+ Queued = 5,
+ Expired = 6,
+ Executed = 7,
+}
+
+const ProposalStateMap: Record = {
+ [ProposalState.Pending]: "pending",
+ [ProposalState.Active]: "active",
+ [ProposalState.Canceled]: "canceled",
+ [ProposalState.Defeated]: "defeated",
+ [ProposalState.Succeeded]: "succeeded",
+ [ProposalState.Queued]: "queued",
+ [ProposalState.Expired]: "expired",
+ [ProposalState.Executed]: "executed",
+};
+
+export const useProposalState = ({
+ proposalId,
+ governorAddress,
+}: {
+ proposalId: number | bigint | string | undefined;
+ governorAddress: Address;
+}): SWRResponse => {
+ const publicClient = usePublicClient();
+
+ const QUERY_KEY =
+ governorAddress && publicClient && proposalId
+ ? ["useProposalSnapshot", proposalId]
+ : null;
+
+ return useSWRImmutable(QUERY_KEY, async () => {
+ if (!publicClient) {
+ throw new Error("public client is not defined");
+ }
+
+ const snapshot = (await publicClient.readContract({
+ abi: GOVERNANCE_ABI,
+ address: governorAddress,
+ functionName: "state",
+ args: [BigInt(proposalId!)],
+ })) as ProposalState;
+
+ return ProposalStateMap[snapshot];
+ });
+};
diff --git a/packages/berajs/tsup.config.ts b/packages/berajs/tsup.config.ts
index a0ecc4692..eb28255e9 100755
--- a/packages/berajs/tsup.config.ts
+++ b/packages/berajs/tsup.config.ts
@@ -1,4 +1,6 @@
-const config = {
+import { defineConfig } from "tsup";
+
+const config = defineConfig({
entryPoints: [
"src/abi/index.ts",
"src/actions/index.ts",
@@ -13,11 +15,11 @@ const config = {
splitting: true,
outDir: "dist",
skipNodeModulesBundle: true,
- minify: true, // Whether to minify the output
- sourcemap: true, // Whether to generate sourcemaps
+ minify: process.env.NODE_ENV !== "development", // Whether to minify the output
+ sourcemap: process.env.NODE_ENV !== "development", // Whether to generate sourcemaps
// splitting: true, // Whether to split the bundle into chunks
dts: true, // Whether to generate TypeScript declaration files
// target: "node18", // Specify your target environment
-};
+});
export default config;
diff --git a/packages/config/env/tsup.config.ts b/packages/config/env/tsup.config.ts
index 5e9952924..903d7c023 100755
--- a/packages/config/env/tsup.config.ts
+++ b/packages/config/env/tsup.config.ts
@@ -5,8 +5,8 @@ const config = {
splitting: true,
outDir: "dist",
skipNodeModulesBundle: true,
- minify: true, // Whether to minify the output
- sourcemap: true, // Whether to generate sourcemaps
+ minify: process.env.NODE_ENV !== "development", // Whether to minify the output
+ sourcemap: process.env.NODE_ENV !== "development", // Whether to generate sourcemaps
// splitting: true, // Whether to split the bundle into chunks
dts: true, // Whether to generate TypeScript declaration files
// target: "node18", // Specify your target environment
diff --git a/packages/graphql/src/modules/governance/codegen.ts b/packages/graphql/src/modules/governance/codegen.ts
index 7f3875ceb..6d6f6e1bb 100644
--- a/packages/graphql/src/modules/governance/codegen.ts
+++ b/packages/graphql/src/modules/governance/codegen.ts
@@ -1,414 +1,429 @@
-import { gql } from '@apollo/client';
-import * as Apollo from '@apollo/client';
+import { gql } from "@apollo/client";
+import * as Apollo from "@apollo/client";
export type Maybe = T | null;
export type InputMaybe = Maybe;
-export type Exact = { [K in keyof T]: T[K] };
-export type MakeOptional = Omit & { [SubKey in K]?: Maybe };
-export type MakeMaybe = Omit & { [SubKey in K]: Maybe };
-export type MakeEmpty = { [_ in K]?: never };
-export type Incremental = T | { [P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never };
+export type Exact = {
+ [K in keyof T]: T[K];
+};
+export type MakeOptional = Omit & {
+ [SubKey in K]?: Maybe;
+};
+export type MakeMaybe = Omit & {
+ [SubKey in K]: Maybe;
+};
+export type MakeEmpty<
+ T extends { [key: string]: unknown },
+ K extends keyof T,
+> = { [_ in K]?: never };
+export type Incremental =
+ | T
+ | {
+ [P in keyof T]?: P extends " $fragmentName" | "__typename" ? T[P] : never;
+ };
const defaultOptions = {} as const;
/** All built-in and custom scalars, mapped to their actual values */
export type Scalars = {
- ID: { input: string; output: string; }
- String: { input: string; output: string; }
- Boolean: { input: boolean; output: boolean; }
- Int: { input: number; output: number; }
- Float: { input: number; output: number; }
- BigDecimal: { input: any; output: any; }
- BigInt: { input: any; output: any; }
- Bytes: { input: any; output: any; }
- Int8: { input: any; output: any; }
- Timestamp: { input: any; output: any; }
+ ID: { input: string; output: string };
+ String: { input: string; output: string };
+ Boolean: { input: boolean; output: boolean };
+ Int: { input: number; output: number };
+ Float: { input: number; output: number };
+ BigDecimal: { input: any; output: any };
+ BigInt: { input: any; output: any };
+ Bytes: { input: any; output: any };
+ Int8: { input: any; output: any };
+ Timestamp: { input: any; output: any };
};
export enum Aggregation_Interval {
- Day = 'day',
- Hour = 'hour'
+ Day = "day",
+ Hour = "hour",
}
export type BlockChangedFilter = {
- number_gte: Scalars['Int']['input'];
+ number_gte: Scalars["Int"]["input"];
};
export type Block_Height = {
- hash?: InputMaybe;
- number?: InputMaybe;
- number_gte?: InputMaybe;
+ hash?: InputMaybe;
+ number?: InputMaybe;
+ number_gte?: InputMaybe;
};
export type CallScheduled = {
- __typename?: 'CallScheduled';
- data: Scalars['Bytes']['output'];
- delay: Scalars['BigInt']['output'];
- id: Scalars['Int8']['output'];
- index: Scalars['BigInt']['output'];
- predecessor: Scalars['Bytes']['output'];
- target: Scalars['Bytes']['output'];
- timelockId: Scalars['Bytes']['output'];
- value: Scalars['BigInt']['output'];
+ __typename?: "CallScheduled";
+ data: Scalars["Bytes"]["output"];
+ delay: Scalars["BigInt"]["output"];
+ id: Scalars["Int8"]["output"];
+ index: Scalars["BigInt"]["output"];
+ predecessor: Scalars["Bytes"]["output"];
+ target: Scalars["Bytes"]["output"];
+ timelockId: Scalars["Bytes"]["output"];
+ value: Scalars["BigInt"]["output"];
};
export type CallScheduled_Filter = {
/** Filter for the block changed event. */
_change_block?: InputMaybe;
and?: InputMaybe>>;
- data?: InputMaybe;
- data_contains?: InputMaybe;
- data_gt?: InputMaybe;
- data_gte?: InputMaybe;
- data_in?: InputMaybe>;
- data_lt?: InputMaybe;
- data_lte?: InputMaybe;
- data_not?: InputMaybe;
- data_not_contains?: InputMaybe;
- data_not_in?: InputMaybe>;
- delay?: InputMaybe;
- delay_gt?: InputMaybe;
- delay_gte?: InputMaybe;
- delay_in?: InputMaybe>;
- delay_lt?: InputMaybe;
- delay_lte?: InputMaybe;
- delay_not?: InputMaybe;
- delay_not_in?: InputMaybe>;
- id?: InputMaybe;
- id_gt?: InputMaybe;
- id_gte?: InputMaybe;
- id_in?: InputMaybe>;
- id_lt?: InputMaybe;
- id_lte?: InputMaybe;
- id_not?: InputMaybe;
- id_not_in?: InputMaybe>;
- index?: InputMaybe;
- index_gt?: InputMaybe;
- index_gte?: InputMaybe;
- index_in?: InputMaybe>;
- index_lt?: InputMaybe;
- index_lte?: InputMaybe;
- index_not?: InputMaybe;
- index_not_in?: InputMaybe>;
+ data?: InputMaybe;
+ data_contains?: InputMaybe;
+ data_gt?: InputMaybe;
+ data_gte?: InputMaybe;
+ data_in?: InputMaybe>;
+ data_lt?: InputMaybe;
+ data_lte?: InputMaybe;
+ data_not?: InputMaybe;
+ data_not_contains?: InputMaybe;
+ data_not_in?: InputMaybe>;
+ delay?: InputMaybe;
+ delay_gt?: InputMaybe;
+ delay_gte?: InputMaybe;
+ delay_in?: InputMaybe>;
+ delay_lt?: InputMaybe;
+ delay_lte?: InputMaybe;
+ delay_not?: InputMaybe;
+ delay_not_in?: InputMaybe>;
+ id?: InputMaybe;
+ id_gt?: InputMaybe;
+ id_gte?: InputMaybe;
+ id_in?: InputMaybe>;
+ id_lt?: InputMaybe;
+ id_lte?: InputMaybe;
+ id_not?: InputMaybe;
+ id_not_in?: InputMaybe>;
+ index?: InputMaybe;
+ index_gt?: InputMaybe;
+ index_gte?: InputMaybe;
+ index_in?: InputMaybe>;
+ index_lt?: InputMaybe;
+ index_lte?: InputMaybe;
+ index_not?: InputMaybe;
+ index_not_in?: InputMaybe>;
or?: InputMaybe>>;
- predecessor?: InputMaybe;
- predecessor_contains?: InputMaybe;
- predecessor_gt?: InputMaybe;
- predecessor_gte?: InputMaybe;
- predecessor_in?: InputMaybe>;
- predecessor_lt?: InputMaybe;
- predecessor_lte?: InputMaybe;
- predecessor_not?: InputMaybe;
- predecessor_not_contains?: InputMaybe;
- predecessor_not_in?: InputMaybe>;
- target?: InputMaybe;
- target_contains?: InputMaybe;
- target_gt?: InputMaybe;
- target_gte?: InputMaybe;
- target_in?: InputMaybe>;
- target_lt?: InputMaybe;
- target_lte?: InputMaybe;
- target_not?: InputMaybe;
- target_not_contains?: InputMaybe;
- target_not_in?: InputMaybe>;
- timelockId?: InputMaybe;
- timelockId_contains?: InputMaybe;
- timelockId_gt?: InputMaybe;
- timelockId_gte?: InputMaybe;
- timelockId_in?: InputMaybe>;
- timelockId_lt?: InputMaybe;
- timelockId_lte?: InputMaybe;
- timelockId_not?: InputMaybe;
- timelockId_not_contains?: InputMaybe;
- timelockId_not_in?: InputMaybe>;
- value?: InputMaybe;
- value_gt?: InputMaybe;
- value_gte?: InputMaybe;
- value_in?: InputMaybe>;
- value_lt?: InputMaybe;
- value_lte?: InputMaybe;
- value_not?: InputMaybe;
- value_not_in?: InputMaybe>;
+ predecessor?: InputMaybe;
+ predecessor_contains?: InputMaybe;
+ predecessor_gt?: InputMaybe;
+ predecessor_gte?: InputMaybe;
+ predecessor_in?: InputMaybe>;
+ predecessor_lt?: InputMaybe;
+ predecessor_lte?: InputMaybe;
+ predecessor_not?: InputMaybe;
+ predecessor_not_contains?: InputMaybe;
+ predecessor_not_in?: InputMaybe>;
+ target?: InputMaybe;
+ target_contains?: InputMaybe;
+ target_gt?: InputMaybe;
+ target_gte?: InputMaybe;
+ target_in?: InputMaybe>;
+ target_lt?: InputMaybe;
+ target_lte?: InputMaybe;
+ target_not?: InputMaybe;
+ target_not_contains?: InputMaybe;
+ target_not_in?: InputMaybe>;
+ timelockId?: InputMaybe;
+ timelockId_contains?: InputMaybe;
+ timelockId_gt?: InputMaybe;
+ timelockId_gte?: InputMaybe;
+ timelockId_in?: InputMaybe>;
+ timelockId_lt?: InputMaybe;
+ timelockId_lte?: InputMaybe;
+ timelockId_not?: InputMaybe;
+ timelockId_not_contains?: InputMaybe;
+ timelockId_not_in?: InputMaybe>;
+ value?: InputMaybe;
+ value_gt?: InputMaybe;
+ value_gte?: InputMaybe;
+ value_in?: InputMaybe>;
+ value_lt?: InputMaybe;
+ value_lte?: InputMaybe;
+ value_not?: InputMaybe;
+ value_not_in?: InputMaybe>;
};
export enum CallScheduled_OrderBy {
- Data = 'data',
- Delay = 'delay',
- Id = 'id',
- Index = 'index',
- Predecessor = 'predecessor',
- Target = 'target',
- TimelockId = 'timelockId',
- Value = 'value'
+ Data = "data",
+ Delay = "delay",
+ Id = "id",
+ Index = "index",
+ Predecessor = "predecessor",
+ Target = "target",
+ TimelockId = "timelockId",
+ Value = "value",
}
/** Defines the order direction, either ascending or descending */
export enum OrderDirection {
- Asc = 'asc',
- Desc = 'desc'
+ Asc = "asc",
+ Desc = "desc",
}
export type Proposal = {
- __typename?: 'Proposal';
- calldatas: Array;
- canceledAt?: Maybe;
- canceledAtBlock?: Maybe;
- createdAt: Scalars['BigInt']['output'];
- createdAtBlock: Scalars['BigInt']['output'];
- description: Scalars['String']['output'];
- executedAt?: Maybe;
- executedAtBlock?: Maybe;
- id: Scalars['ID']['output'];
- proposalId: Scalars['BigInt']['output'];
- proposer: Scalars['Bytes']['output'];
- queuedAt?: Maybe;
- queuedAtBlock?: Maybe;
- signatures: Array;
- status: Scalars['String']['output'];
- targets: Array;
- values: Array;
- voteEnd: Scalars['BigInt']['output'];
- voteStart: Scalars['BigInt']['output'];
+ __typename?: "Proposal";
+ calldatas: Array;
+ canceledAt?: Maybe;
+ canceledAtBlock?: Maybe;
+ createdAt: Scalars["BigInt"]["output"];
+ createdAtBlock: Scalars["BigInt"]["output"];
+ description: Scalars["String"]["output"];
+ executedAt?: Maybe;
+ executedAtBlock?: Maybe;
+ id: Scalars["ID"]["output"];
+ proposalId: Scalars["BigInt"]["output"];
+ proposer: Scalars["Bytes"]["output"];
+ queuedAt?: Maybe;
+ queuedAtBlock?: Maybe;
+ signatures: Array;
+ status: Scalars["String"]["output"];
+ targets: Array;
+ values: Array;
+ voteEnd: Scalars["BigInt"]["output"];
+ voteStart: Scalars["BigInt"]["output"];
};
export type ProposalVotesAggregated = {
- __typename?: 'ProposalVotesAggregated';
- id: Scalars['Int8']['output'];
- proposalId: Scalars['BigInt']['output'];
- support: Scalars['Int']['output'];
- timestamp: Scalars['Timestamp']['output'];
- weight: Scalars['BigInt']['output'];
+ __typename?: "ProposalVotesAggregated";
+ id: Scalars["Int8"]["output"];
+ proposalId: Scalars["BigInt"]["output"];
+ support: Scalars["Int"]["output"];
+ timestamp: Scalars["Timestamp"]["output"];
+ weight: Scalars["BigInt"]["output"];
};
export type ProposalVotesAggregated_Filter = {
/** Filter for the block changed event. */
_change_block?: InputMaybe;
and?: InputMaybe>>;
- id?: InputMaybe;
- id_gt?: InputMaybe;
- id_gte?: InputMaybe;
- id_in?: InputMaybe>;
- id_lt?: InputMaybe;
- id_lte?: InputMaybe;
+ id?: InputMaybe;
+ id_gt?: InputMaybe;
+ id_gte?: InputMaybe;
+ id_in?: InputMaybe>;
+ id_lt?: InputMaybe;
+ id_lte?: InputMaybe;
or?: InputMaybe>>;
- proposalId?: InputMaybe;
- proposalId_gt?: InputMaybe;
- proposalId_gte?: InputMaybe;
- proposalId_in?: InputMaybe>;
- proposalId_lt?: InputMaybe;
- proposalId_lte?: InputMaybe;
- support?: InputMaybe;
- support_gt?: InputMaybe;
- support_gte?: InputMaybe;
- support_in?: InputMaybe>;
- support_lt?: InputMaybe;
- support_lte?: InputMaybe;
- timestamp?: InputMaybe;
- timestamp_gt?: InputMaybe;
- timestamp_gte?: InputMaybe;
- timestamp_in?: InputMaybe>;
- timestamp_lt?: InputMaybe;
- timestamp_lte?: InputMaybe;
+ proposalId?: InputMaybe;
+ proposalId_gt?: InputMaybe;
+ proposalId_gte?: InputMaybe;
+ proposalId_in?: InputMaybe>;
+ proposalId_lt?: InputMaybe;
+ proposalId_lte?: InputMaybe;
+ support?: InputMaybe;
+ support_gt?: InputMaybe;
+ support_gte?: InputMaybe;
+ support_in?: InputMaybe>;
+ support_lt?: InputMaybe;
+ support_lte?: InputMaybe;
+ timestamp?: InputMaybe;
+ timestamp_gt?: InputMaybe;
+ timestamp_gte?: InputMaybe;
+ timestamp_in?: InputMaybe>;
+ timestamp_lt?: InputMaybe;
+ timestamp_lte?: InputMaybe;
};
export type Proposal_Filter = {
/** Filter for the block changed event. */
_change_block?: InputMaybe;
and?: InputMaybe>>;
- calldatas?: InputMaybe>;
- calldatas_contains?: InputMaybe>;
- calldatas_contains_nocase?: InputMaybe