From a9bc9469cc69b71bee300388d8216e8f59b90092 Mon Sep 17 00:00:00 2001 From: fr1j0 Date: Sat, 4 Oct 2025 01:01:50 +0300 Subject: [PATCH 01/25] feat: add referral link generation feature with analytics tracking --- src/ProtectedLayout.tsx | 9 ++ src/components/ReferralLinkGenerator.tsx | 105 +++++++++++++ src/components/nav/nav/Navbar.tsx | 1 + src/components/nav/nav/Navi.desktop.tsx | 5 + src/components/nav/nav/Navi.mobile.tsx | 7 + src/constants/analytics-events.ts | 22 +++ src/pages/Referral.tsx | 181 +++++++++++++++++++++++ src/utils/referral.ts | 63 ++++++++ 8 files changed, 393 insertions(+) create mode 100644 src/components/ReferralLinkGenerator.tsx create mode 100644 src/pages/Referral.tsx create mode 100644 src/utils/referral.ts diff --git a/src/ProtectedLayout.tsx b/src/ProtectedLayout.tsx index 09581e3b1..630ae118b 100644 --- a/src/ProtectedLayout.tsx +++ b/src/ProtectedLayout.tsx @@ -8,6 +8,7 @@ import Explorer from "./pages/Explorer"; import Field from "./pages/Field"; import { Market as MarketPage } from "./pages/Market"; import Overview from "./pages/Overview"; +import Referral from "./pages/Referral"; import Silo from "./pages/Silo"; import SiloToken from "./pages/SiloToken"; import Swap from "./pages/Swap"; @@ -60,6 +61,14 @@ export default function ProtectedLayout() { } /> + + + + } + /> +
Connect your wallet to generate a referral link
+ + ); + } + + const encodedRef = encodeReferralAddress(address); + const referralUrl = `${window.location.origin}/field?ref=${encodedRef}`; + + // Calculate total sown beans from plots + const totalSownBeans = farmerField.plots.reduce((total, plot) => { + // Each plot represents pods sown. To get beans sown, we use the initial sown amount + // which is stored in the plot data + return total + (plot.pods?.toNumber() || 0); + }, 0); + + // For now, we'll use the totalPods as a proxy. In production, you'd want to query + // the subgraph for the actual sownBeans value from farmer.field.sownBeans + const isEligible = totalSownBeans >= MIN_SOWN_BEANS; + + const handleCopy = () => { + navigator.clipboard.writeText(referralUrl); + toast.success("Referral link copied to clipboard!"); + + trackSimpleEvent(ANALYTICS_EVENTS.REFERRAL.LINK_COPIED, { + address, + is_eligible: isEligible, + total_sown_beans: totalSownBeans, + }); + }; + + const handleGenerateClick = () => { + trackSimpleEvent(ANALYTICS_EVENTS.REFERRAL.LINK_GENERATED, { + address, + is_eligible: isEligible, + total_sown_beans: totalSownBeans, + }); + }; + + return ( +
+
+
Your Referral Link
+
+ Share your link to earn 1% bonus Pods when others sow using it +
+
+ + {!isEligible && ( + + You need to sow at least {formatter.number(MIN_SOWN_BEANS)} Beans before your referral link will work. +
+ Current: {formatter.number(totalSownBeans)} Beans sown. +
+ )} + +
+
+ + +
+ + {isEligible && ( +
+ ✓ Your referral link is active! You'll earn 1% bonus Pods when someone sows using your link. +
+ )} +
+ +
+
How it works:
+
    +
  • Share your referral link with others
  • +
  • When they sow Beans using your link, you both earn bonus Pods
  • +
  • You receive 1% of the Pods they earn as a referral bonus
  • +
  • They get their full Pod allocation plus the referral bonus
  • +
+
+
+ ); +} diff --git a/src/components/nav/nav/Navbar.tsx b/src/components/nav/nav/Navbar.tsx index bd09404f1..64647d10a 100644 --- a/src/components/nav/nav/Navbar.tsx +++ b/src/components/nav/nav/Navbar.tsx @@ -331,6 +331,7 @@ export const navLinks = { silo: "/silo", field: "/field", swap: "/swap", + referral: "/referral", sPinto: "/sPinto", collection: "/collection", podmarket: "/market/pods", diff --git a/src/components/nav/nav/Navi.desktop.tsx b/src/components/nav/nav/Navi.desktop.tsx index c4ffabfc3..f82cce26f 100644 --- a/src/components/nav/nav/Navi.desktop.tsx +++ b/src/components/nav/nav/Navi.desktop.tsx @@ -100,6 +100,11 @@ const AppNavi = () => { Swap + + + Referral + + Pod Market diff --git a/src/components/nav/nav/Navi.mobile.tsx b/src/components/nav/nav/Navi.mobile.tsx index 2dd4a2c12..7581cce54 100644 --- a/src/components/nav/nav/Navi.mobile.tsx +++ b/src/components/nav/nav/Navi.mobile.tsx @@ -168,6 +168,13 @@ function MobileNavContent({ learnOpen, setLearnOpen, unmount, close }: IMobileNa > Swap + + Referral + { + trackSimpleEvent(ANALYTICS_EVENTS.REFERRAL.PAGE_VIEWED); + }, []); + + return ( + +
+ {/* Hero Section */} +
+

Pinto Referral Program

+

+ Earn rewards by referring new farmers to Pinto. Share your referral link and earn 1% of the Pods your + referrals sow. +

+
+ + {/* Main Referral Card */} + + + + + {/* Stats Section - Coming Soon */} + +

Your Referral Stats

+
+

Referral stats and leaderboard coming soon!

+

+ Track your earned Pods and see how you rank among top referrers. +

+
+
+ + {/* How It Works */} + +

How It Works

+
+
+
+ 1 +
+
+

Qualify as a Referrer

+

Sow at least 1,000 Beans in the Field to unlock your referral link.

+
+
+ +
+
+ 2 +
+
+

Share Your Link

+

Copy your unique referral link and share it with friends, on social media, or anywhere else.

+
+
+ +
+
+ 3 +
+
+

Earn Rewards

+

+ When someone uses your link and sows Beans, you earn 1% of the Pods they receive as a referral bonus. +

+
+
+ +
+
+ 4 +
+
+

Get Credited

+

+ Referral rewards are automatically credited to your wallet address when your referral completes their + sow transaction. +

+
+
+
+
+ + {/* Example Section */} + +

Example

+
+
+

Scenario:

+

+ Alice has sown 5,000 Beans in the Field. She shares her referral link with Bob. +

+
+ +
+

What Happens:

+
    +
  • Bob clicks Alice's referral link and visits Pinto
  • +
  • Bob connects his wallet and sows 1,000 Beans
  • +
  • Bob receives 1,000 Pods (assuming 1:1 weather)
  • +
  • Alice automatically receives 10 Pods (1% of 1,000 Pods) as a referral bonus
  • +
+
+ +
+

Result:

+

+ Alice earns passive Pods every time someone uses her referral link to sow Beans. The more people she + refers, the more she earns! +

+
+
+
+ + {/* Requirements Card */} + +

Requirements & FAQs

+
+
+

Why do I need to sow 1,000 Beans first?

+

+ This requirement ensures that referrers are genuine participants in the Pinto ecosystem and helps + prevent spam or gaming of the referral system. +

+
+ +
+

+ Is there a limit to how many people I can refer? +

+

No! You can refer as many people as you'd like. There is no cap on referral earnings.

+
+ +
+

When do I receive my referral rewards?

+

+ Referral rewards are credited immediately when your referral completes their sow transaction. The Pods + are sent directly to your wallet address. +

+
+ +
+

Can I refer myself?

+

+ No, self-referrals are not allowed. Referral links are tracked by wallet address, so using your own link + won't generate rewards. +

+
+ +
+

What if I lose my referral link?

+

+ Don't worry! You can always come back to this page while connected with your wallet to retrieve your + referral link. It's permanently associated with your wallet address. +

+
+
+
+ + {/* Call to Action */} + +
+

Ready to Start Earning?

+

+ Connect your wallet and start sharing your referral link today. Help grow the Pinto community and earn + passive rewards! +

+
+
+
+
+ ); +} diff --git a/src/utils/referral.ts b/src/utils/referral.ts new file mode 100644 index 000000000..1ae7ce0b3 --- /dev/null +++ b/src/utils/referral.ts @@ -0,0 +1,63 @@ +import type { Address } from "viem"; +import { isAddress, zeroAddress } from "viem"; + +/** + * Encode an Ethereum address to base64 for URL shortening + * Treats the address as raw bytes (20 bytes) and encodes to base64 + * + * @param address - Ethereum address (0x prefixed hex string) + * @returns Base64 encoded string (28 characters) + */ +export function encodeReferralAddress(address: Address): string { + // Remove 0x prefix + const hex = address.slice(2); + + // Convert hex string to byte array + const hexPairs = hex.match(/.{1,2}/g) || []; + const bytes = new Uint8Array(hexPairs.map((byte) => Number.parseInt(byte, 16))); + + // Convert bytes to base64 + const base64 = btoa(String.fromCharCode(...bytes)); + + return base64; +} + +/** + * Decode a base64 referral code back to an Ethereum address + * + * @param encoded - Base64 encoded referral code + * @returns Ethereum address or null if invalid + */ +export function decodeReferralAddress(encoded: string): Address | null { + try { + // Decode base64 to bytes + const decoded = atob(encoded); + const bytes = new Uint8Array(decoded.length); + for (let i = 0; i < decoded.length; i++) { + bytes[i] = decoded.charCodeAt(i); + } + + // Convert bytes to hex string + const hex = `0x${Array.from(bytes) + .map((b) => b.toString(16).padStart(2, "0")) + .join("")}`; + + // Validate it's a proper address + if (!isAddress(hex)) return null; + if (hex === zeroAddress) return null; + + return hex as Address; + } catch { + return null; + } +} + +/** + * Check if a referral code is valid (can be decoded to a valid address) + * + * @param code - Base64 encoded referral code + * @returns true if valid, false otherwise + */ +export function isValidReferralCode(code: string): boolean { + return decodeReferralAddress(code) !== null; +} From 619d3774d04d2ba413bd74a74696af1067714592 Mon Sep 17 00:00:00 2001 From: fr1j0 Date: Sat, 4 Oct 2025 01:08:53 +0300 Subject: [PATCH 02/25] feat: add referral rewards info to Swap rewards tooltip --- src/constants/meta.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/constants/meta.ts b/src/constants/meta.ts index db4a6cf8d..4986a172d 100644 --- a/src/constants/meta.ts +++ b/src/constants/meta.ts @@ -25,6 +25,7 @@ const slugs = [ "PINTO", "sPinto", "tractor", + "referral", ] as const; const nestedSlugs = ["PINTOUSDC", "PINTOcbBTC", "PINTOWSOL", "PINTOWETH", "PINTOcbETH", "PINTO"] as const; @@ -133,6 +134,11 @@ const PINTO_META: Record = { description: "View and manage your collection of Pinto NFTs.", url: "https://pinto.money/collectionsoon", }, + referral: { + title: "Referral | Pinto", + description: "Share Pinto and earn rewards through referrals.", + url: "https://pinto.money/referral", + }, }; export default PINTO_META; From 5e4bb9b7267e16436dbb86be7b002358c3d9d1d1 Mon Sep 17 00:00:00 2001 From: fr1j0 Date: Sat, 4 Oct 2025 02:07:50 +0300 Subject: [PATCH 03/25] feat: enhance referral link UX with real-time copy feedback and improved analytics tracking --- src/components/ReferralLinkGenerator.tsx | 32 ++++++++++-- src/constants/analytics-events.ts | 1 + src/pages/Referral.tsx | 64 +++++++----------------- 3 files changed, 47 insertions(+), 50 deletions(-) diff --git a/src/components/ReferralLinkGenerator.tsx b/src/components/ReferralLinkGenerator.tsx index 8ffc59175..c0a1fa9d4 100644 --- a/src/components/ReferralLinkGenerator.tsx +++ b/src/components/ReferralLinkGenerator.tsx @@ -7,7 +7,7 @@ import { useFarmerField } from "@/state/useFarmerField"; import { trackSimpleEvent } from "@/utils/analytics"; import { formatter } from "@/utils/format"; import { encodeReferralAddress } from "@/utils/referral"; -import { CopyIcon } from "@radix-ui/react-icons"; +import { CopyIcon, Share1Icon } from "@radix-ui/react-icons"; import { toast } from "sonner"; import { useAccount } from "wagmi"; @@ -58,6 +58,19 @@ export function ReferralLinkGenerator() { }); }; + const handleTwitterShare = () => { + const tweetText = + "🌱 I'm farming on @PintoProtocol and earning passive rewards!\n\nJoin me and we both earn bonus Pods when you sow Beans 🫘\n\nStart farming today:"; + const twitterUrl = `https://twitter.com/intent/tweet?text=${encodeURIComponent(tweetText)}&url=${encodeURIComponent(referralUrl)}`; + window.open(twitterUrl, "_blank", "noopener,noreferrer"); + + trackSimpleEvent(ANALYTICS_EVENTS.REFERRAL.TWITTER_SHARE, { + address, + is_eligible: isEligible, + total_sown_beans: totalSownBeans, + }); + }; + return (
@@ -85,9 +98,20 @@ export function ReferralLinkGenerator() {
{isEligible && ( -
- ✓ Your referral link is active! You'll earn 1% bonus Pods when someone sows using your link. -
+ <> +
+ ✓ Your referral link is active! You'll earn 1% bonus Pods when someone sows using your link. +
+ + {/* Twitter Share Button */} +
+
Share on Social
+ +
+ )}
diff --git a/src/constants/analytics-events.ts b/src/constants/analytics-events.ts index fb49e1696..c6042b1a2 100644 --- a/src/constants/analytics-events.ts +++ b/src/constants/analytics-events.ts @@ -158,6 +158,7 @@ const REFERRAL_EVENTS = { LINK_GENERATED: "referral_link_generated", LINK_COPIED: "referral_link_copied", LINK_SHARED: "referral_link_shared", + TWITTER_SHARE: "referral_twitter_share", // Validation ELIGIBILITY_CHECKED: "referral_eligibility_checked", diff --git a/src/pages/Referral.tsx b/src/pages/Referral.tsx index f687e35bb..8f3065b74 100644 --- a/src/pages/Referral.tsx +++ b/src/pages/Referral.tsx @@ -22,21 +22,24 @@ export default function Referral() {

- {/* Main Referral Card */} - - - - - {/* Stats Section - Coming Soon */} - -

Your Referral Stats

-
-

Referral stats and leaderboard coming soon!

-

- Track your earned Pods and see how you rank among top referrers. -

-
-
+ {/* Main Referral Cards - Two Column Layout */} +
+ {/* Your Referral Link */} + + + + + {/* Your Referral Stats */} + +

Your Referral Stats

+
+

Referral stats and leaderboard coming soon!

+

+ Track your earned Pods and see how you rank among top referrers. +

+
+
+
{/* How It Works */} @@ -89,37 +92,6 @@ export default function Referral() { - {/* Example Section */} - -

Example

-
-
-

Scenario:

-

- Alice has sown 5,000 Beans in the Field. She shares her referral link with Bob. -

-
- -
-

What Happens:

-
    -
  • Bob clicks Alice's referral link and visits Pinto
  • -
  • Bob connects his wallet and sows 1,000 Beans
  • -
  • Bob receives 1,000 Pods (assuming 1:1 weather)
  • -
  • Alice automatically receives 10 Pods (1% of 1,000 Pods) as a referral bonus
  • -
-
- -
-

Result:

-

- Alice earns passive Pods every time someone uses her referral link to sow Beans. The more people she - refers, the more she earns! -

-
-
-
- {/* Requirements Card */}

Requirements & FAQs

From db9241e15371877e31696d185fc5d5dc26ece1d7 Mon Sep 17 00:00:00 2001 From: fr1j0 Date: Sat, 4 Oct 2025 02:34:56 +0300 Subject: [PATCH 04/25] feat: improve referral page styling and add progress bar MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Update page layout to use consistent design system (variant="lg" container) - Replace all typography with Pinto design system classes - Add Separator component for consistent visual hierarchy - Replace text-based warning with visual horizontal progress bar - Show qualification progress with animated gradient bar - Display remaining beans needed to unlock referral link - Update all color classes to use design system tokens - Improve mobile responsiveness with responsive padding 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/components/ReferralLinkGenerator.tsx | 35 ++-- src/pages/Referral.tsx | 241 ++++++++++++----------- 2 files changed, 150 insertions(+), 126 deletions(-) diff --git a/src/components/ReferralLinkGenerator.tsx b/src/components/ReferralLinkGenerator.tsx index c0a1fa9d4..f5139a2d1 100644 --- a/src/components/ReferralLinkGenerator.tsx +++ b/src/components/ReferralLinkGenerator.tsx @@ -1,7 +1,6 @@ import { Button } from "@/components/ui/Button"; import { Card } from "@/components/ui/Card"; import { Input } from "@/components/ui/Input"; -import Warning from "@/components/ui/Warning"; import { ANALYTICS_EVENTS } from "@/constants/analytics-events"; import { useFarmerField } from "@/state/useFarmerField"; import { trackSimpleEvent } from "@/utils/analytics"; @@ -71,21 +70,35 @@ export function ReferralLinkGenerator() { }); }; + const progressPercentage = Math.min((totalSownBeans / MIN_SOWN_BEANS) * 100, 100); + return (
Your Referral Link
-
+
Share your link to earn 1% bonus Pods when others sow using it
{!isEligible && ( - - You need to sow at least {formatter.number(MIN_SOWN_BEANS)} Beans before your referral link will work. -
- Current: {formatter.number(totalSownBeans)} Beans sown. -
+
+
+
Qualification Progress
+
+ {formatter.number(totalSownBeans)} / {formatter.number(MIN_SOWN_BEANS)} Beans +
+
+
+
+
+
+ Sow {formatter.number(MIN_SOWN_BEANS - totalSownBeans)} more Beans to unlock your referral link +
+
)}
@@ -99,13 +112,13 @@ export function ReferralLinkGenerator() { {isEligible && ( <> -
+
✓ Your referral link is active! You'll earn 1% bonus Pods when someone sows using your link.
{/* Twitter Share Button */}
-
Share on Social
+
Share on Social
-
How it works:
-
    +
    How it works:
    +
    • Share your referral link with others
    • When they sow Beans using your link, you both earn bonus Pods
    • You receive 1% of the Pods they earn as a referral bonus
    • diff --git a/src/pages/Referral.tsx b/src/pages/Referral.tsx index 8f3065b74..70026f30d 100644 --- a/src/pages/Referral.tsx +++ b/src/pages/Referral.tsx @@ -1,5 +1,6 @@ import PageContainer from "@/components/ui/PageContainer"; import { Card } from "@/components/ui/Card"; +import { Separator } from "@/components/ui/Separator"; import { ReferralLinkGenerator } from "@/components/ReferralLinkGenerator"; import { ANALYTICS_EVENTS } from "@/constants/analytics-events"; import { trackSimpleEvent } from "@/utils/analytics"; @@ -11,142 +12,152 @@ export default function Referral() { }, []); return ( - -
      - {/* Hero Section */} -
      -

      Pinto Referral Program

      -

      - Earn rewards by referring new farmers to Pinto. Share your referral link and earn 1% of the Pods your - referrals sow. -

      -
      + +
      +
      + {/* Hero Section */} +
      +
      Referral Program
      +
      + Earn rewards by referring new farmers to Pinto. Share your referral link and earn 1% of the Pods your + referrals sow. +
      +
      + - {/* Main Referral Cards - Two Column Layout */} -
      - {/* Your Referral Link */} - - - + {/* Main Referral Cards - Two Column Layout */} +
      + {/* Your Referral Link */} + + + - {/* Your Referral Stats */} - -

      Your Referral Stats

      -
      -

      Referral stats and leaderboard coming soon!

      -

      - Track your earned Pods and see how you rank among top referrers. -

      -
      -
      -
      + {/* Your Referral Stats */} + +
      Your Referral Stats
      +
      +
      Referral stats and leaderboard coming soon!
      +
      + Track your earned Pods and see how you rank among top referrers. +
      +
      +
      +
      - {/* How It Works */} - -

      How It Works

      -
      -
      -
      - 1 + {/* How It Works */} + +
      How It Works
      +
      +
      +
      + 1 +
      +
      +
      Qualify as a Referrer
      +
      + Sow at least 1,000 Beans in the Field to unlock your referral link. +
      +
      -
      -

      Qualify as a Referrer

      -

      Sow at least 1,000 Beans in the Field to unlock your referral link.

      + +
      +
      + 2 +
      +
      +
      Share Your Link
      +
      + Copy your unique referral link and share it with friends, on social media, or anywhere else. +
      +
      -
      -
      -
      - 2 +
      +
      + 3 +
      +
      +
      Earn Rewards
      +
      + When someone uses your link and sows Beans, you earn 1% of the Pods they receive as a referral + bonus. +
      +
      -
      -

      Share Your Link

      -

      Copy your unique referral link and share it with friends, on social media, or anywhere else.

      + +
      +
      + 4 +
      +
      +
      Get Credited
      +
      + Referral rewards are automatically credited to your wallet address when your referral completes + their sow transaction. +
      +
      + -
      -
      - 3 -
      + {/* Requirements Card */} + +
      Requirements & FAQs
      +
      -

      Earn Rewards

      -

      - When someone uses your link and sows Beans, you earn 1% of the Pods they receive as a referral bonus. -

      +
      Why do I need to sow 1,000 Beans first?
      +
      + This requirement ensures that referrers are genuine participants in the Pinto ecosystem and helps + prevent spam or gaming of the referral system. +
      -
      -
      -
      - 4 -
      -

      Get Credited

      -

      - Referral rewards are automatically credited to your wallet address when your referral completes their - sow transaction. -

      +
      + Is there a limit to how many people I can refer? +
      +
      + No! You can refer as many people as you'd like. There is no cap on referral earnings. +
      -
      -
      - - - {/* Requirements Card */} - -

      Requirements & FAQs

      -
      -
      -

      Why do I need to sow 1,000 Beans first?

      -

      - This requirement ensures that referrers are genuine participants in the Pinto ecosystem and helps - prevent spam or gaming of the referral system. -

      -
      -
      -

      - Is there a limit to how many people I can refer? -

      -

      No! You can refer as many people as you'd like. There is no cap on referral earnings.

      -
      +
      +
      When do I receive my referral rewards?
      +
      + Referral rewards are credited immediately when your referral completes their sow transaction. The Pods + are sent directly to your wallet address. +
      +
      -
      -

      When do I receive my referral rewards?

      -

      - Referral rewards are credited immediately when your referral completes their sow transaction. The Pods - are sent directly to your wallet address. -

      -
      +
      +
      Can I refer myself?
      +
      + No, self-referrals are not allowed. Referral links are tracked by wallet address, so using your own + link won't generate rewards. +
      +
      -
      -

      Can I refer myself?

      -

      - No, self-referrals are not allowed. Referral links are tracked by wallet address, so using your own link - won't generate rewards. -

      +
      +
      What if I lose my referral link?
      +
      + Don't worry! You can always come back to this page while connected with your wallet to retrieve your + referral link. It's permanently associated with your wallet address. +
      +
      + -
      -

      What if I lose my referral link?

      -

      - Don't worry! You can always come back to this page while connected with your wallet to retrieve your - referral link. It's permanently associated with your wallet address. -

      + {/* Call to Action */} + +
      +
      Ready to Start Earning?
      +
      + Connect your wallet and start sharing your referral link today. Help grow the Pinto community and earn + passive rewards! +
      -
      - - - {/* Call to Action */} - -
      -

      Ready to Start Earning?

      -

      - Connect your wallet and start sharing your referral link today. Help grow the Pinto community and earn - passive rewards! -

      -
      -
      + +
      ); From a7f7a370f3ece40ab600914ce6312445ca8a2834 Mon Sep 17 00:00:00 2001 From: fr1j0 Date: Sat, 4 Oct 2025 03:06:19 +0300 Subject: [PATCH 05/25] fix: improve referral link input width and layout MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add min-w-0 to input to allow proper flexbox shrinking - Add text-sm to input for better URL readability - Add whitespace-nowrap to Copy button to prevent text wrapping - Ensure input takes maximum available space in flex container 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/components/ReferralLinkGenerator.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/ReferralLinkGenerator.tsx b/src/components/ReferralLinkGenerator.tsx index f5139a2d1..d917ccc09 100644 --- a/src/components/ReferralLinkGenerator.tsx +++ b/src/components/ReferralLinkGenerator.tsx @@ -103,8 +103,8 @@ export function ReferralLinkGenerator() {
      - - From 6926830c6ebc88b4445ccb54672328d90068433e Mon Sep 17 00:00:00 2001 From: fr1j0 Date: Sat, 4 Oct 2025 03:08:39 +0300 Subject: [PATCH 06/25] refactor: remove redundant section and rebrand beans to pinto MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove "How it works" section from ReferralLinkGenerator (redundant with main page) - Replace all instances of "Beans" with "Pinto" for brand consistency - Update progress bar labels to show "Pinto" instead of "Beans" - Update Twitter share text to reference "Pinto" - Update FAQ text to use "Pinto" terminology 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/components/ReferralLinkGenerator.tsx | 16 +++------------- src/pages/Referral.tsx | 6 +++--- 2 files changed, 6 insertions(+), 16 deletions(-) diff --git a/src/components/ReferralLinkGenerator.tsx b/src/components/ReferralLinkGenerator.tsx index d917ccc09..cecbfe7bd 100644 --- a/src/components/ReferralLinkGenerator.tsx +++ b/src/components/ReferralLinkGenerator.tsx @@ -59,7 +59,7 @@ export function ReferralLinkGenerator() { const handleTwitterShare = () => { const tweetText = - "🌱 I'm farming on @PintoProtocol and earning passive rewards!\n\nJoin me and we both earn bonus Pods when you sow Beans 🫘\n\nStart farming today:"; + "🌱 I'm farming on @PintoProtocol and earning passive rewards!\n\nJoin me and we both earn bonus Pods when you sow Pinto 🫘\n\nStart farming today:"; const twitterUrl = `https://twitter.com/intent/tweet?text=${encodeURIComponent(tweetText)}&url=${encodeURIComponent(referralUrl)}`; window.open(twitterUrl, "_blank", "noopener,noreferrer"); @@ -86,7 +86,7 @@ export function ReferralLinkGenerator() {
      Qualification Progress
      - {formatter.number(totalSownBeans)} / {formatter.number(MIN_SOWN_BEANS)} Beans + {formatter.number(totalSownBeans)} / {formatter.number(MIN_SOWN_BEANS)} Pinto
      @@ -96,7 +96,7 @@ export function ReferralLinkGenerator() { />
      - Sow {formatter.number(MIN_SOWN_BEANS - totalSownBeans)} more Beans to unlock your referral link + Sow {formatter.number(MIN_SOWN_BEANS - totalSownBeans)} more Pinto to unlock your referral link
      )} @@ -127,16 +127,6 @@ export function ReferralLinkGenerator() { )}
      - -
      -
      How it works:
      -
        -
      • Share your referral link with others
      • -
      • When they sow Beans using your link, you both earn bonus Pods
      • -
      • You receive 1% of the Pods they earn as a referral bonus
      • -
      • They get their full Pod allocation plus the referral bonus
      • -
      -
      ); } diff --git a/src/pages/Referral.tsx b/src/pages/Referral.tsx index 70026f30d..d3058f9d1 100644 --- a/src/pages/Referral.tsx +++ b/src/pages/Referral.tsx @@ -55,7 +55,7 @@ export default function Referral() {
      Qualify as a Referrer
      - Sow at least 1,000 Beans in the Field to unlock your referral link. + Sow at least 1,000 Pinto in the Field to unlock your referral link.
      @@ -79,7 +79,7 @@ export default function Referral() {
      Earn Rewards
      - When someone uses your link and sows Beans, you earn 1% of the Pods they receive as a referral + When someone uses your link and sows Pinto, you earn 1% of the Pods they receive as a referral bonus.
      @@ -105,7 +105,7 @@ export default function Referral() {
      Requirements & FAQs
      -
      Why do I need to sow 1,000 Beans first?
      +
      Why do I need to sow 1,000 Pinto first?
      This requirement ensures that referrers are genuine participants in the Pinto ecosystem and helps prevent spam or gaming of the referral system. From a2d756255bbd4ae092abc5e8a25e4dcdd3133593 Mon Sep 17 00:00:00 2001 From: fr1j0 Date: Sat, 4 Oct 2025 03:09:33 +0300 Subject: [PATCH 07/25] feat: separate leaderboard and improve referral stats display MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Split "Your Referral Stats" and "Referral Leaderboard" into separate cards - Move leaderboard section above "How It Works" component - Update referral stats to show specific metrics: - Total Pods Earned (placeholder: 0) - Successful Referrals (placeholder: 0) - Improve visual hierarchy with dedicated sections - Add better spacing and layout for stats display 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/pages/Referral.tsx | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/pages/Referral.tsx b/src/pages/Referral.tsx index d3058f9d1..ca4ff659f 100644 --- a/src/pages/Referral.tsx +++ b/src/pages/Referral.tsx @@ -35,15 +35,30 @@ export default function Referral() { {/* Your Referral Stats */}
      Your Referral Stats
      -
      -
      Referral stats and leaderboard coming soon!
      -
      - Track your earned Pods and see how you rank among top referrers. +
      +
      +
      Total Pods Earned
      +
      0
      +
      +
      +
      Successful Referrals
      +
      0
      + {/* Leaderboard */} + +
      Referral Leaderboard
      +
      +
      Leaderboard coming soon!
      +
      + See how you rank among top referrers in the Pinto community. +
      +
      +
      + {/* How It Works */}
      How It Works
      From 94551f1c6a60495c68d69f197afc0114d7cc9101 Mon Sep 17 00:00:00 2001 From: fr1j0 Date: Sat, 4 Oct 2025 03:11:55 +0300 Subject: [PATCH 08/25] fix: update referral bonus to 10% and clarify only referrer earns MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Update all instances of 1% to 10% referral bonus - Clarify that only the referrer earns the bonus, not both parties - Update Twitter share text to reflect accurate mechanics - Update hero description and all "How It Works" copy - Remove misleading "you both earn" language 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/components/ReferralLinkGenerator.tsx | 6 +++--- src/pages/Referral.tsx | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/components/ReferralLinkGenerator.tsx b/src/components/ReferralLinkGenerator.tsx index cecbfe7bd..abd438004 100644 --- a/src/components/ReferralLinkGenerator.tsx +++ b/src/components/ReferralLinkGenerator.tsx @@ -59,7 +59,7 @@ export function ReferralLinkGenerator() { const handleTwitterShare = () => { const tweetText = - "🌱 I'm farming on @PintoProtocol and earning passive rewards!\n\nJoin me and we both earn bonus Pods when you sow Pinto 🫘\n\nStart farming today:"; + "🌱 I'm farming on @PintoProtocol and earning passive rewards!\n\nJoin me and I'll earn bonus Pods when you sow Pinto 🫘\n\nStart farming today:"; const twitterUrl = `https://twitter.com/intent/tweet?text=${encodeURIComponent(tweetText)}&url=${encodeURIComponent(referralUrl)}`; window.open(twitterUrl, "_blank", "noopener,noreferrer"); @@ -77,7 +77,7 @@ export function ReferralLinkGenerator() {
      Your Referral Link
      - Share your link to earn 1% bonus Pods when others sow using it + Share your link to earn 10% bonus Pods when others sow using it
      @@ -113,7 +113,7 @@ export function ReferralLinkGenerator() { {isEligible && ( <>
      - ✓ Your referral link is active! You'll earn 1% bonus Pods when someone sows using your link. + ✓ Your referral link is active! You'll earn 10% bonus Pods when someone sows using your link.
      {/* Twitter Share Button */} diff --git a/src/pages/Referral.tsx b/src/pages/Referral.tsx index ca4ff659f..70fa605e1 100644 --- a/src/pages/Referral.tsx +++ b/src/pages/Referral.tsx @@ -19,7 +19,7 @@ export default function Referral() {
      Referral Program
      - Earn rewards by referring new farmers to Pinto. Share your referral link and earn 1% of the Pods your + Earn rewards by referring new farmers to Pinto. Share your referral link and earn 10% of the Pods your referrals sow.
      @@ -94,7 +94,7 @@ export default function Referral() {
      Earn Rewards
      - When someone uses your link and sows Pinto, you earn 1% of the Pods they receive as a referral + When someone uses your link and sows Pinto, you earn 10% of the Pods they receive as a referral bonus.
      From a049d72812fd4a926dcea7839d41f804c9f5058a Mon Sep 17 00:00:00 2001 From: fr1j0 Date: Sat, 4 Oct 2025 03:13:25 +0300 Subject: [PATCH 09/25] refactor: capitalize Sow, remove CTA, and improve stats layout MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Capitalize all instances of "sow/sows" to "Sow/Sows" for brand consistency - Remove "Ready to Start Earning?" CTA card (redundant) - Change stats layout from 2 rows to 2 columns in 1 row (grid-cols-2) - Update all copy across both referral components 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/components/ReferralLinkGenerator.tsx | 6 +++--- src/pages/Referral.tsx | 23 ++++++----------------- 2 files changed, 9 insertions(+), 20 deletions(-) diff --git a/src/components/ReferralLinkGenerator.tsx b/src/components/ReferralLinkGenerator.tsx index abd438004..6ffde32d8 100644 --- a/src/components/ReferralLinkGenerator.tsx +++ b/src/components/ReferralLinkGenerator.tsx @@ -59,7 +59,7 @@ export function ReferralLinkGenerator() { const handleTwitterShare = () => { const tweetText = - "🌱 I'm farming on @PintoProtocol and earning passive rewards!\n\nJoin me and I'll earn bonus Pods when you sow Pinto 🫘\n\nStart farming today:"; + "🌱 I'm farming on @PintoProtocol and earning passive rewards!\n\nJoin me and I'll earn bonus Pods when you Sow Pinto 🫘\n\nStart farming today:"; const twitterUrl = `https://twitter.com/intent/tweet?text=${encodeURIComponent(tweetText)}&url=${encodeURIComponent(referralUrl)}`; window.open(twitterUrl, "_blank", "noopener,noreferrer"); @@ -77,7 +77,7 @@ export function ReferralLinkGenerator() {
      Your Referral Link
      - Share your link to earn 10% bonus Pods when others sow using it + Share your link to earn 10% bonus Pods when others Sow using it
      @@ -113,7 +113,7 @@ export function ReferralLinkGenerator() { {isEligible && ( <>
      - ✓ Your referral link is active! You'll earn 10% bonus Pods when someone sows using your link. + ✓ Your referral link is active! You'll earn 10% bonus Pods when someone Sows using your link.
      {/* Twitter Share Button */} diff --git a/src/pages/Referral.tsx b/src/pages/Referral.tsx index 70fa605e1..7fbd10a4b 100644 --- a/src/pages/Referral.tsx +++ b/src/pages/Referral.tsx @@ -20,7 +20,7 @@ export default function Referral() {
      Referral Program
      Earn rewards by referring new farmers to Pinto. Share your referral link and earn 10% of the Pods your - referrals sow. + referrals Sow.
      @@ -35,7 +35,7 @@ export default function Referral() { {/* Your Referral Stats */}
      Your Referral Stats
      -
      +
      Total Pods Earned
      0
      @@ -94,7 +94,7 @@ export default function Referral() {
      Earn Rewards
      - When someone uses your link and sows Pinto, you earn 10% of the Pods they receive as a referral + When someone uses your link and Sows Pinto, you earn 10% of the Pods they receive as a referral bonus.
      @@ -108,7 +108,7 @@ export default function Referral() {
      Get Credited
      Referral rewards are automatically credited to your wallet address when your referral completes - their sow transaction. + their Sow transaction.
      @@ -120,7 +120,7 @@ export default function Referral() {
      Requirements & FAQs
      -
      Why do I need to sow 1,000 Pinto first?
      +
      Why do I need to Sow 1,000 Pinto first?
      This requirement ensures that referrers are genuine participants in the Pinto ecosystem and helps prevent spam or gaming of the referral system. @@ -139,7 +139,7 @@ export default function Referral() {
      When do I receive my referral rewards?
      - Referral rewards are credited immediately when your referral completes their sow transaction. The Pods + Referral rewards are credited immediately when your referral completes their Sow transaction. The Pods are sent directly to your wallet address.
      @@ -161,17 +161,6 @@ export default function Referral() {
      - - {/* Call to Action */} - -
      -
      Ready to Start Earning?
      -
      - Connect your wallet and start sharing your referral link today. Help grow the Pinto community and earn - passive rewards! -
      -
      -
      From b32e59c16c5ce2e3472fff4fad5b081d34e25b4d Mon Sep 17 00:00:00 2001 From: fr1j0 Date: Sat, 4 Oct 2025 03:15:08 +0300 Subject: [PATCH 10/25] feat: improve referral link UX with disabled state MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Move referral link input to always be visible at top - Disable input and copy button when threshold not met (grayed out) - Reorder UI: link input first, then qualification progress, then active state - Better visual hierarchy showing link is locked until qualified - Input adapts to full width with flex-1 min-w-0 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/components/ReferralLinkGenerator.tsx | 55 ++++++++++++++---------- 1 file changed, 33 insertions(+), 22 deletions(-) diff --git a/src/components/ReferralLinkGenerator.tsx b/src/components/ReferralLinkGenerator.tsx index 6ffde32d8..8a387c377 100644 --- a/src/components/ReferralLinkGenerator.tsx +++ b/src/components/ReferralLinkGenerator.tsx @@ -81,35 +81,46 @@ export function ReferralLinkGenerator() {
      - {!isEligible && ( -
      -
      -
      Qualification Progress
      -
      - {formatter.number(totalSownBeans)} / {formatter.number(MIN_SOWN_BEANS)} Pinto -
      -
      -
      -
      -
      -
      - Sow {formatter.number(MIN_SOWN_BEANS - totalSownBeans)} more Pinto to unlock your referral link -
      -
      - )} -
      - -
      + {!isEligible && ( +
      +
      +
      Qualification Progress
      +
      + {formatter.number(totalSownBeans)} / {formatter.number(MIN_SOWN_BEANS)} Pinto +
      +
      +
      +
      +
      +
      + Sow {formatter.number(MIN_SOWN_BEANS - totalSownBeans)} more Pinto to unlock your referral link +
      +
      + )} + {isEligible && ( <>
      From 6dde85868be200ae3770b21b977cee1664578d96 Mon Sep 17 00:00:00 2001 From: fr1j0 Date: Sat, 4 Oct 2025 03:16:43 +0300 Subject: [PATCH 11/25] feat: reorder navigation - move Referral after Pod Market MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Reorder navigation items in home tab - New order: Overview, Silo, Field, Swap, Pod Market, Referral, sPinto, Collection - Referral now appears after Pod Market and before Collection 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/components/nav/nav/Navi.desktop.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/nav/nav/Navi.desktop.tsx b/src/components/nav/nav/Navi.desktop.tsx index f82cce26f..da6f6eec1 100644 --- a/src/components/nav/nav/Navi.desktop.tsx +++ b/src/components/nav/nav/Navi.desktop.tsx @@ -101,13 +101,13 @@ const AppNavi = () => { - - Referral + + Pod Market - - Pod Market + + Referral From ea9872e162346722a0a9933341779493ba5ea561 Mon Sep 17 00:00:00 2001 From: fr1j0 Date: Sat, 4 Oct 2025 03:18:28 +0300 Subject: [PATCH 12/25] chore: apply Biome formatting to referral components MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/components/ReferralLinkGenerator.tsx | 7 +------ src/pages/Referral.tsx | 4 ++-- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/src/components/ReferralLinkGenerator.tsx b/src/components/ReferralLinkGenerator.tsx index 8a387c377..f1de6a888 100644 --- a/src/components/ReferralLinkGenerator.tsx +++ b/src/components/ReferralLinkGenerator.tsx @@ -90,12 +90,7 @@ export function ReferralLinkGenerator() { className="flex-1 min-w-0 text-sm" onClick={isEligible ? handleGenerateClick : undefined} /> - diff --git a/src/pages/Referral.tsx b/src/pages/Referral.tsx index 7fbd10a4b..f7e7ae101 100644 --- a/src/pages/Referral.tsx +++ b/src/pages/Referral.tsx @@ -1,7 +1,7 @@ -import PageContainer from "@/components/ui/PageContainer"; +import { ReferralLinkGenerator } from "@/components/ReferralLinkGenerator"; import { Card } from "@/components/ui/Card"; +import PageContainer from "@/components/ui/PageContainer"; import { Separator } from "@/components/ui/Separator"; -import { ReferralLinkGenerator } from "@/components/ReferralLinkGenerator"; import { ANALYTICS_EVENTS } from "@/constants/analytics-events"; import { trackSimpleEvent } from "@/utils/analytics"; import { useEffect } from "react"; From 5c06e1c85cb6c905626e276bdba23569898db22b Mon Sep 17 00:00:00 2001 From: fr1j0 Date: Sat, 4 Oct 2025 03:19:35 +0300 Subject: [PATCH 13/25] feat: reorder qualification progress to appear above link input MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Improves UX by showing users the progress they need to make before displaying the locked referral link input. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/components/ReferralLinkGenerator.tsx | 28 ++++++++++++------------ 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/components/ReferralLinkGenerator.tsx b/src/components/ReferralLinkGenerator.tsx index f1de6a888..2056ca3dc 100644 --- a/src/components/ReferralLinkGenerator.tsx +++ b/src/components/ReferralLinkGenerator.tsx @@ -82,20 +82,6 @@ export function ReferralLinkGenerator() {
      -
      - - -
      - {!isEligible && (
      @@ -116,6 +102,20 @@ export function ReferralLinkGenerator() {
      )} +
      + + +
      + {isEligible && ( <>
      From a326ccfee87cdbe55e19eb49224c499401ba3a0b Mon Sep 17 00:00:00 2001 From: feyyazcigim Date: Sat, 22 Nov 2025 17:36:22 +0300 Subject: [PATCH 14/25] Change referral layout --- src/components/HowToCard.tsx | 57 ++++++++ src/components/ReferralLinkGenerator.tsx | 174 ++++++++++++----------- src/components/ReferralStatsCard.tsx | 53 +++++++ src/pages/Referral.tsx | 25 ++-- 4 files changed, 213 insertions(+), 96 deletions(-) create mode 100644 src/components/HowToCard.tsx create mode 100644 src/components/ReferralStatsCard.tsx diff --git a/src/components/HowToCard.tsx b/src/components/HowToCard.tsx new file mode 100644 index 000000000..324be4c96 --- /dev/null +++ b/src/components/HowToCard.tsx @@ -0,0 +1,57 @@ +export function HowToCard() { + return ( +
      +
      How It Works
      +
      +
      +
      + 1 +
      +
      +
      Qualify as a Referrer
      +
      + Sow at least 1,000 Pinto in the Field to unlock your referral link. +
      +
      +
      + +
      +
      + 2 +
      +
      +
      Share Your Link
      +
      + Copy your unique referral link and share it with friends, on social media, or anywhere else. +
      +
      +
      + +
      +
      + 3 +
      +
      +
      Earn Rewards
      +
      + When someone uses your link and Sows Pinto, you earn 10% of the Pods they receive as a referral bonus. +
      +
      +
      + +
      +
      + 4 +
      +
      +
      Get Credited
      +
      + Referral rewards are automatically credited to your wallet address when your referral completes their Sow + transaction. +
      +
      +
      +
      +
      + ); +} diff --git a/src/components/ReferralLinkGenerator.tsx b/src/components/ReferralLinkGenerator.tsx index 2056ca3dc..c70d67173 100644 --- a/src/components/ReferralLinkGenerator.tsx +++ b/src/components/ReferralLinkGenerator.tsx @@ -1,63 +1,53 @@ import { Button } from "@/components/ui/Button"; -import { Card } from "@/components/ui/Card"; import { Input } from "@/components/ui/Input"; import { ANALYTICS_EVENTS } from "@/constants/analytics-events"; -import { useFarmerField } from "@/state/useFarmerField"; import { trackSimpleEvent } from "@/utils/analytics"; -import { formatter } from "@/utils/format"; +import { truncateHex } from "@/utils/format"; import { encodeReferralAddress } from "@/utils/referral"; -import { CopyIcon, Share1Icon } from "@radix-ui/react-icons"; +import { CopyIcon, Share1Icon, ChatBubbleIcon, BarChartIcon } from "@radix-ui/react-icons"; import { toast } from "sonner"; import { useAccount } from "wagmi"; -const MIN_SOWN_BEANS = 1000; - export function ReferralLinkGenerator() { const { address } = useAccount(); - const farmerField = useFarmerField(); if (!address) { return ( - -
      Connect your wallet to generate a referral link
      -
      +
      Connect your wallet to access referral features
      ); } - const encodedRef = encodeReferralAddress(address); - const referralUrl = `${window.location.origin}/field?ref=${encodedRef}`; + const referralCode = encodeReferralAddress(address); + const referralUrl = `${window.location.origin}/field?ref=${referralCode}`; + const podDestinationAddress = address; - // Calculate total sown beans from plots - const totalSownBeans = farmerField.plots.reduce((total, plot) => { - // Each plot represents pods sown. To get beans sown, we use the initial sown amount - // which is stored in the plot data - return total + (plot.pods?.toNumber() || 0); - }, 0); + const handleCopyCode = () => { + navigator.clipboard.writeText(referralCode); + toast.success("Referral code copied to clipboard!"); - // For now, we'll use the totalPods as a proxy. In production, you'd want to query - // the subgraph for the actual sownBeans value from farmer.field.sownBeans - const isEligible = totalSownBeans >= MIN_SOWN_BEANS; + trackSimpleEvent(ANALYTICS_EVENTS.REFERRAL.LINK_COPIED, { + address, + type: "code", + }); + }; - const handleCopy = () => { + const handleCopyLink = () => { navigator.clipboard.writeText(referralUrl); toast.success("Referral link copied to clipboard!"); trackSimpleEvent(ANALYTICS_EVENTS.REFERRAL.LINK_COPIED, { address, - is_eligible: isEligible, - total_sown_beans: totalSownBeans, + type: "link", }); }; - const handleGenerateClick = () => { - trackSimpleEvent(ANALYTICS_EVENTS.REFERRAL.LINK_GENERATED, { - address, - is_eligible: isEligible, - total_sown_beans: totalSownBeans, - }); + const handleChangeAddress = () => { + console.log("Change pod destination address clicked"); + toast.info("Change address functionality coming soon!"); }; const handleTwitterShare = () => { + console.log("Twitter/X share clicked"); const tweetText = "🌱 I'm farming on @PintoProtocol and earning passive rewards!\n\nJoin me and I'll earn bonus Pods when you Sow Pinto 🫘\n\nStart farming today:"; const twitterUrl = `https://twitter.com/intent/tweet?text=${encodeURIComponent(tweetText)}&url=${encodeURIComponent(referralUrl)}`; @@ -65,73 +55,93 @@ export function ReferralLinkGenerator() { trackSimpleEvent(ANALYTICS_EVENTS.REFERRAL.TWITTER_SHARE, { address, - is_eligible: isEligible, - total_sown_beans: totalSownBeans, }); }; - const progressPercentage = Math.min((totalSownBeans / MIN_SOWN_BEANS) * 100, 100); + const handleTelegramShare = () => { + console.log("Telegram share clicked"); + toast.info("Telegram share functionality coming soon!"); + }; + + const handleQRCode = () => { + console.log("QR code clicked"); + toast.info("QR code functionality coming soon!"); + }; return (
      -
      -
      Your Referral Link
      -
      - Share your link to earn 10% bonus Pods when others Sow using it +
      Invite via
      + +
      + {/* Referral Code */} +
      + +
      + + +
      -
      -
      - {!isEligible && ( -
      -
      -
      Qualification Progress
      -
      - {formatter.number(totalSownBeans)} / {formatter.number(MIN_SOWN_BEANS)} Pinto -
      -
      -
      -
      -
      -
      - Sow {formatter.number(MIN_SOWN_BEANS - totalSownBeans)} more Pinto to unlock your referral link -
      + {/* Referral Link */} +
      + +
      + +
      - )} - -
      - -
      - {isEligible && ( - <> -
      - ✓ Your referral link is active! You'll earn 10% bonus Pods when someone Sows using your link. + {/* Pod Destination Address and Share via - Row Layout */} +
      + {/* Pod Destination Address */} +
      + +
      + {truncateHex(podDestinationAddress, 6, 4)} +
      +
      - {/* Twitter Share Button */} -
      -
      Share on Social
      - + +
      - - )} +
      +
      ); diff --git a/src/components/ReferralStatsCard.tsx b/src/components/ReferralStatsCard.tsx new file mode 100644 index 000000000..d0d58a30d --- /dev/null +++ b/src/components/ReferralStatsCard.tsx @@ -0,0 +1,53 @@ +export interface StatItem { + label: string; + value: string | number; + description?: string; +} + +interface ReferralStatsCardProps { + stats?: StatItem[]; +} + +const defaultStats: StatItem[] = [ + { + label: "Total Pods Earned", + value: 0, + description: "Pods earned from referrals", + }, + { + label: "Total successful referrals", + value: 0, + description: "Number of users who used your link", + }, + { + label: "Referral Ranking", + value: "-", + description: "Your rank among all referrers", + }, + { + label: "Total Pods created from referrals", + value: 0, + description: "Total Pods your referrals have earned", + }, + { + label: "Total Pinto Sown from referrals", + value: 0, + description: "Total Pinto your referrals have sown", + }, +]; + +export function ReferralStatsCard({ stats = defaultStats }: ReferralStatsCardProps) { + return ( +
      +
      Your Referral Stats
      +
      + {stats.map((stat) => ( +
      +
      {stat.label}
      +
      {stat.value}
      +
      + ))} +
      +
      + ); +} diff --git a/src/pages/Referral.tsx b/src/pages/Referral.tsx index f7e7ae101..b55b3eb85 100644 --- a/src/pages/Referral.tsx +++ b/src/pages/Referral.tsx @@ -1,4 +1,6 @@ +import { HowToCard } from "@/components/HowToCard"; import { ReferralLinkGenerator } from "@/components/ReferralLinkGenerator"; +import { ReferralStatsCard } from "@/components/ReferralStatsCard"; import { Card } from "@/components/ui/Card"; import PageContainer from "@/components/ui/PageContainer"; import { Separator } from "@/components/ui/Separator"; @@ -27,27 +29,22 @@ export default function Referral() { {/* Main Referral Cards - Two Column Layout */}
      - {/* Your Referral Link */} + {/* Invite via */} - {/* Your Referral Stats */} - -
      Your Referral Stats
      -
      -
      -
      Total Pods Earned
      -
      0
      -
      -
      -
      Successful Referrals
      -
      0
      -
      -
      + {/* How to */} + +
      + {/* Your Referral Stats - Standalone Section */} + + + + {/* Leaderboard */}
      Referral Leaderboard
      From 25eb501e62d442c16c3ccb0204c168edf2c081ac Mon Sep 17 00:00:00 2001 From: feyyazcigim Date: Mon, 1 Dec 2025 18:33:45 +0300 Subject: [PATCH 15/25] Implement referral system to UI --- src/assets/misc/telegram-logo.png | Bin 0 -> 197144 bytes src/assets/misc/x-logo.png | Bin 0 -> 102327 bytes src/components/DelegateReferralModal.tsx | 149 ++++++++++++ src/components/ReferralLeaderboard.tsx | 159 +++++++++++++ src/components/ReferralLinkGenerator.tsx | 170 +++++++------ src/components/ReferralStatsCard.tsx | 81 ++++--- src/constants/abi/diamondABI.ts | 201 ++++++++++++++++ src/pages/Referral.tsx | 18 +- .../beanstalk/ReferralLeaderboard.graphql | 16 ++ src/queries/beanstalk/ReferralPlots.graphql | 21 ++ src/state/useQueryKeys.ts | 5 +- src/state/useReferralData.ts | 59 +++++ src/state/useReferralLeaderboard.ts | 195 +++++++++++++++ src/state/useReferralStats.ts | 224 ++++++++++++++++++ src/utils/types.ts | 67 ++++++ 15 files changed, 1241 insertions(+), 124 deletions(-) create mode 100644 src/assets/misc/telegram-logo.png create mode 100644 src/assets/misc/x-logo.png create mode 100644 src/components/DelegateReferralModal.tsx create mode 100644 src/components/ReferralLeaderboard.tsx create mode 100644 src/queries/beanstalk/ReferralLeaderboard.graphql create mode 100644 src/queries/beanstalk/ReferralPlots.graphql create mode 100644 src/state/useReferralData.ts create mode 100644 src/state/useReferralLeaderboard.ts create mode 100644 src/state/useReferralStats.ts diff --git a/src/assets/misc/telegram-logo.png b/src/assets/misc/telegram-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e2402f9e525f1fb6b7a0c395c1ad770b97b69e32 GIT binary patch literal 197144 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 R(%5(?~CYw~sKI!QW7$^D7iL-woJ0c^MQ% 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%0AS#f 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 literal 0 HcmV?d00001 diff --git a/src/components/DelegateReferralModal.tsx b/src/components/DelegateReferralModal.tsx new file mode 100644 index 000000000..d004c0015 --- /dev/null +++ b/src/components/DelegateReferralModal.tsx @@ -0,0 +1,149 @@ +import { Button } from "@/components/ui/Button"; +import { Dialog, DialogContent, DialogHeader, DialogTitle } from "@/components/ui/Dialog"; +import { Input } from "@/components/ui/Input"; +import { + useSimulateBeanstalk_DelegateReferralRewards, + useWriteBeanstalk_DelegateReferralRewards, +} from "@/generated/contractHooks"; +import { getExplorerLink } from "@/utils/chain"; +import { CopyIcon } from "@radix-ui/react-icons"; +import { useEffect, useState } from "react"; +import { toast } from "sonner"; +import { isAddress } from "viem"; +import { useChainId, useWaitForTransactionReceipt } from "wagmi"; + +interface DelegateReferralModalProps { + isOpen: boolean; + onOpenChange: (open: boolean) => void; +} + +export function DelegateReferralModal({ isOpen, onOpenChange }: DelegateReferralModalProps) { + const [delegateAddress, setDelegateAddress] = useState(""); + const [error, setError] = useState(""); + const chainId = useChainId(); + + // Check if address is valid + const isValidAddress = delegateAddress.trim() && isAddress(delegateAddress); + + // Simulate the transaction + const { data: simulateData } = useSimulateBeanstalk_DelegateReferralRewards({ + args: isValidAddress ? [delegateAddress as `0x${string}`] : undefined, + query: { + enabled: !!isValidAddress, + }, + }); + + // Write contract + const { writeContract, data: hash, isPending } = useWriteBeanstalk_DelegateReferralRewards(); + + // Wait for transaction receipt + const { isLoading: isConfirming, isSuccess } = useWaitForTransactionReceipt({ + hash, + }); + + // Handle success + useEffect(() => { + if (isSuccess && hash) { + setDelegateAddress(""); + onOpenChange(false); + toast.dismiss(); + const explorerLink = getExplorerLink(hash, chainId); + toast.success( +

      + Delegate address updated successfully +
      + +
      { + navigator.clipboard.writeText(explorerLink); + toast.success("Link copied to clipboard"); + }} + > + +
      +
      +
      , + ); + } + }, [isSuccess, hash, chainId, onOpenChange]); + + const handleSubmit = () => { + // Validate address + if (!delegateAddress.trim()) { + setError("Please enter an address"); + return; + } + + if (!isAddress(delegateAddress)) { + setError("Invalid Ethereum address"); + return; + } + + setError(""); + + // Try with simulate data first, fallback to direct call + if (simulateData?.request) { + writeContract(simulateData.request); + } else { + // Fallback: call directly without simulation + writeContract({ + args: [delegateAddress as `0x${string}`], + }); + } + }; + + const handleReset = () => { + setError(""); + writeContract({ + args: ["0x0000000000000000000000000000000000000000" as `0x${string}`], + }); + }; + + return ( + + + + Change Pod Destination Address + + +
      +
      + + { + setDelegateAddress(e.target.value); + setError(""); + }} + placeholder="0x..." + outlined + className="text-sm" + containerClassName="border-pinto-green" + /> + {error && {error}} +
      + +
      + Enter the address where you want your referral reward Pods to be sent. You can reset to your own address by + clicking "Reset to My Address". +
      + +
      + + + +
      +
      +
      +
      + ); +} diff --git a/src/components/ReferralLeaderboard.tsx b/src/components/ReferralLeaderboard.tsx new file mode 100644 index 000000000..45c2cd2ed --- /dev/null +++ b/src/components/ReferralLeaderboard.tsx @@ -0,0 +1,159 @@ +import podIcon from "@/assets/protocol/Pod.png"; +import pintoIcon from "@/assets/tokens/PINTO.png"; +import FrameAnimator from "@/components/LoadingSpinner"; +import { Button } from "@/components/ui/Button"; +import { Card } from "@/components/ui/Card"; +import IconImage from "@/components/ui/IconImage"; +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/Table"; +import { useReferralLeaderboard } from "@/state/useReferralLeaderboard"; +import { formatter, truncateHex } from "@/utils/format"; +import { useState } from "react"; + +export default function ReferralLeaderboard() { + const { data, isLoading, error, refetch } = useReferralLeaderboard(); + const [currentPage, setCurrentPage] = useState(1); + const rowsPerPage = 25; + + // Calculate pagination values + const totalPages = data ? Math.ceil(data.length / rowsPerPage) : 0; + const newestEntryOnPage = (currentPage - 1) * rowsPerPage; + const oldestEntryOnPage = Math.min(currentPage * rowsPerPage, data?.length ?? 0); + + // Pagination handlers + const handleNextPage = () => { + if (currentPage < totalPages) { + setCurrentPage(currentPage + 1); + } + }; + + const handlePreviousPage = () => { + if (currentPage > 1) { + setCurrentPage(currentPage - 1); + } + }; + + // Get current page data + const currentPageData = data?.slice(newestEntryOnPage, oldestEntryOnPage); + + // Loading state + if (isLoading) { + return ( + +
      Referral Leaderboard
      +
      + +
      +
      + ); + } + + // Error state + if (error) { + return ( + +
      Referral Leaderboard
      +
      +
      Failed to load leaderboard data. Please try again.
      + +
      +
      + ); + } + + // Empty state + if (!data || data.length === 0) { + return ( + +
      Referral Leaderboard
      +
      + + + + No. + Name + Pods Earned + + Total Pinto Sown + + + Referrals + + + + + + +
      + No referral activity yet. Be the first to earn referral rewards! +
      +
      +
      +
      +
      +
      +
      + ); + } + + // Main table with data + return ( + +
      Referral Leaderboard
      +
      + + + + No. + Name + Pods Earned + + Total Pinto Sown + + Referrals + + + + {currentPageData?.map((entry) => ( + + {entry.rank} + {truncateHex(entry.farmer, 6, 4)} + +
      + +
      {formatter.noDec(entry.podsEarned)}
      +
      +
      + +
      + +
      {formatter.twoDec(entry.totalPintoSown)}
      +
      +
      + +
      {entry.refereeCount}
      +
      +
      + ))} +
      +
      +
      + + {/* Pagination controls */} + {totalPages > 1 && ( +
      + +
      + {currentPage} of {totalPages} +
      + +
      + )} +
      + ); +} diff --git a/src/components/ReferralLinkGenerator.tsx b/src/components/ReferralLinkGenerator.tsx index c70d67173..bcdac074a 100644 --- a/src/components/ReferralLinkGenerator.tsx +++ b/src/components/ReferralLinkGenerator.tsx @@ -1,25 +1,30 @@ +import telegramLogo from "@/assets/misc/telegram-logo.png"; +import xLogo from "@/assets/misc/x-logo.png"; +import { DelegateReferralModal } from "@/components/DelegateReferralModal"; import { Button } from "@/components/ui/Button"; import { Input } from "@/components/ui/Input"; import { ANALYTICS_EVENTS } from "@/constants/analytics-events"; +import { useReferralData } from "@/state/useReferralData"; import { trackSimpleEvent } from "@/utils/analytics"; import { truncateHex } from "@/utils/format"; import { encodeReferralAddress } from "@/utils/referral"; -import { CopyIcon, Share1Icon, ChatBubbleIcon, BarChartIcon } from "@radix-ui/react-icons"; +import { CopyIcon } from "@radix-ui/react-icons"; +import { useState } from "react"; import { toast } from "sonner"; import { useAccount } from "wagmi"; export function ReferralLinkGenerator() { const { address } = useAccount(); + const { delegateAddress } = useReferralData(); + const [isModalOpen, setIsModalOpen] = useState(false); if (!address) { - return ( -
      Connect your wallet to access referral features
      - ); + return
      Connect your wallet to access referral features
      ; } const referralCode = encodeReferralAddress(address); const referralUrl = `${window.location.origin}/field?ref=${referralCode}`; - const podDestinationAddress = address; + const podDestinationAddress = delegateAddress || address; const handleCopyCode = () => { navigator.clipboard.writeText(referralCode); @@ -42,8 +47,7 @@ export function ReferralLinkGenerator() { }; const handleChangeAddress = () => { - console.log("Change pod destination address clicked"); - toast.info("Change address functionality coming soon!"); + setIsModalOpen(true); }; const handleTwitterShare = () => { @@ -60,89 +64,115 @@ export function ReferralLinkGenerator() { const handleTelegramShare = () => { console.log("Telegram share clicked"); - toast.info("Telegram share functionality coming soon!"); - }; + const shareText = + "🌱 I'm farming on Pinto Protocol and earning passive rewards! Join me and I'll earn bonus Pods when you Sow Pinto 🫘 Start farming today"; + const telegramUrl = `https://t.me/share/url?url=${encodeURIComponent(referralUrl)}&text=${encodeURIComponent(shareText)}`; + window.open(telegramUrl, "_blank", "noopener,noreferrer"); - const handleQRCode = () => { - console.log("QR code clicked"); - toast.info("QR code functionality coming soon!"); + trackSimpleEvent(ANALYTICS_EVENTS.REFERRAL.LINK_SHARED, { + address, + platform: "telegram", + }); }; return ( -
      -
      Invite via
      - -
      - {/* Referral Code */} -
      - -
      - - -
      -
      + <> + - {/* Referral Link */} -
      - -
      - - -
      -
      - - {/* Pod Destination Address and Share via - Row Layout */} -
      - {/* Pod Destination Address */} -
      - -
      - {truncateHex(podDestinationAddress, 6, 4)} - -
      -
      +
      +
      Invite via
      - {/* Social Sharing Icons */} +
      + {/* Referral Code */}
      - -
      + +
      + +
      +
      + + {/* Referral Link */} +
      + +
      + -
      + + {/* Pod Destination Address and Share via - Row Layout */} +
      + {/* Pod Destination Address */} +
      + +
      + {truncateHex(podDestinationAddress, 6, 4)} + +
      +
      + + {/* Social Sharing Icons */} +
      + +
      + + +
      +
      +
      -
      + ); } diff --git a/src/components/ReferralStatsCard.tsx b/src/components/ReferralStatsCard.tsx index d0d58a30d..f2505fd41 100644 --- a/src/components/ReferralStatsCard.tsx +++ b/src/components/ReferralStatsCard.tsx @@ -1,47 +1,54 @@ -export interface StatItem { - label: string; - value: string | number; - description?: string; -} +import FrameAnimator from "@/components/LoadingSpinner"; +import { useReferralStats } from "@/state/useReferralStats"; +import { formatter } from "@/utils/format"; -interface ReferralStatsCardProps { - stats?: StatItem[]; -} +export function ReferralStatsCard() { + const { stats, isLoading } = useReferralStats(); + + if (isLoading) { + return ( +
      +
      Your Referral Stats
      +
      + +
      +
      + ); + } -const defaultStats: StatItem[] = [ - { - label: "Total Pods Earned", - value: 0, - description: "Pods earned from referrals", - }, - { - label: "Total successful referrals", - value: 0, - description: "Number of users who used your link", - }, - { - label: "Referral Ranking", - value: "-", - description: "Your rank among all referrers", - }, - { - label: "Total Pods created from referrals", - value: 0, - description: "Total Pods your referrals have earned", - }, - { - label: "Total Pinto Sown from referrals", - value: 0, - description: "Total Pinto your referrals have sown", - }, -]; + const statsData = [ + { + label: "Total Pods Earned", + value: stats ? formatter.noDec(stats.totalPodsEarned) : "0", + description: "Pods earned from referrals", + }, + { + label: "Total successful referrals", + value: stats?.totalReferrals ?? 0, + description: "Number of users who used your link", + }, + { + label: "Referral Ranking", + value: stats?.rank ?? "-", + description: "Your rank among all referrers", + }, + { + label: "Total Pods created from referrals", + value: stats ? formatter.noDec(stats.totalPodsCreated) : "0", + description: "Total Pods your referrals have earned", + }, + { + label: "Total Pinto Sown from referrals", + value: stats ? formatter.twoDec(stats.totalPintoSown) : "0.00", + description: "Total Pinto your referrals have sown", + }, + ]; -export function ReferralStatsCard({ stats = defaultStats }: ReferralStatsCardProps) { return (
      Your Referral Stats
      - {stats.map((stat) => ( + {statsData.map((stat) => (
      {stat.label}
      {stat.value}
      diff --git a/src/constants/abi/diamondABI.ts b/src/constants/abi/diamondABI.ts index 4bc1139d8..d29d196d0 100644 --- a/src/constants/abi/diamondABI.ts +++ b/src/constants/abi/diamondABI.ts @@ -10385,4 +10385,205 @@ export const diamondABI = [ stateMutability: "view", type: "function", }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "referrer", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "referrerIndex", + type: "uint256", + }, + { + indexed: false, + internalType: "uint256", + name: "referrerPods", + type: "uint256", + }, + { + indexed: true, + internalType: "address", + name: "referee", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "refereeIndex", + type: "uint256", + }, + { + indexed: false, + internalType: "uint256", + name: "refereePods", + type: "uint256", + }, + ], + name: "SowReferral", + type: "event", + }, + { + inputs: [ + { + internalType: "address", + name: "delegate", + type: "address", + }, + ], + name: "delegateReferralRewards", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "getBeanSownEligibilityThreshold", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "referrer", + type: "address", + }, + ], + name: "getBeansSownForReferral", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "referrer", + type: "address", + }, + ], + name: "getDelegate", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getRefereePercentage", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getReferrerPercentage", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "referrer", + type: "address", + }, + ], + name: "isValidReferrer", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "beans", + type: "uint256", + }, + { + internalType: "uint256", + name: "minTemperature", + type: "uint256", + }, + { + internalType: "uint256", + name: "minSoil", + type: "uint256", + }, + { + internalType: "enum LibTransfer.From", + name: "mode", + type: "uint8", + }, + { + internalType: "address", + name: "referral", + type: "address", + }, + ], + name: "sowWithReferral", + outputs: [ + { + internalType: "uint256", + name: "pods", + type: "uint256", + }, + { + internalType: "uint256", + name: "referrerPods", + type: "uint256", + }, + { + internalType: "uint256", + name: "refereePods", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, ] as const; diff --git a/src/pages/Referral.tsx b/src/pages/Referral.tsx index b55b3eb85..97ca5ef15 100644 --- a/src/pages/Referral.tsx +++ b/src/pages/Referral.tsx @@ -1,18 +1,12 @@ import { HowToCard } from "@/components/HowToCard"; +import ReferralLeaderboard from "@/components/ReferralLeaderboard"; import { ReferralLinkGenerator } from "@/components/ReferralLinkGenerator"; import { ReferralStatsCard } from "@/components/ReferralStatsCard"; import { Card } from "@/components/ui/Card"; import PageContainer from "@/components/ui/PageContainer"; import { Separator } from "@/components/ui/Separator"; -import { ANALYTICS_EVENTS } from "@/constants/analytics-events"; -import { trackSimpleEvent } from "@/utils/analytics"; -import { useEffect } from "react"; export default function Referral() { - useEffect(() => { - trackSimpleEvent(ANALYTICS_EVENTS.REFERRAL.PAGE_VIEWED); - }, []); - return (
      @@ -46,15 +40,7 @@ export default function Referral() { {/* Leaderboard */} - -
      Referral Leaderboard
      -
      -
      Leaderboard coming soon!
      -
      - See how you rank among top referrers in the Pinto community. -
      -
      -
      + {/* How It Works */} diff --git a/src/queries/beanstalk/ReferralLeaderboard.graphql b/src/queries/beanstalk/ReferralLeaderboard.graphql new file mode 100644 index 000000000..a284ad1b6 --- /dev/null +++ b/src/queries/beanstalk/ReferralLeaderboard.graphql @@ -0,0 +1,16 @@ +query ReferralLeaderboard( + $first: Int = 1000 + $skip: Int = 0 +) { + farmers( + first: $first + skip: $skip + orderBy: totalReferralRewardPodsReceived + orderDirection: desc + where: { totalReferralRewardPodsReceived_gt: "0" } + ) { + id + refereeCount + totalReferralRewardPodsReceived + } +} diff --git a/src/queries/beanstalk/ReferralPlots.graphql b/src/queries/beanstalk/ReferralPlots.graphql new file mode 100644 index 000000000..c4857d7f4 --- /dev/null +++ b/src/queries/beanstalk/ReferralPlots.graphql @@ -0,0 +1,21 @@ +query ReferralPlots( + $farmer: String! + $first: Int = 1000 + $skip: Int = 0 +) { + plots( + first: $first + skip: $skip + where: { + farmer: $farmer + source: REFERRAL + } + ) { + id + pods + index + farmer { + id + } + } +} diff --git a/src/state/useQueryKeys.ts b/src/state/useQueryKeys.ts index 03145caa0..26dc40965 100644 --- a/src/state/useQueryKeys.ts +++ b/src/state/useQueryKeys.ts @@ -31,6 +31,8 @@ export function useQueryKeys({ chainId, account, harvestableIndex }: UseQueryKey [chainId, account], ); + const referralLeaderboard = useMemo(() => ["referralLeaderboard", { chainId: chainId }], [chainId]); + return useMemo( () => ({ farmerField, @@ -38,7 +40,8 @@ export function useQueryKeys({ chainId, account, harvestableIndex }: UseQueryKey allPodOrders, allMarket, farmerMarket, + referralLeaderboard, }), - [farmerField, allPodListings, allPodOrders, allMarket, farmerMarket], + [farmerField, allPodListings, allPodOrders, allMarket, farmerMarket, referralLeaderboard], ); } diff --git a/src/state/useReferralData.ts b/src/state/useReferralData.ts new file mode 100644 index 000000000..e01cf8dae --- /dev/null +++ b/src/state/useReferralData.ts @@ -0,0 +1,59 @@ +import { beanstalkAbi } from "@/generated/contractHooks"; +import { useProtocolAddress } from "@/hooks/pinto/useProtocolAddress"; +import { useAccount, useReadContract } from "wagmi"; + +/** + * Return type for the useReferralData hook + */ +export interface UseReferralDataReturn { + /** Delegate address for pod rewards (where pods will be sent) */ + delegateAddress: `0x${string}` | undefined; + /** True while initial data is loading */ + isLoading: boolean; + /** Error object if the query failed */ + error: Error | null; +} + +/** + * Custom React hook to fetch referral-related data from the contract + * + * This hook fetches the delegate address which determines where referral + * reward pods will be sent. + * + * @returns {UseReferralDataReturn} Referral data and query state + * + * @example + * ```tsx + * function ReferralComponent() { + * const { delegateAddress, isLoading } = useReferralData(); + * + * if (isLoading) return ; + * + * return
      Pods will be sent to: {delegateAddress}
      ; + * } + * ``` + */ +export function useReferralData(): UseReferralDataReturn { + const { address } = useAccount(); + const protocolAddress = useProtocolAddress(); + + const { + data: delegateAddress, + isLoading, + error, + } = useReadContract({ + address: protocolAddress, + abi: beanstalkAbi, + functionName: "getDelegate", + args: address ? [address] : undefined, + query: { + enabled: !!address, + }, + }); + + return { + delegateAddress: delegateAddress as `0x${string}` | undefined, + isLoading, + error: error as Error | null, + }; +} diff --git a/src/state/useReferralLeaderboard.ts b/src/state/useReferralLeaderboard.ts new file mode 100644 index 000000000..c4d995b0b --- /dev/null +++ b/src/state/useReferralLeaderboard.ts @@ -0,0 +1,195 @@ +import { TokenValue } from "@/classes/TokenValue"; +import { PODS } from "@/constants/internalTokens"; +import { subgraphs } from "@/constants/subgraph"; +import { useQuery } from "@tanstack/react-query"; +import request, { gql } from "graphql-request"; +import { useMemo } from "react"; +import { useChainId } from "wagmi"; +import { useQueryKeys } from "./useQueryKeys"; + +/** + * Represents a single entry in the referral leaderboard + */ +export interface LeaderboardEntry { + /** Position in leaderboard (1-indexed) */ + rank: number; + /** Ethereum address of the farmer */ + farmer: string; + /** Total referral reward pods received */ + podsEarned: TokenValue; + /** Total Pinto sown by all referees */ + totalPintoSown: TokenValue; + /** Number of unique referees */ + refereeCount: number; +} + +/** + * Return type for the useReferralLeaderboard hook + */ +export interface UseReferralLeaderboardReturn { + /** Leaderboard data sorted by pods earned (descending) */ + data: LeaderboardEntry[] | undefined; + /** True while initial data is loading */ + isLoading: boolean; + /** True when data has been loaded at least once */ + isLoaded: boolean; + /** True while data is being fetched (including background refetches) */ + isFetching: boolean; + /** Error object if the query failed */ + error: Error | null; + /** Function to manually refetch the data */ + refetch: () => Promise; +} + +/** + * GraphQL query response types + */ +interface ReferralLeaderboardResponse { + farmers: Array<{ + id: string; + refereeCount: number; + totalReferralRewardPodsReceived: string; + }>; +} + +interface ReferralPlotsResponse { + plots: Array<{ + id: string; + pods: string; + index: string; + }>; +} + +/** + * GraphQL query for fetching farmers with referral data + */ +const REFERRAL_LEADERBOARD_QUERY = gql` + query ReferralLeaderboard($first: Int = 1000, $skip: Int = 0) { + farmers( + first: $first + skip: $skip + orderBy: totalReferralRewardPodsReceived + orderDirection: desc + where: { totalReferralRewardPodsReceived_gt: "0" } + ) { + id + refereeCount + totalReferralRewardPodsReceived + } + } +`; + +/** + * GraphQL query for fetching referral plots for a specific farmer + */ +const REFERRAL_PLOTS_QUERY = gql` + query ReferralPlots($farmer: String!, $first: Int = 1000, $skip: Int = 0) { + plots( + first: $first + skip: $skip + where: { farmer: $farmer, source: REFERRAL } + ) { + id + pods + index + } + } +`; + +/** + * Custom React hook to fetch and process referral leaderboard data from the subgraph + * + * This hook fetches farmers ordered by their referral reward pods and calculates + * the total Pinto sown by their referees. The data is cached and automatically + * refetched every 5 minutes. + * + * @returns {UseReferralLeaderboardReturn} Leaderboard data and query state + * + * @example + * ```tsx + * function LeaderboardComponent() { + * const { data, isLoading, error, refetch } = useReferralLeaderboard(); + * + * if (isLoading) return ; + * if (error) return ; + * + * return ( + * + * {data?.map(entry => ( + * + * + * + * + * + * ))} + *
      {entry.rank}{entry.farmer}{entry.podsEarned.toHuman()}
      + * ); + * } + * ``` + */ +export function useReferralLeaderboard(): UseReferralLeaderboardReturn { + const chainId = useChainId(); + const { referralLeaderboard: queryKey } = useQueryKeys({}); + + const query = useQuery({ + queryKey, + queryFn: async () => { + // Fetch farmers with referral data + const farmersResponse = await request( + subgraphs[chainId].beanstalk, + REFERRAL_LEADERBOARD_QUERY, + { first: 1000, skip: 0 }, + ); + + // Process each farmer and fetch their referral plots + const leaderboardEntries: LeaderboardEntry[] = await Promise.all( + farmersResponse.farmers.map(async (farmer, index) => { + // Fetch plots with source="REFERRAL" for this farmer + const plotsResponse = await request( + subgraphs[chainId].beanstalk, + REFERRAL_PLOTS_QUERY, + { farmer: farmer.id.toLowerCase(), first: 1000, skip: 0 }, + ); + + // Aggregate total Pinto sown from all referral plots + const totalPintoSown = plotsResponse.plots.reduce((sum, plot) => { + const plotPods = TokenValue.fromBlockchain(plot.pods, PODS.decimals); + return sum.add(plotPods); + }, TokenValue.ZERO); + + // Convert blockchain values to TokenValue instances + const podsEarned = TokenValue.fromBlockchain(farmer.totalReferralRewardPodsReceived, PODS.decimals); + + return { + rank: index + 1, // 1-indexed ranking + farmer: farmer.id, + podsEarned, + totalPintoSown, + refereeCount: farmer.refereeCount, + }; + }), + ); + + return leaderboardEntries; + }, + enabled: !!chainId, + staleTime: 5 * 60 * 1000, // 5 minutes + refetchInterval: 5 * 60 * 1000, // 5 minutes + }); + + const refetch = async () => { + await query.refetch(); + }; + + return useMemo( + () => ({ + data: query.data, + isLoading: query.isLoading, + isLoaded: query.isSuccess, + isFetching: query.isFetching, + error: query.error, + refetch, + }), + [query.data, query.isLoading, query.isSuccess, query.isFetching, query.error, refetch], + ); +} diff --git a/src/state/useReferralStats.ts b/src/state/useReferralStats.ts new file mode 100644 index 000000000..c212c6ec7 --- /dev/null +++ b/src/state/useReferralStats.ts @@ -0,0 +1,224 @@ +import { TokenValue } from "@/classes/TokenValue"; +import { PODS } from "@/constants/internalTokens"; +import { subgraphs } from "@/constants/subgraph"; +import { useQuery } from "@tanstack/react-query"; +import request, { gql } from "graphql-request"; +import { useMemo } from "react"; +import { useAccount, useChainId } from "wagmi"; +import { useQueryKeys } from "./useQueryKeys"; + +/** + * Referral stats for a specific user + */ +export interface ReferralStats { + /** Total Pods earned from referrals */ + totalPodsEarned: TokenValue; + /** Total successful referrals (referee count) */ + totalReferrals: number; + /** User's rank in the leaderboard (1-indexed, undefined if not ranked) */ + rank: number | undefined; + /** Total Pods created by referrals */ + totalPodsCreated: TokenValue; + /** Total Pinto sown by referrals */ + totalPintoSown: TokenValue; +} + +/** + * Return type for the useReferralStats hook + */ +export interface UseReferralStatsReturn { + /** Referral stats for the connected user */ + stats: ReferralStats | undefined; + /** True while initial data is loading */ + isLoading: boolean; + /** True when data has been loaded at least once */ + isLoaded: boolean; + /** Error object if the query failed */ + error: Error | null; + /** Function to manually refetch the data */ + refetch: () => Promise; +} + +/** + * GraphQL query response types + */ +interface FarmerStatsResponse { + farmer: { + id: string; + refereeCount: number; + totalReferralRewardPodsReceived: string; + } | null; +} + +interface ReferralPlotsResponse { + plots: Array<{ + id: string; + pods: string; + index: string; + }>; +} + +interface LeaderboardResponse { + farmers: Array<{ + id: string; + totalReferralRewardPodsReceived: string; + }>; +} + +/** + * GraphQL query for fetching a specific farmer's referral data + */ +const FARMER_STATS_QUERY = gql` + query FarmerStats($farmer: ID!) { + farmer(id: $farmer) { + id + refereeCount + totalReferralRewardPodsReceived + } + } +`; + +/** + * GraphQL query for fetching referral plots for a specific farmer + */ +const REFERRAL_PLOTS_QUERY = gql` + query ReferralPlots($farmer: String!, $first: Int = 1000, $skip: Int = 0) { + plots( + first: $first + skip: $skip + where: { farmer: $farmer, source: REFERRAL } + ) { + id + pods + index + } + } +`; + +/** + * GraphQL query for fetching leaderboard to calculate rank + */ +const LEADERBOARD_QUERY = gql` + query Leaderboard($first: Int = 1000, $skip: Int = 0) { + farmers( + first: $first + skip: $skip + orderBy: totalReferralRewardPodsReceived + orderDirection: desc + where: { totalReferralRewardPodsReceived_gt: "0" } + ) { + id + totalReferralRewardPodsReceived + } + } +`; + +/** + * Custom React hook to fetch referral stats for the connected user + * + * This hook fetches the user's referral data including pods earned, referee count, + * rank in leaderboard, and total pinto sown by referees. + * + * @returns {UseReferralStatsReturn} User's referral stats and query state + * + * @example + * ```tsx + * function StatsComponent() { + * const { stats, isLoading } = useReferralStats(); + * + * if (isLoading) return ; + * + * return ( + *
      + *

      Pods Earned: {stats?.totalPodsEarned.toHuman()}

      + *

      Referrals: {stats?.totalReferrals}

      + *

      Rank: {stats?.rank ?? 'Unranked'}

      + *
      + * ); + * } + * ``` + */ +export function useReferralStats(): UseReferralStatsReturn { + const { address } = useAccount(); + const chainId = useChainId(); + const { referralLeaderboard: queryKey } = useQueryKeys({}); + + const query = useQuery({ + queryKey: [...queryKey, address], + queryFn: async () => { + if (!address) return null; + + const farmerAddress = address.toLowerCase(); + + // Fetch farmer's stats + const farmerResponse = await request(subgraphs[chainId].beanstalk, FARMER_STATS_QUERY, { + farmer: farmerAddress, + }); + + // If farmer has no referral data, return zeros + if (!farmerResponse.farmer || farmerResponse.farmer.totalReferralRewardPodsReceived === "0") { + return { + totalPodsEarned: TokenValue.ZERO, + totalReferrals: 0, + rank: undefined, + totalPodsCreated: TokenValue.ZERO, + totalPintoSown: TokenValue.ZERO, + }; + } + + // Fetch referral plots to calculate total pinto sown + const plotsResponse = await request(subgraphs[chainId].beanstalk, REFERRAL_PLOTS_QUERY, { + farmer: farmerAddress, + first: 1000, + skip: 0, + }); + + // Calculate total pinto sown from plots + const totalPintoSown = plotsResponse.plots.reduce((sum, plot) => { + const plotPods = TokenValue.fromBlockchain(plot.pods, PODS.decimals); + return sum.add(plotPods); + }, TokenValue.ZERO); + + // Fetch leaderboard to calculate rank + const leaderboardResponse = await request(subgraphs[chainId].beanstalk, LEADERBOARD_QUERY, { + first: 1000, + skip: 0, + }); + + // Find user's rank + const rank = leaderboardResponse.farmers.findIndex((f) => f.id.toLowerCase() === farmerAddress); + + // Convert blockchain values to TokenValue + const totalPodsEarned = TokenValue.fromBlockchain( + farmerResponse.farmer.totalReferralRewardPodsReceived, + PODS.decimals, + ); + + return { + totalPodsEarned, + totalReferrals: farmerResponse.farmer.refereeCount, + rank: rank >= 0 ? rank + 1 : undefined, // 1-indexed + totalPodsCreated: totalPintoSown, // Pods created = Pinto sown (1:1 ratio) + totalPintoSown, + }; + }, + enabled: !!chainId && !!address, + staleTime: 5 * 60 * 1000, // 5 minutes + refetchInterval: 5 * 60 * 1000, // 5 minutes + }); + + const refetch = async () => { + await query.refetch(); + }; + + return useMemo( + () => ({ + stats: query.data ?? undefined, + isLoading: query.isLoading, + isLoaded: query.isSuccess, + error: query.error, + refetch, + }), + [query.data, query.isLoading, query.isSuccess, query.error, refetch], + ); +} diff --git a/src/utils/types.ts b/src/utils/types.ts index 8e65bcec4..26670e0bd 100644 --- a/src/utils/types.ts +++ b/src/utils/types.ts @@ -402,3 +402,70 @@ export interface MinimumViableBlock { number: T; timestamp: T; } + +// ---------- REFERRAL LEADERBOARD TYPES ---------- + +/** + * Farmer entity with referral-specific fields + */ +export interface ReferralFarmer { + /** Ethereum address of the farmer */ + id: string; + /** Number of farmers who used this farmer's referral link */ + refereeCount: number; + /** Total pods earned from referral rewards (as string for BigInt compatibility) */ + totalReferralRewardPodsReceived: string; +} + +/** + * Response type for ReferralLeaderboard query + */ +export interface ReferralLeaderboardQuery { + farmers: ReferralFarmer[]; +} + +/** + * Variables for ReferralLeaderboard query + */ +export interface ReferralLeaderboardQueryVariables { + /** Maximum number of farmers to return */ + first?: number; + /** Number of farmers to skip (for pagination) */ + skip?: number; +} + +/** + * Plot entity for referral-sourced plots + */ +export interface ReferralPlot { + /** Unique identifier for the plot */ + id: string; + /** Total pods in the plot (as string for BigInt compatibility) */ + pods: string; + /** Plot index */ + index: string; + /** Farmer who owns this plot */ + farmer: { + /** Ethereum address of the farmer */ + id: string; + }; +} + +/** + * Response type for ReferralPlots query + */ +export interface ReferralPlotsQuery { + plots: ReferralPlot[]; +} + +/** + * Variables for ReferralPlots query + */ +export interface ReferralPlotsQueryVariables { + /** Ethereum address of the farmer to query plots for */ + farmer: string; + /** Maximum number of plots to return */ + first?: number; + /** Number of plots to skip (for pagination) */ + skip?: number; +} From ed169c48073463ce8c860f29d53ce54c2538385c Mon Sep 17 00:00:00 2001 From: feyyazcigim Date: Wed, 10 Dec 2025 19:18:03 +0300 Subject: [PATCH 16/25] Change gql implementations --- src/components/ReferralLeaderboard.tsx | 51 +--- src/components/ReferralLinkGenerator.tsx | 2 +- src/components/ReferralStatsCard.tsx | 14 +- src/generated/contractHooks.ts | 282 ++++++++++++++++++ .../beanstalk/ReferralLeaderboard.graphql | 16 - src/queries/beanstalk/ReferralPlots.graphql | 21 -- .../referral/ReferralLeaderboard.graphql | 13 + .../referral/UserReferralHistory.graphql | 19 ++ .../referral/UserReferralProfile.graphql | 15 + src/state/referral/index.ts | 11 + src/state/{ => referral}/useReferralData.ts | 0 src/state/referral/useReferralHistory.ts | 183 ++++++++++++ src/state/referral/useReferralLeaderboard.ts | 84 ++++++ src/state/referral/useUserReferralProfile.ts | 152 ++++++++++ src/state/useQueryKeys.ts | 5 +- src/state/useReferralLeaderboard.ts | 195 ------------ src/state/useReferralStats.ts | 224 -------------- src/utils/referral.ts | 29 ++ 18 files changed, 810 insertions(+), 506 deletions(-) delete mode 100644 src/queries/beanstalk/ReferralLeaderboard.graphql delete mode 100644 src/queries/beanstalk/ReferralPlots.graphql create mode 100644 src/queries/beanstalk/referral/ReferralLeaderboard.graphql create mode 100644 src/queries/beanstalk/referral/UserReferralHistory.graphql create mode 100644 src/queries/beanstalk/referral/UserReferralProfile.graphql create mode 100644 src/state/referral/index.ts rename src/state/{ => referral}/useReferralData.ts (100%) create mode 100644 src/state/referral/useReferralHistory.ts create mode 100644 src/state/referral/useReferralLeaderboard.ts create mode 100644 src/state/referral/useUserReferralProfile.ts delete mode 100644 src/state/useReferralLeaderboard.ts delete mode 100644 src/state/useReferralStats.ts diff --git a/src/components/ReferralLeaderboard.tsx b/src/components/ReferralLeaderboard.tsx index 45c2cd2ed..b93958c6b 100644 --- a/src/components/ReferralLeaderboard.tsx +++ b/src/components/ReferralLeaderboard.tsx @@ -5,36 +5,28 @@ import { Button } from "@/components/ui/Button"; import { Card } from "@/components/ui/Card"; import IconImage from "@/components/ui/IconImage"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/Table"; -import { useReferralLeaderboard } from "@/state/useReferralLeaderboard"; +import { useReferralLeaderboard } from "@/state/referral"; import { formatter, truncateHex } from "@/utils/format"; import { useState } from "react"; export default function ReferralLeaderboard() { - const { data, isLoading, error, refetch } = useReferralLeaderboard(); - const [currentPage, setCurrentPage] = useState(1); + const [currentPage, setCurrentPage] = useState(0); const rowsPerPage = 25; - - // Calculate pagination values - const totalPages = data ? Math.ceil(data.length / rowsPerPage) : 0; - const newestEntryOnPage = (currentPage - 1) * rowsPerPage; - const oldestEntryOnPage = Math.min(currentPage * rowsPerPage, data?.length ?? 0); + const { data, isLoading, hasNextPage } = useReferralLeaderboard(rowsPerPage, currentPage); // Pagination handlers const handleNextPage = () => { - if (currentPage < totalPages) { + if (hasNextPage) { setCurrentPage(currentPage + 1); } }; const handlePreviousPage = () => { - if (currentPage > 1) { + if (currentPage > 0) { setCurrentPage(currentPage - 1); } }; - // Get current page data - const currentPageData = data?.slice(newestEntryOnPage, oldestEntryOnPage); - // Loading state if (isLoading) { return ( @@ -47,21 +39,6 @@ export default function ReferralLeaderboard() { ); } - // Error state - if (error) { - return ( - -
      Referral Leaderboard
      -
      -
      Failed to load leaderboard data. Please try again.
      - -
      -
      - ); - } - // Empty state if (!data || data.length === 0) { return ( @@ -115,10 +92,10 @@ export default function ReferralLeaderboard() { - {currentPageData?.map((entry) => ( - + {data?.map((entry) => ( + {entry.rank} - {truncateHex(entry.farmer, 6, 4)} + {truncateHex(entry.address, 6, 4)}
      @@ -132,7 +109,7 @@ export default function ReferralLeaderboard() {
      -
      {entry.refereeCount}
      +
      {entry.totalSuccessfulReferrals}
      ))} @@ -141,15 +118,13 @@ export default function ReferralLeaderboard() {
      {/* Pagination controls */} - {totalPages > 1 && ( + {(currentPage > 0 || hasNextPage) && (
      - -
      - {currentPage} of {totalPages} -
      -
      diff --git a/src/components/ReferralLinkGenerator.tsx b/src/components/ReferralLinkGenerator.tsx index bcdac074a..f110799de 100644 --- a/src/components/ReferralLinkGenerator.tsx +++ b/src/components/ReferralLinkGenerator.tsx @@ -4,7 +4,7 @@ import { DelegateReferralModal } from "@/components/DelegateReferralModal"; import { Button } from "@/components/ui/Button"; import { Input } from "@/components/ui/Input"; import { ANALYTICS_EVENTS } from "@/constants/analytics-events"; -import { useReferralData } from "@/state/useReferralData"; +import { useReferralData } from "@/state/referral"; import { trackSimpleEvent } from "@/utils/analytics"; import { truncateHex } from "@/utils/format"; import { encodeReferralAddress } from "@/utils/referral"; diff --git a/src/components/ReferralStatsCard.tsx b/src/components/ReferralStatsCard.tsx index f2505fd41..da4236a9a 100644 --- a/src/components/ReferralStatsCard.tsx +++ b/src/components/ReferralStatsCard.tsx @@ -1,9 +1,9 @@ import FrameAnimator from "@/components/LoadingSpinner"; -import { useReferralStats } from "@/state/useReferralStats"; +import { useUserReferralProfile } from "@/state/referral"; import { formatter } from "@/utils/format"; export function ReferralStatsCard() { - const { stats, isLoading } = useReferralStats(); + const { data, isLoading } = useUserReferralProfile(); if (isLoading) { return ( @@ -19,27 +19,27 @@ export function ReferralStatsCard() { const statsData = [ { label: "Total Pods Earned", - value: stats ? formatter.noDec(stats.totalPodsEarned) : "0", + value: data ? formatter.noDec(data.totalPodsEarned) : "0", description: "Pods earned from referrals", }, { label: "Total successful referrals", - value: stats?.totalReferrals ?? 0, + value: data?.totalSuccessfulReferrals ?? 0, description: "Number of users who used your link", }, { label: "Referral Ranking", - value: stats?.rank ?? "-", + value: data?.rankDisplay ?? "-", description: "Your rank among all referrers", }, { label: "Total Pods created from referrals", - value: stats ? formatter.noDec(stats.totalPodsCreated) : "0", + value: data ? formatter.noDec(data.totalPodsCreatedFromReferrals) : "0", description: "Total Pods your referrals have earned", }, { label: "Total Pinto Sown from referrals", - value: stats ? formatter.twoDec(stats.totalPintoSown) : "0.00", + value: data ? formatter.twoDec(data.totalPintoSownFromReferrals) : "0.00", description: "Total Pinto your referrals have sown", }, ]; diff --git a/src/generated/contractHooks.ts b/src/generated/contractHooks.ts index 6b1086fdc..26efd6000 100644 --- a/src/generated/contractHooks.ts +++ b/src/generated/contractHooks.ts @@ -6105,6 +6105,115 @@ export const beanstalkAbi = [ outputs: [{ name: '', internalType: 'string', type: 'string' }], stateMutability: 'view', }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'referrer', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'referrerIndex', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'referrerPods', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'referee', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'refereeIndex', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'refereePods', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'SowReferral', + }, + { + type: 'function', + inputs: [{ name: 'delegate', internalType: 'address', type: 'address' }], + name: 'delegateReferralRewards', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'getBeanSownEligibilityThreshold', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'referrer', internalType: 'address', type: 'address' }], + name: 'getBeansSownForReferral', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'referrer', internalType: 'address', type: 'address' }], + name: 'getDelegate', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'getRefereePercentage', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'getReferrerPercentage', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'referrer', internalType: 'address', type: 'address' }], + name: 'isValidReferrer', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'beans', internalType: 'uint256', type: 'uint256' }, + { name: 'minTemperature', internalType: 'uint256', type: 'uint256' }, + { name: 'minSoil', internalType: 'uint256', type: 'uint256' }, + { name: 'mode', internalType: 'enum LibTransfer.From', type: 'uint8' }, + { name: 'referral', internalType: 'address', type: 'address' }, + ], + name: 'sowWithReferral', + outputs: [ + { name: 'pods', internalType: 'uint256', type: 'uint256' }, + { name: 'referrerPods', internalType: 'uint256', type: 'uint256' }, + { name: 'refereePods', internalType: 'uint256', type: 'uint256' }, + ], + stateMutability: 'nonpayable', + }, ] as const /** @@ -13199,6 +13308,99 @@ export const useReadBeanstalk_Uri = /*#__PURE__*/ createUseReadContract({ functionName: 'uri', }) +/** + * Wraps __{@link useReadContract}__ with `abi` set to __{@link beanstalkAbi}__ and `functionName` set to `"getBeanSownEligibilityThreshold"` + * + * - [__View Contract on Ethereum Etherscan__](https://etherscan.io/address/0xC1E088fC1323b20BCBee9bd1B9fC9546db5624C5) + * - + * - [__View Contract on Base Basescan__](https://basescan.org/address/0xD1A0D188E861ed9d15773a2F3574a2e94134bA8f) + * - + * - [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xD1A0060ba708BC4BCD3DA6C37EFa8deDF015FB70) + */ +export const useReadBeanstalk_GetBeanSownEligibilityThreshold = + /*#__PURE__*/ createUseReadContract({ + abi: beanstalkAbi, + address: beanstalkAddress, + functionName: 'getBeanSownEligibilityThreshold', + }) + +/** + * Wraps __{@link useReadContract}__ with `abi` set to __{@link beanstalkAbi}__ and `functionName` set to `"getBeansSownForReferral"` + * + * - [__View Contract on Ethereum Etherscan__](https://etherscan.io/address/0xC1E088fC1323b20BCBee9bd1B9fC9546db5624C5) + * - + * - [__View Contract on Base Basescan__](https://basescan.org/address/0xD1A0D188E861ed9d15773a2F3574a2e94134bA8f) + * - + * - [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xD1A0060ba708BC4BCD3DA6C37EFa8deDF015FB70) + */ +export const useReadBeanstalk_GetBeansSownForReferral = + /*#__PURE__*/ createUseReadContract({ + abi: beanstalkAbi, + address: beanstalkAddress, + functionName: 'getBeansSownForReferral', + }) + +/** + * Wraps __{@link useReadContract}__ with `abi` set to __{@link beanstalkAbi}__ and `functionName` set to `"getDelegate"` + * + * - [__View Contract on Ethereum Etherscan__](https://etherscan.io/address/0xC1E088fC1323b20BCBee9bd1B9fC9546db5624C5) + * - + * - [__View Contract on Base Basescan__](https://basescan.org/address/0xD1A0D188E861ed9d15773a2F3574a2e94134bA8f) + * - + * - [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xD1A0060ba708BC4BCD3DA6C37EFa8deDF015FB70) + */ +export const useReadBeanstalk_GetDelegate = /*#__PURE__*/ createUseReadContract( + { abi: beanstalkAbi, address: beanstalkAddress, functionName: 'getDelegate' }, +) + +/** + * Wraps __{@link useReadContract}__ with `abi` set to __{@link beanstalkAbi}__ and `functionName` set to `"getRefereePercentage"` + * + * - [__View Contract on Ethereum Etherscan__](https://etherscan.io/address/0xC1E088fC1323b20BCBee9bd1B9fC9546db5624C5) + * - + * - [__View Contract on Base Basescan__](https://basescan.org/address/0xD1A0D188E861ed9d15773a2F3574a2e94134bA8f) + * - + * - [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xD1A0060ba708BC4BCD3DA6C37EFa8deDF015FB70) + */ +export const useReadBeanstalk_GetRefereePercentage = + /*#__PURE__*/ createUseReadContract({ + abi: beanstalkAbi, + address: beanstalkAddress, + functionName: 'getRefereePercentage', + }) + +/** + * Wraps __{@link useReadContract}__ with `abi` set to __{@link beanstalkAbi}__ and `functionName` set to `"getReferrerPercentage"` + * + * - [__View Contract on Ethereum Etherscan__](https://etherscan.io/address/0xC1E088fC1323b20BCBee9bd1B9fC9546db5624C5) + * - + * - [__View Contract on Base Basescan__](https://basescan.org/address/0xD1A0D188E861ed9d15773a2F3574a2e94134bA8f) + * - + * - [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xD1A0060ba708BC4BCD3DA6C37EFa8deDF015FB70) + */ +export const useReadBeanstalk_GetReferrerPercentage = + /*#__PURE__*/ createUseReadContract({ + abi: beanstalkAbi, + address: beanstalkAddress, + functionName: 'getReferrerPercentage', + }) + +/** + * Wraps __{@link useReadContract}__ with `abi` set to __{@link beanstalkAbi}__ and `functionName` set to `"isValidReferrer"` + * + * - [__View Contract on Ethereum Etherscan__](https://etherscan.io/address/0xC1E088fC1323b20BCBee9bd1B9fC9546db5624C5) + * - + * - [__View Contract on Base Basescan__](https://basescan.org/address/0xD1A0D188E861ed9d15773a2F3574a2e94134bA8f) + * - + * - [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xD1A0060ba708BC4BCD3DA6C37EFa8deDF015FB70) + */ +export const useReadBeanstalk_IsValidReferrer = + /*#__PURE__*/ createUseReadContract({ + abi: beanstalkAbi, + address: beanstalkAddress, + functionName: 'isValidReferrer', + }) + /** * Wraps __{@link useWriteContract}__ with `abi` set to __{@link beanstalkAbi}__ * @@ -14403,6 +14605,38 @@ export const useWriteBeanstalk_Sunrise = /*#__PURE__*/ createUseWriteContract({ functionName: 'sunrise', }) +/** + * Wraps __{@link useWriteContract}__ with `abi` set to __{@link beanstalkAbi}__ and `functionName` set to `"delegateReferralRewards"` + * + * - [__View Contract on Ethereum Etherscan__](https://etherscan.io/address/0xC1E088fC1323b20BCBee9bd1B9fC9546db5624C5) + * - + * - [__View Contract on Base Basescan__](https://basescan.org/address/0xD1A0D188E861ed9d15773a2F3574a2e94134bA8f) + * - + * - [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xD1A0060ba708BC4BCD3DA6C37EFa8deDF015FB70) + */ +export const useWriteBeanstalk_DelegateReferralRewards = + /*#__PURE__*/ createUseWriteContract({ + abi: beanstalkAbi, + address: beanstalkAddress, + functionName: 'delegateReferralRewards', + }) + +/** + * Wraps __{@link useWriteContract}__ with `abi` set to __{@link beanstalkAbi}__ and `functionName` set to `"sowWithReferral"` + * + * - [__View Contract on Ethereum Etherscan__](https://etherscan.io/address/0xC1E088fC1323b20BCBee9bd1B9fC9546db5624C5) + * - + * - [__View Contract on Base Basescan__](https://basescan.org/address/0xD1A0D188E861ed9d15773a2F3574a2e94134bA8f) + * - + * - [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xD1A0060ba708BC4BCD3DA6C37EFa8deDF015FB70) + */ +export const useWriteBeanstalk_SowWithReferral = + /*#__PURE__*/ createUseWriteContract({ + abi: beanstalkAbi, + address: beanstalkAddress, + functionName: 'sowWithReferral', + }) + /** * Wraps __{@link useSimulateContract}__ with `abi` set to __{@link beanstalkAbi}__ * @@ -15627,6 +15861,38 @@ export const useSimulateBeanstalk_Sunrise = functionName: 'sunrise', }) +/** + * Wraps __{@link useSimulateContract}__ with `abi` set to __{@link beanstalkAbi}__ and `functionName` set to `"delegateReferralRewards"` + * + * - [__View Contract on Ethereum Etherscan__](https://etherscan.io/address/0xC1E088fC1323b20BCBee9bd1B9fC9546db5624C5) + * - + * - [__View Contract on Base Basescan__](https://basescan.org/address/0xD1A0D188E861ed9d15773a2F3574a2e94134bA8f) + * - + * - [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xD1A0060ba708BC4BCD3DA6C37EFa8deDF015FB70) + */ +export const useSimulateBeanstalk_DelegateReferralRewards = + /*#__PURE__*/ createUseSimulateContract({ + abi: beanstalkAbi, + address: beanstalkAddress, + functionName: 'delegateReferralRewards', + }) + +/** + * Wraps __{@link useSimulateContract}__ with `abi` set to __{@link beanstalkAbi}__ and `functionName` set to `"sowWithReferral"` + * + * - [__View Contract on Ethereum Etherscan__](https://etherscan.io/address/0xC1E088fC1323b20BCBee9bd1B9fC9546db5624C5) + * - + * - [__View Contract on Base Basescan__](https://basescan.org/address/0xD1A0D188E861ed9d15773a2F3574a2e94134bA8f) + * - + * - [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xD1A0060ba708BC4BCD3DA6C37EFa8deDF015FB70) + */ +export const useSimulateBeanstalk_SowWithReferral = + /*#__PURE__*/ createUseSimulateContract({ + abi: beanstalkAbi, + address: beanstalkAddress, + functionName: 'sowWithReferral', + }) + /** * Wraps __{@link useWatchContractEvent}__ with `abi` set to __{@link beanstalkAbi}__ * @@ -16805,6 +17071,22 @@ export const useWatchBeanstalk_Uri = /*#__PURE__*/ createUseWatchContractEvent({ eventName: 'URI', }) +/** + * Wraps __{@link useWatchContractEvent}__ with `abi` set to __{@link beanstalkAbi}__ and `eventName` set to `"SowReferral"` + * + * - [__View Contract on Ethereum Etherscan__](https://etherscan.io/address/0xC1E088fC1323b20BCBee9bd1B9fC9546db5624C5) + * - + * - [__View Contract on Base Basescan__](https://basescan.org/address/0xD1A0D188E861ed9d15773a2F3574a2e94134bA8f) + * - + * - [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xD1A0060ba708BC4BCD3DA6C37EFa8deDF015FB70) + */ +export const useWatchBeanstalk_SowReferral = + /*#__PURE__*/ createUseWatchContractEvent({ + abi: beanstalkAbi, + address: beanstalkAddress, + eventName: 'SowReferral', + }) + /** * Wraps __{@link useReadContract}__ with `abi` set to __{@link beanstalkPriceAbi}__ * diff --git a/src/queries/beanstalk/ReferralLeaderboard.graphql b/src/queries/beanstalk/ReferralLeaderboard.graphql deleted file mode 100644 index a284ad1b6..000000000 --- a/src/queries/beanstalk/ReferralLeaderboard.graphql +++ /dev/null @@ -1,16 +0,0 @@ -query ReferralLeaderboard( - $first: Int = 1000 - $skip: Int = 0 -) { - farmers( - first: $first - skip: $skip - orderBy: totalReferralRewardPodsReceived - orderDirection: desc - where: { totalReferralRewardPodsReceived_gt: "0" } - ) { - id - refereeCount - totalReferralRewardPodsReceived - } -} diff --git a/src/queries/beanstalk/ReferralPlots.graphql b/src/queries/beanstalk/ReferralPlots.graphql deleted file mode 100644 index c4857d7f4..000000000 --- a/src/queries/beanstalk/ReferralPlots.graphql +++ /dev/null @@ -1,21 +0,0 @@ -query ReferralPlots( - $farmer: String! - $first: Int = 1000 - $skip: Int = 0 -) { - plots( - first: $first - skip: $skip - where: { - farmer: $farmer - source: REFERRAL - } - ) { - id - pods - index - farmer { - id - } - } -} diff --git a/src/queries/beanstalk/referral/ReferralLeaderboard.graphql b/src/queries/beanstalk/referral/ReferralLeaderboard.graphql new file mode 100644 index 000000000..9468609d5 --- /dev/null +++ b/src/queries/beanstalk/referral/ReferralLeaderboard.graphql @@ -0,0 +1,13 @@ +query ReferralLeaderboard($first: Int!, $skip: Int!) { + referrerProfiles( + first: $first + skip: $skip + orderBy: totalPodsEarned + orderDirection: desc + ) { + id + totalPodsEarned + totalPintoSownFromReferrals + totalSuccessfulReferrals + } +} diff --git a/src/queries/beanstalk/referral/UserReferralHistory.graphql b/src/queries/beanstalk/referral/UserReferralHistory.graphql new file mode 100644 index 000000000..82cc652c5 --- /dev/null +++ b/src/queries/beanstalk/referral/UserReferralHistory.graphql @@ -0,0 +1,19 @@ +query UserReferralHistory($referrer: Bytes!, $first: Int!) { + referralSows( + where: { referrer: $referrer } + first: $first + orderBy: blockNumber + orderDirection: desc + ) { + id + referrer + referrerIndex + referrerPods + referee + refereeIndex + refereePods + blockNumber + transactionHash + createdAt + } +} diff --git a/src/queries/beanstalk/referral/UserReferralProfile.graphql b/src/queries/beanstalk/referral/UserReferralProfile.graphql new file mode 100644 index 000000000..494da0bb3 --- /dev/null +++ b/src/queries/beanstalk/referral/UserReferralProfile.graphql @@ -0,0 +1,15 @@ +query UserReferralProfile($account: Bytes!) { + referrerProfile(id: $account) { + id + totalPodsEarned + totalSuccessfulReferrals + totalPodsCreatedFromReferrals + totalPintoSownFromReferrals + firstReferralTimestamp + lastReferralTimestamp + } + globalReferralStats(id: "global") { + totalReferrers + totalReferralSows + } +} diff --git a/src/state/referral/index.ts b/src/state/referral/index.ts new file mode 100644 index 000000000..770cbefa1 --- /dev/null +++ b/src/state/referral/index.ts @@ -0,0 +1,11 @@ +export { useUserReferralProfile } from "./useUserReferralProfile"; +export type { UserReferralProfile, UseUserReferralProfileReturn } from "./useUserReferralProfile"; + +export { useReferralLeaderboard } from "./useReferralLeaderboard"; +export type { LeaderboardEntry, UseReferralLeaderboardReturn } from "./useReferralLeaderboard"; + +export { useReferralHistory } from "./useReferralHistory"; +export type { ReferralHistoryEntry, UseReferralHistoryReturn } from "./useReferralHistory"; + +export { useReferralData } from "./useReferralData"; +export type { UseReferralDataReturn } from "./useReferralData"; diff --git a/src/state/useReferralData.ts b/src/state/referral/useReferralData.ts similarity index 100% rename from src/state/useReferralData.ts rename to src/state/referral/useReferralData.ts diff --git a/src/state/referral/useReferralHistory.ts b/src/state/referral/useReferralHistory.ts new file mode 100644 index 000000000..d782b2548 --- /dev/null +++ b/src/state/referral/useReferralHistory.ts @@ -0,0 +1,183 @@ +import { TokenValue } from "@/classes/TokenValue"; +import { PODS } from "@/constants/internalTokens"; +import { subgraphs } from "@/constants/subgraph"; +import { calculatePintoSown, calculateTotalPodsCreated } from "@/utils/referral"; +// TODO: Uncomment after subgraph is deployed and codegen is run +// import { UserReferralHistoryDocument } from "@/generated/gql/pintostalk/graphql"; +import { useQuery } from "@tanstack/react-query"; +import request, { gql } from "graphql-request"; +import { useAccount, useChainId } from "wagmi"; +import useTokenData from "../useTokenData"; + +// TODO: Remove after codegen - temporary inline query +const UserReferralHistoryDocument = gql` + query UserReferralHistory($referrer: Bytes!, $first: Int!) { + referralSows( + where: { referrer: $referrer } + first: $first + orderBy: blockNumber + orderDirection: desc + ) { + id + referrer + referrerIndex + referrerPods + referee + refereeIndex + refereePods + blockNumber + transactionHash + createdAt + } + } +`; + +// Query to get season data from field snapshots +const SeasonFromBlockDocument = gql` + query SeasonFromBlock($blockNumber: BigInt!) { + fieldHourlySnapshots( + first: 1 + where: { blockNumber_lte: $blockNumber } + orderBy: blockNumber + orderDirection: desc + ) { + season + temperature + } + } +`; + +interface UserReferralHistoryResponse { + referralSows: Array<{ + id: string; + referrer: string; + referrerIndex: string; + referrerPods: string; + referee: string; + refereeIndex: string; + refereePods: string; + blockNumber: string; + transactionHash: string; + createdAt: string; + }>; +} + +interface SeasonFromBlockResponse { + fieldHourlySnapshots: Array<{ + season: number; + temperature: number; + }>; +} + +export interface ReferralHistoryEntry { + id: string; + referrer: string; + referrerIndex: string; + referrerPods: TokenValue; + referee: string; + refereeIndex: string; + refereePods: TokenValue; + totalPodsCreated: TokenValue; + pintoSown: TokenValue; + season: number | null; + temperature: number | null; + blockNumber: string; + transactionHash: string; + timestamp: Date; +} + +export interface UseReferralHistoryReturn { + data: ReferralHistoryEntry[]; + isLoading: boolean; + queryKey: string[]; +} + +export function useReferralHistory(limit = 100): UseReferralHistoryReturn { + const chainId = useChainId(); + const { address } = useAccount(); + const tokenData = useTokenData(); + + const queryKey = ["referralHistory", chainId.toString(), address ?? "", limit.toString()]; + + const query = useQuery({ + queryKey, + queryFn: async () => { + // First, fetch referral sows + const sowsData = await request( + subgraphs[chainId].beanstalk, + UserReferralHistoryDocument, + { referrer: address?.toLowerCase() as `0x${string}`, first: limit }, + ); + + // For each sow, try to get season/temperature data + const entriesWithSeasonData = await Promise.all( + sowsData.referralSows.map(async (sow) => { + let season: number | null = null; + let temperature: number | null = null; + + try { + // Try to get season data from field snapshots + const seasonData = await request( + subgraphs[chainId].beanstalk, + SeasonFromBlockDocument, + { blockNumber: sow.blockNumber }, + ); + + if (seasonData.fieldHourlySnapshots.length > 0) { + season = seasonData.fieldHourlySnapshots[0].season; + temperature = seasonData.fieldHourlySnapshots[0].temperature; + } + } catch (e) { + // If season lookup fails, continue without it + console.warn("Failed to fetch season data for block:", sow.blockNumber); + } + + return { ...sow, season, temperature }; + }), + ); + + return entriesWithSeasonData; + }, + enabled: !!address, + select: (data) => { + return data.map((sow) => { + const referrerPods = TokenValue.fromBlockchain(sow.referrerPods, PODS.decimals); + const refereePods = TokenValue.fromBlockchain(sow.refereePods, PODS.decimals); + + // Client-side calculation: totalPodsCreated = referrerPods + refereePods + const totalPodsCreatedStr = calculateTotalPodsCreated(sow.referrerPods, sow.refereePods); + const totalPodsCreated = TokenValue.fromBlockchain(totalPodsCreatedStr, PODS.decimals); + + // Client-side calculation: pintoSown = refereePods / (1 + temperature/100) + let pintoSown = TokenValue.ZERO; + if (sow.temperature !== null) { + const pintoSownStr = calculatePintoSown(sow.refereePods, sow.temperature); + pintoSown = TokenValue.fromBlockchain(pintoSownStr, tokenData.mainToken.decimals); + } + + return { + id: sow.id, + referrer: sow.referrer, + referrerIndex: sow.referrerIndex, + referrerPods, + referee: sow.referee, + refereeIndex: sow.refereeIndex, + refereePods, + totalPodsCreated, + pintoSown, + season: sow.season, + temperature: sow.temperature, + blockNumber: sow.blockNumber, + transactionHash: sow.transactionHash, + timestamp: new Date(Number(sow.createdAt) * 1000), + }; + }); + }, + }); + + return { + data: query.data || [], + isLoading: query.isLoading, + queryKey, + }; +} diff --git a/src/state/referral/useReferralLeaderboard.ts b/src/state/referral/useReferralLeaderboard.ts new file mode 100644 index 000000000..b1f25a419 --- /dev/null +++ b/src/state/referral/useReferralLeaderboard.ts @@ -0,0 +1,84 @@ +import { TokenValue } from "@/classes/TokenValue"; +import { PODS } from "@/constants/internalTokens"; +import { subgraphs } from "@/constants/subgraph"; +// TODO: Uncomment after subgraph is deployed and codegen is run +// import { ReferralLeaderboardDocument } from "@/generated/gql/pintostalk/graphql"; +import { useQuery } from "@tanstack/react-query"; +import request, { gql } from "graphql-request"; +import { useChainId } from "wagmi"; +import useTokenData from "../useTokenData"; + +// TODO: Remove after codegen - temporary inline query +const ReferralLeaderboardDocument = gql` + query ReferralLeaderboard($first: Int!, $skip: Int!) { + referrerProfiles( + first: $first + skip: $skip + orderBy: totalPodsEarned + orderDirection: desc + ) { + id + totalPodsEarned + totalPintoSownFromReferrals + totalSuccessfulReferrals + } + } +`; + +interface ReferralLeaderboardResponse { + referrerProfiles: Array<{ + id: string; + totalPodsEarned: string; + totalPintoSownFromReferrals: string; + totalSuccessfulReferrals: number; + }>; +} + +export interface LeaderboardEntry { + address: string; + podsEarned: TokenValue; + totalPintoSown: TokenValue; + totalSuccessfulReferrals: number; + rank: number; +} + +export interface UseReferralLeaderboardReturn { + data: LeaderboardEntry[]; + isLoading: boolean; + hasNextPage: boolean; +} + +export function useReferralLeaderboard(pageSize = 50, page = 0): UseReferralLeaderboardReturn { + const chainId = useChainId(); + const tokenData = useTokenData(); + const skip = page * pageSize; + + const queryKey = ["referralLeaderboard", chainId.toString(), page.toString(), pageSize.toString()]; + + const query = useQuery({ + queryKey, + queryFn: async () => + request(subgraphs[chainId].beanstalk, ReferralLeaderboardDocument, { + first: pageSize, + skip, + }), + select: (data) => { + // Client-side rank calculation based on skip + index + const entries: LeaderboardEntry[] = data.referrerProfiles.map((profile, index) => ({ + address: profile.id, + podsEarned: TokenValue.fromBlockchain(profile.totalPodsEarned, PODS.decimals), + totalPintoSown: TokenValue.fromBlockchain(profile.totalPintoSownFromReferrals, tokenData.mainToken.decimals), + totalSuccessfulReferrals: profile.totalSuccessfulReferrals, + rank: skip + index + 1, + })); + + return entries; + }, + }); + + return { + data: query.data || [], + isLoading: query.isLoading, + hasNextPage: query.data ? query.data.length === pageSize : false, + }; +} diff --git a/src/state/referral/useUserReferralProfile.ts b/src/state/referral/useUserReferralProfile.ts new file mode 100644 index 000000000..aff6e4e2c --- /dev/null +++ b/src/state/referral/useUserReferralProfile.ts @@ -0,0 +1,152 @@ +import { TokenValue } from "@/classes/TokenValue"; +import { PODS } from "@/constants/internalTokens"; +import { subgraphs } from "@/constants/subgraph"; +// TODO: Uncomment after subgraph is deployed and codegen is run +// import { UserReferralProfileDocument } from "@/generated/gql/pintostalk/graphql"; +import { useQuery } from "@tanstack/react-query"; +import request, { gql } from "graphql-request"; +import { useAccount, useChainId } from "wagmi"; +import useTokenData from "../useTokenData"; + +// TODO: Remove after codegen - temporary inline query +const UserReferralProfileDocument = gql` + query UserReferralProfile($account: Bytes!) { + referrerProfile(id: $account) { + id + totalPodsEarned + totalSuccessfulReferrals + totalPodsCreatedFromReferrals + totalPintoSownFromReferrals + firstReferralTimestamp + lastReferralTimestamp + } + globalReferralStats(id: "global") { + totalReferrers + totalReferralSows + } + } +`; + +// Query to calculate rank by counting profiles with more pods +const RankCalculationDocument = gql` + query RankCalculation($totalPodsEarned: BigInt!) { + referrerProfiles( + where: { totalPodsEarned_gt: $totalPodsEarned } + ) { + id + } + } +`; + +interface UserReferralProfileResponse { + referrerProfile: { + id: string; + totalPodsEarned: string; + totalSuccessfulReferrals: number; + totalPodsCreatedFromReferrals: string; + totalPintoSownFromReferrals: string; + firstReferralTimestamp: string; + lastReferralTimestamp: string; + } | null; + globalReferralStats: { + totalReferrers: number; + totalReferralSows: number; + } | null; +} + +interface RankCalculationResponse { + referrerProfiles: Array<{ id: string }>; +} + +export interface UserReferralProfile { + podDestinationAddress: string; + totalPodsEarned: TokenValue; + totalSuccessfulReferrals: number; + rank: number; + totalReferrers: number; + rankDisplay: string; + totalReferralSows: number; + totalPodsCreatedFromReferrals: TokenValue; + totalPintoSownFromReferrals: TokenValue; + firstReferralDate: Date; + lastReferralDate: Date; +} + +export interface UseUserReferralProfileReturn { + data: UserReferralProfile | null; + isLoading: boolean; + isError: boolean; + queryKey: string[]; +} + +export function useUserReferralProfile(): UseUserReferralProfileReturn { + const chainId = useChainId(); + const { address } = useAccount(); + const tokenData = useTokenData(); + + const queryKey = ["userReferralProfile", chainId.toString(), address ?? ""]; + + const query = useQuery({ + queryKey, + queryFn: async () => { + // First, fetch user profile + const profileData = await request( + subgraphs[chainId].beanstalk, + UserReferralProfileDocument, + { account: address?.toLowerCase() as `0x${string}` }, + ); + + if (!profileData.referrerProfile) { + return null; + } + + // Client-side rank calculation: count profiles with more pods + 1 + let rank = 1; + try { + const rankData = await request(subgraphs[chainId].beanstalk, RankCalculationDocument, { + totalPodsEarned: profileData.referrerProfile.totalPodsEarned, + }); + rank = rankData.referrerProfiles.length + 1; + } catch (e) { + console.warn("Failed to calculate rank:", e); + } + + return { + profile: profileData.referrerProfile, + globalStats: profileData.globalReferralStats, + rank, + }; + }, + enabled: !!address, + select: (data) => { + if (!data) return null; + + const { profile, globalStats, rank } = data; + const totalReferrers = globalStats?.totalReferrers || 0; + + return { + podDestinationAddress: profile.id, + totalPodsEarned: TokenValue.fromBlockchain(profile.totalPodsEarned, PODS.decimals), + totalSuccessfulReferrals: profile.totalSuccessfulReferrals, + rank, + totalReferrers, + rankDisplay: `#${rank}/${totalReferrers}`, + totalReferralSows: globalStats?.totalReferralSows || 0, + totalPodsCreatedFromReferrals: TokenValue.fromBlockchain(profile.totalPodsCreatedFromReferrals, PODS.decimals), + totalPintoSownFromReferrals: TokenValue.fromBlockchain( + profile.totalPintoSownFromReferrals, + tokenData.mainToken.decimals, + ), + firstReferralDate: new Date(Number(profile.firstReferralTimestamp) * 1000), + lastReferralDate: new Date(Number(profile.lastReferralTimestamp) * 1000), + }; + }, + }); + + return { + data: query.data ?? null, + isLoading: query.isLoading, + isError: query.isError, + queryKey, + }; +} diff --git a/src/state/useQueryKeys.ts b/src/state/useQueryKeys.ts index 26dc40965..03145caa0 100644 --- a/src/state/useQueryKeys.ts +++ b/src/state/useQueryKeys.ts @@ -31,8 +31,6 @@ export function useQueryKeys({ chainId, account, harvestableIndex }: UseQueryKey [chainId, account], ); - const referralLeaderboard = useMemo(() => ["referralLeaderboard", { chainId: chainId }], [chainId]); - return useMemo( () => ({ farmerField, @@ -40,8 +38,7 @@ export function useQueryKeys({ chainId, account, harvestableIndex }: UseQueryKey allPodOrders, allMarket, farmerMarket, - referralLeaderboard, }), - [farmerField, allPodListings, allPodOrders, allMarket, farmerMarket, referralLeaderboard], + [farmerField, allPodListings, allPodOrders, allMarket, farmerMarket], ); } diff --git a/src/state/useReferralLeaderboard.ts b/src/state/useReferralLeaderboard.ts deleted file mode 100644 index c4d995b0b..000000000 --- a/src/state/useReferralLeaderboard.ts +++ /dev/null @@ -1,195 +0,0 @@ -import { TokenValue } from "@/classes/TokenValue"; -import { PODS } from "@/constants/internalTokens"; -import { subgraphs } from "@/constants/subgraph"; -import { useQuery } from "@tanstack/react-query"; -import request, { gql } from "graphql-request"; -import { useMemo } from "react"; -import { useChainId } from "wagmi"; -import { useQueryKeys } from "./useQueryKeys"; - -/** - * Represents a single entry in the referral leaderboard - */ -export interface LeaderboardEntry { - /** Position in leaderboard (1-indexed) */ - rank: number; - /** Ethereum address of the farmer */ - farmer: string; - /** Total referral reward pods received */ - podsEarned: TokenValue; - /** Total Pinto sown by all referees */ - totalPintoSown: TokenValue; - /** Number of unique referees */ - refereeCount: number; -} - -/** - * Return type for the useReferralLeaderboard hook - */ -export interface UseReferralLeaderboardReturn { - /** Leaderboard data sorted by pods earned (descending) */ - data: LeaderboardEntry[] | undefined; - /** True while initial data is loading */ - isLoading: boolean; - /** True when data has been loaded at least once */ - isLoaded: boolean; - /** True while data is being fetched (including background refetches) */ - isFetching: boolean; - /** Error object if the query failed */ - error: Error | null; - /** Function to manually refetch the data */ - refetch: () => Promise; -} - -/** - * GraphQL query response types - */ -interface ReferralLeaderboardResponse { - farmers: Array<{ - id: string; - refereeCount: number; - totalReferralRewardPodsReceived: string; - }>; -} - -interface ReferralPlotsResponse { - plots: Array<{ - id: string; - pods: string; - index: string; - }>; -} - -/** - * GraphQL query for fetching farmers with referral data - */ -const REFERRAL_LEADERBOARD_QUERY = gql` - query ReferralLeaderboard($first: Int = 1000, $skip: Int = 0) { - farmers( - first: $first - skip: $skip - orderBy: totalReferralRewardPodsReceived - orderDirection: desc - where: { totalReferralRewardPodsReceived_gt: "0" } - ) { - id - refereeCount - totalReferralRewardPodsReceived - } - } -`; - -/** - * GraphQL query for fetching referral plots for a specific farmer - */ -const REFERRAL_PLOTS_QUERY = gql` - query ReferralPlots($farmer: String!, $first: Int = 1000, $skip: Int = 0) { - plots( - first: $first - skip: $skip - where: { farmer: $farmer, source: REFERRAL } - ) { - id - pods - index - } - } -`; - -/** - * Custom React hook to fetch and process referral leaderboard data from the subgraph - * - * This hook fetches farmers ordered by their referral reward pods and calculates - * the total Pinto sown by their referees. The data is cached and automatically - * refetched every 5 minutes. - * - * @returns {UseReferralLeaderboardReturn} Leaderboard data and query state - * - * @example - * ```tsx - * function LeaderboardComponent() { - * const { data, isLoading, error, refetch } = useReferralLeaderboard(); - * - * if (isLoading) return ; - * if (error) return ; - * - * return ( - * - * {data?.map(entry => ( - * - * - * - * - * - * ))} - *
      {entry.rank}{entry.farmer}{entry.podsEarned.toHuman()}
      - * ); - * } - * ``` - */ -export function useReferralLeaderboard(): UseReferralLeaderboardReturn { - const chainId = useChainId(); - const { referralLeaderboard: queryKey } = useQueryKeys({}); - - const query = useQuery({ - queryKey, - queryFn: async () => { - // Fetch farmers with referral data - const farmersResponse = await request( - subgraphs[chainId].beanstalk, - REFERRAL_LEADERBOARD_QUERY, - { first: 1000, skip: 0 }, - ); - - // Process each farmer and fetch their referral plots - const leaderboardEntries: LeaderboardEntry[] = await Promise.all( - farmersResponse.farmers.map(async (farmer, index) => { - // Fetch plots with source="REFERRAL" for this farmer - const plotsResponse = await request( - subgraphs[chainId].beanstalk, - REFERRAL_PLOTS_QUERY, - { farmer: farmer.id.toLowerCase(), first: 1000, skip: 0 }, - ); - - // Aggregate total Pinto sown from all referral plots - const totalPintoSown = plotsResponse.plots.reduce((sum, plot) => { - const plotPods = TokenValue.fromBlockchain(plot.pods, PODS.decimals); - return sum.add(plotPods); - }, TokenValue.ZERO); - - // Convert blockchain values to TokenValue instances - const podsEarned = TokenValue.fromBlockchain(farmer.totalReferralRewardPodsReceived, PODS.decimals); - - return { - rank: index + 1, // 1-indexed ranking - farmer: farmer.id, - podsEarned, - totalPintoSown, - refereeCount: farmer.refereeCount, - }; - }), - ); - - return leaderboardEntries; - }, - enabled: !!chainId, - staleTime: 5 * 60 * 1000, // 5 minutes - refetchInterval: 5 * 60 * 1000, // 5 minutes - }); - - const refetch = async () => { - await query.refetch(); - }; - - return useMemo( - () => ({ - data: query.data, - isLoading: query.isLoading, - isLoaded: query.isSuccess, - isFetching: query.isFetching, - error: query.error, - refetch, - }), - [query.data, query.isLoading, query.isSuccess, query.isFetching, query.error, refetch], - ); -} diff --git a/src/state/useReferralStats.ts b/src/state/useReferralStats.ts deleted file mode 100644 index c212c6ec7..000000000 --- a/src/state/useReferralStats.ts +++ /dev/null @@ -1,224 +0,0 @@ -import { TokenValue } from "@/classes/TokenValue"; -import { PODS } from "@/constants/internalTokens"; -import { subgraphs } from "@/constants/subgraph"; -import { useQuery } from "@tanstack/react-query"; -import request, { gql } from "graphql-request"; -import { useMemo } from "react"; -import { useAccount, useChainId } from "wagmi"; -import { useQueryKeys } from "./useQueryKeys"; - -/** - * Referral stats for a specific user - */ -export interface ReferralStats { - /** Total Pods earned from referrals */ - totalPodsEarned: TokenValue; - /** Total successful referrals (referee count) */ - totalReferrals: number; - /** User's rank in the leaderboard (1-indexed, undefined if not ranked) */ - rank: number | undefined; - /** Total Pods created by referrals */ - totalPodsCreated: TokenValue; - /** Total Pinto sown by referrals */ - totalPintoSown: TokenValue; -} - -/** - * Return type for the useReferralStats hook - */ -export interface UseReferralStatsReturn { - /** Referral stats for the connected user */ - stats: ReferralStats | undefined; - /** True while initial data is loading */ - isLoading: boolean; - /** True when data has been loaded at least once */ - isLoaded: boolean; - /** Error object if the query failed */ - error: Error | null; - /** Function to manually refetch the data */ - refetch: () => Promise; -} - -/** - * GraphQL query response types - */ -interface FarmerStatsResponse { - farmer: { - id: string; - refereeCount: number; - totalReferralRewardPodsReceived: string; - } | null; -} - -interface ReferralPlotsResponse { - plots: Array<{ - id: string; - pods: string; - index: string; - }>; -} - -interface LeaderboardResponse { - farmers: Array<{ - id: string; - totalReferralRewardPodsReceived: string; - }>; -} - -/** - * GraphQL query for fetching a specific farmer's referral data - */ -const FARMER_STATS_QUERY = gql` - query FarmerStats($farmer: ID!) { - farmer(id: $farmer) { - id - refereeCount - totalReferralRewardPodsReceived - } - } -`; - -/** - * GraphQL query for fetching referral plots for a specific farmer - */ -const REFERRAL_PLOTS_QUERY = gql` - query ReferralPlots($farmer: String!, $first: Int = 1000, $skip: Int = 0) { - plots( - first: $first - skip: $skip - where: { farmer: $farmer, source: REFERRAL } - ) { - id - pods - index - } - } -`; - -/** - * GraphQL query for fetching leaderboard to calculate rank - */ -const LEADERBOARD_QUERY = gql` - query Leaderboard($first: Int = 1000, $skip: Int = 0) { - farmers( - first: $first - skip: $skip - orderBy: totalReferralRewardPodsReceived - orderDirection: desc - where: { totalReferralRewardPodsReceived_gt: "0" } - ) { - id - totalReferralRewardPodsReceived - } - } -`; - -/** - * Custom React hook to fetch referral stats for the connected user - * - * This hook fetches the user's referral data including pods earned, referee count, - * rank in leaderboard, and total pinto sown by referees. - * - * @returns {UseReferralStatsReturn} User's referral stats and query state - * - * @example - * ```tsx - * function StatsComponent() { - * const { stats, isLoading } = useReferralStats(); - * - * if (isLoading) return ; - * - * return ( - *
      - *

      Pods Earned: {stats?.totalPodsEarned.toHuman()}

      - *

      Referrals: {stats?.totalReferrals}

      - *

      Rank: {stats?.rank ?? 'Unranked'}

      - *
      - * ); - * } - * ``` - */ -export function useReferralStats(): UseReferralStatsReturn { - const { address } = useAccount(); - const chainId = useChainId(); - const { referralLeaderboard: queryKey } = useQueryKeys({}); - - const query = useQuery({ - queryKey: [...queryKey, address], - queryFn: async () => { - if (!address) return null; - - const farmerAddress = address.toLowerCase(); - - // Fetch farmer's stats - const farmerResponse = await request(subgraphs[chainId].beanstalk, FARMER_STATS_QUERY, { - farmer: farmerAddress, - }); - - // If farmer has no referral data, return zeros - if (!farmerResponse.farmer || farmerResponse.farmer.totalReferralRewardPodsReceived === "0") { - return { - totalPodsEarned: TokenValue.ZERO, - totalReferrals: 0, - rank: undefined, - totalPodsCreated: TokenValue.ZERO, - totalPintoSown: TokenValue.ZERO, - }; - } - - // Fetch referral plots to calculate total pinto sown - const plotsResponse = await request(subgraphs[chainId].beanstalk, REFERRAL_PLOTS_QUERY, { - farmer: farmerAddress, - first: 1000, - skip: 0, - }); - - // Calculate total pinto sown from plots - const totalPintoSown = plotsResponse.plots.reduce((sum, plot) => { - const plotPods = TokenValue.fromBlockchain(plot.pods, PODS.decimals); - return sum.add(plotPods); - }, TokenValue.ZERO); - - // Fetch leaderboard to calculate rank - const leaderboardResponse = await request(subgraphs[chainId].beanstalk, LEADERBOARD_QUERY, { - first: 1000, - skip: 0, - }); - - // Find user's rank - const rank = leaderboardResponse.farmers.findIndex((f) => f.id.toLowerCase() === farmerAddress); - - // Convert blockchain values to TokenValue - const totalPodsEarned = TokenValue.fromBlockchain( - farmerResponse.farmer.totalReferralRewardPodsReceived, - PODS.decimals, - ); - - return { - totalPodsEarned, - totalReferrals: farmerResponse.farmer.refereeCount, - rank: rank >= 0 ? rank + 1 : undefined, // 1-indexed - totalPodsCreated: totalPintoSown, // Pods created = Pinto sown (1:1 ratio) - totalPintoSown, - }; - }, - enabled: !!chainId && !!address, - staleTime: 5 * 60 * 1000, // 5 minutes - refetchInterval: 5 * 60 * 1000, // 5 minutes - }); - - const refetch = async () => { - await query.refetch(); - }; - - return useMemo( - () => ({ - stats: query.data ?? undefined, - isLoading: query.isLoading, - isLoaded: query.isSuccess, - error: query.error, - refetch, - }), - [query.data, query.isLoading, query.isSuccess, query.error, refetch], - ); -} diff --git a/src/utils/referral.ts b/src/utils/referral.ts index 1ae7ce0b3..b42d54baf 100644 --- a/src/utils/referral.ts +++ b/src/utils/referral.ts @@ -61,3 +61,32 @@ export function decodeReferralAddress(encoded: string): Address | null { export function isValidReferralCode(code: string): boolean { return decodeReferralAddress(code) !== null; } + +/** + * Calculate Pinto sown from referee pods and temperature + * Formula: refereePods / (1 + temperature/100) + * + * @param refereePods - Pods earned by referee (BigInt string) + * @param temperature - Temperature at time of sow (percentage, e.g., 500 = 500%) + * @returns Calculated Pinto sown as BigInt string + */ +export function calculatePintoSown(refereePods: string, temperature: number): string { + const pods = BigInt(refereePods); + // Temperature is in percentage (e.g., 500 means 500%) + // Formula: pods / (1 + temperature/100) = pods * 100 / (100 + temperature) + const temperatureFactor = BigInt(100 + temperature); + const pintoSown = (pods * 100n) / temperatureFactor; + return pintoSown.toString(); +} + +/** + * Calculate total pods created from referrer and referee pods + * + * @param referrerPods - Pods earned by referrer (BigInt string) + * @param refereePods - Pods earned by referee (BigInt string) + * @returns Total pods created as BigInt string + */ +export function calculateTotalPodsCreated(referrerPods: string, refereePods: string): string { + const total = BigInt(referrerPods) + BigInt(refereePods); + return total.toString(); +} From 0d1aa5c47d2a874f6387388aa603bac7397216e7 Mon Sep 17 00:00:00 2001 From: feyyazcigim Date: Wed, 10 Dec 2025 19:57:28 +0300 Subject: [PATCH 17/25] Refactor delegate address modal --- src/components/DelegateReferralModal.tsx | 84 +++++++---- src/components/ReferralLinkGenerator.tsx | 171 +++++++++++------------ src/pages/Referral.tsx | 32 ++++- 3 files changed, 166 insertions(+), 121 deletions(-) diff --git a/src/components/DelegateReferralModal.tsx b/src/components/DelegateReferralModal.tsx index d004c0015..055bc79f4 100644 --- a/src/components/DelegateReferralModal.tsx +++ b/src/components/DelegateReferralModal.tsx @@ -1,12 +1,13 @@ +import { Col, Row } from "@/components/Container"; import { Button } from "@/components/ui/Button"; -import { Dialog, DialogContent, DialogHeader, DialogTitle } from "@/components/ui/Dialog"; import { Input } from "@/components/ui/Input"; +import { Label } from "@/components/ui/Label"; import { useSimulateBeanstalk_DelegateReferralRewards, useWriteBeanstalk_DelegateReferralRewards, } from "@/generated/contractHooks"; import { getExplorerLink } from "@/utils/chain"; -import { CopyIcon } from "@radix-ui/react-icons"; +import { CopyIcon, Cross2Icon } from "@radix-ui/react-icons"; import { useEffect, useState } from "react"; import { toast } from "sonner"; import { isAddress } from "viem"; @@ -104,16 +105,30 @@ export function DelegateReferralModal({ isOpen, onOpenChange }: DelegateReferral }); }; + if (!isOpen) return null; + return ( - - - - Change Pod Destination Address - + +
      + {/* Title and separator */} +
      +
      +
      📍 Change Pod Destination Address
      + +
      +
      +
      -
      + {/* Form Section */} +
      - + { @@ -122,28 +137,41 @@ export function DelegateReferralModal({ isOpen, onOpenChange }: DelegateReferral }} placeholder="0x..." outlined - className="text-sm" - containerClassName="border-pinto-green" /> - {error && {error}} + {error && {error}}
      -
      - Enter the address where you want your referral reward Pods to be sent. You can reset to your own address by - clicking "Reset to My Address". +
      + Enter the address where you want your referral reward Pods to be sent.
      - -
      - - - -
      -
      - -
      + + + {/* Action Buttons */} + + + + + +
      + ); } diff --git a/src/components/ReferralLinkGenerator.tsx b/src/components/ReferralLinkGenerator.tsx index f110799de..04f94edec 100644 --- a/src/components/ReferralLinkGenerator.tsx +++ b/src/components/ReferralLinkGenerator.tsx @@ -1,6 +1,5 @@ import telegramLogo from "@/assets/misc/telegram-logo.png"; import xLogo from "@/assets/misc/x-logo.png"; -import { DelegateReferralModal } from "@/components/DelegateReferralModal"; import { Button } from "@/components/ui/Button"; import { Input } from "@/components/ui/Input"; import { ANALYTICS_EVENTS } from "@/constants/analytics-events"; @@ -9,14 +8,16 @@ import { trackSimpleEvent } from "@/utils/analytics"; import { truncateHex } from "@/utils/format"; import { encodeReferralAddress } from "@/utils/referral"; import { CopyIcon } from "@radix-ui/react-icons"; -import { useState } from "react"; import { toast } from "sonner"; import { useAccount } from "wagmi"; -export function ReferralLinkGenerator() { +interface ReferralLinkGeneratorProps { + onChangeAddress: () => void; +} + +export function ReferralLinkGenerator({ onChangeAddress }: ReferralLinkGeneratorProps) { const { address } = useAccount(); const { delegateAddress } = useReferralData(); - const [isModalOpen, setIsModalOpen] = useState(false); if (!address) { return
      Connect your wallet to access referral features
      ; @@ -46,10 +47,6 @@ export function ReferralLinkGenerator() { }); }; - const handleChangeAddress = () => { - setIsModalOpen(true); - }; - const handleTwitterShare = () => { console.log("Twitter/X share clicked"); const tweetText = @@ -76,103 +73,99 @@ export function ReferralLinkGenerator() { }; return ( - <> - +
      +
      Invite via
      + +
      + {/* Referral Code */} +
      + +
      + + +
      +
      -
      -
      Invite via
      + {/* Referral Link */} +
      + +
      + + +
      +
      -
      - {/* Referral Code */} + {/* Pod Destination Address and Share via - Row Layout */} +
      + {/* Pod Destination Address */} +
      + +
      + {truncateHex(podDestinationAddress, 6, 4)} + +
      +
      + + {/* Social Sharing Icons */}
      - -
      - + +
      -
      -
      - - {/* Referral Link */} -
      - -
      -
      - - {/* Pod Destination Address and Share via - Row Layout */} -
      - {/* Pod Destination Address */} -
      - -
      - {truncateHex(podDestinationAddress, 6, 4)} - -
      -
      - - {/* Social Sharing Icons */} -
      - -
      - - -
      -
      -
      - +
      ); } diff --git a/src/pages/Referral.tsx b/src/pages/Referral.tsx index 97ca5ef15..b00f8b4b3 100644 --- a/src/pages/Referral.tsx +++ b/src/pages/Referral.tsx @@ -1,3 +1,4 @@ +import { DelegateReferralModal } from "@/components/DelegateReferralModal"; import { HowToCard } from "@/components/HowToCard"; import ReferralLeaderboard from "@/components/ReferralLeaderboard"; import { ReferralLinkGenerator } from "@/components/ReferralLinkGenerator"; @@ -5,8 +6,12 @@ import { ReferralStatsCard } from "@/components/ReferralStatsCard"; import { Card } from "@/components/ui/Card"; import PageContainer from "@/components/ui/PageContainer"; import { Separator } from "@/components/ui/Separator"; +import { AnimatePresence, motion } from "framer-motion"; +import { useState } from "react"; export default function Referral() { + const [isDelegateModalOpen, setIsDelegateModalOpen] = useState(false); + return (
      @@ -23,10 +28,29 @@ export default function Referral() { {/* Main Referral Cards - Two Column Layout */}
      - {/* Invite via */} - - - + {/* Invite via - with overlay pattern like Field page */} +
      + + setIsDelegateModalOpen(true)} /> + + + {isDelegateModalOpen && ( + + +
      + +
      +
      +
      + )} +
      +
      {/* How to */} From aaaf507e36cff79d22b0143a7e8bf2a6238b995c Mon Sep 17 00:00:00 2001 From: feyyazcigim Date: Wed, 10 Dec 2025 20:06:53 +0300 Subject: [PATCH 18/25] Refactor referral table --- src/components/ReferralLeaderboard.tsx | 115 +++++++++++++------------ 1 file changed, 58 insertions(+), 57 deletions(-) diff --git a/src/components/ReferralLeaderboard.tsx b/src/components/ReferralLeaderboard.tsx index b93958c6b..b76bc5f26 100644 --- a/src/components/ReferralLeaderboard.tsx +++ b/src/components/ReferralLeaderboard.tsx @@ -2,7 +2,7 @@ import podIcon from "@/assets/protocol/Pod.png"; import pintoIcon from "@/assets/tokens/PINTO.png"; import FrameAnimator from "@/components/LoadingSpinner"; import { Button } from "@/components/ui/Button"; -import { Card } from "@/components/ui/Card"; +import { Card, CardContent, CardHeader } from "@/components/ui/Card"; import IconImage from "@/components/ui/IconImage"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/Table"; import { useReferralLeaderboard } from "@/state/referral"; @@ -43,33 +43,32 @@ export default function ReferralLeaderboard() { if (!data || data.length === 0) { return ( -
      Referral Leaderboard
      -
      - - - - No. - Name - Pods Earned - - Total Pinto Sown - - - Referrals - + +
      Referral Leaderboard
      +

      Top referrers ranked by Pods earned

      +
      + +
      + + + No. + Address + Pods Earned + Total Pinto Sown + Referrals - + -
      +
      No referral activity yet. Be the first to earn referral rewards!
      -
      +
      ); } @@ -77,58 +76,60 @@ export default function ReferralLeaderboard() { // Main table with data return ( -
      Referral Leaderboard
      -
      - - - - No. - Name - Pods Earned - - Total Pinto Sown - - Referrals + +
      +
      Referral Leaderboard
      + {isLoading && } +
      +

      Top referrers ranked by Pods earned

      +
      + +
      + + + No. + Address + Pods Earned + Total Pinto Sown + Referrals {data?.map((entry) => ( - - {entry.rank} - {truncateHex(entry.address, 6, 4)} - -
      - -
      {formatter.noDec(entry.podsEarned)}
      + + {entry.rank} + {truncateHex(entry.address, 6, 4)} + +
      + + {formatter.noDec(entry.podsEarned)}
      - -
      - -
      {formatter.twoDec(entry.totalPintoSown)}
      + +
      + + {formatter.twoDec(entry.totalPintoSown)}
      - -
      {entry.totalSuccessfulReferrals}
      -
      + {entry.totalSuccessfulReferrals} ))}
      -
      - {/* Pagination controls */} - {(currentPage > 0 || hasNextPage) && ( -
      - -
      Page {currentPage + 1}
      - -
      - )} + {/* Pagination controls */} + {(currentPage > 0 || hasNextPage) && ( +
      + +
      {`Page ${currentPage + 1}`}
      + +
      + )} +
      ); } From d9f56f56b42604ae76a746525e2e43994e941aaa Mon Sep 17 00:00:00 2001 From: feyyazcigim Date: Mon, 15 Dec 2025 17:17:51 +0300 Subject: [PATCH 19/25] Refactor graphql queries --- .../referral-leaderboard-pagination/design.md | 219 + .../requirements.md | 88 + .../referral-leaderboard-pagination/tasks.md | 119 + src/components/ReferralLeaderboard.tsx | 211 +- src/components/ReferralStatsCard.tsx | 21 +- src/generated/gql/exchange/graphql.ts | 1748 ++--- src/generated/gql/pinto/graphql.ts | 2096 +++--- src/generated/gql/pintostalk/gql.ts | 24 +- src/generated/gql/pintostalk/graphql.ts | 6418 +++++++---------- src/pages/Referral.tsx | 103 - .../beanstalk/referral/FarmerReferral.graphql | 7 + .../referral/ReferralLeaderboard.graphql | 13 +- .../referral/UserReferralHistory.graphql | 19 - .../referral/UserReferralProfile.graphql | 15 - src/state/referral/index.ts | 7 +- src/state/referral/useFarmerReferralData.ts | 64 + src/state/referral/useReferralHistory.ts | 183 - src/state/referral/useReferralLeaderboard.ts | 171 +- src/state/referral/useUserReferralProfile.ts | 152 - 19 files changed, 5112 insertions(+), 6566 deletions(-) create mode 100644 .kiro/specs/referral-leaderboard-pagination/design.md create mode 100644 .kiro/specs/referral-leaderboard-pagination/requirements.md create mode 100644 .kiro/specs/referral-leaderboard-pagination/tasks.md create mode 100644 src/queries/beanstalk/referral/FarmerReferral.graphql delete mode 100644 src/queries/beanstalk/referral/UserReferralHistory.graphql delete mode 100644 src/queries/beanstalk/referral/UserReferralProfile.graphql create mode 100644 src/state/referral/useFarmerReferralData.ts delete mode 100644 src/state/referral/useReferralHistory.ts delete mode 100644 src/state/referral/useUserReferralProfile.ts diff --git a/.kiro/specs/referral-leaderboard-pagination/design.md b/.kiro/specs/referral-leaderboard-pagination/design.md new file mode 100644 index 000000000..2aa1bc823 --- /dev/null +++ b/.kiro/specs/referral-leaderboard-pagination/design.md @@ -0,0 +1,219 @@ +# Design Document + +## Overview + +This design implements robust pagination for the referral leaderboard by replacing the current simple skip/first pagination with the proven `paginateSubgraph` utility pattern. The implementation will ensure data consistency during pagination sessions using block height snapshots and provide a seamless user experience with familiar pagination controls. + +## Architecture + +The solution consists of three main components: + +1. **GraphQL Query Enhancement**: Update the existing query to support optional block height parameters +2. **Hook Refactoring**: Replace the current `useReferralLeaderboard` hook to use `paginateSubgraph` utility +3. **UI Component Updates**: Enhance the `ReferralLeaderboard` component with improved pagination controls and loading states + +### Data Flow + +``` +User Request → ReferralLeaderboard Component → useReferralLeaderboard Hook → paginateSubgraph Utility → GraphQL Subgraph → Aggregated Results → UI Display +``` + +## Components and Interfaces + +### 1. Enhanced GraphQL Query + +```typescript +const FarmersLeaderboardPageDocument = gql` + query FarmersLeaderboardPage($first: Int!, $skip: Int!, $block: Block_height) { + farmers( + first: $first + skip: $skip + orderBy: totalReferralRewardPodsReceived + orderDirection: desc + where: { refereeCount_gte: 0 } + block: $block + ) { + id + refereeCount + totalReferralRewardPodsReceived + } + } +`; +``` + +### 2. Pagination Settings Configuration + +```typescript +interface FarmersLeaderboardPaginationSettings extends PaginationSettings { + primaryPropertyName: "farmers"; + idField: "id"; + nextVars: (lastFarmer: Farmer, prevVars: FarmersLeaderboardVariables) => FarmersLeaderboardVariables | undefined; +} +``` + +### 3. Updated Hook Interface + +```typescript +export interface UseReferralLeaderboardReturn { + data: LeaderboardEntry[]; + isLoading: boolean; + error: Error | null; + refetch: () => void; +} + +export function useReferralLeaderboard(): UseReferralLeaderboardReturn; +``` + +### 4. Component State Management + +```typescript +interface ReferralLeaderboardState { + currentPage: number; + blockHeight: bigint | null; + isInitialLoad: boolean; + paginationError: Error | null; +} +``` + +## Data Models + +### Farmer Entity +```typescript +interface Farmer { + id: string; // Wallet address + refereeCount: number; + totalReferralRewardPodsReceived: string; // BigInt as string +} +``` + +### Leaderboard Entry +```typescript +interface LeaderboardEntry { + address: string; + podsEarned: TokenValue; + totalSuccessfulReferrals: number; + rank: number; +} +``` + +### Query Variables +```typescript +interface FarmersLeaderboardVariables { + first: number; + skip: number; + block?: { + number: number; + } | null; +} +``` + +## Correctness Properties +*A pr +operty is a characteristic or behavior that should hold true across all valid executions of a system-essentially, a formal statement about what the system should do. Properties serve as the bridge between human-readable specifications and machine-verifiable correctness guarantees.* + +### Property Reflection + +After reviewing all properties identified in the prework, several can be consolidated to eliminate redundancy: + +- Properties 1.1 and 1.2 both test data consistency during pagination and can be combined into a comprehensive consistency property +- Properties 1.4 and 4.1 both test block height usage and can be combined +- Properties 3.4, 6.2, and 6.4 all test loading state management and can be combined +- Properties 5.2 and 5.5 both test pagination control states and can be combined + +### Correctness Properties + +**Property 1: Pagination data consistency** +*For any* leaderboard pagination session with a fixed block height, the union of all paginated results should contain no duplicate entries and maintain proper ordering by totalReferralRewardPodsReceived +**Validates: Requirements 1.1, 1.2** + +**Property 2: Block height consistency across pages** +*For any* pagination session, when a block height is established on the first page request, all subsequent page requests should use the same block height +**Validates: Requirements 1.4, 4.1** + +**Property 3: Pagination termination** +*For any* pagination request, when the subgraph returns fewer results than the requested page size (1000), pagination should terminate and not request additional pages +**Validates: Requirements 1.5, 2.5** + +**Property 4: Query variable construction** +*For any* query variable construction, block height should only be included in the variables when it has a valid non-null value +**Validates: Requirements 4.4** + +**Property 5: Result aggregation completeness** +*For any* successful pagination operation, the final aggregated results should contain all entries from all requested pages without loss or duplication +**Validates: Requirements 3.5** + +**Property 6: Loading state management** +*For any* pagination operation in progress, the system should maintain appropriate loading states while preserving existing data and disabling controls to prevent concurrent requests +**Validates: Requirements 3.4, 6.2, 6.4** + +**Property 7: Pagination control states** +*For any* pagination UI state, Previous/Next buttons should be enabled/disabled based on current page position and data availability, and the current page number should be accurately displayed +**Validates: Requirements 5.2, 5.5** + +## Error Handling + +### Network Error Recovery +- Implement exponential backoff for failed requests +- Provide user-friendly error messages for network issues +- Allow manual retry functionality + +### Block Height Fallback +- When block height cannot be determined, gracefully fall back to real-time queries +- Log warnings for debugging purposes +- Maintain functionality without block height constraints + +### Invalid Data Handling +- Validate farmer data structure before processing +- Handle missing or malformed fields gracefully +- Provide default values where appropriate + +## Testing Strategy + +### Unit Testing +The implementation will include unit tests for: +- Query variable construction logic +- Pagination settings configuration +- Error handling scenarios +- Loading state management +- UI component interactions + +### Property-Based Testing +Property-based tests will be implemented using a suitable testing library (such as fast-check for TypeScript) to verify: +- Data consistency across pagination sessions +- Block height usage patterns +- Result aggregation correctness +- UI state management properties + +**Testing Configuration:** +- Minimum 100 iterations per property test +- Custom generators for farmer data, block heights, and pagination scenarios +- Edge case coverage for empty data, single page, and error conditions + +### Integration Testing +- Test the complete pagination flow from UI interaction to data display +- Verify compatibility with existing subgraph infrastructure +- Test error scenarios with mock GraphQL responses + +## Implementation Considerations + +### Performance Optimization +- Implement result caching to avoid redundant requests +- Use React Query's built-in caching mechanisms +- Optimize re-renders during pagination state changes + +### Backward Compatibility +- Maintain existing hook interface where possible +- Ensure smooth migration from current implementation +- Preserve existing UI behavior and styling + +### Monitoring and Observability +- Add logging for pagination operations +- Track pagination performance metrics +- Monitor error rates and retry patterns + +## Migration Strategy + +1. **Phase 1**: Implement new hook alongside existing implementation +2. **Phase 2**: Update UI component to use new hook with feature flag +3. **Phase 3**: Remove old implementation after validation +4. **Phase 4**: Monitor production performance and optimize as needed \ No newline at end of file diff --git a/.kiro/specs/referral-leaderboard-pagination/requirements.md b/.kiro/specs/referral-leaderboard-pagination/requirements.md new file mode 100644 index 000000000..c8c1170e9 --- /dev/null +++ b/.kiro/specs/referral-leaderboard-pagination/requirements.md @@ -0,0 +1,88 @@ +# Requirements Document + +## Introduction + +This feature implements robust pagination for the referral leaderboard using the existing `paginateSubgraph` utility pattern. The current implementation uses simple skip/first pagination which can miss or duplicate entries when new data is added during pagination. The new implementation will use the proven pagination pattern already used throughout the application for seasonal data queries. + +## Glossary + +- **Referral_Leaderboard**: A ranked list of farmers ordered by total referral reward pods received +- **PaginateSubgraph_Utility**: The existing utility function that handles robust pagination for GraphQL subgraph queries +- **Block_Height**: A specific blockchain block number used to ensure consistent data snapshots during pagination +- **Farmer**: A user account that can earn referral rewards by referring other users +- **Pods**: The reward tokens earned through referrals +- **RefereeCount**: The number of successful referrals made by a farmer + +## Requirements + +### Requirement 1 + +**User Story:** As a user viewing the referral leaderboard, I want to see consistent data when navigating between pages, so that I don't see duplicate or missing entries due to new referrals being added during my browsing session. + +#### Acceptance Criteria + +1. WHEN a user navigates through leaderboard pages THEN the system SHALL maintain data consistency using block height snapshots +2. WHEN new referral data is added to the subgraph during pagination THEN the system SHALL prevent duplicate or missing entries in the paginated results +3. WHEN a user requests the first page THEN the system SHALL capture the current block height for the entire pagination session +4. WHEN a user requests subsequent pages THEN the system SHALL use the same block height from the first page request +5. WHEN the pagination reaches the end of available data THEN the system SHALL stop requesting additional pages + +### Requirement 2 + +**User Story:** As a developer, I want to use the existing `paginateSubgraph` utility for referral leaderboard pagination, so that the implementation follows established patterns and benefits from proven reliability. + +#### Acceptance Criteria + +1. WHEN implementing referral leaderboard pagination THEN the system SHALL use the existing `paginateSubgraph` utility function +2. WHEN configuring pagination settings THEN the system SHALL specify the primary property name as "farmers" +3. WHEN configuring pagination settings THEN the system SHALL specify the id field as "id" for farmer identification +4. WHEN determining the next page variables THEN the system SHALL implement the nextVars callback to handle farmer-based pagination +5. WHEN the subgraph returns fewer than 1000 results THEN the system SHALL terminate pagination + +### Requirement 3 + +**User Story:** As a user, I want the leaderboard to load efficiently with proper error handling, so that I can reliably view referral rankings even when there are network issues. + +#### Acceptance Criteria + +1. WHEN the pagination utility encounters network errors THEN the system SHALL handle errors gracefully and provide meaningful feedback +2. WHEN the block height cannot be determined THEN the system SHALL fall back to pagination without block height constraints +3. WHEN the GraphQL query fails THEN the system SHALL retry according to the existing query configuration +4. WHEN pagination is in progress THEN the system SHALL show appropriate loading states +5. WHEN pagination completes successfully THEN the system SHALL return the complete aggregated results + +### Requirement 4 + +**User Story:** As a user, I want the leaderboard query to support optional block height specification, so that the system can provide consistent snapshots when needed while remaining flexible for real-time data when block height is not specified. + +#### Acceptance Criteria + +1. WHEN a block height is provided in the query variables THEN the system SHALL use that specific block for data consistency +2. WHEN no block height is provided in the query variables THEN the system SHALL query the latest available data +3. WHEN the GraphQL query includes block height parameter THEN the system SHALL accept null values for real-time queries +4. WHEN constructing query variables THEN the system SHALL conditionally include block height only when available +5. WHEN the block height is invalid or too old THEN the system SHALL handle the error appropriately + +### Requirement 5 + +**User Story:** As a user viewing the referral leaderboard UI, I want intuitive pagination controls that follow the application's design patterns, so that I can easily navigate through all referral data with a familiar interface. + +#### Acceptance Criteria + +1. WHEN the leaderboard component loads THEN the system SHALL display pagination controls consistent with other paginated tables in the application +2. WHEN there are multiple pages of data THEN the system SHALL show Previous/Next buttons with appropriate enabled/disabled states +3. WHEN the user clicks the Next button THEN the system SHALL load the next page of results using the robust pagination system +4. WHEN the user clicks the Previous button THEN the system SHALL load the previous page of results +5. WHEN displaying pagination controls THEN the system SHALL show the current page number and total navigation context + +### Requirement 6 + +**User Story:** As a user, I want the leaderboard to handle loading states and empty data gracefully, so that I have clear feedback about the data loading process and understand when no referral activity exists. + +#### Acceptance Criteria + +1. WHEN the leaderboard is loading the first page THEN the system SHALL display a loading spinner in the center of the table area +2. WHEN the leaderboard is loading subsequent pages THEN the system SHALL show loading indicators while maintaining the current page data +3. WHEN no referral data exists THEN the system SHALL display an appropriate empty state message +4. WHEN pagination is loading THEN the system SHALL disable pagination controls to prevent multiple simultaneous requests +5. WHEN an error occurs during pagination THEN the system SHALL display error feedback and allow retry options \ No newline at end of file diff --git a/.kiro/specs/referral-leaderboard-pagination/tasks.md b/.kiro/specs/referral-leaderboard-pagination/tasks.md new file mode 100644 index 000000000..700c84bdd --- /dev/null +++ b/.kiro/specs/referral-leaderboard-pagination/tasks.md @@ -0,0 +1,119 @@ +# Implementation Plan + +- [x] 1. Update GraphQL query and types + - Create the new FarmersLeaderboardPage query with block height support + - Update TypeScript interfaces to match the actual API response structure + - Remove totalPintoSown field from LeaderboardEntry interface since it's not available in the API + - _Requirements: 4.1, 4.2, 4.3_ + +- [x] 2. Implement pagination utility integration + - [x] 2.1 Create pagination settings configuration for farmers leaderboard + - Define PaginationSettings with primaryPropertyName as "farmers" + - Implement nextVars callback for farmer-based pagination logic + - Configure idField as "id" for farmer identification + - _Requirements: 2.1, 2.2, 2.3, 2.4_ + + - [ ]* 2.2 Write property test for pagination data consistency + - **Property 1: Pagination data consistency** + - **Validates: Requirements 1.1, 1.2** + + - [ ]* 2.3 Write property test for block height consistency + - **Property 2: Block height consistency across pages** + - **Validates: Requirements 1.4, 4.1** + +- [x] 3. Refactor useReferralLeaderboard hook + - [x] 3.1 Replace current pagination logic with paginateSubgraph utility + - Remove existing skip/first pagination implementation + - Integrate paginateSubgraph utility with proper configuration + - Add block height capture and management logic + - _Requirements: 2.1, 1.3, 1.4_ + + - [x] 3.2 Add block height management + - Implement current block height fetching using useLatestBlock hook + - Add block height state management for pagination sessions + - Implement fallback logic when block height is unavailable + - _Requirements: 1.3, 3.2, 4.2_ + + - [ ]* 3.3 Write property test for pagination termination + - **Property 3: Pagination termination** + - **Validates: Requirements 1.5, 2.5** + + - [ ]* 3.4 Write property test for query variable construction + - **Property 4: Query variable construction** + - **Validates: Requirements 4.4** + +- [x] 4. Update ReferralLeaderboard component + - [x] 4.1 Remove totalPintoSown column from the table + - Update table headers to remove "Total Pinto Sown" column + - Remove totalPintoSown display logic from table rows + - Adjust table column widths and responsive design + - _Requirements: Data model alignment_ + + - [x] 4.2 Enhance error handling and loading states + - Add comprehensive error state handling for pagination failures + - Implement loading state management during pagination operations + - Add retry functionality for failed requests + - _Requirements: 3.1, 6.1, 6.2, 6.5_ + + - [ ]* 4.3 Write property test for result aggregation completeness + - **Property 5: Result aggregation completeness** + - **Validates: Requirements 3.5** + + - [ ]* 4.4 Write property test for loading state management + - **Property 6: Loading state management** + - **Validates: Requirements 3.4, 6.2, 6.4** + +- [x] 5. Improve pagination UI controls + - [x] 5.1 Update pagination control logic + - Remove page-based state management in favor of data-driven pagination + - Update button enable/disable logic based on data availability + - Improve pagination control styling and accessibility + - _Requirements: 5.2, 5.3, 5.4, 5.5_ + + - [ ]* 5.2 Write property test for pagination control states + - **Property 7: Pagination control states** + - **Validates: Requirements 5.2, 5.5** + + - [ ]* 5.3 Write unit tests for UI interactions + - Test Next/Previous button click handlers + - Test loading state display during pagination + - Test empty state handling when no data exists + - _Requirements: 5.3, 5.4, 6.3_ + +- [ ] 6. Add comprehensive error handling + - [x] 6.1 Implement network error recovery + - Add exponential backoff for failed pagination requests + - Implement user-friendly error messages for network issues + - Add manual retry functionality for failed operations + - _Requirements: 3.1, 6.5_ + + - [x] 6.2 Add block height error handling + - Handle invalid or too old block height errors gracefully + - Implement fallback to real-time queries when block height fails + - Add appropriate logging for debugging block height issues + - _Requirements: 4.5, 3.2_ + + - [ ]* 6.3 Write unit tests for error scenarios + - Test network error handling and retry logic + - Test invalid block height error handling + - Test empty data state handling + - _Requirements: 3.1, 4.5, 6.3_ + +- [ ] 7. Checkpoint - Ensure all tests pass + - Ensure all tests pass, ask the user if questions arise. + +- [x] 8. Performance optimization and cleanup + - [x] 8.1 Implement result caching optimization + - Add appropriate caching strategies for pagination results + - Optimize React Query configuration for leaderboard data + - Minimize unnecessary re-renders during pagination state changes + - _Requirements: Performance considerations_ + + - [x] 8.2 Remove deprecated code and update documentation + - Remove old pagination implementation code + - Update component documentation and prop interfaces + - Add JSDoc comments for new pagination functionality + - _Requirements: Code maintenance_ + +- [ ] 9. Final checkpoint - Ensure all tests pass + - Ensure all tests pass, ask the user if questions arise. \ No newline at end of file diff --git a/src/components/ReferralLeaderboard.tsx b/src/components/ReferralLeaderboard.tsx index b76bc5f26..5949501e5 100644 --- a/src/components/ReferralLeaderboard.tsx +++ b/src/components/ReferralLeaderboard.tsx @@ -1,5 +1,4 @@ import podIcon from "@/assets/protocol/Pod.png"; -import pintoIcon from "@/assets/tokens/PINTO.png"; import FrameAnimator from "@/components/LoadingSpinner"; import { Button } from "@/components/ui/Button"; import { Card, CardContent, CardHeader } from "@/components/ui/Card"; @@ -7,40 +6,152 @@ import IconImage from "@/components/ui/IconImage"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/Table"; import { useReferralLeaderboard } from "@/state/referral"; import { formatter, truncateHex } from "@/utils/format"; -import { useState } from "react"; +import { cn } from "@/utils/utils"; +import { useCallback, useMemo, useState } from "react"; +import { useAccount } from "wagmi"; +/** + * ReferralLeaderboard component displays a paginated table of top referrers ranked by Pods earned. + * + * Features: + * - Client-side pagination with configurable rows per page + * - Optimized re-rendering with memoized calculations and callbacks + * - Comprehensive error handling with retry functionality + * - Loading states for both initial load and pagination operations + * - Empty state handling when no referral data exists + * - Responsive design with mobile-friendly controls + * + * The component uses the useReferralLeaderboard hook which implements robust pagination + * to prevent data inconsistencies during browsing sessions. + */ export default function ReferralLeaderboard() { - const [currentPage, setCurrentPage] = useState(0); - const rowsPerPage = 25; - const { data, isLoading, hasNextPage } = useReferralLeaderboard(rowsPerPage, currentPage); - - // Pagination handlers - const handleNextPage = () => { - if (hasNextPage) { - setCurrentPage(currentPage + 1); + // Local state for client-side pagination + const { address: walletAddress } = useAccount(); + const [displayStartIndex, setDisplayStartIndex] = useState(0); + const [isRetrying, setIsRetrying] = useState(false); + const rowsPerPage = 25; // Number of entries to display per page + + // Fetch all leaderboard data using optimized hook + const { data: allData, isLoading, error, refetch, userRank } = useReferralLeaderboard(); + + // Memoized pagination calculations to prevent unnecessary re-renders + const paginationState = useMemo(() => { + const totalEntries = allData.length; + const totalPages = Math.ceil(totalEntries / rowsPerPage); + const currentPage = Math.floor(displayStartIndex / rowsPerPage) + 1; + const endIndex = Math.min(displayStartIndex + rowsPerPage, totalEntries); + const displayData = allData.slice(displayStartIndex, endIndex); + + // Determine if navigation buttons should be enabled + const canGoNext = endIndex < totalEntries; + const canGoPrevious = displayStartIndex > 0; + + return { + displayData, + currentPage, + totalPages, + totalEntries, + canGoNext, + canGoPrevious, + startIndex: displayStartIndex, + endIndex, + }; + }, [allData, displayStartIndex, rowsPerPage]); + + // Memoized pagination handlers to prevent unnecessary re-renders + const handleNextPage = useCallback(() => { + if (paginationState.canGoNext && !isLoading && !isRetrying) { + setDisplayStartIndex((prev) => prev + rowsPerPage); } - }; + }, [paginationState.canGoNext, isLoading, isRetrying, rowsPerPage]); - const handlePreviousPage = () => { - if (currentPage > 0) { - setCurrentPage(currentPage - 1); + const handlePreviousPage = useCallback(() => { + if (paginationState.canGoPrevious && !isLoading && !isRetrying) { + setDisplayStartIndex((prev) => Math.max(0, prev - rowsPerPage)); } - }; + }, [paginationState.canGoPrevious, isLoading, isRetrying, rowsPerPage]); + + // Memoized retry handler for failed requests + const handleRetry = useCallback(async () => { + setIsRetrying(true); + try { + await refetch(); + } catch (err) { + console.error("Retry failed:", err); + } finally { + setIsRetrying(false); + } + }, [refetch]); + + // Memoized error state classification to prevent unnecessary re-renders + const errorState = useMemo(() => { + if (!error) return null; + + const isNetworkError = + error.message.includes("fetch") || error.message.includes("network") || error.message.includes("timeout"); + const isBlockHeightError = error.message.includes("block"); + + return { + isNetworkError, + isBlockHeightError, + message: isNetworkError + ? "Network error occurred while loading referral data." + : isBlockHeightError + ? "Block height error occurred. Data may be temporarily unavailable." + : "Failed to load referral data.", + suggestion: isNetworkError ? "Please check your connection and try again." : "Please try again later.", + }; + }, [error]); - // Loading state - if (isLoading) { + // Initial loading state (first page load) + if (isLoading && allData.length === 0) { return ( -
      Referral Leaderboard
      -
      - -
      + +
      Referral Leaderboard
      +

      Top referrers ranked by Pods earned

      +
      + +
      + +
      +
      +
      + ); + } + + // Error state with retry functionality + if (error && allData.length === 0 && errorState) { + return ( + + +
      Referral Leaderboard
      +

      Error loading leaderboard data

      +
      + +
      +
      +
      {errorState.message}
      +
      {errorState.suggestion}
      +
      + +
      +
      ); } // Empty state - if (!data || data.length === 0) { + if (!allData || allData.length === 0) { return ( @@ -54,13 +165,12 @@ export default function ReferralLeaderboard() { No. Address Pods Earned - Total Pinto Sown Referrals - +
      No referral activity yet. Be the first to earn referral rewards!
      @@ -79,9 +189,25 @@ export default function ReferralLeaderboard() {
      Referral Leaderboard
      - {isLoading && } + {(isLoading || isRetrying) && }

      Top referrers ranked by Pods earned

      + {error && allData.length > 0 && ( +
      +
      + Warning: Some data may be outdated due to loading errors. + +
      +
      + )}
      @@ -90,41 +216,48 @@ export default function ReferralLeaderboard() { No.AddressPods Earned - Total Pinto SownReferrals - {data?.map((entry) => ( + {paginationState.displayData?.map((entry) => ( {entry.rank} - {truncateHex(entry.address, 6, 4)} + + {truncateHex(entry.address, 6, 4)} +
      {formatter.noDec(entry.podsEarned)}
      - -
      - - {formatter.twoDec(entry.totalPintoSown)} -
      -
      {entry.totalSuccessfulReferrals}
      ))}
      - {/* Pagination controls */} - {(currentPage > 0 || hasNextPage) && ( + {/* Pagination controls matching MarketActivityTable.tsx */} + {paginationState.totalPages > 1 && (
      - -
      {`Page ${currentPage + 1}`}
      -
      diff --git a/src/components/ReferralStatsCard.tsx b/src/components/ReferralStatsCard.tsx index da4236a9a..ce85420b0 100644 --- a/src/components/ReferralStatsCard.tsx +++ b/src/components/ReferralStatsCard.tsx @@ -1,11 +1,12 @@ import FrameAnimator from "@/components/LoadingSpinner"; -import { useUserReferralProfile } from "@/state/referral"; +import { useFarmerReferralData, useReferralLeaderboard } from "@/state/referral"; import { formatter } from "@/utils/format"; export function ReferralStatsCard() { - const { data, isLoading } = useUserReferralProfile(); + const { data, isLoading } = useFarmerReferralData(); + const { data: leaderboardData, userRank, isLoading: isLeaderboardLoading } = useReferralLeaderboard(); - if (isLoading) { + if (isLoading || isLeaderboardLoading) { return (
      Your Referral Stats
      @@ -24,24 +25,14 @@ export function ReferralStatsCard() { }, { label: "Total successful referrals", - value: data?.totalSuccessfulReferrals ?? 0, + value: data?.refereeCount ?? 0, description: "Number of users who used your link", }, { label: "Referral Ranking", - value: data?.rankDisplay ?? "-", + value: userRank && leaderboardData ? `#${userRank}/${leaderboardData.length}` : "-", description: "Your rank among all referrers", }, - { - label: "Total Pods created from referrals", - value: data ? formatter.noDec(data.totalPodsCreatedFromReferrals) : "0", - description: "Total Pods your referrals have earned", - }, - { - label: "Total Pinto Sown from referrals", - value: data ? formatter.twoDec(data.totalPintoSownFromReferrals) : "0.00", - description: "Total Pinto your referrals have sown", - }, ]; return ( diff --git a/src/generated/gql/exchange/graphql.ts b/src/generated/gql/exchange/graphql.ts index d65a9c621..bbafe59fd 100644 --- a/src/generated/gql/exchange/graphql.ts +++ b/src/generated/gql/exchange/graphql.ts @@ -17,15 +17,9 @@ export type Scalars = { BigDecimal: { input: any; output: any; } BigInt: { input: any; output: any; } Bytes: { input: any; output: any; } - /** - * 8 bytes signed integer - * - */ + /** 8 bytes signed integer */ Int8: { input: any; output: any; } - /** - * A string representation of microseconds UNIX timestamp (16 digits) - * - */ + /** A string representation of microseconds UNIX timestamp (16 digits) */ Timestamp: { input: any; output: any; } }; @@ -38,16 +32,16 @@ export type Account = { export type AccountTradesArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; -export type Account_Filter = { +export type AccountFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; id?: InputMaybe; id_contains?: InputMaybe; id_gt?: InputMaybe; @@ -58,18 +52,18 @@ export type Account_Filter = { id_not?: InputMaybe; id_not_contains?: InputMaybe; id_not_in?: InputMaybe>; - or?: InputMaybe>>; - trades_?: InputMaybe; + or?: InputMaybe>>; + trades_?: InputMaybe; }; -export enum Account_OrderBy { - Id = 'id', - Trades = 'trades' +export enum AccountOrderBy { + id = 'id', + trades = 'trades' } -export enum Aggregation_Interval { - Day = 'day', - Hour = 'hour' +export enum AggregationInterval { + day = 'day', + hour = 'hour' } export type Aquifer = { @@ -83,16 +77,16 @@ export type Aquifer = { export type AquiferWellsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; -export type Aquifer_Filter = { +export type AquiferFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; id?: InputMaybe; id_contains?: InputMaybe; id_gt?: InputMaybe; @@ -103,13 +97,13 @@ export type Aquifer_Filter = { id_not?: InputMaybe; id_not_contains?: InputMaybe; id_not_in?: InputMaybe>; - or?: InputMaybe>>; - wells_?: InputMaybe; + or?: InputMaybe>>; + wells_?: InputMaybe; }; -export enum Aquifer_OrderBy { - Id = 'id', - Wells = 'wells' +export enum AquiferOrderBy { + id = 'id', + wells = 'wells' } export type Beanstalk = { @@ -191,10 +185,10 @@ export type Beanstalk = { export type BeanstalkWellsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type BeanstalkDailySnapshot = { @@ -258,16 +252,16 @@ export type BeanstalkDailySnapshot = { export type BeanstalkDailySnapshotWellsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; -export type BeanstalkDailySnapshot_Filter = { +export type BeanstalkDailySnapshotFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; createdTimestamp?: InputMaybe; createdTimestamp_gt?: InputMaybe; createdTimestamp_gte?: InputMaybe; @@ -460,9 +454,9 @@ export type BeanstalkDailySnapshot_Filter = { lastUpdateTimestamp_lte?: InputMaybe; lastUpdateTimestamp_not?: InputMaybe; lastUpdateTimestamp_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; season?: InputMaybe; - season_?: InputMaybe; + season_?: InputMaybe; season_contains?: InputMaybe; season_contains_nocase?: InputMaybe; season_ends_with?: InputMaybe; @@ -491,7 +485,7 @@ export type BeanstalkDailySnapshot_Filter = { totalLiquidityUSD_not?: InputMaybe; totalLiquidityUSD_not_in?: InputMaybe>; wells?: InputMaybe>; - wells_?: InputMaybe; + wells_?: InputMaybe; wells_contains?: InputMaybe>; wells_contains_nocase?: InputMaybe>; wells_not?: InputMaybe>; @@ -499,37 +493,37 @@ export type BeanstalkDailySnapshot_Filter = { wells_not_contains_nocase?: InputMaybe>; }; -export enum BeanstalkDailySnapshot_OrderBy { - CreatedTimestamp = 'createdTimestamp', - CumulativeBuyVolumeUsd = 'cumulativeBuyVolumeUSD', - CumulativeConvertDownVolumeUsd = 'cumulativeConvertDownVolumeUSD', - CumulativeConvertNeutralTradeVolumeUsd = 'cumulativeConvertNeutralTradeVolumeUSD', - CumulativeConvertNeutralTransferVolumeUsd = 'cumulativeConvertNeutralTransferVolumeUSD', - CumulativeConvertUpVolumeUsd = 'cumulativeConvertUpVolumeUSD', - CumulativeConvertVolumeUsd = 'cumulativeConvertVolumeUSD', - CumulativeSellVolumeUsd = 'cumulativeSellVolumeUSD', - CumulativeTradeVolumeUsd = 'cumulativeTradeVolumeUSD', - CumulativeTransferVolumeUsd = 'cumulativeTransferVolumeUSD', - Day = 'day', - DeltaBuyVolumeUsd = 'deltaBuyVolumeUSD', - DeltaConvertDownVolumeUsd = 'deltaConvertDownVolumeUSD', - DeltaConvertNeutralTradeVolumeUsd = 'deltaConvertNeutralTradeVolumeUSD', - DeltaConvertNeutralTransferVolumeUsd = 'deltaConvertNeutralTransferVolumeUSD', - DeltaConvertUpVolumeUsd = 'deltaConvertUpVolumeUSD', - DeltaConvertVolumeUsd = 'deltaConvertVolumeUSD', - DeltaLiquidityUsd = 'deltaLiquidityUSD', - DeltaSellVolumeUsd = 'deltaSellVolumeUSD', - DeltaTradeVolumeUsd = 'deltaTradeVolumeUSD', - DeltaTransferVolumeUsd = 'deltaTransferVolumeUSD', - Id = 'id', - LastUpdateBlockNumber = 'lastUpdateBlockNumber', - LastUpdateTimestamp = 'lastUpdateTimestamp', - Season = 'season', - SeasonId = 'season__id', - SeasonSeason = 'season__season', - SeasonTimestamp = 'season__timestamp', - TotalLiquidityUsd = 'totalLiquidityUSD', - Wells = 'wells' +export enum BeanstalkDailySnapshotOrderBy { + createdTimestamp = 'createdTimestamp', + cumulativeBuyVolumeUSD = 'cumulativeBuyVolumeUSD', + cumulativeConvertDownVolumeUSD = 'cumulativeConvertDownVolumeUSD', + cumulativeConvertNeutralTradeVolumeUSD = 'cumulativeConvertNeutralTradeVolumeUSD', + cumulativeConvertNeutralTransferVolumeUSD = 'cumulativeConvertNeutralTransferVolumeUSD', + cumulativeConvertUpVolumeUSD = 'cumulativeConvertUpVolumeUSD', + cumulativeConvertVolumeUSD = 'cumulativeConvertVolumeUSD', + cumulativeSellVolumeUSD = 'cumulativeSellVolumeUSD', + cumulativeTradeVolumeUSD = 'cumulativeTradeVolumeUSD', + cumulativeTransferVolumeUSD = 'cumulativeTransferVolumeUSD', + day = 'day', + deltaBuyVolumeUSD = 'deltaBuyVolumeUSD', + deltaConvertDownVolumeUSD = 'deltaConvertDownVolumeUSD', + deltaConvertNeutralTradeVolumeUSD = 'deltaConvertNeutralTradeVolumeUSD', + deltaConvertNeutralTransferVolumeUSD = 'deltaConvertNeutralTransferVolumeUSD', + deltaConvertUpVolumeUSD = 'deltaConvertUpVolumeUSD', + deltaConvertVolumeUSD = 'deltaConvertVolumeUSD', + deltaLiquidityUSD = 'deltaLiquidityUSD', + deltaSellVolumeUSD = 'deltaSellVolumeUSD', + deltaTradeVolumeUSD = 'deltaTradeVolumeUSD', + deltaTransferVolumeUSD = 'deltaTransferVolumeUSD', + id = 'id', + lastUpdateBlockNumber = 'lastUpdateBlockNumber', + lastUpdateTimestamp = 'lastUpdateTimestamp', + season = 'season', + season__id = 'season__id', + season__season = 'season__season', + season__timestamp = 'season__timestamp', + totalLiquidityUSD = 'totalLiquidityUSD', + wells = 'wells' } export type BeanstalkHourlySnapshot = { @@ -591,16 +585,16 @@ export type BeanstalkHourlySnapshot = { export type BeanstalkHourlySnapshotWellsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; -export type BeanstalkHourlySnapshot_Filter = { +export type BeanstalkHourlySnapshotFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; createdTimestamp?: InputMaybe; createdTimestamp_gt?: InputMaybe; createdTimestamp_gte?: InputMaybe; @@ -785,9 +779,9 @@ export type BeanstalkHourlySnapshot_Filter = { lastUpdateTimestamp_lte?: InputMaybe; lastUpdateTimestamp_not?: InputMaybe; lastUpdateTimestamp_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; season?: InputMaybe; - season_?: InputMaybe; + season_?: InputMaybe; season_contains?: InputMaybe; season_contains_nocase?: InputMaybe; season_ends_with?: InputMaybe; @@ -816,7 +810,7 @@ export type BeanstalkHourlySnapshot_Filter = { totalLiquidityUSD_not?: InputMaybe; totalLiquidityUSD_not_in?: InputMaybe>; wells?: InputMaybe>; - wells_?: InputMaybe; + wells_?: InputMaybe; wells_contains?: InputMaybe>; wells_contains_nocase?: InputMaybe>; wells_not?: InputMaybe>; @@ -824,42 +818,42 @@ export type BeanstalkHourlySnapshot_Filter = { wells_not_contains_nocase?: InputMaybe>; }; -export enum BeanstalkHourlySnapshot_OrderBy { - CreatedTimestamp = 'createdTimestamp', - CumulativeBuyVolumeUsd = 'cumulativeBuyVolumeUSD', - CumulativeConvertDownVolumeUsd = 'cumulativeConvertDownVolumeUSD', - CumulativeConvertNeutralTradeVolumeUsd = 'cumulativeConvertNeutralTradeVolumeUSD', - CumulativeConvertNeutralTransferVolumeUsd = 'cumulativeConvertNeutralTransferVolumeUSD', - CumulativeConvertUpVolumeUsd = 'cumulativeConvertUpVolumeUSD', - CumulativeConvertVolumeUsd = 'cumulativeConvertVolumeUSD', - CumulativeSellVolumeUsd = 'cumulativeSellVolumeUSD', - CumulativeTradeVolumeUsd = 'cumulativeTradeVolumeUSD', - CumulativeTransferVolumeUsd = 'cumulativeTransferVolumeUSD', - DeltaBuyVolumeUsd = 'deltaBuyVolumeUSD', - DeltaConvertDownVolumeUsd = 'deltaConvertDownVolumeUSD', - DeltaConvertNeutralTradeVolumeUsd = 'deltaConvertNeutralTradeVolumeUSD', - DeltaConvertNeutralTransferVolumeUsd = 'deltaConvertNeutralTransferVolumeUSD', - DeltaConvertUpVolumeUsd = 'deltaConvertUpVolumeUSD', - DeltaConvertVolumeUsd = 'deltaConvertVolumeUSD', - DeltaLiquidityUsd = 'deltaLiquidityUSD', - DeltaSellVolumeUsd = 'deltaSellVolumeUSD', - DeltaTradeVolumeUsd = 'deltaTradeVolumeUSD', - DeltaTransferVolumeUsd = 'deltaTransferVolumeUSD', - Id = 'id', - LastUpdateBlockNumber = 'lastUpdateBlockNumber', - LastUpdateTimestamp = 'lastUpdateTimestamp', - Season = 'season', - SeasonId = 'season__id', - SeasonSeason = 'season__season', - SeasonTimestamp = 'season__timestamp', - TotalLiquidityUsd = 'totalLiquidityUSD', - Wells = 'wells' +export enum BeanstalkHourlySnapshotOrderBy { + createdTimestamp = 'createdTimestamp', + cumulativeBuyVolumeUSD = 'cumulativeBuyVolumeUSD', + cumulativeConvertDownVolumeUSD = 'cumulativeConvertDownVolumeUSD', + cumulativeConvertNeutralTradeVolumeUSD = 'cumulativeConvertNeutralTradeVolumeUSD', + cumulativeConvertNeutralTransferVolumeUSD = 'cumulativeConvertNeutralTransferVolumeUSD', + cumulativeConvertUpVolumeUSD = 'cumulativeConvertUpVolumeUSD', + cumulativeConvertVolumeUSD = 'cumulativeConvertVolumeUSD', + cumulativeSellVolumeUSD = 'cumulativeSellVolumeUSD', + cumulativeTradeVolumeUSD = 'cumulativeTradeVolumeUSD', + cumulativeTransferVolumeUSD = 'cumulativeTransferVolumeUSD', + deltaBuyVolumeUSD = 'deltaBuyVolumeUSD', + deltaConvertDownVolumeUSD = 'deltaConvertDownVolumeUSD', + deltaConvertNeutralTradeVolumeUSD = 'deltaConvertNeutralTradeVolumeUSD', + deltaConvertNeutralTransferVolumeUSD = 'deltaConvertNeutralTransferVolumeUSD', + deltaConvertUpVolumeUSD = 'deltaConvertUpVolumeUSD', + deltaConvertVolumeUSD = 'deltaConvertVolumeUSD', + deltaLiquidityUSD = 'deltaLiquidityUSD', + deltaSellVolumeUSD = 'deltaSellVolumeUSD', + deltaTradeVolumeUSD = 'deltaTradeVolumeUSD', + deltaTransferVolumeUSD = 'deltaTransferVolumeUSD', + id = 'id', + lastUpdateBlockNumber = 'lastUpdateBlockNumber', + lastUpdateTimestamp = 'lastUpdateTimestamp', + season = 'season', + season__id = 'season__id', + season__season = 'season__season', + season__timestamp = 'season__timestamp', + totalLiquidityUSD = 'totalLiquidityUSD', + wells = 'wells' } -export type Beanstalk_Filter = { +export type BeanstalkFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; createdTimestamp?: InputMaybe; createdTimestamp_gt?: InputMaybe; createdTimestamp_gte?: InputMaybe; @@ -965,7 +959,7 @@ export type Beanstalk_Filter = { lastHourlySnapshotSeason_not?: InputMaybe; lastHourlySnapshotSeason_not_in?: InputMaybe>; lastSeason?: InputMaybe; - lastSeason_?: InputMaybe; + lastSeason_?: InputMaybe; lastSeason_contains?: InputMaybe; lastSeason_contains_nocase?: InputMaybe; lastSeason_ends_with?: InputMaybe; @@ -1001,7 +995,7 @@ export type Beanstalk_Filter = { lastUpdateTimestamp_lte?: InputMaybe; lastUpdateTimestamp_not?: InputMaybe; lastUpdateTimestamp_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; rollingDailyBuyVolumeUSD?: InputMaybe; rollingDailyBuyVolumeUSD_gt?: InputMaybe; rollingDailyBuyVolumeUSD_gte?: InputMaybe; @@ -1155,7 +1149,7 @@ export type Beanstalk_Filter = { totalLiquidityUSD_not?: InputMaybe; totalLiquidityUSD_not_in?: InputMaybe>; wells?: InputMaybe>; - wells_?: InputMaybe; + wells_?: InputMaybe; wells_contains?: InputMaybe>; wells_contains_nocase?: InputMaybe>; wells_not?: InputMaybe>; @@ -1163,53 +1157,53 @@ export type Beanstalk_Filter = { wells_not_contains_nocase?: InputMaybe>; }; -export enum Beanstalk_OrderBy { - CreatedTimestamp = 'createdTimestamp', - CumulativeBuyVolumeUsd = 'cumulativeBuyVolumeUSD', - CumulativeConvertDownVolumeUsd = 'cumulativeConvertDownVolumeUSD', - CumulativeConvertNeutralTradeVolumeUsd = 'cumulativeConvertNeutralTradeVolumeUSD', - CumulativeConvertNeutralTransferVolumeUsd = 'cumulativeConvertNeutralTransferVolumeUSD', - CumulativeConvertUpVolumeUsd = 'cumulativeConvertUpVolumeUSD', - CumulativeConvertVolumeUsd = 'cumulativeConvertVolumeUSD', - CumulativeSellVolumeUsd = 'cumulativeSellVolumeUSD', - CumulativeTradeVolumeUsd = 'cumulativeTradeVolumeUSD', - CumulativeTransferVolumeUsd = 'cumulativeTransferVolumeUSD', - Id = 'id', - LastDailySnapshotDay = 'lastDailySnapshotDay', - LastHourlySnapshotSeason = 'lastHourlySnapshotSeason', - LastSeason = 'lastSeason', - LastSeasonId = 'lastSeason__id', - LastSeasonSeason = 'lastSeason__season', - LastSeasonTimestamp = 'lastSeason__timestamp', - LastUpdateBlockNumber = 'lastUpdateBlockNumber', - LastUpdateTimestamp = 'lastUpdateTimestamp', - RollingDailyBuyVolumeUsd = 'rollingDailyBuyVolumeUSD', - RollingDailyConvertDownVolumeUsd = 'rollingDailyConvertDownVolumeUSD', - RollingDailyConvertNeutralTradeVolumeUsd = 'rollingDailyConvertNeutralTradeVolumeUSD', - RollingDailyConvertNeutralTransferVolumeUsd = 'rollingDailyConvertNeutralTransferVolumeUSD', - RollingDailyConvertUpVolumeUsd = 'rollingDailyConvertUpVolumeUSD', - RollingDailyConvertVolumeUsd = 'rollingDailyConvertVolumeUSD', - RollingDailySellVolumeUsd = 'rollingDailySellVolumeUSD', - RollingDailyTradeVolumeUsd = 'rollingDailyTradeVolumeUSD', - RollingDailyTransferVolumeUsd = 'rollingDailyTransferVolumeUSD', - RollingWeeklyBuyVolumeUsd = 'rollingWeeklyBuyVolumeUSD', - RollingWeeklyConvertDownVolumeUsd = 'rollingWeeklyConvertDownVolumeUSD', - RollingWeeklyConvertNeutralTradeVolumeUsd = 'rollingWeeklyConvertNeutralTradeVolumeUSD', - RollingWeeklyConvertNeutralTransferVolumeUsd = 'rollingWeeklyConvertNeutralTransferVolumeUSD', - RollingWeeklyConvertUpVolumeUsd = 'rollingWeeklyConvertUpVolumeUSD', - RollingWeeklyConvertVolumeUsd = 'rollingWeeklyConvertVolumeUSD', - RollingWeeklySellVolumeUsd = 'rollingWeeklySellVolumeUSD', - RollingWeeklyTradeVolumeUsd = 'rollingWeeklyTradeVolumeUSD', - RollingWeeklyTransferVolumeUsd = 'rollingWeeklyTransferVolumeUSD', - TotalLiquidityUsd = 'totalLiquidityUSD', - Wells = 'wells' +export enum BeanstalkOrderBy { + createdTimestamp = 'createdTimestamp', + cumulativeBuyVolumeUSD = 'cumulativeBuyVolumeUSD', + cumulativeConvertDownVolumeUSD = 'cumulativeConvertDownVolumeUSD', + cumulativeConvertNeutralTradeVolumeUSD = 'cumulativeConvertNeutralTradeVolumeUSD', + cumulativeConvertNeutralTransferVolumeUSD = 'cumulativeConvertNeutralTransferVolumeUSD', + cumulativeConvertUpVolumeUSD = 'cumulativeConvertUpVolumeUSD', + cumulativeConvertVolumeUSD = 'cumulativeConvertVolumeUSD', + cumulativeSellVolumeUSD = 'cumulativeSellVolumeUSD', + cumulativeTradeVolumeUSD = 'cumulativeTradeVolumeUSD', + cumulativeTransferVolumeUSD = 'cumulativeTransferVolumeUSD', + id = 'id', + lastDailySnapshotDay = 'lastDailySnapshotDay', + lastHourlySnapshotSeason = 'lastHourlySnapshotSeason', + lastSeason = 'lastSeason', + lastSeason__id = 'lastSeason__id', + lastSeason__season = 'lastSeason__season', + lastSeason__timestamp = 'lastSeason__timestamp', + lastUpdateBlockNumber = 'lastUpdateBlockNumber', + lastUpdateTimestamp = 'lastUpdateTimestamp', + rollingDailyBuyVolumeUSD = 'rollingDailyBuyVolumeUSD', + rollingDailyConvertDownVolumeUSD = 'rollingDailyConvertDownVolumeUSD', + rollingDailyConvertNeutralTradeVolumeUSD = 'rollingDailyConvertNeutralTradeVolumeUSD', + rollingDailyConvertNeutralTransferVolumeUSD = 'rollingDailyConvertNeutralTransferVolumeUSD', + rollingDailyConvertUpVolumeUSD = 'rollingDailyConvertUpVolumeUSD', + rollingDailyConvertVolumeUSD = 'rollingDailyConvertVolumeUSD', + rollingDailySellVolumeUSD = 'rollingDailySellVolumeUSD', + rollingDailyTradeVolumeUSD = 'rollingDailyTradeVolumeUSD', + rollingDailyTransferVolumeUSD = 'rollingDailyTransferVolumeUSD', + rollingWeeklyBuyVolumeUSD = 'rollingWeeklyBuyVolumeUSD', + rollingWeeklyConvertDownVolumeUSD = 'rollingWeeklyConvertDownVolumeUSD', + rollingWeeklyConvertNeutralTradeVolumeUSD = 'rollingWeeklyConvertNeutralTradeVolumeUSD', + rollingWeeklyConvertNeutralTransferVolumeUSD = 'rollingWeeklyConvertNeutralTransferVolumeUSD', + rollingWeeklyConvertUpVolumeUSD = 'rollingWeeklyConvertUpVolumeUSD', + rollingWeeklyConvertVolumeUSD = 'rollingWeeklyConvertVolumeUSD', + rollingWeeklySellVolumeUSD = 'rollingWeeklySellVolumeUSD', + rollingWeeklyTradeVolumeUSD = 'rollingWeeklyTradeVolumeUSD', + rollingWeeklyTransferVolumeUSD = 'rollingWeeklyTransferVolumeUSD', + totalLiquidityUSD = 'totalLiquidityUSD', + wells = 'wells' } export type BlockChangedFilter = { number_gte: Scalars['Int']['input']; }; -export type Block_Height = { +export type BlockHeight = { hash?: InputMaybe; number?: InputMaybe; number_gte?: InputMaybe; @@ -1225,11 +1219,11 @@ export type ConvertCandidate = { removeLiquidityTrade?: Maybe; }; -export type ConvertCandidate_Filter = { +export type ConvertCandidateFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; addLiquidityTrade?: InputMaybe; - addLiquidityTrade_?: InputMaybe; + addLiquidityTrade_?: InputMaybe; addLiquidityTrade_contains?: InputMaybe; addLiquidityTrade_contains_nocase?: InputMaybe; addLiquidityTrade_ends_with?: InputMaybe; @@ -1249,7 +1243,7 @@ export type ConvertCandidate_Filter = { addLiquidityTrade_not_starts_with_nocase?: InputMaybe; addLiquidityTrade_starts_with?: InputMaybe; addLiquidityTrade_starts_with_nocase?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; id?: InputMaybe; id_gt?: InputMaybe; id_gte?: InputMaybe; @@ -1258,9 +1252,9 @@ export type ConvertCandidate_Filter = { id_lte?: InputMaybe; id_not?: InputMaybe; id_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; removeLiquidityTrade?: InputMaybe; - removeLiquidityTrade_?: InputMaybe; + removeLiquidityTrade_?: InputMaybe; removeLiquidityTrade_contains?: InputMaybe; removeLiquidityTrade_contains_nocase?: InputMaybe; removeLiquidityTrade_ends_with?: InputMaybe; @@ -1282,34 +1276,34 @@ export type ConvertCandidate_Filter = { removeLiquidityTrade_starts_with_nocase?: InputMaybe; }; -export enum ConvertCandidate_OrderBy { - AddLiquidityTrade = 'addLiquidityTrade', - AddLiquidityTradeBlockNumber = 'addLiquidityTrade__blockNumber', - AddLiquidityTradeHash = 'addLiquidityTrade__hash', - AddLiquidityTradeId = 'addLiquidityTrade__id', - AddLiquidityTradeIsConvert = 'addLiquidityTrade__isConvert', - AddLiquidityTradeLiqLpTokenAmount = 'addLiquidityTrade__liqLpTokenAmount', - AddLiquidityTradeLogIndex = 'addLiquidityTrade__logIndex', - AddLiquidityTradeSwapAmountIn = 'addLiquidityTrade__swapAmountIn', - AddLiquidityTradeSwapAmountOut = 'addLiquidityTrade__swapAmountOut', - AddLiquidityTradeTimestamp = 'addLiquidityTrade__timestamp', - AddLiquidityTradeTradeType = 'addLiquidityTrade__tradeType', - AddLiquidityTradeTradeVolumeUsd = 'addLiquidityTrade__tradeVolumeUSD', - AddLiquidityTradeTransferVolumeUsd = 'addLiquidityTrade__transferVolumeUSD', - Id = 'id', - RemoveLiquidityTrade = 'removeLiquidityTrade', - RemoveLiquidityTradeBlockNumber = 'removeLiquidityTrade__blockNumber', - RemoveLiquidityTradeHash = 'removeLiquidityTrade__hash', - RemoveLiquidityTradeId = 'removeLiquidityTrade__id', - RemoveLiquidityTradeIsConvert = 'removeLiquidityTrade__isConvert', - RemoveLiquidityTradeLiqLpTokenAmount = 'removeLiquidityTrade__liqLpTokenAmount', - RemoveLiquidityTradeLogIndex = 'removeLiquidityTrade__logIndex', - RemoveLiquidityTradeSwapAmountIn = 'removeLiquidityTrade__swapAmountIn', - RemoveLiquidityTradeSwapAmountOut = 'removeLiquidityTrade__swapAmountOut', - RemoveLiquidityTradeTimestamp = 'removeLiquidityTrade__timestamp', - RemoveLiquidityTradeTradeType = 'removeLiquidityTrade__tradeType', - RemoveLiquidityTradeTradeVolumeUsd = 'removeLiquidityTrade__tradeVolumeUSD', - RemoveLiquidityTradeTransferVolumeUsd = 'removeLiquidityTrade__transferVolumeUSD' +export enum ConvertCandidateOrderBy { + addLiquidityTrade = 'addLiquidityTrade', + addLiquidityTrade__blockNumber = 'addLiquidityTrade__blockNumber', + addLiquidityTrade__hash = 'addLiquidityTrade__hash', + addLiquidityTrade__id = 'addLiquidityTrade__id', + addLiquidityTrade__isConvert = 'addLiquidityTrade__isConvert', + addLiquidityTrade__liqLpTokenAmount = 'addLiquidityTrade__liqLpTokenAmount', + addLiquidityTrade__logIndex = 'addLiquidityTrade__logIndex', + addLiquidityTrade__swapAmountIn = 'addLiquidityTrade__swapAmountIn', + addLiquidityTrade__swapAmountOut = 'addLiquidityTrade__swapAmountOut', + addLiquidityTrade__timestamp = 'addLiquidityTrade__timestamp', + addLiquidityTrade__tradeType = 'addLiquidityTrade__tradeType', + addLiquidityTrade__tradeVolumeUSD = 'addLiquidityTrade__tradeVolumeUSD', + addLiquidityTrade__transferVolumeUSD = 'addLiquidityTrade__transferVolumeUSD', + id = 'id', + removeLiquidityTrade = 'removeLiquidityTrade', + removeLiquidityTrade__blockNumber = 'removeLiquidityTrade__blockNumber', + removeLiquidityTrade__hash = 'removeLiquidityTrade__hash', + removeLiquidityTrade__id = 'removeLiquidityTrade__id', + removeLiquidityTrade__isConvert = 'removeLiquidityTrade__isConvert', + removeLiquidityTrade__liqLpTokenAmount = 'removeLiquidityTrade__liqLpTokenAmount', + removeLiquidityTrade__logIndex = 'removeLiquidityTrade__logIndex', + removeLiquidityTrade__swapAmountIn = 'removeLiquidityTrade__swapAmountIn', + removeLiquidityTrade__swapAmountOut = 'removeLiquidityTrade__swapAmountOut', + removeLiquidityTrade__timestamp = 'removeLiquidityTrade__timestamp', + removeLiquidityTrade__tradeType = 'removeLiquidityTrade__tradeType', + removeLiquidityTrade__tradeVolumeUSD = 'removeLiquidityTrade__tradeVolumeUSD', + removeLiquidityTrade__transferVolumeUSD = 'removeLiquidityTrade__transferVolumeUSD' } export type Implementation = { @@ -1323,16 +1317,16 @@ export type Implementation = { export type ImplementationWellsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; -export type Implementation_Filter = { +export type ImplementationFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; id?: InputMaybe; id_contains?: InputMaybe; id_gt?: InputMaybe; @@ -1343,19 +1337,19 @@ export type Implementation_Filter = { id_not?: InputMaybe; id_not_contains?: InputMaybe; id_not_in?: InputMaybe>; - or?: InputMaybe>>; - wells_?: InputMaybe; + or?: InputMaybe>>; + wells_?: InputMaybe; }; -export enum Implementation_OrderBy { - Id = 'id', - Wells = 'wells' +export enum ImplementationOrderBy { + id = 'id', + wells = 'wells' } /** Defines the order direction, either ascending or descending */ export enum OrderDirection { - Asc = 'asc', - Desc = 'desc' + asc = 'asc', + desc = 'desc' } export type Pump = { @@ -1369,16 +1363,16 @@ export type Pump = { export type PumpWellsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; -export type Pump_Filter = { +export type PumpFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; id?: InputMaybe; id_contains?: InputMaybe; id_gt?: InputMaybe; @@ -1389,19 +1383,19 @@ export type Pump_Filter = { id_not?: InputMaybe; id_not_contains?: InputMaybe; id_not_in?: InputMaybe>; - or?: InputMaybe>>; - wells_?: InputMaybe; + or?: InputMaybe>>; + wells_?: InputMaybe; }; -export enum Pump_OrderBy { - Id = 'id', - Wells = 'wells' +export enum PumpOrderBy { + id = 'id', + wells = 'wells' } export type Query = { __typename?: 'Query'; /** Access to subgraph metadata */ - _meta?: Maybe<_Meta_>; + _meta?: Maybe; account?: Maybe; accounts: Array; aquifer?: Maybe; @@ -1439,314 +1433,314 @@ export type Query = { }; -export type Query_MetaArgs = { - block?: InputMaybe; +export type QueryMetaArgs = { + block?: InputMaybe; }; export type QueryAccountArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryAccountsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryAquiferArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryAquifersArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryBeanstalkArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryBeanstalkDailySnapshotArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryBeanstalkDailySnapshotsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryBeanstalkHourlySnapshotArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryBeanstalkHourlySnapshotsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryBeanstalksArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryConvertCandidateArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryConvertCandidatesArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryImplementationArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryImplementationsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryPumpArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryPumpsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QuerySeasonArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QuerySeasonsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryTokenArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryTokensArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryTradeArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryTradesArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryVersionArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryVersionsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryWellArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryWellDailySnapshotArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryWellDailySnapshotsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryWellFunctionArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryWellFunctionsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryWellHourlySnapshotArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryWellHourlySnapshotsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryWellUpgradeHistoriesArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryWellUpgradeHistoryArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryWellsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type Season = { @@ -1766,45 +1760,45 @@ export type Season = { export type SeasonBeanstalkDailySnapshotsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type SeasonBeanstalkHourlySnapshotsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type SeasonWellDailySnapshotsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type SeasonWellHourlySnapshotsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; -export type Season_Filter = { +export type SeasonFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; - beanstalkDailySnapshots_?: InputMaybe; - beanstalkHourlySnapshots_?: InputMaybe; + and?: InputMaybe>>; + beanstalkDailySnapshots_?: InputMaybe; + beanstalkHourlySnapshots_?: InputMaybe; id?: InputMaybe; id_gt?: InputMaybe; id_gte?: InputMaybe; @@ -1813,7 +1807,7 @@ export type Season_Filter = { id_lte?: InputMaybe; id_not?: InputMaybe; id_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; season?: InputMaybe; season_gt?: InputMaybe; season_gte?: InputMaybe; @@ -1830,371 +1824,20 @@ export type Season_Filter = { timestamp_lte?: InputMaybe; timestamp_not?: InputMaybe; timestamp_not_in?: InputMaybe>; - wellDailySnapshots_?: InputMaybe; - wellHourlySnapshots_?: InputMaybe; -}; - -export enum Season_OrderBy { - BeanstalkDailySnapshots = 'beanstalkDailySnapshots', - BeanstalkHourlySnapshots = 'beanstalkHourlySnapshots', - Id = 'id', - Season = 'season', - Timestamp = 'timestamp', - WellDailySnapshots = 'wellDailySnapshots', - WellHourlySnapshots = 'wellHourlySnapshots' + wellDailySnapshots_?: InputMaybe; + wellHourlySnapshots_?: InputMaybe; +}; + +export enum SeasonOrderBy { + beanstalkDailySnapshots = 'beanstalkDailySnapshots', + beanstalkHourlySnapshots = 'beanstalkHourlySnapshots', + id = 'id', + season = 'season', + timestamp = 'timestamp', + wellDailySnapshots = 'wellDailySnapshots', + wellHourlySnapshots = 'wellHourlySnapshots' } -export type Subscription = { - __typename?: 'Subscription'; - /** Access to subgraph metadata */ - _meta?: Maybe<_Meta_>; - account?: Maybe; - accounts: Array; - aquifer?: Maybe; - aquifers: Array; - beanstalk?: Maybe; - beanstalkDailySnapshot?: Maybe; - beanstalkDailySnapshots: Array; - beanstalkHourlySnapshot?: Maybe; - beanstalkHourlySnapshots: Array; - beanstalks: Array; - convertCandidate?: Maybe; - convertCandidates: Array; - implementation?: Maybe; - implementations: Array; - pump?: Maybe; - pumps: Array; - season?: Maybe; - seasons: Array; - token?: Maybe; - tokens: Array; - trade?: Maybe; - trades: Array; - version?: Maybe; - versions: Array; - well?: Maybe; - wellDailySnapshot?: Maybe; - wellDailySnapshots: Array; - wellFunction?: Maybe; - wellFunctions: Array; - wellHourlySnapshot?: Maybe; - wellHourlySnapshots: Array; - wellUpgradeHistories: Array; - wellUpgradeHistory?: Maybe; - wells: Array; -}; - - -export type Subscription_MetaArgs = { - block?: InputMaybe; -}; - - -export type SubscriptionAccountArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionAccountsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionAquiferArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionAquifersArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionBeanstalkArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionBeanstalkDailySnapshotArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionBeanstalkDailySnapshotsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionBeanstalkHourlySnapshotArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionBeanstalkHourlySnapshotsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionBeanstalksArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionConvertCandidateArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionConvertCandidatesArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionImplementationArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionImplementationsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionPumpArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionPumpsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionSeasonArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionSeasonsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionTokenArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionTokensArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionTradeArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionTradesArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionVersionArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionVersionsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionWellArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionWellDailySnapshotArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionWellDailySnapshotsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionWellFunctionArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionWellFunctionsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionWellHourlySnapshotArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionWellHourlySnapshotsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionWellUpgradeHistoriesArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionWellUpgradeHistoryArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionWellsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - export type Token = { __typename?: 'Token'; /** The number of decimal places this token uses, default to 18 */ @@ -2211,10 +1854,10 @@ export type Token = { symbol: Scalars['String']['output']; }; -export type Token_Filter = { +export type TokenFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; decimals?: InputMaybe; decimals_gt?: InputMaybe; decimals_gte?: InputMaybe; @@ -2269,7 +1912,7 @@ export type Token_Filter = { name_not_starts_with_nocase?: InputMaybe; name_starts_with?: InputMaybe; name_starts_with_nocase?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe>>; symbol?: InputMaybe; symbol_contains?: InputMaybe; symbol_contains_nocase?: InputMaybe; @@ -2292,13 +1935,13 @@ export type Token_Filter = { symbol_starts_with_nocase?: InputMaybe; }; -export enum Token_OrderBy { - Decimals = 'decimals', - Id = 'id', - LastPriceBlockNumber = 'lastPriceBlockNumber', - LastPriceUsd = 'lastPriceUSD', - Name = 'name', - Symbol = 'symbol' +export enum TokenOrderBy { + decimals = 'decimals', + id = 'id', + lastPriceBlockNumber = 'lastPriceBlockNumber', + lastPriceUSD = 'lastPriceUSD', + name = 'name', + symbol = 'symbol' } export type Trade = { @@ -2358,16 +2001,16 @@ export type Trade = { }; export enum TradeType { - AddLiquidity = 'ADD_LIQUIDITY', - RemoveLiquidity = 'REMOVE_LIQUIDITY', - Swap = 'SWAP' + ADD_LIQUIDITY = 'ADD_LIQUIDITY', + REMOVE_LIQUIDITY = 'REMOVE_LIQUIDITY', + SWAP = 'SWAP' } -export type Trade_Filter = { +export type TradeFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; account?: InputMaybe; - account_?: InputMaybe; + account_?: InputMaybe; account_contains?: InputMaybe; account_contains_nocase?: InputMaybe; account_ends_with?: InputMaybe; @@ -2399,7 +2042,7 @@ export type Trade_Filter = { afterTokenRates_not?: InputMaybe>; afterTokenRates_not_contains?: InputMaybe>; afterTokenRates_not_contains_nocase?: InputMaybe>; - and?: InputMaybe>>; + and?: InputMaybe>>; beforeReserves?: InputMaybe>; beforeReserves_contains?: InputMaybe>; beforeReserves_contains_nocase?: InputMaybe>; @@ -2470,7 +2113,7 @@ export type Trade_Filter = { logIndex_lte?: InputMaybe; logIndex_not?: InputMaybe; logIndex_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; swapAmountIn?: InputMaybe; swapAmountIn_gt?: InputMaybe; swapAmountIn_gte?: InputMaybe; @@ -2488,7 +2131,7 @@ export type Trade_Filter = { swapAmountOut_not?: InputMaybe; swapAmountOut_not_in?: InputMaybe>; swapFromToken?: InputMaybe; - swapFromToken_?: InputMaybe; + swapFromToken_?: InputMaybe; swapFromToken_contains?: InputMaybe; swapFromToken_contains_nocase?: InputMaybe; swapFromToken_ends_with?: InputMaybe; @@ -2509,7 +2152,7 @@ export type Trade_Filter = { swapFromToken_starts_with?: InputMaybe; swapFromToken_starts_with_nocase?: InputMaybe; swapToToken?: InputMaybe; - swapToToken_?: InputMaybe; + swapToToken_?: InputMaybe; swapToToken_contains?: InputMaybe; swapToToken_contains_nocase?: InputMaybe; swapToToken_ends_with?: InputMaybe; @@ -2582,7 +2225,7 @@ export type Trade_Filter = { transferVolumeUSD_not?: InputMaybe; transferVolumeUSD_not_in?: InputMaybe>; well?: InputMaybe; - well_?: InputMaybe; + well_?: InputMaybe; well_contains?: InputMaybe; well_contains_nocase?: InputMaybe; well_ends_with?: InputMaybe; @@ -2604,68 +2247,68 @@ export type Trade_Filter = { well_starts_with_nocase?: InputMaybe; }; -export enum Trade_OrderBy { - Account = 'account', - AccountId = 'account__id', - AfterReserves = 'afterReserves', - AfterTokenRates = 'afterTokenRates', - BeforeReserves = 'beforeReserves', - BeforeTokenRates = 'beforeTokenRates', - BiTradeVolumeReserves = 'biTradeVolumeReserves', - BlockNumber = 'blockNumber', - Hash = 'hash', - Id = 'id', - IsConvert = 'isConvert', - LiqLpTokenAmount = 'liqLpTokenAmount', - LiqReservesAmount = 'liqReservesAmount', - LogIndex = 'logIndex', - SwapAmountIn = 'swapAmountIn', - SwapAmountOut = 'swapAmountOut', - SwapFromToken = 'swapFromToken', - SwapFromTokenDecimals = 'swapFromToken__decimals', - SwapFromTokenId = 'swapFromToken__id', - SwapFromTokenLastPriceBlockNumber = 'swapFromToken__lastPriceBlockNumber', - SwapFromTokenLastPriceUsd = 'swapFromToken__lastPriceUSD', - SwapFromTokenName = 'swapFromToken__name', - SwapFromTokenSymbol = 'swapFromToken__symbol', - SwapToToken = 'swapToToken', - SwapToTokenDecimals = 'swapToToken__decimals', - SwapToTokenId = 'swapToToken__id', - SwapToTokenLastPriceBlockNumber = 'swapToToken__lastPriceBlockNumber', - SwapToTokenLastPriceUsd = 'swapToToken__lastPriceUSD', - SwapToTokenName = 'swapToToken__name', - SwapToTokenSymbol = 'swapToToken__symbol', - Timestamp = 'timestamp', - TradeType = 'tradeType', - TradeVolumeReserves = 'tradeVolumeReserves', - TradeVolumeReservesUsd = 'tradeVolumeReservesUSD', - TradeVolumeUsd = 'tradeVolumeUSD', - TransferVolumeReserves = 'transferVolumeReserves', - TransferVolumeReservesUsd = 'transferVolumeReservesUSD', - TransferVolumeUsd = 'transferVolumeUSD', - Well = 'well', - WellBoredWell = 'well__boredWell', - WellConvertVolumeUsd = 'well__convertVolumeUSD', - WellCreatedTimestamp = 'well__createdTimestamp', - WellCumulativeTradeVolumeUsd = 'well__cumulativeTradeVolumeUSD', - WellCumulativeTransferVolumeUsd = 'well__cumulativeTransferVolumeUSD', - WellId = 'well__id', - WellIsBeanstalk = 'well__isBeanstalk', - WellLastDailySnapshotDay = 'well__lastDailySnapshotDay', - WellLastHourlySnapshotHour = 'well__lastHourlySnapshotHour', - WellLastUpdateBlockNumber = 'well__lastUpdateBlockNumber', - WellLastUpdateTimestamp = 'well__lastUpdateTimestamp', - WellLpTokenSupply = 'well__lpTokenSupply', - WellName = 'well__name', - WellRollingDailyConvertVolumeUsd = 'well__rollingDailyConvertVolumeUSD', - WellRollingDailyTradeVolumeUsd = 'well__rollingDailyTradeVolumeUSD', - WellRollingDailyTransferVolumeUsd = 'well__rollingDailyTransferVolumeUSD', - WellRollingWeeklyConvertVolumeUsd = 'well__rollingWeeklyConvertVolumeUSD', - WellRollingWeeklyTradeVolumeUsd = 'well__rollingWeeklyTradeVolumeUSD', - WellRollingWeeklyTransferVolumeUsd = 'well__rollingWeeklyTransferVolumeUSD', - WellSymbol = 'well__symbol', - WellTotalLiquidityUsd = 'well__totalLiquidityUSD', - WellWellFunctionData = 'well__wellFunctionData' +export enum TradeOrderBy { + account = 'account', + account__id = 'account__id', + afterReserves = 'afterReserves', + afterTokenRates = 'afterTokenRates', + beforeReserves = 'beforeReserves', + beforeTokenRates = 'beforeTokenRates', + biTradeVolumeReserves = 'biTradeVolumeReserves', + blockNumber = 'blockNumber', + hash = 'hash', + id = 'id', + isConvert = 'isConvert', + liqLpTokenAmount = 'liqLpTokenAmount', + liqReservesAmount = 'liqReservesAmount', + logIndex = 'logIndex', + swapAmountIn = 'swapAmountIn', + swapAmountOut = 'swapAmountOut', + swapFromToken = 'swapFromToken', + swapFromToken__decimals = 'swapFromToken__decimals', + swapFromToken__id = 'swapFromToken__id', + swapFromToken__lastPriceBlockNumber = 'swapFromToken__lastPriceBlockNumber', + swapFromToken__lastPriceUSD = 'swapFromToken__lastPriceUSD', + swapFromToken__name = 'swapFromToken__name', + swapFromToken__symbol = 'swapFromToken__symbol', + swapToToken = 'swapToToken', + swapToToken__decimals = 'swapToToken__decimals', + swapToToken__id = 'swapToToken__id', + swapToToken__lastPriceBlockNumber = 'swapToToken__lastPriceBlockNumber', + swapToToken__lastPriceUSD = 'swapToToken__lastPriceUSD', + swapToToken__name = 'swapToToken__name', + swapToToken__symbol = 'swapToToken__symbol', + timestamp = 'timestamp', + tradeType = 'tradeType', + tradeVolumeReserves = 'tradeVolumeReserves', + tradeVolumeReservesUSD = 'tradeVolumeReservesUSD', + tradeVolumeUSD = 'tradeVolumeUSD', + transferVolumeReserves = 'transferVolumeReserves', + transferVolumeReservesUSD = 'transferVolumeReservesUSD', + transferVolumeUSD = 'transferVolumeUSD', + well = 'well', + well__boredWell = 'well__boredWell', + well__convertVolumeUSD = 'well__convertVolumeUSD', + well__createdTimestamp = 'well__createdTimestamp', + well__cumulativeTradeVolumeUSD = 'well__cumulativeTradeVolumeUSD', + well__cumulativeTransferVolumeUSD = 'well__cumulativeTransferVolumeUSD', + well__id = 'well__id', + well__isBeanstalk = 'well__isBeanstalk', + well__lastDailySnapshotDay = 'well__lastDailySnapshotDay', + well__lastHourlySnapshotHour = 'well__lastHourlySnapshotHour', + well__lastUpdateBlockNumber = 'well__lastUpdateBlockNumber', + well__lastUpdateTimestamp = 'well__lastUpdateTimestamp', + well__lpTokenSupply = 'well__lpTokenSupply', + well__name = 'well__name', + well__rollingDailyConvertVolumeUSD = 'well__rollingDailyConvertVolumeUSD', + well__rollingDailyTradeVolumeUSD = 'well__rollingDailyTradeVolumeUSD', + well__rollingDailyTransferVolumeUSD = 'well__rollingDailyTransferVolumeUSD', + well__rollingWeeklyConvertVolumeUSD = 'well__rollingWeeklyConvertVolumeUSD', + well__rollingWeeklyTradeVolumeUSD = 'well__rollingWeeklyTradeVolumeUSD', + well__rollingWeeklyTransferVolumeUSD = 'well__rollingWeeklyTransferVolumeUSD', + well__symbol = 'well__symbol', + well__totalLiquidityUSD = 'well__totalLiquidityUSD', + well__wellFunctionData = 'well__wellFunctionData' } export type Version = { @@ -2682,10 +2325,10 @@ export type Version = { versionNumber: Scalars['String']['output']; }; -export type Version_Filter = { +export type VersionFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; chain?: InputMaybe; chain_contains?: InputMaybe; chain_contains_nocase?: InputMaybe; @@ -2714,7 +2357,7 @@ export type Version_Filter = { id_lte?: InputMaybe; id_not?: InputMaybe; id_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; protocolAddress?: InputMaybe; protocolAddress_contains?: InputMaybe; protocolAddress_gt?: InputMaybe; @@ -2767,12 +2410,12 @@ export type Version_Filter = { versionNumber_starts_with_nocase?: InputMaybe; }; -export enum Version_OrderBy { - Chain = 'chain', - Id = 'id', - ProtocolAddress = 'protocolAddress', - SubgraphName = 'subgraphName', - VersionNumber = 'versionNumber' +export enum VersionOrderBy { + chain = 'chain', + id = 'id', + protocolAddress = 'protocolAddress', + subgraphName = 'subgraphName', + versionNumber = 'versionNumber' } export type Well = { @@ -2894,55 +2537,55 @@ export type Well = { export type WellDailySnapshotsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type WellHourlySnapshotsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type WellPumpsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type WellTokensArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type WellTradesArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type WellUpgradeHistoryArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type WellDailySnapshot = { @@ -3015,10 +2658,10 @@ export type WellDailySnapshot = { well: Well; }; -export type WellDailySnapshot_Filter = { +export type WellDailySnapshotFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; convertVolumeReserves?: InputMaybe>; convertVolumeReservesUSD?: InputMaybe>; convertVolumeReservesUSD_contains?: InputMaybe>; @@ -3221,9 +2864,9 @@ export type WellDailySnapshot_Filter = { lpTokenSupply_lte?: InputMaybe; lpTokenSupply_not?: InputMaybe; lpTokenSupply_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; season?: InputMaybe; - season_?: InputMaybe; + season_?: InputMaybe; season_contains?: InputMaybe; season_contains_nocase?: InputMaybe; season_ends_with?: InputMaybe; @@ -3258,7 +2901,7 @@ export type WellDailySnapshot_Filter = { totalLiquidityUSD_not?: InputMaybe; totalLiquidityUSD_not_in?: InputMaybe>; well?: InputMaybe; - well_?: InputMaybe; + well_?: InputMaybe; well_contains?: InputMaybe; well_contains_nocase?: InputMaybe; well_ends_with?: InputMaybe; @@ -3280,65 +2923,65 @@ export type WellDailySnapshot_Filter = { well_starts_with_nocase?: InputMaybe; }; -export enum WellDailySnapshot_OrderBy { - ConvertVolumeReserves = 'convertVolumeReserves', - ConvertVolumeReservesUsd = 'convertVolumeReservesUSD', - ConvertVolumeUsd = 'convertVolumeUSD', - CreatedTimestamp = 'createdTimestamp', - CumulativeBiTradeVolumeReserves = 'cumulativeBiTradeVolumeReserves', - CumulativeTradeVolumeReserves = 'cumulativeTradeVolumeReserves', - CumulativeTradeVolumeReservesUsd = 'cumulativeTradeVolumeReservesUSD', - CumulativeTradeVolumeUsd = 'cumulativeTradeVolumeUSD', - CumulativeTransferVolumeReserves = 'cumulativeTransferVolumeReserves', - CumulativeTransferVolumeReservesUsd = 'cumulativeTransferVolumeReservesUSD', - CumulativeTransferVolumeUsd = 'cumulativeTransferVolumeUSD', - Day = 'day', - DeltaBiTradeVolumeReserves = 'deltaBiTradeVolumeReserves', - DeltaConvertVolumeReserves = 'deltaConvertVolumeReserves', - DeltaConvertVolumeReservesUsd = 'deltaConvertVolumeReservesUSD', - DeltaConvertVolumeUsd = 'deltaConvertVolumeUSD', - DeltaLiquidityUsd = 'deltaLiquidityUSD', - DeltaLpTokenSupply = 'deltaLpTokenSupply', - DeltaTokenRates = 'deltaTokenRates', - DeltaTradeVolumeReserves = 'deltaTradeVolumeReserves', - DeltaTradeVolumeReservesUsd = 'deltaTradeVolumeReservesUSD', - DeltaTradeVolumeUsd = 'deltaTradeVolumeUSD', - DeltaTransferVolumeReserves = 'deltaTransferVolumeReserves', - DeltaTransferVolumeReservesUsd = 'deltaTransferVolumeReservesUSD', - DeltaTransferVolumeUsd = 'deltaTransferVolumeUSD', - Id = 'id', - LastUpdateBlockNumber = 'lastUpdateBlockNumber', - LastUpdateTimestamp = 'lastUpdateTimestamp', - LpTokenSupply = 'lpTokenSupply', - Season = 'season', - SeasonId = 'season__id', - SeasonSeason = 'season__season', - SeasonTimestamp = 'season__timestamp', - TokenRates = 'tokenRates', - TotalLiquidityUsd = 'totalLiquidityUSD', - Well = 'well', - WellBoredWell = 'well__boredWell', - WellConvertVolumeUsd = 'well__convertVolumeUSD', - WellCreatedTimestamp = 'well__createdTimestamp', - WellCumulativeTradeVolumeUsd = 'well__cumulativeTradeVolumeUSD', - WellCumulativeTransferVolumeUsd = 'well__cumulativeTransferVolumeUSD', - WellId = 'well__id', - WellIsBeanstalk = 'well__isBeanstalk', - WellLastDailySnapshotDay = 'well__lastDailySnapshotDay', - WellLastHourlySnapshotHour = 'well__lastHourlySnapshotHour', - WellLastUpdateBlockNumber = 'well__lastUpdateBlockNumber', - WellLastUpdateTimestamp = 'well__lastUpdateTimestamp', - WellLpTokenSupply = 'well__lpTokenSupply', - WellName = 'well__name', - WellRollingDailyConvertVolumeUsd = 'well__rollingDailyConvertVolumeUSD', - WellRollingDailyTradeVolumeUsd = 'well__rollingDailyTradeVolumeUSD', - WellRollingDailyTransferVolumeUsd = 'well__rollingDailyTransferVolumeUSD', - WellRollingWeeklyConvertVolumeUsd = 'well__rollingWeeklyConvertVolumeUSD', - WellRollingWeeklyTradeVolumeUsd = 'well__rollingWeeklyTradeVolumeUSD', - WellRollingWeeklyTransferVolumeUsd = 'well__rollingWeeklyTransferVolumeUSD', - WellSymbol = 'well__symbol', - WellTotalLiquidityUsd = 'well__totalLiquidityUSD', - WellWellFunctionData = 'well__wellFunctionData' +export enum WellDailySnapshotOrderBy { + convertVolumeReserves = 'convertVolumeReserves', + convertVolumeReservesUSD = 'convertVolumeReservesUSD', + convertVolumeUSD = 'convertVolumeUSD', + createdTimestamp = 'createdTimestamp', + cumulativeBiTradeVolumeReserves = 'cumulativeBiTradeVolumeReserves', + cumulativeTradeVolumeReserves = 'cumulativeTradeVolumeReserves', + cumulativeTradeVolumeReservesUSD = 'cumulativeTradeVolumeReservesUSD', + cumulativeTradeVolumeUSD = 'cumulativeTradeVolumeUSD', + cumulativeTransferVolumeReserves = 'cumulativeTransferVolumeReserves', + cumulativeTransferVolumeReservesUSD = 'cumulativeTransferVolumeReservesUSD', + cumulativeTransferVolumeUSD = 'cumulativeTransferVolumeUSD', + day = 'day', + deltaBiTradeVolumeReserves = 'deltaBiTradeVolumeReserves', + deltaConvertVolumeReserves = 'deltaConvertVolumeReserves', + deltaConvertVolumeReservesUSD = 'deltaConvertVolumeReservesUSD', + deltaConvertVolumeUSD = 'deltaConvertVolumeUSD', + deltaLiquidityUSD = 'deltaLiquidityUSD', + deltaLpTokenSupply = 'deltaLpTokenSupply', + deltaTokenRates = 'deltaTokenRates', + deltaTradeVolumeReserves = 'deltaTradeVolumeReserves', + deltaTradeVolumeReservesUSD = 'deltaTradeVolumeReservesUSD', + deltaTradeVolumeUSD = 'deltaTradeVolumeUSD', + deltaTransferVolumeReserves = 'deltaTransferVolumeReserves', + deltaTransferVolumeReservesUSD = 'deltaTransferVolumeReservesUSD', + deltaTransferVolumeUSD = 'deltaTransferVolumeUSD', + id = 'id', + lastUpdateBlockNumber = 'lastUpdateBlockNumber', + lastUpdateTimestamp = 'lastUpdateTimestamp', + lpTokenSupply = 'lpTokenSupply', + season = 'season', + season__id = 'season__id', + season__season = 'season__season', + season__timestamp = 'season__timestamp', + tokenRates = 'tokenRates', + totalLiquidityUSD = 'totalLiquidityUSD', + well = 'well', + well__boredWell = 'well__boredWell', + well__convertVolumeUSD = 'well__convertVolumeUSD', + well__createdTimestamp = 'well__createdTimestamp', + well__cumulativeTradeVolumeUSD = 'well__cumulativeTradeVolumeUSD', + well__cumulativeTransferVolumeUSD = 'well__cumulativeTransferVolumeUSD', + well__id = 'well__id', + well__isBeanstalk = 'well__isBeanstalk', + well__lastDailySnapshotDay = 'well__lastDailySnapshotDay', + well__lastHourlySnapshotHour = 'well__lastHourlySnapshotHour', + well__lastUpdateBlockNumber = 'well__lastUpdateBlockNumber', + well__lastUpdateTimestamp = 'well__lastUpdateTimestamp', + well__lpTokenSupply = 'well__lpTokenSupply', + well__name = 'well__name', + well__rollingDailyConvertVolumeUSD = 'well__rollingDailyConvertVolumeUSD', + well__rollingDailyTradeVolumeUSD = 'well__rollingDailyTradeVolumeUSD', + well__rollingDailyTransferVolumeUSD = 'well__rollingDailyTransferVolumeUSD', + well__rollingWeeklyConvertVolumeUSD = 'well__rollingWeeklyConvertVolumeUSD', + well__rollingWeeklyTradeVolumeUSD = 'well__rollingWeeklyTradeVolumeUSD', + well__rollingWeeklyTransferVolumeUSD = 'well__rollingWeeklyTransferVolumeUSD', + well__symbol = 'well__symbol', + well__totalLiquidityUSD = 'well__totalLiquidityUSD', + well__wellFunctionData = 'well__wellFunctionData' } export type WellFunction = { @@ -3352,16 +2995,16 @@ export type WellFunction = { export type WellFunctionWellsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; -export type WellFunction_Filter = { +export type WellFunctionFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; id?: InputMaybe; id_contains?: InputMaybe; id_gt?: InputMaybe; @@ -3372,13 +3015,13 @@ export type WellFunction_Filter = { id_not?: InputMaybe; id_not_contains?: InputMaybe; id_not_in?: InputMaybe>; - or?: InputMaybe>>; - wells_?: InputMaybe; + or?: InputMaybe>>; + wells_?: InputMaybe; }; -export enum WellFunction_OrderBy { - Id = 'id', - Wells = 'wells' +export enum WellFunctionOrderBy { + id = 'id', + wells = 'wells' } export type WellHourlySnapshot = { @@ -3451,10 +3094,10 @@ export type WellHourlySnapshot = { well: Well; }; -export type WellHourlySnapshot_Filter = { +export type WellHourlySnapshotFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; convertVolumeReserves?: InputMaybe>; convertVolumeReservesUSD?: InputMaybe>; convertVolumeReservesUSD_contains?: InputMaybe>; @@ -3657,9 +3300,9 @@ export type WellHourlySnapshot_Filter = { lpTokenSupply_lte?: InputMaybe; lpTokenSupply_not?: InputMaybe; lpTokenSupply_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; season?: InputMaybe; - season_?: InputMaybe; + season_?: InputMaybe; season_contains?: InputMaybe; season_contains_nocase?: InputMaybe; season_ends_with?: InputMaybe; @@ -3694,7 +3337,7 @@ export type WellHourlySnapshot_Filter = { totalLiquidityUSD_not?: InputMaybe; totalLiquidityUSD_not_in?: InputMaybe>; well?: InputMaybe; - well_?: InputMaybe; + well_?: InputMaybe; well_contains?: InputMaybe; well_contains_nocase?: InputMaybe; well_ends_with?: InputMaybe; @@ -3716,65 +3359,65 @@ export type WellHourlySnapshot_Filter = { well_starts_with_nocase?: InputMaybe; }; -export enum WellHourlySnapshot_OrderBy { - ConvertVolumeReserves = 'convertVolumeReserves', - ConvertVolumeReservesUsd = 'convertVolumeReservesUSD', - ConvertVolumeUsd = 'convertVolumeUSD', - CreatedTimestamp = 'createdTimestamp', - CumulativeBiTradeVolumeReserves = 'cumulativeBiTradeVolumeReserves', - CumulativeTradeVolumeReserves = 'cumulativeTradeVolumeReserves', - CumulativeTradeVolumeReservesUsd = 'cumulativeTradeVolumeReservesUSD', - CumulativeTradeVolumeUsd = 'cumulativeTradeVolumeUSD', - CumulativeTransferVolumeReserves = 'cumulativeTransferVolumeReserves', - CumulativeTransferVolumeReservesUsd = 'cumulativeTransferVolumeReservesUSD', - CumulativeTransferVolumeUsd = 'cumulativeTransferVolumeUSD', - DeltaBiTradeVolumeReserves = 'deltaBiTradeVolumeReserves', - DeltaConvertVolumeReserves = 'deltaConvertVolumeReserves', - DeltaConvertVolumeReservesUsd = 'deltaConvertVolumeReservesUSD', - DeltaConvertVolumeUsd = 'deltaConvertVolumeUSD', - DeltaLiquidityUsd = 'deltaLiquidityUSD', - DeltaLpTokenSupply = 'deltaLpTokenSupply', - DeltaTokenRates = 'deltaTokenRates', - DeltaTradeVolumeReserves = 'deltaTradeVolumeReserves', - DeltaTradeVolumeReservesUsd = 'deltaTradeVolumeReservesUSD', - DeltaTradeVolumeUsd = 'deltaTradeVolumeUSD', - DeltaTransferVolumeReserves = 'deltaTransferVolumeReserves', - DeltaTransferVolumeReservesUsd = 'deltaTransferVolumeReservesUSD', - DeltaTransferVolumeUsd = 'deltaTransferVolumeUSD', - Hour = 'hour', - Id = 'id', - LastUpdateBlockNumber = 'lastUpdateBlockNumber', - LastUpdateTimestamp = 'lastUpdateTimestamp', - LpTokenSupply = 'lpTokenSupply', - Season = 'season', - SeasonId = 'season__id', - SeasonSeason = 'season__season', - SeasonTimestamp = 'season__timestamp', - TokenRates = 'tokenRates', - TotalLiquidityUsd = 'totalLiquidityUSD', - Well = 'well', - WellBoredWell = 'well__boredWell', - WellConvertVolumeUsd = 'well__convertVolumeUSD', - WellCreatedTimestamp = 'well__createdTimestamp', - WellCumulativeTradeVolumeUsd = 'well__cumulativeTradeVolumeUSD', - WellCumulativeTransferVolumeUsd = 'well__cumulativeTransferVolumeUSD', - WellId = 'well__id', - WellIsBeanstalk = 'well__isBeanstalk', - WellLastDailySnapshotDay = 'well__lastDailySnapshotDay', - WellLastHourlySnapshotHour = 'well__lastHourlySnapshotHour', - WellLastUpdateBlockNumber = 'well__lastUpdateBlockNumber', - WellLastUpdateTimestamp = 'well__lastUpdateTimestamp', - WellLpTokenSupply = 'well__lpTokenSupply', - WellName = 'well__name', - WellRollingDailyConvertVolumeUsd = 'well__rollingDailyConvertVolumeUSD', - WellRollingDailyTradeVolumeUsd = 'well__rollingDailyTradeVolumeUSD', - WellRollingDailyTransferVolumeUsd = 'well__rollingDailyTransferVolumeUSD', - WellRollingWeeklyConvertVolumeUsd = 'well__rollingWeeklyConvertVolumeUSD', - WellRollingWeeklyTradeVolumeUsd = 'well__rollingWeeklyTradeVolumeUSD', - WellRollingWeeklyTransferVolumeUsd = 'well__rollingWeeklyTransferVolumeUSD', - WellSymbol = 'well__symbol', - WellTotalLiquidityUsd = 'well__totalLiquidityUSD', - WellWellFunctionData = 'well__wellFunctionData' +export enum WellHourlySnapshotOrderBy { + convertVolumeReserves = 'convertVolumeReserves', + convertVolumeReservesUSD = 'convertVolumeReservesUSD', + convertVolumeUSD = 'convertVolumeUSD', + createdTimestamp = 'createdTimestamp', + cumulativeBiTradeVolumeReserves = 'cumulativeBiTradeVolumeReserves', + cumulativeTradeVolumeReserves = 'cumulativeTradeVolumeReserves', + cumulativeTradeVolumeReservesUSD = 'cumulativeTradeVolumeReservesUSD', + cumulativeTradeVolumeUSD = 'cumulativeTradeVolumeUSD', + cumulativeTransferVolumeReserves = 'cumulativeTransferVolumeReserves', + cumulativeTransferVolumeReservesUSD = 'cumulativeTransferVolumeReservesUSD', + cumulativeTransferVolumeUSD = 'cumulativeTransferVolumeUSD', + deltaBiTradeVolumeReserves = 'deltaBiTradeVolumeReserves', + deltaConvertVolumeReserves = 'deltaConvertVolumeReserves', + deltaConvertVolumeReservesUSD = 'deltaConvertVolumeReservesUSD', + deltaConvertVolumeUSD = 'deltaConvertVolumeUSD', + deltaLiquidityUSD = 'deltaLiquidityUSD', + deltaLpTokenSupply = 'deltaLpTokenSupply', + deltaTokenRates = 'deltaTokenRates', + deltaTradeVolumeReserves = 'deltaTradeVolumeReserves', + deltaTradeVolumeReservesUSD = 'deltaTradeVolumeReservesUSD', + deltaTradeVolumeUSD = 'deltaTradeVolumeUSD', + deltaTransferVolumeReserves = 'deltaTransferVolumeReserves', + deltaTransferVolumeReservesUSD = 'deltaTransferVolumeReservesUSD', + deltaTransferVolumeUSD = 'deltaTransferVolumeUSD', + hour = 'hour', + id = 'id', + lastUpdateBlockNumber = 'lastUpdateBlockNumber', + lastUpdateTimestamp = 'lastUpdateTimestamp', + lpTokenSupply = 'lpTokenSupply', + season = 'season', + season__id = 'season__id', + season__season = 'season__season', + season__timestamp = 'season__timestamp', + tokenRates = 'tokenRates', + totalLiquidityUSD = 'totalLiquidityUSD', + well = 'well', + well__boredWell = 'well__boredWell', + well__convertVolumeUSD = 'well__convertVolumeUSD', + well__createdTimestamp = 'well__createdTimestamp', + well__cumulativeTradeVolumeUSD = 'well__cumulativeTradeVolumeUSD', + well__cumulativeTransferVolumeUSD = 'well__cumulativeTransferVolumeUSD', + well__id = 'well__id', + well__isBeanstalk = 'well__isBeanstalk', + well__lastDailySnapshotDay = 'well__lastDailySnapshotDay', + well__lastHourlySnapshotHour = 'well__lastHourlySnapshotHour', + well__lastUpdateBlockNumber = 'well__lastUpdateBlockNumber', + well__lastUpdateTimestamp = 'well__lastUpdateTimestamp', + well__lpTokenSupply = 'well__lpTokenSupply', + well__name = 'well__name', + well__rollingDailyConvertVolumeUSD = 'well__rollingDailyConvertVolumeUSD', + well__rollingDailyTradeVolumeUSD = 'well__rollingDailyTradeVolumeUSD', + well__rollingDailyTransferVolumeUSD = 'well__rollingDailyTransferVolumeUSD', + well__rollingWeeklyConvertVolumeUSD = 'well__rollingWeeklyConvertVolumeUSD', + well__rollingWeeklyTradeVolumeUSD = 'well__rollingWeeklyTradeVolumeUSD', + well__rollingWeeklyTransferVolumeUSD = 'well__rollingWeeklyTransferVolumeUSD', + well__symbol = 'well__symbol', + well__totalLiquidityUSD = 'well__totalLiquidityUSD', + well__wellFunctionData = 'well__wellFunctionData' } export type WellUpgradeHistory = { @@ -3799,18 +3442,18 @@ export type WellUpgradeHistory = { export type WellUpgradeHistoryPumpsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; -export type WellUpgradeHistory_Filter = { +export type WellUpgradeHistoryFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; aquifer?: InputMaybe; - aquifer_?: InputMaybe; + aquifer_?: InputMaybe; aquifer_contains?: InputMaybe; aquifer_contains_nocase?: InputMaybe; aquifer_ends_with?: InputMaybe; @@ -3865,7 +3508,7 @@ export type WellUpgradeHistory_Filter = { id_not?: InputMaybe; id_not_in?: InputMaybe>; implementation?: InputMaybe; - implementation_?: InputMaybe; + implementation_?: InputMaybe; implementation_contains?: InputMaybe; implementation_contains_nocase?: InputMaybe; implementation_ends_with?: InputMaybe; @@ -3885,7 +3528,7 @@ export type WellUpgradeHistory_Filter = { implementation_not_starts_with_nocase?: InputMaybe; implementation_starts_with?: InputMaybe; implementation_starts_with_nocase?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe>>; pumpData?: InputMaybe>; pumpData_contains?: InputMaybe>; pumpData_contains_nocase?: InputMaybe>; @@ -3893,7 +3536,7 @@ export type WellUpgradeHistory_Filter = { pumpData_not_contains?: InputMaybe>; pumpData_not_contains_nocase?: InputMaybe>; pumps?: InputMaybe>; - pumps_?: InputMaybe; + pumps_?: InputMaybe; pumps_contains?: InputMaybe>; pumps_contains_nocase?: InputMaybe>; pumps_not?: InputMaybe>; @@ -3911,7 +3554,7 @@ export type WellUpgradeHistory_Filter = { wellFunctionData_not?: InputMaybe; wellFunctionData_not_contains?: InputMaybe; wellFunctionData_not_in?: InputMaybe>; - wellFunction_?: InputMaybe; + wellFunction_?: InputMaybe; wellFunction_contains?: InputMaybe; wellFunction_contains_nocase?: InputMaybe; wellFunction_ends_with?: InputMaybe; @@ -3931,7 +3574,7 @@ export type WellUpgradeHistory_Filter = { wellFunction_not_starts_with_nocase?: InputMaybe; wellFunction_starts_with?: InputMaybe; wellFunction_starts_with_nocase?: InputMaybe; - well_?: InputMaybe; + well_?: InputMaybe; well_contains?: InputMaybe; well_contains_nocase?: InputMaybe; well_ends_with?: InputMaybe; @@ -3953,51 +3596,51 @@ export type WellUpgradeHistory_Filter = { well_starts_with_nocase?: InputMaybe; }; -export enum WellUpgradeHistory_OrderBy { - Aquifer = 'aquifer', - AquiferId = 'aquifer__id', - BoredWell = 'boredWell', - EffectiveBlock = 'effectiveBlock', - EffectiveTimestamp = 'effectiveTimestamp', - Id = 'id', - Implementation = 'implementation', - ImplementationId = 'implementation__id', - PumpData = 'pumpData', - Pumps = 'pumps', - Well = 'well', - WellFunction = 'wellFunction', - WellFunctionData = 'wellFunctionData', - WellFunctionId = 'wellFunction__id', - WellBoredWell = 'well__boredWell', - WellConvertVolumeUsd = 'well__convertVolumeUSD', - WellCreatedTimestamp = 'well__createdTimestamp', - WellCumulativeTradeVolumeUsd = 'well__cumulativeTradeVolumeUSD', - WellCumulativeTransferVolumeUsd = 'well__cumulativeTransferVolumeUSD', - WellId = 'well__id', - WellIsBeanstalk = 'well__isBeanstalk', - WellLastDailySnapshotDay = 'well__lastDailySnapshotDay', - WellLastHourlySnapshotHour = 'well__lastHourlySnapshotHour', - WellLastUpdateBlockNumber = 'well__lastUpdateBlockNumber', - WellLastUpdateTimestamp = 'well__lastUpdateTimestamp', - WellLpTokenSupply = 'well__lpTokenSupply', - WellName = 'well__name', - WellRollingDailyConvertVolumeUsd = 'well__rollingDailyConvertVolumeUSD', - WellRollingDailyTradeVolumeUsd = 'well__rollingDailyTradeVolumeUSD', - WellRollingDailyTransferVolumeUsd = 'well__rollingDailyTransferVolumeUSD', - WellRollingWeeklyConvertVolumeUsd = 'well__rollingWeeklyConvertVolumeUSD', - WellRollingWeeklyTradeVolumeUsd = 'well__rollingWeeklyTradeVolumeUSD', - WellRollingWeeklyTransferVolumeUsd = 'well__rollingWeeklyTransferVolumeUSD', - WellSymbol = 'well__symbol', - WellTotalLiquidityUsd = 'well__totalLiquidityUSD', - WellWellFunctionData = 'well__wellFunctionData' +export enum WellUpgradeHistoryOrderBy { + aquifer = 'aquifer', + aquifer__id = 'aquifer__id', + boredWell = 'boredWell', + effectiveBlock = 'effectiveBlock', + effectiveTimestamp = 'effectiveTimestamp', + id = 'id', + implementation = 'implementation', + implementation__id = 'implementation__id', + pumpData = 'pumpData', + pumps = 'pumps', + well = 'well', + wellFunction = 'wellFunction', + wellFunctionData = 'wellFunctionData', + wellFunction__id = 'wellFunction__id', + well__boredWell = 'well__boredWell', + well__convertVolumeUSD = 'well__convertVolumeUSD', + well__createdTimestamp = 'well__createdTimestamp', + well__cumulativeTradeVolumeUSD = 'well__cumulativeTradeVolumeUSD', + well__cumulativeTransferVolumeUSD = 'well__cumulativeTransferVolumeUSD', + well__id = 'well__id', + well__isBeanstalk = 'well__isBeanstalk', + well__lastDailySnapshotDay = 'well__lastDailySnapshotDay', + well__lastHourlySnapshotHour = 'well__lastHourlySnapshotHour', + well__lastUpdateBlockNumber = 'well__lastUpdateBlockNumber', + well__lastUpdateTimestamp = 'well__lastUpdateTimestamp', + well__lpTokenSupply = 'well__lpTokenSupply', + well__name = 'well__name', + well__rollingDailyConvertVolumeUSD = 'well__rollingDailyConvertVolumeUSD', + well__rollingDailyTradeVolumeUSD = 'well__rollingDailyTradeVolumeUSD', + well__rollingDailyTransferVolumeUSD = 'well__rollingDailyTransferVolumeUSD', + well__rollingWeeklyConvertVolumeUSD = 'well__rollingWeeklyConvertVolumeUSD', + well__rollingWeeklyTradeVolumeUSD = 'well__rollingWeeklyTradeVolumeUSD', + well__rollingWeeklyTransferVolumeUSD = 'well__rollingWeeklyTransferVolumeUSD', + well__symbol = 'well__symbol', + well__totalLiquidityUSD = 'well__totalLiquidityUSD', + well__wellFunctionData = 'well__wellFunctionData' } -export type Well_Filter = { +export type WellFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; aquifer?: InputMaybe; - aquifer_?: InputMaybe; + aquifer_?: InputMaybe; aquifer_contains?: InputMaybe; aquifer_contains_nocase?: InputMaybe; aquifer_ends_with?: InputMaybe; @@ -4101,8 +3744,8 @@ export type Well_Filter = { cumulativeTransferVolumeUSD_lte?: InputMaybe; cumulativeTransferVolumeUSD_not?: InputMaybe; cumulativeTransferVolumeUSD_not_in?: InputMaybe>; - dailySnapshots_?: InputMaybe; - hourlySnapshots_?: InputMaybe; + dailySnapshots_?: InputMaybe; + hourlySnapshots_?: InputMaybe; id?: InputMaybe; id_contains?: InputMaybe; id_gt?: InputMaybe; @@ -4114,7 +3757,7 @@ export type Well_Filter = { id_not_contains?: InputMaybe; id_not_in?: InputMaybe>; implementation?: InputMaybe; - implementation_?: InputMaybe; + implementation_?: InputMaybe; implementation_contains?: InputMaybe; implementation_contains_nocase?: InputMaybe; implementation_ends_with?: InputMaybe; @@ -4198,7 +3841,7 @@ export type Well_Filter = { name_not_starts_with_nocase?: InputMaybe; name_starts_with?: InputMaybe; name_starts_with_nocase?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe>>; pumpData?: InputMaybe>; pumpData_contains?: InputMaybe>; pumpData_contains_nocase?: InputMaybe>; @@ -4206,7 +3849,7 @@ export type Well_Filter = { pumpData_not_contains?: InputMaybe>; pumpData_not_contains_nocase?: InputMaybe>; pumps?: InputMaybe>; - pumps_?: InputMaybe; + pumps_?: InputMaybe; pumps_contains?: InputMaybe>; pumps_contains_nocase?: InputMaybe>; pumps_not?: InputMaybe>; @@ -4389,7 +4032,7 @@ export type Well_Filter = { tokenRates_not_contains?: InputMaybe>; tokenRates_not_contains_nocase?: InputMaybe>; tokens?: InputMaybe>; - tokens_?: InputMaybe; + tokens_?: InputMaybe; tokens_contains?: InputMaybe>; tokens_contains_nocase?: InputMaybe>; tokens_not?: InputMaybe>; @@ -4403,8 +4046,8 @@ export type Well_Filter = { totalLiquidityUSD_lte?: InputMaybe; totalLiquidityUSD_not?: InputMaybe; totalLiquidityUSD_not_in?: InputMaybe>; - trades_?: InputMaybe; - upgradeHistory_?: InputMaybe; + trades_?: InputMaybe; + upgradeHistory_?: InputMaybe; wellFunction?: InputMaybe; wellFunctionData?: InputMaybe; wellFunctionData_contains?: InputMaybe; @@ -4416,7 +4059,7 @@ export type Well_Filter = { wellFunctionData_not?: InputMaybe; wellFunctionData_not_contains?: InputMaybe; wellFunctionData_not_in?: InputMaybe>; - wellFunction_?: InputMaybe; + wellFunction_?: InputMaybe; wellFunction_contains?: InputMaybe; wellFunction_contains_nocase?: InputMaybe; wellFunction_ends_with?: InputMaybe; @@ -4438,70 +4081,70 @@ export type Well_Filter = { wellFunction_starts_with_nocase?: InputMaybe; }; -export enum Well_OrderBy { - Aquifer = 'aquifer', - AquiferId = 'aquifer__id', - BoredWell = 'boredWell', - ConvertVolumeReserves = 'convertVolumeReserves', - ConvertVolumeReservesUsd = 'convertVolumeReservesUSD', - ConvertVolumeUsd = 'convertVolumeUSD', - CreatedTimestamp = 'createdTimestamp', - CumulativeBiTradeVolumeReserves = 'cumulativeBiTradeVolumeReserves', - CumulativeTradeVolumeReserves = 'cumulativeTradeVolumeReserves', - CumulativeTradeVolumeReservesUsd = 'cumulativeTradeVolumeReservesUSD', - CumulativeTradeVolumeUsd = 'cumulativeTradeVolumeUSD', - CumulativeTransferVolumeReserves = 'cumulativeTransferVolumeReserves', - CumulativeTransferVolumeReservesUsd = 'cumulativeTransferVolumeReservesUSD', - CumulativeTransferVolumeUsd = 'cumulativeTransferVolumeUSD', - DailySnapshots = 'dailySnapshots', - HourlySnapshots = 'hourlySnapshots', - Id = 'id', - Implementation = 'implementation', - ImplementationId = 'implementation__id', - IsBeanstalk = 'isBeanstalk', - LastDailySnapshotDay = 'lastDailySnapshotDay', - LastHourlySnapshotHour = 'lastHourlySnapshotHour', - LastUpdateBlockNumber = 'lastUpdateBlockNumber', - LastUpdateTimestamp = 'lastUpdateTimestamp', - LpTokenSupply = 'lpTokenSupply', - Name = 'name', - PumpData = 'pumpData', - Pumps = 'pumps', - Reserves = 'reserves', - ReservesUsd = 'reservesUSD', - RollingDailyBiTradeVolumeReserves = 'rollingDailyBiTradeVolumeReserves', - RollingDailyConvertVolumeReserves = 'rollingDailyConvertVolumeReserves', - RollingDailyConvertVolumeReservesUsd = 'rollingDailyConvertVolumeReservesUSD', - RollingDailyConvertVolumeUsd = 'rollingDailyConvertVolumeUSD', - RollingDailyTradeVolumeReserves = 'rollingDailyTradeVolumeReserves', - RollingDailyTradeVolumeReservesUsd = 'rollingDailyTradeVolumeReservesUSD', - RollingDailyTradeVolumeUsd = 'rollingDailyTradeVolumeUSD', - RollingDailyTransferVolumeReserves = 'rollingDailyTransferVolumeReserves', - RollingDailyTransferVolumeReservesUsd = 'rollingDailyTransferVolumeReservesUSD', - RollingDailyTransferVolumeUsd = 'rollingDailyTransferVolumeUSD', - RollingWeeklyBiTradeVolumeReserves = 'rollingWeeklyBiTradeVolumeReserves', - RollingWeeklyConvertVolumeReserves = 'rollingWeeklyConvertVolumeReserves', - RollingWeeklyConvertVolumeReservesUsd = 'rollingWeeklyConvertVolumeReservesUSD', - RollingWeeklyConvertVolumeUsd = 'rollingWeeklyConvertVolumeUSD', - RollingWeeklyTradeVolumeReserves = 'rollingWeeklyTradeVolumeReserves', - RollingWeeklyTradeVolumeReservesUsd = 'rollingWeeklyTradeVolumeReservesUSD', - RollingWeeklyTradeVolumeUsd = 'rollingWeeklyTradeVolumeUSD', - RollingWeeklyTransferVolumeReserves = 'rollingWeeklyTransferVolumeReserves', - RollingWeeklyTransferVolumeReservesUsd = 'rollingWeeklyTransferVolumeReservesUSD', - RollingWeeklyTransferVolumeUsd = 'rollingWeeklyTransferVolumeUSD', - Symbol = 'symbol', - TokenOrder = 'tokenOrder', - TokenRates = 'tokenRates', - Tokens = 'tokens', - TotalLiquidityUsd = 'totalLiquidityUSD', - Trades = 'trades', - UpgradeHistory = 'upgradeHistory', - WellFunction = 'wellFunction', - WellFunctionData = 'wellFunctionData', - WellFunctionId = 'wellFunction__id' +export enum WellOrderBy { + aquifer = 'aquifer', + aquifer__id = 'aquifer__id', + boredWell = 'boredWell', + convertVolumeReserves = 'convertVolumeReserves', + convertVolumeReservesUSD = 'convertVolumeReservesUSD', + convertVolumeUSD = 'convertVolumeUSD', + createdTimestamp = 'createdTimestamp', + cumulativeBiTradeVolumeReserves = 'cumulativeBiTradeVolumeReserves', + cumulativeTradeVolumeReserves = 'cumulativeTradeVolumeReserves', + cumulativeTradeVolumeReservesUSD = 'cumulativeTradeVolumeReservesUSD', + cumulativeTradeVolumeUSD = 'cumulativeTradeVolumeUSD', + cumulativeTransferVolumeReserves = 'cumulativeTransferVolumeReserves', + cumulativeTransferVolumeReservesUSD = 'cumulativeTransferVolumeReservesUSD', + cumulativeTransferVolumeUSD = 'cumulativeTransferVolumeUSD', + dailySnapshots = 'dailySnapshots', + hourlySnapshots = 'hourlySnapshots', + id = 'id', + implementation = 'implementation', + implementation__id = 'implementation__id', + isBeanstalk = 'isBeanstalk', + lastDailySnapshotDay = 'lastDailySnapshotDay', + lastHourlySnapshotHour = 'lastHourlySnapshotHour', + lastUpdateBlockNumber = 'lastUpdateBlockNumber', + lastUpdateTimestamp = 'lastUpdateTimestamp', + lpTokenSupply = 'lpTokenSupply', + name = 'name', + pumpData = 'pumpData', + pumps = 'pumps', + reserves = 'reserves', + reservesUSD = 'reservesUSD', + rollingDailyBiTradeVolumeReserves = 'rollingDailyBiTradeVolumeReserves', + rollingDailyConvertVolumeReserves = 'rollingDailyConvertVolumeReserves', + rollingDailyConvertVolumeReservesUSD = 'rollingDailyConvertVolumeReservesUSD', + rollingDailyConvertVolumeUSD = 'rollingDailyConvertVolumeUSD', + rollingDailyTradeVolumeReserves = 'rollingDailyTradeVolumeReserves', + rollingDailyTradeVolumeReservesUSD = 'rollingDailyTradeVolumeReservesUSD', + rollingDailyTradeVolumeUSD = 'rollingDailyTradeVolumeUSD', + rollingDailyTransferVolumeReserves = 'rollingDailyTransferVolumeReserves', + rollingDailyTransferVolumeReservesUSD = 'rollingDailyTransferVolumeReservesUSD', + rollingDailyTransferVolumeUSD = 'rollingDailyTransferVolumeUSD', + rollingWeeklyBiTradeVolumeReserves = 'rollingWeeklyBiTradeVolumeReserves', + rollingWeeklyConvertVolumeReserves = 'rollingWeeklyConvertVolumeReserves', + rollingWeeklyConvertVolumeReservesUSD = 'rollingWeeklyConvertVolumeReservesUSD', + rollingWeeklyConvertVolumeUSD = 'rollingWeeklyConvertVolumeUSD', + rollingWeeklyTradeVolumeReserves = 'rollingWeeklyTradeVolumeReserves', + rollingWeeklyTradeVolumeReservesUSD = 'rollingWeeklyTradeVolumeReservesUSD', + rollingWeeklyTradeVolumeUSD = 'rollingWeeklyTradeVolumeUSD', + rollingWeeklyTransferVolumeReserves = 'rollingWeeklyTransferVolumeReserves', + rollingWeeklyTransferVolumeReservesUSD = 'rollingWeeklyTransferVolumeReservesUSD', + rollingWeeklyTransferVolumeUSD = 'rollingWeeklyTransferVolumeUSD', + symbol = 'symbol', + tokenOrder = 'tokenOrder', + tokenRates = 'tokenRates', + tokens = 'tokens', + totalLiquidityUSD = 'totalLiquidityUSD', + trades = 'trades', + upgradeHistory = 'upgradeHistory', + wellFunction = 'wellFunction', + wellFunctionData = 'wellFunctionData', + wellFunction__id = 'wellFunction__id' } -export type _Block_ = { +export type Block = { __typename?: '_Block_'; /** The hash of the block */ hash?: Maybe; @@ -4514,27 +4157,26 @@ export type _Block_ = { }; /** The type for the top-level _meta field */ -export type _Meta_ = { +export type Meta = { __typename?: '_Meta_'; /** * Information about a specific subgraph block. The hash of the block * will be null if the _meta field has a block constraint that asks for * a block number. It will be filled if the _meta field has no block constraint * and therefore asks for the latest block - * */ - block: _Block_; + block: Block; /** The deployment ID */ deployment: Scalars['String']['output']; /** If `true`, the subgraph encountered indexing errors at some past block */ hasIndexingErrors: Scalars['Boolean']['output']; }; -export enum _SubgraphErrorPolicy_ { +export enum SubgraphErrorPolicy { /** Data will be returned even if the subgraph has indexing errors */ - Allow = 'allow', + allow = 'allow', /** If the subgraph has indexing errors, data will be omitted. The default. */ - Deny = 'deny' + deny = 'deny' } export type BasinAdvancedChartQueryVariables = Exact<{ diff --git a/src/generated/gql/pinto/graphql.ts b/src/generated/gql/pinto/graphql.ts index 30818692d..418964790 100644 --- a/src/generated/gql/pinto/graphql.ts +++ b/src/generated/gql/pinto/graphql.ts @@ -17,21 +17,15 @@ export type Scalars = { BigDecimal: { input: any; output: any; } BigInt: { input: any; output: any; } Bytes: { input: any; output: any; } - /** - * 8 bytes signed integer - * - */ + /** 8 bytes signed integer */ Int8: { input: any; output: any; } - /** - * A string representation of microseconds UNIX timestamp (16 digits) - * - */ + /** A string representation of microseconds UNIX timestamp (16 digits) */ Timestamp: { input: any; output: any; } }; -export enum Aggregation_Interval { - Day = 'day', - Hour = 'hour' +export enum AggregationInterval { + day = 'day', + hour = 'hour' } export type Bean = { @@ -81,46 +75,46 @@ export type Bean = { export type BeanCrossEventsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type BeanDailySnapshotsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type BeanDewhitelistedPoolsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type BeanHourlySnapshotsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type BeanPoolsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type BeanCross = { @@ -147,17 +141,17 @@ export type BeanCross = { timestamp: Scalars['BigInt']['output']; }; -export type BeanCross_Filter = { +export type BeanCrossFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; above?: InputMaybe; above_in?: InputMaybe>; above_not?: InputMaybe; above_not_in?: InputMaybe>; - and?: InputMaybe>>; + and?: InputMaybe>>; bean?: InputMaybe; beanDailySnapshot?: InputMaybe; - beanDailySnapshot_?: InputMaybe; + beanDailySnapshot_?: InputMaybe; beanDailySnapshot_contains?: InputMaybe; beanDailySnapshot_contains_nocase?: InputMaybe; beanDailySnapshot_ends_with?: InputMaybe; @@ -178,7 +172,7 @@ export type BeanCross_Filter = { beanDailySnapshot_starts_with?: InputMaybe; beanDailySnapshot_starts_with_nocase?: InputMaybe; beanHourlySnapshot?: InputMaybe; - beanHourlySnapshot_?: InputMaybe; + beanHourlySnapshot_?: InputMaybe; beanHourlySnapshot_contains?: InputMaybe; beanHourlySnapshot_contains_nocase?: InputMaybe; beanHourlySnapshot_ends_with?: InputMaybe; @@ -198,7 +192,7 @@ export type BeanCross_Filter = { beanHourlySnapshot_not_starts_with_nocase?: InputMaybe; beanHourlySnapshot_starts_with?: InputMaybe; beanHourlySnapshot_starts_with_nocase?: InputMaybe; - bean_?: InputMaybe; + bean_?: InputMaybe; bean_contains?: InputMaybe; bean_contains_nocase?: InputMaybe; bean_ends_with?: InputMaybe; @@ -242,7 +236,7 @@ export type BeanCross_Filter = { id_lte?: InputMaybe; id_not?: InputMaybe; id_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; price?: InputMaybe; price_gt?: InputMaybe; price_gte?: InputMaybe; @@ -269,82 +263,82 @@ export type BeanCross_Filter = { timestamp_not_in?: InputMaybe>; }; -export enum BeanCross_OrderBy { - Above = 'above', - Bean = 'bean', - BeanDailySnapshot = 'beanDailySnapshot', - BeanDailySnapshotCreatedTimestamp = 'beanDailySnapshot__createdTimestamp', - BeanDailySnapshotCrosses = 'beanDailySnapshot__crosses', - BeanDailySnapshotDay = 'beanDailySnapshot__day', - BeanDailySnapshotDeltaCrosses = 'beanDailySnapshot__deltaCrosses', - BeanDailySnapshotDeltaLiquidityUsd = 'beanDailySnapshot__deltaLiquidityUSD', - BeanDailySnapshotDeltaVolume = 'beanDailySnapshot__deltaVolume', - BeanDailySnapshotDeltaVolumeUsd = 'beanDailySnapshot__deltaVolumeUSD', - BeanDailySnapshotId = 'beanDailySnapshot__id', - BeanDailySnapshotInstDeltaB = 'beanDailySnapshot__instDeltaB', - BeanDailySnapshotInstPrice = 'beanDailySnapshot__instPrice', - BeanDailySnapshotL2sr = 'beanDailySnapshot__l2sr', - BeanDailySnapshotLastUpdateBlockNumber = 'beanDailySnapshot__lastUpdateBlockNumber', - BeanDailySnapshotLastUpdateTimestamp = 'beanDailySnapshot__lastUpdateTimestamp', - BeanDailySnapshotLiquidityUsd = 'beanDailySnapshot__liquidityUSD', - BeanDailySnapshotLockedBeans = 'beanDailySnapshot__lockedBeans', - BeanDailySnapshotMarketCap = 'beanDailySnapshot__marketCap', - BeanDailySnapshotSupply = 'beanDailySnapshot__supply', - BeanDailySnapshotSupplyInPegLp = 'beanDailySnapshot__supplyInPegLP', - BeanDailySnapshotTwaBeanLiquidityUsd = 'beanDailySnapshot__twaBeanLiquidityUSD', - BeanDailySnapshotTwaDeltaB = 'beanDailySnapshot__twaDeltaB', - BeanDailySnapshotTwaLiquidityUsd = 'beanDailySnapshot__twaLiquidityUSD', - BeanDailySnapshotTwaNonBeanLiquidityUsd = 'beanDailySnapshot__twaNonBeanLiquidityUSD', - BeanDailySnapshotTwaPrice = 'beanDailySnapshot__twaPrice', - BeanDailySnapshotVolume = 'beanDailySnapshot__volume', - BeanDailySnapshotVolumeUsd = 'beanDailySnapshot__volumeUSD', - BeanHourlySnapshot = 'beanHourlySnapshot', - BeanHourlySnapshotCreatedTimestamp = 'beanHourlySnapshot__createdTimestamp', - BeanHourlySnapshotCrosses = 'beanHourlySnapshot__crosses', - BeanHourlySnapshotDeltaCrosses = 'beanHourlySnapshot__deltaCrosses', - BeanHourlySnapshotDeltaLiquidityUsd = 'beanHourlySnapshot__deltaLiquidityUSD', - BeanHourlySnapshotDeltaVolume = 'beanHourlySnapshot__deltaVolume', - BeanHourlySnapshotDeltaVolumeUsd = 'beanHourlySnapshot__deltaVolumeUSD', - BeanHourlySnapshotId = 'beanHourlySnapshot__id', - BeanHourlySnapshotInstDeltaB = 'beanHourlySnapshot__instDeltaB', - BeanHourlySnapshotInstPrice = 'beanHourlySnapshot__instPrice', - BeanHourlySnapshotL2sr = 'beanHourlySnapshot__l2sr', - BeanHourlySnapshotLastUpdateBlockNumber = 'beanHourlySnapshot__lastUpdateBlockNumber', - BeanHourlySnapshotLastUpdateTimestamp = 'beanHourlySnapshot__lastUpdateTimestamp', - BeanHourlySnapshotLiquidityUsd = 'beanHourlySnapshot__liquidityUSD', - BeanHourlySnapshotLockedBeans = 'beanHourlySnapshot__lockedBeans', - BeanHourlySnapshotMarketCap = 'beanHourlySnapshot__marketCap', - BeanHourlySnapshotSeasonNumber = 'beanHourlySnapshot__seasonNumber', - BeanHourlySnapshotSupply = 'beanHourlySnapshot__supply', - BeanHourlySnapshotSupplyInPegLp = 'beanHourlySnapshot__supplyInPegLP', - BeanHourlySnapshotTwaBeanLiquidityUsd = 'beanHourlySnapshot__twaBeanLiquidityUSD', - BeanHourlySnapshotTwaDeltaB = 'beanHourlySnapshot__twaDeltaB', - BeanHourlySnapshotTwaLiquidityUsd = 'beanHourlySnapshot__twaLiquidityUSD', - BeanHourlySnapshotTwaNonBeanLiquidityUsd = 'beanHourlySnapshot__twaNonBeanLiquidityUSD', - BeanHourlySnapshotTwaPrice = 'beanHourlySnapshot__twaPrice', - BeanHourlySnapshotVolume = 'beanHourlySnapshot__volume', - BeanHourlySnapshotVolumeUsd = 'beanHourlySnapshot__volumeUSD', - BeanCreatedTimestamp = 'bean__createdTimestamp', - BeanCrosses = 'bean__crosses', - BeanId = 'bean__id', - BeanLastCross = 'bean__lastCross', - BeanLastDailySnapshotDay = 'bean__lastDailySnapshotDay', - BeanLastHourlySnapshotSeason = 'bean__lastHourlySnapshotSeason', - BeanLastPrice = 'bean__lastPrice', - BeanLastUpdateBlockNumber = 'bean__lastUpdateBlockNumber', - BeanLastUpdateTimestamp = 'bean__lastUpdateTimestamp', - BeanLiquidityUsd = 'bean__liquidityUSD', - BeanLockedBeans = 'bean__lockedBeans', - BeanSupply = 'bean__supply', - BeanSupplyInPegLp = 'bean__supplyInPegLP', - BeanVolume = 'bean__volume', - BeanVolumeUsd = 'bean__volumeUSD', - BlockNumber = 'blockNumber', - Cross = 'cross', - Id = 'id', - Price = 'price', - TimeSinceLastCross = 'timeSinceLastCross', - Timestamp = 'timestamp' +export enum BeanCrossOrderBy { + above = 'above', + bean = 'bean', + beanDailySnapshot = 'beanDailySnapshot', + beanDailySnapshot__createdTimestamp = 'beanDailySnapshot__createdTimestamp', + beanDailySnapshot__crosses = 'beanDailySnapshot__crosses', + beanDailySnapshot__day = 'beanDailySnapshot__day', + beanDailySnapshot__deltaCrosses = 'beanDailySnapshot__deltaCrosses', + beanDailySnapshot__deltaLiquidityUSD = 'beanDailySnapshot__deltaLiquidityUSD', + beanDailySnapshot__deltaVolume = 'beanDailySnapshot__deltaVolume', + beanDailySnapshot__deltaVolumeUSD = 'beanDailySnapshot__deltaVolumeUSD', + beanDailySnapshot__id = 'beanDailySnapshot__id', + beanDailySnapshot__instDeltaB = 'beanDailySnapshot__instDeltaB', + beanDailySnapshot__instPrice = 'beanDailySnapshot__instPrice', + beanDailySnapshot__l2sr = 'beanDailySnapshot__l2sr', + beanDailySnapshot__lastUpdateBlockNumber = 'beanDailySnapshot__lastUpdateBlockNumber', + beanDailySnapshot__lastUpdateTimestamp = 'beanDailySnapshot__lastUpdateTimestamp', + beanDailySnapshot__liquidityUSD = 'beanDailySnapshot__liquidityUSD', + beanDailySnapshot__lockedBeans = 'beanDailySnapshot__lockedBeans', + beanDailySnapshot__marketCap = 'beanDailySnapshot__marketCap', + beanDailySnapshot__supply = 'beanDailySnapshot__supply', + beanDailySnapshot__supplyInPegLP = 'beanDailySnapshot__supplyInPegLP', + beanDailySnapshot__twaBeanLiquidityUSD = 'beanDailySnapshot__twaBeanLiquidityUSD', + beanDailySnapshot__twaDeltaB = 'beanDailySnapshot__twaDeltaB', + beanDailySnapshot__twaLiquidityUSD = 'beanDailySnapshot__twaLiquidityUSD', + beanDailySnapshot__twaNonBeanLiquidityUSD = 'beanDailySnapshot__twaNonBeanLiquidityUSD', + beanDailySnapshot__twaPrice = 'beanDailySnapshot__twaPrice', + beanDailySnapshot__volume = 'beanDailySnapshot__volume', + beanDailySnapshot__volumeUSD = 'beanDailySnapshot__volumeUSD', + beanHourlySnapshot = 'beanHourlySnapshot', + beanHourlySnapshot__createdTimestamp = 'beanHourlySnapshot__createdTimestamp', + beanHourlySnapshot__crosses = 'beanHourlySnapshot__crosses', + beanHourlySnapshot__deltaCrosses = 'beanHourlySnapshot__deltaCrosses', + beanHourlySnapshot__deltaLiquidityUSD = 'beanHourlySnapshot__deltaLiquidityUSD', + beanHourlySnapshot__deltaVolume = 'beanHourlySnapshot__deltaVolume', + beanHourlySnapshot__deltaVolumeUSD = 'beanHourlySnapshot__deltaVolumeUSD', + beanHourlySnapshot__id = 'beanHourlySnapshot__id', + beanHourlySnapshot__instDeltaB = 'beanHourlySnapshot__instDeltaB', + beanHourlySnapshot__instPrice = 'beanHourlySnapshot__instPrice', + beanHourlySnapshot__l2sr = 'beanHourlySnapshot__l2sr', + beanHourlySnapshot__lastUpdateBlockNumber = 'beanHourlySnapshot__lastUpdateBlockNumber', + beanHourlySnapshot__lastUpdateTimestamp = 'beanHourlySnapshot__lastUpdateTimestamp', + beanHourlySnapshot__liquidityUSD = 'beanHourlySnapshot__liquidityUSD', + beanHourlySnapshot__lockedBeans = 'beanHourlySnapshot__lockedBeans', + beanHourlySnapshot__marketCap = 'beanHourlySnapshot__marketCap', + beanHourlySnapshot__seasonNumber = 'beanHourlySnapshot__seasonNumber', + beanHourlySnapshot__supply = 'beanHourlySnapshot__supply', + beanHourlySnapshot__supplyInPegLP = 'beanHourlySnapshot__supplyInPegLP', + beanHourlySnapshot__twaBeanLiquidityUSD = 'beanHourlySnapshot__twaBeanLiquidityUSD', + beanHourlySnapshot__twaDeltaB = 'beanHourlySnapshot__twaDeltaB', + beanHourlySnapshot__twaLiquidityUSD = 'beanHourlySnapshot__twaLiquidityUSD', + beanHourlySnapshot__twaNonBeanLiquidityUSD = 'beanHourlySnapshot__twaNonBeanLiquidityUSD', + beanHourlySnapshot__twaPrice = 'beanHourlySnapshot__twaPrice', + beanHourlySnapshot__volume = 'beanHourlySnapshot__volume', + beanHourlySnapshot__volumeUSD = 'beanHourlySnapshot__volumeUSD', + bean__createdTimestamp = 'bean__createdTimestamp', + bean__crosses = 'bean__crosses', + bean__id = 'bean__id', + bean__lastCross = 'bean__lastCross', + bean__lastDailySnapshotDay = 'bean__lastDailySnapshotDay', + bean__lastHourlySnapshotSeason = 'bean__lastHourlySnapshotSeason', + bean__lastPrice = 'bean__lastPrice', + bean__lastUpdateBlockNumber = 'bean__lastUpdateBlockNumber', + bean__lastUpdateTimestamp = 'bean__lastUpdateTimestamp', + bean__liquidityUSD = 'bean__liquidityUSD', + bean__lockedBeans = 'bean__lockedBeans', + bean__supply = 'bean__supply', + bean__supplyInPegLP = 'bean__supplyInPegLP', + bean__volume = 'bean__volume', + bean__volumeUSD = 'bean__volumeUSD', + blockNumber = 'blockNumber', + cross = 'cross', + id = 'id', + price = 'price', + timeSinceLastCross = 'timeSinceLastCross', + timestamp = 'timestamp' } export type BeanDailySnapshot = { @@ -408,18 +402,18 @@ export type BeanDailySnapshot = { export type BeanDailySnapshotCrossEventsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; -export type BeanDailySnapshot_Filter = { +export type BeanDailySnapshotFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; bean?: InputMaybe; - bean_?: InputMaybe; + bean_?: InputMaybe; bean_contains?: InputMaybe; bean_contains_nocase?: InputMaybe; bean_ends_with?: InputMaybe; @@ -447,7 +441,7 @@ export type BeanDailySnapshot_Filter = { createdTimestamp_lte?: InputMaybe; createdTimestamp_not?: InputMaybe; createdTimestamp_not_in?: InputMaybe>; - crossEvents_?: InputMaybe; + crossEvents_?: InputMaybe; crosses?: InputMaybe; crosses_gt?: InputMaybe; crosses_gte?: InputMaybe; @@ -568,9 +562,9 @@ export type BeanDailySnapshot_Filter = { marketCap_lte?: InputMaybe; marketCap_not?: InputMaybe; marketCap_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; season?: InputMaybe; - season_?: InputMaybe; + season_?: InputMaybe; season_contains?: InputMaybe; season_contains_nocase?: InputMaybe; season_ends_with?: InputMaybe; @@ -664,53 +658,53 @@ export type BeanDailySnapshot_Filter = { volume_not_in?: InputMaybe>; }; -export enum BeanDailySnapshot_OrderBy { - Bean = 'bean', - BeanCreatedTimestamp = 'bean__createdTimestamp', - BeanCrosses = 'bean__crosses', - BeanId = 'bean__id', - BeanLastCross = 'bean__lastCross', - BeanLastDailySnapshotDay = 'bean__lastDailySnapshotDay', - BeanLastHourlySnapshotSeason = 'bean__lastHourlySnapshotSeason', - BeanLastPrice = 'bean__lastPrice', - BeanLastUpdateBlockNumber = 'bean__lastUpdateBlockNumber', - BeanLastUpdateTimestamp = 'bean__lastUpdateTimestamp', - BeanLiquidityUsd = 'bean__liquidityUSD', - BeanLockedBeans = 'bean__lockedBeans', - BeanSupply = 'bean__supply', - BeanSupplyInPegLp = 'bean__supplyInPegLP', - BeanVolume = 'bean__volume', - BeanVolumeUsd = 'bean__volumeUSD', - CreatedTimestamp = 'createdTimestamp', - CrossEvents = 'crossEvents', - Crosses = 'crosses', - Day = 'day', - DeltaCrosses = 'deltaCrosses', - DeltaLiquidityUsd = 'deltaLiquidityUSD', - DeltaVolume = 'deltaVolume', - DeltaVolumeUsd = 'deltaVolumeUSD', - Id = 'id', - InstDeltaB = 'instDeltaB', - InstPrice = 'instPrice', - L2sr = 'l2sr', - LastUpdateBlockNumber = 'lastUpdateBlockNumber', - LastUpdateTimestamp = 'lastUpdateTimestamp', - LiquidityUsd = 'liquidityUSD', - LockedBeans = 'lockedBeans', - MarketCap = 'marketCap', - Season = 'season', - SeasonId = 'season__id', - SeasonSeason = 'season__season', - SeasonTimestamp = 'season__timestamp', - Supply = 'supply', - SupplyInPegLp = 'supplyInPegLP', - TwaBeanLiquidityUsd = 'twaBeanLiquidityUSD', - TwaDeltaB = 'twaDeltaB', - TwaLiquidityUsd = 'twaLiquidityUSD', - TwaNonBeanLiquidityUsd = 'twaNonBeanLiquidityUSD', - TwaPrice = 'twaPrice', - Volume = 'volume', - VolumeUsd = 'volumeUSD' +export enum BeanDailySnapshotOrderBy { + bean = 'bean', + bean__createdTimestamp = 'bean__createdTimestamp', + bean__crosses = 'bean__crosses', + bean__id = 'bean__id', + bean__lastCross = 'bean__lastCross', + bean__lastDailySnapshotDay = 'bean__lastDailySnapshotDay', + bean__lastHourlySnapshotSeason = 'bean__lastHourlySnapshotSeason', + bean__lastPrice = 'bean__lastPrice', + bean__lastUpdateBlockNumber = 'bean__lastUpdateBlockNumber', + bean__lastUpdateTimestamp = 'bean__lastUpdateTimestamp', + bean__liquidityUSD = 'bean__liquidityUSD', + bean__lockedBeans = 'bean__lockedBeans', + bean__supply = 'bean__supply', + bean__supplyInPegLP = 'bean__supplyInPegLP', + bean__volume = 'bean__volume', + bean__volumeUSD = 'bean__volumeUSD', + createdTimestamp = 'createdTimestamp', + crossEvents = 'crossEvents', + crosses = 'crosses', + day = 'day', + deltaCrosses = 'deltaCrosses', + deltaLiquidityUSD = 'deltaLiquidityUSD', + deltaVolume = 'deltaVolume', + deltaVolumeUSD = 'deltaVolumeUSD', + id = 'id', + instDeltaB = 'instDeltaB', + instPrice = 'instPrice', + l2sr = 'l2sr', + lastUpdateBlockNumber = 'lastUpdateBlockNumber', + lastUpdateTimestamp = 'lastUpdateTimestamp', + liquidityUSD = 'liquidityUSD', + lockedBeans = 'lockedBeans', + marketCap = 'marketCap', + season = 'season', + season__id = 'season__id', + season__season = 'season__season', + season__timestamp = 'season__timestamp', + supply = 'supply', + supplyInPegLP = 'supplyInPegLP', + twaBeanLiquidityUSD = 'twaBeanLiquidityUSD', + twaDeltaB = 'twaDeltaB', + twaLiquidityUSD = 'twaLiquidityUSD', + twaNonBeanLiquidityUSD = 'twaNonBeanLiquidityUSD', + twaPrice = 'twaPrice', + volume = 'volume', + volumeUSD = 'volumeUSD' } export type BeanHourlySnapshot = { @@ -773,18 +767,18 @@ export type BeanHourlySnapshot = { export type BeanHourlySnapshotCrossEventsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; -export type BeanHourlySnapshot_Filter = { +export type BeanHourlySnapshotFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; bean?: InputMaybe; - bean_?: InputMaybe; + bean_?: InputMaybe; bean_contains?: InputMaybe; bean_contains_nocase?: InputMaybe; bean_ends_with?: InputMaybe; @@ -812,7 +806,7 @@ export type BeanHourlySnapshot_Filter = { createdTimestamp_lte?: InputMaybe; createdTimestamp_not?: InputMaybe; createdTimestamp_not_in?: InputMaybe>; - crossEvents_?: InputMaybe; + crossEvents_?: InputMaybe; crosses?: InputMaybe; crosses_gt?: InputMaybe; crosses_gte?: InputMaybe; @@ -925,7 +919,7 @@ export type BeanHourlySnapshot_Filter = { marketCap_lte?: InputMaybe; marketCap_not?: InputMaybe; marketCap_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; season?: InputMaybe; seasonNumber?: InputMaybe; seasonNumber_gt?: InputMaybe; @@ -935,7 +929,7 @@ export type BeanHourlySnapshot_Filter = { seasonNumber_lte?: InputMaybe; seasonNumber_not?: InputMaybe; seasonNumber_not_in?: InputMaybe>; - season_?: InputMaybe; + season_?: InputMaybe; season_contains?: InputMaybe; season_contains_nocase?: InputMaybe; season_ends_with?: InputMaybe; @@ -1029,59 +1023,59 @@ export type BeanHourlySnapshot_Filter = { volume_not_in?: InputMaybe>; }; -export enum BeanHourlySnapshot_OrderBy { - Bean = 'bean', - BeanCreatedTimestamp = 'bean__createdTimestamp', - BeanCrosses = 'bean__crosses', - BeanId = 'bean__id', - BeanLastCross = 'bean__lastCross', - BeanLastDailySnapshotDay = 'bean__lastDailySnapshotDay', - BeanLastHourlySnapshotSeason = 'bean__lastHourlySnapshotSeason', - BeanLastPrice = 'bean__lastPrice', - BeanLastUpdateBlockNumber = 'bean__lastUpdateBlockNumber', - BeanLastUpdateTimestamp = 'bean__lastUpdateTimestamp', - BeanLiquidityUsd = 'bean__liquidityUSD', - BeanLockedBeans = 'bean__lockedBeans', - BeanSupply = 'bean__supply', - BeanSupplyInPegLp = 'bean__supplyInPegLP', - BeanVolume = 'bean__volume', - BeanVolumeUsd = 'bean__volumeUSD', - CreatedTimestamp = 'createdTimestamp', - CrossEvents = 'crossEvents', - Crosses = 'crosses', - DeltaCrosses = 'deltaCrosses', - DeltaLiquidityUsd = 'deltaLiquidityUSD', - DeltaVolume = 'deltaVolume', - DeltaVolumeUsd = 'deltaVolumeUSD', - Id = 'id', - InstDeltaB = 'instDeltaB', - InstPrice = 'instPrice', - L2sr = 'l2sr', - LastUpdateBlockNumber = 'lastUpdateBlockNumber', - LastUpdateTimestamp = 'lastUpdateTimestamp', - LiquidityUsd = 'liquidityUSD', - LockedBeans = 'lockedBeans', - MarketCap = 'marketCap', - Season = 'season', - SeasonNumber = 'seasonNumber', - SeasonId = 'season__id', - SeasonSeason = 'season__season', - SeasonTimestamp = 'season__timestamp', - Supply = 'supply', - SupplyInPegLp = 'supplyInPegLP', - TwaBeanLiquidityUsd = 'twaBeanLiquidityUSD', - TwaDeltaB = 'twaDeltaB', - TwaLiquidityUsd = 'twaLiquidityUSD', - TwaNonBeanLiquidityUsd = 'twaNonBeanLiquidityUSD', - TwaPrice = 'twaPrice', - Volume = 'volume', - VolumeUsd = 'volumeUSD' +export enum BeanHourlySnapshotOrderBy { + bean = 'bean', + bean__createdTimestamp = 'bean__createdTimestamp', + bean__crosses = 'bean__crosses', + bean__id = 'bean__id', + bean__lastCross = 'bean__lastCross', + bean__lastDailySnapshotDay = 'bean__lastDailySnapshotDay', + bean__lastHourlySnapshotSeason = 'bean__lastHourlySnapshotSeason', + bean__lastPrice = 'bean__lastPrice', + bean__lastUpdateBlockNumber = 'bean__lastUpdateBlockNumber', + bean__lastUpdateTimestamp = 'bean__lastUpdateTimestamp', + bean__liquidityUSD = 'bean__liquidityUSD', + bean__lockedBeans = 'bean__lockedBeans', + bean__supply = 'bean__supply', + bean__supplyInPegLP = 'bean__supplyInPegLP', + bean__volume = 'bean__volume', + bean__volumeUSD = 'bean__volumeUSD', + createdTimestamp = 'createdTimestamp', + crossEvents = 'crossEvents', + crosses = 'crosses', + deltaCrosses = 'deltaCrosses', + deltaLiquidityUSD = 'deltaLiquidityUSD', + deltaVolume = 'deltaVolume', + deltaVolumeUSD = 'deltaVolumeUSD', + id = 'id', + instDeltaB = 'instDeltaB', + instPrice = 'instPrice', + l2sr = 'l2sr', + lastUpdateBlockNumber = 'lastUpdateBlockNumber', + lastUpdateTimestamp = 'lastUpdateTimestamp', + liquidityUSD = 'liquidityUSD', + lockedBeans = 'lockedBeans', + marketCap = 'marketCap', + season = 'season', + seasonNumber = 'seasonNumber', + season__id = 'season__id', + season__season = 'season__season', + season__timestamp = 'season__timestamp', + supply = 'supply', + supplyInPegLP = 'supplyInPegLP', + twaBeanLiquidityUSD = 'twaBeanLiquidityUSD', + twaDeltaB = 'twaDeltaB', + twaLiquidityUSD = 'twaLiquidityUSD', + twaNonBeanLiquidityUSD = 'twaNonBeanLiquidityUSD', + twaPrice = 'twaPrice', + volume = 'volume', + volumeUSD = 'volumeUSD' } -export type Bean_Filter = { +export type BeanFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; createdTimestamp?: InputMaybe; createdTimestamp_gt?: InputMaybe; createdTimestamp_gte?: InputMaybe; @@ -1090,7 +1084,7 @@ export type Bean_Filter = { createdTimestamp_lte?: InputMaybe; createdTimestamp_not?: InputMaybe; createdTimestamp_not_in?: InputMaybe>; - crossEvents_?: InputMaybe; + crossEvents_?: InputMaybe; crosses?: InputMaybe; crosses_gt?: InputMaybe; crosses_gte?: InputMaybe; @@ -1100,7 +1094,7 @@ export type Bean_Filter = { crosses_not?: InputMaybe; crosses_not_in?: InputMaybe>; currentSeason?: InputMaybe; - currentSeason_?: InputMaybe; + currentSeason_?: InputMaybe; currentSeason_contains?: InputMaybe; currentSeason_contains_nocase?: InputMaybe; currentSeason_ends_with?: InputMaybe; @@ -1120,15 +1114,15 @@ export type Bean_Filter = { currentSeason_not_starts_with_nocase?: InputMaybe; currentSeason_starts_with?: InputMaybe; currentSeason_starts_with_nocase?: InputMaybe; - dailySnapshots_?: InputMaybe; + dailySnapshots_?: InputMaybe; dewhitelistedPools?: InputMaybe>; - dewhitelistedPools_?: InputMaybe; + dewhitelistedPools_?: InputMaybe; dewhitelistedPools_contains?: InputMaybe>; dewhitelistedPools_contains_nocase?: InputMaybe>; dewhitelistedPools_not?: InputMaybe>; dewhitelistedPools_not_contains?: InputMaybe>; dewhitelistedPools_not_contains_nocase?: InputMaybe>; - hourlySnapshots_?: InputMaybe; + hourlySnapshots_?: InputMaybe; id?: InputMaybe; id_contains?: InputMaybe; id_gt?: InputMaybe; @@ -1203,9 +1197,9 @@ export type Bean_Filter = { lockedBeans_lte?: InputMaybe; lockedBeans_not?: InputMaybe; lockedBeans_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; pools?: InputMaybe>; - pools_?: InputMaybe; + pools_?: InputMaybe; pools_contains?: InputMaybe>; pools_contains_nocase?: InputMaybe>; pools_not?: InputMaybe>; @@ -1245,38 +1239,38 @@ export type Bean_Filter = { volume_not_in?: InputMaybe>; }; -export enum Bean_OrderBy { - CreatedTimestamp = 'createdTimestamp', - CrossEvents = 'crossEvents', - Crosses = 'crosses', - CurrentSeason = 'currentSeason', - CurrentSeasonId = 'currentSeason__id', - CurrentSeasonSeason = 'currentSeason__season', - CurrentSeasonTimestamp = 'currentSeason__timestamp', - DailySnapshots = 'dailySnapshots', - DewhitelistedPools = 'dewhitelistedPools', - HourlySnapshots = 'hourlySnapshots', - Id = 'id', - LastCross = 'lastCross', - LastDailySnapshotDay = 'lastDailySnapshotDay', - LastHourlySnapshotSeason = 'lastHourlySnapshotSeason', - LastPrice = 'lastPrice', - LastUpdateBlockNumber = 'lastUpdateBlockNumber', - LastUpdateTimestamp = 'lastUpdateTimestamp', - LiquidityUsd = 'liquidityUSD', - LockedBeans = 'lockedBeans', - Pools = 'pools', - Supply = 'supply', - SupplyInPegLp = 'supplyInPegLP', - Volume = 'volume', - VolumeUsd = 'volumeUSD' +export enum BeanOrderBy { + createdTimestamp = 'createdTimestamp', + crossEvents = 'crossEvents', + crosses = 'crosses', + currentSeason = 'currentSeason', + currentSeason__id = 'currentSeason__id', + currentSeason__season = 'currentSeason__season', + currentSeason__timestamp = 'currentSeason__timestamp', + dailySnapshots = 'dailySnapshots', + dewhitelistedPools = 'dewhitelistedPools', + hourlySnapshots = 'hourlySnapshots', + id = 'id', + lastCross = 'lastCross', + lastDailySnapshotDay = 'lastDailySnapshotDay', + lastHourlySnapshotSeason = 'lastHourlySnapshotSeason', + lastPrice = 'lastPrice', + lastUpdateBlockNumber = 'lastUpdateBlockNumber', + lastUpdateTimestamp = 'lastUpdateTimestamp', + liquidityUSD = 'liquidityUSD', + lockedBeans = 'lockedBeans', + pools = 'pools', + supply = 'supply', + supplyInPegLP = 'supplyInPegLP', + volume = 'volume', + volumeUSD = 'volumeUSD' } export type BlockChangedFilter = { number_gte: Scalars['Int']['input']; }; -export type Block_Height = { +export type BlockHeight = { hash?: InputMaybe; number?: InputMaybe; number_gte?: InputMaybe; @@ -1307,19 +1301,19 @@ export type FarmerBalance = { export type FarmerBalanceDailySnapshotsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type FarmerBalanceHourlySnapshotsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type FarmerBalanceDailySnapshot = { @@ -1350,10 +1344,10 @@ export type FarmerBalanceDailySnapshot = { walletBalance: Scalars['BigInt']['output']; }; -export type FarmerBalanceDailySnapshot_Filter = { +export type FarmerBalanceDailySnapshotFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; createdTimestamp?: InputMaybe; createdTimestamp_gt?: InputMaybe; createdTimestamp_gte?: InputMaybe; @@ -1403,7 +1397,7 @@ export type FarmerBalanceDailySnapshot_Filter = { farmBalance_not?: InputMaybe; farmBalance_not_in?: InputMaybe>; farmerBalance?: InputMaybe; - farmerBalance_?: InputMaybe; + farmerBalance_?: InputMaybe; farmerBalance_contains?: InputMaybe; farmerBalance_contains_nocase?: InputMaybe; farmerBalance_ends_with?: InputMaybe; @@ -1447,9 +1441,9 @@ export type FarmerBalanceDailySnapshot_Filter = { lastUpdateTimestamp_lte?: InputMaybe; lastUpdateTimestamp_not?: InputMaybe; lastUpdateTimestamp_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; season?: InputMaybe; - season_?: InputMaybe; + season_?: InputMaybe; season_contains?: InputMaybe; season_contains_nocase?: InputMaybe; season_ends_with?: InputMaybe; @@ -1487,31 +1481,31 @@ export type FarmerBalanceDailySnapshot_Filter = { walletBalance_not_in?: InputMaybe>; }; -export enum FarmerBalanceDailySnapshot_OrderBy { - CreatedTimestamp = 'createdTimestamp', - Day = 'day', - DeltaFarmBalance = 'deltaFarmBalance', - DeltaTotalBalance = 'deltaTotalBalance', - DeltaWalletBalance = 'deltaWalletBalance', - FarmBalance = 'farmBalance', - FarmerBalance = 'farmerBalance', - FarmerBalanceFarmBalance = 'farmerBalance__farmBalance', - FarmerBalanceFarmer = 'farmerBalance__farmer', - FarmerBalanceId = 'farmerBalance__id', - FarmerBalanceLastDailySnapshotDay = 'farmerBalance__lastDailySnapshotDay', - FarmerBalanceLastHourlySnapshotSeason = 'farmerBalance__lastHourlySnapshotSeason', - FarmerBalanceToken = 'farmerBalance__token', - FarmerBalanceTotalBalance = 'farmerBalance__totalBalance', - FarmerBalanceWalletBalance = 'farmerBalance__walletBalance', - Id = 'id', - LastUpdateBlockNumber = 'lastUpdateBlockNumber', - LastUpdateTimestamp = 'lastUpdateTimestamp', - Season = 'season', - SeasonId = 'season__id', - SeasonSeason = 'season__season', - SeasonTimestamp = 'season__timestamp', - TotalBalance = 'totalBalance', - WalletBalance = 'walletBalance' +export enum FarmerBalanceDailySnapshotOrderBy { + createdTimestamp = 'createdTimestamp', + day = 'day', + deltaFarmBalance = 'deltaFarmBalance', + deltaTotalBalance = 'deltaTotalBalance', + deltaWalletBalance = 'deltaWalletBalance', + farmBalance = 'farmBalance', + farmerBalance = 'farmerBalance', + farmerBalance__farmBalance = 'farmerBalance__farmBalance', + farmerBalance__farmer = 'farmerBalance__farmer', + farmerBalance__id = 'farmerBalance__id', + farmerBalance__lastDailySnapshotDay = 'farmerBalance__lastDailySnapshotDay', + farmerBalance__lastHourlySnapshotSeason = 'farmerBalance__lastHourlySnapshotSeason', + farmerBalance__token = 'farmerBalance__token', + farmerBalance__totalBalance = 'farmerBalance__totalBalance', + farmerBalance__walletBalance = 'farmerBalance__walletBalance', + id = 'id', + lastUpdateBlockNumber = 'lastUpdateBlockNumber', + lastUpdateTimestamp = 'lastUpdateTimestamp', + season = 'season', + season__id = 'season__id', + season__season = 'season__season', + season__timestamp = 'season__timestamp', + totalBalance = 'totalBalance', + walletBalance = 'walletBalance' } export type FarmerBalanceHourlySnapshot = { @@ -1541,10 +1535,10 @@ export type FarmerBalanceHourlySnapshot = { walletBalance: Scalars['BigInt']['output']; }; -export type FarmerBalanceHourlySnapshot_Filter = { +export type FarmerBalanceHourlySnapshotFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; createdTimestamp?: InputMaybe; createdTimestamp_gt?: InputMaybe; createdTimestamp_gte?: InputMaybe; @@ -1586,7 +1580,7 @@ export type FarmerBalanceHourlySnapshot_Filter = { farmBalance_not?: InputMaybe; farmBalance_not_in?: InputMaybe>; farmerBalance?: InputMaybe; - farmerBalance_?: InputMaybe; + farmerBalance_?: InputMaybe; farmerBalance_contains?: InputMaybe; farmerBalance_contains_nocase?: InputMaybe; farmerBalance_ends_with?: InputMaybe; @@ -1630,7 +1624,7 @@ export type FarmerBalanceHourlySnapshot_Filter = { lastUpdateTimestamp_lte?: InputMaybe; lastUpdateTimestamp_not?: InputMaybe; lastUpdateTimestamp_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; season?: InputMaybe; seasonNumber?: InputMaybe; seasonNumber_gt?: InputMaybe; @@ -1640,7 +1634,7 @@ export type FarmerBalanceHourlySnapshot_Filter = { seasonNumber_lte?: InputMaybe; seasonNumber_not?: InputMaybe; seasonNumber_not_in?: InputMaybe>; - season_?: InputMaybe; + season_?: InputMaybe; season_contains?: InputMaybe; season_contains_nocase?: InputMaybe; season_ends_with?: InputMaybe; @@ -1678,38 +1672,38 @@ export type FarmerBalanceHourlySnapshot_Filter = { walletBalance_not_in?: InputMaybe>; }; -export enum FarmerBalanceHourlySnapshot_OrderBy { - CreatedTimestamp = 'createdTimestamp', - DeltaFarmBalance = 'deltaFarmBalance', - DeltaTotalBalance = 'deltaTotalBalance', - DeltaWalletBalance = 'deltaWalletBalance', - FarmBalance = 'farmBalance', - FarmerBalance = 'farmerBalance', - FarmerBalanceFarmBalance = 'farmerBalance__farmBalance', - FarmerBalanceFarmer = 'farmerBalance__farmer', - FarmerBalanceId = 'farmerBalance__id', - FarmerBalanceLastDailySnapshotDay = 'farmerBalance__lastDailySnapshotDay', - FarmerBalanceLastHourlySnapshotSeason = 'farmerBalance__lastHourlySnapshotSeason', - FarmerBalanceToken = 'farmerBalance__token', - FarmerBalanceTotalBalance = 'farmerBalance__totalBalance', - FarmerBalanceWalletBalance = 'farmerBalance__walletBalance', - Id = 'id', - LastUpdateBlockNumber = 'lastUpdateBlockNumber', - LastUpdateTimestamp = 'lastUpdateTimestamp', - Season = 'season', - SeasonNumber = 'seasonNumber', - SeasonId = 'season__id', - SeasonSeason = 'season__season', - SeasonTimestamp = 'season__timestamp', - TotalBalance = 'totalBalance', - WalletBalance = 'walletBalance' +export enum FarmerBalanceHourlySnapshotOrderBy { + createdTimestamp = 'createdTimestamp', + deltaFarmBalance = 'deltaFarmBalance', + deltaTotalBalance = 'deltaTotalBalance', + deltaWalletBalance = 'deltaWalletBalance', + farmBalance = 'farmBalance', + farmerBalance = 'farmerBalance', + farmerBalance__farmBalance = 'farmerBalance__farmBalance', + farmerBalance__farmer = 'farmerBalance__farmer', + farmerBalance__id = 'farmerBalance__id', + farmerBalance__lastDailySnapshotDay = 'farmerBalance__lastDailySnapshotDay', + farmerBalance__lastHourlySnapshotSeason = 'farmerBalance__lastHourlySnapshotSeason', + farmerBalance__token = 'farmerBalance__token', + farmerBalance__totalBalance = 'farmerBalance__totalBalance', + farmerBalance__walletBalance = 'farmerBalance__walletBalance', + id = 'id', + lastUpdateBlockNumber = 'lastUpdateBlockNumber', + lastUpdateTimestamp = 'lastUpdateTimestamp', + season = 'season', + seasonNumber = 'seasonNumber', + season__id = 'season__id', + season__season = 'season__season', + season__timestamp = 'season__timestamp', + totalBalance = 'totalBalance', + walletBalance = 'walletBalance' } -export type FarmerBalance_Filter = { +export type FarmerBalanceFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; - dailySnapshots_?: InputMaybe; + and?: InputMaybe>>; + dailySnapshots_?: InputMaybe; farmBalance?: InputMaybe; farmBalance_gt?: InputMaybe; farmBalance_gte?: InputMaybe; @@ -1728,7 +1722,7 @@ export type FarmerBalance_Filter = { farmer_not?: InputMaybe; farmer_not_contains?: InputMaybe; farmer_not_in?: InputMaybe>; - hourlySnapshots_?: InputMaybe; + hourlySnapshots_?: InputMaybe; id?: InputMaybe; id_gt?: InputMaybe; id_gte?: InputMaybe; @@ -1753,7 +1747,7 @@ export type FarmerBalance_Filter = { lastHourlySnapshotSeason_lte?: InputMaybe; lastHourlySnapshotSeason_not?: InputMaybe; lastHourlySnapshotSeason_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; token?: InputMaybe; token_contains?: InputMaybe; token_gt?: InputMaybe; @@ -1782,23 +1776,23 @@ export type FarmerBalance_Filter = { walletBalance_not_in?: InputMaybe>; }; -export enum FarmerBalance_OrderBy { - DailySnapshots = 'dailySnapshots', - FarmBalance = 'farmBalance', - Farmer = 'farmer', - HourlySnapshots = 'hourlySnapshots', - Id = 'id', - LastDailySnapshotDay = 'lastDailySnapshotDay', - LastHourlySnapshotSeason = 'lastHourlySnapshotSeason', - Token = 'token', - TotalBalance = 'totalBalance', - WalletBalance = 'walletBalance' +export enum FarmerBalanceOrderBy { + dailySnapshots = 'dailySnapshots', + farmBalance = 'farmBalance', + farmer = 'farmer', + hourlySnapshots = 'hourlySnapshots', + id = 'id', + lastDailySnapshotDay = 'lastDailySnapshotDay', + lastHourlySnapshotSeason = 'lastHourlySnapshotSeason', + token = 'token', + totalBalance = 'totalBalance', + walletBalance = 'walletBalance' } /** Defines the order direction, either ascending or descending */ export enum OrderDirection { - Asc = 'asc', - Desc = 'desc' + asc = 'asc', + desc = 'desc' } export type Pool = { @@ -1844,37 +1838,37 @@ export type Pool = { export type PoolCrossEventsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type PoolDailySnapshotsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type PoolHourlySnapshotsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type PoolTokensArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type PoolCross = { @@ -1901,14 +1895,14 @@ export type PoolCross = { timestamp: Scalars['BigInt']['output']; }; -export type PoolCross_Filter = { +export type PoolCrossFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; above?: InputMaybe; above_in?: InputMaybe>; above_not?: InputMaybe; above_not_in?: InputMaybe>; - and?: InputMaybe>>; + and?: InputMaybe>>; blockNumber?: InputMaybe; blockNumber_gt?: InputMaybe; blockNumber_gte?: InputMaybe; @@ -1933,10 +1927,10 @@ export type PoolCross_Filter = { id_lte?: InputMaybe; id_not?: InputMaybe; id_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; pool?: InputMaybe; poolDailySnapshot?: InputMaybe; - poolDailySnapshot_?: InputMaybe; + poolDailySnapshot_?: InputMaybe; poolDailySnapshot_contains?: InputMaybe; poolDailySnapshot_contains_nocase?: InputMaybe; poolDailySnapshot_ends_with?: InputMaybe; @@ -1957,7 +1951,7 @@ export type PoolCross_Filter = { poolDailySnapshot_starts_with?: InputMaybe; poolDailySnapshot_starts_with_nocase?: InputMaybe; poolHourlySnapshot?: InputMaybe; - poolHourlySnapshot_?: InputMaybe; + poolHourlySnapshot_?: InputMaybe; poolHourlySnapshot_contains?: InputMaybe; poolHourlySnapshot_contains_nocase?: InputMaybe; poolHourlySnapshot_ends_with?: InputMaybe; @@ -1977,7 +1971,7 @@ export type PoolCross_Filter = { poolHourlySnapshot_not_starts_with_nocase?: InputMaybe; poolHourlySnapshot_starts_with?: InputMaybe; poolHourlySnapshot_starts_with_nocase?: InputMaybe; - pool_?: InputMaybe; + pool_?: InputMaybe; pool_contains?: InputMaybe; pool_contains_nocase?: InputMaybe; pool_ends_with?: InputMaybe; @@ -2023,71 +2017,71 @@ export type PoolCross_Filter = { timestamp_not_in?: InputMaybe>; }; -export enum PoolCross_OrderBy { - Above = 'above', - BlockNumber = 'blockNumber', - Cross = 'cross', - Id = 'id', - Pool = 'pool', - PoolDailySnapshot = 'poolDailySnapshot', - PoolDailySnapshotCreatedTimestamp = 'poolDailySnapshot__createdTimestamp', - PoolDailySnapshotCrosses = 'poolDailySnapshot__crosses', - PoolDailySnapshotDay = 'poolDailySnapshot__day', - PoolDailySnapshotDeltaCrosses = 'poolDailySnapshot__deltaCrosses', - PoolDailySnapshotDeltaLiquidityUsd = 'poolDailySnapshot__deltaLiquidityUSD', - PoolDailySnapshotDeltaVolume = 'poolDailySnapshot__deltaVolume', - PoolDailySnapshotDeltaVolumeUsd = 'poolDailySnapshot__deltaVolumeUSD', - PoolDailySnapshotId = 'poolDailySnapshot__id', - PoolDailySnapshotInstDeltaB = 'poolDailySnapshot__instDeltaB', - PoolDailySnapshotInstPrice = 'poolDailySnapshot__instPrice', - PoolDailySnapshotLastUpdateBlockNumber = 'poolDailySnapshot__lastUpdateBlockNumber', - PoolDailySnapshotLastUpdateTimestamp = 'poolDailySnapshot__lastUpdateTimestamp', - PoolDailySnapshotLiquidityUsd = 'poolDailySnapshot__liquidityUSD', - PoolDailySnapshotTwaBeanLiquidityUsd = 'poolDailySnapshot__twaBeanLiquidityUSD', - PoolDailySnapshotTwaDeltaB = 'poolDailySnapshot__twaDeltaB', - PoolDailySnapshotTwaLiquidityUsd = 'poolDailySnapshot__twaLiquidityUSD', - PoolDailySnapshotTwaNonBeanLiquidityUsd = 'poolDailySnapshot__twaNonBeanLiquidityUSD', - PoolDailySnapshotTwaPrice = 'poolDailySnapshot__twaPrice', - PoolDailySnapshotTwaToken2Price = 'poolDailySnapshot__twaToken2Price', - PoolDailySnapshotVolume = 'poolDailySnapshot__volume', - PoolDailySnapshotVolumeUsd = 'poolDailySnapshot__volumeUSD', - PoolHourlySnapshot = 'poolHourlySnapshot', - PoolHourlySnapshotCreatedTimestamp = 'poolHourlySnapshot__createdTimestamp', - PoolHourlySnapshotCrosses = 'poolHourlySnapshot__crosses', - PoolHourlySnapshotDeltaCrosses = 'poolHourlySnapshot__deltaCrosses', - PoolHourlySnapshotDeltaLiquidityUsd = 'poolHourlySnapshot__deltaLiquidityUSD', - PoolHourlySnapshotDeltaVolume = 'poolHourlySnapshot__deltaVolume', - PoolHourlySnapshotDeltaVolumeUsd = 'poolHourlySnapshot__deltaVolumeUSD', - PoolHourlySnapshotId = 'poolHourlySnapshot__id', - PoolHourlySnapshotInstDeltaB = 'poolHourlySnapshot__instDeltaB', - PoolHourlySnapshotInstPrice = 'poolHourlySnapshot__instPrice', - PoolHourlySnapshotLastUpdateBlockNumber = 'poolHourlySnapshot__lastUpdateBlockNumber', - PoolHourlySnapshotLastUpdateTimestamp = 'poolHourlySnapshot__lastUpdateTimestamp', - PoolHourlySnapshotLiquidityUsd = 'poolHourlySnapshot__liquidityUSD', - PoolHourlySnapshotSeasonNumber = 'poolHourlySnapshot__seasonNumber', - PoolHourlySnapshotTwaBeanLiquidityUsd = 'poolHourlySnapshot__twaBeanLiquidityUSD', - PoolHourlySnapshotTwaDeltaB = 'poolHourlySnapshot__twaDeltaB', - PoolHourlySnapshotTwaLiquidityUsd = 'poolHourlySnapshot__twaLiquidityUSD', - PoolHourlySnapshotTwaNonBeanLiquidityUsd = 'poolHourlySnapshot__twaNonBeanLiquidityUSD', - PoolHourlySnapshotTwaPrice = 'poolHourlySnapshot__twaPrice', - PoolHourlySnapshotTwaToken2Price = 'poolHourlySnapshot__twaToken2Price', - PoolHourlySnapshotVolume = 'poolHourlySnapshot__volume', - PoolHourlySnapshotVolumeUsd = 'poolHourlySnapshot__volumeUSD', - PoolCreatedTimestamp = 'pool__createdTimestamp', - PoolCrosses = 'pool__crosses', - PoolId = 'pool__id', - PoolLastCross = 'pool__lastCross', - PoolLastDailySnapshotDay = 'pool__lastDailySnapshotDay', - PoolLastHourlySnapshotSeason = 'pool__lastHourlySnapshotSeason', - PoolLastPrice = 'pool__lastPrice', - PoolLastUpdateBlockNumber = 'pool__lastUpdateBlockNumber', - PoolLastUpdateTimestamp = 'pool__lastUpdateTimestamp', - PoolLiquidityUsd = 'pool__liquidityUSD', - PoolVolume = 'pool__volume', - PoolVolumeUsd = 'pool__volumeUSD', - Price = 'price', - TimeSinceLastCross = 'timeSinceLastCross', - Timestamp = 'timestamp' +export enum PoolCrossOrderBy { + above = 'above', + blockNumber = 'blockNumber', + cross = 'cross', + id = 'id', + pool = 'pool', + poolDailySnapshot = 'poolDailySnapshot', + poolDailySnapshot__createdTimestamp = 'poolDailySnapshot__createdTimestamp', + poolDailySnapshot__crosses = 'poolDailySnapshot__crosses', + poolDailySnapshot__day = 'poolDailySnapshot__day', + poolDailySnapshot__deltaCrosses = 'poolDailySnapshot__deltaCrosses', + poolDailySnapshot__deltaLiquidityUSD = 'poolDailySnapshot__deltaLiquidityUSD', + poolDailySnapshot__deltaVolume = 'poolDailySnapshot__deltaVolume', + poolDailySnapshot__deltaVolumeUSD = 'poolDailySnapshot__deltaVolumeUSD', + poolDailySnapshot__id = 'poolDailySnapshot__id', + poolDailySnapshot__instDeltaB = 'poolDailySnapshot__instDeltaB', + poolDailySnapshot__instPrice = 'poolDailySnapshot__instPrice', + poolDailySnapshot__lastUpdateBlockNumber = 'poolDailySnapshot__lastUpdateBlockNumber', + poolDailySnapshot__lastUpdateTimestamp = 'poolDailySnapshot__lastUpdateTimestamp', + poolDailySnapshot__liquidityUSD = 'poolDailySnapshot__liquidityUSD', + poolDailySnapshot__twaBeanLiquidityUSD = 'poolDailySnapshot__twaBeanLiquidityUSD', + poolDailySnapshot__twaDeltaB = 'poolDailySnapshot__twaDeltaB', + poolDailySnapshot__twaLiquidityUSD = 'poolDailySnapshot__twaLiquidityUSD', + poolDailySnapshot__twaNonBeanLiquidityUSD = 'poolDailySnapshot__twaNonBeanLiquidityUSD', + poolDailySnapshot__twaPrice = 'poolDailySnapshot__twaPrice', + poolDailySnapshot__twaToken2Price = 'poolDailySnapshot__twaToken2Price', + poolDailySnapshot__volume = 'poolDailySnapshot__volume', + poolDailySnapshot__volumeUSD = 'poolDailySnapshot__volumeUSD', + poolHourlySnapshot = 'poolHourlySnapshot', + poolHourlySnapshot__createdTimestamp = 'poolHourlySnapshot__createdTimestamp', + poolHourlySnapshot__crosses = 'poolHourlySnapshot__crosses', + poolHourlySnapshot__deltaCrosses = 'poolHourlySnapshot__deltaCrosses', + poolHourlySnapshot__deltaLiquidityUSD = 'poolHourlySnapshot__deltaLiquidityUSD', + poolHourlySnapshot__deltaVolume = 'poolHourlySnapshot__deltaVolume', + poolHourlySnapshot__deltaVolumeUSD = 'poolHourlySnapshot__deltaVolumeUSD', + poolHourlySnapshot__id = 'poolHourlySnapshot__id', + poolHourlySnapshot__instDeltaB = 'poolHourlySnapshot__instDeltaB', + poolHourlySnapshot__instPrice = 'poolHourlySnapshot__instPrice', + poolHourlySnapshot__lastUpdateBlockNumber = 'poolHourlySnapshot__lastUpdateBlockNumber', + poolHourlySnapshot__lastUpdateTimestamp = 'poolHourlySnapshot__lastUpdateTimestamp', + poolHourlySnapshot__liquidityUSD = 'poolHourlySnapshot__liquidityUSD', + poolHourlySnapshot__seasonNumber = 'poolHourlySnapshot__seasonNumber', + poolHourlySnapshot__twaBeanLiquidityUSD = 'poolHourlySnapshot__twaBeanLiquidityUSD', + poolHourlySnapshot__twaDeltaB = 'poolHourlySnapshot__twaDeltaB', + poolHourlySnapshot__twaLiquidityUSD = 'poolHourlySnapshot__twaLiquidityUSD', + poolHourlySnapshot__twaNonBeanLiquidityUSD = 'poolHourlySnapshot__twaNonBeanLiquidityUSD', + poolHourlySnapshot__twaPrice = 'poolHourlySnapshot__twaPrice', + poolHourlySnapshot__twaToken2Price = 'poolHourlySnapshot__twaToken2Price', + poolHourlySnapshot__volume = 'poolHourlySnapshot__volume', + poolHourlySnapshot__volumeUSD = 'poolHourlySnapshot__volumeUSD', + pool__createdTimestamp = 'pool__createdTimestamp', + pool__crosses = 'pool__crosses', + pool__id = 'pool__id', + pool__lastCross = 'pool__lastCross', + pool__lastDailySnapshotDay = 'pool__lastDailySnapshotDay', + pool__lastHourlySnapshotSeason = 'pool__lastHourlySnapshotSeason', + pool__lastPrice = 'pool__lastPrice', + pool__lastUpdateBlockNumber = 'pool__lastUpdateBlockNumber', + pool__lastUpdateTimestamp = 'pool__lastUpdateTimestamp', + pool__liquidityUSD = 'pool__liquidityUSD', + pool__volume = 'pool__volume', + pool__volumeUSD = 'pool__volumeUSD', + price = 'price', + timeSinceLastCross = 'timeSinceLastCross', + timestamp = 'timestamp' } export type PoolDailySnapshot = { @@ -2149,16 +2143,16 @@ export type PoolDailySnapshot = { export type PoolDailySnapshotCrossEventsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; -export type PoolDailySnapshot_Filter = { +export type PoolDailySnapshotFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; createdTimestamp?: InputMaybe; createdTimestamp_gt?: InputMaybe; createdTimestamp_gte?: InputMaybe; @@ -2167,7 +2161,7 @@ export type PoolDailySnapshot_Filter = { createdTimestamp_lte?: InputMaybe; createdTimestamp_not?: InputMaybe; createdTimestamp_not_in?: InputMaybe>; - crossEvents_?: InputMaybe; + crossEvents_?: InputMaybe; crosses?: InputMaybe; crosses_gt?: InputMaybe; crosses_gte?: InputMaybe; @@ -2270,9 +2264,9 @@ export type PoolDailySnapshot_Filter = { liquidityUSD_lte?: InputMaybe; liquidityUSD_not?: InputMaybe; liquidityUSD_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; pool?: InputMaybe; - pool_?: InputMaybe; + pool_?: InputMaybe; pool_contains?: InputMaybe; pool_contains_nocase?: InputMaybe; pool_ends_with?: InputMaybe; @@ -2299,7 +2293,7 @@ export type PoolDailySnapshot_Filter = { reserves_not_contains?: InputMaybe>; reserves_not_contains_nocase?: InputMaybe>; season?: InputMaybe; - season_?: InputMaybe; + season_?: InputMaybe; season_contains?: InputMaybe; season_contains_nocase?: InputMaybe; season_ends_with?: InputMaybe; @@ -2391,49 +2385,49 @@ export type PoolDailySnapshot_Filter = { volume_not_in?: InputMaybe>; }; -export enum PoolDailySnapshot_OrderBy { - CreatedTimestamp = 'createdTimestamp', - CrossEvents = 'crossEvents', - Crosses = 'crosses', - Day = 'day', - DeltaCrosses = 'deltaCrosses', - DeltaLiquidityUsd = 'deltaLiquidityUSD', - DeltaReserves = 'deltaReserves', - DeltaVolume = 'deltaVolume', - DeltaVolumeUsd = 'deltaVolumeUSD', - Id = 'id', - InstDeltaB = 'instDeltaB', - InstPrice = 'instPrice', - LastUpdateBlockNumber = 'lastUpdateBlockNumber', - LastUpdateTimestamp = 'lastUpdateTimestamp', - LiquidityUsd = 'liquidityUSD', - Pool = 'pool', - PoolCreatedTimestamp = 'pool__createdTimestamp', - PoolCrosses = 'pool__crosses', - PoolId = 'pool__id', - PoolLastCross = 'pool__lastCross', - PoolLastDailySnapshotDay = 'pool__lastDailySnapshotDay', - PoolLastHourlySnapshotSeason = 'pool__lastHourlySnapshotSeason', - PoolLastPrice = 'pool__lastPrice', - PoolLastUpdateBlockNumber = 'pool__lastUpdateBlockNumber', - PoolLastUpdateTimestamp = 'pool__lastUpdateTimestamp', - PoolLiquidityUsd = 'pool__liquidityUSD', - PoolVolume = 'pool__volume', - PoolVolumeUsd = 'pool__volumeUSD', - Reserves = 'reserves', - Season = 'season', - SeasonId = 'season__id', - SeasonSeason = 'season__season', - SeasonTimestamp = 'season__timestamp', - TwaBeanLiquidityUsd = 'twaBeanLiquidityUSD', - TwaDeltaB = 'twaDeltaB', - TwaLiquidityUsd = 'twaLiquidityUSD', - TwaNonBeanLiquidityUsd = 'twaNonBeanLiquidityUSD', - TwaPrice = 'twaPrice', - TwaReserves = 'twaReserves', - TwaToken2Price = 'twaToken2Price', - Volume = 'volume', - VolumeUsd = 'volumeUSD' +export enum PoolDailySnapshotOrderBy { + createdTimestamp = 'createdTimestamp', + crossEvents = 'crossEvents', + crosses = 'crosses', + day = 'day', + deltaCrosses = 'deltaCrosses', + deltaLiquidityUSD = 'deltaLiquidityUSD', + deltaReserves = 'deltaReserves', + deltaVolume = 'deltaVolume', + deltaVolumeUSD = 'deltaVolumeUSD', + id = 'id', + instDeltaB = 'instDeltaB', + instPrice = 'instPrice', + lastUpdateBlockNumber = 'lastUpdateBlockNumber', + lastUpdateTimestamp = 'lastUpdateTimestamp', + liquidityUSD = 'liquidityUSD', + pool = 'pool', + pool__createdTimestamp = 'pool__createdTimestamp', + pool__crosses = 'pool__crosses', + pool__id = 'pool__id', + pool__lastCross = 'pool__lastCross', + pool__lastDailySnapshotDay = 'pool__lastDailySnapshotDay', + pool__lastHourlySnapshotSeason = 'pool__lastHourlySnapshotSeason', + pool__lastPrice = 'pool__lastPrice', + pool__lastUpdateBlockNumber = 'pool__lastUpdateBlockNumber', + pool__lastUpdateTimestamp = 'pool__lastUpdateTimestamp', + pool__liquidityUSD = 'pool__liquidityUSD', + pool__volume = 'pool__volume', + pool__volumeUSD = 'pool__volumeUSD', + reserves = 'reserves', + season = 'season', + season__id = 'season__id', + season__season = 'season__season', + season__timestamp = 'season__timestamp', + twaBeanLiquidityUSD = 'twaBeanLiquidityUSD', + twaDeltaB = 'twaDeltaB', + twaLiquidityUSD = 'twaLiquidityUSD', + twaNonBeanLiquidityUSD = 'twaNonBeanLiquidityUSD', + twaPrice = 'twaPrice', + twaReserves = 'twaReserves', + twaToken2Price = 'twaToken2Price', + volume = 'volume', + volumeUSD = 'volumeUSD' } export type PoolHourlySnapshot = { @@ -2494,16 +2488,16 @@ export type PoolHourlySnapshot = { export type PoolHourlySnapshotCrossEventsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; -export type PoolHourlySnapshot_Filter = { +export type PoolHourlySnapshotFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; createdTimestamp?: InputMaybe; createdTimestamp_gt?: InputMaybe; createdTimestamp_gte?: InputMaybe; @@ -2512,7 +2506,7 @@ export type PoolHourlySnapshot_Filter = { createdTimestamp_lte?: InputMaybe; createdTimestamp_not?: InputMaybe; createdTimestamp_not_in?: InputMaybe>; - crossEvents_?: InputMaybe; + crossEvents_?: InputMaybe; crosses?: InputMaybe; crosses_gt?: InputMaybe; crosses_gte?: InputMaybe; @@ -2607,9 +2601,9 @@ export type PoolHourlySnapshot_Filter = { liquidityUSD_lte?: InputMaybe; liquidityUSD_not?: InputMaybe; liquidityUSD_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; pool?: InputMaybe; - pool_?: InputMaybe; + pool_?: InputMaybe; pool_contains?: InputMaybe; pool_contains_nocase?: InputMaybe; pool_ends_with?: InputMaybe; @@ -2644,7 +2638,7 @@ export type PoolHourlySnapshot_Filter = { seasonNumber_lte?: InputMaybe; seasonNumber_not?: InputMaybe; seasonNumber_not_in?: InputMaybe>; - season_?: InputMaybe; + season_?: InputMaybe; season_contains?: InputMaybe; season_contains_nocase?: InputMaybe; season_ends_with?: InputMaybe; @@ -2736,57 +2730,57 @@ export type PoolHourlySnapshot_Filter = { volume_not_in?: InputMaybe>; }; -export enum PoolHourlySnapshot_OrderBy { - CreatedTimestamp = 'createdTimestamp', - CrossEvents = 'crossEvents', - Crosses = 'crosses', - DeltaCrosses = 'deltaCrosses', - DeltaLiquidityUsd = 'deltaLiquidityUSD', - DeltaReserves = 'deltaReserves', - DeltaVolume = 'deltaVolume', - DeltaVolumeUsd = 'deltaVolumeUSD', - Id = 'id', - InstDeltaB = 'instDeltaB', - InstPrice = 'instPrice', - LastUpdateBlockNumber = 'lastUpdateBlockNumber', - LastUpdateTimestamp = 'lastUpdateTimestamp', - LiquidityUsd = 'liquidityUSD', - Pool = 'pool', - PoolCreatedTimestamp = 'pool__createdTimestamp', - PoolCrosses = 'pool__crosses', - PoolId = 'pool__id', - PoolLastCross = 'pool__lastCross', - PoolLastDailySnapshotDay = 'pool__lastDailySnapshotDay', - PoolLastHourlySnapshotSeason = 'pool__lastHourlySnapshotSeason', - PoolLastPrice = 'pool__lastPrice', - PoolLastUpdateBlockNumber = 'pool__lastUpdateBlockNumber', - PoolLastUpdateTimestamp = 'pool__lastUpdateTimestamp', - PoolLiquidityUsd = 'pool__liquidityUSD', - PoolVolume = 'pool__volume', - PoolVolumeUsd = 'pool__volumeUSD', - Reserves = 'reserves', - Season = 'season', - SeasonNumber = 'seasonNumber', - SeasonId = 'season__id', - SeasonSeason = 'season__season', - SeasonTimestamp = 'season__timestamp', - TwaBeanLiquidityUsd = 'twaBeanLiquidityUSD', - TwaDeltaB = 'twaDeltaB', - TwaLiquidityUsd = 'twaLiquidityUSD', - TwaNonBeanLiquidityUsd = 'twaNonBeanLiquidityUSD', - TwaPrice = 'twaPrice', - TwaReserves = 'twaReserves', - TwaToken2Price = 'twaToken2Price', - Volume = 'volume', - VolumeUsd = 'volumeUSD' +export enum PoolHourlySnapshotOrderBy { + createdTimestamp = 'createdTimestamp', + crossEvents = 'crossEvents', + crosses = 'crosses', + deltaCrosses = 'deltaCrosses', + deltaLiquidityUSD = 'deltaLiquidityUSD', + deltaReserves = 'deltaReserves', + deltaVolume = 'deltaVolume', + deltaVolumeUSD = 'deltaVolumeUSD', + id = 'id', + instDeltaB = 'instDeltaB', + instPrice = 'instPrice', + lastUpdateBlockNumber = 'lastUpdateBlockNumber', + lastUpdateTimestamp = 'lastUpdateTimestamp', + liquidityUSD = 'liquidityUSD', + pool = 'pool', + pool__createdTimestamp = 'pool__createdTimestamp', + pool__crosses = 'pool__crosses', + pool__id = 'pool__id', + pool__lastCross = 'pool__lastCross', + pool__lastDailySnapshotDay = 'pool__lastDailySnapshotDay', + pool__lastHourlySnapshotSeason = 'pool__lastHourlySnapshotSeason', + pool__lastPrice = 'pool__lastPrice', + pool__lastUpdateBlockNumber = 'pool__lastUpdateBlockNumber', + pool__lastUpdateTimestamp = 'pool__lastUpdateTimestamp', + pool__liquidityUSD = 'pool__liquidityUSD', + pool__volume = 'pool__volume', + pool__volumeUSD = 'pool__volumeUSD', + reserves = 'reserves', + season = 'season', + seasonNumber = 'seasonNumber', + season__id = 'season__id', + season__season = 'season__season', + season__timestamp = 'season__timestamp', + twaBeanLiquidityUSD = 'twaBeanLiquidityUSD', + twaDeltaB = 'twaDeltaB', + twaLiquidityUSD = 'twaLiquidityUSD', + twaNonBeanLiquidityUSD = 'twaNonBeanLiquidityUSD', + twaPrice = 'twaPrice', + twaReserves = 'twaReserves', + twaToken2Price = 'twaToken2Price', + volume = 'volume', + volumeUSD = 'volumeUSD' } -export type Pool_Filter = { +export type PoolFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; bean?: InputMaybe; - bean_?: InputMaybe; + bean_?: InputMaybe; bean_contains?: InputMaybe; bean_contains_nocase?: InputMaybe; bean_ends_with?: InputMaybe; @@ -2814,7 +2808,7 @@ export type Pool_Filter = { createdTimestamp_lte?: InputMaybe; createdTimestamp_not?: InputMaybe; createdTimestamp_not_in?: InputMaybe>; - crossEvents_?: InputMaybe; + crossEvents_?: InputMaybe; crosses?: InputMaybe; crosses_gt?: InputMaybe; crosses_gte?: InputMaybe; @@ -2824,7 +2818,7 @@ export type Pool_Filter = { crosses_not?: InputMaybe; crosses_not_in?: InputMaybe>; currentSeason?: InputMaybe; - currentSeason_?: InputMaybe; + currentSeason_?: InputMaybe; currentSeason_contains?: InputMaybe; currentSeason_contains_nocase?: InputMaybe; currentSeason_ends_with?: InputMaybe; @@ -2844,8 +2838,8 @@ export type Pool_Filter = { currentSeason_not_starts_with_nocase?: InputMaybe; currentSeason_starts_with?: InputMaybe; currentSeason_starts_with_nocase?: InputMaybe; - dailySnapshots_?: InputMaybe; - hourlySnapshots_?: InputMaybe; + dailySnapshots_?: InputMaybe; + hourlySnapshots_?: InputMaybe; id?: InputMaybe; id_contains?: InputMaybe; id_gt?: InputMaybe; @@ -2912,7 +2906,7 @@ export type Pool_Filter = { liquidityUSD_lte?: InputMaybe; liquidityUSD_not?: InputMaybe; liquidityUSD_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; reserves?: InputMaybe>; reserves_contains?: InputMaybe>; reserves_contains_nocase?: InputMaybe>; @@ -2920,7 +2914,7 @@ export type Pool_Filter = { reserves_not_contains?: InputMaybe>; reserves_not_contains_nocase?: InputMaybe>; tokens?: InputMaybe>; - tokens_?: InputMaybe; + tokens_?: InputMaybe; tokens_contains?: InputMaybe>; tokens_contains_nocase?: InputMaybe>; tokens_not?: InputMaybe>; @@ -2944,50 +2938,50 @@ export type Pool_Filter = { volume_not_in?: InputMaybe>; }; -export enum Pool_OrderBy { - Bean = 'bean', - BeanCreatedTimestamp = 'bean__createdTimestamp', - BeanCrosses = 'bean__crosses', - BeanId = 'bean__id', - BeanLastCross = 'bean__lastCross', - BeanLastDailySnapshotDay = 'bean__lastDailySnapshotDay', - BeanLastHourlySnapshotSeason = 'bean__lastHourlySnapshotSeason', - BeanLastPrice = 'bean__lastPrice', - BeanLastUpdateBlockNumber = 'bean__lastUpdateBlockNumber', - BeanLastUpdateTimestamp = 'bean__lastUpdateTimestamp', - BeanLiquidityUsd = 'bean__liquidityUSD', - BeanLockedBeans = 'bean__lockedBeans', - BeanSupply = 'bean__supply', - BeanSupplyInPegLp = 'bean__supplyInPegLP', - BeanVolume = 'bean__volume', - BeanVolumeUsd = 'bean__volumeUSD', - CreatedTimestamp = 'createdTimestamp', - CrossEvents = 'crossEvents', - Crosses = 'crosses', - CurrentSeason = 'currentSeason', - CurrentSeasonId = 'currentSeason__id', - CurrentSeasonSeason = 'currentSeason__season', - CurrentSeasonTimestamp = 'currentSeason__timestamp', - DailySnapshots = 'dailySnapshots', - HourlySnapshots = 'hourlySnapshots', - Id = 'id', - LastCross = 'lastCross', - LastDailySnapshotDay = 'lastDailySnapshotDay', - LastHourlySnapshotSeason = 'lastHourlySnapshotSeason', - LastPrice = 'lastPrice', - LastUpdateBlockNumber = 'lastUpdateBlockNumber', - LastUpdateTimestamp = 'lastUpdateTimestamp', - LiquidityUsd = 'liquidityUSD', - Reserves = 'reserves', - Tokens = 'tokens', - Volume = 'volume', - VolumeUsd = 'volumeUSD' +export enum PoolOrderBy { + bean = 'bean', + bean__createdTimestamp = 'bean__createdTimestamp', + bean__crosses = 'bean__crosses', + bean__id = 'bean__id', + bean__lastCross = 'bean__lastCross', + bean__lastDailySnapshotDay = 'bean__lastDailySnapshotDay', + bean__lastHourlySnapshotSeason = 'bean__lastHourlySnapshotSeason', + bean__lastPrice = 'bean__lastPrice', + bean__lastUpdateBlockNumber = 'bean__lastUpdateBlockNumber', + bean__lastUpdateTimestamp = 'bean__lastUpdateTimestamp', + bean__liquidityUSD = 'bean__liquidityUSD', + bean__lockedBeans = 'bean__lockedBeans', + bean__supply = 'bean__supply', + bean__supplyInPegLP = 'bean__supplyInPegLP', + bean__volume = 'bean__volume', + bean__volumeUSD = 'bean__volumeUSD', + createdTimestamp = 'createdTimestamp', + crossEvents = 'crossEvents', + crosses = 'crosses', + currentSeason = 'currentSeason', + currentSeason__id = 'currentSeason__id', + currentSeason__season = 'currentSeason__season', + currentSeason__timestamp = 'currentSeason__timestamp', + dailySnapshots = 'dailySnapshots', + hourlySnapshots = 'hourlySnapshots', + id = 'id', + lastCross = 'lastCross', + lastDailySnapshotDay = 'lastDailySnapshotDay', + lastHourlySnapshotSeason = 'lastHourlySnapshotSeason', + lastPrice = 'lastPrice', + lastUpdateBlockNumber = 'lastUpdateBlockNumber', + lastUpdateTimestamp = 'lastUpdateTimestamp', + liquidityUSD = 'liquidityUSD', + reserves = 'reserves', + tokens = 'tokens', + volume = 'volume', + volumeUSD = 'volumeUSD' } export type Query = { __typename?: 'Query'; /** Access to subgraph metadata */ - _meta?: Maybe<_Meta_>; + _meta?: Maybe; bean?: Maybe; beanCross?: Maybe; beanCrosses: Array; @@ -3025,314 +3019,314 @@ export type Query = { }; -export type Query_MetaArgs = { - block?: InputMaybe; +export type QueryMetaArgs = { + block?: InputMaybe; }; export type QueryBeanArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryBeanCrossArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryBeanCrossesArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryBeanDailySnapshotArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryBeanDailySnapshotsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryBeanHourlySnapshotArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryBeanHourlySnapshotsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryBeansArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryFarmerBalanceArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryFarmerBalanceDailySnapshotArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryFarmerBalanceDailySnapshotsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryFarmerBalanceHourlySnapshotArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryFarmerBalanceHourlySnapshotsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryFarmerBalancesArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryPoolArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryPoolCrossArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryPoolCrossesArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryPoolDailySnapshotArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryPoolDailySnapshotsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryPoolHourlySnapshotArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryPoolHourlySnapshotsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryPoolsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QuerySeasonArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QuerySeasonsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryTokenArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryTokenDailySnapshotArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryTokenDailySnapshotsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryTokenHourlySnapshotArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryTokenHourlySnapshotsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryTokensArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryTwaOracleArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryTwaOraclesArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryVersionArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryVersionsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type Season = { @@ -3352,27 +3346,27 @@ export type Season = { export type SeasonPoolDailySnapshotsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type SeasonPoolHourlySnapshotsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; -export type Season_Filter = { +export type SeasonFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; - beanDailySnapshot_?: InputMaybe; - beanHourlySnapshot_?: InputMaybe; + and?: InputMaybe>>; + beanDailySnapshot_?: InputMaybe; + beanHourlySnapshot_?: InputMaybe; id?: InputMaybe; id_gt?: InputMaybe; id_gte?: InputMaybe; @@ -3381,9 +3375,9 @@ export type Season_Filter = { id_lte?: InputMaybe; id_not?: InputMaybe; id_not_in?: InputMaybe>; - or?: InputMaybe>>; - poolDailySnapshots_?: InputMaybe; - poolHourlySnapshots_?: InputMaybe; + or?: InputMaybe>>; + poolDailySnapshots_?: InputMaybe; + poolHourlySnapshots_?: InputMaybe; season?: InputMaybe; season_gt?: InputMaybe; season_gte?: InputMaybe; @@ -3402,417 +3396,66 @@ export type Season_Filter = { timestamp_not_in?: InputMaybe>; }; -export enum Season_OrderBy { - BeanDailySnapshot = 'beanDailySnapshot', - BeanDailySnapshotCreatedTimestamp = 'beanDailySnapshot__createdTimestamp', - BeanDailySnapshotCrosses = 'beanDailySnapshot__crosses', - BeanDailySnapshotDay = 'beanDailySnapshot__day', - BeanDailySnapshotDeltaCrosses = 'beanDailySnapshot__deltaCrosses', - BeanDailySnapshotDeltaLiquidityUsd = 'beanDailySnapshot__deltaLiquidityUSD', - BeanDailySnapshotDeltaVolume = 'beanDailySnapshot__deltaVolume', - BeanDailySnapshotDeltaVolumeUsd = 'beanDailySnapshot__deltaVolumeUSD', - BeanDailySnapshotId = 'beanDailySnapshot__id', - BeanDailySnapshotInstDeltaB = 'beanDailySnapshot__instDeltaB', - BeanDailySnapshotInstPrice = 'beanDailySnapshot__instPrice', - BeanDailySnapshotL2sr = 'beanDailySnapshot__l2sr', - BeanDailySnapshotLastUpdateBlockNumber = 'beanDailySnapshot__lastUpdateBlockNumber', - BeanDailySnapshotLastUpdateTimestamp = 'beanDailySnapshot__lastUpdateTimestamp', - BeanDailySnapshotLiquidityUsd = 'beanDailySnapshot__liquidityUSD', - BeanDailySnapshotLockedBeans = 'beanDailySnapshot__lockedBeans', - BeanDailySnapshotMarketCap = 'beanDailySnapshot__marketCap', - BeanDailySnapshotSupply = 'beanDailySnapshot__supply', - BeanDailySnapshotSupplyInPegLp = 'beanDailySnapshot__supplyInPegLP', - BeanDailySnapshotTwaBeanLiquidityUsd = 'beanDailySnapshot__twaBeanLiquidityUSD', - BeanDailySnapshotTwaDeltaB = 'beanDailySnapshot__twaDeltaB', - BeanDailySnapshotTwaLiquidityUsd = 'beanDailySnapshot__twaLiquidityUSD', - BeanDailySnapshotTwaNonBeanLiquidityUsd = 'beanDailySnapshot__twaNonBeanLiquidityUSD', - BeanDailySnapshotTwaPrice = 'beanDailySnapshot__twaPrice', - BeanDailySnapshotVolume = 'beanDailySnapshot__volume', - BeanDailySnapshotVolumeUsd = 'beanDailySnapshot__volumeUSD', - BeanHourlySnapshot = 'beanHourlySnapshot', - BeanHourlySnapshotCreatedTimestamp = 'beanHourlySnapshot__createdTimestamp', - BeanHourlySnapshotCrosses = 'beanHourlySnapshot__crosses', - BeanHourlySnapshotDeltaCrosses = 'beanHourlySnapshot__deltaCrosses', - BeanHourlySnapshotDeltaLiquidityUsd = 'beanHourlySnapshot__deltaLiquidityUSD', - BeanHourlySnapshotDeltaVolume = 'beanHourlySnapshot__deltaVolume', - BeanHourlySnapshotDeltaVolumeUsd = 'beanHourlySnapshot__deltaVolumeUSD', - BeanHourlySnapshotId = 'beanHourlySnapshot__id', - BeanHourlySnapshotInstDeltaB = 'beanHourlySnapshot__instDeltaB', - BeanHourlySnapshotInstPrice = 'beanHourlySnapshot__instPrice', - BeanHourlySnapshotL2sr = 'beanHourlySnapshot__l2sr', - BeanHourlySnapshotLastUpdateBlockNumber = 'beanHourlySnapshot__lastUpdateBlockNumber', - BeanHourlySnapshotLastUpdateTimestamp = 'beanHourlySnapshot__lastUpdateTimestamp', - BeanHourlySnapshotLiquidityUsd = 'beanHourlySnapshot__liquidityUSD', - BeanHourlySnapshotLockedBeans = 'beanHourlySnapshot__lockedBeans', - BeanHourlySnapshotMarketCap = 'beanHourlySnapshot__marketCap', - BeanHourlySnapshotSeasonNumber = 'beanHourlySnapshot__seasonNumber', - BeanHourlySnapshotSupply = 'beanHourlySnapshot__supply', - BeanHourlySnapshotSupplyInPegLp = 'beanHourlySnapshot__supplyInPegLP', - BeanHourlySnapshotTwaBeanLiquidityUsd = 'beanHourlySnapshot__twaBeanLiquidityUSD', - BeanHourlySnapshotTwaDeltaB = 'beanHourlySnapshot__twaDeltaB', - BeanHourlySnapshotTwaLiquidityUsd = 'beanHourlySnapshot__twaLiquidityUSD', - BeanHourlySnapshotTwaNonBeanLiquidityUsd = 'beanHourlySnapshot__twaNonBeanLiquidityUSD', - BeanHourlySnapshotTwaPrice = 'beanHourlySnapshot__twaPrice', - BeanHourlySnapshotVolume = 'beanHourlySnapshot__volume', - BeanHourlySnapshotVolumeUsd = 'beanHourlySnapshot__volumeUSD', - Id = 'id', - PoolDailySnapshots = 'poolDailySnapshots', - PoolHourlySnapshots = 'poolHourlySnapshots', - Season = 'season', - Timestamp = 'timestamp' +export enum SeasonOrderBy { + beanDailySnapshot = 'beanDailySnapshot', + beanDailySnapshot__createdTimestamp = 'beanDailySnapshot__createdTimestamp', + beanDailySnapshot__crosses = 'beanDailySnapshot__crosses', + beanDailySnapshot__day = 'beanDailySnapshot__day', + beanDailySnapshot__deltaCrosses = 'beanDailySnapshot__deltaCrosses', + beanDailySnapshot__deltaLiquidityUSD = 'beanDailySnapshot__deltaLiquidityUSD', + beanDailySnapshot__deltaVolume = 'beanDailySnapshot__deltaVolume', + beanDailySnapshot__deltaVolumeUSD = 'beanDailySnapshot__deltaVolumeUSD', + beanDailySnapshot__id = 'beanDailySnapshot__id', + beanDailySnapshot__instDeltaB = 'beanDailySnapshot__instDeltaB', + beanDailySnapshot__instPrice = 'beanDailySnapshot__instPrice', + beanDailySnapshot__l2sr = 'beanDailySnapshot__l2sr', + beanDailySnapshot__lastUpdateBlockNumber = 'beanDailySnapshot__lastUpdateBlockNumber', + beanDailySnapshot__lastUpdateTimestamp = 'beanDailySnapshot__lastUpdateTimestamp', + beanDailySnapshot__liquidityUSD = 'beanDailySnapshot__liquidityUSD', + beanDailySnapshot__lockedBeans = 'beanDailySnapshot__lockedBeans', + beanDailySnapshot__marketCap = 'beanDailySnapshot__marketCap', + beanDailySnapshot__supply = 'beanDailySnapshot__supply', + beanDailySnapshot__supplyInPegLP = 'beanDailySnapshot__supplyInPegLP', + beanDailySnapshot__twaBeanLiquidityUSD = 'beanDailySnapshot__twaBeanLiquidityUSD', + beanDailySnapshot__twaDeltaB = 'beanDailySnapshot__twaDeltaB', + beanDailySnapshot__twaLiquidityUSD = 'beanDailySnapshot__twaLiquidityUSD', + beanDailySnapshot__twaNonBeanLiquidityUSD = 'beanDailySnapshot__twaNonBeanLiquidityUSD', + beanDailySnapshot__twaPrice = 'beanDailySnapshot__twaPrice', + beanDailySnapshot__volume = 'beanDailySnapshot__volume', + beanDailySnapshot__volumeUSD = 'beanDailySnapshot__volumeUSD', + beanHourlySnapshot = 'beanHourlySnapshot', + beanHourlySnapshot__createdTimestamp = 'beanHourlySnapshot__createdTimestamp', + beanHourlySnapshot__crosses = 'beanHourlySnapshot__crosses', + beanHourlySnapshot__deltaCrosses = 'beanHourlySnapshot__deltaCrosses', + beanHourlySnapshot__deltaLiquidityUSD = 'beanHourlySnapshot__deltaLiquidityUSD', + beanHourlySnapshot__deltaVolume = 'beanHourlySnapshot__deltaVolume', + beanHourlySnapshot__deltaVolumeUSD = 'beanHourlySnapshot__deltaVolumeUSD', + beanHourlySnapshot__id = 'beanHourlySnapshot__id', + beanHourlySnapshot__instDeltaB = 'beanHourlySnapshot__instDeltaB', + beanHourlySnapshot__instPrice = 'beanHourlySnapshot__instPrice', + beanHourlySnapshot__l2sr = 'beanHourlySnapshot__l2sr', + beanHourlySnapshot__lastUpdateBlockNumber = 'beanHourlySnapshot__lastUpdateBlockNumber', + beanHourlySnapshot__lastUpdateTimestamp = 'beanHourlySnapshot__lastUpdateTimestamp', + beanHourlySnapshot__liquidityUSD = 'beanHourlySnapshot__liquidityUSD', + beanHourlySnapshot__lockedBeans = 'beanHourlySnapshot__lockedBeans', + beanHourlySnapshot__marketCap = 'beanHourlySnapshot__marketCap', + beanHourlySnapshot__seasonNumber = 'beanHourlySnapshot__seasonNumber', + beanHourlySnapshot__supply = 'beanHourlySnapshot__supply', + beanHourlySnapshot__supplyInPegLP = 'beanHourlySnapshot__supplyInPegLP', + beanHourlySnapshot__twaBeanLiquidityUSD = 'beanHourlySnapshot__twaBeanLiquidityUSD', + beanHourlySnapshot__twaDeltaB = 'beanHourlySnapshot__twaDeltaB', + beanHourlySnapshot__twaLiquidityUSD = 'beanHourlySnapshot__twaLiquidityUSD', + beanHourlySnapshot__twaNonBeanLiquidityUSD = 'beanHourlySnapshot__twaNonBeanLiquidityUSD', + beanHourlySnapshot__twaPrice = 'beanHourlySnapshot__twaPrice', + beanHourlySnapshot__volume = 'beanHourlySnapshot__volume', + beanHourlySnapshot__volumeUSD = 'beanHourlySnapshot__volumeUSD', + id = 'id', + poolDailySnapshots = 'poolDailySnapshots', + poolHourlySnapshots = 'poolHourlySnapshots', + season = 'season', + timestamp = 'timestamp' } -export type Subscription = { - __typename?: 'Subscription'; - /** Access to subgraph metadata */ - _meta?: Maybe<_Meta_>; - bean?: Maybe; - beanCross?: Maybe; - beanCrosses: Array; - beanDailySnapshot?: Maybe; - beanDailySnapshots: Array; - beanHourlySnapshot?: Maybe; - beanHourlySnapshots: Array; - beans: Array; - farmerBalance?: Maybe; - farmerBalanceDailySnapshot?: Maybe; - farmerBalanceDailySnapshots: Array; - farmerBalanceHourlySnapshot?: Maybe; - farmerBalanceHourlySnapshots: Array; - farmerBalances: Array; - pool?: Maybe; - poolCross?: Maybe; - poolCrosses: Array; - poolDailySnapshot?: Maybe; - poolDailySnapshots: Array; - poolHourlySnapshot?: Maybe; - poolHourlySnapshots: Array; - pools: Array; - season?: Maybe; - seasons: Array; - token?: Maybe; - tokenDailySnapshot?: Maybe; - tokenDailySnapshots: Array; - tokenHourlySnapshot?: Maybe; - tokenHourlySnapshots: Array; - tokens: Array; - twaOracle?: Maybe; - twaOracles: Array; - version?: Maybe; - versions: Array; -}; - - -export type Subscription_MetaArgs = { - block?: InputMaybe; -}; - - -export type SubscriptionBeanArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionBeanCrossArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionBeanCrossesArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionBeanDailySnapshotArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionBeanDailySnapshotsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionBeanHourlySnapshotArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionBeanHourlySnapshotsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionBeansArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionFarmerBalanceArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionFarmerBalanceDailySnapshotArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionFarmerBalanceDailySnapshotsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionFarmerBalanceHourlySnapshotArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionFarmerBalanceHourlySnapshotsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionFarmerBalancesArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionPoolArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionPoolCrossArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionPoolCrossesArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionPoolDailySnapshotArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionPoolDailySnapshotsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionPoolHourlySnapshotArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionPoolHourlySnapshotsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionPoolsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionSeasonArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionSeasonsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionTokenArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionTokenDailySnapshotArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionTokenDailySnapshotsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionTokenHourlySnapshotArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionTokenHourlySnapshotsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionTokensArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionTwaOracleArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionTwaOraclesArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionVersionArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionVersionsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - export type Token = { __typename?: 'Token'; dailySnapshots: Array; @@ -3842,19 +3485,19 @@ export type Token = { export type TokenDailySnapshotsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type TokenHourlySnapshotsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type TokenDailySnapshot = { @@ -3897,10 +3540,10 @@ export type TokenDailySnapshot = { walletBalance: Scalars['BigInt']['output']; }; -export type TokenDailySnapshot_Filter = { +export type TokenDailySnapshotFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; createdTimestamp?: InputMaybe; createdTimestamp_gt?: InputMaybe; createdTimestamp_gte?: InputMaybe; @@ -4025,7 +3668,7 @@ export type TokenDailySnapshot_Filter = { name_not_starts_with_nocase?: InputMaybe; name_starts_with?: InputMaybe; name_starts_with_nocase?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe>>; pooledBalance?: InputMaybe; pooledBalance_gt?: InputMaybe; pooledBalance_gte?: InputMaybe; @@ -4035,7 +3678,7 @@ export type TokenDailySnapshot_Filter = { pooledBalance_not?: InputMaybe; pooledBalance_not_in?: InputMaybe>; season?: InputMaybe; - season_?: InputMaybe; + season_?: InputMaybe; season_contains?: InputMaybe; season_contains_nocase?: InputMaybe; season_ends_with?: InputMaybe; @@ -4064,7 +3707,7 @@ export type TokenDailySnapshot_Filter = { supply_not?: InputMaybe; supply_not_in?: InputMaybe>; token?: InputMaybe; - token_?: InputMaybe; + token_?: InputMaybe; token_contains?: InputMaybe; token_contains_nocase?: InputMaybe; token_ends_with?: InputMaybe; @@ -4094,39 +3737,39 @@ export type TokenDailySnapshot_Filter = { walletBalance_not_in?: InputMaybe>; }; -export enum TokenDailySnapshot_OrderBy { - CreatedTimestamp = 'createdTimestamp', - Day = 'day', - Decimals = 'decimals', - DeltaFarmBalance = 'deltaFarmBalance', - DeltaLastPriceUsd = 'deltaLastPriceUSD', - DeltaPooledBalance = 'deltaPooledBalance', - DeltaSupply = 'deltaSupply', - DeltaWalletBalance = 'deltaWalletBalance', - FarmBalance = 'farmBalance', - Id = 'id', - LastPriceUsd = 'lastPriceUSD', - LastUpdateBlockNumber = 'lastUpdateBlockNumber', - LastUpdateTimestamp = 'lastUpdateTimestamp', - Name = 'name', - PooledBalance = 'pooledBalance', - Season = 'season', - SeasonId = 'season__id', - SeasonSeason = 'season__season', - SeasonTimestamp = 'season__timestamp', - Supply = 'supply', - Token = 'token', - TokenDecimals = 'token__decimals', - TokenFarmBalance = 'token__farmBalance', - TokenId = 'token__id', - TokenLastDailySnapshotDay = 'token__lastDailySnapshotDay', - TokenLastHourlySnapshotSeason = 'token__lastHourlySnapshotSeason', - TokenLastPriceUsd = 'token__lastPriceUSD', - TokenName = 'token__name', - TokenPooledBalance = 'token__pooledBalance', - TokenSupply = 'token__supply', - TokenWalletBalance = 'token__walletBalance', - WalletBalance = 'walletBalance' +export enum TokenDailySnapshotOrderBy { + createdTimestamp = 'createdTimestamp', + day = 'day', + decimals = 'decimals', + deltaFarmBalance = 'deltaFarmBalance', + deltaLastPriceUSD = 'deltaLastPriceUSD', + deltaPooledBalance = 'deltaPooledBalance', + deltaSupply = 'deltaSupply', + deltaWalletBalance = 'deltaWalletBalance', + farmBalance = 'farmBalance', + id = 'id', + lastPriceUSD = 'lastPriceUSD', + lastUpdateBlockNumber = 'lastUpdateBlockNumber', + lastUpdateTimestamp = 'lastUpdateTimestamp', + name = 'name', + pooledBalance = 'pooledBalance', + season = 'season', + season__id = 'season__id', + season__season = 'season__season', + season__timestamp = 'season__timestamp', + supply = 'supply', + token = 'token', + token__decimals = 'token__decimals', + token__farmBalance = 'token__farmBalance', + token__id = 'token__id', + token__lastDailySnapshotDay = 'token__lastDailySnapshotDay', + token__lastHourlySnapshotSeason = 'token__lastHourlySnapshotSeason', + token__lastPriceUSD = 'token__lastPriceUSD', + token__name = 'token__name', + token__pooledBalance = 'token__pooledBalance', + token__supply = 'token__supply', + token__walletBalance = 'token__walletBalance', + walletBalance = 'walletBalance' } export type TokenHourlySnapshot = { @@ -4168,10 +3811,10 @@ export type TokenHourlySnapshot = { walletBalance: Scalars['BigInt']['output']; }; -export type TokenHourlySnapshot_Filter = { +export type TokenHourlySnapshotFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; createdTimestamp?: InputMaybe; createdTimestamp_gt?: InputMaybe; createdTimestamp_gte?: InputMaybe; @@ -4288,7 +3931,7 @@ export type TokenHourlySnapshot_Filter = { name_not_starts_with_nocase?: InputMaybe; name_starts_with?: InputMaybe; name_starts_with_nocase?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe>>; pooledBalance?: InputMaybe; pooledBalance_gt?: InputMaybe; pooledBalance_gte?: InputMaybe; @@ -4306,7 +3949,7 @@ export type TokenHourlySnapshot_Filter = { seasonNumber_lte?: InputMaybe; seasonNumber_not?: InputMaybe; seasonNumber_not_in?: InputMaybe>; - season_?: InputMaybe; + season_?: InputMaybe; season_contains?: InputMaybe; season_contains_nocase?: InputMaybe; season_ends_with?: InputMaybe; @@ -4335,7 +3978,7 @@ export type TokenHourlySnapshot_Filter = { supply_not?: InputMaybe; supply_not_in?: InputMaybe>; token?: InputMaybe; - token_?: InputMaybe; + token_?: InputMaybe; token_contains?: InputMaybe; token_contains_nocase?: InputMaybe; token_ends_with?: InputMaybe; @@ -4365,46 +4008,46 @@ export type TokenHourlySnapshot_Filter = { walletBalance_not_in?: InputMaybe>; }; -export enum TokenHourlySnapshot_OrderBy { - CreatedTimestamp = 'createdTimestamp', - Decimals = 'decimals', - DeltaFarmBalance = 'deltaFarmBalance', - DeltaLastPriceUsd = 'deltaLastPriceUSD', - DeltaPooledBalance = 'deltaPooledBalance', - DeltaSupply = 'deltaSupply', - DeltaWalletBalance = 'deltaWalletBalance', - FarmBalance = 'farmBalance', - Id = 'id', - LastPriceUsd = 'lastPriceUSD', - LastUpdateBlockNumber = 'lastUpdateBlockNumber', - LastUpdateTimestamp = 'lastUpdateTimestamp', - Name = 'name', - PooledBalance = 'pooledBalance', - Season = 'season', - SeasonNumber = 'seasonNumber', - SeasonId = 'season__id', - SeasonSeason = 'season__season', - SeasonTimestamp = 'season__timestamp', - Supply = 'supply', - Token = 'token', - TokenDecimals = 'token__decimals', - TokenFarmBalance = 'token__farmBalance', - TokenId = 'token__id', - TokenLastDailySnapshotDay = 'token__lastDailySnapshotDay', - TokenLastHourlySnapshotSeason = 'token__lastHourlySnapshotSeason', - TokenLastPriceUsd = 'token__lastPriceUSD', - TokenName = 'token__name', - TokenPooledBalance = 'token__pooledBalance', - TokenSupply = 'token__supply', - TokenWalletBalance = 'token__walletBalance', - WalletBalance = 'walletBalance' +export enum TokenHourlySnapshotOrderBy { + createdTimestamp = 'createdTimestamp', + decimals = 'decimals', + deltaFarmBalance = 'deltaFarmBalance', + deltaLastPriceUSD = 'deltaLastPriceUSD', + deltaPooledBalance = 'deltaPooledBalance', + deltaSupply = 'deltaSupply', + deltaWalletBalance = 'deltaWalletBalance', + farmBalance = 'farmBalance', + id = 'id', + lastPriceUSD = 'lastPriceUSD', + lastUpdateBlockNumber = 'lastUpdateBlockNumber', + lastUpdateTimestamp = 'lastUpdateTimestamp', + name = 'name', + pooledBalance = 'pooledBalance', + season = 'season', + seasonNumber = 'seasonNumber', + season__id = 'season__id', + season__season = 'season__season', + season__timestamp = 'season__timestamp', + supply = 'supply', + token = 'token', + token__decimals = 'token__decimals', + token__farmBalance = 'token__farmBalance', + token__id = 'token__id', + token__lastDailySnapshotDay = 'token__lastDailySnapshotDay', + token__lastHourlySnapshotSeason = 'token__lastHourlySnapshotSeason', + token__lastPriceUSD = 'token__lastPriceUSD', + token__name = 'token__name', + token__pooledBalance = 'token__pooledBalance', + token__supply = 'token__supply', + token__walletBalance = 'token__walletBalance', + walletBalance = 'walletBalance' } -export type Token_Filter = { +export type TokenFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; - dailySnapshots_?: InputMaybe; + and?: InputMaybe>>; + dailySnapshots_?: InputMaybe; decimals?: InputMaybe; decimals_gt?: InputMaybe; decimals_gte?: InputMaybe; @@ -4421,7 +4064,7 @@ export type Token_Filter = { farmBalance_lte?: InputMaybe; farmBalance_not?: InputMaybe; farmBalance_not_in?: InputMaybe>; - hourlySnapshots_?: InputMaybe; + hourlySnapshots_?: InputMaybe; id?: InputMaybe; id_contains?: InputMaybe; id_gt?: InputMaybe; @@ -4476,7 +4119,7 @@ export type Token_Filter = { name_not_starts_with_nocase?: InputMaybe; name_starts_with?: InputMaybe; name_starts_with_nocase?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe>>; pooledBalance?: InputMaybe; pooledBalance_gt?: InputMaybe; pooledBalance_gte?: InputMaybe; @@ -4503,19 +4146,19 @@ export type Token_Filter = { walletBalance_not_in?: InputMaybe>; }; -export enum Token_OrderBy { - DailySnapshots = 'dailySnapshots', - Decimals = 'decimals', - FarmBalance = 'farmBalance', - HourlySnapshots = 'hourlySnapshots', - Id = 'id', - LastDailySnapshotDay = 'lastDailySnapshotDay', - LastHourlySnapshotSeason = 'lastHourlySnapshotSeason', - LastPriceUsd = 'lastPriceUSD', - Name = 'name', - PooledBalance = 'pooledBalance', - Supply = 'supply', - WalletBalance = 'walletBalance' +export enum TokenOrderBy { + dailySnapshots = 'dailySnapshots', + decimals = 'decimals', + farmBalance = 'farmBalance', + hourlySnapshots = 'hourlySnapshots', + id = 'id', + lastDailySnapshotDay = 'lastDailySnapshotDay', + lastHourlySnapshotSeason = 'lastHourlySnapshotSeason', + lastPriceUSD = 'lastPriceUSD', + name = 'name', + pooledBalance = 'pooledBalance', + supply = 'supply', + walletBalance = 'walletBalance' } export type TwaOracle = { @@ -4536,10 +4179,10 @@ export type TwaOracle = { priceCumulativeSun: Array; }; -export type TwaOracle_Filter = { +export type TwaOracleFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; cumulativeWellReserves?: InputMaybe; cumulativeWellReservesBlock?: InputMaybe; cumulativeWellReservesBlock_gt?: InputMaybe; @@ -4624,9 +4267,9 @@ export type TwaOracle_Filter = { lastUpdated_lte?: InputMaybe; lastUpdated_not?: InputMaybe; lastUpdated_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; pool?: InputMaybe; - pool_?: InputMaybe; + pool_?: InputMaybe; pool_contains?: InputMaybe; pool_contains_nocase?: InputMaybe; pool_ends_with?: InputMaybe; @@ -4660,32 +4303,32 @@ export type TwaOracle_Filter = { priceCumulativeSun_not_contains_nocase?: InputMaybe>; }; -export enum TwaOracle_OrderBy { - CumulativeWellReserves = 'cumulativeWellReserves', - CumulativeWellReservesBlock = 'cumulativeWellReservesBlock', - CumulativeWellReservesPrev = 'cumulativeWellReservesPrev', - CumulativeWellReservesPrevBlock = 'cumulativeWellReservesPrevBlock', - CumulativeWellReservesPrevTime = 'cumulativeWellReservesPrevTime', - CumulativeWellReservesTime = 'cumulativeWellReservesTime', - Id = 'id', - LastBalances = 'lastBalances', - LastSun = 'lastSun', - LastUpdated = 'lastUpdated', - Pool = 'pool', - PoolCreatedTimestamp = 'pool__createdTimestamp', - PoolCrosses = 'pool__crosses', - PoolId = 'pool__id', - PoolLastCross = 'pool__lastCross', - PoolLastDailySnapshotDay = 'pool__lastDailySnapshotDay', - PoolLastHourlySnapshotSeason = 'pool__lastHourlySnapshotSeason', - PoolLastPrice = 'pool__lastPrice', - PoolLastUpdateBlockNumber = 'pool__lastUpdateBlockNumber', - PoolLastUpdateTimestamp = 'pool__lastUpdateTimestamp', - PoolLiquidityUsd = 'pool__liquidityUSD', - PoolVolume = 'pool__volume', - PoolVolumeUsd = 'pool__volumeUSD', - PriceCumulativeLast = 'priceCumulativeLast', - PriceCumulativeSun = 'priceCumulativeSun' +export enum TwaOracleOrderBy { + cumulativeWellReserves = 'cumulativeWellReserves', + cumulativeWellReservesBlock = 'cumulativeWellReservesBlock', + cumulativeWellReservesPrev = 'cumulativeWellReservesPrev', + cumulativeWellReservesPrevBlock = 'cumulativeWellReservesPrevBlock', + cumulativeWellReservesPrevTime = 'cumulativeWellReservesPrevTime', + cumulativeWellReservesTime = 'cumulativeWellReservesTime', + id = 'id', + lastBalances = 'lastBalances', + lastSun = 'lastSun', + lastUpdated = 'lastUpdated', + pool = 'pool', + pool__createdTimestamp = 'pool__createdTimestamp', + pool__crosses = 'pool__crosses', + pool__id = 'pool__id', + pool__lastCross = 'pool__lastCross', + pool__lastDailySnapshotDay = 'pool__lastDailySnapshotDay', + pool__lastHourlySnapshotSeason = 'pool__lastHourlySnapshotSeason', + pool__lastPrice = 'pool__lastPrice', + pool__lastUpdateBlockNumber = 'pool__lastUpdateBlockNumber', + pool__lastUpdateTimestamp = 'pool__lastUpdateTimestamp', + pool__liquidityUSD = 'pool__liquidityUSD', + pool__volume = 'pool__volume', + pool__volumeUSD = 'pool__volumeUSD', + priceCumulativeLast = 'priceCumulativeLast', + priceCumulativeSun = 'priceCumulativeSun' } export type Version = { @@ -4702,10 +4345,10 @@ export type Version = { versionNumber: Scalars['String']['output']; }; -export type Version_Filter = { +export type VersionFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; chain?: InputMaybe; chain_contains?: InputMaybe; chain_contains_nocase?: InputMaybe; @@ -4734,7 +4377,7 @@ export type Version_Filter = { id_lte?: InputMaybe; id_not?: InputMaybe; id_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; protocolAddress?: InputMaybe; protocolAddress_contains?: InputMaybe; protocolAddress_gt?: InputMaybe; @@ -4787,15 +4430,15 @@ export type Version_Filter = { versionNumber_starts_with_nocase?: InputMaybe; }; -export enum Version_OrderBy { - Chain = 'chain', - Id = 'id', - ProtocolAddress = 'protocolAddress', - SubgraphName = 'subgraphName', - VersionNumber = 'versionNumber' +export enum VersionOrderBy { + chain = 'chain', + id = 'id', + protocolAddress = 'protocolAddress', + subgraphName = 'subgraphName', + versionNumber = 'versionNumber' } -export type _Block_ = { +export type Block = { __typename?: '_Block_'; /** The hash of the block */ hash?: Maybe; @@ -4808,27 +4451,26 @@ export type _Block_ = { }; /** The type for the top-level _meta field */ -export type _Meta_ = { +export type Meta = { __typename?: '_Meta_'; /** * Information about a specific subgraph block. The hash of the block * will be null if the _meta field has a block constraint that asks for * a block number. It will be filled if the _meta field has no block constraint * and therefore asks for the latest block - * */ - block: _Block_; + block: Block; /** The deployment ID */ deployment: Scalars['String']['output']; /** If `true`, the subgraph encountered indexing errors at some past block */ hasIndexingErrors: Scalars['Boolean']['output']; }; -export enum _SubgraphErrorPolicy_ { +export enum SubgraphErrorPolicy { /** Data will be returned even if the subgraph has indexing errors */ - Allow = 'allow', + allow = 'allow', /** If the subgraph has indexing errors, data will be omitted. The default. */ - Deny = 'deny' + deny = 'deny' } export type BeanAdvancedChartQueryVariables = Exact<{ diff --git a/src/generated/gql/pintostalk/gql.ts b/src/generated/gql/pintostalk/gql.ts index 941ada1fa..bd81f7224 100644 --- a/src/generated/gql/pintostalk/gql.ts +++ b/src/generated/gql/pintostalk/gql.ts @@ -14,11 +14,11 @@ import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/ * Learn more about it here: https://the-guild.dev/graphql/codegen/plugins/presets/preset-client#reducing-bundle-size */ type Documents = { - "query BeanstalkAdvancedChart($from: Int, $to: Int) {\n seasons(\n first: 1000\n orderBy: season\n orderDirection: desc\n where: {season_gte: $from, season_lte: $to}\n ) {\n id\n sunriseBlock\n rewardBeans\n price\n deltaBeans\n raining\n season\n createdAt\n }\n fieldHourlySnapshots(\n first: 1000\n orderBy: season\n orderDirection: desc\n where: {field: \"0xd1a0d188e861ed9d15773a2f3574a2e94134ba8f\", season_gte: $from, season_lte: $to}\n ) {\n id\n caseId\n issuedSoil\n deltaSownBeans\n sownBeans\n deltaPodDemand\n blocksToSoldOutSoil\n podRate\n temperature\n deltaTemperature\n season\n cultivationFactor\n cultivationTemperature\n harvestableIndex\n harvestablePods\n harvestedPods\n numberOfSowers\n numberOfSows\n podIndex\n realRateOfReturn\n seasonBlock\n soil\n soilSoldOut\n unharvestablePods\n }\n siloHourlySnapshots(\n first: 1000\n orderBy: season\n orderDirection: desc\n where: {silo: \"0xd1a0d188e861ed9d15773a2f3574a2e94134ba8f\", season_gte: $from, season_lte: $to}\n ) {\n id\n beanToMaxLpGpPerBdvRatio\n deltaBeanToMaxLpGpPerBdvRatio\n season\n stalk\n }\n}": typeof types.BeanstalkAdvancedChartDocument, + "query BeanstalkAdvancedChart($from: Int, $to: Int) {\n seasons(\n first: 1000\n orderBy: season\n orderDirection: desc\n where: {season_gte: $from, season_lte: $to}\n ) {\n id\n sunriseBlock\n rewardBeans\n price\n deltaBeans\n raining\n season\n createdAt\n }\n fieldHourlySnapshots(\n first: 1000\n orderBy: season\n orderDirection: desc\n where: {field: \"0xd1a0d188e861ed9d15773a2f3574a2e94134ba8f\", season_gte: $from, season_lte: $to}\n ) {\n id\n caseId\n issuedSoil\n deltaSownBeans\n sownBeans\n deltaPodDemand\n blocksToSoldOutSoil\n podRate\n temperature\n deltaTemperature\n season\n cultivationTemperature\n harvestableIndex\n harvestablePods\n harvestedPods\n numberOfSowers\n numberOfSows\n podIndex\n realRateOfReturn\n seasonBlock\n soil\n soilSoldOut\n unharvestablePods\n }\n siloHourlySnapshots(\n first: 1000\n orderBy: season\n orderDirection: desc\n where: {silo: \"0xd1a0d188e861ed9d15773a2f3574a2e94134ba8f\", season_gte: $from, season_lte: $to}\n ) {\n id\n beanToMaxLpGpPerBdvRatio\n deltaBeanToMaxLpGpPerBdvRatio\n season\n stalk\n cropRatio\n deltaCropRatio\n }\n gaugesInfoHourlySnapshots(\n first: 1000\n orderBy: season\n orderDirection: desc\n where: {season_gte: $from, season_lte: $to}\n ) {\n id\n g0CultivationFactor\n g1BlightFactor\n g1ConvertDownPenalty\n g2BdvConvertedThisSeason\n g2BonusStalkPerBdv\n g2MaxConvertCapacity\n }\n}": typeof types.BeanstalkAdvancedChartDocument, "query FarmerPlots($account: ID!) {\n farmer(id: $account) {\n plots(\n first: 1000\n where: {pods_gt: \"50\", fullyHarvested: false}\n orderBy: index\n orderDirection: asc\n ) {\n beansPerPod\n createdAt\n creationHash\n fullyHarvested\n harvestablePods\n harvestedPods\n id\n index\n pods\n season\n source\n sourceHash\n preTransferSource\n preTransferOwner {\n id\n }\n updatedAt\n updatedAtBlock\n listing {\n id\n }\n }\n }\n}": typeof types.FarmerPlotsDocument, "query FarmerSiloBalances($account: ID!, $season: Int!) {\n farmer(id: $account) {\n deposited: deposits(\n orderBy: season\n orderDirection: asc\n where: {depositedAmount_gt: 0}\n ) {\n season\n stem\n token\n depositedAmount\n depositedBDV\n }\n withdrawn: withdraws(\n orderBy: withdrawSeason\n orderDirection: asc\n where: {claimableSeason_gt: $season, claimed: false}\n ) {\n season: withdrawSeason\n token\n amount\n }\n claimable: withdraws(\n orderBy: withdrawSeason\n orderDirection: asc\n where: {claimableSeason_lte: $season, claimed: false}\n ) {\n season: withdrawSeason\n token\n amount\n }\n }\n}": typeof types.FarmerSiloBalancesDocument, "query fieldIssuedSoil($season: Int, $field_contains_nocase: String) {\n fieldHourlySnapshots(\n first: 1\n orderBy: season\n orderDirection: desc\n where: {season: $season, field_contains_nocase: $field_contains_nocase}\n ) {\n issuedSoil\n season\n soil\n }\n}": typeof types.FieldIssuedSoilDocument, - "query FieldSnapshots($fieldId: Bytes!, $first: Int!) {\n fieldHourlySnapshots(\n first: $first\n orderBy: season\n orderDirection: desc\n where: {field_: {id: $fieldId}}\n ) {\n blocksToSoldOutSoil\n caseId\n deltaHarvestablePods\n deltaHarvestedPods\n deltaIssuedSoil\n deltaNumberOfSowers\n deltaNumberOfSows\n deltaPodIndex\n deltaPodRate\n deltaRealRateOfReturn\n deltaSoil\n deltaSownBeans\n deltaTemperature\n deltaUnharvestablePods\n harvestablePods\n harvestedPods\n id\n issuedSoil\n numberOfSowers\n numberOfSows\n podIndex\n podRate\n realRateOfReturn\n season\n seasonBlock\n soil\n soilSoldOut\n sownBeans\n temperature\n unharvestablePods\n updatedAt\n }\n}": typeof types.FieldSnapshotsDocument, + "query FieldSnapshots($fieldId: ID!, $first: Int!) {\n fieldHourlySnapshots(\n first: $first\n orderBy: season\n orderDirection: desc\n where: {field_: {id: $fieldId}}\n ) {\n blocksToSoldOutSoil\n caseId\n deltaHarvestablePods\n deltaHarvestedPods\n deltaIssuedSoil\n deltaNumberOfSowers\n deltaNumberOfSows\n deltaPodIndex\n deltaPodRate\n deltaRealRateOfReturn\n deltaSoil\n deltaSownBeans\n deltaTemperature\n deltaUnharvestablePods\n harvestablePods\n harvestedPods\n id\n issuedSoil\n numberOfSowers\n numberOfSows\n podIndex\n podRate\n realRateOfReturn\n season\n seasonBlock\n soil\n soilSoldOut\n sownBeans\n temperature\n unharvestablePods\n updatedAt\n }\n}": typeof types.FieldSnapshotsDocument, "query BeanstalkSeasonsTable($from: Int, $to: Int) {\n seasons(\n first: 1000\n orderBy: season\n orderDirection: desc\n where: {season_gte: $from, season_lte: $to}\n ) {\n id\n sunriseBlock\n rewardBeans\n price\n deltaBeans\n raining\n season\n }\n fieldHourlySnapshots(\n first: 1000\n orderBy: season\n orderDirection: desc\n where: {field: \"0xd1a0d188e861ed9d15773a2f3574a2e94134ba8f\", season_gte: $from, season_lte: $to}\n ) {\n id\n caseId\n issuedSoil\n deltaSownBeans\n sownBeans\n deltaPodDemand\n blocksToSoldOutSoil\n podRate\n temperature\n deltaTemperature\n season\n }\n siloHourlySnapshots(\n first: 1000\n orderBy: season\n orderDirection: desc\n where: {silo: \"0xd1a0d188e861ed9d15773a2f3574a2e94134ba8f\", season_gte: $from, season_lte: $to}\n ) {\n id\n beanToMaxLpGpPerBdvRatio\n deltaBeanToMaxLpGpPerBdvRatio\n season\n }\n}": typeof types.BeanstalkSeasonsTableDocument, "query SiloSnapshots($first: Int!, $id: Bytes!) {\n siloHourlySnapshots(\n first: $first\n orderBy: season\n orderDirection: desc\n where: {silo_: {id: $id}}\n ) {\n beanToMaxLpGpPerBdvRatio\n deltaBeanMints\n season\n }\n}": typeof types.SiloSnapshotsDocument, "query SiloYields {\n siloYields(\n orderBy: season\n orderDirection: desc\n where: {emaWindow: ROLLING_30_DAY}\n first: 1\n ) {\n beansPerSeasonEMA\n beta\n createdAt\n season\n id\n u\n whitelistedTokens\n emaWindow\n tokenAPYS {\n beanAPY\n stalkAPY\n season\n createdAt\n token\n }\n }\n}": typeof types.SiloYieldsDocument, @@ -29,6 +29,8 @@ type Documents = { "fragment PodFill on PodFill {\n id\n placeInLine\n amount\n index\n start\n costInBeans\n fromFarmer {\n id\n }\n toFarmer {\n id\n }\n listing {\n id\n originalAmount\n }\n order {\n id\n beanAmount\n }\n createdAt\n}": typeof types.PodFillFragmentDoc, "fragment PodListing on PodListing {\n id\n farmer {\n id\n }\n historyID\n index\n start\n mode\n pricingType\n pricePerPod\n pricingFunction\n maxHarvestableIndex\n minFillAmount\n originalIndex\n originalPlaceInLine\n originalAmount\n filled\n amount\n remainingAmount\n filledAmount\n fill {\n placeInLine\n }\n status\n createdAt\n updatedAt\n creationHash\n}": typeof types.PodListingFragmentDoc, "fragment PodOrder on PodOrder {\n id\n farmer {\n id\n }\n historyID\n pricingType\n pricePerPod\n pricingFunction\n maxPlaceInLine\n minFillAmount\n beanAmount\n podAmountFilled\n beanAmountFilled\n status\n createdAt\n updatedAt\n creationHash\n}": typeof types.PodOrderFragmentDoc, + "query FarmerReferral($id: ID!) {\n farmer(id: $id) {\n id\n totalReferralRewardPodsReceived\n refereeCount\n }\n}": typeof types.FarmerReferralDocument, + "query ReferralLeaderboard($first: Int!, $skip: Int!, $block: Block_height) {\n farmers(\n first: $first\n skip: $skip\n orderBy: totalReferralRewardPodsReceived\n orderDirection: desc\n where: {refereeCount_gte: 0}\n block: $block\n ) {\n id\n refereeCount\n totalReferralRewardPodsReceived\n }\n}": typeof types.ReferralLeaderboardDocument, "query FarmerSeasonalSilo($from: Int, $to: Int, $account: String) {\n siloHourlySnapshots(\n where: {silo: $account, season_gte: $from, season_lte: $to}\n first: 1000\n orderBy: season\n orderDirection: asc\n ) {\n id\n season\n createdAt\n plantedBeans\n stalk\n germinatingStalk\n depositedBDV\n }\n}": typeof types.FarmerSeasonalSiloDocument, "query FarmerSeasonalSiloAssetToken($from: Int, $to: Int, $siloAsset: String) {\n siloAssetHourlySnapshots(\n where: {siloAsset: $siloAsset, season_gte: $from, season_lte: $to}\n first: 1000\n orderBy: season\n orderDirection: asc\n ) {\n id\n season\n depositedAmount\n depositedBDV\n deltaDepositedBDV\n deltaDepositedAmount\n createdAt\n }\n}": typeof types.FarmerSeasonalSiloAssetTokenDocument, "query BeanstalkSeasonalSiloActiveFarmers($from: Int, $to: Int, $silo: String) {\n siloHourlySnapshots(\n where: {season_gte: $from, season_lte: $to, silo: $silo, stalk_gt: 0}\n first: 1000\n orderBy: season\n orderDirection: desc\n ) {\n id\n season\n activeFarmers\n }\n}": typeof types.BeanstalkSeasonalSiloActiveFarmersDocument, @@ -40,11 +42,11 @@ type Documents = { "query BeanstalkSeasonalWrappedDepositERC20($from: Int, $to: Int) {\n wrappedDepositERC20HourlySnapshots(\n where: {season_gte: $from, season_lte: $to}\n orderBy: season\n orderDirection: asc\n first: 1000\n ) {\n id\n season\n supply\n redeemRate\n apy24h\n apy7d\n apy30d\n apy90d\n createdAt\n }\n}": typeof types.BeanstalkSeasonalWrappedDepositErc20Document, }; const documents: Documents = { - "query BeanstalkAdvancedChart($from: Int, $to: Int) {\n seasons(\n first: 1000\n orderBy: season\n orderDirection: desc\n where: {season_gte: $from, season_lte: $to}\n ) {\n id\n sunriseBlock\n rewardBeans\n price\n deltaBeans\n raining\n season\n createdAt\n }\n fieldHourlySnapshots(\n first: 1000\n orderBy: season\n orderDirection: desc\n where: {field: \"0xd1a0d188e861ed9d15773a2f3574a2e94134ba8f\", season_gte: $from, season_lte: $to}\n ) {\n id\n caseId\n issuedSoil\n deltaSownBeans\n sownBeans\n deltaPodDemand\n blocksToSoldOutSoil\n podRate\n temperature\n deltaTemperature\n season\n cultivationFactor\n cultivationTemperature\n harvestableIndex\n harvestablePods\n harvestedPods\n numberOfSowers\n numberOfSows\n podIndex\n realRateOfReturn\n seasonBlock\n soil\n soilSoldOut\n unharvestablePods\n }\n siloHourlySnapshots(\n first: 1000\n orderBy: season\n orderDirection: desc\n where: {silo: \"0xd1a0d188e861ed9d15773a2f3574a2e94134ba8f\", season_gte: $from, season_lte: $to}\n ) {\n id\n beanToMaxLpGpPerBdvRatio\n deltaBeanToMaxLpGpPerBdvRatio\n season\n stalk\n }\n}": types.BeanstalkAdvancedChartDocument, + "query BeanstalkAdvancedChart($from: Int, $to: Int) {\n seasons(\n first: 1000\n orderBy: season\n orderDirection: desc\n where: {season_gte: $from, season_lte: $to}\n ) {\n id\n sunriseBlock\n rewardBeans\n price\n deltaBeans\n raining\n season\n createdAt\n }\n fieldHourlySnapshots(\n first: 1000\n orderBy: season\n orderDirection: desc\n where: {field: \"0xd1a0d188e861ed9d15773a2f3574a2e94134ba8f\", season_gte: $from, season_lte: $to}\n ) {\n id\n caseId\n issuedSoil\n deltaSownBeans\n sownBeans\n deltaPodDemand\n blocksToSoldOutSoil\n podRate\n temperature\n deltaTemperature\n season\n cultivationTemperature\n harvestableIndex\n harvestablePods\n harvestedPods\n numberOfSowers\n numberOfSows\n podIndex\n realRateOfReturn\n seasonBlock\n soil\n soilSoldOut\n unharvestablePods\n }\n siloHourlySnapshots(\n first: 1000\n orderBy: season\n orderDirection: desc\n where: {silo: \"0xd1a0d188e861ed9d15773a2f3574a2e94134ba8f\", season_gte: $from, season_lte: $to}\n ) {\n id\n beanToMaxLpGpPerBdvRatio\n deltaBeanToMaxLpGpPerBdvRatio\n season\n stalk\n cropRatio\n deltaCropRatio\n }\n gaugesInfoHourlySnapshots(\n first: 1000\n orderBy: season\n orderDirection: desc\n where: {season_gte: $from, season_lte: $to}\n ) {\n id\n g0CultivationFactor\n g1BlightFactor\n g1ConvertDownPenalty\n g2BdvConvertedThisSeason\n g2BonusStalkPerBdv\n g2MaxConvertCapacity\n }\n}": types.BeanstalkAdvancedChartDocument, "query FarmerPlots($account: ID!) {\n farmer(id: $account) {\n plots(\n first: 1000\n where: {pods_gt: \"50\", fullyHarvested: false}\n orderBy: index\n orderDirection: asc\n ) {\n beansPerPod\n createdAt\n creationHash\n fullyHarvested\n harvestablePods\n harvestedPods\n id\n index\n pods\n season\n source\n sourceHash\n preTransferSource\n preTransferOwner {\n id\n }\n updatedAt\n updatedAtBlock\n listing {\n id\n }\n }\n }\n}": types.FarmerPlotsDocument, "query FarmerSiloBalances($account: ID!, $season: Int!) {\n farmer(id: $account) {\n deposited: deposits(\n orderBy: season\n orderDirection: asc\n where: {depositedAmount_gt: 0}\n ) {\n season\n stem\n token\n depositedAmount\n depositedBDV\n }\n withdrawn: withdraws(\n orderBy: withdrawSeason\n orderDirection: asc\n where: {claimableSeason_gt: $season, claimed: false}\n ) {\n season: withdrawSeason\n token\n amount\n }\n claimable: withdraws(\n orderBy: withdrawSeason\n orderDirection: asc\n where: {claimableSeason_lte: $season, claimed: false}\n ) {\n season: withdrawSeason\n token\n amount\n }\n }\n}": types.FarmerSiloBalancesDocument, "query fieldIssuedSoil($season: Int, $field_contains_nocase: String) {\n fieldHourlySnapshots(\n first: 1\n orderBy: season\n orderDirection: desc\n where: {season: $season, field_contains_nocase: $field_contains_nocase}\n ) {\n issuedSoil\n season\n soil\n }\n}": types.FieldIssuedSoilDocument, - "query FieldSnapshots($fieldId: Bytes!, $first: Int!) {\n fieldHourlySnapshots(\n first: $first\n orderBy: season\n orderDirection: desc\n where: {field_: {id: $fieldId}}\n ) {\n blocksToSoldOutSoil\n caseId\n deltaHarvestablePods\n deltaHarvestedPods\n deltaIssuedSoil\n deltaNumberOfSowers\n deltaNumberOfSows\n deltaPodIndex\n deltaPodRate\n deltaRealRateOfReturn\n deltaSoil\n deltaSownBeans\n deltaTemperature\n deltaUnharvestablePods\n harvestablePods\n harvestedPods\n id\n issuedSoil\n numberOfSowers\n numberOfSows\n podIndex\n podRate\n realRateOfReturn\n season\n seasonBlock\n soil\n soilSoldOut\n sownBeans\n temperature\n unharvestablePods\n updatedAt\n }\n}": types.FieldSnapshotsDocument, + "query FieldSnapshots($fieldId: ID!, $first: Int!) {\n fieldHourlySnapshots(\n first: $first\n orderBy: season\n orderDirection: desc\n where: {field_: {id: $fieldId}}\n ) {\n blocksToSoldOutSoil\n caseId\n deltaHarvestablePods\n deltaHarvestedPods\n deltaIssuedSoil\n deltaNumberOfSowers\n deltaNumberOfSows\n deltaPodIndex\n deltaPodRate\n deltaRealRateOfReturn\n deltaSoil\n deltaSownBeans\n deltaTemperature\n deltaUnharvestablePods\n harvestablePods\n harvestedPods\n id\n issuedSoil\n numberOfSowers\n numberOfSows\n podIndex\n podRate\n realRateOfReturn\n season\n seasonBlock\n soil\n soilSoldOut\n sownBeans\n temperature\n unharvestablePods\n updatedAt\n }\n}": types.FieldSnapshotsDocument, "query BeanstalkSeasonsTable($from: Int, $to: Int) {\n seasons(\n first: 1000\n orderBy: season\n orderDirection: desc\n where: {season_gte: $from, season_lte: $to}\n ) {\n id\n sunriseBlock\n rewardBeans\n price\n deltaBeans\n raining\n season\n }\n fieldHourlySnapshots(\n first: 1000\n orderBy: season\n orderDirection: desc\n where: {field: \"0xd1a0d188e861ed9d15773a2f3574a2e94134ba8f\", season_gte: $from, season_lte: $to}\n ) {\n id\n caseId\n issuedSoil\n deltaSownBeans\n sownBeans\n deltaPodDemand\n blocksToSoldOutSoil\n podRate\n temperature\n deltaTemperature\n season\n }\n siloHourlySnapshots(\n first: 1000\n orderBy: season\n orderDirection: desc\n where: {silo: \"0xd1a0d188e861ed9d15773a2f3574a2e94134ba8f\", season_gte: $from, season_lte: $to}\n ) {\n id\n beanToMaxLpGpPerBdvRatio\n deltaBeanToMaxLpGpPerBdvRatio\n season\n }\n}": types.BeanstalkSeasonsTableDocument, "query SiloSnapshots($first: Int!, $id: Bytes!) {\n siloHourlySnapshots(\n first: $first\n orderBy: season\n orderDirection: desc\n where: {silo_: {id: $id}}\n ) {\n beanToMaxLpGpPerBdvRatio\n deltaBeanMints\n season\n }\n}": types.SiloSnapshotsDocument, "query SiloYields {\n siloYields(\n orderBy: season\n orderDirection: desc\n where: {emaWindow: ROLLING_30_DAY}\n first: 1\n ) {\n beansPerSeasonEMA\n beta\n createdAt\n season\n id\n u\n whitelistedTokens\n emaWindow\n tokenAPYS {\n beanAPY\n stalkAPY\n season\n createdAt\n token\n }\n }\n}": types.SiloYieldsDocument, @@ -55,6 +57,8 @@ const documents: Documents = { "fragment PodFill on PodFill {\n id\n placeInLine\n amount\n index\n start\n costInBeans\n fromFarmer {\n id\n }\n toFarmer {\n id\n }\n listing {\n id\n originalAmount\n }\n order {\n id\n beanAmount\n }\n createdAt\n}": types.PodFillFragmentDoc, "fragment PodListing on PodListing {\n id\n farmer {\n id\n }\n historyID\n index\n start\n mode\n pricingType\n pricePerPod\n pricingFunction\n maxHarvestableIndex\n minFillAmount\n originalIndex\n originalPlaceInLine\n originalAmount\n filled\n amount\n remainingAmount\n filledAmount\n fill {\n placeInLine\n }\n status\n createdAt\n updatedAt\n creationHash\n}": types.PodListingFragmentDoc, "fragment PodOrder on PodOrder {\n id\n farmer {\n id\n }\n historyID\n pricingType\n pricePerPod\n pricingFunction\n maxPlaceInLine\n minFillAmount\n beanAmount\n podAmountFilled\n beanAmountFilled\n status\n createdAt\n updatedAt\n creationHash\n}": types.PodOrderFragmentDoc, + "query FarmerReferral($id: ID!) {\n farmer(id: $id) {\n id\n totalReferralRewardPodsReceived\n refereeCount\n }\n}": types.FarmerReferralDocument, + "query ReferralLeaderboard($first: Int!, $skip: Int!, $block: Block_height) {\n farmers(\n first: $first\n skip: $skip\n orderBy: totalReferralRewardPodsReceived\n orderDirection: desc\n where: {refereeCount_gte: 0}\n block: $block\n ) {\n id\n refereeCount\n totalReferralRewardPodsReceived\n }\n}": types.ReferralLeaderboardDocument, "query FarmerSeasonalSilo($from: Int, $to: Int, $account: String) {\n siloHourlySnapshots(\n where: {silo: $account, season_gte: $from, season_lte: $to}\n first: 1000\n orderBy: season\n orderDirection: asc\n ) {\n id\n season\n createdAt\n plantedBeans\n stalk\n germinatingStalk\n depositedBDV\n }\n}": types.FarmerSeasonalSiloDocument, "query FarmerSeasonalSiloAssetToken($from: Int, $to: Int, $siloAsset: String) {\n siloAssetHourlySnapshots(\n where: {siloAsset: $siloAsset, season_gte: $from, season_lte: $to}\n first: 1000\n orderBy: season\n orderDirection: asc\n ) {\n id\n season\n depositedAmount\n depositedBDV\n deltaDepositedBDV\n deltaDepositedAmount\n createdAt\n }\n}": types.FarmerSeasonalSiloAssetTokenDocument, "query BeanstalkSeasonalSiloActiveFarmers($from: Int, $to: Int, $silo: String) {\n siloHourlySnapshots(\n where: {season_gte: $from, season_lte: $to, silo: $silo, stalk_gt: 0}\n first: 1000\n orderBy: season\n orderDirection: desc\n ) {\n id\n season\n activeFarmers\n }\n}": types.BeanstalkSeasonalSiloActiveFarmersDocument, @@ -83,7 +87,7 @@ export function graphql(source: string): unknown; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "query BeanstalkAdvancedChart($from: Int, $to: Int) {\n seasons(\n first: 1000\n orderBy: season\n orderDirection: desc\n where: {season_gte: $from, season_lte: $to}\n ) {\n id\n sunriseBlock\n rewardBeans\n price\n deltaBeans\n raining\n season\n createdAt\n }\n fieldHourlySnapshots(\n first: 1000\n orderBy: season\n orderDirection: desc\n where: {field: \"0xd1a0d188e861ed9d15773a2f3574a2e94134ba8f\", season_gte: $from, season_lte: $to}\n ) {\n id\n caseId\n issuedSoil\n deltaSownBeans\n sownBeans\n deltaPodDemand\n blocksToSoldOutSoil\n podRate\n temperature\n deltaTemperature\n season\n cultivationFactor\n cultivationTemperature\n harvestableIndex\n harvestablePods\n harvestedPods\n numberOfSowers\n numberOfSows\n podIndex\n realRateOfReturn\n seasonBlock\n soil\n soilSoldOut\n unharvestablePods\n }\n siloHourlySnapshots(\n first: 1000\n orderBy: season\n orderDirection: desc\n where: {silo: \"0xd1a0d188e861ed9d15773a2f3574a2e94134ba8f\", season_gte: $from, season_lte: $to}\n ) {\n id\n beanToMaxLpGpPerBdvRatio\n deltaBeanToMaxLpGpPerBdvRatio\n season\n stalk\n }\n}"): (typeof documents)["query BeanstalkAdvancedChart($from: Int, $to: Int) {\n seasons(\n first: 1000\n orderBy: season\n orderDirection: desc\n where: {season_gte: $from, season_lte: $to}\n ) {\n id\n sunriseBlock\n rewardBeans\n price\n deltaBeans\n raining\n season\n createdAt\n }\n fieldHourlySnapshots(\n first: 1000\n orderBy: season\n orderDirection: desc\n where: {field: \"0xd1a0d188e861ed9d15773a2f3574a2e94134ba8f\", season_gte: $from, season_lte: $to}\n ) {\n id\n caseId\n issuedSoil\n deltaSownBeans\n sownBeans\n deltaPodDemand\n blocksToSoldOutSoil\n podRate\n temperature\n deltaTemperature\n season\n cultivationFactor\n cultivationTemperature\n harvestableIndex\n harvestablePods\n harvestedPods\n numberOfSowers\n numberOfSows\n podIndex\n realRateOfReturn\n seasonBlock\n soil\n soilSoldOut\n unharvestablePods\n }\n siloHourlySnapshots(\n first: 1000\n orderBy: season\n orderDirection: desc\n where: {silo: \"0xd1a0d188e861ed9d15773a2f3574a2e94134ba8f\", season_gte: $from, season_lte: $to}\n ) {\n id\n beanToMaxLpGpPerBdvRatio\n deltaBeanToMaxLpGpPerBdvRatio\n season\n stalk\n }\n}"]; +export function graphql(source: "query BeanstalkAdvancedChart($from: Int, $to: Int) {\n seasons(\n first: 1000\n orderBy: season\n orderDirection: desc\n where: {season_gte: $from, season_lte: $to}\n ) {\n id\n sunriseBlock\n rewardBeans\n price\n deltaBeans\n raining\n season\n createdAt\n }\n fieldHourlySnapshots(\n first: 1000\n orderBy: season\n orderDirection: desc\n where: {field: \"0xd1a0d188e861ed9d15773a2f3574a2e94134ba8f\", season_gte: $from, season_lte: $to}\n ) {\n id\n caseId\n issuedSoil\n deltaSownBeans\n sownBeans\n deltaPodDemand\n blocksToSoldOutSoil\n podRate\n temperature\n deltaTemperature\n season\n cultivationTemperature\n harvestableIndex\n harvestablePods\n harvestedPods\n numberOfSowers\n numberOfSows\n podIndex\n realRateOfReturn\n seasonBlock\n soil\n soilSoldOut\n unharvestablePods\n }\n siloHourlySnapshots(\n first: 1000\n orderBy: season\n orderDirection: desc\n where: {silo: \"0xd1a0d188e861ed9d15773a2f3574a2e94134ba8f\", season_gte: $from, season_lte: $to}\n ) {\n id\n beanToMaxLpGpPerBdvRatio\n deltaBeanToMaxLpGpPerBdvRatio\n season\n stalk\n cropRatio\n deltaCropRatio\n }\n gaugesInfoHourlySnapshots(\n first: 1000\n orderBy: season\n orderDirection: desc\n where: {season_gte: $from, season_lte: $to}\n ) {\n id\n g0CultivationFactor\n g1BlightFactor\n g1ConvertDownPenalty\n g2BdvConvertedThisSeason\n g2BonusStalkPerBdv\n g2MaxConvertCapacity\n }\n}"): (typeof documents)["query BeanstalkAdvancedChart($from: Int, $to: Int) {\n seasons(\n first: 1000\n orderBy: season\n orderDirection: desc\n where: {season_gte: $from, season_lte: $to}\n ) {\n id\n sunriseBlock\n rewardBeans\n price\n deltaBeans\n raining\n season\n createdAt\n }\n fieldHourlySnapshots(\n first: 1000\n orderBy: season\n orderDirection: desc\n where: {field: \"0xd1a0d188e861ed9d15773a2f3574a2e94134ba8f\", season_gte: $from, season_lte: $to}\n ) {\n id\n caseId\n issuedSoil\n deltaSownBeans\n sownBeans\n deltaPodDemand\n blocksToSoldOutSoil\n podRate\n temperature\n deltaTemperature\n season\n cultivationTemperature\n harvestableIndex\n harvestablePods\n harvestedPods\n numberOfSowers\n numberOfSows\n podIndex\n realRateOfReturn\n seasonBlock\n soil\n soilSoldOut\n unharvestablePods\n }\n siloHourlySnapshots(\n first: 1000\n orderBy: season\n orderDirection: desc\n where: {silo: \"0xd1a0d188e861ed9d15773a2f3574a2e94134ba8f\", season_gte: $from, season_lte: $to}\n ) {\n id\n beanToMaxLpGpPerBdvRatio\n deltaBeanToMaxLpGpPerBdvRatio\n season\n stalk\n cropRatio\n deltaCropRatio\n }\n gaugesInfoHourlySnapshots(\n first: 1000\n orderBy: season\n orderDirection: desc\n where: {season_gte: $from, season_lte: $to}\n ) {\n id\n g0CultivationFactor\n g1BlightFactor\n g1ConvertDownPenalty\n g2BdvConvertedThisSeason\n g2BonusStalkPerBdv\n g2MaxConvertCapacity\n }\n}"]; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ @@ -99,7 +103,7 @@ export function graphql(source: "query fieldIssuedSoil($season: Int, $field_cont /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "query FieldSnapshots($fieldId: Bytes!, $first: Int!) {\n fieldHourlySnapshots(\n first: $first\n orderBy: season\n orderDirection: desc\n where: {field_: {id: $fieldId}}\n ) {\n blocksToSoldOutSoil\n caseId\n deltaHarvestablePods\n deltaHarvestedPods\n deltaIssuedSoil\n deltaNumberOfSowers\n deltaNumberOfSows\n deltaPodIndex\n deltaPodRate\n deltaRealRateOfReturn\n deltaSoil\n deltaSownBeans\n deltaTemperature\n deltaUnharvestablePods\n harvestablePods\n harvestedPods\n id\n issuedSoil\n numberOfSowers\n numberOfSows\n podIndex\n podRate\n realRateOfReturn\n season\n seasonBlock\n soil\n soilSoldOut\n sownBeans\n temperature\n unharvestablePods\n updatedAt\n }\n}"): (typeof documents)["query FieldSnapshots($fieldId: Bytes!, $first: Int!) {\n fieldHourlySnapshots(\n first: $first\n orderBy: season\n orderDirection: desc\n where: {field_: {id: $fieldId}}\n ) {\n blocksToSoldOutSoil\n caseId\n deltaHarvestablePods\n deltaHarvestedPods\n deltaIssuedSoil\n deltaNumberOfSowers\n deltaNumberOfSows\n deltaPodIndex\n deltaPodRate\n deltaRealRateOfReturn\n deltaSoil\n deltaSownBeans\n deltaTemperature\n deltaUnharvestablePods\n harvestablePods\n harvestedPods\n id\n issuedSoil\n numberOfSowers\n numberOfSows\n podIndex\n podRate\n realRateOfReturn\n season\n seasonBlock\n soil\n soilSoldOut\n sownBeans\n temperature\n unharvestablePods\n updatedAt\n }\n}"]; +export function graphql(source: "query FieldSnapshots($fieldId: ID!, $first: Int!) {\n fieldHourlySnapshots(\n first: $first\n orderBy: season\n orderDirection: desc\n where: {field_: {id: $fieldId}}\n ) {\n blocksToSoldOutSoil\n caseId\n deltaHarvestablePods\n deltaHarvestedPods\n deltaIssuedSoil\n deltaNumberOfSowers\n deltaNumberOfSows\n deltaPodIndex\n deltaPodRate\n deltaRealRateOfReturn\n deltaSoil\n deltaSownBeans\n deltaTemperature\n deltaUnharvestablePods\n harvestablePods\n harvestedPods\n id\n issuedSoil\n numberOfSowers\n numberOfSows\n podIndex\n podRate\n realRateOfReturn\n season\n seasonBlock\n soil\n soilSoldOut\n sownBeans\n temperature\n unharvestablePods\n updatedAt\n }\n}"): (typeof documents)["query FieldSnapshots($fieldId: ID!, $first: Int!) {\n fieldHourlySnapshots(\n first: $first\n orderBy: season\n orderDirection: desc\n where: {field_: {id: $fieldId}}\n ) {\n blocksToSoldOutSoil\n caseId\n deltaHarvestablePods\n deltaHarvestedPods\n deltaIssuedSoil\n deltaNumberOfSowers\n deltaNumberOfSows\n deltaPodIndex\n deltaPodRate\n deltaRealRateOfReturn\n deltaSoil\n deltaSownBeans\n deltaTemperature\n deltaUnharvestablePods\n harvestablePods\n harvestedPods\n id\n issuedSoil\n numberOfSowers\n numberOfSows\n podIndex\n podRate\n realRateOfReturn\n season\n seasonBlock\n soil\n soilSoldOut\n sownBeans\n temperature\n unharvestablePods\n updatedAt\n }\n}"]; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ @@ -140,6 +144,14 @@ export function graphql(source: "fragment PodListing on PodListing {\n id\n fa * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function graphql(source: "fragment PodOrder on PodOrder {\n id\n farmer {\n id\n }\n historyID\n pricingType\n pricePerPod\n pricingFunction\n maxPlaceInLine\n minFillAmount\n beanAmount\n podAmountFilled\n beanAmountFilled\n status\n createdAt\n updatedAt\n creationHash\n}"): (typeof documents)["fragment PodOrder on PodOrder {\n id\n farmer {\n id\n }\n historyID\n pricingType\n pricePerPod\n pricingFunction\n maxPlaceInLine\n minFillAmount\n beanAmount\n podAmountFilled\n beanAmountFilled\n status\n createdAt\n updatedAt\n creationHash\n}"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "query FarmerReferral($id: ID!) {\n farmer(id: $id) {\n id\n totalReferralRewardPodsReceived\n refereeCount\n }\n}"): (typeof documents)["query FarmerReferral($id: ID!) {\n farmer(id: $id) {\n id\n totalReferralRewardPodsReceived\n refereeCount\n }\n}"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "query ReferralLeaderboard($first: Int!, $skip: Int!, $block: Block_height) {\n farmers(\n first: $first\n skip: $skip\n orderBy: totalReferralRewardPodsReceived\n orderDirection: desc\n where: {refereeCount_gte: 0}\n block: $block\n ) {\n id\n refereeCount\n totalReferralRewardPodsReceived\n }\n}"): (typeof documents)["query ReferralLeaderboard($first: Int!, $skip: Int!, $block: Block_height) {\n farmers(\n first: $first\n skip: $skip\n orderBy: totalReferralRewardPodsReceived\n orderDirection: desc\n where: {refereeCount_gte: 0}\n block: $block\n ) {\n id\n refereeCount\n totalReferralRewardPodsReceived\n }\n}"]; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ diff --git a/src/generated/gql/pintostalk/graphql.ts b/src/generated/gql/pintostalk/graphql.ts index 5dea95d18..e1a3f1c11 100644 --- a/src/generated/gql/pintostalk/graphql.ts +++ b/src/generated/gql/pintostalk/graphql.ts @@ -17,21 +17,15 @@ export type Scalars = { BigDecimal: { input: any; output: any; } BigInt: { input: any; output: any; } Bytes: { input: any; output: any; } - /** - * 8 bytes signed integer - * - */ + /** 8 bytes signed integer */ Int8: { input: any; output: any; } - /** - * A string representation of microseconds UNIX timestamp (16 digits) - * - */ + /** A string representation of microseconds UNIX timestamp (16 digits) */ Timestamp: { input: any; output: any; } }; -export enum Aggregation_Interval { - Day = 'day', - Hour = 'hour' +export enum AggregationInterval { + day = 'day', + hour = 'hour' } export type Beanstalk = { @@ -61,22 +55,22 @@ export type Beanstalk = { export type BeanstalkSeasonsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type BeanstalkWrappedDepositTokensArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; -export type Beanstalk_Filter = { +export type BeanstalkFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; activeFarmers?: InputMaybe>; @@ -85,7 +79,7 @@ export type Beanstalk_Filter = { activeFarmers_not?: InputMaybe>; activeFarmers_not_contains?: InputMaybe>; activeFarmers_not_contains_nocase?: InputMaybe>; - and?: InputMaybe>>; + and?: InputMaybe>>; farmersToUpdate?: InputMaybe>; farmersToUpdate_contains?: InputMaybe>; farmersToUpdate_contains_nocase?: InputMaybe>; @@ -102,7 +96,7 @@ export type Beanstalk_Filter = { fertilizer1155_not?: InputMaybe; fertilizer1155_not_contains?: InputMaybe; fertilizer1155_not_in?: InputMaybe>; - field_?: InputMaybe; + field_?: InputMaybe; id?: InputMaybe; id_gt?: InputMaybe; id_gte?: InputMaybe; @@ -119,9 +113,9 @@ export type Beanstalk_Filter = { lastSeason_lte?: InputMaybe; lastSeason_not?: InputMaybe; lastSeason_not_in?: InputMaybe>; - or?: InputMaybe>>; - seasons_?: InputMaybe; - silo_?: InputMaybe; + or?: InputMaybe>>; + seasons_?: InputMaybe; + silo_?: InputMaybe; token?: InputMaybe; token_contains?: InputMaybe; token_gt?: InputMaybe; @@ -132,69 +126,70 @@ export type Beanstalk_Filter = { token_not?: InputMaybe; token_not_contains?: InputMaybe; token_not_in?: InputMaybe>; - wrappedDepositTokens_?: InputMaybe; -}; - -export enum Beanstalk_OrderBy { - ActiveFarmers = 'activeFarmers', - FarmersToUpdate = 'farmersToUpdate', - Fertilizer1155 = 'fertilizer1155', - Field = 'field', - FieldCultivationFactor = 'field__cultivationFactor', - FieldCultivationTemperature = 'field__cultivationTemperature', - FieldHarvestableIndex = 'field__harvestableIndex', - FieldHarvestablePods = 'field__harvestablePods', - FieldHarvestedPods = 'field__harvestedPods', - FieldId = 'field__id', - FieldLastDailySnapshotDay = 'field__lastDailySnapshotDay', - FieldLastHourlySnapshotSeason = 'field__lastHourlySnapshotSeason', - FieldNumberOfSowers = 'field__numberOfSowers', - FieldNumberOfSows = 'field__numberOfSows', - FieldPodIndex = 'field__podIndex', - FieldPodRate = 'field__podRate', - FieldRealRateOfReturn = 'field__realRateOfReturn', - FieldSeason = 'field__season', - FieldSoil = 'field__soil', - FieldSownBeans = 'field__sownBeans', - FieldTemperature = 'field__temperature', - FieldUnharvestablePods = 'field__unharvestablePods', - FieldUnmigratedL1Pods = 'field__unmigratedL1Pods', - Id = 'id', - LastSeason = 'lastSeason', - Seasons = 'seasons', - Silo = 'silo', - SiloActiveFarmers = 'silo__activeFarmers', - SiloAvgConvertDownPenalty = 'silo__avgConvertDownPenalty', - SiloAvgGrownStalkPerBdvPerSeason = 'silo__avgGrownStalkPerBdvPerSeason', - SiloBeanMints = 'silo__beanMints', - SiloBeanToMaxLpGpPerBdvRatio = 'silo__beanToMaxLpGpPerBdvRatio', - SiloBonusStalkConvertUp = 'silo__bonusStalkConvertUp', - SiloConvertDownPenalty = 'silo__convertDownPenalty', - SiloCropRatio = 'silo__cropRatio', - SiloDepositedBdv = 'silo__depositedBDV', - SiloGerminatingStalk = 'silo__germinatingStalk', - SiloGrownStalkPerSeason = 'silo__grownStalkPerSeason', - SiloId = 'silo__id', - SiloLastDailySnapshotDay = 'silo__lastDailySnapshotDay', - SiloLastHourlySnapshotSeason = 'silo__lastHourlySnapshotSeason', - SiloPenalizedStalkConvertDown = 'silo__penalizedStalkConvertDown', - SiloPlantableStalk = 'silo__plantableStalk', - SiloPlantedBeans = 'silo__plantedBeans', - SiloRoots = 'silo__roots', - SiloStalk = 'silo__stalk', - SiloTotalBdvConvertUp = 'silo__totalBdvConvertUp', - SiloTotalBdvConvertUpBonus = 'silo__totalBdvConvertUpBonus', - SiloUnmigratedL1DepositedBdv = 'silo__unmigratedL1DepositedBdv', - SiloUnpenalizedStalkConvertDown = 'silo__unpenalizedStalkConvertDown', - Token = 'token', - WrappedDepositTokens = 'wrappedDepositTokens' + wrappedDepositTokens_?: InputMaybe; +}; + +export enum BeanstalkOrderBy { + activeFarmers = 'activeFarmers', + farmersToUpdate = 'farmersToUpdate', + fertilizer1155 = 'fertilizer1155', + field = 'field', + field__cultivationFactor = 'field__cultivationFactor', + field__cultivationTemperature = 'field__cultivationTemperature', + field__fieldId = 'field__fieldId', + field__harvestableIndex = 'field__harvestableIndex', + field__harvestablePods = 'field__harvestablePods', + field__harvestedPods = 'field__harvestedPods', + field__id = 'field__id', + field__lastDailySnapshotDay = 'field__lastDailySnapshotDay', + field__lastHourlySnapshotSeason = 'field__lastHourlySnapshotSeason', + field__numberOfSowers = 'field__numberOfSowers', + field__numberOfSows = 'field__numberOfSows', + field__podIndex = 'field__podIndex', + field__podRate = 'field__podRate', + field__realRateOfReturn = 'field__realRateOfReturn', + field__season = 'field__season', + field__soil = 'field__soil', + field__sownBeans = 'field__sownBeans', + field__temperature = 'field__temperature', + field__unharvestablePods = 'field__unharvestablePods', + field__unmigratedL1Pods = 'field__unmigratedL1Pods', + id = 'id', + lastSeason = 'lastSeason', + seasons = 'seasons', + silo = 'silo', + silo__activeFarmers = 'silo__activeFarmers', + silo__avgConvertDownPenalty = 'silo__avgConvertDownPenalty', + silo__avgGrownStalkPerBdvPerSeason = 'silo__avgGrownStalkPerBdvPerSeason', + silo__beanMints = 'silo__beanMints', + silo__beanToMaxLpGpPerBdvRatio = 'silo__beanToMaxLpGpPerBdvRatio', + silo__bonusStalkConvertUp = 'silo__bonusStalkConvertUp', + silo__convertDownPenalty = 'silo__convertDownPenalty', + silo__cropRatio = 'silo__cropRatio', + silo__depositedBDV = 'silo__depositedBDV', + silo__germinatingStalk = 'silo__germinatingStalk', + silo__grownStalkPerSeason = 'silo__grownStalkPerSeason', + silo__id = 'silo__id', + silo__lastDailySnapshotDay = 'silo__lastDailySnapshotDay', + silo__lastHourlySnapshotSeason = 'silo__lastHourlySnapshotSeason', + silo__penalizedStalkConvertDown = 'silo__penalizedStalkConvertDown', + silo__plantableStalk = 'silo__plantableStalk', + silo__plantedBeans = 'silo__plantedBeans', + silo__roots = 'silo__roots', + silo__stalk = 'silo__stalk', + silo__totalBdvConvertUp = 'silo__totalBdvConvertUp', + silo__totalBdvConvertUpBonus = 'silo__totalBdvConvertUpBonus', + silo__unmigratedL1DepositedBdv = 'silo__unmigratedL1DepositedBdv', + silo__unpenalizedStalkConvertDown = 'silo__unpenalizedStalkConvertDown', + token = 'token', + wrappedDepositTokens = 'wrappedDepositTokens' } export type BlockChangedFilter = { number_gte: Scalars['Int']['input']; }; -export type Block_Height = { +export type BlockHeight = { hash?: InputMaybe; number?: InputMaybe; number_gte?: InputMaybe; @@ -228,10 +223,10 @@ export type Chop = { unripeToken: UnripeToken; }; -export type Chop_Filter = { +export type ChopFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; blockNumber?: InputMaybe; blockNumber_gt?: InputMaybe; blockNumber_gte?: InputMaybe; @@ -257,7 +252,7 @@ export type Chop_Filter = { createdAt_not?: InputMaybe; createdAt_not_in?: InputMaybe>; farmer?: InputMaybe; - farmer_?: InputMaybe; + farmer_?: InputMaybe; farmer_contains?: InputMaybe; farmer_contains_nocase?: InputMaybe; farmer_ends_with?: InputMaybe; @@ -295,7 +290,7 @@ export type Chop_Filter = { id_lte?: InputMaybe; id_not?: InputMaybe; id_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; underlyingAmount?: InputMaybe; underlyingAmount_gt?: InputMaybe; underlyingAmount_gte?: InputMaybe; @@ -313,7 +308,7 @@ export type Chop_Filter = { underlyingBdv_not?: InputMaybe; underlyingBdv_not_in?: InputMaybe>; underlyingToken?: InputMaybe; - underlyingToken_?: InputMaybe; + underlyingToken_?: InputMaybe; underlyingToken_contains?: InputMaybe; underlyingToken_contains_nocase?: InputMaybe; underlyingToken_ends_with?: InputMaybe; @@ -350,7 +345,7 @@ export type Chop_Filter = { unripeBdv_not?: InputMaybe; unripeBdv_not_in?: InputMaybe>; unripeToken?: InputMaybe; - unripeToken_?: InputMaybe; + unripeToken_?: InputMaybe; unripeToken_contains?: InputMaybe; unripeToken_contains_nocase?: InputMaybe; unripeToken_ends_with?: InputMaybe; @@ -372,53 +367,55 @@ export type Chop_Filter = { unripeToken_starts_with_nocase?: InputMaybe; }; -export enum Chop_OrderBy { - BlockNumber = 'blockNumber', - ChopRate = 'chopRate', - CreatedAt = 'createdAt', - Farmer = 'farmer', - FarmerCreationBlock = 'farmer__creationBlock', - FarmerId = 'farmer__id', - Hash = 'hash', - Id = 'id', - UnderlyingAmount = 'underlyingAmount', - UnderlyingBdv = 'underlyingBdv', - UnderlyingToken = 'underlyingToken', - UnderlyingTokenDecimals = 'underlyingToken__decimals', - UnderlyingTokenGaugePoints = 'underlyingToken__gaugePoints', - UnderlyingTokenId = 'underlyingToken__id', - UnderlyingTokenIsGaugeEnabled = 'underlyingToken__isGaugeEnabled', - UnderlyingTokenLastDailySnapshotDay = 'underlyingToken__lastDailySnapshotDay', - UnderlyingTokenLastHourlySnapshotSeason = 'underlyingToken__lastHourlySnapshotSeason', - UnderlyingTokenMilestoneSeason = 'underlyingToken__milestoneSeason', - UnderlyingTokenOptimalPercentDepositedBdv = 'underlyingToken__optimalPercentDepositedBdv', - UnderlyingTokenSelector = 'underlyingToken__selector', - UnderlyingTokenStalkEarnedPerSeason = 'underlyingToken__stalkEarnedPerSeason', - UnderlyingTokenStalkIssuedPerBdv = 'underlyingToken__stalkIssuedPerBdv', - UnderlyingTokenStemTip = 'underlyingToken__stemTip', - UnderlyingTokenUpdatedAt = 'underlyingToken__updatedAt', - UnripeAmount = 'unripeAmount', - UnripeBdv = 'unripeBdv', - UnripeToken = 'unripeToken', - UnripeTokenAmountUnderlyingOne = 'unripeToken__amountUnderlyingOne', - UnripeTokenBdvUnderlyingOne = 'unripeToken__bdvUnderlyingOne', - UnripeTokenChopRate = 'unripeToken__chopRate', - UnripeTokenChoppableAmountOne = 'unripeToken__choppableAmountOne', - UnripeTokenChoppableBdvOne = 'unripeToken__choppableBdvOne', - UnripeTokenId = 'unripeToken__id', - UnripeTokenLastDailySnapshotDay = 'unripeToken__lastDailySnapshotDay', - UnripeTokenLastHourlySnapshotSeason = 'unripeToken__lastHourlySnapshotSeason', - UnripeTokenRecapPercent = 'unripeToken__recapPercent', - UnripeTokenTotalChoppedAmount = 'unripeToken__totalChoppedAmount', - UnripeTokenTotalChoppedBdv = 'unripeToken__totalChoppedBdv', - UnripeTokenTotalChoppedBdvReceived = 'unripeToken__totalChoppedBdvReceived', - UnripeTokenTotalUnderlying = 'unripeToken__totalUnderlying' +export enum ChopOrderBy { + blockNumber = 'blockNumber', + chopRate = 'chopRate', + createdAt = 'createdAt', + farmer = 'farmer', + farmer__creationBlock = 'farmer__creationBlock', + farmer__id = 'farmer__id', + farmer__refereeCount = 'farmer__refereeCount', + farmer__totalReferralRewardPodsReceived = 'farmer__totalReferralRewardPodsReceived', + hash = 'hash', + id = 'id', + underlyingAmount = 'underlyingAmount', + underlyingBdv = 'underlyingBdv', + underlyingToken = 'underlyingToken', + underlyingToken__decimals = 'underlyingToken__decimals', + underlyingToken__gaugePoints = 'underlyingToken__gaugePoints', + underlyingToken__id = 'underlyingToken__id', + underlyingToken__isGaugeEnabled = 'underlyingToken__isGaugeEnabled', + underlyingToken__lastDailySnapshotDay = 'underlyingToken__lastDailySnapshotDay', + underlyingToken__lastHourlySnapshotSeason = 'underlyingToken__lastHourlySnapshotSeason', + underlyingToken__milestoneSeason = 'underlyingToken__milestoneSeason', + underlyingToken__optimalPercentDepositedBdv = 'underlyingToken__optimalPercentDepositedBdv', + underlyingToken__selector = 'underlyingToken__selector', + underlyingToken__stalkEarnedPerSeason = 'underlyingToken__stalkEarnedPerSeason', + underlyingToken__stalkIssuedPerBdv = 'underlyingToken__stalkIssuedPerBdv', + underlyingToken__stemTip = 'underlyingToken__stemTip', + underlyingToken__updatedAt = 'underlyingToken__updatedAt', + unripeAmount = 'unripeAmount', + unripeBdv = 'unripeBdv', + unripeToken = 'unripeToken', + unripeToken__amountUnderlyingOne = 'unripeToken__amountUnderlyingOne', + unripeToken__bdvUnderlyingOne = 'unripeToken__bdvUnderlyingOne', + unripeToken__chopRate = 'unripeToken__chopRate', + unripeToken__choppableAmountOne = 'unripeToken__choppableAmountOne', + unripeToken__choppableBdvOne = 'unripeToken__choppableBdvOne', + unripeToken__id = 'unripeToken__id', + unripeToken__lastDailySnapshotDay = 'unripeToken__lastDailySnapshotDay', + unripeToken__lastHourlySnapshotSeason = 'unripeToken__lastHourlySnapshotSeason', + unripeToken__recapPercent = 'unripeToken__recapPercent', + unripeToken__totalChoppedAmount = 'unripeToken__totalChoppedAmount', + unripeToken__totalChoppedBdv = 'unripeToken__totalChoppedBdv', + unripeToken__totalChoppedBdvReceived = 'unripeToken__totalChoppedBdvReceived', + unripeToken__totalUnderlying = 'unripeToken__totalUnderlying' } export enum EmaWindow { - Rolling_7Day = 'ROLLING_7_DAY', - Rolling_24Hour = 'ROLLING_24_HOUR', - Rolling_30Day = 'ROLLING_30_DAY' + ROLLING_7_DAY = 'ROLLING_7_DAY', + ROLLING_24_HOUR = 'ROLLING_24_HOUR', + ROLLING_30_DAY = 'ROLLING_30_DAY' } export type Farmer = { @@ -434,77 +431,81 @@ export type Farmer = { listings: Array; orders: Array; plots: Array; + /** Number of accounts this farmer has referred */ + refereeCount: Scalars['Int']['output']; silo?: Maybe; + /** Total pods this farmer has received as referral rewards */ + totalReferralRewardPodsReceived: Scalars['BigInt']['output']; withdraws: Array; }; export type FarmerDepositsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type FarmerFertilizersArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type FarmerFillsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type FarmerListingsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type FarmerOrdersArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type FarmerPlotsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type FarmerWithdrawsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; -export type Farmer_Filter = { +export type FarmerFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; creationBlock?: InputMaybe; creationBlock_gt?: InputMaybe; creationBlock_gte?: InputMaybe; @@ -513,10 +514,10 @@ export type Farmer_Filter = { creationBlock_lte?: InputMaybe; creationBlock_not?: InputMaybe; creationBlock_not_in?: InputMaybe>; - deposits_?: InputMaybe; - fertilizers_?: InputMaybe; - field_?: InputMaybe; - fills_?: InputMaybe; + deposits_?: InputMaybe; + fertilizers_?: InputMaybe; + field_?: InputMaybe; + fills_?: InputMaybe; id?: InputMaybe; id_contains?: InputMaybe; id_gt?: InputMaybe; @@ -527,68 +528,87 @@ export type Farmer_Filter = { id_not?: InputMaybe; id_not_contains?: InputMaybe; id_not_in?: InputMaybe>; - listings_?: InputMaybe; - or?: InputMaybe>>; - orders_?: InputMaybe; - plots_?: InputMaybe; - silo_?: InputMaybe; - withdraws_?: InputMaybe; -}; - -export enum Farmer_OrderBy { - CreationBlock = 'creationBlock', - Deposits = 'deposits', - Fertilizers = 'fertilizers', - Field = 'field', - FieldCultivationFactor = 'field__cultivationFactor', - FieldCultivationTemperature = 'field__cultivationTemperature', - FieldHarvestableIndex = 'field__harvestableIndex', - FieldHarvestablePods = 'field__harvestablePods', - FieldHarvestedPods = 'field__harvestedPods', - FieldId = 'field__id', - FieldLastDailySnapshotDay = 'field__lastDailySnapshotDay', - FieldLastHourlySnapshotSeason = 'field__lastHourlySnapshotSeason', - FieldNumberOfSowers = 'field__numberOfSowers', - FieldNumberOfSows = 'field__numberOfSows', - FieldPodIndex = 'field__podIndex', - FieldPodRate = 'field__podRate', - FieldRealRateOfReturn = 'field__realRateOfReturn', - FieldSeason = 'field__season', - FieldSoil = 'field__soil', - FieldSownBeans = 'field__sownBeans', - FieldTemperature = 'field__temperature', - FieldUnharvestablePods = 'field__unharvestablePods', - FieldUnmigratedL1Pods = 'field__unmigratedL1Pods', - Fills = 'fills', - Id = 'id', - Listings = 'listings', - Orders = 'orders', - Plots = 'plots', - Silo = 'silo', - SiloActiveFarmers = 'silo__activeFarmers', - SiloAvgConvertDownPenalty = 'silo__avgConvertDownPenalty', - SiloAvgGrownStalkPerBdvPerSeason = 'silo__avgGrownStalkPerBdvPerSeason', - SiloBeanMints = 'silo__beanMints', - SiloBeanToMaxLpGpPerBdvRatio = 'silo__beanToMaxLpGpPerBdvRatio', - SiloBonusStalkConvertUp = 'silo__bonusStalkConvertUp', - SiloConvertDownPenalty = 'silo__convertDownPenalty', - SiloCropRatio = 'silo__cropRatio', - SiloDepositedBdv = 'silo__depositedBDV', - SiloGerminatingStalk = 'silo__germinatingStalk', - SiloGrownStalkPerSeason = 'silo__grownStalkPerSeason', - SiloId = 'silo__id', - SiloLastDailySnapshotDay = 'silo__lastDailySnapshotDay', - SiloLastHourlySnapshotSeason = 'silo__lastHourlySnapshotSeason', - SiloPenalizedStalkConvertDown = 'silo__penalizedStalkConvertDown', - SiloPlantableStalk = 'silo__plantableStalk', - SiloPlantedBeans = 'silo__plantedBeans', - SiloRoots = 'silo__roots', - SiloStalk = 'silo__stalk', - SiloTotalBdvConvertUp = 'silo__totalBdvConvertUp', - SiloTotalBdvConvertUpBonus = 'silo__totalBdvConvertUpBonus', - SiloUnmigratedL1DepositedBdv = 'silo__unmigratedL1DepositedBdv', - SiloUnpenalizedStalkConvertDown = 'silo__unpenalizedStalkConvertDown', - Withdraws = 'withdraws' + listings_?: InputMaybe; + or?: InputMaybe>>; + orders_?: InputMaybe; + plots_?: InputMaybe; + refereeCount?: InputMaybe; + refereeCount_gt?: InputMaybe; + refereeCount_gte?: InputMaybe; + refereeCount_in?: InputMaybe>; + refereeCount_lt?: InputMaybe; + refereeCount_lte?: InputMaybe; + refereeCount_not?: InputMaybe; + refereeCount_not_in?: InputMaybe>; + silo_?: InputMaybe; + totalReferralRewardPodsReceived?: InputMaybe; + totalReferralRewardPodsReceived_gt?: InputMaybe; + totalReferralRewardPodsReceived_gte?: InputMaybe; + totalReferralRewardPodsReceived_in?: InputMaybe>; + totalReferralRewardPodsReceived_lt?: InputMaybe; + totalReferralRewardPodsReceived_lte?: InputMaybe; + totalReferralRewardPodsReceived_not?: InputMaybe; + totalReferralRewardPodsReceived_not_in?: InputMaybe>; + withdraws_?: InputMaybe; +}; + +export enum FarmerOrderBy { + creationBlock = 'creationBlock', + deposits = 'deposits', + fertilizers = 'fertilizers', + field = 'field', + field__cultivationFactor = 'field__cultivationFactor', + field__cultivationTemperature = 'field__cultivationTemperature', + field__fieldId = 'field__fieldId', + field__harvestableIndex = 'field__harvestableIndex', + field__harvestablePods = 'field__harvestablePods', + field__harvestedPods = 'field__harvestedPods', + field__id = 'field__id', + field__lastDailySnapshotDay = 'field__lastDailySnapshotDay', + field__lastHourlySnapshotSeason = 'field__lastHourlySnapshotSeason', + field__numberOfSowers = 'field__numberOfSowers', + field__numberOfSows = 'field__numberOfSows', + field__podIndex = 'field__podIndex', + field__podRate = 'field__podRate', + field__realRateOfReturn = 'field__realRateOfReturn', + field__season = 'field__season', + field__soil = 'field__soil', + field__sownBeans = 'field__sownBeans', + field__temperature = 'field__temperature', + field__unharvestablePods = 'field__unharvestablePods', + field__unmigratedL1Pods = 'field__unmigratedL1Pods', + fills = 'fills', + id = 'id', + listings = 'listings', + orders = 'orders', + plots = 'plots', + refereeCount = 'refereeCount', + silo = 'silo', + silo__activeFarmers = 'silo__activeFarmers', + silo__avgConvertDownPenalty = 'silo__avgConvertDownPenalty', + silo__avgGrownStalkPerBdvPerSeason = 'silo__avgGrownStalkPerBdvPerSeason', + silo__beanMints = 'silo__beanMints', + silo__beanToMaxLpGpPerBdvRatio = 'silo__beanToMaxLpGpPerBdvRatio', + silo__bonusStalkConvertUp = 'silo__bonusStalkConvertUp', + silo__convertDownPenalty = 'silo__convertDownPenalty', + silo__cropRatio = 'silo__cropRatio', + silo__depositedBDV = 'silo__depositedBDV', + silo__germinatingStalk = 'silo__germinatingStalk', + silo__grownStalkPerSeason = 'silo__grownStalkPerSeason', + silo__id = 'silo__id', + silo__lastDailySnapshotDay = 'silo__lastDailySnapshotDay', + silo__lastHourlySnapshotSeason = 'silo__lastHourlySnapshotSeason', + silo__penalizedStalkConvertDown = 'silo__penalizedStalkConvertDown', + silo__plantableStalk = 'silo__plantableStalk', + silo__plantedBeans = 'silo__plantedBeans', + silo__roots = 'silo__roots', + silo__stalk = 'silo__stalk', + silo__totalBdvConvertUp = 'silo__totalBdvConvertUp', + silo__totalBdvConvertUpBonus = 'silo__totalBdvConvertUpBonus', + silo__unmigratedL1DepositedBdv = 'silo__unmigratedL1DepositedBdv', + silo__unpenalizedStalkConvertDown = 'silo__unpenalizedStalkConvertDown', + totalReferralRewardPodsReceived = 'totalReferralRewardPodsReceived', + withdraws = 'withdraws' } export type Fertilizer = { @@ -607,10 +627,10 @@ export type Fertilizer = { export type FertilizerTokensArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type FertilizerBalance = { @@ -623,7 +643,7 @@ export type FertilizerBalance = { id: Scalars['ID']['output']; }; -export type FertilizerBalance_Filter = { +export type FertilizerBalanceFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; amount?: InputMaybe; @@ -634,9 +654,9 @@ export type FertilizerBalance_Filter = { amount_lte?: InputMaybe; amount_not?: InputMaybe; amount_not_in?: InputMaybe>; - and?: InputMaybe>>; + and?: InputMaybe>>; farmer?: InputMaybe; - farmer_?: InputMaybe; + farmer_?: InputMaybe; farmer_contains?: InputMaybe; farmer_contains_nocase?: InputMaybe; farmer_ends_with?: InputMaybe; @@ -657,7 +677,7 @@ export type FertilizerBalance_Filter = { farmer_starts_with?: InputMaybe; farmer_starts_with_nocase?: InputMaybe; fertilizerToken?: InputMaybe; - fertilizerToken_?: InputMaybe; + fertilizerToken_?: InputMaybe; fertilizerToken_contains?: InputMaybe; fertilizerToken_contains_nocase?: InputMaybe; fertilizerToken_ends_with?: InputMaybe; @@ -685,22 +705,24 @@ export type FertilizerBalance_Filter = { id_lte?: InputMaybe; id_not?: InputMaybe; id_not_in?: InputMaybe>; - or?: InputMaybe>>; -}; - -export enum FertilizerBalance_OrderBy { - Amount = 'amount', - Farmer = 'farmer', - FarmerCreationBlock = 'farmer__creationBlock', - FarmerId = 'farmer__id', - FertilizerToken = 'fertilizerToken', - FertilizerTokenEndBpf = 'fertilizerToken__endBpf', - FertilizerTokenHumidity = 'fertilizerToken__humidity', - FertilizerTokenId = 'fertilizerToken__id', - FertilizerTokenSeason = 'fertilizerToken__season', - FertilizerTokenStartBpf = 'fertilizerToken__startBpf', - FertilizerTokenSupply = 'fertilizerToken__supply', - Id = 'id' + or?: InputMaybe>>; +}; + +export enum FertilizerBalanceOrderBy { + amount = 'amount', + farmer = 'farmer', + farmer__creationBlock = 'farmer__creationBlock', + farmer__id = 'farmer__id', + farmer__refereeCount = 'farmer__refereeCount', + farmer__totalReferralRewardPodsReceived = 'farmer__totalReferralRewardPodsReceived', + fertilizerToken = 'fertilizerToken', + fertilizerToken__endBpf = 'fertilizerToken__endBpf', + fertilizerToken__humidity = 'fertilizerToken__humidity', + fertilizerToken__id = 'fertilizerToken__id', + fertilizerToken__season = 'fertilizerToken__season', + fertilizerToken__startBpf = 'fertilizerToken__startBpf', + fertilizerToken__supply = 'fertilizerToken__supply', + id = 'id' } export type FertilizerToken = { @@ -724,17 +746,17 @@ export type FertilizerToken = { export type FertilizerTokenBalancesArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; -export type FertilizerToken_Filter = { +export type FertilizerTokenFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; - balances_?: InputMaybe; + and?: InputMaybe>>; + balances_?: InputMaybe; endBpf?: InputMaybe; endBpf_gt?: InputMaybe; endBpf_gte?: InputMaybe; @@ -744,7 +766,7 @@ export type FertilizerToken_Filter = { endBpf_not?: InputMaybe; endBpf_not_in?: InputMaybe>; fertilizer?: InputMaybe; - fertilizer_?: InputMaybe; + fertilizer_?: InputMaybe; fertilizer_contains?: InputMaybe; fertilizer_contains_nocase?: InputMaybe; fertilizer_ends_with?: InputMaybe; @@ -780,7 +802,7 @@ export type FertilizerToken_Filter = { id_lte?: InputMaybe; id_not?: InputMaybe; id_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; season?: InputMaybe; season_gt?: InputMaybe; season_gte?: InputMaybe; @@ -807,19 +829,19 @@ export type FertilizerToken_Filter = { supply_not_in?: InputMaybe>; }; -export enum FertilizerToken_OrderBy { - Balances = 'balances', - EndBpf = 'endBpf', - Fertilizer = 'fertilizer', - FertilizerBeanstalk = 'fertilizer__beanstalk', - FertilizerId = 'fertilizer__id', - FertilizerSupply = 'fertilizer__supply', - FertilizerUnmigratedL1Supply = 'fertilizer__unmigratedL1Supply', - Humidity = 'humidity', - Id = 'id', - Season = 'season', - StartBpf = 'startBpf', - Supply = 'supply' +export enum FertilizerTokenOrderBy { + balances = 'balances', + endBpf = 'endBpf', + fertilizer = 'fertilizer', + fertilizer__beanstalk = 'fertilizer__beanstalk', + fertilizer__id = 'fertilizer__id', + fertilizer__supply = 'fertilizer__supply', + fertilizer__unmigratedL1Supply = 'fertilizer__unmigratedL1Supply', + humidity = 'humidity', + id = 'id', + season = 'season', + startBpf = 'startBpf', + supply = 'supply' } export type FertilizerYield = { @@ -844,10 +866,10 @@ export type FertilizerYield = { simpleAPY: Scalars['BigDecimal']['output']; }; -export type FertilizerYield_Filter = { +export type FertilizerYieldFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; beansPerSeasonEMA?: InputMaybe; beansPerSeasonEMA_gt?: InputMaybe; beansPerSeasonEMA_gte?: InputMaybe; @@ -892,7 +914,7 @@ export type FertilizerYield_Filter = { id_lte?: InputMaybe; id_not?: InputMaybe; id_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; outstandingFert?: InputMaybe; outstandingFert_gt?: InputMaybe; outstandingFert_gte?: InputMaybe; @@ -919,22 +941,22 @@ export type FertilizerYield_Filter = { simpleAPY_not_in?: InputMaybe>; }; -export enum FertilizerYield_OrderBy { - BeansPerSeasonEma = 'beansPerSeasonEMA', - CreatedAt = 'createdAt', - DeltaBpf = 'deltaBpf', - EmaWindow = 'emaWindow', - Humidity = 'humidity', - Id = 'id', - OutstandingFert = 'outstandingFert', - Season = 'season', - SimpleApy = 'simpleAPY' +export enum FertilizerYieldOrderBy { + beansPerSeasonEMA = 'beansPerSeasonEMA', + createdAt = 'createdAt', + deltaBpf = 'deltaBpf', + emaWindow = 'emaWindow', + humidity = 'humidity', + id = 'id', + outstandingFert = 'outstandingFert', + season = 'season', + simpleAPY = 'simpleAPY' } -export type Fertilizer_Filter = { +export type FertilizerFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; beanstalk?: InputMaybe; beanstalk_contains?: InputMaybe; beanstalk_contains_nocase?: InputMaybe; @@ -965,7 +987,7 @@ export type Fertilizer_Filter = { id_not?: InputMaybe; id_not_contains?: InputMaybe; id_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; supply?: InputMaybe; supply_gt?: InputMaybe; supply_gte?: InputMaybe; @@ -974,7 +996,7 @@ export type Fertilizer_Filter = { supply_lte?: InputMaybe; supply_not?: InputMaybe; supply_not_in?: InputMaybe>; - tokens_?: InputMaybe; + tokens_?: InputMaybe; unmigratedL1Supply?: InputMaybe; unmigratedL1Supply_gt?: InputMaybe; unmigratedL1Supply_gte?: InputMaybe; @@ -985,12 +1007,12 @@ export type Fertilizer_Filter = { unmigratedL1Supply_not_in?: InputMaybe>; }; -export enum Fertilizer_OrderBy { - Beanstalk = 'beanstalk', - Id = 'id', - Supply = 'supply', - Tokens = 'tokens', - UnmigratedL1Supply = 'unmigratedL1Supply' +export enum FertilizerOrderBy { + beanstalk = 'beanstalk', + id = 'id', + supply = 'supply', + tokens = 'tokens', + unmigratedL1Supply = 'unmigratedL1Supply' } export type Field = { @@ -1005,6 +1027,8 @@ export type Field = { dailySnapshots: Array; /** Farmer address if applicable */ farmer?: Maybe; + /** Numeric identifier of the field emitted on protocol events */ + fieldId: Scalars['BigInt']['output']; /** Current harvestable index */ harvestableIndex: Scalars['BigInt']['output']; /** Current harvestable pods */ @@ -1013,8 +1037,8 @@ export type Field = { harvestedPods: Scalars['BigInt']['output']; /** Link to hourly snapshot data */ hourlySnapshots: Array; - /** Contract address for this field or farmer */ - id: Scalars['Bytes']['output']; + /** Contract address for this field or farmer when fieldId is zero. Otherwise address:fieldId */ + id: Scalars['ID']['output']; /** Day of when the previous daily snapshot was taken/updated */ lastDailySnapshotDay?: Maybe; /** Season when the previous hourly snapshot was taken/updated */ @@ -1048,19 +1072,19 @@ export type Field = { export type FieldDailySnapshotsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type FieldHourlySnapshotsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type FieldDailySnapshot = { @@ -1088,6 +1112,8 @@ export type FieldDailySnapshot = { deltaUnharvestablePods: Scalars['BigInt']['output']; /** Field associated with this snapshot */ field: Field; + /** Numeric identifier of the field */ + fieldId: Scalars['BigInt']['output']; /** Point in time harvestable index */ harvestableIndex: Scalars['BigInt']['output']; /** Point in time harvestable pods */ @@ -1122,10 +1148,10 @@ export type FieldDailySnapshot = { updatedAt: Scalars['BigInt']['output']; }; -export type FieldDailySnapshot_Filter = { +export type FieldDailySnapshotFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; createdAt?: InputMaybe; createdAt_gt?: InputMaybe; createdAt_gte?: InputMaybe; @@ -1271,7 +1297,15 @@ export type FieldDailySnapshot_Filter = { deltaUnharvestablePods_not?: InputMaybe; deltaUnharvestablePods_not_in?: InputMaybe>; field?: InputMaybe; - field_?: InputMaybe; + fieldId?: InputMaybe; + fieldId_gt?: InputMaybe; + fieldId_gte?: InputMaybe; + fieldId_in?: InputMaybe>; + fieldId_lt?: InputMaybe; + fieldId_lte?: InputMaybe; + fieldId_not?: InputMaybe; + fieldId_not_in?: InputMaybe>; + field_?: InputMaybe; field_contains?: InputMaybe; field_contains_nocase?: InputMaybe; field_ends_with?: InputMaybe; @@ -1347,7 +1381,7 @@ export type FieldDailySnapshot_Filter = { numberOfSows_lte?: InputMaybe; numberOfSows_not?: InputMaybe; numberOfSows_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; podIndex?: InputMaybe; podIndex_gt?: InputMaybe; podIndex_gte?: InputMaybe; @@ -1422,61 +1456,63 @@ export type FieldDailySnapshot_Filter = { updatedAt_not_in?: InputMaybe>; }; -export enum FieldDailySnapshot_OrderBy { - CreatedAt = 'createdAt', - CultivationFactor = 'cultivationFactor', - CultivationTemperature = 'cultivationTemperature', - DeltaCultivationFactor = 'deltaCultivationFactor', - DeltaCultivationTemperature = 'deltaCultivationTemperature', - DeltaHarvestableIndex = 'deltaHarvestableIndex', - DeltaHarvestablePods = 'deltaHarvestablePods', - DeltaHarvestedPods = 'deltaHarvestedPods', - DeltaIssuedSoil = 'deltaIssuedSoil', - DeltaNumberOfSowers = 'deltaNumberOfSowers', - DeltaNumberOfSows = 'deltaNumberOfSows', - DeltaPodIndex = 'deltaPodIndex', - DeltaPodRate = 'deltaPodRate', - DeltaRealRateOfReturn = 'deltaRealRateOfReturn', - DeltaSoil = 'deltaSoil', - DeltaSownBeans = 'deltaSownBeans', - DeltaTemperature = 'deltaTemperature', - DeltaUnharvestablePods = 'deltaUnharvestablePods', - Field = 'field', - FieldCultivationFactor = 'field__cultivationFactor', - FieldCultivationTemperature = 'field__cultivationTemperature', - FieldHarvestableIndex = 'field__harvestableIndex', - FieldHarvestablePods = 'field__harvestablePods', - FieldHarvestedPods = 'field__harvestedPods', - FieldId = 'field__id', - FieldLastDailySnapshotDay = 'field__lastDailySnapshotDay', - FieldLastHourlySnapshotSeason = 'field__lastHourlySnapshotSeason', - FieldNumberOfSowers = 'field__numberOfSowers', - FieldNumberOfSows = 'field__numberOfSows', - FieldPodIndex = 'field__podIndex', - FieldPodRate = 'field__podRate', - FieldRealRateOfReturn = 'field__realRateOfReturn', - FieldSeason = 'field__season', - FieldSoil = 'field__soil', - FieldSownBeans = 'field__sownBeans', - FieldTemperature = 'field__temperature', - FieldUnharvestablePods = 'field__unharvestablePods', - FieldUnmigratedL1Pods = 'field__unmigratedL1Pods', - HarvestableIndex = 'harvestableIndex', - HarvestablePods = 'harvestablePods', - HarvestedPods = 'harvestedPods', - Id = 'id', - IssuedSoil = 'issuedSoil', - NumberOfSowers = 'numberOfSowers', - NumberOfSows = 'numberOfSows', - PodIndex = 'podIndex', - PodRate = 'podRate', - RealRateOfReturn = 'realRateOfReturn', - Season = 'season', - Soil = 'soil', - SownBeans = 'sownBeans', - Temperature = 'temperature', - UnharvestablePods = 'unharvestablePods', - UpdatedAt = 'updatedAt' +export enum FieldDailySnapshotOrderBy { + createdAt = 'createdAt', + cultivationFactor = 'cultivationFactor', + cultivationTemperature = 'cultivationTemperature', + deltaCultivationFactor = 'deltaCultivationFactor', + deltaCultivationTemperature = 'deltaCultivationTemperature', + deltaHarvestableIndex = 'deltaHarvestableIndex', + deltaHarvestablePods = 'deltaHarvestablePods', + deltaHarvestedPods = 'deltaHarvestedPods', + deltaIssuedSoil = 'deltaIssuedSoil', + deltaNumberOfSowers = 'deltaNumberOfSowers', + deltaNumberOfSows = 'deltaNumberOfSows', + deltaPodIndex = 'deltaPodIndex', + deltaPodRate = 'deltaPodRate', + deltaRealRateOfReturn = 'deltaRealRateOfReturn', + deltaSoil = 'deltaSoil', + deltaSownBeans = 'deltaSownBeans', + deltaTemperature = 'deltaTemperature', + deltaUnharvestablePods = 'deltaUnharvestablePods', + field = 'field', + fieldId = 'fieldId', + field__cultivationFactor = 'field__cultivationFactor', + field__cultivationTemperature = 'field__cultivationTemperature', + field__fieldId = 'field__fieldId', + field__harvestableIndex = 'field__harvestableIndex', + field__harvestablePods = 'field__harvestablePods', + field__harvestedPods = 'field__harvestedPods', + field__id = 'field__id', + field__lastDailySnapshotDay = 'field__lastDailySnapshotDay', + field__lastHourlySnapshotSeason = 'field__lastHourlySnapshotSeason', + field__numberOfSowers = 'field__numberOfSowers', + field__numberOfSows = 'field__numberOfSows', + field__podIndex = 'field__podIndex', + field__podRate = 'field__podRate', + field__realRateOfReturn = 'field__realRateOfReturn', + field__season = 'field__season', + field__soil = 'field__soil', + field__sownBeans = 'field__sownBeans', + field__temperature = 'field__temperature', + field__unharvestablePods = 'field__unharvestablePods', + field__unmigratedL1Pods = 'field__unmigratedL1Pods', + harvestableIndex = 'harvestableIndex', + harvestablePods = 'harvestablePods', + harvestedPods = 'harvestedPods', + id = 'id', + issuedSoil = 'issuedSoil', + numberOfSowers = 'numberOfSowers', + numberOfSows = 'numberOfSows', + podIndex = 'podIndex', + podRate = 'podRate', + realRateOfReturn = 'realRateOfReturn', + season = 'season', + soil = 'soil', + sownBeans = 'sownBeans', + temperature = 'temperature', + unharvestablePods = 'unharvestablePods', + updatedAt = 'updatedAt' } export type FieldHourlySnapshot = { @@ -1510,6 +1546,8 @@ export type FieldHourlySnapshot = { deltaUnharvestablePods: Scalars['BigInt']['output']; /** Field associated with this snapshot */ field: Field; + /** Numeric identifier of the field */ + fieldId: Scalars['BigInt']['output']; /** Point in time harvestable index */ harvestableIndex: Scalars['BigInt']['output']; /** Point in time harvestable pods */ @@ -1548,10 +1586,10 @@ export type FieldHourlySnapshot = { updatedAt: Scalars['BigInt']['output']; }; -export type FieldHourlySnapshot_Filter = { +export type FieldHourlySnapshotFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; blocksToSoldOutSoil?: InputMaybe; blocksToSoldOutSoil_gt?: InputMaybe; blocksToSoldOutSoil_gte?: InputMaybe; @@ -1721,7 +1759,15 @@ export type FieldHourlySnapshot_Filter = { deltaUnharvestablePods_not?: InputMaybe; deltaUnharvestablePods_not_in?: InputMaybe>; field?: InputMaybe; - field_?: InputMaybe; + fieldId?: InputMaybe; + fieldId_gt?: InputMaybe; + fieldId_gte?: InputMaybe; + fieldId_in?: InputMaybe>; + fieldId_lt?: InputMaybe; + fieldId_lte?: InputMaybe; + fieldId_not?: InputMaybe; + fieldId_not_in?: InputMaybe>; + field_?: InputMaybe; field_contains?: InputMaybe; field_contains_nocase?: InputMaybe; field_ends_with?: InputMaybe; @@ -1797,7 +1843,7 @@ export type FieldHourlySnapshot_Filter = { numberOfSows_lte?: InputMaybe; numberOfSows_not?: InputMaybe; numberOfSows_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; podIndex?: InputMaybe; podIndex_gt?: InputMaybe; podIndex_gte?: InputMaybe; @@ -1884,74 +1930,76 @@ export type FieldHourlySnapshot_Filter = { updatedAt_not_in?: InputMaybe>; }; -export enum FieldHourlySnapshot_OrderBy { - BlocksToSoldOutSoil = 'blocksToSoldOutSoil', - CaseId = 'caseId', - CreatedAt = 'createdAt', - CultivationFactor = 'cultivationFactor', - CultivationTemperature = 'cultivationTemperature', - DeltaCultivationFactor = 'deltaCultivationFactor', - DeltaCultivationTemperature = 'deltaCultivationTemperature', - DeltaHarvestableIndex = 'deltaHarvestableIndex', - DeltaHarvestablePods = 'deltaHarvestablePods', - DeltaHarvestedPods = 'deltaHarvestedPods', - DeltaIssuedSoil = 'deltaIssuedSoil', - DeltaNumberOfSowers = 'deltaNumberOfSowers', - DeltaNumberOfSows = 'deltaNumberOfSows', - DeltaPodDemand = 'deltaPodDemand', - DeltaPodIndex = 'deltaPodIndex', - DeltaPodRate = 'deltaPodRate', - DeltaRealRateOfReturn = 'deltaRealRateOfReturn', - DeltaSoil = 'deltaSoil', - DeltaSownBeans = 'deltaSownBeans', - DeltaTemperature = 'deltaTemperature', - DeltaUnharvestablePods = 'deltaUnharvestablePods', - Field = 'field', - FieldCultivationFactor = 'field__cultivationFactor', - FieldCultivationTemperature = 'field__cultivationTemperature', - FieldHarvestableIndex = 'field__harvestableIndex', - FieldHarvestablePods = 'field__harvestablePods', - FieldHarvestedPods = 'field__harvestedPods', - FieldId = 'field__id', - FieldLastDailySnapshotDay = 'field__lastDailySnapshotDay', - FieldLastHourlySnapshotSeason = 'field__lastHourlySnapshotSeason', - FieldNumberOfSowers = 'field__numberOfSowers', - FieldNumberOfSows = 'field__numberOfSows', - FieldPodIndex = 'field__podIndex', - FieldPodRate = 'field__podRate', - FieldRealRateOfReturn = 'field__realRateOfReturn', - FieldSeason = 'field__season', - FieldSoil = 'field__soil', - FieldSownBeans = 'field__sownBeans', - FieldTemperature = 'field__temperature', - FieldUnharvestablePods = 'field__unharvestablePods', - FieldUnmigratedL1Pods = 'field__unmigratedL1Pods', - HarvestableIndex = 'harvestableIndex', - HarvestablePods = 'harvestablePods', - HarvestedPods = 'harvestedPods', - Id = 'id', - IssuedSoil = 'issuedSoil', - NumberOfSowers = 'numberOfSowers', - NumberOfSows = 'numberOfSows', - PodIndex = 'podIndex', - PodRate = 'podRate', - RealRateOfReturn = 'realRateOfReturn', - Season = 'season', - SeasonBlock = 'seasonBlock', - Soil = 'soil', - SoilSoldOut = 'soilSoldOut', - SownBeans = 'sownBeans', - Temperature = 'temperature', - UnharvestablePods = 'unharvestablePods', - UpdatedAt = 'updatedAt' +export enum FieldHourlySnapshotOrderBy { + blocksToSoldOutSoil = 'blocksToSoldOutSoil', + caseId = 'caseId', + createdAt = 'createdAt', + cultivationFactor = 'cultivationFactor', + cultivationTemperature = 'cultivationTemperature', + deltaCultivationFactor = 'deltaCultivationFactor', + deltaCultivationTemperature = 'deltaCultivationTemperature', + deltaHarvestableIndex = 'deltaHarvestableIndex', + deltaHarvestablePods = 'deltaHarvestablePods', + deltaHarvestedPods = 'deltaHarvestedPods', + deltaIssuedSoil = 'deltaIssuedSoil', + deltaNumberOfSowers = 'deltaNumberOfSowers', + deltaNumberOfSows = 'deltaNumberOfSows', + deltaPodDemand = 'deltaPodDemand', + deltaPodIndex = 'deltaPodIndex', + deltaPodRate = 'deltaPodRate', + deltaRealRateOfReturn = 'deltaRealRateOfReturn', + deltaSoil = 'deltaSoil', + deltaSownBeans = 'deltaSownBeans', + deltaTemperature = 'deltaTemperature', + deltaUnharvestablePods = 'deltaUnharvestablePods', + field = 'field', + fieldId = 'fieldId', + field__cultivationFactor = 'field__cultivationFactor', + field__cultivationTemperature = 'field__cultivationTemperature', + field__fieldId = 'field__fieldId', + field__harvestableIndex = 'field__harvestableIndex', + field__harvestablePods = 'field__harvestablePods', + field__harvestedPods = 'field__harvestedPods', + field__id = 'field__id', + field__lastDailySnapshotDay = 'field__lastDailySnapshotDay', + field__lastHourlySnapshotSeason = 'field__lastHourlySnapshotSeason', + field__numberOfSowers = 'field__numberOfSowers', + field__numberOfSows = 'field__numberOfSows', + field__podIndex = 'field__podIndex', + field__podRate = 'field__podRate', + field__realRateOfReturn = 'field__realRateOfReturn', + field__season = 'field__season', + field__soil = 'field__soil', + field__sownBeans = 'field__sownBeans', + field__temperature = 'field__temperature', + field__unharvestablePods = 'field__unharvestablePods', + field__unmigratedL1Pods = 'field__unmigratedL1Pods', + harvestableIndex = 'harvestableIndex', + harvestablePods = 'harvestablePods', + harvestedPods = 'harvestedPods', + id = 'id', + issuedSoil = 'issuedSoil', + numberOfSowers = 'numberOfSowers', + numberOfSows = 'numberOfSows', + podIndex = 'podIndex', + podRate = 'podRate', + realRateOfReturn = 'realRateOfReturn', + season = 'season', + seasonBlock = 'seasonBlock', + soil = 'soil', + soilSoldOut = 'soilSoldOut', + sownBeans = 'sownBeans', + temperature = 'temperature', + unharvestablePods = 'unharvestablePods', + updatedAt = 'updatedAt' } -export type Field_Filter = { +export type FieldFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; beanstalk?: InputMaybe; - beanstalk_?: InputMaybe; + beanstalk_?: InputMaybe; beanstalk_contains?: InputMaybe; beanstalk_contains_nocase?: InputMaybe; beanstalk_ends_with?: InputMaybe; @@ -1987,9 +2035,9 @@ export type Field_Filter = { cultivationTemperature_lte?: InputMaybe; cultivationTemperature_not?: InputMaybe; cultivationTemperature_not_in?: InputMaybe>; - dailySnapshots_?: InputMaybe; + dailySnapshots_?: InputMaybe; farmer?: InputMaybe; - farmer_?: InputMaybe; + farmer_?: InputMaybe; farmer_contains?: InputMaybe; farmer_contains_nocase?: InputMaybe; farmer_ends_with?: InputMaybe; @@ -2009,6 +2057,14 @@ export type Field_Filter = { farmer_not_starts_with_nocase?: InputMaybe; farmer_starts_with?: InputMaybe; farmer_starts_with_nocase?: InputMaybe; + fieldId?: InputMaybe; + fieldId_gt?: InputMaybe; + fieldId_gte?: InputMaybe; + fieldId_in?: InputMaybe>; + fieldId_lt?: InputMaybe; + fieldId_lte?: InputMaybe; + fieldId_not?: InputMaybe; + fieldId_not_in?: InputMaybe>; harvestableIndex?: InputMaybe; harvestableIndex_gt?: InputMaybe; harvestableIndex_gte?: InputMaybe; @@ -2033,17 +2089,15 @@ export type Field_Filter = { harvestedPods_lte?: InputMaybe; harvestedPods_not?: InputMaybe; harvestedPods_not_in?: InputMaybe>; - hourlySnapshots_?: InputMaybe; - id?: InputMaybe; - id_contains?: InputMaybe; - id_gt?: InputMaybe; - id_gte?: InputMaybe; - id_in?: InputMaybe>; - id_lt?: InputMaybe; - id_lte?: InputMaybe; - id_not?: InputMaybe; - id_not_contains?: InputMaybe; - id_not_in?: InputMaybe>; + hourlySnapshots_?: 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>; lastDailySnapshotDay?: InputMaybe; lastDailySnapshotDay_gt?: InputMaybe; lastDailySnapshotDay_gte?: InputMaybe; @@ -2076,7 +2130,7 @@ export type Field_Filter = { numberOfSows_lte?: InputMaybe; numberOfSows_not?: InputMaybe; numberOfSows_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; plotIndexes?: InputMaybe>; plotIndexes_contains?: InputMaybe>; plotIndexes_contains_nocase?: InputMaybe>; @@ -2157,37 +2211,40 @@ export type Field_Filter = { unmigratedL1Pods_not_in?: InputMaybe>; }; -export enum Field_OrderBy { - Beanstalk = 'beanstalk', - BeanstalkFertilizer1155 = 'beanstalk__fertilizer1155', - BeanstalkId = 'beanstalk__id', - BeanstalkLastSeason = 'beanstalk__lastSeason', - BeanstalkToken = 'beanstalk__token', - CultivationFactor = 'cultivationFactor', - CultivationTemperature = 'cultivationTemperature', - DailySnapshots = 'dailySnapshots', - Farmer = 'farmer', - FarmerCreationBlock = 'farmer__creationBlock', - FarmerId = 'farmer__id', - HarvestableIndex = 'harvestableIndex', - HarvestablePods = 'harvestablePods', - HarvestedPods = 'harvestedPods', - HourlySnapshots = 'hourlySnapshots', - Id = 'id', - LastDailySnapshotDay = 'lastDailySnapshotDay', - LastHourlySnapshotSeason = 'lastHourlySnapshotSeason', - NumberOfSowers = 'numberOfSowers', - NumberOfSows = 'numberOfSows', - PlotIndexes = 'plotIndexes', - PodIndex = 'podIndex', - PodRate = 'podRate', - RealRateOfReturn = 'realRateOfReturn', - Season = 'season', - Soil = 'soil', - SownBeans = 'sownBeans', - Temperature = 'temperature', - UnharvestablePods = 'unharvestablePods', - UnmigratedL1Pods = 'unmigratedL1Pods' +export enum FieldOrderBy { + beanstalk = 'beanstalk', + beanstalk__fertilizer1155 = 'beanstalk__fertilizer1155', + beanstalk__id = 'beanstalk__id', + beanstalk__lastSeason = 'beanstalk__lastSeason', + beanstalk__token = 'beanstalk__token', + cultivationFactor = 'cultivationFactor', + cultivationTemperature = 'cultivationTemperature', + dailySnapshots = 'dailySnapshots', + farmer = 'farmer', + farmer__creationBlock = 'farmer__creationBlock', + farmer__id = 'farmer__id', + farmer__refereeCount = 'farmer__refereeCount', + farmer__totalReferralRewardPodsReceived = 'farmer__totalReferralRewardPodsReceived', + fieldId = 'fieldId', + harvestableIndex = 'harvestableIndex', + harvestablePods = 'harvestablePods', + harvestedPods = 'harvestedPods', + hourlySnapshots = 'hourlySnapshots', + id = 'id', + lastDailySnapshotDay = 'lastDailySnapshotDay', + lastHourlySnapshotSeason = 'lastHourlySnapshotSeason', + numberOfSowers = 'numberOfSowers', + numberOfSows = 'numberOfSows', + plotIndexes = 'plotIndexes', + podIndex = 'podIndex', + podRate = 'podRate', + realRateOfReturn = 'realRateOfReturn', + season = 'season', + soil = 'soil', + sownBeans = 'sownBeans', + temperature = 'temperature', + unharvestablePods = 'unharvestablePods', + unmigratedL1Pods = 'unmigratedL1Pods' } export type GaugesInfo = { @@ -2227,19 +2284,19 @@ export type GaugesInfo = { export type GaugesInfoDailySnapshotsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type GaugesInfoHourlySnapshotsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type GaugesInfoDailySnapshot = { @@ -2276,10 +2333,10 @@ export type GaugesInfoDailySnapshot = { updatedAt: Scalars['BigInt']['output']; }; -export type GaugesInfoDailySnapshot_Filter = { +export type GaugesInfoDailySnapshotFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; createdAt?: InputMaybe; createdAt_gt?: InputMaybe; createdAt_gte?: InputMaybe; @@ -2425,7 +2482,7 @@ export type GaugesInfoDailySnapshot_Filter = { g2MaxTwaDeltaB_not?: InputMaybe; g2MaxTwaDeltaB_not_in?: InputMaybe>; gaugesInfo?: InputMaybe; - gaugesInfo_?: InputMaybe; + gaugesInfo_?: InputMaybe; gaugesInfo_contains?: InputMaybe; gaugesInfo_contains_nocase?: InputMaybe; gaugesInfo_ends_with?: InputMaybe; @@ -2453,7 +2510,7 @@ export type GaugesInfoDailySnapshot_Filter = { id_lte?: InputMaybe; id_not?: InputMaybe; id_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; season?: InputMaybe; season_gt?: InputMaybe; season_gte?: InputMaybe; @@ -2472,45 +2529,45 @@ export type GaugesInfoDailySnapshot_Filter = { updatedAt_not_in?: InputMaybe>; }; -export enum GaugesInfoDailySnapshot_OrderBy { - CreatedAt = 'createdAt', - DeltaG0CultivationFactor = 'deltaG0CultivationFactor', - DeltaG0IsActive = 'deltaG0IsActive', - DeltaG1BlightFactor = 'deltaG1BlightFactor', - DeltaG1ConvertDownPenalty = 'deltaG1ConvertDownPenalty', - DeltaG1IsActive = 'deltaG1IsActive', - DeltaG2BdvConvertedThisSeason = 'deltaG2BdvConvertedThisSeason', - DeltaG2BonusStalkPerBdv = 'deltaG2BonusStalkPerBdv', - DeltaG2IsActive = 'deltaG2IsActive', - DeltaG2MaxConvertCapacity = 'deltaG2MaxConvertCapacity', - DeltaG2MaxTwaDeltaB = 'deltaG2MaxTwaDeltaB', - G0CultivationFactor = 'g0CultivationFactor', - G0IsActive = 'g0IsActive', - G1BlightFactor = 'g1BlightFactor', - G1ConvertDownPenalty = 'g1ConvertDownPenalty', - G1IsActive = 'g1IsActive', - G2BdvConvertedThisSeason = 'g2BdvConvertedThisSeason', - G2BonusStalkPerBdv = 'g2BonusStalkPerBdv', - G2IsActive = 'g2IsActive', - G2MaxConvertCapacity = 'g2MaxConvertCapacity', - G2MaxTwaDeltaB = 'g2MaxTwaDeltaB', - GaugesInfo = 'gaugesInfo', - GaugesInfoG0CultivationFactor = 'gaugesInfo__g0CultivationFactor', - GaugesInfoG0IsActive = 'gaugesInfo__g0IsActive', - GaugesInfoG1BlightFactor = 'gaugesInfo__g1BlightFactor', - GaugesInfoG1ConvertDownPenalty = 'gaugesInfo__g1ConvertDownPenalty', - GaugesInfoG1IsActive = 'gaugesInfo__g1IsActive', - GaugesInfoG2BdvConvertedThisSeason = 'gaugesInfo__g2BdvConvertedThisSeason', - GaugesInfoG2BonusStalkPerBdv = 'gaugesInfo__g2BonusStalkPerBdv', - GaugesInfoG2IsActive = 'gaugesInfo__g2IsActive', - GaugesInfoG2MaxConvertCapacity = 'gaugesInfo__g2MaxConvertCapacity', - GaugesInfoG2MaxTwaDeltaB = 'gaugesInfo__g2MaxTwaDeltaB', - GaugesInfoId = 'gaugesInfo__id', - GaugesInfoLastDailySnapshotDay = 'gaugesInfo__lastDailySnapshotDay', - GaugesInfoLastHourlySnapshotSeason = 'gaugesInfo__lastHourlySnapshotSeason', - Id = 'id', - Season = 'season', - UpdatedAt = 'updatedAt' +export enum GaugesInfoDailySnapshotOrderBy { + createdAt = 'createdAt', + deltaG0CultivationFactor = 'deltaG0CultivationFactor', + deltaG0IsActive = 'deltaG0IsActive', + deltaG1BlightFactor = 'deltaG1BlightFactor', + deltaG1ConvertDownPenalty = 'deltaG1ConvertDownPenalty', + deltaG1IsActive = 'deltaG1IsActive', + deltaG2BdvConvertedThisSeason = 'deltaG2BdvConvertedThisSeason', + deltaG2BonusStalkPerBdv = 'deltaG2BonusStalkPerBdv', + deltaG2IsActive = 'deltaG2IsActive', + deltaG2MaxConvertCapacity = 'deltaG2MaxConvertCapacity', + deltaG2MaxTwaDeltaB = 'deltaG2MaxTwaDeltaB', + g0CultivationFactor = 'g0CultivationFactor', + g0IsActive = 'g0IsActive', + g1BlightFactor = 'g1BlightFactor', + g1ConvertDownPenalty = 'g1ConvertDownPenalty', + g1IsActive = 'g1IsActive', + g2BdvConvertedThisSeason = 'g2BdvConvertedThisSeason', + g2BonusStalkPerBdv = 'g2BonusStalkPerBdv', + g2IsActive = 'g2IsActive', + g2MaxConvertCapacity = 'g2MaxConvertCapacity', + g2MaxTwaDeltaB = 'g2MaxTwaDeltaB', + gaugesInfo = 'gaugesInfo', + gaugesInfo__g0CultivationFactor = 'gaugesInfo__g0CultivationFactor', + gaugesInfo__g0IsActive = 'gaugesInfo__g0IsActive', + gaugesInfo__g1BlightFactor = 'gaugesInfo__g1BlightFactor', + gaugesInfo__g1ConvertDownPenalty = 'gaugesInfo__g1ConvertDownPenalty', + gaugesInfo__g1IsActive = 'gaugesInfo__g1IsActive', + gaugesInfo__g2BdvConvertedThisSeason = 'gaugesInfo__g2BdvConvertedThisSeason', + gaugesInfo__g2BonusStalkPerBdv = 'gaugesInfo__g2BonusStalkPerBdv', + gaugesInfo__g2IsActive = 'gaugesInfo__g2IsActive', + gaugesInfo__g2MaxConvertCapacity = 'gaugesInfo__g2MaxConvertCapacity', + gaugesInfo__g2MaxTwaDeltaB = 'gaugesInfo__g2MaxTwaDeltaB', + gaugesInfo__id = 'gaugesInfo__id', + gaugesInfo__lastDailySnapshotDay = 'gaugesInfo__lastDailySnapshotDay', + gaugesInfo__lastHourlySnapshotSeason = 'gaugesInfo__lastHourlySnapshotSeason', + id = 'id', + season = 'season', + updatedAt = 'updatedAt' } export type GaugesInfoHourlySnapshot = { @@ -2547,10 +2604,10 @@ export type GaugesInfoHourlySnapshot = { updatedAt: Scalars['BigInt']['output']; }; -export type GaugesInfoHourlySnapshot_Filter = { +export type GaugesInfoHourlySnapshotFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; createdAt?: InputMaybe; createdAt_gt?: InputMaybe; createdAt_gte?: InputMaybe; @@ -2696,7 +2753,7 @@ export type GaugesInfoHourlySnapshot_Filter = { g2MaxTwaDeltaB_not?: InputMaybe; g2MaxTwaDeltaB_not_in?: InputMaybe>; gaugesInfo?: InputMaybe; - gaugesInfo_?: InputMaybe; + gaugesInfo_?: InputMaybe; gaugesInfo_contains?: InputMaybe; gaugesInfo_contains_nocase?: InputMaybe; gaugesInfo_ends_with?: InputMaybe; @@ -2724,7 +2781,7 @@ export type GaugesInfoHourlySnapshot_Filter = { id_lte?: InputMaybe; id_not?: InputMaybe; id_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; season?: InputMaybe; season_gt?: InputMaybe; season_gte?: InputMaybe; @@ -2743,52 +2800,52 @@ export type GaugesInfoHourlySnapshot_Filter = { updatedAt_not_in?: InputMaybe>; }; -export enum GaugesInfoHourlySnapshot_OrderBy { - CreatedAt = 'createdAt', - DeltaG0CultivationFactor = 'deltaG0CultivationFactor', - DeltaG0IsActive = 'deltaG0IsActive', - DeltaG1BlightFactor = 'deltaG1BlightFactor', - DeltaG1ConvertDownPenalty = 'deltaG1ConvertDownPenalty', - DeltaG1IsActive = 'deltaG1IsActive', - DeltaG2BdvConvertedThisSeason = 'deltaG2BdvConvertedThisSeason', - DeltaG2BonusStalkPerBdv = 'deltaG2BonusStalkPerBdv', - DeltaG2IsActive = 'deltaG2IsActive', - DeltaG2MaxConvertCapacity = 'deltaG2MaxConvertCapacity', - DeltaG2MaxTwaDeltaB = 'deltaG2MaxTwaDeltaB', - G0CultivationFactor = 'g0CultivationFactor', - G0IsActive = 'g0IsActive', - G1BlightFactor = 'g1BlightFactor', - G1ConvertDownPenalty = 'g1ConvertDownPenalty', - G1IsActive = 'g1IsActive', - G2BdvConvertedThisSeason = 'g2BdvConvertedThisSeason', - G2BonusStalkPerBdv = 'g2BonusStalkPerBdv', - G2IsActive = 'g2IsActive', - G2MaxConvertCapacity = 'g2MaxConvertCapacity', - G2MaxTwaDeltaB = 'g2MaxTwaDeltaB', - GaugesInfo = 'gaugesInfo', - GaugesInfoG0CultivationFactor = 'gaugesInfo__g0CultivationFactor', - GaugesInfoG0IsActive = 'gaugesInfo__g0IsActive', - GaugesInfoG1BlightFactor = 'gaugesInfo__g1BlightFactor', - GaugesInfoG1ConvertDownPenalty = 'gaugesInfo__g1ConvertDownPenalty', - GaugesInfoG1IsActive = 'gaugesInfo__g1IsActive', - GaugesInfoG2BdvConvertedThisSeason = 'gaugesInfo__g2BdvConvertedThisSeason', - GaugesInfoG2BonusStalkPerBdv = 'gaugesInfo__g2BonusStalkPerBdv', - GaugesInfoG2IsActive = 'gaugesInfo__g2IsActive', - GaugesInfoG2MaxConvertCapacity = 'gaugesInfo__g2MaxConvertCapacity', - GaugesInfoG2MaxTwaDeltaB = 'gaugesInfo__g2MaxTwaDeltaB', - GaugesInfoId = 'gaugesInfo__id', - GaugesInfoLastDailySnapshotDay = 'gaugesInfo__lastDailySnapshotDay', - GaugesInfoLastHourlySnapshotSeason = 'gaugesInfo__lastHourlySnapshotSeason', - Id = 'id', - Season = 'season', - UpdatedAt = 'updatedAt' +export enum GaugesInfoHourlySnapshotOrderBy { + createdAt = 'createdAt', + deltaG0CultivationFactor = 'deltaG0CultivationFactor', + deltaG0IsActive = 'deltaG0IsActive', + deltaG1BlightFactor = 'deltaG1BlightFactor', + deltaG1ConvertDownPenalty = 'deltaG1ConvertDownPenalty', + deltaG1IsActive = 'deltaG1IsActive', + deltaG2BdvConvertedThisSeason = 'deltaG2BdvConvertedThisSeason', + deltaG2BonusStalkPerBdv = 'deltaG2BonusStalkPerBdv', + deltaG2IsActive = 'deltaG2IsActive', + deltaG2MaxConvertCapacity = 'deltaG2MaxConvertCapacity', + deltaG2MaxTwaDeltaB = 'deltaG2MaxTwaDeltaB', + g0CultivationFactor = 'g0CultivationFactor', + g0IsActive = 'g0IsActive', + g1BlightFactor = 'g1BlightFactor', + g1ConvertDownPenalty = 'g1ConvertDownPenalty', + g1IsActive = 'g1IsActive', + g2BdvConvertedThisSeason = 'g2BdvConvertedThisSeason', + g2BonusStalkPerBdv = 'g2BonusStalkPerBdv', + g2IsActive = 'g2IsActive', + g2MaxConvertCapacity = 'g2MaxConvertCapacity', + g2MaxTwaDeltaB = 'g2MaxTwaDeltaB', + gaugesInfo = 'gaugesInfo', + gaugesInfo__g0CultivationFactor = 'gaugesInfo__g0CultivationFactor', + gaugesInfo__g0IsActive = 'gaugesInfo__g0IsActive', + gaugesInfo__g1BlightFactor = 'gaugesInfo__g1BlightFactor', + gaugesInfo__g1ConvertDownPenalty = 'gaugesInfo__g1ConvertDownPenalty', + gaugesInfo__g1IsActive = 'gaugesInfo__g1IsActive', + gaugesInfo__g2BdvConvertedThisSeason = 'gaugesInfo__g2BdvConvertedThisSeason', + gaugesInfo__g2BonusStalkPerBdv = 'gaugesInfo__g2BonusStalkPerBdv', + gaugesInfo__g2IsActive = 'gaugesInfo__g2IsActive', + gaugesInfo__g2MaxConvertCapacity = 'gaugesInfo__g2MaxConvertCapacity', + gaugesInfo__g2MaxTwaDeltaB = 'gaugesInfo__g2MaxTwaDeltaB', + gaugesInfo__id = 'gaugesInfo__id', + gaugesInfo__lastDailySnapshotDay = 'gaugesInfo__lastDailySnapshotDay', + gaugesInfo__lastHourlySnapshotSeason = 'gaugesInfo__lastHourlySnapshotSeason', + id = 'id', + season = 'season', + updatedAt = 'updatedAt' } -export type GaugesInfo_Filter = { +export type GaugesInfoFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; - dailySnapshots_?: InputMaybe; + and?: InputMaybe>>; + dailySnapshots_?: InputMaybe; g0CultivationFactor?: InputMaybe; g0CultivationFactor_gt?: InputMaybe; g0CultivationFactor_gte?: InputMaybe; @@ -2857,7 +2914,7 @@ export type GaugesInfo_Filter = { g2MaxTwaDeltaB_lte?: InputMaybe; g2MaxTwaDeltaB_not?: InputMaybe; g2MaxTwaDeltaB_not_in?: InputMaybe>; - hourlySnapshots_?: InputMaybe; + hourlySnapshots_?: InputMaybe; id?: InputMaybe; id_gt?: InputMaybe; id_gte?: InputMaybe; @@ -2882,25 +2939,25 @@ export type GaugesInfo_Filter = { lastHourlySnapshotSeason_lte?: InputMaybe; lastHourlySnapshotSeason_not?: InputMaybe; lastHourlySnapshotSeason_not_in?: InputMaybe>; - or?: InputMaybe>>; -}; - -export enum GaugesInfo_OrderBy { - DailySnapshots = 'dailySnapshots', - G0CultivationFactor = 'g0CultivationFactor', - G0IsActive = 'g0IsActive', - G1BlightFactor = 'g1BlightFactor', - G1ConvertDownPenalty = 'g1ConvertDownPenalty', - G1IsActive = 'g1IsActive', - G2BdvConvertedThisSeason = 'g2BdvConvertedThisSeason', - G2BonusStalkPerBdv = 'g2BonusStalkPerBdv', - G2IsActive = 'g2IsActive', - G2MaxConvertCapacity = 'g2MaxConvertCapacity', - G2MaxTwaDeltaB = 'g2MaxTwaDeltaB', - HourlySnapshots = 'hourlySnapshots', - Id = 'id', - LastDailySnapshotDay = 'lastDailySnapshotDay', - LastHourlySnapshotSeason = 'lastHourlySnapshotSeason' + or?: InputMaybe>>; +}; + +export enum GaugesInfoOrderBy { + dailySnapshots = 'dailySnapshots', + g0CultivationFactor = 'g0CultivationFactor', + g0IsActive = 'g0IsActive', + g1BlightFactor = 'g1BlightFactor', + g1ConvertDownPenalty = 'g1ConvertDownPenalty', + g1IsActive = 'g1IsActive', + g2BdvConvertedThisSeason = 'g2BdvConvertedThisSeason', + g2BonusStalkPerBdv = 'g2BonusStalkPerBdv', + g2IsActive = 'g2IsActive', + g2MaxConvertCapacity = 'g2MaxConvertCapacity', + g2MaxTwaDeltaB = 'g2MaxTwaDeltaB', + hourlySnapshots = 'hourlySnapshots', + id = 'id', + lastDailySnapshotDay = 'lastDailySnapshotDay', + lastHourlySnapshotSeason = 'lastHourlySnapshotSeason' } export type Germinating = { @@ -2923,7 +2980,7 @@ export type Germinating = { type: Scalars['String']['output']; }; -export type Germinating_Filter = { +export type GerminatingFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; address?: InputMaybe; @@ -2936,7 +2993,7 @@ export type Germinating_Filter = { address_not?: InputMaybe; address_not_contains?: InputMaybe; address_not_in?: InputMaybe>; - and?: InputMaybe>>; + and?: InputMaybe>>; bdv?: InputMaybe; bdv_gt?: InputMaybe; bdv_gte?: InputMaybe; @@ -2957,7 +3014,7 @@ export type Germinating_Filter = { isFarmer_in?: InputMaybe>; isFarmer_not?: InputMaybe; isFarmer_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; season?: InputMaybe; season_gt?: InputMaybe; season_gte?: InputMaybe; @@ -3004,15 +3061,15 @@ export type Germinating_Filter = { type_starts_with_nocase?: InputMaybe; }; -export enum Germinating_OrderBy { - Address = 'address', - Bdv = 'bdv', - Id = 'id', - IsFarmer = 'isFarmer', - Season = 'season', - Stalk = 'stalk', - TokenAmount = 'tokenAmount', - Type = 'type' +export enum GerminatingOrderBy { + address = 'address', + bdv = 'bdv', + id = 'id', + isFarmer = 'isFarmer', + season = 'season', + stalk = 'stalk', + tokenAmount = 'tokenAmount', + type = 'type' } export type MarketPerformanceSeasonal = { @@ -3057,10 +3114,10 @@ export type MarketPerformanceSeasonal = { valid: Scalars['Boolean']['output']; }; -export type MarketPerformanceSeasonal_Filter = { +export type MarketPerformanceSeasonalFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; cumulativePercentChange?: InputMaybe>; cumulativePercentChange_contains?: InputMaybe>; cumulativePercentChange_contains_nocase?: InputMaybe>; @@ -3097,7 +3154,7 @@ export type MarketPerformanceSeasonal_Filter = { id_lte?: InputMaybe; id_not?: InputMaybe; id_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; percentChange?: InputMaybe>; percentChange_contains?: InputMaybe>; percentChange_contains_nocase?: InputMaybe>; @@ -3139,7 +3196,7 @@ export type MarketPerformanceSeasonal_Filter = { season_not?: InputMaybe; season_not_in?: InputMaybe>; silo?: InputMaybe; - silo_?: InputMaybe; + silo_?: InputMaybe; silo_contains?: InputMaybe; silo_contains_nocase?: InputMaybe; silo_ends_with?: InputMaybe; @@ -3215,59 +3272,59 @@ export type MarketPerformanceSeasonal_Filter = { valid_not_in?: InputMaybe>; }; -export enum MarketPerformanceSeasonal_OrderBy { - CumulativePercentChange = 'cumulativePercentChange', - CumulativeTotalPercentChange = 'cumulativeTotalPercentChange', - CumulativeTotalUsdChange = 'cumulativeTotalUsdChange', - CumulativeUsdChange = 'cumulativeUsdChange', - Id = 'id', - PercentChange = 'percentChange', - PrevSeasonTokenBalances = 'prevSeasonTokenBalances', - PrevSeasonTokenUsdPrices = 'prevSeasonTokenUsdPrices', - PrevSeasonTokenUsdValues = 'prevSeasonTokenUsdValues', - PrevSeasonTotalUsd = 'prevSeasonTotalUsd', - Season = 'season', - Silo = 'silo', - SiloActiveFarmers = 'silo__activeFarmers', - SiloAvgConvertDownPenalty = 'silo__avgConvertDownPenalty', - SiloAvgGrownStalkPerBdvPerSeason = 'silo__avgGrownStalkPerBdvPerSeason', - SiloBeanMints = 'silo__beanMints', - SiloBeanToMaxLpGpPerBdvRatio = 'silo__beanToMaxLpGpPerBdvRatio', - SiloBonusStalkConvertUp = 'silo__bonusStalkConvertUp', - SiloConvertDownPenalty = 'silo__convertDownPenalty', - SiloCropRatio = 'silo__cropRatio', - SiloDepositedBdv = 'silo__depositedBDV', - SiloGerminatingStalk = 'silo__germinatingStalk', - SiloGrownStalkPerSeason = 'silo__grownStalkPerSeason', - SiloId = 'silo__id', - SiloLastDailySnapshotDay = 'silo__lastDailySnapshotDay', - SiloLastHourlySnapshotSeason = 'silo__lastHourlySnapshotSeason', - SiloPenalizedStalkConvertDown = 'silo__penalizedStalkConvertDown', - SiloPlantableStalk = 'silo__plantableStalk', - SiloPlantedBeans = 'silo__plantedBeans', - SiloRoots = 'silo__roots', - SiloStalk = 'silo__stalk', - SiloTotalBdvConvertUp = 'silo__totalBdvConvertUp', - SiloTotalBdvConvertUpBonus = 'silo__totalBdvConvertUpBonus', - SiloUnmigratedL1DepositedBdv = 'silo__unmigratedL1DepositedBdv', - SiloUnpenalizedStalkConvertDown = 'silo__unpenalizedStalkConvertDown', - ThisSeasonTokenUsdPrices = 'thisSeasonTokenUsdPrices', - ThisSeasonTokenUsdValues = 'thisSeasonTokenUsdValues', - ThisSeasonTotalUsd = 'thisSeasonTotalUsd', - Timestamp = 'timestamp', - TotalPercentChange = 'totalPercentChange', - TotalUsdChange = 'totalUsdChange', - UsdChange = 'usdChange', - Valid = 'valid' +export enum MarketPerformanceSeasonalOrderBy { + cumulativePercentChange = 'cumulativePercentChange', + cumulativeTotalPercentChange = 'cumulativeTotalPercentChange', + cumulativeTotalUsdChange = 'cumulativeTotalUsdChange', + cumulativeUsdChange = 'cumulativeUsdChange', + id = 'id', + percentChange = 'percentChange', + prevSeasonTokenBalances = 'prevSeasonTokenBalances', + prevSeasonTokenUsdPrices = 'prevSeasonTokenUsdPrices', + prevSeasonTokenUsdValues = 'prevSeasonTokenUsdValues', + prevSeasonTotalUsd = 'prevSeasonTotalUsd', + season = 'season', + silo = 'silo', + silo__activeFarmers = 'silo__activeFarmers', + silo__avgConvertDownPenalty = 'silo__avgConvertDownPenalty', + silo__avgGrownStalkPerBdvPerSeason = 'silo__avgGrownStalkPerBdvPerSeason', + silo__beanMints = 'silo__beanMints', + silo__beanToMaxLpGpPerBdvRatio = 'silo__beanToMaxLpGpPerBdvRatio', + silo__bonusStalkConvertUp = 'silo__bonusStalkConvertUp', + silo__convertDownPenalty = 'silo__convertDownPenalty', + silo__cropRatio = 'silo__cropRatio', + silo__depositedBDV = 'silo__depositedBDV', + silo__germinatingStalk = 'silo__germinatingStalk', + silo__grownStalkPerSeason = 'silo__grownStalkPerSeason', + silo__id = 'silo__id', + silo__lastDailySnapshotDay = 'silo__lastDailySnapshotDay', + silo__lastHourlySnapshotSeason = 'silo__lastHourlySnapshotSeason', + silo__penalizedStalkConvertDown = 'silo__penalizedStalkConvertDown', + silo__plantableStalk = 'silo__plantableStalk', + silo__plantedBeans = 'silo__plantedBeans', + silo__roots = 'silo__roots', + silo__stalk = 'silo__stalk', + silo__totalBdvConvertUp = 'silo__totalBdvConvertUp', + silo__totalBdvConvertUpBonus = 'silo__totalBdvConvertUpBonus', + silo__unmigratedL1DepositedBdv = 'silo__unmigratedL1DepositedBdv', + silo__unpenalizedStalkConvertDown = 'silo__unpenalizedStalkConvertDown', + thisSeasonTokenUsdPrices = 'thisSeasonTokenUsdPrices', + thisSeasonTokenUsdValues = 'thisSeasonTokenUsdValues', + thisSeasonTotalUsd = 'thisSeasonTotalUsd', + timestamp = 'timestamp', + totalPercentChange = 'totalPercentChange', + totalUsdChange = 'totalUsdChange', + usdChange = 'usdChange', + valid = 'valid' } export enum MarketStatus { - Active = 'ACTIVE', - Cancelled = 'CANCELLED', - CancelledPartial = 'CANCELLED_PARTIAL', - Expired = 'EXPIRED', - Filled = 'FILLED', - FilledPartial = 'FILLED_PARTIAL' + ACTIVE = 'ACTIVE', + CANCELLED = 'CANCELLED', + CANCELLED_PARTIAL = 'CANCELLED_PARTIAL', + EXPIRED = 'EXPIRED', + FILLED = 'FILLED', + FILLED_PARTIAL = 'FILLED_PARTIAL' } export type MarketplaceEvent = { @@ -3283,10 +3340,10 @@ export type MarketplaceEvent = { logIndex: Scalars['Int']['output']; }; -export type MarketplaceEvent_Filter = { +export type MarketplaceEventFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; blockNumber?: InputMaybe; blockNumber_gt?: InputMaybe; blockNumber_gte?: InputMaybe; @@ -3329,21 +3386,21 @@ export type MarketplaceEvent_Filter = { logIndex_lte?: InputMaybe; logIndex_not?: InputMaybe; logIndex_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; }; -export enum MarketplaceEvent_OrderBy { - BlockNumber = 'blockNumber', - CreatedAt = 'createdAt', - Hash = 'hash', - Id = 'id', - LogIndex = 'logIndex' +export enum MarketplaceEventOrderBy { + blockNumber = 'blockNumber', + createdAt = 'createdAt', + hash = 'hash', + id = 'id', + logIndex = 'logIndex' } /** Defines the order direction, either ascending or descending */ export enum OrderDirection { - Asc = 'asc', - Desc = 'desc' + asc = 'asc', + desc = 'desc' } export type Plot = { @@ -3358,6 +3415,8 @@ export type Plot = { farmer: Farmer; /** Field to which this plot belongs */ field: Field; + /** Numeric identifier of the field */ + fieldId: Scalars['BigInt']['output']; /** Flag for if plot is fully harvested */ fullyHarvested: Scalars['Boolean']['output']; /** Timestamp of plot harvest, if it has harvested */ @@ -3368,12 +3427,14 @@ export type Plot = { harvestablePods: Scalars['BigInt']['output']; /** Number of pods harvested */ harvestedPods: Scalars['BigInt']['output']; - /** Plot index */ + /** Plot index when fieldId is 0, otherwise plotIndex:fieldId */ id: Scalars['ID']['output']; /** Plot Index */ index: Scalars['BigInt']['output']; /** The harvestable index at the time the plot was sown or exchanged on the marketplace */ initialHarvestableIndex: Scalars['BigInt']['output']; + /** True if this plot was sown during the morning auction */ + isMorning: Scalars['Boolean']['output']; /** Associated plot listing */ listing?: Maybe; /** Total pods in plot */ @@ -3382,6 +3443,10 @@ export type Plot = { preTransferOwner?: Maybe; /** If `source === 'TRANSFER'`: Source SOW/MARKET of the farmer who acquired the plot. Cannot be TRANSFER. */ preTransferSource?: Maybe; + /** If source === 'REFERRAL': The referee who was referred. */ + referee?: Maybe; + /** If source === 'REFERRAL': The referrer who referred the farmer. */ + referrer?: Maybe; /** Season on entity creation (not sown) */ season: Scalars['Int']['output']; /** Source for this plot */ @@ -3405,17 +3470,18 @@ export type Plot = { }; export enum PlotSource { - ContractReceiverMigrated = 'CONTRACT_RECEIVER_MIGRATED', - Market = 'MARKET', - ReseedMigrated = 'RESEED_MIGRATED', - Sow = 'SOW', - Transfer = 'TRANSFER' + CONTRACT_RECEIVER_MIGRATED = 'CONTRACT_RECEIVER_MIGRATED', + MARKET = 'MARKET', + REFERRAL = 'REFERRAL', + RESEED_MIGRATED = 'RESEED_MIGRATED', + SOW = 'SOW', + TRANSFER = 'TRANSFER' } -export type Plot_Filter = { +export type PlotFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; beansPerPod?: InputMaybe; beansPerPod_gt?: InputMaybe; beansPerPod_gte?: InputMaybe; @@ -3443,7 +3509,7 @@ export type Plot_Filter = { creationHash_not_contains?: InputMaybe; creationHash_not_in?: InputMaybe>; farmer?: InputMaybe; - farmer_?: InputMaybe; + farmer_?: InputMaybe; farmer_contains?: InputMaybe; farmer_contains_nocase?: InputMaybe; farmer_ends_with?: InputMaybe; @@ -3464,7 +3530,15 @@ export type Plot_Filter = { farmer_starts_with?: InputMaybe; farmer_starts_with_nocase?: InputMaybe; field?: InputMaybe; - field_?: InputMaybe; + fieldId?: InputMaybe; + fieldId_gt?: InputMaybe; + fieldId_gte?: InputMaybe; + fieldId_in?: InputMaybe>; + fieldId_lt?: InputMaybe; + fieldId_lte?: InputMaybe; + fieldId_not?: InputMaybe; + fieldId_not_in?: InputMaybe>; + field_?: InputMaybe; field_contains?: InputMaybe; field_contains_nocase?: InputMaybe; field_ends_with?: InputMaybe; @@ -3546,8 +3620,12 @@ export type Plot_Filter = { initialHarvestableIndex_lte?: InputMaybe; initialHarvestableIndex_not?: InputMaybe; initialHarvestableIndex_not_in?: InputMaybe>; + isMorning?: InputMaybe; + isMorning_in?: InputMaybe>; + isMorning_not?: InputMaybe; + isMorning_not_in?: InputMaybe>; listing?: InputMaybe; - listing_?: InputMaybe; + listing_?: InputMaybe; listing_contains?: InputMaybe; listing_contains_nocase?: InputMaybe; listing_ends_with?: InputMaybe; @@ -3567,7 +3645,7 @@ export type Plot_Filter = { listing_not_starts_with_nocase?: InputMaybe; listing_starts_with?: InputMaybe; listing_starts_with_nocase?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe>>; pods?: InputMaybe; pods_gt?: InputMaybe; pods_gte?: InputMaybe; @@ -3577,7 +3655,7 @@ export type Plot_Filter = { pods_not?: InputMaybe; pods_not_in?: InputMaybe>; preTransferOwner?: InputMaybe; - preTransferOwner_?: InputMaybe; + preTransferOwner_?: InputMaybe; preTransferOwner_contains?: InputMaybe; preTransferOwner_contains_nocase?: InputMaybe; preTransferOwner_ends_with?: InputMaybe; @@ -3601,6 +3679,48 @@ export type Plot_Filter = { preTransferSource_in?: InputMaybe>; preTransferSource_not?: InputMaybe; preTransferSource_not_in?: InputMaybe>; + referee?: InputMaybe; + referee_?: InputMaybe; + referee_contains?: InputMaybe; + referee_contains_nocase?: InputMaybe; + referee_ends_with?: InputMaybe; + referee_ends_with_nocase?: InputMaybe; + referee_gt?: InputMaybe; + referee_gte?: InputMaybe; + referee_in?: InputMaybe>; + referee_lt?: InputMaybe; + referee_lte?: InputMaybe; + referee_not?: InputMaybe; + referee_not_contains?: InputMaybe; + referee_not_contains_nocase?: InputMaybe; + referee_not_ends_with?: InputMaybe; + referee_not_ends_with_nocase?: InputMaybe; + referee_not_in?: InputMaybe>; + referee_not_starts_with?: InputMaybe; + referee_not_starts_with_nocase?: InputMaybe; + referee_starts_with?: InputMaybe; + referee_starts_with_nocase?: InputMaybe; + referrer?: InputMaybe; + referrer_?: InputMaybe; + referrer_contains?: InputMaybe; + referrer_contains_nocase?: InputMaybe; + referrer_ends_with?: InputMaybe; + referrer_ends_with_nocase?: InputMaybe; + referrer_gt?: InputMaybe; + referrer_gte?: InputMaybe; + referrer_in?: InputMaybe>; + referrer_lt?: InputMaybe; + referrer_lte?: InputMaybe; + referrer_not?: InputMaybe; + referrer_not_contains?: InputMaybe; + referrer_not_contains_nocase?: InputMaybe; + referrer_not_ends_with?: InputMaybe; + referrer_not_ends_with_nocase?: InputMaybe; + referrer_not_in?: InputMaybe>; + referrer_not_starts_with?: InputMaybe; + referrer_not_starts_with_nocase?: InputMaybe; + referrer_starts_with?: InputMaybe; + referrer_starts_with_nocase?: InputMaybe; season?: InputMaybe; season_gt?: InputMaybe; season_gte?: InputMaybe; @@ -3683,78 +3803,96 @@ export type Plot_Filter = { updatedAt_not_in?: InputMaybe>; }; -export enum Plot_OrderBy { - BeansPerPod = 'beansPerPod', - CreatedAt = 'createdAt', - CreationHash = 'creationHash', - Farmer = 'farmer', - FarmerCreationBlock = 'farmer__creationBlock', - FarmerId = 'farmer__id', - Field = 'field', - FieldCultivationFactor = 'field__cultivationFactor', - FieldCultivationTemperature = 'field__cultivationTemperature', - FieldHarvestableIndex = 'field__harvestableIndex', - FieldHarvestablePods = 'field__harvestablePods', - FieldHarvestedPods = 'field__harvestedPods', - FieldId = 'field__id', - FieldLastDailySnapshotDay = 'field__lastDailySnapshotDay', - FieldLastHourlySnapshotSeason = 'field__lastHourlySnapshotSeason', - FieldNumberOfSowers = 'field__numberOfSowers', - FieldNumberOfSows = 'field__numberOfSows', - FieldPodIndex = 'field__podIndex', - FieldPodRate = 'field__podRate', - FieldRealRateOfReturn = 'field__realRateOfReturn', - FieldSeason = 'field__season', - FieldSoil = 'field__soil', - FieldSownBeans = 'field__sownBeans', - FieldTemperature = 'field__temperature', - FieldUnharvestablePods = 'field__unharvestablePods', - FieldUnmigratedL1Pods = 'field__unmigratedL1Pods', - FullyHarvested = 'fullyHarvested', - HarvestAt = 'harvestAt', - HarvestHash = 'harvestHash', - HarvestablePods = 'harvestablePods', - HarvestedPods = 'harvestedPods', - Id = 'id', - Index = 'index', - InitialHarvestableIndex = 'initialHarvestableIndex', - Listing = 'listing', - ListingAmount = 'listing__amount', - ListingCreatedAt = 'listing__createdAt', - ListingCreationHash = 'listing__creationHash', - ListingFilled = 'listing__filled', - ListingFilledAmount = 'listing__filledAmount', - ListingHistoryId = 'listing__historyID', - ListingId = 'listing__id', - ListingIndex = 'listing__index', - ListingMaxHarvestableIndex = 'listing__maxHarvestableIndex', - ListingMinFillAmount = 'listing__minFillAmount', - ListingMode = 'listing__mode', - ListingOriginalAmount = 'listing__originalAmount', - ListingOriginalIndex = 'listing__originalIndex', - ListingOriginalPlaceInLine = 'listing__originalPlaceInLine', - ListingPricePerPod = 'listing__pricePerPod', - ListingPricingFunction = 'listing__pricingFunction', - ListingPricingType = 'listing__pricingType', - ListingRemainingAmount = 'listing__remainingAmount', - ListingStart = 'listing__start', - ListingStatus = 'listing__status', - ListingUpdatedAt = 'listing__updatedAt', - Pods = 'pods', - PreTransferOwner = 'preTransferOwner', - PreTransferOwnerCreationBlock = 'preTransferOwner__creationBlock', - PreTransferOwnerId = 'preTransferOwner__id', - PreTransferSource = 'preTransferSource', - Season = 'season', - Source = 'source', - SourceHash = 'sourceHash', - SowHash = 'sowHash', - SowSeason = 'sowSeason', - SowTimestamp = 'sowTimestamp', - SownBeansPerPod = 'sownBeansPerPod', - SownInitialHarvestableIndex = 'sownInitialHarvestableIndex', - UpdatedAt = 'updatedAt', - UpdatedAtBlock = 'updatedAtBlock' +export enum PlotOrderBy { + beansPerPod = 'beansPerPod', + createdAt = 'createdAt', + creationHash = 'creationHash', + farmer = 'farmer', + farmer__creationBlock = 'farmer__creationBlock', + farmer__id = 'farmer__id', + farmer__refereeCount = 'farmer__refereeCount', + farmer__totalReferralRewardPodsReceived = 'farmer__totalReferralRewardPodsReceived', + field = 'field', + fieldId = 'fieldId', + field__cultivationFactor = 'field__cultivationFactor', + field__cultivationTemperature = 'field__cultivationTemperature', + field__fieldId = 'field__fieldId', + field__harvestableIndex = 'field__harvestableIndex', + field__harvestablePods = 'field__harvestablePods', + field__harvestedPods = 'field__harvestedPods', + field__id = 'field__id', + field__lastDailySnapshotDay = 'field__lastDailySnapshotDay', + field__lastHourlySnapshotSeason = 'field__lastHourlySnapshotSeason', + field__numberOfSowers = 'field__numberOfSowers', + field__numberOfSows = 'field__numberOfSows', + field__podIndex = 'field__podIndex', + field__podRate = 'field__podRate', + field__realRateOfReturn = 'field__realRateOfReturn', + field__season = 'field__season', + field__soil = 'field__soil', + field__sownBeans = 'field__sownBeans', + field__temperature = 'field__temperature', + field__unharvestablePods = 'field__unharvestablePods', + field__unmigratedL1Pods = 'field__unmigratedL1Pods', + fullyHarvested = 'fullyHarvested', + harvestAt = 'harvestAt', + harvestHash = 'harvestHash', + harvestablePods = 'harvestablePods', + harvestedPods = 'harvestedPods', + id = 'id', + index = 'index', + initialHarvestableIndex = 'initialHarvestableIndex', + isMorning = 'isMorning', + listing = 'listing', + listing__amount = 'listing__amount', + listing__createdAt = 'listing__createdAt', + listing__creationHash = 'listing__creationHash', + listing__fieldId = 'listing__fieldId', + listing__filled = 'listing__filled', + listing__filledAmount = 'listing__filledAmount', + listing__historyID = 'listing__historyID', + listing__id = 'listing__id', + listing__index = 'listing__index', + listing__maxHarvestableIndex = 'listing__maxHarvestableIndex', + listing__minFillAmount = 'listing__minFillAmount', + listing__mode = 'listing__mode', + listing__originalAmount = 'listing__originalAmount', + listing__originalIndex = 'listing__originalIndex', + listing__originalPlaceInLine = 'listing__originalPlaceInLine', + listing__pricePerPod = 'listing__pricePerPod', + listing__pricingFunction = 'listing__pricingFunction', + listing__pricingType = 'listing__pricingType', + listing__remainingAmount = 'listing__remainingAmount', + listing__start = 'listing__start', + listing__status = 'listing__status', + listing__updatedAt = 'listing__updatedAt', + pods = 'pods', + preTransferOwner = 'preTransferOwner', + preTransferOwner__creationBlock = 'preTransferOwner__creationBlock', + preTransferOwner__id = 'preTransferOwner__id', + preTransferOwner__refereeCount = 'preTransferOwner__refereeCount', + preTransferOwner__totalReferralRewardPodsReceived = 'preTransferOwner__totalReferralRewardPodsReceived', + preTransferSource = 'preTransferSource', + referee = 'referee', + referee__creationBlock = 'referee__creationBlock', + referee__id = 'referee__id', + referee__refereeCount = 'referee__refereeCount', + referee__totalReferralRewardPodsReceived = 'referee__totalReferralRewardPodsReceived', + referrer = 'referrer', + referrer__creationBlock = 'referrer__creationBlock', + referrer__id = 'referrer__id', + referrer__refereeCount = 'referrer__refereeCount', + referrer__totalReferralRewardPodsReceived = 'referrer__totalReferralRewardPodsReceived', + season = 'season', + source = 'source', + sourceHash = 'sourceHash', + sowHash = 'sowHash', + sowSeason = 'sowSeason', + sowTimestamp = 'sowTimestamp', + sownBeansPerPod = 'sownBeansPerPod', + sownInitialHarvestableIndex = 'sownInitialHarvestableIndex', + updatedAt = 'updatedAt', + updatedAtBlock = 'updatedAtBlock' } export type PodFill = { @@ -3785,7 +3923,7 @@ export type PodFill = { toFarmer: Farmer; }; -export type PodFill_Filter = { +export type PodFillFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; amount?: InputMaybe; @@ -3796,7 +3934,7 @@ export type PodFill_Filter = { amount_lte?: InputMaybe; amount_not?: InputMaybe; amount_not_in?: InputMaybe>; - and?: InputMaybe>>; + and?: InputMaybe>>; costInBeans?: InputMaybe; costInBeans_gt?: InputMaybe; costInBeans_gte?: InputMaybe; @@ -3814,7 +3952,7 @@ export type PodFill_Filter = { createdAt_not?: InputMaybe; createdAt_not_in?: InputMaybe>; fromFarmer?: InputMaybe; - fromFarmer_?: InputMaybe; + fromFarmer_?: InputMaybe; fromFarmer_contains?: InputMaybe; fromFarmer_contains_nocase?: InputMaybe; fromFarmer_ends_with?: InputMaybe; @@ -3851,7 +3989,7 @@ export type PodFill_Filter = { index_not?: InputMaybe; index_not_in?: InputMaybe>; listing?: InputMaybe; - listing_?: InputMaybe; + listing_?: InputMaybe; listing_contains?: InputMaybe; listing_contains_nocase?: InputMaybe; listing_ends_with?: InputMaybe; @@ -3871,9 +4009,9 @@ export type PodFill_Filter = { listing_not_starts_with_nocase?: InputMaybe; listing_starts_with?: InputMaybe; listing_starts_with_nocase?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe>>; order?: InputMaybe; - order_?: InputMaybe; + order_?: InputMaybe; order_contains?: InputMaybe; order_contains_nocase?: InputMaybe; order_ends_with?: InputMaybe; @@ -3902,7 +4040,7 @@ export type PodFill_Filter = { placeInLine_not?: InputMaybe; placeInLine_not_in?: InputMaybe>; podMarketplace?: InputMaybe; - podMarketplace_?: InputMaybe; + podMarketplace_?: InputMaybe; podMarketplace_contains?: InputMaybe; podMarketplace_contains_nocase?: InputMaybe; podMarketplace_ends_with?: InputMaybe; @@ -3931,7 +4069,7 @@ export type PodFill_Filter = { start_not?: InputMaybe; start_not_in?: InputMaybe>; toFarmer?: InputMaybe; - toFarmer_?: InputMaybe; + toFarmer_?: InputMaybe; toFarmer_contains?: InputMaybe; toFarmer_contains_nocase?: InputMaybe; toFarmer_ends_with?: InputMaybe; @@ -3953,74 +4091,80 @@ export type PodFill_Filter = { toFarmer_starts_with_nocase?: InputMaybe; }; -export enum PodFill_OrderBy { - Amount = 'amount', - CostInBeans = 'costInBeans', - CreatedAt = 'createdAt', - FromFarmer = 'fromFarmer', - FromFarmerCreationBlock = 'fromFarmer__creationBlock', - FromFarmerId = 'fromFarmer__id', - Id = 'id', - Index = 'index', - Listing = 'listing', - ListingAmount = 'listing__amount', - ListingCreatedAt = 'listing__createdAt', - ListingCreationHash = 'listing__creationHash', - ListingFilled = 'listing__filled', - ListingFilledAmount = 'listing__filledAmount', - ListingHistoryId = 'listing__historyID', - ListingId = 'listing__id', - ListingIndex = 'listing__index', - ListingMaxHarvestableIndex = 'listing__maxHarvestableIndex', - ListingMinFillAmount = 'listing__minFillAmount', - ListingMode = 'listing__mode', - ListingOriginalAmount = 'listing__originalAmount', - ListingOriginalIndex = 'listing__originalIndex', - ListingOriginalPlaceInLine = 'listing__originalPlaceInLine', - ListingPricePerPod = 'listing__pricePerPod', - ListingPricingFunction = 'listing__pricingFunction', - ListingPricingType = 'listing__pricingType', - ListingRemainingAmount = 'listing__remainingAmount', - ListingStart = 'listing__start', - ListingStatus = 'listing__status', - ListingUpdatedAt = 'listing__updatedAt', - Order = 'order', - OrderBeanAmount = 'order__beanAmount', - OrderBeanAmountFilled = 'order__beanAmountFilled', - OrderCreatedAt = 'order__createdAt', - OrderCreationHash = 'order__creationHash', - OrderHistoryId = 'order__historyID', - OrderId = 'order__id', - OrderMaxPlaceInLine = 'order__maxPlaceInLine', - OrderMinFillAmount = 'order__minFillAmount', - OrderPodAmountFilled = 'order__podAmountFilled', - OrderPricePerPod = 'order__pricePerPod', - OrderPricingFunction = 'order__pricingFunction', - OrderPricingType = 'order__pricingType', - OrderStatus = 'order__status', - OrderUpdatedAt = 'order__updatedAt', - PlaceInLine = 'placeInLine', - PodMarketplace = 'podMarketplace', - PodMarketplaceAvailableListedPods = 'podMarketplace__availableListedPods', - PodMarketplaceAvailableOrderBeans = 'podMarketplace__availableOrderBeans', - PodMarketplaceBeanVolume = 'podMarketplace__beanVolume', - PodMarketplaceCancelledListedPods = 'podMarketplace__cancelledListedPods', - PodMarketplaceCancelledOrderBeans = 'podMarketplace__cancelledOrderBeans', - PodMarketplaceExpiredListedPods = 'podMarketplace__expiredListedPods', - PodMarketplaceFilledListedPods = 'podMarketplace__filledListedPods', - PodMarketplaceFilledOrderBeans = 'podMarketplace__filledOrderBeans', - PodMarketplaceFilledOrderedPods = 'podMarketplace__filledOrderedPods', - PodMarketplaceId = 'podMarketplace__id', - PodMarketplaceLastDailySnapshotDay = 'podMarketplace__lastDailySnapshotDay', - PodMarketplaceLastHourlySnapshotSeason = 'podMarketplace__lastHourlySnapshotSeason', - PodMarketplaceListedPods = 'podMarketplace__listedPods', - PodMarketplaceOrderBeans = 'podMarketplace__orderBeans', - PodMarketplacePodVolume = 'podMarketplace__podVolume', - PodMarketplaceSeason = 'podMarketplace__season', - Start = 'start', - ToFarmer = 'toFarmer', - ToFarmerCreationBlock = 'toFarmer__creationBlock', - ToFarmerId = 'toFarmer__id' +export enum PodFillOrderBy { + amount = 'amount', + costInBeans = 'costInBeans', + createdAt = 'createdAt', + fromFarmer = 'fromFarmer', + fromFarmer__creationBlock = 'fromFarmer__creationBlock', + fromFarmer__id = 'fromFarmer__id', + fromFarmer__refereeCount = 'fromFarmer__refereeCount', + fromFarmer__totalReferralRewardPodsReceived = 'fromFarmer__totalReferralRewardPodsReceived', + id = 'id', + index = 'index', + listing = 'listing', + listing__amount = 'listing__amount', + listing__createdAt = 'listing__createdAt', + listing__creationHash = 'listing__creationHash', + listing__fieldId = 'listing__fieldId', + listing__filled = 'listing__filled', + listing__filledAmount = 'listing__filledAmount', + listing__historyID = 'listing__historyID', + listing__id = 'listing__id', + listing__index = 'listing__index', + listing__maxHarvestableIndex = 'listing__maxHarvestableIndex', + listing__minFillAmount = 'listing__minFillAmount', + listing__mode = 'listing__mode', + listing__originalAmount = 'listing__originalAmount', + listing__originalIndex = 'listing__originalIndex', + listing__originalPlaceInLine = 'listing__originalPlaceInLine', + listing__pricePerPod = 'listing__pricePerPod', + listing__pricingFunction = 'listing__pricingFunction', + listing__pricingType = 'listing__pricingType', + listing__remainingAmount = 'listing__remainingAmount', + listing__start = 'listing__start', + listing__status = 'listing__status', + listing__updatedAt = 'listing__updatedAt', + order = 'order', + order__beanAmount = 'order__beanAmount', + order__beanAmountFilled = 'order__beanAmountFilled', + order__createdAt = 'order__createdAt', + order__creationHash = 'order__creationHash', + order__fieldId = 'order__fieldId', + order__historyID = 'order__historyID', + order__id = 'order__id', + order__maxPlaceInLine = 'order__maxPlaceInLine', + order__minFillAmount = 'order__minFillAmount', + order__podAmountFilled = 'order__podAmountFilled', + order__pricePerPod = 'order__pricePerPod', + order__pricingFunction = 'order__pricingFunction', + order__pricingType = 'order__pricingType', + order__status = 'order__status', + order__updatedAt = 'order__updatedAt', + placeInLine = 'placeInLine', + podMarketplace = 'podMarketplace', + podMarketplace__availableListedPods = 'podMarketplace__availableListedPods', + podMarketplace__availableOrderBeans = 'podMarketplace__availableOrderBeans', + podMarketplace__beanVolume = 'podMarketplace__beanVolume', + podMarketplace__cancelledListedPods = 'podMarketplace__cancelledListedPods', + podMarketplace__cancelledOrderBeans = 'podMarketplace__cancelledOrderBeans', + podMarketplace__expiredListedPods = 'podMarketplace__expiredListedPods', + podMarketplace__filledListedPods = 'podMarketplace__filledListedPods', + podMarketplace__filledOrderBeans = 'podMarketplace__filledOrderBeans', + podMarketplace__filledOrderedPods = 'podMarketplace__filledOrderedPods', + podMarketplace__id = 'podMarketplace__id', + podMarketplace__lastDailySnapshotDay = 'podMarketplace__lastDailySnapshotDay', + podMarketplace__lastHourlySnapshotSeason = 'podMarketplace__lastHourlySnapshotSeason', + podMarketplace__listedPods = 'podMarketplace__listedPods', + podMarketplace__orderBeans = 'podMarketplace__orderBeans', + podMarketplace__podVolume = 'podMarketplace__podVolume', + podMarketplace__season = 'podMarketplace__season', + start = 'start', + toFarmer = 'toFarmer', + toFarmer__creationBlock = 'toFarmer__creationBlock', + toFarmer__id = 'toFarmer__id', + toFarmer__refereeCount = 'toFarmer__refereeCount', + toFarmer__totalReferralRewardPodsReceived = 'toFarmer__totalReferralRewardPodsReceived' } export type PodListing = { @@ -4029,7 +4173,6 @@ export type PodListing = { * The maximum amount of Pods remaining to be sold by *this* PodListing. * * When this PodListing is Filled or Cancelled, `amount` does NOT change. - * */ amount: Scalars['BigInt']['output']; /** Timestamp of PodListing creation. */ @@ -4038,29 +4181,28 @@ export type PodListing = { creationHash: Scalars['Bytes']['output']; /** The Farmer that created the PodListing. */ farmer: Farmer; + /** Numeric identifier of the field for this listing */ + fieldId: Scalars['BigInt']['output']; /** Any Fills associated with this PodListing. */ fill?: Maybe; /** * The amount of Pods Filled since the initial PodListing was Created. * * `0 <= filled <= originalAmount` - * */ filled: Scalars['BigInt']['output']; /** * The number of Pods purchased from *this* PodListing. * * If not yet Filled or the PodListing is CANCELLED: `filledAmount = 0` - * */ filledAmount: Scalars['BigInt']['output']; /** Historical ID for joins */ historyID: Scalars['String']['output']; /** - * The PodListing ID is a unique subgraph ID: `{account}-{index}" + * The PodListing ID is a unique subgraph ID; if fieldId is 0: `{account}-{index}`, if fieldId isn't 0: `{account}-{index}:{fieldId}` * * The on-chain identifier for a PodListing is the `index`. - * */ id: Scalars['ID']['output']; /** @@ -4073,29 +4215,21 @@ export type PodListing = { * 0 the first Pod issued * 100,000 harvestableIndex * 150,000 index - * */ index: Scalars['BigInt']['output']; - /** - * When the `harvestableIndex` reaches this number, the Listing becomes EXPIRED. - * - */ + /** When the `harvestableIndex` reaches this number, the Listing becomes EXPIRED. */ maxHarvestableIndex: Scalars['BigInt']['output']; /** Minimum number of Beans required to perform a Fill. */ minFillAmount: Scalars['BigInt']['output']; /** Where Beans are sent when the PodListing is Filled. See `FarmToMode`. */ mode: Scalars['Int']['output']; - /** - * The total number of Pods listed during the first emission of PodListingCreated. - * - */ + /** The total number of Pods listed during the first emission of PodListingCreated. */ originalAmount: Scalars['BigInt']['output']; /** * The original index from the first emission of PodListingCreated in a chain. * * If `originalIndex !== index`, then this PodListing was created when a parent * PodListing was partially filled. - * */ originalIndex: Scalars['BigInt']['output']; /** The place of this plot in the pod line at the time it was listed */ @@ -4110,14 +4244,12 @@ export type PodListing = { * Ex. `pricePerPod = 10000` indicates a price of 0.01 Beans per Pod. * * If `pricingType = 1`, this field is set to `0` and should be ignored. - * */ pricePerPod: Scalars['Int']['output']; /** * [V2] The FIXED or DYNAMIC pricing function, encoded as bytes. * * This must be decoded client-side, see `LibPolynomial.sol` for more info. - * */ pricingFunction?: Maybe; /** @@ -4126,7 +4258,6 @@ export type PodListing = { * null = V1 FIXED = use `pricePerPod` * 0 = V2 FIXED = use `pricePerPod` * 1 = V2 DYNAMIC = use `pricingFunction` - * */ pricingType?: Maybe; /** @@ -4139,14 +4270,12 @@ export type PodListing = { * If this PodListing has NOT been Filled: `remainingAmount = amount` * If this PodListing has been Filled: `remainingAmount < amount` * If this PodListing has been Cancelled: `remainingAmount = 0` - * */ remainingAmount: Scalars['BigInt']['output']; /** * The position within the Plot from which to sell Pods. * * 0 <= `start` <= (plot size - `amount`) - * */ start: Scalars['BigInt']['output']; /** Current market status of listing */ @@ -4177,7 +4306,7 @@ export type PodListingCancelled = MarketplaceEvent & { placeInLine: Scalars['BigInt']['output']; }; -export type PodListingCancelled_Filter = { +export type PodListingCancelledFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; account?: InputMaybe; @@ -4190,7 +4319,7 @@ export type PodListingCancelled_Filter = { account_not?: InputMaybe; account_not_contains?: InputMaybe; account_not_in?: InputMaybe>; - and?: InputMaybe>>; + and?: InputMaybe>>; blockNumber?: InputMaybe; blockNumber_gt?: InputMaybe; blockNumber_gte?: InputMaybe; @@ -4261,7 +4390,7 @@ export type PodListingCancelled_Filter = { logIndex_lte?: InputMaybe; logIndex_not?: InputMaybe; logIndex_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; placeInLine?: InputMaybe; placeInLine_gt?: InputMaybe; placeInLine_gte?: InputMaybe; @@ -4272,16 +4401,16 @@ export type PodListingCancelled_Filter = { placeInLine_not_in?: InputMaybe>; }; -export enum PodListingCancelled_OrderBy { - Account = 'account', - BlockNumber = 'blockNumber', - CreatedAt = 'createdAt', - Hash = 'hash', - HistoryId = 'historyID', - Id = 'id', - Index = 'index', - LogIndex = 'logIndex', - PlaceInLine = 'placeInLine' +export enum PodListingCancelledOrderBy { + account = 'account', + blockNumber = 'blockNumber', + createdAt = 'createdAt', + hash = 'hash', + historyID = 'historyID', + id = 'id', + index = 'index', + logIndex = 'logIndex', + placeInLine = 'placeInLine' } export type PodListingCreated = MarketplaceEvent & { @@ -4322,7 +4451,7 @@ export type PodListingCreated = MarketplaceEvent & { start: Scalars['BigInt']['output']; }; -export type PodListingCreated_Filter = { +export type PodListingCreatedFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; account?: InputMaybe; @@ -4343,7 +4472,7 @@ export type PodListingCreated_Filter = { amount_lte?: InputMaybe; amount_not?: InputMaybe; amount_not_in?: InputMaybe>; - and?: InputMaybe>>; + and?: InputMaybe>>; blockNumber?: InputMaybe; blockNumber_gt?: InputMaybe; blockNumber_gte?: InputMaybe; @@ -4438,7 +4567,7 @@ export type PodListingCreated_Filter = { mode_lte?: InputMaybe; mode_not?: InputMaybe; mode_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; placeInLine?: InputMaybe; placeInLine_gt?: InputMaybe; placeInLine_gte?: InputMaybe; @@ -4483,24 +4612,24 @@ export type PodListingCreated_Filter = { start_not_in?: InputMaybe>; }; -export enum PodListingCreated_OrderBy { - Account = 'account', - Amount = 'amount', - BlockNumber = 'blockNumber', - CreatedAt = 'createdAt', - Hash = 'hash', - HistoryId = 'historyID', - Id = 'id', - Index = 'index', - LogIndex = 'logIndex', - MaxHarvestableIndex = 'maxHarvestableIndex', - MinFillAmount = 'minFillAmount', - Mode = 'mode', - PlaceInLine = 'placeInLine', - PricePerPod = 'pricePerPod', - PricingFunction = 'pricingFunction', - PricingType = 'pricingType', - Start = 'start' +export enum PodListingCreatedOrderBy { + account = 'account', + amount = 'amount', + blockNumber = 'blockNumber', + createdAt = 'createdAt', + hash = 'hash', + historyID = 'historyID', + id = 'id', + index = 'index', + logIndex = 'logIndex', + maxHarvestableIndex = 'maxHarvestableIndex', + minFillAmount = 'minFillAmount', + mode = 'mode', + placeInLine = 'placeInLine', + pricePerPod = 'pricePerPod', + pricingFunction = 'pricingFunction', + pricingType = 'pricingType', + start = 'start' } export type PodListingFilled = MarketplaceEvent & { @@ -4533,7 +4662,7 @@ export type PodListingFilled = MarketplaceEvent & { toFarmer: Scalars['Bytes']['output']; }; -export type PodListingFilled_Filter = { +export type PodListingFilledFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; amount?: InputMaybe; @@ -4544,7 +4673,7 @@ export type PodListingFilled_Filter = { amount_lte?: InputMaybe; amount_not?: InputMaybe; amount_not_in?: InputMaybe>; - and?: InputMaybe>>; + and?: InputMaybe>>; blockNumber?: InputMaybe; blockNumber_gt?: InputMaybe; blockNumber_gte?: InputMaybe; @@ -4633,7 +4762,7 @@ export type PodListingFilled_Filter = { logIndex_lte?: InputMaybe; logIndex_not?: InputMaybe; logIndex_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; placeInLine?: InputMaybe; placeInLine_gt?: InputMaybe; placeInLine_gte?: InputMaybe; @@ -4662,23 +4791,23 @@ export type PodListingFilled_Filter = { toFarmer_not_in?: InputMaybe>; }; -export enum PodListingFilled_OrderBy { - Amount = 'amount', - BlockNumber = 'blockNumber', - CostInBeans = 'costInBeans', - CreatedAt = 'createdAt', - FromFarmer = 'fromFarmer', - Hash = 'hash', - HistoryId = 'historyID', - Id = 'id', - Index = 'index', - LogIndex = 'logIndex', - PlaceInLine = 'placeInLine', - Start = 'start', - ToFarmer = 'toFarmer' +export enum PodListingFilledOrderBy { + amount = 'amount', + blockNumber = 'blockNumber', + costInBeans = 'costInBeans', + createdAt = 'createdAt', + fromFarmer = 'fromFarmer', + hash = 'hash', + historyID = 'historyID', + id = 'id', + index = 'index', + logIndex = 'logIndex', + placeInLine = 'placeInLine', + start = 'start', + toFarmer = 'toFarmer' } -export type PodListing_Filter = { +export type PodListingFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; amount?: InputMaybe; @@ -4689,7 +4818,7 @@ export type PodListing_Filter = { amount_lte?: InputMaybe; amount_not?: InputMaybe; amount_not_in?: InputMaybe>; - and?: InputMaybe>>; + and?: InputMaybe>>; createdAt?: InputMaybe; createdAt_gt?: InputMaybe; createdAt_gte?: InputMaybe; @@ -4709,7 +4838,7 @@ export type PodListing_Filter = { creationHash_not_contains?: InputMaybe; creationHash_not_in?: InputMaybe>; farmer?: InputMaybe; - farmer_?: InputMaybe; + farmer_?: InputMaybe; farmer_contains?: InputMaybe; farmer_contains_nocase?: InputMaybe; farmer_ends_with?: InputMaybe; @@ -4729,8 +4858,16 @@ export type PodListing_Filter = { farmer_not_starts_with_nocase?: InputMaybe; farmer_starts_with?: InputMaybe; farmer_starts_with_nocase?: InputMaybe; + fieldId?: InputMaybe; + fieldId_gt?: InputMaybe; + fieldId_gte?: InputMaybe; + fieldId_in?: InputMaybe>; + fieldId_lt?: InputMaybe; + fieldId_lte?: InputMaybe; + fieldId_not?: InputMaybe; + fieldId_not_in?: InputMaybe>; fill?: InputMaybe; - fill_?: InputMaybe; + fill_?: InputMaybe; fill_contains?: InputMaybe; fill_contains_nocase?: InputMaybe; fill_ends_with?: InputMaybe; @@ -4826,7 +4963,7 @@ export type PodListing_Filter = { mode_lte?: InputMaybe; mode_not?: InputMaybe; mode_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; originalAmount?: InputMaybe; originalAmount_gt?: InputMaybe; originalAmount_gte?: InputMaybe; @@ -4852,7 +4989,7 @@ export type PodListing_Filter = { originalPlaceInLine_not?: InputMaybe; originalPlaceInLine_not_in?: InputMaybe>; plot?: InputMaybe; - plot_?: InputMaybe; + plot_?: InputMaybe; plot_contains?: InputMaybe; plot_contains_nocase?: InputMaybe; plot_ends_with?: InputMaybe; @@ -4873,7 +5010,7 @@ export type PodListing_Filter = { plot_starts_with?: InputMaybe; plot_starts_with_nocase?: InputMaybe; podMarketplace?: InputMaybe; - podMarketplace_?: InputMaybe; + podMarketplace_?: InputMaybe; podMarketplace_contains?: InputMaybe; podMarketplace_contains_nocase?: InputMaybe; podMarketplace_ends_with?: InputMaybe; @@ -4949,80 +5086,85 @@ export type PodListing_Filter = { updatedAt_not_in?: InputMaybe>; }; -export enum PodListing_OrderBy { - Amount = 'amount', - CreatedAt = 'createdAt', - CreationHash = 'creationHash', - Farmer = 'farmer', - FarmerCreationBlock = 'farmer__creationBlock', - FarmerId = 'farmer__id', - Fill = 'fill', - FillAmount = 'fill__amount', - FillCostInBeans = 'fill__costInBeans', - FillCreatedAt = 'fill__createdAt', - FillId = 'fill__id', - FillIndex = 'fill__index', - FillPlaceInLine = 'fill__placeInLine', - FillStart = 'fill__start', - Filled = 'filled', - FilledAmount = 'filledAmount', - HistoryId = 'historyID', - Id = 'id', - Index = 'index', - MaxHarvestableIndex = 'maxHarvestableIndex', - MinFillAmount = 'minFillAmount', - Mode = 'mode', - OriginalAmount = 'originalAmount', - OriginalIndex = 'originalIndex', - OriginalPlaceInLine = 'originalPlaceInLine', - Plot = 'plot', - PlotBeansPerPod = 'plot__beansPerPod', - PlotCreatedAt = 'plot__createdAt', - PlotCreationHash = 'plot__creationHash', - PlotFullyHarvested = 'plot__fullyHarvested', - PlotHarvestAt = 'plot__harvestAt', - PlotHarvestHash = 'plot__harvestHash', - PlotHarvestablePods = 'plot__harvestablePods', - PlotHarvestedPods = 'plot__harvestedPods', - PlotId = 'plot__id', - PlotIndex = 'plot__index', - PlotInitialHarvestableIndex = 'plot__initialHarvestableIndex', - PlotPods = 'plot__pods', - PlotPreTransferSource = 'plot__preTransferSource', - PlotSeason = 'plot__season', - PlotSource = 'plot__source', - PlotSourceHash = 'plot__sourceHash', - PlotSowHash = 'plot__sowHash', - PlotSowSeason = 'plot__sowSeason', - PlotSowTimestamp = 'plot__sowTimestamp', - PlotSownBeansPerPod = 'plot__sownBeansPerPod', - PlotSownInitialHarvestableIndex = 'plot__sownInitialHarvestableIndex', - PlotUpdatedAt = 'plot__updatedAt', - PlotUpdatedAtBlock = 'plot__updatedAtBlock', - PodMarketplace = 'podMarketplace', - PodMarketplaceAvailableListedPods = 'podMarketplace__availableListedPods', - PodMarketplaceAvailableOrderBeans = 'podMarketplace__availableOrderBeans', - PodMarketplaceBeanVolume = 'podMarketplace__beanVolume', - PodMarketplaceCancelledListedPods = 'podMarketplace__cancelledListedPods', - PodMarketplaceCancelledOrderBeans = 'podMarketplace__cancelledOrderBeans', - PodMarketplaceExpiredListedPods = 'podMarketplace__expiredListedPods', - PodMarketplaceFilledListedPods = 'podMarketplace__filledListedPods', - PodMarketplaceFilledOrderBeans = 'podMarketplace__filledOrderBeans', - PodMarketplaceFilledOrderedPods = 'podMarketplace__filledOrderedPods', - PodMarketplaceId = 'podMarketplace__id', - PodMarketplaceLastDailySnapshotDay = 'podMarketplace__lastDailySnapshotDay', - PodMarketplaceLastHourlySnapshotSeason = 'podMarketplace__lastHourlySnapshotSeason', - PodMarketplaceListedPods = 'podMarketplace__listedPods', - PodMarketplaceOrderBeans = 'podMarketplace__orderBeans', - PodMarketplacePodVolume = 'podMarketplace__podVolume', - PodMarketplaceSeason = 'podMarketplace__season', - PricePerPod = 'pricePerPod', - PricingFunction = 'pricingFunction', - PricingType = 'pricingType', - RemainingAmount = 'remainingAmount', - Start = 'start', - Status = 'status', - UpdatedAt = 'updatedAt' +export enum PodListingOrderBy { + amount = 'amount', + createdAt = 'createdAt', + creationHash = 'creationHash', + farmer = 'farmer', + farmer__creationBlock = 'farmer__creationBlock', + farmer__id = 'farmer__id', + farmer__refereeCount = 'farmer__refereeCount', + farmer__totalReferralRewardPodsReceived = 'farmer__totalReferralRewardPodsReceived', + fieldId = 'fieldId', + fill = 'fill', + fill__amount = 'fill__amount', + fill__costInBeans = 'fill__costInBeans', + fill__createdAt = 'fill__createdAt', + fill__id = 'fill__id', + fill__index = 'fill__index', + fill__placeInLine = 'fill__placeInLine', + fill__start = 'fill__start', + filled = 'filled', + filledAmount = 'filledAmount', + historyID = 'historyID', + id = 'id', + index = 'index', + maxHarvestableIndex = 'maxHarvestableIndex', + minFillAmount = 'minFillAmount', + mode = 'mode', + originalAmount = 'originalAmount', + originalIndex = 'originalIndex', + originalPlaceInLine = 'originalPlaceInLine', + plot = 'plot', + plot__beansPerPod = 'plot__beansPerPod', + plot__createdAt = 'plot__createdAt', + plot__creationHash = 'plot__creationHash', + plot__fieldId = 'plot__fieldId', + plot__fullyHarvested = 'plot__fullyHarvested', + plot__harvestAt = 'plot__harvestAt', + plot__harvestHash = 'plot__harvestHash', + plot__harvestablePods = 'plot__harvestablePods', + plot__harvestedPods = 'plot__harvestedPods', + plot__id = 'plot__id', + plot__index = 'plot__index', + plot__initialHarvestableIndex = 'plot__initialHarvestableIndex', + plot__isMorning = 'plot__isMorning', + plot__pods = 'plot__pods', + plot__preTransferSource = 'plot__preTransferSource', + plot__season = 'plot__season', + plot__source = 'plot__source', + plot__sourceHash = 'plot__sourceHash', + plot__sowHash = 'plot__sowHash', + plot__sowSeason = 'plot__sowSeason', + plot__sowTimestamp = 'plot__sowTimestamp', + plot__sownBeansPerPod = 'plot__sownBeansPerPod', + plot__sownInitialHarvestableIndex = 'plot__sownInitialHarvestableIndex', + plot__updatedAt = 'plot__updatedAt', + plot__updatedAtBlock = 'plot__updatedAtBlock', + podMarketplace = 'podMarketplace', + podMarketplace__availableListedPods = 'podMarketplace__availableListedPods', + podMarketplace__availableOrderBeans = 'podMarketplace__availableOrderBeans', + podMarketplace__beanVolume = 'podMarketplace__beanVolume', + podMarketplace__cancelledListedPods = 'podMarketplace__cancelledListedPods', + podMarketplace__cancelledOrderBeans = 'podMarketplace__cancelledOrderBeans', + podMarketplace__expiredListedPods = 'podMarketplace__expiredListedPods', + podMarketplace__filledListedPods = 'podMarketplace__filledListedPods', + podMarketplace__filledOrderBeans = 'podMarketplace__filledOrderBeans', + podMarketplace__filledOrderedPods = 'podMarketplace__filledOrderedPods', + podMarketplace__id = 'podMarketplace__id', + podMarketplace__lastDailySnapshotDay = 'podMarketplace__lastDailySnapshotDay', + podMarketplace__lastHourlySnapshotSeason = 'podMarketplace__lastHourlySnapshotSeason', + podMarketplace__listedPods = 'podMarketplace__listedPods', + podMarketplace__orderBeans = 'podMarketplace__orderBeans', + podMarketplace__podVolume = 'podMarketplace__podVolume', + podMarketplace__season = 'podMarketplace__season', + pricePerPod = 'pricePerPod', + pricingFunction = 'pricingFunction', + pricingType = 'pricingType', + remainingAmount = 'remainingAmount', + start = 'start', + status = 'status', + updatedAt = 'updatedAt' } export type PodMarketplace = { @@ -5078,46 +5220,46 @@ export type PodMarketplace = { export type PodMarketplaceAllListingsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type PodMarketplaceAllOrdersArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type PodMarketplaceDailySnapshotsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type PodMarketplaceFillsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type PodMarketplaceHourlySnapshotsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type PodMarketplaceDailySnapshot = { @@ -5170,10 +5312,10 @@ export type PodMarketplaceDailySnapshot = { updatedAt: Scalars['BigInt']['output']; }; -export type PodMarketplaceDailySnapshot_Filter = { +export type PodMarketplaceDailySnapshotFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; availableListedPods?: InputMaybe; availableListedPods_gt?: InputMaybe; availableListedPods_gte?: InputMaybe; @@ -5366,7 +5508,7 @@ export type PodMarketplaceDailySnapshot_Filter = { listedPods_lte?: InputMaybe; listedPods_not?: InputMaybe; listedPods_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; orderBeans?: InputMaybe; orderBeans_gt?: InputMaybe; orderBeans_gte?: InputMaybe; @@ -5376,7 +5518,7 @@ export type PodMarketplaceDailySnapshot_Filter = { orderBeans_not?: InputMaybe; orderBeans_not_in?: InputMaybe>; podMarketplace?: InputMaybe; - podMarketplace_?: InputMaybe; + podMarketplace_?: InputMaybe; podMarketplace_contains?: InputMaybe; podMarketplace_contains_nocase?: InputMaybe; podMarketplace_ends_with?: InputMaybe; @@ -5422,52 +5564,52 @@ export type PodMarketplaceDailySnapshot_Filter = { updatedAt_not_in?: InputMaybe>; }; -export enum PodMarketplaceDailySnapshot_OrderBy { - AvailableListedPods = 'availableListedPods', - AvailableOrderBeans = 'availableOrderBeans', - BeanVolume = 'beanVolume', - CancelledListedPods = 'cancelledListedPods', - CancelledOrderBeans = 'cancelledOrderBeans', - CreatedAt = 'createdAt', - DeltaAvailableListedPods = 'deltaAvailableListedPods', - DeltaAvailableOrderBeans = 'deltaAvailableOrderBeans', - DeltaBeanVolume = 'deltaBeanVolume', - DeltaCancelledListedPods = 'deltaCancelledListedPods', - DeltaCancelledOrderBeans = 'deltaCancelledOrderBeans', - DeltaExpiredListedPods = 'deltaExpiredListedPods', - DeltaFilledListedPods = 'deltaFilledListedPods', - DeltaFilledOrderBeans = 'deltaFilledOrderBeans', - DeltaFilledOrderedPods = 'deltaFilledOrderedPods', - DeltaListedPods = 'deltaListedPods', - DeltaOrderBeans = 'deltaOrderBeans', - DeltaPodVolume = 'deltaPodVolume', - ExpiredListedPods = 'expiredListedPods', - FilledListedPods = 'filledListedPods', - FilledOrderBeans = 'filledOrderBeans', - FilledOrderedPods = 'filledOrderedPods', - Id = 'id', - ListedPods = 'listedPods', - OrderBeans = 'orderBeans', - PodMarketplace = 'podMarketplace', - PodMarketplaceAvailableListedPods = 'podMarketplace__availableListedPods', - PodMarketplaceAvailableOrderBeans = 'podMarketplace__availableOrderBeans', - PodMarketplaceBeanVolume = 'podMarketplace__beanVolume', - PodMarketplaceCancelledListedPods = 'podMarketplace__cancelledListedPods', - PodMarketplaceCancelledOrderBeans = 'podMarketplace__cancelledOrderBeans', - PodMarketplaceExpiredListedPods = 'podMarketplace__expiredListedPods', - PodMarketplaceFilledListedPods = 'podMarketplace__filledListedPods', - PodMarketplaceFilledOrderBeans = 'podMarketplace__filledOrderBeans', - PodMarketplaceFilledOrderedPods = 'podMarketplace__filledOrderedPods', - PodMarketplaceId = 'podMarketplace__id', - PodMarketplaceLastDailySnapshotDay = 'podMarketplace__lastDailySnapshotDay', - PodMarketplaceLastHourlySnapshotSeason = 'podMarketplace__lastHourlySnapshotSeason', - PodMarketplaceListedPods = 'podMarketplace__listedPods', - PodMarketplaceOrderBeans = 'podMarketplace__orderBeans', - PodMarketplacePodVolume = 'podMarketplace__podVolume', - PodMarketplaceSeason = 'podMarketplace__season', - PodVolume = 'podVolume', - Season = 'season', - UpdatedAt = 'updatedAt' +export enum PodMarketplaceDailySnapshotOrderBy { + availableListedPods = 'availableListedPods', + availableOrderBeans = 'availableOrderBeans', + beanVolume = 'beanVolume', + cancelledListedPods = 'cancelledListedPods', + cancelledOrderBeans = 'cancelledOrderBeans', + createdAt = 'createdAt', + deltaAvailableListedPods = 'deltaAvailableListedPods', + deltaAvailableOrderBeans = 'deltaAvailableOrderBeans', + deltaBeanVolume = 'deltaBeanVolume', + deltaCancelledListedPods = 'deltaCancelledListedPods', + deltaCancelledOrderBeans = 'deltaCancelledOrderBeans', + deltaExpiredListedPods = 'deltaExpiredListedPods', + deltaFilledListedPods = 'deltaFilledListedPods', + deltaFilledOrderBeans = 'deltaFilledOrderBeans', + deltaFilledOrderedPods = 'deltaFilledOrderedPods', + deltaListedPods = 'deltaListedPods', + deltaOrderBeans = 'deltaOrderBeans', + deltaPodVolume = 'deltaPodVolume', + expiredListedPods = 'expiredListedPods', + filledListedPods = 'filledListedPods', + filledOrderBeans = 'filledOrderBeans', + filledOrderedPods = 'filledOrderedPods', + id = 'id', + listedPods = 'listedPods', + orderBeans = 'orderBeans', + podMarketplace = 'podMarketplace', + podMarketplace__availableListedPods = 'podMarketplace__availableListedPods', + podMarketplace__availableOrderBeans = 'podMarketplace__availableOrderBeans', + podMarketplace__beanVolume = 'podMarketplace__beanVolume', + podMarketplace__cancelledListedPods = 'podMarketplace__cancelledListedPods', + podMarketplace__cancelledOrderBeans = 'podMarketplace__cancelledOrderBeans', + podMarketplace__expiredListedPods = 'podMarketplace__expiredListedPods', + podMarketplace__filledListedPods = 'podMarketplace__filledListedPods', + podMarketplace__filledOrderBeans = 'podMarketplace__filledOrderBeans', + podMarketplace__filledOrderedPods = 'podMarketplace__filledOrderedPods', + podMarketplace__id = 'podMarketplace__id', + podMarketplace__lastDailySnapshotDay = 'podMarketplace__lastDailySnapshotDay', + podMarketplace__lastHourlySnapshotSeason = 'podMarketplace__lastHourlySnapshotSeason', + podMarketplace__listedPods = 'podMarketplace__listedPods', + podMarketplace__orderBeans = 'podMarketplace__orderBeans', + podMarketplace__podVolume = 'podMarketplace__podVolume', + podMarketplace__season = 'podMarketplace__season', + podVolume = 'podVolume', + season = 'season', + updatedAt = 'updatedAt' } export type PodMarketplaceHourlySnapshot = { @@ -5520,10 +5662,10 @@ export type PodMarketplaceHourlySnapshot = { updatedAt: Scalars['BigInt']['output']; }; -export type PodMarketplaceHourlySnapshot_Filter = { +export type PodMarketplaceHourlySnapshotFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; availableListedPods?: InputMaybe; availableListedPods_gt?: InputMaybe; availableListedPods_gte?: InputMaybe; @@ -5716,7 +5858,7 @@ export type PodMarketplaceHourlySnapshot_Filter = { listedPods_lte?: InputMaybe; listedPods_not?: InputMaybe; listedPods_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; orderBeans?: InputMaybe; orderBeans_gt?: InputMaybe; orderBeans_gte?: InputMaybe; @@ -5726,7 +5868,7 @@ export type PodMarketplaceHourlySnapshot_Filter = { orderBeans_not?: InputMaybe; orderBeans_not_in?: InputMaybe>; podMarketplace?: InputMaybe; - podMarketplace_?: InputMaybe; + podMarketplace_?: InputMaybe; podMarketplace_contains?: InputMaybe; podMarketplace_contains_nocase?: InputMaybe; podMarketplace_ends_with?: InputMaybe; @@ -5772,55 +5914,55 @@ export type PodMarketplaceHourlySnapshot_Filter = { updatedAt_not_in?: InputMaybe>; }; -export enum PodMarketplaceHourlySnapshot_OrderBy { - AvailableListedPods = 'availableListedPods', - AvailableOrderBeans = 'availableOrderBeans', - BeanVolume = 'beanVolume', - CancelledListedPods = 'cancelledListedPods', - CancelledOrderBeans = 'cancelledOrderBeans', - CreatedAt = 'createdAt', - DeltaAvailableListedPods = 'deltaAvailableListedPods', - DeltaAvailableOrderBeans = 'deltaAvailableOrderBeans', - DeltaBeanVolume = 'deltaBeanVolume', - DeltaCancelledListedPods = 'deltaCancelledListedPods', - DeltaCancelledOrderBeans = 'deltaCancelledOrderBeans', - DeltaExpiredListedPods = 'deltaExpiredListedPods', - DeltaFilledListedPods = 'deltaFilledListedPods', - DeltaFilledOrderBeans = 'deltaFilledOrderBeans', - DeltaFilledOrderedPods = 'deltaFilledOrderedPods', - DeltaListedPods = 'deltaListedPods', - DeltaOrderBeans = 'deltaOrderBeans', - DeltaPodVolume = 'deltaPodVolume', - ExpiredListedPods = 'expiredListedPods', - FilledListedPods = 'filledListedPods', - FilledOrderBeans = 'filledOrderBeans', - FilledOrderedPods = 'filledOrderedPods', - Id = 'id', - ListedPods = 'listedPods', - OrderBeans = 'orderBeans', - PodMarketplace = 'podMarketplace', - PodMarketplaceAvailableListedPods = 'podMarketplace__availableListedPods', - PodMarketplaceAvailableOrderBeans = 'podMarketplace__availableOrderBeans', - PodMarketplaceBeanVolume = 'podMarketplace__beanVolume', - PodMarketplaceCancelledListedPods = 'podMarketplace__cancelledListedPods', - PodMarketplaceCancelledOrderBeans = 'podMarketplace__cancelledOrderBeans', - PodMarketplaceExpiredListedPods = 'podMarketplace__expiredListedPods', - PodMarketplaceFilledListedPods = 'podMarketplace__filledListedPods', - PodMarketplaceFilledOrderBeans = 'podMarketplace__filledOrderBeans', - PodMarketplaceFilledOrderedPods = 'podMarketplace__filledOrderedPods', - PodMarketplaceId = 'podMarketplace__id', - PodMarketplaceLastDailySnapshotDay = 'podMarketplace__lastDailySnapshotDay', - PodMarketplaceLastHourlySnapshotSeason = 'podMarketplace__lastHourlySnapshotSeason', - PodMarketplaceListedPods = 'podMarketplace__listedPods', - PodMarketplaceOrderBeans = 'podMarketplace__orderBeans', - PodMarketplacePodVolume = 'podMarketplace__podVolume', - PodMarketplaceSeason = 'podMarketplace__season', - PodVolume = 'podVolume', - Season = 'season', - UpdatedAt = 'updatedAt' +export enum PodMarketplaceHourlySnapshotOrderBy { + availableListedPods = 'availableListedPods', + availableOrderBeans = 'availableOrderBeans', + beanVolume = 'beanVolume', + cancelledListedPods = 'cancelledListedPods', + cancelledOrderBeans = 'cancelledOrderBeans', + createdAt = 'createdAt', + deltaAvailableListedPods = 'deltaAvailableListedPods', + deltaAvailableOrderBeans = 'deltaAvailableOrderBeans', + deltaBeanVolume = 'deltaBeanVolume', + deltaCancelledListedPods = 'deltaCancelledListedPods', + deltaCancelledOrderBeans = 'deltaCancelledOrderBeans', + deltaExpiredListedPods = 'deltaExpiredListedPods', + deltaFilledListedPods = 'deltaFilledListedPods', + deltaFilledOrderBeans = 'deltaFilledOrderBeans', + deltaFilledOrderedPods = 'deltaFilledOrderedPods', + deltaListedPods = 'deltaListedPods', + deltaOrderBeans = 'deltaOrderBeans', + deltaPodVolume = 'deltaPodVolume', + expiredListedPods = 'expiredListedPods', + filledListedPods = 'filledListedPods', + filledOrderBeans = 'filledOrderBeans', + filledOrderedPods = 'filledOrderedPods', + id = 'id', + listedPods = 'listedPods', + orderBeans = 'orderBeans', + podMarketplace = 'podMarketplace', + podMarketplace__availableListedPods = 'podMarketplace__availableListedPods', + podMarketplace__availableOrderBeans = 'podMarketplace__availableOrderBeans', + podMarketplace__beanVolume = 'podMarketplace__beanVolume', + podMarketplace__cancelledListedPods = 'podMarketplace__cancelledListedPods', + podMarketplace__cancelledOrderBeans = 'podMarketplace__cancelledOrderBeans', + podMarketplace__expiredListedPods = 'podMarketplace__expiredListedPods', + podMarketplace__filledListedPods = 'podMarketplace__filledListedPods', + podMarketplace__filledOrderBeans = 'podMarketplace__filledOrderBeans', + podMarketplace__filledOrderedPods = 'podMarketplace__filledOrderedPods', + podMarketplace__id = 'podMarketplace__id', + podMarketplace__lastDailySnapshotDay = 'podMarketplace__lastDailySnapshotDay', + podMarketplace__lastHourlySnapshotSeason = 'podMarketplace__lastHourlySnapshotSeason', + podMarketplace__listedPods = 'podMarketplace__listedPods', + podMarketplace__orderBeans = 'podMarketplace__orderBeans', + podMarketplace__podVolume = 'podMarketplace__podVolume', + podMarketplace__season = 'podMarketplace__season', + podVolume = 'podVolume', + season = 'season', + updatedAt = 'updatedAt' } -export type PodMarketplace_Filter = { +export type PodMarketplaceFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; activeListings?: InputMaybe>; @@ -5835,9 +5977,9 @@ export type PodMarketplace_Filter = { activeOrders_not?: InputMaybe>; activeOrders_not_contains?: InputMaybe>; activeOrders_not_contains_nocase?: InputMaybe>; - allListings_?: InputMaybe; - allOrders_?: InputMaybe; - and?: InputMaybe>>; + allListings_?: InputMaybe; + allOrders_?: InputMaybe; + and?: InputMaybe>>; availableListedPods?: InputMaybe; availableListedPods_gt?: InputMaybe; availableListedPods_gte?: InputMaybe; @@ -5878,7 +6020,7 @@ export type PodMarketplace_Filter = { cancelledOrderBeans_lte?: InputMaybe; cancelledOrderBeans_not?: InputMaybe; cancelledOrderBeans_not_in?: InputMaybe>; - dailySnapshots_?: InputMaybe; + dailySnapshots_?: InputMaybe; expiredListedPods?: InputMaybe; expiredListedPods_gt?: InputMaybe; expiredListedPods_gte?: InputMaybe; @@ -5911,8 +6053,8 @@ export type PodMarketplace_Filter = { filledOrderedPods_lte?: InputMaybe; filledOrderedPods_not?: InputMaybe; filledOrderedPods_not_in?: InputMaybe>; - fills_?: InputMaybe; - hourlySnapshots_?: InputMaybe; + fills_?: InputMaybe; + hourlySnapshots_?: InputMaybe; id?: InputMaybe; id_gt?: InputMaybe; id_gte?: InputMaybe; @@ -5945,7 +6087,7 @@ export type PodMarketplace_Filter = { listedPods_lte?: InputMaybe; listedPods_not?: InputMaybe; listedPods_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; orderBeans?: InputMaybe; orderBeans_gt?: InputMaybe; orderBeans_gte?: InputMaybe; @@ -5972,30 +6114,30 @@ export type PodMarketplace_Filter = { season_not_in?: InputMaybe>; }; -export enum PodMarketplace_OrderBy { - ActiveListings = 'activeListings', - ActiveOrders = 'activeOrders', - AllListings = 'allListings', - AllOrders = 'allOrders', - AvailableListedPods = 'availableListedPods', - AvailableOrderBeans = 'availableOrderBeans', - BeanVolume = 'beanVolume', - CancelledListedPods = 'cancelledListedPods', - CancelledOrderBeans = 'cancelledOrderBeans', - DailySnapshots = 'dailySnapshots', - ExpiredListedPods = 'expiredListedPods', - FilledListedPods = 'filledListedPods', - FilledOrderBeans = 'filledOrderBeans', - FilledOrderedPods = 'filledOrderedPods', - Fills = 'fills', - HourlySnapshots = 'hourlySnapshots', - Id = 'id', - LastDailySnapshotDay = 'lastDailySnapshotDay', - LastHourlySnapshotSeason = 'lastHourlySnapshotSeason', - ListedPods = 'listedPods', - OrderBeans = 'orderBeans', - PodVolume = 'podVolume', - Season = 'season' +export enum PodMarketplaceOrderBy { + activeListings = 'activeListings', + activeOrders = 'activeOrders', + allListings = 'allListings', + allOrders = 'allOrders', + availableListedPods = 'availableListedPods', + availableOrderBeans = 'availableOrderBeans', + beanVolume = 'beanVolume', + cancelledListedPods = 'cancelledListedPods', + cancelledOrderBeans = 'cancelledOrderBeans', + dailySnapshots = 'dailySnapshots', + expiredListedPods = 'expiredListedPods', + filledListedPods = 'filledListedPods', + filledOrderBeans = 'filledOrderBeans', + filledOrderedPods = 'filledOrderedPods', + fills = 'fills', + hourlySnapshots = 'hourlySnapshots', + id = 'id', + lastDailySnapshotDay = 'lastDailySnapshotDay', + lastHourlySnapshotSeason = 'lastHourlySnapshotSeason', + listedPods = 'listedPods', + orderBeans = 'orderBeans', + podVolume = 'podVolume', + season = 'season' } export type PodOrder = { @@ -6009,7 +6151,6 @@ export type PodOrder = { * If FIXED (V1): `amount * pricePerPod` fields emitted in PodOrderCreated. * If FIXED (V2): `amount` field emitted in PodOrderCreated. * If DYNAMIC (V2): `amount` field emitted in PodOrderCreated. - * */ beanAmount: Scalars['BigInt']['output']; /** @@ -6019,7 +6160,6 @@ export type PodOrder = { * `0 <= beanAmountFilled <= beanAmount` * * Upon PodOrder cancellation, this value is locked. - * */ beanAmountFilled: Scalars['BigInt']['output']; /** Timestamp of PodOrder creation. */ @@ -6028,24 +6168,21 @@ export type PodOrder = { creationHash: Scalars['Bytes']['output']; /** The Farmer that created the Pod Order. */ farmer: Farmer; + /** Numeric identifier of the field for this order */ + fieldId: Scalars['BigInt']['output']; /** All Fills associated with this PodOrder. */ fills: Array; - /** - * Historical ID for joins: `{account}-{createdAt}` - * - */ + /** Historical ID for joins: `{account}-{createdAt}` */ historyID: Scalars['String']['output']; /** * The PodOrder ID matchces the `id` stored on-chain: * * `keccak256(abi.encodePacked(account, pricePerPod, maxPlaceInLine, minFillAmount))` - * */ id: Scalars['ID']['output']; /** * The Farmer is willing to buy any Pod that is before maxPlaceInLine at pricePerPod. * As the Pod Line moves, this value stays the same because new Pods meet the criteria. - * */ maxPlaceInLine: Scalars['BigInt']['output']; /** Minimum number of Pods required to perform a Fill. */ @@ -6058,7 +6195,6 @@ export type PodOrder = { * If pricingType = DYNAMIC: No constraint, since `podAmount` is unknown. * * Upon PodOrder cancellation, this value is locked. - * */ podAmountFilled: Scalars['BigInt']['output']; /** Marketplace used for Pod Order. */ @@ -6069,7 +6205,6 @@ export type PodOrder = { * Ex. `pricePerPod = 10000` indicates a price of 0.01 Beans per Pod. * * If `pricingType = 1`, this field is initialized to `0` and should be ignored. - * */ pricePerPod: Scalars['Int']['output']; /** @@ -6080,7 +6215,6 @@ export type PodOrder = { * null = V1 FIXED = use `pricePerPod` * "0x" = V2 FIXED = use `pricePerPod` * "0x..." = V2 DYNAMIC = use `pricingFunction` - * */ pricingFunction?: Maybe; /** @@ -6089,7 +6223,6 @@ export type PodOrder = { * null = V1 FIXED = use `pricePerPod` * 0 = V2 FIXED = use `pricePerPod` * 1 = V2 DYNAMIC = use `pricingFunction` - * */ pricingType?: Maybe; /** Current status of order. */ @@ -6101,10 +6234,10 @@ export type PodOrder = { export type PodOrderFillsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type PodOrderCancelled = MarketplaceEvent & { @@ -6127,7 +6260,7 @@ export type PodOrderCancelled = MarketplaceEvent & { orderId: Scalars['String']['output']; }; -export type PodOrderCancelled_Filter = { +export type PodOrderCancelledFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; account?: InputMaybe; @@ -6140,7 +6273,7 @@ export type PodOrderCancelled_Filter = { account_not?: InputMaybe; account_not_contains?: InputMaybe; account_not_in?: InputMaybe>; - and?: InputMaybe>>; + and?: InputMaybe>>; blockNumber?: InputMaybe; blockNumber_gt?: InputMaybe; blockNumber_gte?: InputMaybe; @@ -6203,7 +6336,7 @@ export type PodOrderCancelled_Filter = { logIndex_lte?: InputMaybe; logIndex_not?: InputMaybe; logIndex_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; orderId?: InputMaybe; orderId_contains?: InputMaybe; orderId_contains_nocase?: InputMaybe; @@ -6226,15 +6359,15 @@ export type PodOrderCancelled_Filter = { orderId_starts_with_nocase?: InputMaybe; }; -export enum PodOrderCancelled_OrderBy { - Account = 'account', - BlockNumber = 'blockNumber', - CreatedAt = 'createdAt', - Hash = 'hash', - HistoryId = 'historyID', - Id = 'id', - LogIndex = 'logIndex', - OrderId = 'orderId' +export enum PodOrderCancelledOrderBy { + account = 'account', + blockNumber = 'blockNumber', + createdAt = 'createdAt', + hash = 'hash', + historyID = 'historyID', + id = 'id', + logIndex = 'logIndex', + orderId = 'orderId' } export type PodOrderCreated = MarketplaceEvent & { @@ -6245,7 +6378,6 @@ export type PodOrderCreated = MarketplaceEvent & { * The represented value emitted with this event changed with BIP-29 at block 15277986 * Pre BIP-29: The number of pods ordered is emitted * Post BIP-29: The number of beans supplied for the order is emitted. - * */ amount: Scalars['BigInt']['output']; /** Block number of this event */ @@ -6272,7 +6404,7 @@ export type PodOrderCreated = MarketplaceEvent & { pricingType?: Maybe; }; -export type PodOrderCreated_Filter = { +export type PodOrderCreatedFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; account?: InputMaybe; @@ -6293,7 +6425,7 @@ export type PodOrderCreated_Filter = { amount_lte?: InputMaybe; amount_not?: InputMaybe; amount_not_in?: InputMaybe>; - and?: InputMaybe>>; + and?: InputMaybe>>; blockNumber?: InputMaybe; blockNumber_gt?: InputMaybe; blockNumber_gte?: InputMaybe; @@ -6364,7 +6496,7 @@ export type PodOrderCreated_Filter = { maxPlaceInLine_lte?: InputMaybe; maxPlaceInLine_not?: InputMaybe; maxPlaceInLine_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; orderId?: InputMaybe; orderId_contains?: InputMaybe; orderId_contains_nocase?: InputMaybe; @@ -6413,20 +6545,20 @@ export type PodOrderCreated_Filter = { pricingType_not_in?: InputMaybe>; }; -export enum PodOrderCreated_OrderBy { - Account = 'account', - Amount = 'amount', - BlockNumber = 'blockNumber', - CreatedAt = 'createdAt', - Hash = 'hash', - HistoryId = 'historyID', - Id = 'id', - LogIndex = 'logIndex', - MaxPlaceInLine = 'maxPlaceInLine', - OrderId = 'orderId', - PricePerPod = 'pricePerPod', - PricingFunction = 'pricingFunction', - PricingType = 'pricingType' +export enum PodOrderCreatedOrderBy { + account = 'account', + amount = 'amount', + blockNumber = 'blockNumber', + createdAt = 'createdAt', + hash = 'hash', + historyID = 'historyID', + id = 'id', + logIndex = 'logIndex', + maxPlaceInLine = 'maxPlaceInLine', + orderId = 'orderId', + pricePerPod = 'pricePerPod', + pricingFunction = 'pricingFunction', + pricingType = 'pricingType' } export type PodOrderFilled = MarketplaceEvent & { @@ -6459,7 +6591,7 @@ export type PodOrderFilled = MarketplaceEvent & { toFarmer: Scalars['Bytes']['output']; }; -export type PodOrderFilled_Filter = { +export type PodOrderFilledFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; amount?: InputMaybe; @@ -6470,7 +6602,7 @@ export type PodOrderFilled_Filter = { amount_lte?: InputMaybe; amount_not?: InputMaybe; amount_not_in?: InputMaybe>; - and?: InputMaybe>>; + and?: InputMaybe>>; blockNumber?: InputMaybe; blockNumber_gt?: InputMaybe; blockNumber_gte?: InputMaybe; @@ -6559,7 +6691,7 @@ export type PodOrderFilled_Filter = { logIndex_lte?: InputMaybe; logIndex_not?: InputMaybe; logIndex_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; placeInLine?: InputMaybe; placeInLine_gt?: InputMaybe; placeInLine_gte?: InputMaybe; @@ -6588,26 +6720,26 @@ export type PodOrderFilled_Filter = { toFarmer_not_in?: InputMaybe>; }; -export enum PodOrderFilled_OrderBy { - Amount = 'amount', - BlockNumber = 'blockNumber', - CostInBeans = 'costInBeans', - CreatedAt = 'createdAt', - FromFarmer = 'fromFarmer', - Hash = 'hash', - HistoryId = 'historyID', - Id = 'id', - Index = 'index', - LogIndex = 'logIndex', - PlaceInLine = 'placeInLine', - Start = 'start', - ToFarmer = 'toFarmer' +export enum PodOrderFilledOrderBy { + amount = 'amount', + blockNumber = 'blockNumber', + costInBeans = 'costInBeans', + createdAt = 'createdAt', + fromFarmer = 'fromFarmer', + hash = 'hash', + historyID = 'historyID', + id = 'id', + index = 'index', + logIndex = 'logIndex', + placeInLine = 'placeInLine', + start = 'start', + toFarmer = 'toFarmer' } -export type PodOrder_Filter = { +export type PodOrderFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; beanAmount?: InputMaybe; beanAmountFilled?: InputMaybe; beanAmountFilled_gt?: InputMaybe; @@ -6643,7 +6775,7 @@ export type PodOrder_Filter = { creationHash_not_contains?: InputMaybe; creationHash_not_in?: InputMaybe>; farmer?: InputMaybe; - farmer_?: InputMaybe; + farmer_?: InputMaybe; farmer_contains?: InputMaybe; farmer_contains_nocase?: InputMaybe; farmer_ends_with?: InputMaybe; @@ -6663,8 +6795,16 @@ export type PodOrder_Filter = { farmer_not_starts_with_nocase?: InputMaybe; farmer_starts_with?: InputMaybe; farmer_starts_with_nocase?: InputMaybe; + fieldId?: InputMaybe; + fieldId_gt?: InputMaybe; + fieldId_gte?: InputMaybe; + fieldId_in?: InputMaybe>; + fieldId_lt?: InputMaybe; + fieldId_lte?: InputMaybe; + fieldId_not?: InputMaybe; + fieldId_not_in?: InputMaybe>; fills?: InputMaybe>; - fills_?: InputMaybe; + fills_?: InputMaybe; fills_contains?: InputMaybe>; fills_contains_nocase?: InputMaybe>; fills_not?: InputMaybe>; @@ -6714,7 +6854,7 @@ export type PodOrder_Filter = { minFillAmount_lte?: InputMaybe; minFillAmount_not?: InputMaybe; minFillAmount_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; podAmountFilled?: InputMaybe; podAmountFilled_gt?: InputMaybe; podAmountFilled_gte?: InputMaybe; @@ -6724,7 +6864,7 @@ export type PodOrder_Filter = { podAmountFilled_not?: InputMaybe; podAmountFilled_not_in?: InputMaybe>; podMarketplace?: InputMaybe; - podMarketplace_?: InputMaybe; + podMarketplace_?: InputMaybe; podMarketplace_contains?: InputMaybe; podMarketplace_contains_nocase?: InputMaybe; podMarketplace_ends_with?: InputMaybe; @@ -6784,42 +6924,45 @@ export type PodOrder_Filter = { updatedAt_not_in?: InputMaybe>; }; -export enum PodOrder_OrderBy { - BeanAmount = 'beanAmount', - BeanAmountFilled = 'beanAmountFilled', - CreatedAt = 'createdAt', - CreationHash = 'creationHash', - Farmer = 'farmer', - FarmerCreationBlock = 'farmer__creationBlock', - FarmerId = 'farmer__id', - Fills = 'fills', - HistoryId = 'historyID', - Id = 'id', - MaxPlaceInLine = 'maxPlaceInLine', - MinFillAmount = 'minFillAmount', - PodAmountFilled = 'podAmountFilled', - PodMarketplace = 'podMarketplace', - PodMarketplaceAvailableListedPods = 'podMarketplace__availableListedPods', - PodMarketplaceAvailableOrderBeans = 'podMarketplace__availableOrderBeans', - PodMarketplaceBeanVolume = 'podMarketplace__beanVolume', - PodMarketplaceCancelledListedPods = 'podMarketplace__cancelledListedPods', - PodMarketplaceCancelledOrderBeans = 'podMarketplace__cancelledOrderBeans', - PodMarketplaceExpiredListedPods = 'podMarketplace__expiredListedPods', - PodMarketplaceFilledListedPods = 'podMarketplace__filledListedPods', - PodMarketplaceFilledOrderBeans = 'podMarketplace__filledOrderBeans', - PodMarketplaceFilledOrderedPods = 'podMarketplace__filledOrderedPods', - PodMarketplaceId = 'podMarketplace__id', - PodMarketplaceLastDailySnapshotDay = 'podMarketplace__lastDailySnapshotDay', - PodMarketplaceLastHourlySnapshotSeason = 'podMarketplace__lastHourlySnapshotSeason', - PodMarketplaceListedPods = 'podMarketplace__listedPods', - PodMarketplaceOrderBeans = 'podMarketplace__orderBeans', - PodMarketplacePodVolume = 'podMarketplace__podVolume', - PodMarketplaceSeason = 'podMarketplace__season', - PricePerPod = 'pricePerPod', - PricingFunction = 'pricingFunction', - PricingType = 'pricingType', - Status = 'status', - UpdatedAt = 'updatedAt' +export enum PodOrderOrderBy { + beanAmount = 'beanAmount', + beanAmountFilled = 'beanAmountFilled', + createdAt = 'createdAt', + creationHash = 'creationHash', + farmer = 'farmer', + farmer__creationBlock = 'farmer__creationBlock', + farmer__id = 'farmer__id', + farmer__refereeCount = 'farmer__refereeCount', + farmer__totalReferralRewardPodsReceived = 'farmer__totalReferralRewardPodsReceived', + fieldId = 'fieldId', + fills = 'fills', + historyID = 'historyID', + id = 'id', + maxPlaceInLine = 'maxPlaceInLine', + minFillAmount = 'minFillAmount', + podAmountFilled = 'podAmountFilled', + podMarketplace = 'podMarketplace', + podMarketplace__availableListedPods = 'podMarketplace__availableListedPods', + podMarketplace__availableOrderBeans = 'podMarketplace__availableOrderBeans', + podMarketplace__beanVolume = 'podMarketplace__beanVolume', + podMarketplace__cancelledListedPods = 'podMarketplace__cancelledListedPods', + podMarketplace__cancelledOrderBeans = 'podMarketplace__cancelledOrderBeans', + podMarketplace__expiredListedPods = 'podMarketplace__expiredListedPods', + podMarketplace__filledListedPods = 'podMarketplace__filledListedPods', + podMarketplace__filledOrderBeans = 'podMarketplace__filledOrderBeans', + podMarketplace__filledOrderedPods = 'podMarketplace__filledOrderedPods', + podMarketplace__id = 'podMarketplace__id', + podMarketplace__lastDailySnapshotDay = 'podMarketplace__lastDailySnapshotDay', + podMarketplace__lastHourlySnapshotSeason = 'podMarketplace__lastHourlySnapshotSeason', + podMarketplace__listedPods = 'podMarketplace__listedPods', + podMarketplace__orderBeans = 'podMarketplace__orderBeans', + podMarketplace__podVolume = 'podMarketplace__podVolume', + podMarketplace__season = 'podMarketplace__season', + pricePerPod = 'pricePerPod', + pricingFunction = 'pricingFunction', + pricingType = 'pricingType', + status = 'status', + updatedAt = 'updatedAt' } export type PrevFarmerGerminatingEvent = { @@ -6834,10 +6977,10 @@ export type PrevFarmerGerminatingEvent = { logIndex: Scalars['BigInt']['output']; }; -export type PrevFarmerGerminatingEvent_Filter = { +export type PrevFarmerGerminatingEventFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; deltaGerminatingStalk?: InputMaybe; deltaGerminatingStalk_gt?: InputMaybe; deltaGerminatingStalk_gte?: InputMaybe; @@ -6872,20 +7015,20 @@ export type PrevFarmerGerminatingEvent_Filter = { logIndex_lte?: InputMaybe; logIndex_not?: InputMaybe; logIndex_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; }; -export enum PrevFarmerGerminatingEvent_OrderBy { - DeltaGerminatingStalk = 'deltaGerminatingStalk', - EventBlock = 'eventBlock', - Id = 'id', - LogIndex = 'logIndex' +export enum PrevFarmerGerminatingEventOrderBy { + deltaGerminatingStalk = 'deltaGerminatingStalk', + eventBlock = 'eventBlock', + id = 'id', + logIndex = 'logIndex' } export type Query = { __typename?: 'Query'; /** Access to subgraph metadata */ - _meta?: Maybe<_Meta_>; + _meta?: Maybe; beanstalk?: Maybe; beanstalks: Array; chop?: Maybe; @@ -7001,1016 +7144,1016 @@ export type Query = { }; -export type Query_MetaArgs = { - block?: InputMaybe; +export type QueryMetaArgs = { + block?: InputMaybe; }; export type QueryBeanstalkArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryBeanstalksArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryChopArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryChopsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryFarmerArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryFarmersArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryFertilizerArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryFertilizerBalanceArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryFertilizerBalancesArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryFertilizerTokenArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryFertilizerTokensArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryFertilizerYieldArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryFertilizerYieldsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryFertilizersArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryFieldArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryFieldDailySnapshotArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryFieldDailySnapshotsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryFieldHourlySnapshotArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryFieldHourlySnapshotsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryFieldsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryGaugesInfoArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryGaugesInfoDailySnapshotArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryGaugesInfoDailySnapshotsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryGaugesInfoHourlySnapshotArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryGaugesInfoHourlySnapshotsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryGaugesInfosArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryGerminatingArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryGerminatingsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryMarketPerformanceSeasonalArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryMarketPerformanceSeasonalsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryMarketplaceEventArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryMarketplaceEventsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryPlotArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryPlotsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryPodFillArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryPodFillsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryPodListingArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryPodListingCancelledArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryPodListingCancelledsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryPodListingCreatedArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryPodListingCreatedsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryPodListingFilledArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryPodListingFilledsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryPodListingsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryPodMarketplaceArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryPodMarketplaceDailySnapshotArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryPodMarketplaceDailySnapshotsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryPodMarketplaceHourlySnapshotArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryPodMarketplaceHourlySnapshotsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryPodMarketplacesArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryPodOrderArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryPodOrderCancelledArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryPodOrderCancelledsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryPodOrderCreatedArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryPodOrderCreatedsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryPodOrderFilledArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryPodOrderFilledsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryPodOrdersArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryPrevFarmerGerminatingEventArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryPrevFarmerGerminatingEventsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QuerySeasonArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QuerySeasonsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QuerySiloArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QuerySiloAssetArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QuerySiloAssetDailySnapshotArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QuerySiloAssetDailySnapshotsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QuerySiloAssetHourlySnapshotArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QuerySiloAssetHourlySnapshotsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QuerySiloAssetsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QuerySiloDailySnapshotArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QuerySiloDailySnapshotsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QuerySiloDepositArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QuerySiloDepositsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QuerySiloHourlySnapshotArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QuerySiloHourlySnapshotsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QuerySiloWithdrawArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QuerySiloWithdrawsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QuerySiloYieldArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QuerySiloYieldsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QuerySilosArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryTokenYieldArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryTokenYieldsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryTractorArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryTractorDailySnapshotArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryTractorDailySnapshotsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryTractorHourlySnapshotArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryTractorHourlySnapshotsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryTractorRewardArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryTractorRewardsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryTractorsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryUnripeTokenArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryUnripeTokenDailySnapshotArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryUnripeTokenDailySnapshotsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryUnripeTokenHourlySnapshotArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryUnripeTokenHourlySnapshotsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryUnripeTokensArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryVersionArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryVersionsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryWellPlentiesArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryWellPlentyArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryWhitelistTokenDailySnapshotArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryWhitelistTokenDailySnapshotsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryWhitelistTokenHourlySnapshotArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryWhitelistTokenHourlySnapshotsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryWhitelistTokenSettingArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryWhitelistTokenSettingsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryWrappedDepositErc20Args = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryWrappedDepositErc20DailySnapshotArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryWrappedDepositErc20DailySnapshotsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryWrappedDepositErc20HourlySnapshotArgs = { - block?: InputMaybe; + block?: InputMaybe; id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; + subgraphError?: SubgraphErrorPolicy; }; export type QueryWrappedDepositErc20HourlySnapshotsArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type QueryWrappedDepositErc20SArgs = { - block?: InputMaybe; + block?: InputMaybe; first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; + subgraphError?: SubgraphErrorPolicy; + where?: InputMaybe; }; export type Season = { @@ -8049,10 +8192,10 @@ export type Season = { unmigratedL1Beans?: Maybe; }; -export type Season_Filter = { +export type SeasonFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; beans?: InputMaybe; beans_gt?: InputMaybe; beans_gte?: InputMaybe; @@ -8062,7 +8205,7 @@ export type Season_Filter = { beans_not?: InputMaybe; beans_not_in?: InputMaybe>; beanstalk?: InputMaybe; - beanstalk_?: InputMaybe; + beanstalk_?: InputMaybe; beanstalk_contains?: InputMaybe; beanstalk_contains_nocase?: InputMaybe; beanstalk_ends_with?: InputMaybe; @@ -8146,7 +8289,7 @@ export type Season_Filter = { marketCap_lte?: InputMaybe; marketCap_not?: InputMaybe; marketCap_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; price?: InputMaybe; price_gt?: InputMaybe; price_gte?: InputMaybe; @@ -8193,27 +8336,27 @@ export type Season_Filter = { unmigratedL1Beans_not_in?: InputMaybe>; }; -export enum Season_OrderBy { - Beans = 'beans', - Beanstalk = 'beanstalk', - BeanstalkFertilizer1155 = 'beanstalk__fertilizer1155', - BeanstalkId = 'beanstalk__id', - BeanstalkLastSeason = 'beanstalk__lastSeason', - BeanstalkToken = 'beanstalk__token', - CreatedAt = 'createdAt', - DeltaB = 'deltaB', - DeltaBeans = 'deltaBeans', - FloodFieldBeans = 'floodFieldBeans', - FloodSiloBeans = 'floodSiloBeans', - Id = 'id', - IncentiveBeans = 'incentiveBeans', - MarketCap = 'marketCap', - Price = 'price', - Raining = 'raining', - RewardBeans = 'rewardBeans', - Season = 'season', - SunriseBlock = 'sunriseBlock', - UnmigratedL1Beans = 'unmigratedL1Beans' +export enum SeasonOrderBy { + beans = 'beans', + beanstalk = 'beanstalk', + beanstalk__fertilizer1155 = 'beanstalk__fertilizer1155', + beanstalk__id = 'beanstalk__id', + beanstalk__lastSeason = 'beanstalk__lastSeason', + beanstalk__token = 'beanstalk__token', + createdAt = 'createdAt', + deltaB = 'deltaB', + deltaBeans = 'deltaBeans', + floodFieldBeans = 'floodFieldBeans', + floodSiloBeans = 'floodSiloBeans', + id = 'id', + incentiveBeans = 'incentiveBeans', + marketCap = 'marketCap', + price = 'price', + raining = 'raining', + rewardBeans = 'rewardBeans', + season = 'season', + sunriseBlock = 'sunriseBlock', + unmigratedL1Beans = 'unmigratedL1Beans' } export type Silo = { @@ -8287,37 +8430,37 @@ export type Silo = { export type SiloAssetsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type SiloDailySnapshotsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type SiloHourlySnapshotsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type SiloMarketPerformanceSeasonalsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type SiloAsset = { @@ -8347,19 +8490,19 @@ export type SiloAsset = { export type SiloAssetDailySnapshotsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type SiloAssetHourlySnapshotsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type SiloAssetDailySnapshot = { @@ -8385,10 +8528,10 @@ export type SiloAssetDailySnapshot = { withdrawnAmount: Scalars['BigInt']['output']; }; -export type SiloAssetDailySnapshot_Filter = { +export type SiloAssetDailySnapshotFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; createdAt?: InputMaybe; createdAt_gt?: InputMaybe; createdAt_gte?: InputMaybe; @@ -8445,7 +8588,7 @@ export type SiloAssetDailySnapshot_Filter = { id_lte?: InputMaybe; id_not?: InputMaybe; id_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; season?: InputMaybe; season_gt?: InputMaybe; season_gte?: InputMaybe; @@ -8455,7 +8598,7 @@ export type SiloAssetDailySnapshot_Filter = { season_not?: InputMaybe; season_not_in?: InputMaybe>; siloAsset?: InputMaybe; - siloAsset_?: InputMaybe; + siloAsset_?: InputMaybe; siloAsset_contains?: InputMaybe; siloAsset_contains_nocase?: InputMaybe; siloAsset_ends_with?: InputMaybe; @@ -8493,25 +8636,25 @@ export type SiloAssetDailySnapshot_Filter = { withdrawnAmount_not_in?: InputMaybe>; }; -export enum SiloAssetDailySnapshot_OrderBy { - CreatedAt = 'createdAt', - DeltaDepositedAmount = 'deltaDepositedAmount', - DeltaDepositedBdv = 'deltaDepositedBDV', - DeltaWithdrawnAmount = 'deltaWithdrawnAmount', - DepositedAmount = 'depositedAmount', - DepositedBdv = 'depositedBDV', - Id = 'id', - Season = 'season', - SiloAsset = 'siloAsset', - SiloAssetDepositedAmount = 'siloAsset__depositedAmount', - SiloAssetDepositedBdv = 'siloAsset__depositedBDV', - SiloAssetId = 'siloAsset__id', - SiloAssetLastDailySnapshotDay = 'siloAsset__lastDailySnapshotDay', - SiloAssetLastHourlySnapshotSeason = 'siloAsset__lastHourlySnapshotSeason', - SiloAssetToken = 'siloAsset__token', - SiloAssetWithdrawnAmount = 'siloAsset__withdrawnAmount', - UpdatedAt = 'updatedAt', - WithdrawnAmount = 'withdrawnAmount' +export enum SiloAssetDailySnapshotOrderBy { + createdAt = 'createdAt', + deltaDepositedAmount = 'deltaDepositedAmount', + deltaDepositedBDV = 'deltaDepositedBDV', + deltaWithdrawnAmount = 'deltaWithdrawnAmount', + depositedAmount = 'depositedAmount', + depositedBDV = 'depositedBDV', + id = 'id', + season = 'season', + siloAsset = 'siloAsset', + siloAsset__depositedAmount = 'siloAsset__depositedAmount', + siloAsset__depositedBDV = 'siloAsset__depositedBDV', + siloAsset__id = 'siloAsset__id', + siloAsset__lastDailySnapshotDay = 'siloAsset__lastDailySnapshotDay', + siloAsset__lastHourlySnapshotSeason = 'siloAsset__lastHourlySnapshotSeason', + siloAsset__token = 'siloAsset__token', + siloAsset__withdrawnAmount = 'siloAsset__withdrawnAmount', + updatedAt = 'updatedAt', + withdrawnAmount = 'withdrawnAmount' } export type SiloAssetHourlySnapshot = { @@ -8537,10 +8680,10 @@ export type SiloAssetHourlySnapshot = { withdrawnAmount: Scalars['BigInt']['output']; }; -export type SiloAssetHourlySnapshot_Filter = { +export type SiloAssetHourlySnapshotFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; createdAt?: InputMaybe; createdAt_gt?: InputMaybe; createdAt_gte?: InputMaybe; @@ -8597,7 +8740,7 @@ export type SiloAssetHourlySnapshot_Filter = { id_lte?: InputMaybe; id_not?: InputMaybe; id_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; season?: InputMaybe; season_gt?: InputMaybe; season_gte?: InputMaybe; @@ -8607,7 +8750,7 @@ export type SiloAssetHourlySnapshot_Filter = { season_not?: InputMaybe; season_not_in?: InputMaybe>; siloAsset?: InputMaybe; - siloAsset_?: InputMaybe; + siloAsset_?: InputMaybe; siloAsset_contains?: InputMaybe; siloAsset_contains_nocase?: InputMaybe; siloAsset_ends_with?: InputMaybe; @@ -8645,32 +8788,32 @@ export type SiloAssetHourlySnapshot_Filter = { withdrawnAmount_not_in?: InputMaybe>; }; -export enum SiloAssetHourlySnapshot_OrderBy { - CreatedAt = 'createdAt', - DeltaDepositedAmount = 'deltaDepositedAmount', - DeltaDepositedBdv = 'deltaDepositedBDV', - DeltaWithdrawnAmount = 'deltaWithdrawnAmount', - DepositedAmount = 'depositedAmount', - DepositedBdv = 'depositedBDV', - Id = 'id', - Season = 'season', - SiloAsset = 'siloAsset', - SiloAssetDepositedAmount = 'siloAsset__depositedAmount', - SiloAssetDepositedBdv = 'siloAsset__depositedBDV', - SiloAssetId = 'siloAsset__id', - SiloAssetLastDailySnapshotDay = 'siloAsset__lastDailySnapshotDay', - SiloAssetLastHourlySnapshotSeason = 'siloAsset__lastHourlySnapshotSeason', - SiloAssetToken = 'siloAsset__token', - SiloAssetWithdrawnAmount = 'siloAsset__withdrawnAmount', - UpdatedAt = 'updatedAt', - WithdrawnAmount = 'withdrawnAmount' +export enum SiloAssetHourlySnapshotOrderBy { + createdAt = 'createdAt', + deltaDepositedAmount = 'deltaDepositedAmount', + deltaDepositedBDV = 'deltaDepositedBDV', + deltaWithdrawnAmount = 'deltaWithdrawnAmount', + depositedAmount = 'depositedAmount', + depositedBDV = 'depositedBDV', + id = 'id', + season = 'season', + siloAsset = 'siloAsset', + siloAsset__depositedAmount = 'siloAsset__depositedAmount', + siloAsset__depositedBDV = 'siloAsset__depositedBDV', + siloAsset__id = 'siloAsset__id', + siloAsset__lastDailySnapshotDay = 'siloAsset__lastDailySnapshotDay', + siloAsset__lastHourlySnapshotSeason = 'siloAsset__lastHourlySnapshotSeason', + siloAsset__token = 'siloAsset__token', + siloAsset__withdrawnAmount = 'siloAsset__withdrawnAmount', + updatedAt = 'updatedAt', + withdrawnAmount = 'withdrawnAmount' } -export type SiloAsset_Filter = { +export type SiloAssetFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; - dailySnapshots_?: InputMaybe; + and?: InputMaybe>>; + dailySnapshots_?: InputMaybe; depositedAmount?: InputMaybe; depositedAmount_gt?: InputMaybe; depositedAmount_gte?: InputMaybe; @@ -8687,7 +8830,7 @@ export type SiloAsset_Filter = { depositedBDV_lte?: InputMaybe; depositedBDV_not?: InputMaybe; depositedBDV_not_in?: InputMaybe>; - hourlySnapshots_?: InputMaybe; + hourlySnapshots_?: InputMaybe; id?: InputMaybe; id_gt?: InputMaybe; id_gte?: InputMaybe; @@ -8712,9 +8855,9 @@ export type SiloAsset_Filter = { lastHourlySnapshotSeason_lte?: InputMaybe; lastHourlySnapshotSeason_not?: InputMaybe; lastHourlySnapshotSeason_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; silo?: InputMaybe; - silo_?: InputMaybe; + silo_?: InputMaybe; silo_contains?: InputMaybe; silo_contains_nocase?: InputMaybe; silo_ends_with?: InputMaybe; @@ -8754,40 +8897,40 @@ export type SiloAsset_Filter = { withdrawnAmount_not_in?: InputMaybe>; }; -export enum SiloAsset_OrderBy { - DailySnapshots = 'dailySnapshots', - DepositedAmount = 'depositedAmount', - DepositedBdv = 'depositedBDV', - HourlySnapshots = 'hourlySnapshots', - Id = 'id', - LastDailySnapshotDay = 'lastDailySnapshotDay', - LastHourlySnapshotSeason = 'lastHourlySnapshotSeason', - Silo = 'silo', - SiloActiveFarmers = 'silo__activeFarmers', - SiloAvgConvertDownPenalty = 'silo__avgConvertDownPenalty', - SiloAvgGrownStalkPerBdvPerSeason = 'silo__avgGrownStalkPerBdvPerSeason', - SiloBeanMints = 'silo__beanMints', - SiloBeanToMaxLpGpPerBdvRatio = 'silo__beanToMaxLpGpPerBdvRatio', - SiloBonusStalkConvertUp = 'silo__bonusStalkConvertUp', - SiloConvertDownPenalty = 'silo__convertDownPenalty', - SiloCropRatio = 'silo__cropRatio', - SiloDepositedBdv = 'silo__depositedBDV', - SiloGerminatingStalk = 'silo__germinatingStalk', - SiloGrownStalkPerSeason = 'silo__grownStalkPerSeason', - SiloId = 'silo__id', - SiloLastDailySnapshotDay = 'silo__lastDailySnapshotDay', - SiloLastHourlySnapshotSeason = 'silo__lastHourlySnapshotSeason', - SiloPenalizedStalkConvertDown = 'silo__penalizedStalkConvertDown', - SiloPlantableStalk = 'silo__plantableStalk', - SiloPlantedBeans = 'silo__plantedBeans', - SiloRoots = 'silo__roots', - SiloStalk = 'silo__stalk', - SiloTotalBdvConvertUp = 'silo__totalBdvConvertUp', - SiloTotalBdvConvertUpBonus = 'silo__totalBdvConvertUpBonus', - SiloUnmigratedL1DepositedBdv = 'silo__unmigratedL1DepositedBdv', - SiloUnpenalizedStalkConvertDown = 'silo__unpenalizedStalkConvertDown', - Token = 'token', - WithdrawnAmount = 'withdrawnAmount' +export enum SiloAssetOrderBy { + dailySnapshots = 'dailySnapshots', + depositedAmount = 'depositedAmount', + depositedBDV = 'depositedBDV', + hourlySnapshots = 'hourlySnapshots', + id = 'id', + lastDailySnapshotDay = 'lastDailySnapshotDay', + lastHourlySnapshotSeason = 'lastHourlySnapshotSeason', + silo = 'silo', + silo__activeFarmers = 'silo__activeFarmers', + silo__avgConvertDownPenalty = 'silo__avgConvertDownPenalty', + silo__avgGrownStalkPerBdvPerSeason = 'silo__avgGrownStalkPerBdvPerSeason', + silo__beanMints = 'silo__beanMints', + silo__beanToMaxLpGpPerBdvRatio = 'silo__beanToMaxLpGpPerBdvRatio', + silo__bonusStalkConvertUp = 'silo__bonusStalkConvertUp', + silo__convertDownPenalty = 'silo__convertDownPenalty', + silo__cropRatio = 'silo__cropRatio', + silo__depositedBDV = 'silo__depositedBDV', + silo__germinatingStalk = 'silo__germinatingStalk', + silo__grownStalkPerSeason = 'silo__grownStalkPerSeason', + silo__id = 'silo__id', + silo__lastDailySnapshotDay = 'silo__lastDailySnapshotDay', + silo__lastHourlySnapshotSeason = 'silo__lastHourlySnapshotSeason', + silo__penalizedStalkConvertDown = 'silo__penalizedStalkConvertDown', + silo__plantableStalk = 'silo__plantableStalk', + silo__plantedBeans = 'silo__plantedBeans', + silo__roots = 'silo__roots', + silo__stalk = 'silo__stalk', + silo__totalBdvConvertUp = 'silo__totalBdvConvertUp', + silo__totalBdvConvertUpBonus = 'silo__totalBdvConvertUpBonus', + silo__unmigratedL1DepositedBdv = 'silo__unmigratedL1DepositedBdv', + silo__unpenalizedStalkConvertDown = 'silo__unpenalizedStalkConvertDown', + token = 'token', + withdrawnAmount = 'withdrawnAmount' } export type SiloDailySnapshot = { @@ -8861,7 +9004,7 @@ export type SiloDailySnapshot = { updatedAt: Scalars['BigInt']['output']; }; -export type SiloDailySnapshot_Filter = { +export type SiloDailySnapshotFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; activeFarmers?: InputMaybe; @@ -8872,7 +9015,7 @@ export type SiloDailySnapshot_Filter = { activeFarmers_lte?: InputMaybe; activeFarmers_not?: InputMaybe; activeFarmers_not_in?: InputMaybe>; - and?: InputMaybe>>; + and?: InputMaybe>>; avgConvertDownPenalty?: InputMaybe; avgConvertDownPenalty_gt?: InputMaybe; avgConvertDownPenalty_gte?: InputMaybe; @@ -9121,7 +9264,7 @@ export type SiloDailySnapshot_Filter = { id_lte?: InputMaybe; id_not?: InputMaybe; id_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; penalizedStalkConvertDown?: InputMaybe; penalizedStalkConvertDown_gt?: InputMaybe; penalizedStalkConvertDown_gte?: InputMaybe; @@ -9163,7 +9306,7 @@ export type SiloDailySnapshot_Filter = { season_not?: InputMaybe; season_not_in?: InputMaybe>; silo?: InputMaybe; - silo_?: InputMaybe; + silo_?: InputMaybe; silo_contains?: InputMaybe; silo_contains_nocase?: InputMaybe; silo_ends_with?: InputMaybe; @@ -9225,73 +9368,73 @@ export type SiloDailySnapshot_Filter = { updatedAt_not_in?: InputMaybe>; }; -export enum SiloDailySnapshot_OrderBy { - ActiveFarmers = 'activeFarmers', - AvgConvertDownPenalty = 'avgConvertDownPenalty', - AvgGrownStalkPerBdvPerSeason = 'avgGrownStalkPerBdvPerSeason', - BeanMints = 'beanMints', - BeanToMaxLpGpPerBdvRatio = 'beanToMaxLpGpPerBdvRatio', - BonusStalkConvertUp = 'bonusStalkConvertUp', - ConvertDownPenalty = 'convertDownPenalty', - CreatedAt = 'createdAt', - CropRatio = 'cropRatio', - DeltaActiveFarmers = 'deltaActiveFarmers', - DeltaAvgConvertDownPenalty = 'deltaAvgConvertDownPenalty', - DeltaAvgGrownStalkPerBdvPerSeason = 'deltaAvgGrownStalkPerBdvPerSeason', - DeltaBeanMints = 'deltaBeanMints', - DeltaBeanToMaxLpGpPerBdvRatio = 'deltaBeanToMaxLpGpPerBdvRatio', - DeltaBonusStalkConvertUp = 'deltaBonusStalkConvertUp', - DeltaConvertDownPenalty = 'deltaConvertDownPenalty', - DeltaCropRatio = 'deltaCropRatio', - DeltaDepositedBdv = 'deltaDepositedBDV', - DeltaGerminatingStalk = 'deltaGerminatingStalk', - DeltaGrownStalkPerSeason = 'deltaGrownStalkPerSeason', - DeltaPenalizedStalkConvertDown = 'deltaPenalizedStalkConvertDown', - DeltaPlantableStalk = 'deltaPlantableStalk', - DeltaPlantedBeans = 'deltaPlantedBeans', - DeltaRoots = 'deltaRoots', - DeltaStalk = 'deltaStalk', - DeltaTotalBdvConvertUp = 'deltaTotalBdvConvertUp', - DeltaTotalBdvConvertUpBonus = 'deltaTotalBdvConvertUpBonus', - DeltaUnpenalizedStalkConvertDown = 'deltaUnpenalizedStalkConvertDown', - DepositedBdv = 'depositedBDV', - GerminatingStalk = 'germinatingStalk', - GrownStalkPerSeason = 'grownStalkPerSeason', - Id = 'id', - PenalizedStalkConvertDown = 'penalizedStalkConvertDown', - PlantableStalk = 'plantableStalk', - PlantedBeans = 'plantedBeans', - Roots = 'roots', - Season = 'season', - Silo = 'silo', - SiloActiveFarmers = 'silo__activeFarmers', - SiloAvgConvertDownPenalty = 'silo__avgConvertDownPenalty', - SiloAvgGrownStalkPerBdvPerSeason = 'silo__avgGrownStalkPerBdvPerSeason', - SiloBeanMints = 'silo__beanMints', - SiloBeanToMaxLpGpPerBdvRatio = 'silo__beanToMaxLpGpPerBdvRatio', - SiloBonusStalkConvertUp = 'silo__bonusStalkConvertUp', - SiloConvertDownPenalty = 'silo__convertDownPenalty', - SiloCropRatio = 'silo__cropRatio', - SiloDepositedBdv = 'silo__depositedBDV', - SiloGerminatingStalk = 'silo__germinatingStalk', - SiloGrownStalkPerSeason = 'silo__grownStalkPerSeason', - SiloId = 'silo__id', - SiloLastDailySnapshotDay = 'silo__lastDailySnapshotDay', - SiloLastHourlySnapshotSeason = 'silo__lastHourlySnapshotSeason', - SiloPenalizedStalkConvertDown = 'silo__penalizedStalkConvertDown', - SiloPlantableStalk = 'silo__plantableStalk', - SiloPlantedBeans = 'silo__plantedBeans', - SiloRoots = 'silo__roots', - SiloStalk = 'silo__stalk', - SiloTotalBdvConvertUp = 'silo__totalBdvConvertUp', - SiloTotalBdvConvertUpBonus = 'silo__totalBdvConvertUpBonus', - SiloUnmigratedL1DepositedBdv = 'silo__unmigratedL1DepositedBdv', - SiloUnpenalizedStalkConvertDown = 'silo__unpenalizedStalkConvertDown', - Stalk = 'stalk', - TotalBdvConvertUp = 'totalBdvConvertUp', - TotalBdvConvertUpBonus = 'totalBdvConvertUpBonus', - UnpenalizedStalkConvertDown = 'unpenalizedStalkConvertDown', - UpdatedAt = 'updatedAt' +export enum SiloDailySnapshotOrderBy { + activeFarmers = 'activeFarmers', + avgConvertDownPenalty = 'avgConvertDownPenalty', + avgGrownStalkPerBdvPerSeason = 'avgGrownStalkPerBdvPerSeason', + beanMints = 'beanMints', + beanToMaxLpGpPerBdvRatio = 'beanToMaxLpGpPerBdvRatio', + bonusStalkConvertUp = 'bonusStalkConvertUp', + convertDownPenalty = 'convertDownPenalty', + createdAt = 'createdAt', + cropRatio = 'cropRatio', + deltaActiveFarmers = 'deltaActiveFarmers', + deltaAvgConvertDownPenalty = 'deltaAvgConvertDownPenalty', + deltaAvgGrownStalkPerBdvPerSeason = 'deltaAvgGrownStalkPerBdvPerSeason', + deltaBeanMints = 'deltaBeanMints', + deltaBeanToMaxLpGpPerBdvRatio = 'deltaBeanToMaxLpGpPerBdvRatio', + deltaBonusStalkConvertUp = 'deltaBonusStalkConvertUp', + deltaConvertDownPenalty = 'deltaConvertDownPenalty', + deltaCropRatio = 'deltaCropRatio', + deltaDepositedBDV = 'deltaDepositedBDV', + deltaGerminatingStalk = 'deltaGerminatingStalk', + deltaGrownStalkPerSeason = 'deltaGrownStalkPerSeason', + deltaPenalizedStalkConvertDown = 'deltaPenalizedStalkConvertDown', + deltaPlantableStalk = 'deltaPlantableStalk', + deltaPlantedBeans = 'deltaPlantedBeans', + deltaRoots = 'deltaRoots', + deltaStalk = 'deltaStalk', + deltaTotalBdvConvertUp = 'deltaTotalBdvConvertUp', + deltaTotalBdvConvertUpBonus = 'deltaTotalBdvConvertUpBonus', + deltaUnpenalizedStalkConvertDown = 'deltaUnpenalizedStalkConvertDown', + depositedBDV = 'depositedBDV', + germinatingStalk = 'germinatingStalk', + grownStalkPerSeason = 'grownStalkPerSeason', + id = 'id', + penalizedStalkConvertDown = 'penalizedStalkConvertDown', + plantableStalk = 'plantableStalk', + plantedBeans = 'plantedBeans', + roots = 'roots', + season = 'season', + silo = 'silo', + silo__activeFarmers = 'silo__activeFarmers', + silo__avgConvertDownPenalty = 'silo__avgConvertDownPenalty', + silo__avgGrownStalkPerBdvPerSeason = 'silo__avgGrownStalkPerBdvPerSeason', + silo__beanMints = 'silo__beanMints', + silo__beanToMaxLpGpPerBdvRatio = 'silo__beanToMaxLpGpPerBdvRatio', + silo__bonusStalkConvertUp = 'silo__bonusStalkConvertUp', + silo__convertDownPenalty = 'silo__convertDownPenalty', + silo__cropRatio = 'silo__cropRatio', + silo__depositedBDV = 'silo__depositedBDV', + silo__germinatingStalk = 'silo__germinatingStalk', + silo__grownStalkPerSeason = 'silo__grownStalkPerSeason', + silo__id = 'silo__id', + silo__lastDailySnapshotDay = 'silo__lastDailySnapshotDay', + silo__lastHourlySnapshotSeason = 'silo__lastHourlySnapshotSeason', + silo__penalizedStalkConvertDown = 'silo__penalizedStalkConvertDown', + silo__plantableStalk = 'silo__plantableStalk', + silo__plantedBeans = 'silo__plantedBeans', + silo__roots = 'silo__roots', + silo__stalk = 'silo__stalk', + silo__totalBdvConvertUp = 'silo__totalBdvConvertUp', + silo__totalBdvConvertUpBonus = 'silo__totalBdvConvertUpBonus', + silo__unmigratedL1DepositedBdv = 'silo__unmigratedL1DepositedBdv', + silo__unpenalizedStalkConvertDown = 'silo__unpenalizedStalkConvertDown', + stalk = 'stalk', + totalBdvConvertUp = 'totalBdvConvertUp', + totalBdvConvertUpBonus = 'totalBdvConvertUpBonus', + unpenalizedStalkConvertDown = 'unpenalizedStalkConvertDown', + updatedAt = 'updatedAt' } export type SiloDeposit = { @@ -9310,10 +9453,7 @@ export type SiloDeposit = { farmer: Farmer; /** Transaction hashes pertaining to this deposit */ hashes: Array; - /** - * Account - Token Address - Deposit Version - (Season|Stem) - * - */ + /** Account - Token Address - Deposit Version - (Season|Stem) */ id: Scalars['ID']['output']; /** Season of deposit */ season?: Maybe; @@ -9329,10 +9469,10 @@ export type SiloDeposit = { updatedBlock: Scalars['BigInt']['output']; }; -export type SiloDeposit_Filter = { +export type SiloDepositFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; createdAt?: InputMaybe; createdAt_gt?: InputMaybe; createdAt_gte?: InputMaybe; @@ -9386,7 +9526,7 @@ export type SiloDeposit_Filter = { depositedBDV_not?: InputMaybe; depositedBDV_not_in?: InputMaybe>; farmer?: InputMaybe; - farmer_?: InputMaybe; + farmer_?: InputMaybe; farmer_contains?: InputMaybe; farmer_contains_nocase?: InputMaybe; farmer_ends_with?: InputMaybe; @@ -9420,7 +9560,7 @@ export type SiloDeposit_Filter = { id_lte?: InputMaybe; id_not?: InputMaybe; id_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; season?: InputMaybe; season_gt?: InputMaybe; season_gte?: InputMaybe; @@ -9473,23 +9613,25 @@ export type SiloDeposit_Filter = { updatedBlock_not_in?: InputMaybe>; }; -export enum SiloDeposit_OrderBy { - CreatedAt = 'createdAt', - CreatedBlock = 'createdBlock', - DepositVersion = 'depositVersion', - DepositedAmount = 'depositedAmount', - DepositedBdv = 'depositedBDV', - Farmer = 'farmer', - FarmerCreationBlock = 'farmer__creationBlock', - FarmerId = 'farmer__id', - Hashes = 'hashes', - Id = 'id', - Season = 'season', - Stem = 'stem', - StemV31 = 'stemV31', - Token = 'token', - UpdatedAt = 'updatedAt', - UpdatedBlock = 'updatedBlock' +export enum SiloDepositOrderBy { + createdAt = 'createdAt', + createdBlock = 'createdBlock', + depositVersion = 'depositVersion', + depositedAmount = 'depositedAmount', + depositedBDV = 'depositedBDV', + farmer = 'farmer', + farmer__creationBlock = 'farmer__creationBlock', + farmer__id = 'farmer__id', + farmer__refereeCount = 'farmer__refereeCount', + farmer__totalReferralRewardPodsReceived = 'farmer__totalReferralRewardPodsReceived', + hashes = 'hashes', + id = 'id', + season = 'season', + stem = 'stem', + stemV31 = 'stemV31', + token = 'token', + updatedAt = 'updatedAt', + updatedBlock = 'updatedBlock' } export type SiloHourlySnapshot = { @@ -9565,7 +9707,7 @@ export type SiloHourlySnapshot = { updatedAt: Scalars['BigInt']['output']; }; -export type SiloHourlySnapshot_Filter = { +export type SiloHourlySnapshotFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; activeFarmers?: InputMaybe; @@ -9576,7 +9718,7 @@ export type SiloHourlySnapshot_Filter = { activeFarmers_lte?: InputMaybe; activeFarmers_not?: InputMaybe; activeFarmers_not_in?: InputMaybe>; - and?: InputMaybe>>; + and?: InputMaybe>>; avgConvertDownPenalty?: InputMaybe; avgConvertDownPenalty_gt?: InputMaybe; avgConvertDownPenalty_gte?: InputMaybe; @@ -9833,7 +9975,7 @@ export type SiloHourlySnapshot_Filter = { id_lte?: InputMaybe; id_not?: InputMaybe; id_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; penalizedStalkConvertDown?: InputMaybe; penalizedStalkConvertDown_gt?: InputMaybe; penalizedStalkConvertDown_gte?: InputMaybe; @@ -9875,7 +10017,7 @@ export type SiloHourlySnapshot_Filter = { season_not?: InputMaybe; season_not_in?: InputMaybe>; silo?: InputMaybe; - silo_?: InputMaybe; + silo_?: InputMaybe; silo_contains?: InputMaybe; silo_contains_nocase?: InputMaybe; silo_ends_with?: InputMaybe; @@ -9937,74 +10079,74 @@ export type SiloHourlySnapshot_Filter = { updatedAt_not_in?: InputMaybe>; }; -export enum SiloHourlySnapshot_OrderBy { - ActiveFarmers = 'activeFarmers', - AvgConvertDownPenalty = 'avgConvertDownPenalty', - AvgGrownStalkPerBdvPerSeason = 'avgGrownStalkPerBdvPerSeason', - BeanMints = 'beanMints', - BeanToMaxLpGpPerBdvRatio = 'beanToMaxLpGpPerBdvRatio', - BonusStalkConvertUp = 'bonusStalkConvertUp', - CaseId = 'caseId', - ConvertDownPenalty = 'convertDownPenalty', - CreatedAt = 'createdAt', - CropRatio = 'cropRatio', - DeltaActiveFarmers = 'deltaActiveFarmers', - DeltaAvgConvertDownPenalty = 'deltaAvgConvertDownPenalty', - DeltaAvgGrownStalkPerBdvPerSeason = 'deltaAvgGrownStalkPerBdvPerSeason', - DeltaBeanMints = 'deltaBeanMints', - DeltaBeanToMaxLpGpPerBdvRatio = 'deltaBeanToMaxLpGpPerBdvRatio', - DeltaBonusStalkConvertUp = 'deltaBonusStalkConvertUp', - DeltaConvertDownPenalty = 'deltaConvertDownPenalty', - DeltaCropRatio = 'deltaCropRatio', - DeltaDepositedBdv = 'deltaDepositedBDV', - DeltaGerminatingStalk = 'deltaGerminatingStalk', - DeltaGrownStalkPerSeason = 'deltaGrownStalkPerSeason', - DeltaPenalizedStalkConvertDown = 'deltaPenalizedStalkConvertDown', - DeltaPlantableStalk = 'deltaPlantableStalk', - DeltaPlantedBeans = 'deltaPlantedBeans', - DeltaRoots = 'deltaRoots', - DeltaStalk = 'deltaStalk', - DeltaTotalBdvConvertUp = 'deltaTotalBdvConvertUp', - DeltaTotalBdvConvertUpBonus = 'deltaTotalBdvConvertUpBonus', - DeltaUnpenalizedStalkConvertDown = 'deltaUnpenalizedStalkConvertDown', - DepositedBdv = 'depositedBDV', - GerminatingStalk = 'germinatingStalk', - GrownStalkPerSeason = 'grownStalkPerSeason', - Id = 'id', - PenalizedStalkConvertDown = 'penalizedStalkConvertDown', - PlantableStalk = 'plantableStalk', - PlantedBeans = 'plantedBeans', - Roots = 'roots', - Season = 'season', - Silo = 'silo', - SiloActiveFarmers = 'silo__activeFarmers', - SiloAvgConvertDownPenalty = 'silo__avgConvertDownPenalty', - SiloAvgGrownStalkPerBdvPerSeason = 'silo__avgGrownStalkPerBdvPerSeason', - SiloBeanMints = 'silo__beanMints', - SiloBeanToMaxLpGpPerBdvRatio = 'silo__beanToMaxLpGpPerBdvRatio', - SiloBonusStalkConvertUp = 'silo__bonusStalkConvertUp', - SiloConvertDownPenalty = 'silo__convertDownPenalty', - SiloCropRatio = 'silo__cropRatio', - SiloDepositedBdv = 'silo__depositedBDV', - SiloGerminatingStalk = 'silo__germinatingStalk', - SiloGrownStalkPerSeason = 'silo__grownStalkPerSeason', - SiloId = 'silo__id', - SiloLastDailySnapshotDay = 'silo__lastDailySnapshotDay', - SiloLastHourlySnapshotSeason = 'silo__lastHourlySnapshotSeason', - SiloPenalizedStalkConvertDown = 'silo__penalizedStalkConvertDown', - SiloPlantableStalk = 'silo__plantableStalk', - SiloPlantedBeans = 'silo__plantedBeans', - SiloRoots = 'silo__roots', - SiloStalk = 'silo__stalk', - SiloTotalBdvConvertUp = 'silo__totalBdvConvertUp', - SiloTotalBdvConvertUpBonus = 'silo__totalBdvConvertUpBonus', - SiloUnmigratedL1DepositedBdv = 'silo__unmigratedL1DepositedBdv', - SiloUnpenalizedStalkConvertDown = 'silo__unpenalizedStalkConvertDown', - Stalk = 'stalk', - TotalBdvConvertUp = 'totalBdvConvertUp', - TotalBdvConvertUpBonus = 'totalBdvConvertUpBonus', - UnpenalizedStalkConvertDown = 'unpenalizedStalkConvertDown', - UpdatedAt = 'updatedAt' +export enum SiloHourlySnapshotOrderBy { + activeFarmers = 'activeFarmers', + avgConvertDownPenalty = 'avgConvertDownPenalty', + avgGrownStalkPerBdvPerSeason = 'avgGrownStalkPerBdvPerSeason', + beanMints = 'beanMints', + beanToMaxLpGpPerBdvRatio = 'beanToMaxLpGpPerBdvRatio', + bonusStalkConvertUp = 'bonusStalkConvertUp', + caseId = 'caseId', + convertDownPenalty = 'convertDownPenalty', + createdAt = 'createdAt', + cropRatio = 'cropRatio', + deltaActiveFarmers = 'deltaActiveFarmers', + deltaAvgConvertDownPenalty = 'deltaAvgConvertDownPenalty', + deltaAvgGrownStalkPerBdvPerSeason = 'deltaAvgGrownStalkPerBdvPerSeason', + deltaBeanMints = 'deltaBeanMints', + deltaBeanToMaxLpGpPerBdvRatio = 'deltaBeanToMaxLpGpPerBdvRatio', + deltaBonusStalkConvertUp = 'deltaBonusStalkConvertUp', + deltaConvertDownPenalty = 'deltaConvertDownPenalty', + deltaCropRatio = 'deltaCropRatio', + deltaDepositedBDV = 'deltaDepositedBDV', + deltaGerminatingStalk = 'deltaGerminatingStalk', + deltaGrownStalkPerSeason = 'deltaGrownStalkPerSeason', + deltaPenalizedStalkConvertDown = 'deltaPenalizedStalkConvertDown', + deltaPlantableStalk = 'deltaPlantableStalk', + deltaPlantedBeans = 'deltaPlantedBeans', + deltaRoots = 'deltaRoots', + deltaStalk = 'deltaStalk', + deltaTotalBdvConvertUp = 'deltaTotalBdvConvertUp', + deltaTotalBdvConvertUpBonus = 'deltaTotalBdvConvertUpBonus', + deltaUnpenalizedStalkConvertDown = 'deltaUnpenalizedStalkConvertDown', + depositedBDV = 'depositedBDV', + germinatingStalk = 'germinatingStalk', + grownStalkPerSeason = 'grownStalkPerSeason', + id = 'id', + penalizedStalkConvertDown = 'penalizedStalkConvertDown', + plantableStalk = 'plantableStalk', + plantedBeans = 'plantedBeans', + roots = 'roots', + season = 'season', + silo = 'silo', + silo__activeFarmers = 'silo__activeFarmers', + silo__avgConvertDownPenalty = 'silo__avgConvertDownPenalty', + silo__avgGrownStalkPerBdvPerSeason = 'silo__avgGrownStalkPerBdvPerSeason', + silo__beanMints = 'silo__beanMints', + silo__beanToMaxLpGpPerBdvRatio = 'silo__beanToMaxLpGpPerBdvRatio', + silo__bonusStalkConvertUp = 'silo__bonusStalkConvertUp', + silo__convertDownPenalty = 'silo__convertDownPenalty', + silo__cropRatio = 'silo__cropRatio', + silo__depositedBDV = 'silo__depositedBDV', + silo__germinatingStalk = 'silo__germinatingStalk', + silo__grownStalkPerSeason = 'silo__grownStalkPerSeason', + silo__id = 'silo__id', + silo__lastDailySnapshotDay = 'silo__lastDailySnapshotDay', + silo__lastHourlySnapshotSeason = 'silo__lastHourlySnapshotSeason', + silo__penalizedStalkConvertDown = 'silo__penalizedStalkConvertDown', + silo__plantableStalk = 'silo__plantableStalk', + silo__plantedBeans = 'silo__plantedBeans', + silo__roots = 'silo__roots', + silo__stalk = 'silo__stalk', + silo__totalBdvConvertUp = 'silo__totalBdvConvertUp', + silo__totalBdvConvertUpBonus = 'silo__totalBdvConvertUpBonus', + silo__unmigratedL1DepositedBdv = 'silo__unmigratedL1DepositedBdv', + silo__unpenalizedStalkConvertDown = 'silo__unpenalizedStalkConvertDown', + stalk = 'stalk', + totalBdvConvertUp = 'totalBdvConvertUp', + totalBdvConvertUpBonus = 'totalBdvConvertUpBonus', + unpenalizedStalkConvertDown = 'unpenalizedStalkConvertDown', + updatedAt = 'updatedAt' } export type SiloWithdraw = { @@ -10027,7 +10169,7 @@ export type SiloWithdraw = { withdrawSeason: Scalars['Int']['output']; }; -export type SiloWithdraw_Filter = { +export type SiloWithdrawFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; amount?: InputMaybe; @@ -10038,7 +10180,7 @@ export type SiloWithdraw_Filter = { amount_lte?: InputMaybe; amount_not?: InputMaybe; amount_not_in?: InputMaybe>; - and?: InputMaybe>>; + and?: InputMaybe>>; claimableSeason?: InputMaybe; claimableSeason_gt?: InputMaybe; claimableSeason_gte?: InputMaybe; @@ -10060,7 +10202,7 @@ export type SiloWithdraw_Filter = { createdAt_not?: InputMaybe; createdAt_not_in?: InputMaybe>; farmer?: InputMaybe; - farmer_?: InputMaybe; + farmer_?: InputMaybe; farmer_contains?: InputMaybe; farmer_contains_nocase?: InputMaybe; farmer_ends_with?: InputMaybe; @@ -10088,7 +10230,7 @@ export type SiloWithdraw_Filter = { id_lte?: InputMaybe; id_not?: InputMaybe; id_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; token?: InputMaybe; token_contains?: InputMaybe; token_gt?: InputMaybe; @@ -10109,17 +10251,19 @@ export type SiloWithdraw_Filter = { withdrawSeason_not_in?: InputMaybe>; }; -export enum SiloWithdraw_OrderBy { - Amount = 'amount', - ClaimableSeason = 'claimableSeason', - Claimed = 'claimed', - CreatedAt = 'createdAt', - Farmer = 'farmer', - FarmerCreationBlock = 'farmer__creationBlock', - FarmerId = 'farmer__id', - Id = 'id', - Token = 'token', - WithdrawSeason = 'withdrawSeason' +export enum SiloWithdrawOrderBy { + amount = 'amount', + claimableSeason = 'claimableSeason', + claimed = 'claimed', + createdAt = 'createdAt', + farmer = 'farmer', + farmer__creationBlock = 'farmer__creationBlock', + farmer__id = 'farmer__id', + farmer__refereeCount = 'farmer__refereeCount', + farmer__totalReferralRewardPodsReceived = 'farmer__totalReferralRewardPodsReceived', + id = 'id', + token = 'token', + withdrawSeason = 'withdrawSeason' } export type SiloYield = { @@ -10147,16 +10291,16 @@ export type SiloYield = { export type SiloYieldTokenApysArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; -export type SiloYield_Filter = { +export type SiloYieldFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; beansPerSeasonEMA?: InputMaybe; beansPerSeasonEMA_gt?: InputMaybe; beansPerSeasonEMA_gte?: InputMaybe; @@ -10193,7 +10337,7 @@ export type SiloYield_Filter = { id_lte?: InputMaybe; id_not?: InputMaybe; id_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; season?: InputMaybe; season_gt?: InputMaybe; season_gte?: InputMaybe; @@ -10202,7 +10346,7 @@ export type SiloYield_Filter = { season_lte?: InputMaybe; season_not?: InputMaybe; season_not_in?: InputMaybe>; - tokenAPYS_?: InputMaybe; + tokenAPYS_?: InputMaybe; u?: InputMaybe; u_gt?: InputMaybe; u_gte?: InputMaybe; @@ -10219,19 +10363,19 @@ export type SiloYield_Filter = { whitelistedTokens_not_contains_nocase?: InputMaybe>; }; -export enum SiloYield_OrderBy { - BeansPerSeasonEma = 'beansPerSeasonEMA', - Beta = 'beta', - CreatedAt = 'createdAt', - EmaWindow = 'emaWindow', - Id = 'id', - Season = 'season', - TokenApys = 'tokenAPYS', - U = 'u', - WhitelistedTokens = 'whitelistedTokens' +export enum SiloYieldOrderBy { + beansPerSeasonEMA = 'beansPerSeasonEMA', + beta = 'beta', + createdAt = 'createdAt', + emaWindow = 'emaWindow', + id = 'id', + season = 'season', + tokenAPYS = 'tokenAPYS', + u = 'u', + whitelistedTokens = 'whitelistedTokens' } -export type Silo_Filter = { +export type SiloFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; activeFarmers?: InputMaybe; @@ -10248,8 +10392,8 @@ export type Silo_Filter = { allWhitelistedTokens_not?: InputMaybe>; allWhitelistedTokens_not_contains?: InputMaybe>; allWhitelistedTokens_not_contains_nocase?: InputMaybe>; - and?: InputMaybe>>; - assets_?: InputMaybe; + and?: InputMaybe>>; + assets_?: InputMaybe; avgConvertDownPenalty?: InputMaybe; avgConvertDownPenalty_gt?: InputMaybe; avgConvertDownPenalty_gte?: InputMaybe; @@ -10283,7 +10427,7 @@ export type Silo_Filter = { beanToMaxLpGpPerBdvRatio_not?: InputMaybe; beanToMaxLpGpPerBdvRatio_not_in?: InputMaybe>; beanstalk?: InputMaybe; - beanstalk_?: InputMaybe; + beanstalk_?: InputMaybe; beanstalk_contains?: InputMaybe; beanstalk_contains_nocase?: InputMaybe; beanstalk_ends_with?: InputMaybe; @@ -10327,7 +10471,7 @@ export type Silo_Filter = { cropRatio_lte?: InputMaybe; cropRatio_not?: InputMaybe; cropRatio_not_in?: InputMaybe>; - dailySnapshots_?: InputMaybe; + dailySnapshots_?: InputMaybe; depositedBDV?: InputMaybe; depositedBDV_gt?: InputMaybe; depositedBDV_gte?: InputMaybe; @@ -10343,7 +10487,7 @@ export type Silo_Filter = { dewhitelistedTokens_not_contains?: InputMaybe>; dewhitelistedTokens_not_contains_nocase?: InputMaybe>; farmer?: InputMaybe; - farmer_?: InputMaybe; + farmer_?: InputMaybe; farmer_contains?: InputMaybe; farmer_contains_nocase?: InputMaybe; farmer_ends_with?: InputMaybe; @@ -10379,7 +10523,7 @@ export type Silo_Filter = { grownStalkPerSeason_lte?: InputMaybe; grownStalkPerSeason_not?: InputMaybe; grownStalkPerSeason_not_in?: InputMaybe>; - hourlySnapshots_?: InputMaybe; + hourlySnapshots_?: InputMaybe; id?: InputMaybe; id_contains?: InputMaybe; id_gt?: InputMaybe; @@ -10406,8 +10550,8 @@ export type Silo_Filter = { lastHourlySnapshotSeason_lte?: InputMaybe; lastHourlySnapshotSeason_not?: InputMaybe; lastHourlySnapshotSeason_not_in?: InputMaybe>; - marketPerformanceSeasonals_?: InputMaybe; - or?: InputMaybe>>; + marketPerformanceSeasonals_?: InputMaybe; + or?: InputMaybe>>; penalizedStalkConvertDown?: InputMaybe; penalizedStalkConvertDown_gt?: InputMaybe; penalizedStalkConvertDown_gte?: InputMaybe; @@ -10488,1200 +10632,71 @@ export type Silo_Filter = { whitelistedTokens_not_contains_nocase?: InputMaybe>; }; -export enum Silo_OrderBy { - ActiveFarmers = 'activeFarmers', - AllWhitelistedTokens = 'allWhitelistedTokens', - Assets = 'assets', - AvgConvertDownPenalty = 'avgConvertDownPenalty', - AvgGrownStalkPerBdvPerSeason = 'avgGrownStalkPerBdvPerSeason', - BeanMints = 'beanMints', - BeanToMaxLpGpPerBdvRatio = 'beanToMaxLpGpPerBdvRatio', - Beanstalk = 'beanstalk', - BeanstalkFertilizer1155 = 'beanstalk__fertilizer1155', - BeanstalkId = 'beanstalk__id', - BeanstalkLastSeason = 'beanstalk__lastSeason', - BeanstalkToken = 'beanstalk__token', - BonusStalkConvertUp = 'bonusStalkConvertUp', - ConvertDownPenalty = 'convertDownPenalty', - CropRatio = 'cropRatio', - DailySnapshots = 'dailySnapshots', - DepositedBdv = 'depositedBDV', - DewhitelistedTokens = 'dewhitelistedTokens', - Farmer = 'farmer', - FarmerCreationBlock = 'farmer__creationBlock', - FarmerId = 'farmer__id', - GerminatingStalk = 'germinatingStalk', - GrownStalkPerSeason = 'grownStalkPerSeason', - HourlySnapshots = 'hourlySnapshots', - Id = 'id', - LastDailySnapshotDay = 'lastDailySnapshotDay', - LastHourlySnapshotSeason = 'lastHourlySnapshotSeason', - MarketPerformanceSeasonals = 'marketPerformanceSeasonals', - PenalizedStalkConvertDown = 'penalizedStalkConvertDown', - PlantableStalk = 'plantableStalk', - PlantedBeans = 'plantedBeans', - Roots = 'roots', - Stalk = 'stalk', - TotalBdvConvertUp = 'totalBdvConvertUp', - TotalBdvConvertUpBonus = 'totalBdvConvertUpBonus', - UnmigratedL1DepositedBdv = 'unmigratedL1DepositedBdv', - UnpenalizedStalkConvertDown = 'unpenalizedStalkConvertDown', - WhitelistedTokens = 'whitelistedTokens' +export enum SiloOrderBy { + activeFarmers = 'activeFarmers', + allWhitelistedTokens = 'allWhitelistedTokens', + assets = 'assets', + avgConvertDownPenalty = 'avgConvertDownPenalty', + avgGrownStalkPerBdvPerSeason = 'avgGrownStalkPerBdvPerSeason', + beanMints = 'beanMints', + beanToMaxLpGpPerBdvRatio = 'beanToMaxLpGpPerBdvRatio', + beanstalk = 'beanstalk', + beanstalk__fertilizer1155 = 'beanstalk__fertilizer1155', + beanstalk__id = 'beanstalk__id', + beanstalk__lastSeason = 'beanstalk__lastSeason', + beanstalk__token = 'beanstalk__token', + bonusStalkConvertUp = 'bonusStalkConvertUp', + convertDownPenalty = 'convertDownPenalty', + cropRatio = 'cropRatio', + dailySnapshots = 'dailySnapshots', + depositedBDV = 'depositedBDV', + dewhitelistedTokens = 'dewhitelistedTokens', + farmer = 'farmer', + farmer__creationBlock = 'farmer__creationBlock', + farmer__id = 'farmer__id', + farmer__refereeCount = 'farmer__refereeCount', + farmer__totalReferralRewardPodsReceived = 'farmer__totalReferralRewardPodsReceived', + germinatingStalk = 'germinatingStalk', + grownStalkPerSeason = 'grownStalkPerSeason', + hourlySnapshots = 'hourlySnapshots', + id = 'id', + lastDailySnapshotDay = 'lastDailySnapshotDay', + lastHourlySnapshotSeason = 'lastHourlySnapshotSeason', + marketPerformanceSeasonals = 'marketPerformanceSeasonals', + penalizedStalkConvertDown = 'penalizedStalkConvertDown', + plantableStalk = 'plantableStalk', + plantedBeans = 'plantedBeans', + roots = 'roots', + stalk = 'stalk', + totalBdvConvertUp = 'totalBdvConvertUp', + totalBdvConvertUpBonus = 'totalBdvConvertUpBonus', + unmigratedL1DepositedBdv = 'unmigratedL1DepositedBdv', + unpenalizedStalkConvertDown = 'unpenalizedStalkConvertDown', + whitelistedTokens = 'whitelistedTokens' } -export type Subscription = { - __typename?: 'Subscription'; - /** Access to subgraph metadata */ - _meta?: Maybe<_Meta_>; - beanstalk?: Maybe; - beanstalks: Array; - chop?: Maybe; - chops: Array; - farmer?: Maybe; - farmers: Array; - fertilizer?: Maybe; - fertilizerBalance?: Maybe; - fertilizerBalances: Array; - fertilizerToken?: Maybe; - fertilizerTokens: Array; - fertilizerYield?: Maybe; - fertilizerYields: Array; - fertilizers: Array; - field?: Maybe; - fieldDailySnapshot?: Maybe; - fieldDailySnapshots: Array; - fieldHourlySnapshot?: Maybe; - fieldHourlySnapshots: Array; - fields: Array; - gaugesInfo?: Maybe; - gaugesInfoDailySnapshot?: Maybe; - gaugesInfoDailySnapshots: Array; - gaugesInfoHourlySnapshot?: Maybe; - gaugesInfoHourlySnapshots: Array; - gaugesInfos: Array; - germinating?: Maybe; - germinatings: Array; - marketPerformanceSeasonal?: Maybe; - marketPerformanceSeasonals: Array; - marketplaceEvent?: Maybe; - marketplaceEvents: Array; - plot?: Maybe; - plots: Array; - podFill?: Maybe; - podFills: Array; - podListing?: Maybe; - podListingCancelled?: Maybe; - podListingCancelleds: Array; - podListingCreated?: Maybe; - podListingCreateds: Array; - podListingFilled?: Maybe; - podListingFilleds: Array; - podListings: Array; - podMarketplace?: Maybe; - podMarketplaceDailySnapshot?: Maybe; - podMarketplaceDailySnapshots: Array; - podMarketplaceHourlySnapshot?: Maybe; - podMarketplaceHourlySnapshots: Array; - podMarketplaces: Array; - podOrder?: Maybe; - podOrderCancelled?: Maybe; - podOrderCancelleds: Array; - podOrderCreated?: Maybe; - podOrderCreateds: Array; - podOrderFilled?: Maybe; - podOrderFilleds: Array; - podOrders: Array; - prevFarmerGerminatingEvent?: Maybe; - prevFarmerGerminatingEvents: Array; - season?: Maybe; - seasons: Array; - silo?: Maybe; - siloAsset?: Maybe; - siloAssetDailySnapshot?: Maybe; - siloAssetDailySnapshots: Array; - siloAssetHourlySnapshot?: Maybe; - siloAssetHourlySnapshots: Array; - siloAssets: Array; - siloDailySnapshot?: Maybe; - siloDailySnapshots: Array; - siloDeposit?: Maybe; - siloDeposits: Array; - siloHourlySnapshot?: Maybe; - siloHourlySnapshots: Array; - siloWithdraw?: Maybe; - siloWithdraws: Array; - siloYield?: Maybe; - siloYields: Array; - silos: Array; - tokenYield?: Maybe; - tokenYields: Array; - tractor?: Maybe; - tractorDailySnapshot?: Maybe; - tractorDailySnapshots: Array; - tractorHourlySnapshot?: Maybe; - tractorHourlySnapshots: Array; - tractorReward?: Maybe; - tractorRewards: Array; - tractors: Array; - unripeToken?: Maybe; - unripeTokenDailySnapshot?: Maybe; - unripeTokenDailySnapshots: Array; - unripeTokenHourlySnapshot?: Maybe; - unripeTokenHourlySnapshots: Array; - unripeTokens: Array; - version?: Maybe; - versions: Array; - wellPlenties: Array; - wellPlenty?: Maybe; - whitelistTokenDailySnapshot?: Maybe; - whitelistTokenDailySnapshots: Array; - whitelistTokenHourlySnapshot?: Maybe; - whitelistTokenHourlySnapshots: Array; - whitelistTokenSetting?: Maybe; - whitelistTokenSettings: Array; - wrappedDepositERC20?: Maybe; - wrappedDepositERC20DailySnapshot?: Maybe; - wrappedDepositERC20DailySnapshots: Array; - wrappedDepositERC20HourlySnapshot?: Maybe; - wrappedDepositERC20HourlySnapshots: Array; - wrappedDepositERC20S: Array; -}; - - -export type Subscription_MetaArgs = { - block?: InputMaybe; -}; - - -export type SubscriptionBeanstalkArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionBeanstalksArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionChopArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionChopsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionFarmerArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionFarmersArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionFertilizerArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionFertilizerBalanceArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionFertilizerBalancesArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionFertilizerTokenArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionFertilizerTokensArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionFertilizerYieldArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionFertilizerYieldsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; +export type TokenYield = { + __typename?: 'TokenYield'; + /** Bean APY for season */ + beanAPY: Scalars['BigDecimal']['output']; + /** Unix timestamp of update */ + createdAt: Scalars['BigInt']['output']; + /** Token address - season - EMA window */ + id: Scalars['Bytes']['output']; + /** Season for APY calculation */ + season: Scalars['Int']['output']; + /** Related silo yield entity */ + siloYield: SiloYield; + /** Stalk APY for season */ + stalkAPY: Scalars['BigDecimal']['output']; + /** Token being calculated */ + token: Scalars['Bytes']['output']; }; - -export type SubscriptionFertilizersArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionFieldArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionFieldDailySnapshotArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionFieldDailySnapshotsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionFieldHourlySnapshotArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionFieldHourlySnapshotsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionFieldsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionGaugesInfoArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionGaugesInfoDailySnapshotArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionGaugesInfoDailySnapshotsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionGaugesInfoHourlySnapshotArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionGaugesInfoHourlySnapshotsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionGaugesInfosArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionGerminatingArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionGerminatingsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionMarketPerformanceSeasonalArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionMarketPerformanceSeasonalsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionMarketplaceEventArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionMarketplaceEventsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionPlotArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionPlotsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionPodFillArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionPodFillsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionPodListingArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionPodListingCancelledArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionPodListingCancelledsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionPodListingCreatedArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionPodListingCreatedsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionPodListingFilledArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionPodListingFilledsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionPodListingsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionPodMarketplaceArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionPodMarketplaceDailySnapshotArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionPodMarketplaceDailySnapshotsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionPodMarketplaceHourlySnapshotArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionPodMarketplaceHourlySnapshotsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionPodMarketplacesArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionPodOrderArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionPodOrderCancelledArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionPodOrderCancelledsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionPodOrderCreatedArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionPodOrderCreatedsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionPodOrderFilledArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionPodOrderFilledsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionPodOrdersArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionPrevFarmerGerminatingEventArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionPrevFarmerGerminatingEventsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionSeasonArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionSeasonsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionSiloArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionSiloAssetArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionSiloAssetDailySnapshotArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionSiloAssetDailySnapshotsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionSiloAssetHourlySnapshotArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionSiloAssetHourlySnapshotsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionSiloAssetsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionSiloDailySnapshotArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionSiloDailySnapshotsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionSiloDepositArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionSiloDepositsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionSiloHourlySnapshotArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionSiloHourlySnapshotsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionSiloWithdrawArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionSiloWithdrawsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionSiloYieldArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionSiloYieldsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionSilosArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionTokenYieldArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionTokenYieldsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionTractorArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionTractorDailySnapshotArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionTractorDailySnapshotsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionTractorHourlySnapshotArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionTractorHourlySnapshotsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionTractorRewardArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionTractorRewardsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionTractorsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionUnripeTokenArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionUnripeTokenDailySnapshotArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionUnripeTokenDailySnapshotsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionUnripeTokenHourlySnapshotArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionUnripeTokenHourlySnapshotsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionUnripeTokensArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionVersionArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionVersionsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionWellPlentiesArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionWellPlentyArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionWhitelistTokenDailySnapshotArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionWhitelistTokenDailySnapshotsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionWhitelistTokenHourlySnapshotArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionWhitelistTokenHourlySnapshotsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionWhitelistTokenSettingArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionWhitelistTokenSettingsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionWrappedDepositErc20Args = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionWrappedDepositErc20DailySnapshotArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionWrappedDepositErc20DailySnapshotsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionWrappedDepositErc20HourlySnapshotArgs = { - block?: InputMaybe; - id: Scalars['ID']['input']; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type SubscriptionWrappedDepositErc20HourlySnapshotsArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - - -export type SubscriptionWrappedDepositErc20SArgs = { - block?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - skip?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; - where?: InputMaybe; -}; - -export type TokenYield = { - __typename?: 'TokenYield'; - /** Bean APY for season */ - beanAPY: Scalars['BigDecimal']['output']; - /** Unix timestamp of update */ - createdAt: Scalars['BigInt']['output']; - /** Token address - season - EMA window */ - id: Scalars['Bytes']['output']; - /** Season for APY calculation */ - season: Scalars['Int']['output']; - /** Related silo yield entity */ - siloYield: SiloYield; - /** Stalk APY for season */ - stalkAPY: Scalars['BigDecimal']['output']; - /** Token being calculated */ - token: Scalars['Bytes']['output']; -}; - -export type TokenYield_Filter = { +export type TokenYieldFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; beanAPY?: InputMaybe; beanAPY_gt?: InputMaybe; beanAPY_gte?: InputMaybe; @@ -11708,7 +10723,7 @@ export type TokenYield_Filter = { id_not?: InputMaybe; id_not_contains?: InputMaybe; id_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; season?: InputMaybe; season_gt?: InputMaybe; season_gte?: InputMaybe; @@ -11718,7 +10733,7 @@ export type TokenYield_Filter = { season_not?: InputMaybe; season_not_in?: InputMaybe>; siloYield?: InputMaybe; - siloYield_?: InputMaybe; + siloYield_?: InputMaybe; siloYield_contains?: InputMaybe; siloYield_contains_nocase?: InputMaybe; siloYield_ends_with?: InputMaybe; @@ -11758,21 +10773,21 @@ export type TokenYield_Filter = { token_not_in?: InputMaybe>; }; -export enum TokenYield_OrderBy { - BeanApy = 'beanAPY', - CreatedAt = 'createdAt', - Id = 'id', - Season = 'season', - SiloYield = 'siloYield', - SiloYieldBeansPerSeasonEma = 'siloYield__beansPerSeasonEMA', - SiloYieldBeta = 'siloYield__beta', - SiloYieldCreatedAt = 'siloYield__createdAt', - SiloYieldEmaWindow = 'siloYield__emaWindow', - SiloYieldId = 'siloYield__id', - SiloYieldSeason = 'siloYield__season', - SiloYieldU = 'siloYield__u', - StalkApy = 'stalkAPY', - Token = 'token' +export enum TokenYieldOrderBy { + beanAPY = 'beanAPY', + createdAt = 'createdAt', + id = 'id', + season = 'season', + siloYield = 'siloYield', + siloYield__beansPerSeasonEMA = 'siloYield__beansPerSeasonEMA', + siloYield__beta = 'siloYield__beta', + siloYield__createdAt = 'siloYield__createdAt', + siloYield__emaWindow = 'siloYield__emaWindow', + siloYield__id = 'siloYield__id', + siloYield__season = 'siloYield__season', + siloYield__u = 'siloYield__u', + stalkAPY = 'stalkAPY', + token = 'token' } export type Tractor = { @@ -11798,19 +10813,19 @@ export type Tractor = { export type TractorDailySnapshotsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type TractorHourlySnapshotsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type TractorDailySnapshot = { @@ -11836,10 +10851,10 @@ export type TractorDailySnapshot = { updatedAt: Scalars['BigInt']['output']; }; -export type TractorDailySnapshot_Filter = { +export type TractorDailySnapshotFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; createdAt?: InputMaybe; createdAt_gt?: InputMaybe; createdAt_gte?: InputMaybe; @@ -11880,7 +10895,7 @@ export type TractorDailySnapshot_Filter = { id_lte?: InputMaybe; id_not?: InputMaybe; id_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; season?: InputMaybe; season_gt?: InputMaybe; season_gte?: InputMaybe; @@ -11914,7 +10929,7 @@ export type TractorDailySnapshot_Filter = { totalPosBeanTips_not?: InputMaybe; totalPosBeanTips_not_in?: InputMaybe>; tractor?: InputMaybe; - tractor_?: InputMaybe; + tractor_?: InputMaybe; tractor_contains?: InputMaybe; tractor_contains_nocase?: InputMaybe; tractor_ends_with?: InputMaybe; @@ -11944,24 +10959,24 @@ export type TractorDailySnapshot_Filter = { updatedAt_not_in?: InputMaybe>; }; -export enum TractorDailySnapshot_OrderBy { - CreatedAt = 'createdAt', - DeltaTotalExecutions = 'deltaTotalExecutions', - DeltaTotalNegBeanTips = 'deltaTotalNegBeanTips', - DeltaTotalPosBeanTips = 'deltaTotalPosBeanTips', - Id = 'id', - Season = 'season', - TotalExecutions = 'totalExecutions', - TotalNegBeanTips = 'totalNegBeanTips', - TotalPosBeanTips = 'totalPosBeanTips', - Tractor = 'tractor', - TractorId = 'tractor__id', - TractorLastDailySnapshotDay = 'tractor__lastDailySnapshotDay', - TractorLastHourlySnapshotSeason = 'tractor__lastHourlySnapshotSeason', - TractorTotalExecutions = 'tractor__totalExecutions', - TractorTotalNegBeanTips = 'tractor__totalNegBeanTips', - TractorTotalPosBeanTips = 'tractor__totalPosBeanTips', - UpdatedAt = 'updatedAt' +export enum TractorDailySnapshotOrderBy { + createdAt = 'createdAt', + deltaTotalExecutions = 'deltaTotalExecutions', + deltaTotalNegBeanTips = 'deltaTotalNegBeanTips', + deltaTotalPosBeanTips = 'deltaTotalPosBeanTips', + id = 'id', + season = 'season', + totalExecutions = 'totalExecutions', + totalNegBeanTips = 'totalNegBeanTips', + totalPosBeanTips = 'totalPosBeanTips', + tractor = 'tractor', + tractor__id = 'tractor__id', + tractor__lastDailySnapshotDay = 'tractor__lastDailySnapshotDay', + tractor__lastHourlySnapshotSeason = 'tractor__lastHourlySnapshotSeason', + tractor__totalExecutions = 'tractor__totalExecutions', + tractor__totalNegBeanTips = 'tractor__totalNegBeanTips', + tractor__totalPosBeanTips = 'tractor__totalPosBeanTips', + updatedAt = 'updatedAt' } export type TractorHourlySnapshot = { @@ -11987,10 +11002,10 @@ export type TractorHourlySnapshot = { updatedAt: Scalars['BigInt']['output']; }; -export type TractorHourlySnapshot_Filter = { +export type TractorHourlySnapshotFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; createdAt?: InputMaybe; createdAt_gt?: InputMaybe; createdAt_gte?: InputMaybe; @@ -12031,7 +11046,7 @@ export type TractorHourlySnapshot_Filter = { id_lte?: InputMaybe; id_not?: InputMaybe; id_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; season?: InputMaybe; season_gt?: InputMaybe; season_gte?: InputMaybe; @@ -12065,7 +11080,7 @@ export type TractorHourlySnapshot_Filter = { totalPosBeanTips_not?: InputMaybe; totalPosBeanTips_not_in?: InputMaybe>; tractor?: InputMaybe; - tractor_?: InputMaybe; + tractor_?: InputMaybe; tractor_contains?: InputMaybe; tractor_contains_nocase?: InputMaybe; tractor_ends_with?: InputMaybe; @@ -12095,24 +11110,24 @@ export type TractorHourlySnapshot_Filter = { updatedAt_not_in?: InputMaybe>; }; -export enum TractorHourlySnapshot_OrderBy { - CreatedAt = 'createdAt', - DeltaTotalExecutions = 'deltaTotalExecutions', - DeltaTotalNegBeanTips = 'deltaTotalNegBeanTips', - DeltaTotalPosBeanTips = 'deltaTotalPosBeanTips', - Id = 'id', - Season = 'season', - TotalExecutions = 'totalExecutions', - TotalNegBeanTips = 'totalNegBeanTips', - TotalPosBeanTips = 'totalPosBeanTips', - Tractor = 'tractor', - TractorId = 'tractor__id', - TractorLastDailySnapshotDay = 'tractor__lastDailySnapshotDay', - TractorLastHourlySnapshotSeason = 'tractor__lastHourlySnapshotSeason', - TractorTotalExecutions = 'tractor__totalExecutions', - TractorTotalNegBeanTips = 'tractor__totalNegBeanTips', - TractorTotalPosBeanTips = 'tractor__totalPosBeanTips', - UpdatedAt = 'updatedAt' +export enum TractorHourlySnapshotOrderBy { + createdAt = 'createdAt', + deltaTotalExecutions = 'deltaTotalExecutions', + deltaTotalNegBeanTips = 'deltaTotalNegBeanTips', + deltaTotalPosBeanTips = 'deltaTotalPosBeanTips', + id = 'id', + season = 'season', + totalExecutions = 'totalExecutions', + totalNegBeanTips = 'totalNegBeanTips', + totalPosBeanTips = 'totalPosBeanTips', + tractor = 'tractor', + tractor__id = 'tractor__id', + tractor__lastDailySnapshotDay = 'tractor__lastDailySnapshotDay', + tractor__lastHourlySnapshotSeason = 'tractor__lastHourlySnapshotSeason', + tractor__totalExecutions = 'tractor__totalExecutions', + tractor__totalNegBeanTips = 'tractor__totalNegBeanTips', + tractor__totalPosBeanTips = 'tractor__totalPosBeanTips', + updatedAt = 'updatedAt' } export type TractorReward = { @@ -12139,12 +11154,12 @@ export type TractorReward = { rewardType: Scalars['Int']['output']; }; -export type TractorReward_Filter = { +export type TractorRewardFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; farmer?: InputMaybe; - farmer_?: InputMaybe; + farmer_?: InputMaybe; farmer_contains?: InputMaybe; farmer_contains_nocase?: InputMaybe; farmer_ends_with?: InputMaybe; @@ -12196,7 +11211,7 @@ export type TractorReward_Filter = { operatorPosAmount_lte?: InputMaybe; operatorPosAmount_not?: InputMaybe; operatorPosAmount_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; publisherExecutions?: InputMaybe; publisherExecutions_gt?: InputMaybe; publisherExecutions_gte?: InputMaybe; @@ -12241,27 +11256,29 @@ export type TractorReward_Filter = { rewardType_not_in?: InputMaybe>; }; -export enum TractorReward_OrderBy { - Farmer = 'farmer', - FarmerCreationBlock = 'farmer__creationBlock', - FarmerId = 'farmer__id', - Id = 'id', - OperatorExecutions = 'operatorExecutions', - OperatorNegAmount = 'operatorNegAmount', - OperatorPosAmount = 'operatorPosAmount', - PublisherExecutions = 'publisherExecutions', - PublisherNegAmount = 'publisherNegAmount', - PublisherPosAmount = 'publisherPosAmount', - RewardToken = 'rewardToken', - RewardType = 'rewardType' +export enum TractorRewardOrderBy { + farmer = 'farmer', + farmer__creationBlock = 'farmer__creationBlock', + farmer__id = 'farmer__id', + farmer__refereeCount = 'farmer__refereeCount', + farmer__totalReferralRewardPodsReceived = 'farmer__totalReferralRewardPodsReceived', + id = 'id', + operatorExecutions = 'operatorExecutions', + operatorNegAmount = 'operatorNegAmount', + operatorPosAmount = 'operatorPosAmount', + publisherExecutions = 'publisherExecutions', + publisherNegAmount = 'publisherNegAmount', + publisherPosAmount = 'publisherPosAmount', + rewardToken = 'rewardToken', + rewardType = 'rewardType' } -export type Tractor_Filter = { +export type TractorFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; - dailySnapshots_?: InputMaybe; - hourlySnapshots_?: InputMaybe; + and?: InputMaybe>>; + dailySnapshots_?: InputMaybe; + hourlySnapshots_?: InputMaybe; id?: InputMaybe; id_gt?: InputMaybe; id_gte?: InputMaybe; @@ -12286,7 +11303,7 @@ export type Tractor_Filter = { lastHourlySnapshotSeason_lte?: InputMaybe; lastHourlySnapshotSeason_not?: InputMaybe; lastHourlySnapshotSeason_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; totalExecutions?: InputMaybe; totalExecutions_gt?: InputMaybe; totalExecutions_gte?: InputMaybe; @@ -12313,15 +11330,15 @@ export type Tractor_Filter = { totalPosBeanTips_not_in?: InputMaybe>; }; -export enum Tractor_OrderBy { - DailySnapshots = 'dailySnapshots', - HourlySnapshots = 'hourlySnapshots', - Id = 'id', - LastDailySnapshotDay = 'lastDailySnapshotDay', - LastHourlySnapshotSeason = 'lastHourlySnapshotSeason', - TotalExecutions = 'totalExecutions', - TotalNegBeanTips = 'totalNegBeanTips', - TotalPosBeanTips = 'totalPosBeanTips' +export enum TractorOrderBy { + dailySnapshots = 'dailySnapshots', + hourlySnapshots = 'hourlySnapshots', + id = 'id', + lastDailySnapshotDay = 'lastDailySnapshotDay', + lastHourlySnapshotSeason = 'lastHourlySnapshotSeason', + totalExecutions = 'totalExecutions', + totalNegBeanTips = 'totalNegBeanTips', + totalPosBeanTips = 'totalPosBeanTips' } export type UnripeToken = { @@ -12363,19 +11380,19 @@ export type UnripeToken = { export type UnripeTokenDailySnapshotsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type UnripeTokenHourlySnapshotsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type UnripeTokenDailySnapshot = { @@ -12428,7 +11445,7 @@ export type UnripeTokenDailySnapshot = { updatedAt: Scalars['BigInt']['output']; }; -export type UnripeTokenDailySnapshot_Filter = { +export type UnripeTokenDailySnapshotFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; amountUnderlyingOne?: InputMaybe; @@ -12439,7 +11456,7 @@ export type UnripeTokenDailySnapshot_Filter = { amountUnderlyingOne_lte?: InputMaybe; amountUnderlyingOne_not?: InputMaybe; amountUnderlyingOne_not_in?: InputMaybe>; - and?: InputMaybe>>; + and?: InputMaybe>>; bdvUnderlyingOne?: InputMaybe; bdvUnderlyingOne_gt?: InputMaybe; bdvUnderlyingOne_gte?: InputMaybe; @@ -12572,7 +11589,7 @@ export type UnripeTokenDailySnapshot_Filter = { id_lte?: InputMaybe; id_not?: InputMaybe; id_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; recapPercent?: InputMaybe; recapPercent_gt?: InputMaybe; recapPercent_gte?: InputMaybe; @@ -12622,7 +11639,7 @@ export type UnripeTokenDailySnapshot_Filter = { totalUnderlying_not?: InputMaybe; totalUnderlying_not_in?: InputMaybe>; underlyingToken?: InputMaybe; - underlyingToken_?: InputMaybe; + underlyingToken_?: InputMaybe; underlyingToken_contains?: InputMaybe; underlyingToken_contains_nocase?: InputMaybe; underlyingToken_ends_with?: InputMaybe; @@ -12643,7 +11660,7 @@ export type UnripeTokenDailySnapshot_Filter = { underlyingToken_starts_with?: InputMaybe; underlyingToken_starts_with_nocase?: InputMaybe; unripeToken?: InputMaybe; - unripeToken_?: InputMaybe; + unripeToken_?: InputMaybe; unripeToken_contains?: InputMaybe; unripeToken_contains_nocase?: InputMaybe; unripeToken_ends_with?: InputMaybe; @@ -12673,60 +11690,60 @@ export type UnripeTokenDailySnapshot_Filter = { updatedAt_not_in?: InputMaybe>; }; -export enum UnripeTokenDailySnapshot_OrderBy { - AmountUnderlyingOne = 'amountUnderlyingOne', - BdvUnderlyingOne = 'bdvUnderlyingOne', - ChopRate = 'chopRate', - ChoppableAmountOne = 'choppableAmountOne', - ChoppableBdvOne = 'choppableBdvOne', - CreatedAt = 'createdAt', - DeltaAmountUnderlyingOne = 'deltaAmountUnderlyingOne', - DeltaBdvUnderlyingOne = 'deltaBdvUnderlyingOne', - DeltaChopRate = 'deltaChopRate', - DeltaChoppableAmountOne = 'deltaChoppableAmountOne', - DeltaChoppableBdvOne = 'deltaChoppableBdvOne', - DeltaRecapPercent = 'deltaRecapPercent', - DeltaTotalChoppedAmount = 'deltaTotalChoppedAmount', - DeltaTotalChoppedBdv = 'deltaTotalChoppedBdv', - DeltaTotalChoppedBdvReceived = 'deltaTotalChoppedBdvReceived', - DeltaTotalUnderlying = 'deltaTotalUnderlying', - DeltaUnderlyingToken = 'deltaUnderlyingToken', - Id = 'id', - RecapPercent = 'recapPercent', - Season = 'season', - TotalChoppedAmount = 'totalChoppedAmount', - TotalChoppedBdv = 'totalChoppedBdv', - TotalChoppedBdvReceived = 'totalChoppedBdvReceived', - TotalUnderlying = 'totalUnderlying', - UnderlyingToken = 'underlyingToken', - UnderlyingTokenDecimals = 'underlyingToken__decimals', - UnderlyingTokenGaugePoints = 'underlyingToken__gaugePoints', - UnderlyingTokenId = 'underlyingToken__id', - UnderlyingTokenIsGaugeEnabled = 'underlyingToken__isGaugeEnabled', - UnderlyingTokenLastDailySnapshotDay = 'underlyingToken__lastDailySnapshotDay', - UnderlyingTokenLastHourlySnapshotSeason = 'underlyingToken__lastHourlySnapshotSeason', - UnderlyingTokenMilestoneSeason = 'underlyingToken__milestoneSeason', - UnderlyingTokenOptimalPercentDepositedBdv = 'underlyingToken__optimalPercentDepositedBdv', - UnderlyingTokenSelector = 'underlyingToken__selector', - UnderlyingTokenStalkEarnedPerSeason = 'underlyingToken__stalkEarnedPerSeason', - UnderlyingTokenStalkIssuedPerBdv = 'underlyingToken__stalkIssuedPerBdv', - UnderlyingTokenStemTip = 'underlyingToken__stemTip', - UnderlyingTokenUpdatedAt = 'underlyingToken__updatedAt', - UnripeToken = 'unripeToken', - UnripeTokenAmountUnderlyingOne = 'unripeToken__amountUnderlyingOne', - UnripeTokenBdvUnderlyingOne = 'unripeToken__bdvUnderlyingOne', - UnripeTokenChopRate = 'unripeToken__chopRate', - UnripeTokenChoppableAmountOne = 'unripeToken__choppableAmountOne', - UnripeTokenChoppableBdvOne = 'unripeToken__choppableBdvOne', - UnripeTokenId = 'unripeToken__id', - UnripeTokenLastDailySnapshotDay = 'unripeToken__lastDailySnapshotDay', - UnripeTokenLastHourlySnapshotSeason = 'unripeToken__lastHourlySnapshotSeason', - UnripeTokenRecapPercent = 'unripeToken__recapPercent', - UnripeTokenTotalChoppedAmount = 'unripeToken__totalChoppedAmount', - UnripeTokenTotalChoppedBdv = 'unripeToken__totalChoppedBdv', - UnripeTokenTotalChoppedBdvReceived = 'unripeToken__totalChoppedBdvReceived', - UnripeTokenTotalUnderlying = 'unripeToken__totalUnderlying', - UpdatedAt = 'updatedAt' +export enum UnripeTokenDailySnapshotOrderBy { + amountUnderlyingOne = 'amountUnderlyingOne', + bdvUnderlyingOne = 'bdvUnderlyingOne', + chopRate = 'chopRate', + choppableAmountOne = 'choppableAmountOne', + choppableBdvOne = 'choppableBdvOne', + createdAt = 'createdAt', + deltaAmountUnderlyingOne = 'deltaAmountUnderlyingOne', + deltaBdvUnderlyingOne = 'deltaBdvUnderlyingOne', + deltaChopRate = 'deltaChopRate', + deltaChoppableAmountOne = 'deltaChoppableAmountOne', + deltaChoppableBdvOne = 'deltaChoppableBdvOne', + deltaRecapPercent = 'deltaRecapPercent', + deltaTotalChoppedAmount = 'deltaTotalChoppedAmount', + deltaTotalChoppedBdv = 'deltaTotalChoppedBdv', + deltaTotalChoppedBdvReceived = 'deltaTotalChoppedBdvReceived', + deltaTotalUnderlying = 'deltaTotalUnderlying', + deltaUnderlyingToken = 'deltaUnderlyingToken', + id = 'id', + recapPercent = 'recapPercent', + season = 'season', + totalChoppedAmount = 'totalChoppedAmount', + totalChoppedBdv = 'totalChoppedBdv', + totalChoppedBdvReceived = 'totalChoppedBdvReceived', + totalUnderlying = 'totalUnderlying', + underlyingToken = 'underlyingToken', + underlyingToken__decimals = 'underlyingToken__decimals', + underlyingToken__gaugePoints = 'underlyingToken__gaugePoints', + underlyingToken__id = 'underlyingToken__id', + underlyingToken__isGaugeEnabled = 'underlyingToken__isGaugeEnabled', + underlyingToken__lastDailySnapshotDay = 'underlyingToken__lastDailySnapshotDay', + underlyingToken__lastHourlySnapshotSeason = 'underlyingToken__lastHourlySnapshotSeason', + underlyingToken__milestoneSeason = 'underlyingToken__milestoneSeason', + underlyingToken__optimalPercentDepositedBdv = 'underlyingToken__optimalPercentDepositedBdv', + underlyingToken__selector = 'underlyingToken__selector', + underlyingToken__stalkEarnedPerSeason = 'underlyingToken__stalkEarnedPerSeason', + underlyingToken__stalkIssuedPerBdv = 'underlyingToken__stalkIssuedPerBdv', + underlyingToken__stemTip = 'underlyingToken__stemTip', + underlyingToken__updatedAt = 'underlyingToken__updatedAt', + unripeToken = 'unripeToken', + unripeToken__amountUnderlyingOne = 'unripeToken__amountUnderlyingOne', + unripeToken__bdvUnderlyingOne = 'unripeToken__bdvUnderlyingOne', + unripeToken__chopRate = 'unripeToken__chopRate', + unripeToken__choppableAmountOne = 'unripeToken__choppableAmountOne', + unripeToken__choppableBdvOne = 'unripeToken__choppableBdvOne', + unripeToken__id = 'unripeToken__id', + unripeToken__lastDailySnapshotDay = 'unripeToken__lastDailySnapshotDay', + unripeToken__lastHourlySnapshotSeason = 'unripeToken__lastHourlySnapshotSeason', + unripeToken__recapPercent = 'unripeToken__recapPercent', + unripeToken__totalChoppedAmount = 'unripeToken__totalChoppedAmount', + unripeToken__totalChoppedBdv = 'unripeToken__totalChoppedBdv', + unripeToken__totalChoppedBdvReceived = 'unripeToken__totalChoppedBdvReceived', + unripeToken__totalUnderlying = 'unripeToken__totalUnderlying', + updatedAt = 'updatedAt' } export type UnripeTokenHourlySnapshot = { @@ -12779,7 +11796,7 @@ export type UnripeTokenHourlySnapshot = { updatedAt: Scalars['BigInt']['output']; }; -export type UnripeTokenHourlySnapshot_Filter = { +export type UnripeTokenHourlySnapshotFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; amountUnderlyingOne?: InputMaybe; @@ -12790,7 +11807,7 @@ export type UnripeTokenHourlySnapshot_Filter = { amountUnderlyingOne_lte?: InputMaybe; amountUnderlyingOne_not?: InputMaybe; amountUnderlyingOne_not_in?: InputMaybe>; - and?: InputMaybe>>; + and?: InputMaybe>>; bdvUnderlyingOne?: InputMaybe; bdvUnderlyingOne_gt?: InputMaybe; bdvUnderlyingOne_gte?: InputMaybe; @@ -12923,7 +11940,7 @@ export type UnripeTokenHourlySnapshot_Filter = { id_lte?: InputMaybe; id_not?: InputMaybe; id_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; recapPercent?: InputMaybe; recapPercent_gt?: InputMaybe; recapPercent_gte?: InputMaybe; @@ -12973,7 +11990,7 @@ export type UnripeTokenHourlySnapshot_Filter = { totalUnderlying_not?: InputMaybe; totalUnderlying_not_in?: InputMaybe>; underlyingToken?: InputMaybe; - underlyingToken_?: InputMaybe; + underlyingToken_?: InputMaybe; underlyingToken_contains?: InputMaybe; underlyingToken_contains_nocase?: InputMaybe; underlyingToken_ends_with?: InputMaybe; @@ -12994,7 +12011,7 @@ export type UnripeTokenHourlySnapshot_Filter = { underlyingToken_starts_with?: InputMaybe; underlyingToken_starts_with_nocase?: InputMaybe; unripeToken?: InputMaybe; - unripeToken_?: InputMaybe; + unripeToken_?: InputMaybe; unripeToken_contains?: InputMaybe; unripeToken_contains_nocase?: InputMaybe; unripeToken_ends_with?: InputMaybe; @@ -13024,63 +12041,63 @@ export type UnripeTokenHourlySnapshot_Filter = { updatedAt_not_in?: InputMaybe>; }; -export enum UnripeTokenHourlySnapshot_OrderBy { - AmountUnderlyingOne = 'amountUnderlyingOne', - BdvUnderlyingOne = 'bdvUnderlyingOne', - ChopRate = 'chopRate', - ChoppableAmountOne = 'choppableAmountOne', - ChoppableBdvOne = 'choppableBdvOne', - CreatedAt = 'createdAt', - DeltaAmountUnderlyingOne = 'deltaAmountUnderlyingOne', - DeltaBdvUnderlyingOne = 'deltaBdvUnderlyingOne', - DeltaChopRate = 'deltaChopRate', - DeltaChoppableAmountOne = 'deltaChoppableAmountOne', - DeltaChoppableBdvOne = 'deltaChoppableBdvOne', - DeltaRecapPercent = 'deltaRecapPercent', - DeltaTotalChoppedAmount = 'deltaTotalChoppedAmount', - DeltaTotalChoppedBdv = 'deltaTotalChoppedBdv', - DeltaTotalChoppedBdvReceived = 'deltaTotalChoppedBdvReceived', - DeltaTotalUnderlying = 'deltaTotalUnderlying', - DeltaUnderlyingToken = 'deltaUnderlyingToken', - Id = 'id', - RecapPercent = 'recapPercent', - Season = 'season', - TotalChoppedAmount = 'totalChoppedAmount', - TotalChoppedBdv = 'totalChoppedBdv', - TotalChoppedBdvReceived = 'totalChoppedBdvReceived', - TotalUnderlying = 'totalUnderlying', - UnderlyingToken = 'underlyingToken', - UnderlyingTokenDecimals = 'underlyingToken__decimals', - UnderlyingTokenGaugePoints = 'underlyingToken__gaugePoints', - UnderlyingTokenId = 'underlyingToken__id', - UnderlyingTokenIsGaugeEnabled = 'underlyingToken__isGaugeEnabled', - UnderlyingTokenLastDailySnapshotDay = 'underlyingToken__lastDailySnapshotDay', - UnderlyingTokenLastHourlySnapshotSeason = 'underlyingToken__lastHourlySnapshotSeason', - UnderlyingTokenMilestoneSeason = 'underlyingToken__milestoneSeason', - UnderlyingTokenOptimalPercentDepositedBdv = 'underlyingToken__optimalPercentDepositedBdv', - UnderlyingTokenSelector = 'underlyingToken__selector', - UnderlyingTokenStalkEarnedPerSeason = 'underlyingToken__stalkEarnedPerSeason', - UnderlyingTokenStalkIssuedPerBdv = 'underlyingToken__stalkIssuedPerBdv', - UnderlyingTokenStemTip = 'underlyingToken__stemTip', - UnderlyingTokenUpdatedAt = 'underlyingToken__updatedAt', - UnripeToken = 'unripeToken', - UnripeTokenAmountUnderlyingOne = 'unripeToken__amountUnderlyingOne', - UnripeTokenBdvUnderlyingOne = 'unripeToken__bdvUnderlyingOne', - UnripeTokenChopRate = 'unripeToken__chopRate', - UnripeTokenChoppableAmountOne = 'unripeToken__choppableAmountOne', - UnripeTokenChoppableBdvOne = 'unripeToken__choppableBdvOne', - UnripeTokenId = 'unripeToken__id', - UnripeTokenLastDailySnapshotDay = 'unripeToken__lastDailySnapshotDay', - UnripeTokenLastHourlySnapshotSeason = 'unripeToken__lastHourlySnapshotSeason', - UnripeTokenRecapPercent = 'unripeToken__recapPercent', - UnripeTokenTotalChoppedAmount = 'unripeToken__totalChoppedAmount', - UnripeTokenTotalChoppedBdv = 'unripeToken__totalChoppedBdv', - UnripeTokenTotalChoppedBdvReceived = 'unripeToken__totalChoppedBdvReceived', - UnripeTokenTotalUnderlying = 'unripeToken__totalUnderlying', - UpdatedAt = 'updatedAt' +export enum UnripeTokenHourlySnapshotOrderBy { + amountUnderlyingOne = 'amountUnderlyingOne', + bdvUnderlyingOne = 'bdvUnderlyingOne', + chopRate = 'chopRate', + choppableAmountOne = 'choppableAmountOne', + choppableBdvOne = 'choppableBdvOne', + createdAt = 'createdAt', + deltaAmountUnderlyingOne = 'deltaAmountUnderlyingOne', + deltaBdvUnderlyingOne = 'deltaBdvUnderlyingOne', + deltaChopRate = 'deltaChopRate', + deltaChoppableAmountOne = 'deltaChoppableAmountOne', + deltaChoppableBdvOne = 'deltaChoppableBdvOne', + deltaRecapPercent = 'deltaRecapPercent', + deltaTotalChoppedAmount = 'deltaTotalChoppedAmount', + deltaTotalChoppedBdv = 'deltaTotalChoppedBdv', + deltaTotalChoppedBdvReceived = 'deltaTotalChoppedBdvReceived', + deltaTotalUnderlying = 'deltaTotalUnderlying', + deltaUnderlyingToken = 'deltaUnderlyingToken', + id = 'id', + recapPercent = 'recapPercent', + season = 'season', + totalChoppedAmount = 'totalChoppedAmount', + totalChoppedBdv = 'totalChoppedBdv', + totalChoppedBdvReceived = 'totalChoppedBdvReceived', + totalUnderlying = 'totalUnderlying', + underlyingToken = 'underlyingToken', + underlyingToken__decimals = 'underlyingToken__decimals', + underlyingToken__gaugePoints = 'underlyingToken__gaugePoints', + underlyingToken__id = 'underlyingToken__id', + underlyingToken__isGaugeEnabled = 'underlyingToken__isGaugeEnabled', + underlyingToken__lastDailySnapshotDay = 'underlyingToken__lastDailySnapshotDay', + underlyingToken__lastHourlySnapshotSeason = 'underlyingToken__lastHourlySnapshotSeason', + underlyingToken__milestoneSeason = 'underlyingToken__milestoneSeason', + underlyingToken__optimalPercentDepositedBdv = 'underlyingToken__optimalPercentDepositedBdv', + underlyingToken__selector = 'underlyingToken__selector', + underlyingToken__stalkEarnedPerSeason = 'underlyingToken__stalkEarnedPerSeason', + underlyingToken__stalkIssuedPerBdv = 'underlyingToken__stalkIssuedPerBdv', + underlyingToken__stemTip = 'underlyingToken__stemTip', + underlyingToken__updatedAt = 'underlyingToken__updatedAt', + unripeToken = 'unripeToken', + unripeToken__amountUnderlyingOne = 'unripeToken__amountUnderlyingOne', + unripeToken__bdvUnderlyingOne = 'unripeToken__bdvUnderlyingOne', + unripeToken__chopRate = 'unripeToken__chopRate', + unripeToken__choppableAmountOne = 'unripeToken__choppableAmountOne', + unripeToken__choppableBdvOne = 'unripeToken__choppableBdvOne', + unripeToken__id = 'unripeToken__id', + unripeToken__lastDailySnapshotDay = 'unripeToken__lastDailySnapshotDay', + unripeToken__lastHourlySnapshotSeason = 'unripeToken__lastHourlySnapshotSeason', + unripeToken__recapPercent = 'unripeToken__recapPercent', + unripeToken__totalChoppedAmount = 'unripeToken__totalChoppedAmount', + unripeToken__totalChoppedBdv = 'unripeToken__totalChoppedBdv', + unripeToken__totalChoppedBdvReceived = 'unripeToken__totalChoppedBdvReceived', + unripeToken__totalUnderlying = 'unripeToken__totalUnderlying', + updatedAt = 'updatedAt' } -export type UnripeToken_Filter = { +export type UnripeTokenFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; amountUnderlyingOne?: InputMaybe; @@ -13091,7 +12108,7 @@ export type UnripeToken_Filter = { amountUnderlyingOne_lte?: InputMaybe; amountUnderlyingOne_not?: InputMaybe; amountUnderlyingOne_not_in?: InputMaybe>; - and?: InputMaybe>>; + and?: InputMaybe>>; bdvUnderlyingOne?: InputMaybe; bdvUnderlyingOne_gt?: InputMaybe; bdvUnderlyingOne_gte?: InputMaybe; @@ -13124,8 +12141,8 @@ export type UnripeToken_Filter = { choppableBdvOne_lte?: InputMaybe; choppableBdvOne_not?: InputMaybe; choppableBdvOne_not_in?: InputMaybe>; - dailySnapshots_?: InputMaybe; - hourlySnapshots_?: InputMaybe; + dailySnapshots_?: InputMaybe; + hourlySnapshots_?: InputMaybe; id?: InputMaybe; id_contains?: InputMaybe; id_gt?: InputMaybe; @@ -13152,7 +12169,7 @@ export type UnripeToken_Filter = { lastHourlySnapshotSeason_lte?: InputMaybe; lastHourlySnapshotSeason_not?: InputMaybe; lastHourlySnapshotSeason_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; recapPercent?: InputMaybe; recapPercent_gt?: InputMaybe; recapPercent_gte?: InputMaybe; @@ -13194,7 +12211,7 @@ export type UnripeToken_Filter = { totalUnderlying_not?: InputMaybe; totalUnderlying_not_in?: InputMaybe>; underlyingToken?: InputMaybe; - underlyingToken_?: InputMaybe; + underlyingToken_?: InputMaybe; underlyingToken_contains?: InputMaybe; underlyingToken_contains_nocase?: InputMaybe; underlyingToken_ends_with?: InputMaybe; @@ -13216,36 +12233,36 @@ export type UnripeToken_Filter = { underlyingToken_starts_with_nocase?: InputMaybe; }; -export enum UnripeToken_OrderBy { - AmountUnderlyingOne = 'amountUnderlyingOne', - BdvUnderlyingOne = 'bdvUnderlyingOne', - ChopRate = 'chopRate', - ChoppableAmountOne = 'choppableAmountOne', - ChoppableBdvOne = 'choppableBdvOne', - DailySnapshots = 'dailySnapshots', - HourlySnapshots = 'hourlySnapshots', - Id = 'id', - LastDailySnapshotDay = 'lastDailySnapshotDay', - LastHourlySnapshotSeason = 'lastHourlySnapshotSeason', - RecapPercent = 'recapPercent', - TotalChoppedAmount = 'totalChoppedAmount', - TotalChoppedBdv = 'totalChoppedBdv', - TotalChoppedBdvReceived = 'totalChoppedBdvReceived', - TotalUnderlying = 'totalUnderlying', - UnderlyingToken = 'underlyingToken', - UnderlyingTokenDecimals = 'underlyingToken__decimals', - UnderlyingTokenGaugePoints = 'underlyingToken__gaugePoints', - UnderlyingTokenId = 'underlyingToken__id', - UnderlyingTokenIsGaugeEnabled = 'underlyingToken__isGaugeEnabled', - UnderlyingTokenLastDailySnapshotDay = 'underlyingToken__lastDailySnapshotDay', - UnderlyingTokenLastHourlySnapshotSeason = 'underlyingToken__lastHourlySnapshotSeason', - UnderlyingTokenMilestoneSeason = 'underlyingToken__milestoneSeason', - UnderlyingTokenOptimalPercentDepositedBdv = 'underlyingToken__optimalPercentDepositedBdv', - UnderlyingTokenSelector = 'underlyingToken__selector', - UnderlyingTokenStalkEarnedPerSeason = 'underlyingToken__stalkEarnedPerSeason', - UnderlyingTokenStalkIssuedPerBdv = 'underlyingToken__stalkIssuedPerBdv', - UnderlyingTokenStemTip = 'underlyingToken__stemTip', - UnderlyingTokenUpdatedAt = 'underlyingToken__updatedAt' +export enum UnripeTokenOrderBy { + amountUnderlyingOne = 'amountUnderlyingOne', + bdvUnderlyingOne = 'bdvUnderlyingOne', + chopRate = 'chopRate', + choppableAmountOne = 'choppableAmountOne', + choppableBdvOne = 'choppableBdvOne', + dailySnapshots = 'dailySnapshots', + hourlySnapshots = 'hourlySnapshots', + id = 'id', + lastDailySnapshotDay = 'lastDailySnapshotDay', + lastHourlySnapshotSeason = 'lastHourlySnapshotSeason', + recapPercent = 'recapPercent', + totalChoppedAmount = 'totalChoppedAmount', + totalChoppedBdv = 'totalChoppedBdv', + totalChoppedBdvReceived = 'totalChoppedBdvReceived', + totalUnderlying = 'totalUnderlying', + underlyingToken = 'underlyingToken', + underlyingToken__decimals = 'underlyingToken__decimals', + underlyingToken__gaugePoints = 'underlyingToken__gaugePoints', + underlyingToken__id = 'underlyingToken__id', + underlyingToken__isGaugeEnabled = 'underlyingToken__isGaugeEnabled', + underlyingToken__lastDailySnapshotDay = 'underlyingToken__lastDailySnapshotDay', + underlyingToken__lastHourlySnapshotSeason = 'underlyingToken__lastHourlySnapshotSeason', + underlyingToken__milestoneSeason = 'underlyingToken__milestoneSeason', + underlyingToken__optimalPercentDepositedBdv = 'underlyingToken__optimalPercentDepositedBdv', + underlyingToken__selector = 'underlyingToken__selector', + underlyingToken__stalkEarnedPerSeason = 'underlyingToken__stalkEarnedPerSeason', + underlyingToken__stalkIssuedPerBdv = 'underlyingToken__stalkIssuedPerBdv', + underlyingToken__stemTip = 'underlyingToken__stemTip', + underlyingToken__updatedAt = 'underlyingToken__updatedAt' } export type Version = { @@ -13262,10 +12279,10 @@ export type Version = { versionNumber: Scalars['String']['output']; }; -export type Version_Filter = { +export type VersionFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; chain?: InputMaybe; chain_contains?: InputMaybe; chain_contains_nocase?: InputMaybe; @@ -13294,7 +12311,7 @@ export type Version_Filter = { id_lte?: InputMaybe; id_not?: InputMaybe; id_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; protocolAddress?: InputMaybe; protocolAddress_contains?: InputMaybe; protocolAddress_gt?: InputMaybe; @@ -13347,12 +12364,12 @@ export type Version_Filter = { versionNumber_starts_with_nocase?: InputMaybe; }; -export enum Version_OrderBy { - Chain = 'chain', - Id = 'id', - ProtocolAddress = 'protocolAddress', - SubgraphName = 'subgraphName', - VersionNumber = 'versionNumber' +export enum VersionOrderBy { + chain = 'chain', + id = 'id', + protocolAddress = 'protocolAddress', + subgraphName = 'subgraphName', + versionNumber = 'versionNumber' } export type WellPlenty = { @@ -13369,10 +12386,10 @@ export type WellPlenty = { unclaimedAmount: Scalars['BigInt']['output']; }; -export type WellPlenty_Filter = { +export type WellPlentyFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; claimedAmount?: InputMaybe; claimedAmount_gt?: InputMaybe; claimedAmount_gte?: InputMaybe; @@ -13389,9 +12406,9 @@ export type WellPlenty_Filter = { id_lte?: InputMaybe; id_not?: InputMaybe; id_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; silo?: InputMaybe; - silo_?: InputMaybe; + silo_?: InputMaybe; silo_contains?: InputMaybe; silo_contains_nocase?: InputMaybe; silo_ends_with?: InputMaybe; @@ -13431,35 +12448,35 @@ export type WellPlenty_Filter = { unclaimedAmount_not_in?: InputMaybe>; }; -export enum WellPlenty_OrderBy { - ClaimedAmount = 'claimedAmount', - Id = 'id', - Silo = 'silo', - SiloActiveFarmers = 'silo__activeFarmers', - SiloAvgConvertDownPenalty = 'silo__avgConvertDownPenalty', - SiloAvgGrownStalkPerBdvPerSeason = 'silo__avgGrownStalkPerBdvPerSeason', - SiloBeanMints = 'silo__beanMints', - SiloBeanToMaxLpGpPerBdvRatio = 'silo__beanToMaxLpGpPerBdvRatio', - SiloBonusStalkConvertUp = 'silo__bonusStalkConvertUp', - SiloConvertDownPenalty = 'silo__convertDownPenalty', - SiloCropRatio = 'silo__cropRatio', - SiloDepositedBdv = 'silo__depositedBDV', - SiloGerminatingStalk = 'silo__germinatingStalk', - SiloGrownStalkPerSeason = 'silo__grownStalkPerSeason', - SiloId = 'silo__id', - SiloLastDailySnapshotDay = 'silo__lastDailySnapshotDay', - SiloLastHourlySnapshotSeason = 'silo__lastHourlySnapshotSeason', - SiloPenalizedStalkConvertDown = 'silo__penalizedStalkConvertDown', - SiloPlantableStalk = 'silo__plantableStalk', - SiloPlantedBeans = 'silo__plantedBeans', - SiloRoots = 'silo__roots', - SiloStalk = 'silo__stalk', - SiloTotalBdvConvertUp = 'silo__totalBdvConvertUp', - SiloTotalBdvConvertUpBonus = 'silo__totalBdvConvertUpBonus', - SiloUnmigratedL1DepositedBdv = 'silo__unmigratedL1DepositedBdv', - SiloUnpenalizedStalkConvertDown = 'silo__unpenalizedStalkConvertDown', - Token = 'token', - UnclaimedAmount = 'unclaimedAmount' +export enum WellPlentyOrderBy { + claimedAmount = 'claimedAmount', + id = 'id', + silo = 'silo', + silo__activeFarmers = 'silo__activeFarmers', + silo__avgConvertDownPenalty = 'silo__avgConvertDownPenalty', + silo__avgGrownStalkPerBdvPerSeason = 'silo__avgGrownStalkPerBdvPerSeason', + silo__beanMints = 'silo__beanMints', + silo__beanToMaxLpGpPerBdvRatio = 'silo__beanToMaxLpGpPerBdvRatio', + silo__bonusStalkConvertUp = 'silo__bonusStalkConvertUp', + silo__convertDownPenalty = 'silo__convertDownPenalty', + silo__cropRatio = 'silo__cropRatio', + silo__depositedBDV = 'silo__depositedBDV', + silo__germinatingStalk = 'silo__germinatingStalk', + silo__grownStalkPerSeason = 'silo__grownStalkPerSeason', + silo__id = 'silo__id', + silo__lastDailySnapshotDay = 'silo__lastDailySnapshotDay', + silo__lastHourlySnapshotSeason = 'silo__lastHourlySnapshotSeason', + silo__penalizedStalkConvertDown = 'silo__penalizedStalkConvertDown', + silo__plantableStalk = 'silo__plantableStalk', + silo__plantedBeans = 'silo__plantedBeans', + silo__roots = 'silo__roots', + silo__stalk = 'silo__stalk', + silo__totalBdvConvertUp = 'silo__totalBdvConvertUp', + silo__totalBdvConvertUpBonus = 'silo__totalBdvConvertUpBonus', + silo__unmigratedL1DepositedBdv = 'silo__unmigratedL1DepositedBdv', + silo__unpenalizedStalkConvertDown = 'silo__unpenalizedStalkConvertDown', + token = 'token', + unclaimedAmount = 'unclaimedAmount' } export type WhitelistTokenDailySnapshot = { @@ -13502,10 +12519,10 @@ export type WhitelistTokenDailySnapshot = { updatedAt: Scalars['BigInt']['output']; }; -export type WhitelistTokenDailySnapshot_Filter = { +export type WhitelistTokenDailySnapshotFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; bdv?: InputMaybe; bdv_gt?: InputMaybe; bdv_gte?: InputMaybe; @@ -13618,7 +12635,7 @@ export type WhitelistTokenDailySnapshot_Filter = { optimalPercentDepositedBdv_lte?: InputMaybe; optimalPercentDepositedBdv_not?: InputMaybe; optimalPercentDepositedBdv_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; season?: InputMaybe; season_gt?: InputMaybe; season_gte?: InputMaybe; @@ -13662,7 +12679,7 @@ export type WhitelistTokenDailySnapshot_Filter = { stemTip_not?: InputMaybe; stemTip_not_in?: InputMaybe>; token?: InputMaybe; - token_?: InputMaybe; + token_?: InputMaybe; token_contains?: InputMaybe; token_contains_nocase?: InputMaybe; token_ends_with?: InputMaybe; @@ -13692,42 +12709,42 @@ export type WhitelistTokenDailySnapshot_Filter = { updatedAt_not_in?: InputMaybe>; }; -export enum WhitelistTokenDailySnapshot_OrderBy { - Bdv = 'bdv', - CreatedAt = 'createdAt', - DeltaBdv = 'deltaBdv', - DeltaGaugePoints = 'deltaGaugePoints', - DeltaIsGaugeEnabled = 'deltaIsGaugeEnabled', - DeltaMilestoneSeason = 'deltaMilestoneSeason', - DeltaOptimalPercentDepositedBdv = 'deltaOptimalPercentDepositedBdv', - DeltaStalkEarnedPerSeason = 'deltaStalkEarnedPerSeason', - DeltaStalkIssuedPerBdv = 'deltaStalkIssuedPerBdv', - DeltaStemTip = 'deltaStemTip', - GaugePoints = 'gaugePoints', - Id = 'id', - IsGaugeEnabled = 'isGaugeEnabled', - MilestoneSeason = 'milestoneSeason', - OptimalPercentDepositedBdv = 'optimalPercentDepositedBdv', - Season = 'season', - Selector = 'selector', - StalkEarnedPerSeason = 'stalkEarnedPerSeason', - StalkIssuedPerBdv = 'stalkIssuedPerBdv', - StemTip = 'stemTip', - Token = 'token', - TokenDecimals = 'token__decimals', - TokenGaugePoints = 'token__gaugePoints', - TokenId = 'token__id', - TokenIsGaugeEnabled = 'token__isGaugeEnabled', - TokenLastDailySnapshotDay = 'token__lastDailySnapshotDay', - TokenLastHourlySnapshotSeason = 'token__lastHourlySnapshotSeason', - TokenMilestoneSeason = 'token__milestoneSeason', - TokenOptimalPercentDepositedBdv = 'token__optimalPercentDepositedBdv', - TokenSelector = 'token__selector', - TokenStalkEarnedPerSeason = 'token__stalkEarnedPerSeason', - TokenStalkIssuedPerBdv = 'token__stalkIssuedPerBdv', - TokenStemTip = 'token__stemTip', - TokenUpdatedAt = 'token__updatedAt', - UpdatedAt = 'updatedAt' +export enum WhitelistTokenDailySnapshotOrderBy { + bdv = 'bdv', + createdAt = 'createdAt', + deltaBdv = 'deltaBdv', + deltaGaugePoints = 'deltaGaugePoints', + deltaIsGaugeEnabled = 'deltaIsGaugeEnabled', + deltaMilestoneSeason = 'deltaMilestoneSeason', + deltaOptimalPercentDepositedBdv = 'deltaOptimalPercentDepositedBdv', + deltaStalkEarnedPerSeason = 'deltaStalkEarnedPerSeason', + deltaStalkIssuedPerBdv = 'deltaStalkIssuedPerBdv', + deltaStemTip = 'deltaStemTip', + gaugePoints = 'gaugePoints', + id = 'id', + isGaugeEnabled = 'isGaugeEnabled', + milestoneSeason = 'milestoneSeason', + optimalPercentDepositedBdv = 'optimalPercentDepositedBdv', + season = 'season', + selector = 'selector', + stalkEarnedPerSeason = 'stalkEarnedPerSeason', + stalkIssuedPerBdv = 'stalkIssuedPerBdv', + stemTip = 'stemTip', + token = 'token', + token__decimals = 'token__decimals', + token__gaugePoints = 'token__gaugePoints', + token__id = 'token__id', + token__isGaugeEnabled = 'token__isGaugeEnabled', + token__lastDailySnapshotDay = 'token__lastDailySnapshotDay', + token__lastHourlySnapshotSeason = 'token__lastHourlySnapshotSeason', + token__milestoneSeason = 'token__milestoneSeason', + token__optimalPercentDepositedBdv = 'token__optimalPercentDepositedBdv', + token__selector = 'token__selector', + token__stalkEarnedPerSeason = 'token__stalkEarnedPerSeason', + token__stalkIssuedPerBdv = 'token__stalkIssuedPerBdv', + token__stemTip = 'token__stemTip', + token__updatedAt = 'token__updatedAt', + updatedAt = 'updatedAt' } export type WhitelistTokenHourlySnapshot = { @@ -13770,10 +12787,10 @@ export type WhitelistTokenHourlySnapshot = { updatedAt: Scalars['BigInt']['output']; }; -export type WhitelistTokenHourlySnapshot_Filter = { +export type WhitelistTokenHourlySnapshotFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; bdv?: InputMaybe; bdv_gt?: InputMaybe; bdv_gte?: InputMaybe; @@ -13886,7 +12903,7 @@ export type WhitelistTokenHourlySnapshot_Filter = { optimalPercentDepositedBdv_lte?: InputMaybe; optimalPercentDepositedBdv_not?: InputMaybe; optimalPercentDepositedBdv_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; season?: InputMaybe; season_gt?: InputMaybe; season_gte?: InputMaybe; @@ -13930,7 +12947,7 @@ export type WhitelistTokenHourlySnapshot_Filter = { stemTip_not?: InputMaybe; stemTip_not_in?: InputMaybe>; token?: InputMaybe; - token_?: InputMaybe; + token_?: InputMaybe; token_contains?: InputMaybe; token_contains_nocase?: InputMaybe; token_ends_with?: InputMaybe; @@ -13960,42 +12977,42 @@ export type WhitelistTokenHourlySnapshot_Filter = { updatedAt_not_in?: InputMaybe>; }; -export enum WhitelistTokenHourlySnapshot_OrderBy { - Bdv = 'bdv', - CreatedAt = 'createdAt', - DeltaBdv = 'deltaBdv', - DeltaGaugePoints = 'deltaGaugePoints', - DeltaIsGaugeEnabled = 'deltaIsGaugeEnabled', - DeltaMilestoneSeason = 'deltaMilestoneSeason', - DeltaOptimalPercentDepositedBdv = 'deltaOptimalPercentDepositedBdv', - DeltaStalkEarnedPerSeason = 'deltaStalkEarnedPerSeason', - DeltaStalkIssuedPerBdv = 'deltaStalkIssuedPerBdv', - DeltaStemTip = 'deltaStemTip', - GaugePoints = 'gaugePoints', - Id = 'id', - IsGaugeEnabled = 'isGaugeEnabled', - MilestoneSeason = 'milestoneSeason', - OptimalPercentDepositedBdv = 'optimalPercentDepositedBdv', - Season = 'season', - Selector = 'selector', - StalkEarnedPerSeason = 'stalkEarnedPerSeason', - StalkIssuedPerBdv = 'stalkIssuedPerBdv', - StemTip = 'stemTip', - Token = 'token', - TokenDecimals = 'token__decimals', - TokenGaugePoints = 'token__gaugePoints', - TokenId = 'token__id', - TokenIsGaugeEnabled = 'token__isGaugeEnabled', - TokenLastDailySnapshotDay = 'token__lastDailySnapshotDay', - TokenLastHourlySnapshotSeason = 'token__lastHourlySnapshotSeason', - TokenMilestoneSeason = 'token__milestoneSeason', - TokenOptimalPercentDepositedBdv = 'token__optimalPercentDepositedBdv', - TokenSelector = 'token__selector', - TokenStalkEarnedPerSeason = 'token__stalkEarnedPerSeason', - TokenStalkIssuedPerBdv = 'token__stalkIssuedPerBdv', - TokenStemTip = 'token__stemTip', - TokenUpdatedAt = 'token__updatedAt', - UpdatedAt = 'updatedAt' +export enum WhitelistTokenHourlySnapshotOrderBy { + bdv = 'bdv', + createdAt = 'createdAt', + deltaBdv = 'deltaBdv', + deltaGaugePoints = 'deltaGaugePoints', + deltaIsGaugeEnabled = 'deltaIsGaugeEnabled', + deltaMilestoneSeason = 'deltaMilestoneSeason', + deltaOptimalPercentDepositedBdv = 'deltaOptimalPercentDepositedBdv', + deltaStalkEarnedPerSeason = 'deltaStalkEarnedPerSeason', + deltaStalkIssuedPerBdv = 'deltaStalkIssuedPerBdv', + deltaStemTip = 'deltaStemTip', + gaugePoints = 'gaugePoints', + id = 'id', + isGaugeEnabled = 'isGaugeEnabled', + milestoneSeason = 'milestoneSeason', + optimalPercentDepositedBdv = 'optimalPercentDepositedBdv', + season = 'season', + selector = 'selector', + stalkEarnedPerSeason = 'stalkEarnedPerSeason', + stalkIssuedPerBdv = 'stalkIssuedPerBdv', + stemTip = 'stemTip', + token = 'token', + token__decimals = 'token__decimals', + token__gaugePoints = 'token__gaugePoints', + token__id = 'token__id', + token__isGaugeEnabled = 'token__isGaugeEnabled', + token__lastDailySnapshotDay = 'token__lastDailySnapshotDay', + token__lastHourlySnapshotSeason = 'token__lastHourlySnapshotSeason', + token__milestoneSeason = 'token__milestoneSeason', + token__optimalPercentDepositedBdv = 'token__optimalPercentDepositedBdv', + token__selector = 'token__selector', + token__stalkEarnedPerSeason = 'token__stalkEarnedPerSeason', + token__stalkIssuedPerBdv = 'token__stalkIssuedPerBdv', + token__stemTip = 'token__stemTip', + token__updatedAt = 'token__updatedAt', + updatedAt = 'updatedAt' } export type WhitelistTokenSetting = { @@ -14035,26 +13052,26 @@ export type WhitelistTokenSetting = { export type WhitelistTokenSettingDailySnapshotsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type WhitelistTokenSettingHourlySnapshotsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; -export type WhitelistTokenSetting_Filter = { +export type WhitelistTokenSettingFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; - dailySnapshots_?: InputMaybe; + and?: InputMaybe>>; + dailySnapshots_?: InputMaybe; decimals?: InputMaybe; decimals_gt?: InputMaybe; decimals_gte?: InputMaybe; @@ -14071,7 +13088,7 @@ export type WhitelistTokenSetting_Filter = { gaugePoints_lte?: InputMaybe; gaugePoints_not?: InputMaybe; gaugePoints_not_in?: InputMaybe>; - hourlySnapshots_?: InputMaybe; + hourlySnapshots_?: InputMaybe; id?: InputMaybe; id_contains?: InputMaybe; id_gt?: InputMaybe; @@ -14118,7 +13135,7 @@ export type WhitelistTokenSetting_Filter = { optimalPercentDepositedBdv_lte?: InputMaybe; optimalPercentDepositedBdv_not?: InputMaybe; optimalPercentDepositedBdv_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; selector?: InputMaybe; selector_contains?: InputMaybe; selector_gt?: InputMaybe; @@ -14163,22 +13180,22 @@ export type WhitelistTokenSetting_Filter = { updatedAt_not_in?: InputMaybe>; }; -export enum WhitelistTokenSetting_OrderBy { - DailySnapshots = 'dailySnapshots', - Decimals = 'decimals', - GaugePoints = 'gaugePoints', - HourlySnapshots = 'hourlySnapshots', - Id = 'id', - IsGaugeEnabled = 'isGaugeEnabled', - LastDailySnapshotDay = 'lastDailySnapshotDay', - LastHourlySnapshotSeason = 'lastHourlySnapshotSeason', - MilestoneSeason = 'milestoneSeason', - OptimalPercentDepositedBdv = 'optimalPercentDepositedBdv', - Selector = 'selector', - StalkEarnedPerSeason = 'stalkEarnedPerSeason', - StalkIssuedPerBdv = 'stalkIssuedPerBdv', - StemTip = 'stemTip', - UpdatedAt = 'updatedAt' +export enum WhitelistTokenSettingOrderBy { + dailySnapshots = 'dailySnapshots', + decimals = 'decimals', + gaugePoints = 'gaugePoints', + hourlySnapshots = 'hourlySnapshots', + id = 'id', + isGaugeEnabled = 'isGaugeEnabled', + lastDailySnapshotDay = 'lastDailySnapshotDay', + lastHourlySnapshotSeason = 'lastHourlySnapshotSeason', + milestoneSeason = 'milestoneSeason', + optimalPercentDepositedBdv = 'optimalPercentDepositedBdv', + selector = 'selector', + stalkEarnedPerSeason = 'stalkEarnedPerSeason', + stalkIssuedPerBdv = 'stalkIssuedPerBdv', + stemTip = 'stemTip', + updatedAt = 'updatedAt' } export type WrappedDepositErc20 = { @@ -14218,19 +13235,19 @@ export type WrappedDepositErc20 = { export type WrappedDepositErc20DailySnapshotsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type WrappedDepositErc20HourlySnapshotsArgs = { first?: InputMaybe; - orderBy?: InputMaybe; + orderBy?: InputMaybe; orderDirection?: InputMaybe; skip?: InputMaybe; - where?: InputMaybe; + where?: InputMaybe; }; export type WrappedDepositErc20DailySnapshot = { @@ -14265,10 +13282,10 @@ export type WrappedDepositErc20DailySnapshot = { updatedAt: Scalars['BigInt']['output']; }; -export type WrappedDepositErc20DailySnapshot_Filter = { +export type WrappedDepositErc20DailySnapshotFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; apy7d?: InputMaybe; apy7d_gt?: InputMaybe; apy7d_gte?: InputMaybe; @@ -14333,7 +13350,7 @@ export type WrappedDepositErc20DailySnapshot_Filter = { id_lte?: InputMaybe; id_not?: InputMaybe; id_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; redeemRate?: InputMaybe; redeemRate_gt?: InputMaybe; redeemRate_gte?: InputMaybe; @@ -14351,7 +13368,7 @@ export type WrappedDepositErc20DailySnapshot_Filter = { season_not?: InputMaybe; season_not_in?: InputMaybe>; siloDailySnapshot?: InputMaybe; - siloDailySnapshot_?: InputMaybe; + siloDailySnapshot_?: InputMaybe; siloDailySnapshot_contains?: InputMaybe; siloDailySnapshot_contains_nocase?: InputMaybe; siloDailySnapshot_ends_with?: InputMaybe; @@ -14380,7 +13397,7 @@ export type WrappedDepositErc20DailySnapshot_Filter = { supply_not?: InputMaybe; supply_not_in?: InputMaybe>; token?: InputMaybe; - token_?: InputMaybe; + token_?: InputMaybe; token_contains?: InputMaybe; token_contains_nocase?: InputMaybe; token_ends_with?: InputMaybe; @@ -14410,74 +13427,74 @@ export type WrappedDepositErc20DailySnapshot_Filter = { updatedAt_not_in?: InputMaybe>; }; -export enum WrappedDepositErc20DailySnapshot_OrderBy { - Apy7d = 'apy7d', - Apy24h = 'apy24h', - Apy30d = 'apy30d', - Apy90d = 'apy90d', - CreatedAt = 'createdAt', - DeltaRedeemRate = 'deltaRedeemRate', - DeltaSupply = 'deltaSupply', - Id = 'id', - RedeemRate = 'redeemRate', - Season = 'season', - SiloDailySnapshot = 'siloDailySnapshot', - SiloDailySnapshotActiveFarmers = 'siloDailySnapshot__activeFarmers', - SiloDailySnapshotAvgConvertDownPenalty = 'siloDailySnapshot__avgConvertDownPenalty', - SiloDailySnapshotAvgGrownStalkPerBdvPerSeason = 'siloDailySnapshot__avgGrownStalkPerBdvPerSeason', - SiloDailySnapshotBeanMints = 'siloDailySnapshot__beanMints', - SiloDailySnapshotBeanToMaxLpGpPerBdvRatio = 'siloDailySnapshot__beanToMaxLpGpPerBdvRatio', - SiloDailySnapshotBonusStalkConvertUp = 'siloDailySnapshot__bonusStalkConvertUp', - SiloDailySnapshotCaseId = 'siloDailySnapshot__caseId', - SiloDailySnapshotConvertDownPenalty = 'siloDailySnapshot__convertDownPenalty', - SiloDailySnapshotCreatedAt = 'siloDailySnapshot__createdAt', - SiloDailySnapshotCropRatio = 'siloDailySnapshot__cropRatio', - SiloDailySnapshotDeltaActiveFarmers = 'siloDailySnapshot__deltaActiveFarmers', - SiloDailySnapshotDeltaAvgConvertDownPenalty = 'siloDailySnapshot__deltaAvgConvertDownPenalty', - SiloDailySnapshotDeltaAvgGrownStalkPerBdvPerSeason = 'siloDailySnapshot__deltaAvgGrownStalkPerBdvPerSeason', - SiloDailySnapshotDeltaBeanMints = 'siloDailySnapshot__deltaBeanMints', - SiloDailySnapshotDeltaBeanToMaxLpGpPerBdvRatio = 'siloDailySnapshot__deltaBeanToMaxLpGpPerBdvRatio', - SiloDailySnapshotDeltaBonusStalkConvertUp = 'siloDailySnapshot__deltaBonusStalkConvertUp', - SiloDailySnapshotDeltaConvertDownPenalty = 'siloDailySnapshot__deltaConvertDownPenalty', - SiloDailySnapshotDeltaCropRatio = 'siloDailySnapshot__deltaCropRatio', - SiloDailySnapshotDeltaDepositedBdv = 'siloDailySnapshot__deltaDepositedBDV', - SiloDailySnapshotDeltaGerminatingStalk = 'siloDailySnapshot__deltaGerminatingStalk', - SiloDailySnapshotDeltaGrownStalkPerSeason = 'siloDailySnapshot__deltaGrownStalkPerSeason', - SiloDailySnapshotDeltaPenalizedStalkConvertDown = 'siloDailySnapshot__deltaPenalizedStalkConvertDown', - SiloDailySnapshotDeltaPlantableStalk = 'siloDailySnapshot__deltaPlantableStalk', - SiloDailySnapshotDeltaPlantedBeans = 'siloDailySnapshot__deltaPlantedBeans', - SiloDailySnapshotDeltaRoots = 'siloDailySnapshot__deltaRoots', - SiloDailySnapshotDeltaStalk = 'siloDailySnapshot__deltaStalk', - SiloDailySnapshotDeltaTotalBdvConvertUp = 'siloDailySnapshot__deltaTotalBdvConvertUp', - SiloDailySnapshotDeltaTotalBdvConvertUpBonus = 'siloDailySnapshot__deltaTotalBdvConvertUpBonus', - SiloDailySnapshotDeltaUnpenalizedStalkConvertDown = 'siloDailySnapshot__deltaUnpenalizedStalkConvertDown', - SiloDailySnapshotDepositedBdv = 'siloDailySnapshot__depositedBDV', - SiloDailySnapshotGerminatingStalk = 'siloDailySnapshot__germinatingStalk', - SiloDailySnapshotGrownStalkPerSeason = 'siloDailySnapshot__grownStalkPerSeason', - SiloDailySnapshotId = 'siloDailySnapshot__id', - SiloDailySnapshotPenalizedStalkConvertDown = 'siloDailySnapshot__penalizedStalkConvertDown', - SiloDailySnapshotPlantableStalk = 'siloDailySnapshot__plantableStalk', - SiloDailySnapshotPlantedBeans = 'siloDailySnapshot__plantedBeans', - SiloDailySnapshotRoots = 'siloDailySnapshot__roots', - SiloDailySnapshotSeason = 'siloDailySnapshot__season', - SiloDailySnapshotStalk = 'siloDailySnapshot__stalk', - SiloDailySnapshotTotalBdvConvertUp = 'siloDailySnapshot__totalBdvConvertUp', - SiloDailySnapshotTotalBdvConvertUpBonus = 'siloDailySnapshot__totalBdvConvertUpBonus', - SiloDailySnapshotUnpenalizedStalkConvertDown = 'siloDailySnapshot__unpenalizedStalkConvertDown', - SiloDailySnapshotUpdatedAt = 'siloDailySnapshot__updatedAt', - Supply = 'supply', - Token = 'token', - TokenApy7d = 'token__apy7d', - TokenApy24h = 'token__apy24h', - TokenApy30d = 'token__apy30d', - TokenApy90d = 'token__apy90d', - TokenDecimals = 'token__decimals', - TokenId = 'token__id', - TokenLastDailySnapshotDay = 'token__lastDailySnapshotDay', - TokenLastHourlySnapshotSeason = 'token__lastHourlySnapshotSeason', - TokenRedeemRate = 'token__redeemRate', - TokenSupply = 'token__supply', - UpdatedAt = 'updatedAt' +export enum WrappedDepositErc20DailySnapshotOrderBy { + apy7d = 'apy7d', + apy24h = 'apy24h', + apy30d = 'apy30d', + apy90d = 'apy90d', + createdAt = 'createdAt', + deltaRedeemRate = 'deltaRedeemRate', + deltaSupply = 'deltaSupply', + id = 'id', + redeemRate = 'redeemRate', + season = 'season', + siloDailySnapshot = 'siloDailySnapshot', + siloDailySnapshot__activeFarmers = 'siloDailySnapshot__activeFarmers', + siloDailySnapshot__avgConvertDownPenalty = 'siloDailySnapshot__avgConvertDownPenalty', + siloDailySnapshot__avgGrownStalkPerBdvPerSeason = 'siloDailySnapshot__avgGrownStalkPerBdvPerSeason', + siloDailySnapshot__beanMints = 'siloDailySnapshot__beanMints', + siloDailySnapshot__beanToMaxLpGpPerBdvRatio = 'siloDailySnapshot__beanToMaxLpGpPerBdvRatio', + siloDailySnapshot__bonusStalkConvertUp = 'siloDailySnapshot__bonusStalkConvertUp', + siloDailySnapshot__caseId = 'siloDailySnapshot__caseId', + siloDailySnapshot__convertDownPenalty = 'siloDailySnapshot__convertDownPenalty', + siloDailySnapshot__createdAt = 'siloDailySnapshot__createdAt', + siloDailySnapshot__cropRatio = 'siloDailySnapshot__cropRatio', + siloDailySnapshot__deltaActiveFarmers = 'siloDailySnapshot__deltaActiveFarmers', + siloDailySnapshot__deltaAvgConvertDownPenalty = 'siloDailySnapshot__deltaAvgConvertDownPenalty', + siloDailySnapshot__deltaAvgGrownStalkPerBdvPerSeason = 'siloDailySnapshot__deltaAvgGrownStalkPerBdvPerSeason', + siloDailySnapshot__deltaBeanMints = 'siloDailySnapshot__deltaBeanMints', + siloDailySnapshot__deltaBeanToMaxLpGpPerBdvRatio = 'siloDailySnapshot__deltaBeanToMaxLpGpPerBdvRatio', + siloDailySnapshot__deltaBonusStalkConvertUp = 'siloDailySnapshot__deltaBonusStalkConvertUp', + siloDailySnapshot__deltaConvertDownPenalty = 'siloDailySnapshot__deltaConvertDownPenalty', + siloDailySnapshot__deltaCropRatio = 'siloDailySnapshot__deltaCropRatio', + siloDailySnapshot__deltaDepositedBDV = 'siloDailySnapshot__deltaDepositedBDV', + siloDailySnapshot__deltaGerminatingStalk = 'siloDailySnapshot__deltaGerminatingStalk', + siloDailySnapshot__deltaGrownStalkPerSeason = 'siloDailySnapshot__deltaGrownStalkPerSeason', + siloDailySnapshot__deltaPenalizedStalkConvertDown = 'siloDailySnapshot__deltaPenalizedStalkConvertDown', + siloDailySnapshot__deltaPlantableStalk = 'siloDailySnapshot__deltaPlantableStalk', + siloDailySnapshot__deltaPlantedBeans = 'siloDailySnapshot__deltaPlantedBeans', + siloDailySnapshot__deltaRoots = 'siloDailySnapshot__deltaRoots', + siloDailySnapshot__deltaStalk = 'siloDailySnapshot__deltaStalk', + siloDailySnapshot__deltaTotalBdvConvertUp = 'siloDailySnapshot__deltaTotalBdvConvertUp', + siloDailySnapshot__deltaTotalBdvConvertUpBonus = 'siloDailySnapshot__deltaTotalBdvConvertUpBonus', + siloDailySnapshot__deltaUnpenalizedStalkConvertDown = 'siloDailySnapshot__deltaUnpenalizedStalkConvertDown', + siloDailySnapshot__depositedBDV = 'siloDailySnapshot__depositedBDV', + siloDailySnapshot__germinatingStalk = 'siloDailySnapshot__germinatingStalk', + siloDailySnapshot__grownStalkPerSeason = 'siloDailySnapshot__grownStalkPerSeason', + siloDailySnapshot__id = 'siloDailySnapshot__id', + siloDailySnapshot__penalizedStalkConvertDown = 'siloDailySnapshot__penalizedStalkConvertDown', + siloDailySnapshot__plantableStalk = 'siloDailySnapshot__plantableStalk', + siloDailySnapshot__plantedBeans = 'siloDailySnapshot__plantedBeans', + siloDailySnapshot__roots = 'siloDailySnapshot__roots', + siloDailySnapshot__season = 'siloDailySnapshot__season', + siloDailySnapshot__stalk = 'siloDailySnapshot__stalk', + siloDailySnapshot__totalBdvConvertUp = 'siloDailySnapshot__totalBdvConvertUp', + siloDailySnapshot__totalBdvConvertUpBonus = 'siloDailySnapshot__totalBdvConvertUpBonus', + siloDailySnapshot__unpenalizedStalkConvertDown = 'siloDailySnapshot__unpenalizedStalkConvertDown', + siloDailySnapshot__updatedAt = 'siloDailySnapshot__updatedAt', + supply = 'supply', + token = 'token', + token__apy7d = 'token__apy7d', + token__apy24h = 'token__apy24h', + token__apy30d = 'token__apy30d', + token__apy90d = 'token__apy90d', + token__decimals = 'token__decimals', + token__id = 'token__id', + token__lastDailySnapshotDay = 'token__lastDailySnapshotDay', + token__lastHourlySnapshotSeason = 'token__lastHourlySnapshotSeason', + token__redeemRate = 'token__redeemRate', + token__supply = 'token__supply', + updatedAt = 'updatedAt' } export type WrappedDepositErc20HourlySnapshot = { @@ -14512,10 +13529,10 @@ export type WrappedDepositErc20HourlySnapshot = { updatedAt: Scalars['BigInt']['output']; }; -export type WrappedDepositErc20HourlySnapshot_Filter = { +export type WrappedDepositErc20HourlySnapshotFilter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; apy7d?: InputMaybe; apy7d_gt?: InputMaybe; apy7d_gte?: InputMaybe; @@ -14580,7 +13597,7 @@ export type WrappedDepositErc20HourlySnapshot_Filter = { id_lte?: InputMaybe; id_not?: InputMaybe; id_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; redeemRate?: InputMaybe; redeemRate_gt?: InputMaybe; redeemRate_gte?: InputMaybe; @@ -14598,7 +13615,7 @@ export type WrappedDepositErc20HourlySnapshot_Filter = { season_not?: InputMaybe; season_not_in?: InputMaybe>; siloHourlySnapshot?: InputMaybe; - siloHourlySnapshot_?: InputMaybe; + siloHourlySnapshot_?: InputMaybe; siloHourlySnapshot_contains?: InputMaybe; siloHourlySnapshot_contains_nocase?: InputMaybe; siloHourlySnapshot_ends_with?: InputMaybe; @@ -14627,7 +13644,7 @@ export type WrappedDepositErc20HourlySnapshot_Filter = { supply_not?: InputMaybe; supply_not_in?: InputMaybe>; token?: InputMaybe; - token_?: InputMaybe; + token_?: InputMaybe; token_contains?: InputMaybe; token_contains_nocase?: InputMaybe; token_ends_with?: InputMaybe; @@ -14657,80 +13674,80 @@ export type WrappedDepositErc20HourlySnapshot_Filter = { updatedAt_not_in?: InputMaybe>; }; -export enum WrappedDepositErc20HourlySnapshot_OrderBy { - Apy7d = 'apy7d', - Apy24h = 'apy24h', - Apy30d = 'apy30d', - Apy90d = 'apy90d', - CreatedAt = 'createdAt', - DeltaRedeemRate = 'deltaRedeemRate', - DeltaSupply = 'deltaSupply', - Id = 'id', - RedeemRate = 'redeemRate', - Season = 'season', - SiloHourlySnapshot = 'siloHourlySnapshot', - SiloHourlySnapshotActiveFarmers = 'siloHourlySnapshot__activeFarmers', - SiloHourlySnapshotAvgConvertDownPenalty = 'siloHourlySnapshot__avgConvertDownPenalty', - SiloHourlySnapshotAvgGrownStalkPerBdvPerSeason = 'siloHourlySnapshot__avgGrownStalkPerBdvPerSeason', - SiloHourlySnapshotBeanMints = 'siloHourlySnapshot__beanMints', - SiloHourlySnapshotBeanToMaxLpGpPerBdvRatio = 'siloHourlySnapshot__beanToMaxLpGpPerBdvRatio', - SiloHourlySnapshotBonusStalkConvertUp = 'siloHourlySnapshot__bonusStalkConvertUp', - SiloHourlySnapshotCaseId = 'siloHourlySnapshot__caseId', - SiloHourlySnapshotConvertDownPenalty = 'siloHourlySnapshot__convertDownPenalty', - SiloHourlySnapshotCreatedAt = 'siloHourlySnapshot__createdAt', - SiloHourlySnapshotCropRatio = 'siloHourlySnapshot__cropRatio', - SiloHourlySnapshotDeltaActiveFarmers = 'siloHourlySnapshot__deltaActiveFarmers', - SiloHourlySnapshotDeltaAvgConvertDownPenalty = 'siloHourlySnapshot__deltaAvgConvertDownPenalty', - SiloHourlySnapshotDeltaAvgGrownStalkPerBdvPerSeason = 'siloHourlySnapshot__deltaAvgGrownStalkPerBdvPerSeason', - SiloHourlySnapshotDeltaBeanMints = 'siloHourlySnapshot__deltaBeanMints', - SiloHourlySnapshotDeltaBeanToMaxLpGpPerBdvRatio = 'siloHourlySnapshot__deltaBeanToMaxLpGpPerBdvRatio', - SiloHourlySnapshotDeltaBonusStalkConvertUp = 'siloHourlySnapshot__deltaBonusStalkConvertUp', - SiloHourlySnapshotDeltaConvertDownPenalty = 'siloHourlySnapshot__deltaConvertDownPenalty', - SiloHourlySnapshotDeltaCropRatio = 'siloHourlySnapshot__deltaCropRatio', - SiloHourlySnapshotDeltaDepositedBdv = 'siloHourlySnapshot__deltaDepositedBDV', - SiloHourlySnapshotDeltaGerminatingStalk = 'siloHourlySnapshot__deltaGerminatingStalk', - SiloHourlySnapshotDeltaGrownStalkPerSeason = 'siloHourlySnapshot__deltaGrownStalkPerSeason', - SiloHourlySnapshotDeltaPenalizedStalkConvertDown = 'siloHourlySnapshot__deltaPenalizedStalkConvertDown', - SiloHourlySnapshotDeltaPlantableStalk = 'siloHourlySnapshot__deltaPlantableStalk', - SiloHourlySnapshotDeltaPlantedBeans = 'siloHourlySnapshot__deltaPlantedBeans', - SiloHourlySnapshotDeltaRoots = 'siloHourlySnapshot__deltaRoots', - SiloHourlySnapshotDeltaStalk = 'siloHourlySnapshot__deltaStalk', - SiloHourlySnapshotDeltaTotalBdvConvertUp = 'siloHourlySnapshot__deltaTotalBdvConvertUp', - SiloHourlySnapshotDeltaTotalBdvConvertUpBonus = 'siloHourlySnapshot__deltaTotalBdvConvertUpBonus', - SiloHourlySnapshotDeltaUnpenalizedStalkConvertDown = 'siloHourlySnapshot__deltaUnpenalizedStalkConvertDown', - SiloHourlySnapshotDepositedBdv = 'siloHourlySnapshot__depositedBDV', - SiloHourlySnapshotGerminatingStalk = 'siloHourlySnapshot__germinatingStalk', - SiloHourlySnapshotGrownStalkPerSeason = 'siloHourlySnapshot__grownStalkPerSeason', - SiloHourlySnapshotId = 'siloHourlySnapshot__id', - SiloHourlySnapshotPenalizedStalkConvertDown = 'siloHourlySnapshot__penalizedStalkConvertDown', - SiloHourlySnapshotPlantableStalk = 'siloHourlySnapshot__plantableStalk', - SiloHourlySnapshotPlantedBeans = 'siloHourlySnapshot__plantedBeans', - SiloHourlySnapshotRoots = 'siloHourlySnapshot__roots', - SiloHourlySnapshotSeason = 'siloHourlySnapshot__season', - SiloHourlySnapshotStalk = 'siloHourlySnapshot__stalk', - SiloHourlySnapshotTotalBdvConvertUp = 'siloHourlySnapshot__totalBdvConvertUp', - SiloHourlySnapshotTotalBdvConvertUpBonus = 'siloHourlySnapshot__totalBdvConvertUpBonus', - SiloHourlySnapshotUnpenalizedStalkConvertDown = 'siloHourlySnapshot__unpenalizedStalkConvertDown', - SiloHourlySnapshotUpdatedAt = 'siloHourlySnapshot__updatedAt', - Supply = 'supply', - Token = 'token', - TokenApy7d = 'token__apy7d', - TokenApy24h = 'token__apy24h', - TokenApy30d = 'token__apy30d', - TokenApy90d = 'token__apy90d', - TokenDecimals = 'token__decimals', - TokenId = 'token__id', - TokenLastDailySnapshotDay = 'token__lastDailySnapshotDay', - TokenLastHourlySnapshotSeason = 'token__lastHourlySnapshotSeason', - TokenRedeemRate = 'token__redeemRate', - TokenSupply = 'token__supply', - UpdatedAt = 'updatedAt' +export enum WrappedDepositErc20HourlySnapshotOrderBy { + apy7d = 'apy7d', + apy24h = 'apy24h', + apy30d = 'apy30d', + apy90d = 'apy90d', + createdAt = 'createdAt', + deltaRedeemRate = 'deltaRedeemRate', + deltaSupply = 'deltaSupply', + id = 'id', + redeemRate = 'redeemRate', + season = 'season', + siloHourlySnapshot = 'siloHourlySnapshot', + siloHourlySnapshot__activeFarmers = 'siloHourlySnapshot__activeFarmers', + siloHourlySnapshot__avgConvertDownPenalty = 'siloHourlySnapshot__avgConvertDownPenalty', + siloHourlySnapshot__avgGrownStalkPerBdvPerSeason = 'siloHourlySnapshot__avgGrownStalkPerBdvPerSeason', + siloHourlySnapshot__beanMints = 'siloHourlySnapshot__beanMints', + siloHourlySnapshot__beanToMaxLpGpPerBdvRatio = 'siloHourlySnapshot__beanToMaxLpGpPerBdvRatio', + siloHourlySnapshot__bonusStalkConvertUp = 'siloHourlySnapshot__bonusStalkConvertUp', + siloHourlySnapshot__caseId = 'siloHourlySnapshot__caseId', + siloHourlySnapshot__convertDownPenalty = 'siloHourlySnapshot__convertDownPenalty', + siloHourlySnapshot__createdAt = 'siloHourlySnapshot__createdAt', + siloHourlySnapshot__cropRatio = 'siloHourlySnapshot__cropRatio', + siloHourlySnapshot__deltaActiveFarmers = 'siloHourlySnapshot__deltaActiveFarmers', + siloHourlySnapshot__deltaAvgConvertDownPenalty = 'siloHourlySnapshot__deltaAvgConvertDownPenalty', + siloHourlySnapshot__deltaAvgGrownStalkPerBdvPerSeason = 'siloHourlySnapshot__deltaAvgGrownStalkPerBdvPerSeason', + siloHourlySnapshot__deltaBeanMints = 'siloHourlySnapshot__deltaBeanMints', + siloHourlySnapshot__deltaBeanToMaxLpGpPerBdvRatio = 'siloHourlySnapshot__deltaBeanToMaxLpGpPerBdvRatio', + siloHourlySnapshot__deltaBonusStalkConvertUp = 'siloHourlySnapshot__deltaBonusStalkConvertUp', + siloHourlySnapshot__deltaConvertDownPenalty = 'siloHourlySnapshot__deltaConvertDownPenalty', + siloHourlySnapshot__deltaCropRatio = 'siloHourlySnapshot__deltaCropRatio', + siloHourlySnapshot__deltaDepositedBDV = 'siloHourlySnapshot__deltaDepositedBDV', + siloHourlySnapshot__deltaGerminatingStalk = 'siloHourlySnapshot__deltaGerminatingStalk', + siloHourlySnapshot__deltaGrownStalkPerSeason = 'siloHourlySnapshot__deltaGrownStalkPerSeason', + siloHourlySnapshot__deltaPenalizedStalkConvertDown = 'siloHourlySnapshot__deltaPenalizedStalkConvertDown', + siloHourlySnapshot__deltaPlantableStalk = 'siloHourlySnapshot__deltaPlantableStalk', + siloHourlySnapshot__deltaPlantedBeans = 'siloHourlySnapshot__deltaPlantedBeans', + siloHourlySnapshot__deltaRoots = 'siloHourlySnapshot__deltaRoots', + siloHourlySnapshot__deltaStalk = 'siloHourlySnapshot__deltaStalk', + siloHourlySnapshot__deltaTotalBdvConvertUp = 'siloHourlySnapshot__deltaTotalBdvConvertUp', + siloHourlySnapshot__deltaTotalBdvConvertUpBonus = 'siloHourlySnapshot__deltaTotalBdvConvertUpBonus', + siloHourlySnapshot__deltaUnpenalizedStalkConvertDown = 'siloHourlySnapshot__deltaUnpenalizedStalkConvertDown', + siloHourlySnapshot__depositedBDV = 'siloHourlySnapshot__depositedBDV', + siloHourlySnapshot__germinatingStalk = 'siloHourlySnapshot__germinatingStalk', + siloHourlySnapshot__grownStalkPerSeason = 'siloHourlySnapshot__grownStalkPerSeason', + siloHourlySnapshot__id = 'siloHourlySnapshot__id', + siloHourlySnapshot__penalizedStalkConvertDown = 'siloHourlySnapshot__penalizedStalkConvertDown', + siloHourlySnapshot__plantableStalk = 'siloHourlySnapshot__plantableStalk', + siloHourlySnapshot__plantedBeans = 'siloHourlySnapshot__plantedBeans', + siloHourlySnapshot__roots = 'siloHourlySnapshot__roots', + siloHourlySnapshot__season = 'siloHourlySnapshot__season', + siloHourlySnapshot__stalk = 'siloHourlySnapshot__stalk', + siloHourlySnapshot__totalBdvConvertUp = 'siloHourlySnapshot__totalBdvConvertUp', + siloHourlySnapshot__totalBdvConvertUpBonus = 'siloHourlySnapshot__totalBdvConvertUpBonus', + siloHourlySnapshot__unpenalizedStalkConvertDown = 'siloHourlySnapshot__unpenalizedStalkConvertDown', + siloHourlySnapshot__updatedAt = 'siloHourlySnapshot__updatedAt', + supply = 'supply', + token = 'token', + token__apy7d = 'token__apy7d', + token__apy24h = 'token__apy24h', + token__apy30d = 'token__apy30d', + token__apy90d = 'token__apy90d', + token__decimals = 'token__decimals', + token__id = 'token__id', + token__lastDailySnapshotDay = 'token__lastDailySnapshotDay', + token__lastHourlySnapshotSeason = 'token__lastHourlySnapshotSeason', + token__redeemRate = 'token__redeemRate', + token__supply = 'token__supply', + updatedAt = 'updatedAt' } -export type WrappedDepositErc20_Filter = { +export type WrappedDepositErc20Filter = { /** Filter for the block changed event. */ _change_block?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe>>; apy7d?: InputMaybe; apy7d_gt?: InputMaybe; apy7d_gte?: InputMaybe; @@ -14764,7 +13781,7 @@ export type WrappedDepositErc20_Filter = { apy90d_not?: InputMaybe; apy90d_not_in?: InputMaybe>; beanstalk?: InputMaybe; - beanstalk_?: InputMaybe; + beanstalk_?: InputMaybe; beanstalk_contains?: InputMaybe; beanstalk_contains_nocase?: InputMaybe; beanstalk_ends_with?: InputMaybe; @@ -14784,7 +13801,7 @@ export type WrappedDepositErc20_Filter = { beanstalk_not_starts_with_nocase?: InputMaybe; beanstalk_starts_with?: InputMaybe; beanstalk_starts_with_nocase?: InputMaybe; - dailySnapshots_?: InputMaybe; + dailySnapshots_?: InputMaybe; decimals?: InputMaybe; decimals_gt?: InputMaybe; decimals_gte?: InputMaybe; @@ -14793,7 +13810,7 @@ export type WrappedDepositErc20_Filter = { decimals_lte?: InputMaybe; decimals_not?: InputMaybe; decimals_not_in?: InputMaybe>; - hourlySnapshots_?: InputMaybe; + hourlySnapshots_?: InputMaybe; id?: InputMaybe; id_contains?: InputMaybe; id_gt?: InputMaybe; @@ -14820,7 +13837,7 @@ export type WrappedDepositErc20_Filter = { lastHourlySnapshotSeason_lte?: InputMaybe; lastHourlySnapshotSeason_not?: InputMaybe; lastHourlySnapshotSeason_not_in?: InputMaybe>; - or?: InputMaybe>>; + or?: InputMaybe>>; redeemRate?: InputMaybe; redeemRate_gt?: InputMaybe; redeemRate_gte?: InputMaybe; @@ -14830,7 +13847,7 @@ export type WrappedDepositErc20_Filter = { redeemRate_not?: InputMaybe; redeemRate_not_in?: InputMaybe>; silo?: InputMaybe; - silo_?: InputMaybe; + silo_?: InputMaybe; silo_contains?: InputMaybe; silo_contains_nocase?: InputMaybe; silo_ends_with?: InputMaybe; @@ -14859,7 +13876,7 @@ export type WrappedDepositErc20_Filter = { supply_not?: InputMaybe; supply_not_in?: InputMaybe>; underlyingAsset?: InputMaybe; - underlyingAsset_?: InputMaybe; + underlyingAsset_?: InputMaybe; underlyingAsset_contains?: InputMaybe; underlyingAsset_contains_nocase?: InputMaybe; underlyingAsset_ends_with?: InputMaybe; @@ -14881,65 +13898,65 @@ export type WrappedDepositErc20_Filter = { underlyingAsset_starts_with_nocase?: InputMaybe; }; -export enum WrappedDepositErc20_OrderBy { - Apy7d = 'apy7d', - Apy24h = 'apy24h', - Apy30d = 'apy30d', - Apy90d = 'apy90d', - Beanstalk = 'beanstalk', - BeanstalkFertilizer1155 = 'beanstalk__fertilizer1155', - BeanstalkId = 'beanstalk__id', - BeanstalkLastSeason = 'beanstalk__lastSeason', - BeanstalkToken = 'beanstalk__token', - DailySnapshots = 'dailySnapshots', - Decimals = 'decimals', - HourlySnapshots = 'hourlySnapshots', - Id = 'id', - LastDailySnapshotDay = 'lastDailySnapshotDay', - LastHourlySnapshotSeason = 'lastHourlySnapshotSeason', - RedeemRate = 'redeemRate', - Silo = 'silo', - SiloActiveFarmers = 'silo__activeFarmers', - SiloAvgConvertDownPenalty = 'silo__avgConvertDownPenalty', - SiloAvgGrownStalkPerBdvPerSeason = 'silo__avgGrownStalkPerBdvPerSeason', - SiloBeanMints = 'silo__beanMints', - SiloBeanToMaxLpGpPerBdvRatio = 'silo__beanToMaxLpGpPerBdvRatio', - SiloBonusStalkConvertUp = 'silo__bonusStalkConvertUp', - SiloConvertDownPenalty = 'silo__convertDownPenalty', - SiloCropRatio = 'silo__cropRatio', - SiloDepositedBdv = 'silo__depositedBDV', - SiloGerminatingStalk = 'silo__germinatingStalk', - SiloGrownStalkPerSeason = 'silo__grownStalkPerSeason', - SiloId = 'silo__id', - SiloLastDailySnapshotDay = 'silo__lastDailySnapshotDay', - SiloLastHourlySnapshotSeason = 'silo__lastHourlySnapshotSeason', - SiloPenalizedStalkConvertDown = 'silo__penalizedStalkConvertDown', - SiloPlantableStalk = 'silo__plantableStalk', - SiloPlantedBeans = 'silo__plantedBeans', - SiloRoots = 'silo__roots', - SiloStalk = 'silo__stalk', - SiloTotalBdvConvertUp = 'silo__totalBdvConvertUp', - SiloTotalBdvConvertUpBonus = 'silo__totalBdvConvertUpBonus', - SiloUnmigratedL1DepositedBdv = 'silo__unmigratedL1DepositedBdv', - SiloUnpenalizedStalkConvertDown = 'silo__unpenalizedStalkConvertDown', - Supply = 'supply', - UnderlyingAsset = 'underlyingAsset', - UnderlyingAssetDecimals = 'underlyingAsset__decimals', - UnderlyingAssetGaugePoints = 'underlyingAsset__gaugePoints', - UnderlyingAssetId = 'underlyingAsset__id', - UnderlyingAssetIsGaugeEnabled = 'underlyingAsset__isGaugeEnabled', - UnderlyingAssetLastDailySnapshotDay = 'underlyingAsset__lastDailySnapshotDay', - UnderlyingAssetLastHourlySnapshotSeason = 'underlyingAsset__lastHourlySnapshotSeason', - UnderlyingAssetMilestoneSeason = 'underlyingAsset__milestoneSeason', - UnderlyingAssetOptimalPercentDepositedBdv = 'underlyingAsset__optimalPercentDepositedBdv', - UnderlyingAssetSelector = 'underlyingAsset__selector', - UnderlyingAssetStalkEarnedPerSeason = 'underlyingAsset__stalkEarnedPerSeason', - UnderlyingAssetStalkIssuedPerBdv = 'underlyingAsset__stalkIssuedPerBdv', - UnderlyingAssetStemTip = 'underlyingAsset__stemTip', - UnderlyingAssetUpdatedAt = 'underlyingAsset__updatedAt' +export enum WrappedDepositErc20OrderBy { + apy7d = 'apy7d', + apy24h = 'apy24h', + apy30d = 'apy30d', + apy90d = 'apy90d', + beanstalk = 'beanstalk', + beanstalk__fertilizer1155 = 'beanstalk__fertilizer1155', + beanstalk__id = 'beanstalk__id', + beanstalk__lastSeason = 'beanstalk__lastSeason', + beanstalk__token = 'beanstalk__token', + dailySnapshots = 'dailySnapshots', + decimals = 'decimals', + hourlySnapshots = 'hourlySnapshots', + id = 'id', + lastDailySnapshotDay = 'lastDailySnapshotDay', + lastHourlySnapshotSeason = 'lastHourlySnapshotSeason', + redeemRate = 'redeemRate', + silo = 'silo', + silo__activeFarmers = 'silo__activeFarmers', + silo__avgConvertDownPenalty = 'silo__avgConvertDownPenalty', + silo__avgGrownStalkPerBdvPerSeason = 'silo__avgGrownStalkPerBdvPerSeason', + silo__beanMints = 'silo__beanMints', + silo__beanToMaxLpGpPerBdvRatio = 'silo__beanToMaxLpGpPerBdvRatio', + silo__bonusStalkConvertUp = 'silo__bonusStalkConvertUp', + silo__convertDownPenalty = 'silo__convertDownPenalty', + silo__cropRatio = 'silo__cropRatio', + silo__depositedBDV = 'silo__depositedBDV', + silo__germinatingStalk = 'silo__germinatingStalk', + silo__grownStalkPerSeason = 'silo__grownStalkPerSeason', + silo__id = 'silo__id', + silo__lastDailySnapshotDay = 'silo__lastDailySnapshotDay', + silo__lastHourlySnapshotSeason = 'silo__lastHourlySnapshotSeason', + silo__penalizedStalkConvertDown = 'silo__penalizedStalkConvertDown', + silo__plantableStalk = 'silo__plantableStalk', + silo__plantedBeans = 'silo__plantedBeans', + silo__roots = 'silo__roots', + silo__stalk = 'silo__stalk', + silo__totalBdvConvertUp = 'silo__totalBdvConvertUp', + silo__totalBdvConvertUpBonus = 'silo__totalBdvConvertUpBonus', + silo__unmigratedL1DepositedBdv = 'silo__unmigratedL1DepositedBdv', + silo__unpenalizedStalkConvertDown = 'silo__unpenalizedStalkConvertDown', + supply = 'supply', + underlyingAsset = 'underlyingAsset', + underlyingAsset__decimals = 'underlyingAsset__decimals', + underlyingAsset__gaugePoints = 'underlyingAsset__gaugePoints', + underlyingAsset__id = 'underlyingAsset__id', + underlyingAsset__isGaugeEnabled = 'underlyingAsset__isGaugeEnabled', + underlyingAsset__lastDailySnapshotDay = 'underlyingAsset__lastDailySnapshotDay', + underlyingAsset__lastHourlySnapshotSeason = 'underlyingAsset__lastHourlySnapshotSeason', + underlyingAsset__milestoneSeason = 'underlyingAsset__milestoneSeason', + underlyingAsset__optimalPercentDepositedBdv = 'underlyingAsset__optimalPercentDepositedBdv', + underlyingAsset__selector = 'underlyingAsset__selector', + underlyingAsset__stalkEarnedPerSeason = 'underlyingAsset__stalkEarnedPerSeason', + underlyingAsset__stalkIssuedPerBdv = 'underlyingAsset__stalkIssuedPerBdv', + underlyingAsset__stemTip = 'underlyingAsset__stemTip', + underlyingAsset__updatedAt = 'underlyingAsset__updatedAt' } -export type _Block_ = { +export type Block = { __typename?: '_Block_'; /** The hash of the block */ hash?: Maybe; @@ -14952,27 +13969,26 @@ export type _Block_ = { }; /** The type for the top-level _meta field */ -export type _Meta_ = { +export type Meta = { __typename?: '_Meta_'; /** * Information about a specific subgraph block. The hash of the block * will be null if the _meta field has a block constraint that asks for * a block number. It will be filled if the _meta field has no block constraint * and therefore asks for the latest block - * */ - block: _Block_; + block: Block; /** The deployment ID */ deployment: Scalars['String']['output']; /** If `true`, the subgraph encountered indexing errors at some past block */ hasIndexingErrors: Scalars['Boolean']['output']; }; -export enum _SubgraphErrorPolicy_ { +export enum SubgraphErrorPolicy { /** Data will be returned even if the subgraph has indexing errors */ - Allow = 'allow', + allow = 'allow', /** If the subgraph has indexing errors, data will be omitted. The default. */ - Deny = 'deny' + deny = 'deny' } export type BeanstalkAdvancedChartQueryVariables = Exact<{ @@ -14981,7 +13997,7 @@ export type BeanstalkAdvancedChartQueryVariables = Exact<{ }>; -export type BeanstalkAdvancedChartQuery = { __typename?: 'Query', seasons: Array<{ __typename?: 'Season', id: string, sunriseBlock: any, rewardBeans: any, price: any, deltaBeans: any, raining: boolean, season: number, createdAt: any }>, fieldHourlySnapshots: Array<{ __typename?: 'FieldHourlySnapshot', id: string, caseId?: any | null, issuedSoil: any, deltaSownBeans: any, sownBeans: any, deltaPodDemand: any, blocksToSoldOutSoil?: any | null, podRate: any, temperature: any, deltaTemperature: any, season: number, cultivationFactor?: any | null, cultivationTemperature?: any | null, harvestableIndex: any, harvestablePods: any, harvestedPods: any, numberOfSowers: number, numberOfSows: number, podIndex: any, realRateOfReturn: any, seasonBlock: any, soil: any, soilSoldOut: boolean, unharvestablePods: any }>, siloHourlySnapshots: Array<{ __typename?: 'SiloHourlySnapshot', id: string, beanToMaxLpGpPerBdvRatio: any, deltaBeanToMaxLpGpPerBdvRatio: any, season: number, stalk: any }> }; +export type BeanstalkAdvancedChartQuery = { __typename?: 'Query', seasons: Array<{ __typename?: 'Season', id: string, sunriseBlock: any, rewardBeans: any, price: any, deltaBeans: any, raining: boolean, season: number, createdAt: any }>, fieldHourlySnapshots: Array<{ __typename?: 'FieldHourlySnapshot', id: string, caseId?: any | null, issuedSoil: any, deltaSownBeans: any, sownBeans: any, deltaPodDemand: any, blocksToSoldOutSoil?: any | null, podRate: any, temperature: any, deltaTemperature: any, season: number, cultivationTemperature?: any | null, harvestableIndex: any, harvestablePods: any, harvestedPods: any, numberOfSowers: number, numberOfSows: number, podIndex: any, realRateOfReturn: any, seasonBlock: any, soil: any, soilSoldOut: boolean, unharvestablePods: any }>, siloHourlySnapshots: Array<{ __typename?: 'SiloHourlySnapshot', id: string, beanToMaxLpGpPerBdvRatio: any, deltaBeanToMaxLpGpPerBdvRatio: any, season: number, stalk: any, cropRatio: any, deltaCropRatio: any }>, gaugesInfoHourlySnapshots: Array<{ __typename?: 'GaugesInfoHourlySnapshot', id: string, g0CultivationFactor?: any | null, g1BlightFactor?: any | null, g1ConvertDownPenalty?: any | null, g2BdvConvertedThisSeason?: any | null, g2BonusStalkPerBdv?: any | null, g2MaxConvertCapacity?: any | null }> }; export type FarmerPlotsQueryVariables = Exact<{ account: Scalars['ID']['input']; @@ -15007,7 +14023,7 @@ export type FieldIssuedSoilQueryVariables = Exact<{ export type FieldIssuedSoilQuery = { __typename?: 'Query', fieldHourlySnapshots: Array<{ __typename?: 'FieldHourlySnapshot', issuedSoil: any, season: number, soil: any }> }; export type FieldSnapshotsQueryVariables = Exact<{ - fieldId: Scalars['Bytes']['input']; + fieldId: Scalars['ID']['input']; first: Scalars['Int']['input']; }>; @@ -15081,6 +14097,22 @@ export type PodListingFragment = { __typename?: 'PodListing', id: string, histor export type PodOrderFragment = { __typename?: 'PodOrder', id: string, historyID: string, pricingType?: number | null, pricePerPod: number, pricingFunction?: any | null, maxPlaceInLine: any, minFillAmount: any, beanAmount: any, podAmountFilled: any, beanAmountFilled: any, status: MarketStatus, createdAt: any, updatedAt: any, creationHash: any, farmer: { __typename?: 'Farmer', id: any } }; +export type FarmerReferralQueryVariables = Exact<{ + id: Scalars['ID']['input']; +}>; + + +export type FarmerReferralQuery = { __typename?: 'Query', farmer?: { __typename?: 'Farmer', id: any, totalReferralRewardPodsReceived: any, refereeCount: number } | null }; + +export type ReferralLeaderboardQueryVariables = Exact<{ + first: Scalars['Int']['input']; + skip: Scalars['Int']['input']; + block?: InputMaybe; +}>; + + +export type ReferralLeaderboardQuery = { __typename?: 'Query', farmers: Array<{ __typename?: 'Farmer', id: any, refereeCount: number, totalReferralRewardPodsReceived: any }> }; + export type FarmerSeasonalSiloQueryVariables = Exact<{ from?: InputMaybe; to?: InputMaybe; @@ -15160,11 +14192,11 @@ export type BeanstalkSeasonalWrappedDepositErc20Query = { __typename?: 'Query', export const PodFillFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"PodFill"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"PodFill"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"placeInLine"}},{"kind":"Field","name":{"kind":"Name","value":"amount"}},{"kind":"Field","name":{"kind":"Name","value":"index"}},{"kind":"Field","name":{"kind":"Name","value":"start"}},{"kind":"Field","name":{"kind":"Name","value":"costInBeans"}},{"kind":"Field","name":{"kind":"Name","value":"fromFarmer"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"toFarmer"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"listing"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"originalAmount"}}]}},{"kind":"Field","name":{"kind":"Name","value":"order"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"beanAmount"}}]}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}}]}}]} as unknown as DocumentNode; export const PodListingFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"PodListing"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"PodListing"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"farmer"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"historyID"}},{"kind":"Field","name":{"kind":"Name","value":"index"}},{"kind":"Field","name":{"kind":"Name","value":"start"}},{"kind":"Field","name":{"kind":"Name","value":"mode"}},{"kind":"Field","name":{"kind":"Name","value":"pricingType"}},{"kind":"Field","name":{"kind":"Name","value":"pricePerPod"}},{"kind":"Field","name":{"kind":"Name","value":"pricingFunction"}},{"kind":"Field","name":{"kind":"Name","value":"maxHarvestableIndex"}},{"kind":"Field","name":{"kind":"Name","value":"minFillAmount"}},{"kind":"Field","name":{"kind":"Name","value":"originalIndex"}},{"kind":"Field","name":{"kind":"Name","value":"originalPlaceInLine"}},{"kind":"Field","name":{"kind":"Name","value":"originalAmount"}},{"kind":"Field","name":{"kind":"Name","value":"filled"}},{"kind":"Field","name":{"kind":"Name","value":"amount"}},{"kind":"Field","name":{"kind":"Name","value":"remainingAmount"}},{"kind":"Field","name":{"kind":"Name","value":"filledAmount"}},{"kind":"Field","name":{"kind":"Name","value":"fill"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"placeInLine"}}]}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"creationHash"}}]}}]} as unknown as DocumentNode; export const PodOrderFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"PodOrder"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"PodOrder"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"farmer"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"historyID"}},{"kind":"Field","name":{"kind":"Name","value":"pricingType"}},{"kind":"Field","name":{"kind":"Name","value":"pricePerPod"}},{"kind":"Field","name":{"kind":"Name","value":"pricingFunction"}},{"kind":"Field","name":{"kind":"Name","value":"maxPlaceInLine"}},{"kind":"Field","name":{"kind":"Name","value":"minFillAmount"}},{"kind":"Field","name":{"kind":"Name","value":"beanAmount"}},{"kind":"Field","name":{"kind":"Name","value":"podAmountFilled"}},{"kind":"Field","name":{"kind":"Name","value":"beanAmountFilled"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"creationHash"}}]}}]} as unknown as DocumentNode; -export const BeanstalkAdvancedChartDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"BeanstalkAdvancedChart"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"from"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"to"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"seasons"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"1000"}},{"kind":"Argument","name":{"kind":"Name","value":"orderBy"},"value":{"kind":"EnumValue","value":"season"}},{"kind":"Argument","name":{"kind":"Name","value":"orderDirection"},"value":{"kind":"EnumValue","value":"desc"}},{"kind":"Argument","name":{"kind":"Name","value":"where"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"season_gte"},"value":{"kind":"Variable","name":{"kind":"Name","value":"from"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"season_lte"},"value":{"kind":"Variable","name":{"kind":"Name","value":"to"}}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"sunriseBlock"}},{"kind":"Field","name":{"kind":"Name","value":"rewardBeans"}},{"kind":"Field","name":{"kind":"Name","value":"price"}},{"kind":"Field","name":{"kind":"Name","value":"deltaBeans"}},{"kind":"Field","name":{"kind":"Name","value":"raining"}},{"kind":"Field","name":{"kind":"Name","value":"season"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}}]}},{"kind":"Field","name":{"kind":"Name","value":"fieldHourlySnapshots"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"1000"}},{"kind":"Argument","name":{"kind":"Name","value":"orderBy"},"value":{"kind":"EnumValue","value":"season"}},{"kind":"Argument","name":{"kind":"Name","value":"orderDirection"},"value":{"kind":"EnumValue","value":"desc"}},{"kind":"Argument","name":{"kind":"Name","value":"where"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"field"},"value":{"kind":"StringValue","value":"0xd1a0d188e861ed9d15773a2f3574a2e94134ba8f","block":false}},{"kind":"ObjectField","name":{"kind":"Name","value":"season_gte"},"value":{"kind":"Variable","name":{"kind":"Name","value":"from"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"season_lte"},"value":{"kind":"Variable","name":{"kind":"Name","value":"to"}}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"caseId"}},{"kind":"Field","name":{"kind":"Name","value":"issuedSoil"}},{"kind":"Field","name":{"kind":"Name","value":"deltaSownBeans"}},{"kind":"Field","name":{"kind":"Name","value":"sownBeans"}},{"kind":"Field","name":{"kind":"Name","value":"deltaPodDemand"}},{"kind":"Field","name":{"kind":"Name","value":"blocksToSoldOutSoil"}},{"kind":"Field","name":{"kind":"Name","value":"podRate"}},{"kind":"Field","name":{"kind":"Name","value":"temperature"}},{"kind":"Field","name":{"kind":"Name","value":"deltaTemperature"}},{"kind":"Field","name":{"kind":"Name","value":"season"}},{"kind":"Field","name":{"kind":"Name","value":"cultivationFactor"}},{"kind":"Field","name":{"kind":"Name","value":"cultivationTemperature"}},{"kind":"Field","name":{"kind":"Name","value":"harvestableIndex"}},{"kind":"Field","name":{"kind":"Name","value":"harvestablePods"}},{"kind":"Field","name":{"kind":"Name","value":"harvestedPods"}},{"kind":"Field","name":{"kind":"Name","value":"numberOfSowers"}},{"kind":"Field","name":{"kind":"Name","value":"numberOfSows"}},{"kind":"Field","name":{"kind":"Name","value":"podIndex"}},{"kind":"Field","name":{"kind":"Name","value":"realRateOfReturn"}},{"kind":"Field","name":{"kind":"Name","value":"seasonBlock"}},{"kind":"Field","name":{"kind":"Name","value":"soil"}},{"kind":"Field","name":{"kind":"Name","value":"soilSoldOut"}},{"kind":"Field","name":{"kind":"Name","value":"unharvestablePods"}}]}},{"kind":"Field","name":{"kind":"Name","value":"siloHourlySnapshots"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"1000"}},{"kind":"Argument","name":{"kind":"Name","value":"orderBy"},"value":{"kind":"EnumValue","value":"season"}},{"kind":"Argument","name":{"kind":"Name","value":"orderDirection"},"value":{"kind":"EnumValue","value":"desc"}},{"kind":"Argument","name":{"kind":"Name","value":"where"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"silo"},"value":{"kind":"StringValue","value":"0xd1a0d188e861ed9d15773a2f3574a2e94134ba8f","block":false}},{"kind":"ObjectField","name":{"kind":"Name","value":"season_gte"},"value":{"kind":"Variable","name":{"kind":"Name","value":"from"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"season_lte"},"value":{"kind":"Variable","name":{"kind":"Name","value":"to"}}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"beanToMaxLpGpPerBdvRatio"}},{"kind":"Field","name":{"kind":"Name","value":"deltaBeanToMaxLpGpPerBdvRatio"}},{"kind":"Field","name":{"kind":"Name","value":"season"}},{"kind":"Field","name":{"kind":"Name","value":"stalk"}}]}}]}}]} as unknown as DocumentNode; +export const BeanstalkAdvancedChartDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"BeanstalkAdvancedChart"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"from"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"to"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"seasons"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"1000"}},{"kind":"Argument","name":{"kind":"Name","value":"orderBy"},"value":{"kind":"EnumValue","value":"season"}},{"kind":"Argument","name":{"kind":"Name","value":"orderDirection"},"value":{"kind":"EnumValue","value":"desc"}},{"kind":"Argument","name":{"kind":"Name","value":"where"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"season_gte"},"value":{"kind":"Variable","name":{"kind":"Name","value":"from"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"season_lte"},"value":{"kind":"Variable","name":{"kind":"Name","value":"to"}}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"sunriseBlock"}},{"kind":"Field","name":{"kind":"Name","value":"rewardBeans"}},{"kind":"Field","name":{"kind":"Name","value":"price"}},{"kind":"Field","name":{"kind":"Name","value":"deltaBeans"}},{"kind":"Field","name":{"kind":"Name","value":"raining"}},{"kind":"Field","name":{"kind":"Name","value":"season"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}}]}},{"kind":"Field","name":{"kind":"Name","value":"fieldHourlySnapshots"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"1000"}},{"kind":"Argument","name":{"kind":"Name","value":"orderBy"},"value":{"kind":"EnumValue","value":"season"}},{"kind":"Argument","name":{"kind":"Name","value":"orderDirection"},"value":{"kind":"EnumValue","value":"desc"}},{"kind":"Argument","name":{"kind":"Name","value":"where"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"field"},"value":{"kind":"StringValue","value":"0xd1a0d188e861ed9d15773a2f3574a2e94134ba8f","block":false}},{"kind":"ObjectField","name":{"kind":"Name","value":"season_gte"},"value":{"kind":"Variable","name":{"kind":"Name","value":"from"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"season_lte"},"value":{"kind":"Variable","name":{"kind":"Name","value":"to"}}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"caseId"}},{"kind":"Field","name":{"kind":"Name","value":"issuedSoil"}},{"kind":"Field","name":{"kind":"Name","value":"deltaSownBeans"}},{"kind":"Field","name":{"kind":"Name","value":"sownBeans"}},{"kind":"Field","name":{"kind":"Name","value":"deltaPodDemand"}},{"kind":"Field","name":{"kind":"Name","value":"blocksToSoldOutSoil"}},{"kind":"Field","name":{"kind":"Name","value":"podRate"}},{"kind":"Field","name":{"kind":"Name","value":"temperature"}},{"kind":"Field","name":{"kind":"Name","value":"deltaTemperature"}},{"kind":"Field","name":{"kind":"Name","value":"season"}},{"kind":"Field","name":{"kind":"Name","value":"cultivationTemperature"}},{"kind":"Field","name":{"kind":"Name","value":"harvestableIndex"}},{"kind":"Field","name":{"kind":"Name","value":"harvestablePods"}},{"kind":"Field","name":{"kind":"Name","value":"harvestedPods"}},{"kind":"Field","name":{"kind":"Name","value":"numberOfSowers"}},{"kind":"Field","name":{"kind":"Name","value":"numberOfSows"}},{"kind":"Field","name":{"kind":"Name","value":"podIndex"}},{"kind":"Field","name":{"kind":"Name","value":"realRateOfReturn"}},{"kind":"Field","name":{"kind":"Name","value":"seasonBlock"}},{"kind":"Field","name":{"kind":"Name","value":"soil"}},{"kind":"Field","name":{"kind":"Name","value":"soilSoldOut"}},{"kind":"Field","name":{"kind":"Name","value":"unharvestablePods"}}]}},{"kind":"Field","name":{"kind":"Name","value":"siloHourlySnapshots"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"1000"}},{"kind":"Argument","name":{"kind":"Name","value":"orderBy"},"value":{"kind":"EnumValue","value":"season"}},{"kind":"Argument","name":{"kind":"Name","value":"orderDirection"},"value":{"kind":"EnumValue","value":"desc"}},{"kind":"Argument","name":{"kind":"Name","value":"where"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"silo"},"value":{"kind":"StringValue","value":"0xd1a0d188e861ed9d15773a2f3574a2e94134ba8f","block":false}},{"kind":"ObjectField","name":{"kind":"Name","value":"season_gte"},"value":{"kind":"Variable","name":{"kind":"Name","value":"from"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"season_lte"},"value":{"kind":"Variable","name":{"kind":"Name","value":"to"}}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"beanToMaxLpGpPerBdvRatio"}},{"kind":"Field","name":{"kind":"Name","value":"deltaBeanToMaxLpGpPerBdvRatio"}},{"kind":"Field","name":{"kind":"Name","value":"season"}},{"kind":"Field","name":{"kind":"Name","value":"stalk"}},{"kind":"Field","name":{"kind":"Name","value":"cropRatio"}},{"kind":"Field","name":{"kind":"Name","value":"deltaCropRatio"}}]}},{"kind":"Field","name":{"kind":"Name","value":"gaugesInfoHourlySnapshots"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"1000"}},{"kind":"Argument","name":{"kind":"Name","value":"orderBy"},"value":{"kind":"EnumValue","value":"season"}},{"kind":"Argument","name":{"kind":"Name","value":"orderDirection"},"value":{"kind":"EnumValue","value":"desc"}},{"kind":"Argument","name":{"kind":"Name","value":"where"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"season_gte"},"value":{"kind":"Variable","name":{"kind":"Name","value":"from"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"season_lte"},"value":{"kind":"Variable","name":{"kind":"Name","value":"to"}}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"g0CultivationFactor"}},{"kind":"Field","name":{"kind":"Name","value":"g1BlightFactor"}},{"kind":"Field","name":{"kind":"Name","value":"g1ConvertDownPenalty"}},{"kind":"Field","name":{"kind":"Name","value":"g2BdvConvertedThisSeason"}},{"kind":"Field","name":{"kind":"Name","value":"g2BonusStalkPerBdv"}},{"kind":"Field","name":{"kind":"Name","value":"g2MaxConvertCapacity"}}]}}]}}]} as unknown as DocumentNode; export const FarmerPlotsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"FarmerPlots"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"account"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"farmer"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"account"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"plots"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"1000"}},{"kind":"Argument","name":{"kind":"Name","value":"where"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"pods_gt"},"value":{"kind":"StringValue","value":"50","block":false}},{"kind":"ObjectField","name":{"kind":"Name","value":"fullyHarvested"},"value":{"kind":"BooleanValue","value":false}}]}},{"kind":"Argument","name":{"kind":"Name","value":"orderBy"},"value":{"kind":"EnumValue","value":"index"}},{"kind":"Argument","name":{"kind":"Name","value":"orderDirection"},"value":{"kind":"EnumValue","value":"asc"}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"beansPerPod"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"creationHash"}},{"kind":"Field","name":{"kind":"Name","value":"fullyHarvested"}},{"kind":"Field","name":{"kind":"Name","value":"harvestablePods"}},{"kind":"Field","name":{"kind":"Name","value":"harvestedPods"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"index"}},{"kind":"Field","name":{"kind":"Name","value":"pods"}},{"kind":"Field","name":{"kind":"Name","value":"season"}},{"kind":"Field","name":{"kind":"Name","value":"source"}},{"kind":"Field","name":{"kind":"Name","value":"sourceHash"}},{"kind":"Field","name":{"kind":"Name","value":"preTransferSource"}},{"kind":"Field","name":{"kind":"Name","value":"preTransferOwner"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAtBlock"}},{"kind":"Field","name":{"kind":"Name","value":"listing"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]}}]}}]} as unknown as DocumentNode; export const FarmerSiloBalancesDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"FarmerSiloBalances"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"account"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"season"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"farmer"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"account"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"deposited"},"name":{"kind":"Name","value":"deposits"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"orderBy"},"value":{"kind":"EnumValue","value":"season"}},{"kind":"Argument","name":{"kind":"Name","value":"orderDirection"},"value":{"kind":"EnumValue","value":"asc"}},{"kind":"Argument","name":{"kind":"Name","value":"where"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"depositedAmount_gt"},"value":{"kind":"IntValue","value":"0"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"season"}},{"kind":"Field","name":{"kind":"Name","value":"stem"}},{"kind":"Field","name":{"kind":"Name","value":"token"}},{"kind":"Field","name":{"kind":"Name","value":"depositedAmount"}},{"kind":"Field","name":{"kind":"Name","value":"depositedBDV"}}]}},{"kind":"Field","alias":{"kind":"Name","value":"withdrawn"},"name":{"kind":"Name","value":"withdraws"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"orderBy"},"value":{"kind":"EnumValue","value":"withdrawSeason"}},{"kind":"Argument","name":{"kind":"Name","value":"orderDirection"},"value":{"kind":"EnumValue","value":"asc"}},{"kind":"Argument","name":{"kind":"Name","value":"where"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"claimableSeason_gt"},"value":{"kind":"Variable","name":{"kind":"Name","value":"season"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"claimed"},"value":{"kind":"BooleanValue","value":false}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"season"},"name":{"kind":"Name","value":"withdrawSeason"}},{"kind":"Field","name":{"kind":"Name","value":"token"}},{"kind":"Field","name":{"kind":"Name","value":"amount"}}]}},{"kind":"Field","alias":{"kind":"Name","value":"claimable"},"name":{"kind":"Name","value":"withdraws"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"orderBy"},"value":{"kind":"EnumValue","value":"withdrawSeason"}},{"kind":"Argument","name":{"kind":"Name","value":"orderDirection"},"value":{"kind":"EnumValue","value":"asc"}},{"kind":"Argument","name":{"kind":"Name","value":"where"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"claimableSeason_lte"},"value":{"kind":"Variable","name":{"kind":"Name","value":"season"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"claimed"},"value":{"kind":"BooleanValue","value":false}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"season"},"name":{"kind":"Name","value":"withdrawSeason"}},{"kind":"Field","name":{"kind":"Name","value":"token"}},{"kind":"Field","name":{"kind":"Name","value":"amount"}}]}}]}}]}}]} as unknown as DocumentNode; export const FieldIssuedSoilDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"fieldIssuedSoil"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"season"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"field_contains_nocase"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"fieldHourlySnapshots"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"1"}},{"kind":"Argument","name":{"kind":"Name","value":"orderBy"},"value":{"kind":"EnumValue","value":"season"}},{"kind":"Argument","name":{"kind":"Name","value":"orderDirection"},"value":{"kind":"EnumValue","value":"desc"}},{"kind":"Argument","name":{"kind":"Name","value":"where"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"season"},"value":{"kind":"Variable","name":{"kind":"Name","value":"season"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"field_contains_nocase"},"value":{"kind":"Variable","name":{"kind":"Name","value":"field_contains_nocase"}}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"issuedSoil"}},{"kind":"Field","name":{"kind":"Name","value":"season"}},{"kind":"Field","name":{"kind":"Name","value":"soil"}}]}}]}}]} as unknown as DocumentNode; -export const FieldSnapshotsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"FieldSnapshots"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"fieldId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Bytes"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"first"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"fieldHourlySnapshots"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"first"},"value":{"kind":"Variable","name":{"kind":"Name","value":"first"}}},{"kind":"Argument","name":{"kind":"Name","value":"orderBy"},"value":{"kind":"EnumValue","value":"season"}},{"kind":"Argument","name":{"kind":"Name","value":"orderDirection"},"value":{"kind":"EnumValue","value":"desc"}},{"kind":"Argument","name":{"kind":"Name","value":"where"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"field_"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"fieldId"}}}]}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"blocksToSoldOutSoil"}},{"kind":"Field","name":{"kind":"Name","value":"caseId"}},{"kind":"Field","name":{"kind":"Name","value":"deltaHarvestablePods"}},{"kind":"Field","name":{"kind":"Name","value":"deltaHarvestedPods"}},{"kind":"Field","name":{"kind":"Name","value":"deltaIssuedSoil"}},{"kind":"Field","name":{"kind":"Name","value":"deltaNumberOfSowers"}},{"kind":"Field","name":{"kind":"Name","value":"deltaNumberOfSows"}},{"kind":"Field","name":{"kind":"Name","value":"deltaPodIndex"}},{"kind":"Field","name":{"kind":"Name","value":"deltaPodRate"}},{"kind":"Field","name":{"kind":"Name","value":"deltaRealRateOfReturn"}},{"kind":"Field","name":{"kind":"Name","value":"deltaSoil"}},{"kind":"Field","name":{"kind":"Name","value":"deltaSownBeans"}},{"kind":"Field","name":{"kind":"Name","value":"deltaTemperature"}},{"kind":"Field","name":{"kind":"Name","value":"deltaUnharvestablePods"}},{"kind":"Field","name":{"kind":"Name","value":"harvestablePods"}},{"kind":"Field","name":{"kind":"Name","value":"harvestedPods"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"issuedSoil"}},{"kind":"Field","name":{"kind":"Name","value":"numberOfSowers"}},{"kind":"Field","name":{"kind":"Name","value":"numberOfSows"}},{"kind":"Field","name":{"kind":"Name","value":"podIndex"}},{"kind":"Field","name":{"kind":"Name","value":"podRate"}},{"kind":"Field","name":{"kind":"Name","value":"realRateOfReturn"}},{"kind":"Field","name":{"kind":"Name","value":"season"}},{"kind":"Field","name":{"kind":"Name","value":"seasonBlock"}},{"kind":"Field","name":{"kind":"Name","value":"soil"}},{"kind":"Field","name":{"kind":"Name","value":"soilSoldOut"}},{"kind":"Field","name":{"kind":"Name","value":"sownBeans"}},{"kind":"Field","name":{"kind":"Name","value":"temperature"}},{"kind":"Field","name":{"kind":"Name","value":"unharvestablePods"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]}}]} as unknown as DocumentNode; +export const FieldSnapshotsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"FieldSnapshots"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"fieldId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"first"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"fieldHourlySnapshots"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"first"},"value":{"kind":"Variable","name":{"kind":"Name","value":"first"}}},{"kind":"Argument","name":{"kind":"Name","value":"orderBy"},"value":{"kind":"EnumValue","value":"season"}},{"kind":"Argument","name":{"kind":"Name","value":"orderDirection"},"value":{"kind":"EnumValue","value":"desc"}},{"kind":"Argument","name":{"kind":"Name","value":"where"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"field_"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"fieldId"}}}]}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"blocksToSoldOutSoil"}},{"kind":"Field","name":{"kind":"Name","value":"caseId"}},{"kind":"Field","name":{"kind":"Name","value":"deltaHarvestablePods"}},{"kind":"Field","name":{"kind":"Name","value":"deltaHarvestedPods"}},{"kind":"Field","name":{"kind":"Name","value":"deltaIssuedSoil"}},{"kind":"Field","name":{"kind":"Name","value":"deltaNumberOfSowers"}},{"kind":"Field","name":{"kind":"Name","value":"deltaNumberOfSows"}},{"kind":"Field","name":{"kind":"Name","value":"deltaPodIndex"}},{"kind":"Field","name":{"kind":"Name","value":"deltaPodRate"}},{"kind":"Field","name":{"kind":"Name","value":"deltaRealRateOfReturn"}},{"kind":"Field","name":{"kind":"Name","value":"deltaSoil"}},{"kind":"Field","name":{"kind":"Name","value":"deltaSownBeans"}},{"kind":"Field","name":{"kind":"Name","value":"deltaTemperature"}},{"kind":"Field","name":{"kind":"Name","value":"deltaUnharvestablePods"}},{"kind":"Field","name":{"kind":"Name","value":"harvestablePods"}},{"kind":"Field","name":{"kind":"Name","value":"harvestedPods"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"issuedSoil"}},{"kind":"Field","name":{"kind":"Name","value":"numberOfSowers"}},{"kind":"Field","name":{"kind":"Name","value":"numberOfSows"}},{"kind":"Field","name":{"kind":"Name","value":"podIndex"}},{"kind":"Field","name":{"kind":"Name","value":"podRate"}},{"kind":"Field","name":{"kind":"Name","value":"realRateOfReturn"}},{"kind":"Field","name":{"kind":"Name","value":"season"}},{"kind":"Field","name":{"kind":"Name","value":"seasonBlock"}},{"kind":"Field","name":{"kind":"Name","value":"soil"}},{"kind":"Field","name":{"kind":"Name","value":"soilSoldOut"}},{"kind":"Field","name":{"kind":"Name","value":"sownBeans"}},{"kind":"Field","name":{"kind":"Name","value":"temperature"}},{"kind":"Field","name":{"kind":"Name","value":"unharvestablePods"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]}}]} as unknown as DocumentNode; export const BeanstalkSeasonsTableDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"BeanstalkSeasonsTable"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"from"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"to"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"seasons"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"1000"}},{"kind":"Argument","name":{"kind":"Name","value":"orderBy"},"value":{"kind":"EnumValue","value":"season"}},{"kind":"Argument","name":{"kind":"Name","value":"orderDirection"},"value":{"kind":"EnumValue","value":"desc"}},{"kind":"Argument","name":{"kind":"Name","value":"where"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"season_gte"},"value":{"kind":"Variable","name":{"kind":"Name","value":"from"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"season_lte"},"value":{"kind":"Variable","name":{"kind":"Name","value":"to"}}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"sunriseBlock"}},{"kind":"Field","name":{"kind":"Name","value":"rewardBeans"}},{"kind":"Field","name":{"kind":"Name","value":"price"}},{"kind":"Field","name":{"kind":"Name","value":"deltaBeans"}},{"kind":"Field","name":{"kind":"Name","value":"raining"}},{"kind":"Field","name":{"kind":"Name","value":"season"}}]}},{"kind":"Field","name":{"kind":"Name","value":"fieldHourlySnapshots"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"1000"}},{"kind":"Argument","name":{"kind":"Name","value":"orderBy"},"value":{"kind":"EnumValue","value":"season"}},{"kind":"Argument","name":{"kind":"Name","value":"orderDirection"},"value":{"kind":"EnumValue","value":"desc"}},{"kind":"Argument","name":{"kind":"Name","value":"where"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"field"},"value":{"kind":"StringValue","value":"0xd1a0d188e861ed9d15773a2f3574a2e94134ba8f","block":false}},{"kind":"ObjectField","name":{"kind":"Name","value":"season_gte"},"value":{"kind":"Variable","name":{"kind":"Name","value":"from"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"season_lte"},"value":{"kind":"Variable","name":{"kind":"Name","value":"to"}}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"caseId"}},{"kind":"Field","name":{"kind":"Name","value":"issuedSoil"}},{"kind":"Field","name":{"kind":"Name","value":"deltaSownBeans"}},{"kind":"Field","name":{"kind":"Name","value":"sownBeans"}},{"kind":"Field","name":{"kind":"Name","value":"deltaPodDemand"}},{"kind":"Field","name":{"kind":"Name","value":"blocksToSoldOutSoil"}},{"kind":"Field","name":{"kind":"Name","value":"podRate"}},{"kind":"Field","name":{"kind":"Name","value":"temperature"}},{"kind":"Field","name":{"kind":"Name","value":"deltaTemperature"}},{"kind":"Field","name":{"kind":"Name","value":"season"}}]}},{"kind":"Field","name":{"kind":"Name","value":"siloHourlySnapshots"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"1000"}},{"kind":"Argument","name":{"kind":"Name","value":"orderBy"},"value":{"kind":"EnumValue","value":"season"}},{"kind":"Argument","name":{"kind":"Name","value":"orderDirection"},"value":{"kind":"EnumValue","value":"desc"}},{"kind":"Argument","name":{"kind":"Name","value":"where"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"silo"},"value":{"kind":"StringValue","value":"0xd1a0d188e861ed9d15773a2f3574a2e94134ba8f","block":false}},{"kind":"ObjectField","name":{"kind":"Name","value":"season_gte"},"value":{"kind":"Variable","name":{"kind":"Name","value":"from"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"season_lte"},"value":{"kind":"Variable","name":{"kind":"Name","value":"to"}}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"beanToMaxLpGpPerBdvRatio"}},{"kind":"Field","name":{"kind":"Name","value":"deltaBeanToMaxLpGpPerBdvRatio"}},{"kind":"Field","name":{"kind":"Name","value":"season"}}]}}]}}]} as unknown as DocumentNode; export const SiloSnapshotsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"SiloSnapshots"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"first"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Bytes"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"siloHourlySnapshots"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"first"},"value":{"kind":"Variable","name":{"kind":"Name","value":"first"}}},{"kind":"Argument","name":{"kind":"Name","value":"orderBy"},"value":{"kind":"EnumValue","value":"season"}},{"kind":"Argument","name":{"kind":"Name","value":"orderDirection"},"value":{"kind":"EnumValue","value":"desc"}},{"kind":"Argument","name":{"kind":"Name","value":"where"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"silo_"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}]}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"beanToMaxLpGpPerBdvRatio"}},{"kind":"Field","name":{"kind":"Name","value":"deltaBeanMints"}},{"kind":"Field","name":{"kind":"Name","value":"season"}}]}}]}}]} as unknown as DocumentNode; export const SiloYieldsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"SiloYields"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"siloYields"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"orderBy"},"value":{"kind":"EnumValue","value":"season"}},{"kind":"Argument","name":{"kind":"Name","value":"orderDirection"},"value":{"kind":"EnumValue","value":"desc"}},{"kind":"Argument","name":{"kind":"Name","value":"where"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"emaWindow"},"value":{"kind":"EnumValue","value":"ROLLING_30_DAY"}}]}},{"kind":"Argument","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"1"}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"beansPerSeasonEMA"}},{"kind":"Field","name":{"kind":"Name","value":"beta"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"season"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"u"}},{"kind":"Field","name":{"kind":"Name","value":"whitelistedTokens"}},{"kind":"Field","name":{"kind":"Name","value":"emaWindow"}},{"kind":"Field","name":{"kind":"Name","value":"tokenAPYS"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"beanAPY"}},{"kind":"Field","name":{"kind":"Name","value":"stalkAPY"}},{"kind":"Field","name":{"kind":"Name","value":"season"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"token"}}]}}]}}]}}]} as unknown as DocumentNode; @@ -15172,6 +14204,8 @@ export const AllMarketActivityDocument = {"kind":"Document","definitions":[{"kin export const AllPodListingsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"AllPodListings"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"first"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}},"defaultValue":{"kind":"IntValue","value":"1000"}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"status"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"MarketStatus"}},"defaultValue":{"kind":"EnumValue","value":"ACTIVE"}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"maxHarvestableIndex"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"BigInt"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"skip"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}},"defaultValue":{"kind":"IntValue","value":"0"}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"podListings"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"first"},"value":{"kind":"Variable","name":{"kind":"Name","value":"first"}}},{"kind":"Argument","name":{"kind":"Name","value":"skip"},"value":{"kind":"Variable","name":{"kind":"Name","value":"skip"}}},{"kind":"Argument","name":{"kind":"Name","value":"where"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"status"},"value":{"kind":"Variable","name":{"kind":"Name","value":"status"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"maxHarvestableIndex_gt"},"value":{"kind":"Variable","name":{"kind":"Name","value":"maxHarvestableIndex"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"remainingAmount_gt"},"value":{"kind":"StringValue","value":"100000","block":false}}]}},{"kind":"Argument","name":{"kind":"Name","value":"orderBy"},"value":{"kind":"EnumValue","value":"index"}},{"kind":"Argument","name":{"kind":"Name","value":"orderDirection"},"value":{"kind":"EnumValue","value":"asc"}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"PodListing"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"PodListing"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"PodListing"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"farmer"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"historyID"}},{"kind":"Field","name":{"kind":"Name","value":"index"}},{"kind":"Field","name":{"kind":"Name","value":"start"}},{"kind":"Field","name":{"kind":"Name","value":"mode"}},{"kind":"Field","name":{"kind":"Name","value":"pricingType"}},{"kind":"Field","name":{"kind":"Name","value":"pricePerPod"}},{"kind":"Field","name":{"kind":"Name","value":"pricingFunction"}},{"kind":"Field","name":{"kind":"Name","value":"maxHarvestableIndex"}},{"kind":"Field","name":{"kind":"Name","value":"minFillAmount"}},{"kind":"Field","name":{"kind":"Name","value":"originalIndex"}},{"kind":"Field","name":{"kind":"Name","value":"originalPlaceInLine"}},{"kind":"Field","name":{"kind":"Name","value":"originalAmount"}},{"kind":"Field","name":{"kind":"Name","value":"filled"}},{"kind":"Field","name":{"kind":"Name","value":"amount"}},{"kind":"Field","name":{"kind":"Name","value":"remainingAmount"}},{"kind":"Field","name":{"kind":"Name","value":"filledAmount"}},{"kind":"Field","name":{"kind":"Name","value":"fill"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"placeInLine"}}]}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"creationHash"}}]}}]} as unknown as DocumentNode; export const AllPodOrdersDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"AllPodOrders"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"first"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}},"defaultValue":{"kind":"IntValue","value":"1000"}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"status"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"MarketStatus"}},"defaultValue":{"kind":"EnumValue","value":"ACTIVE"}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"skip"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}},"defaultValue":{"kind":"IntValue","value":"0"}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"podOrders"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"first"},"value":{"kind":"Variable","name":{"kind":"Name","value":"first"}}},{"kind":"Argument","name":{"kind":"Name","value":"skip"},"value":{"kind":"Variable","name":{"kind":"Name","value":"skip"}}},{"kind":"Argument","name":{"kind":"Name","value":"orderBy"},"value":{"kind":"EnumValue","value":"createdAt"}},{"kind":"Argument","name":{"kind":"Name","value":"orderDirection"},"value":{"kind":"EnumValue","value":"desc"}},{"kind":"Argument","name":{"kind":"Name","value":"where"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"status"},"value":{"kind":"Variable","name":{"kind":"Name","value":"status"}}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"PodOrder"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"PodOrder"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"PodOrder"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"farmer"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"historyID"}},{"kind":"Field","name":{"kind":"Name","value":"pricingType"}},{"kind":"Field","name":{"kind":"Name","value":"pricePerPod"}},{"kind":"Field","name":{"kind":"Name","value":"pricingFunction"}},{"kind":"Field","name":{"kind":"Name","value":"maxPlaceInLine"}},{"kind":"Field","name":{"kind":"Name","value":"minFillAmount"}},{"kind":"Field","name":{"kind":"Name","value":"beanAmount"}},{"kind":"Field","name":{"kind":"Name","value":"podAmountFilled"}},{"kind":"Field","name":{"kind":"Name","value":"beanAmountFilled"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"creationHash"}}]}}]} as unknown as DocumentNode; export const FarmerMarketActivityDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"FarmerMarketActivity"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"first"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}},"defaultValue":{"kind":"IntValue","value":"1000"}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"account"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"listings_createdAt_gt"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"BigInt"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"orders_createdAt_gt"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"BigInt"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"fill_createdAt_gt"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"BigInt"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"podListings"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"first"},"value":{"kind":"Variable","name":{"kind":"Name","value":"first"}}},{"kind":"Argument","name":{"kind":"Name","value":"where"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"farmer"},"value":{"kind":"Variable","name":{"kind":"Name","value":"account"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"createdAt_gt"},"value":{"kind":"Variable","name":{"kind":"Name","value":"listings_createdAt_gt"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"status_not"},"value":{"kind":"EnumValue","value":"FILLED_PARTIAL"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"PodListing"}}]}},{"kind":"Field","name":{"kind":"Name","value":"podOrders"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"first"},"value":{"kind":"Variable","name":{"kind":"Name","value":"first"}}},{"kind":"Argument","name":{"kind":"Name","value":"orderBy"},"value":{"kind":"EnumValue","value":"createdAt"}},{"kind":"Argument","name":{"kind":"Name","value":"orderDirection"},"value":{"kind":"EnumValue","value":"desc"}},{"kind":"Argument","name":{"kind":"Name","value":"where"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"farmer"},"value":{"kind":"Variable","name":{"kind":"Name","value":"account"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"createdAt_gt"},"value":{"kind":"Variable","name":{"kind":"Name","value":"orders_createdAt_gt"}}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"PodOrder"}}]}},{"kind":"Field","name":{"kind":"Name","value":"podFills"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"first"},"value":{"kind":"Variable","name":{"kind":"Name","value":"first"}}},{"kind":"Argument","name":{"kind":"Name","value":"where"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"and"},"value":{"kind":"ListValue","values":[{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"createdAt_gt"},"value":{"kind":"Variable","name":{"kind":"Name","value":"fill_createdAt_gt"}}}]},{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"or"},"value":{"kind":"ListValue","values":[{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"fromFarmer"},"value":{"kind":"Variable","name":{"kind":"Name","value":"account"}}}]},{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"toFarmer"},"value":{"kind":"Variable","name":{"kind":"Name","value":"account"}}}]}]}}]}]}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"PodFill"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"PodListing"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"PodListing"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"farmer"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"historyID"}},{"kind":"Field","name":{"kind":"Name","value":"index"}},{"kind":"Field","name":{"kind":"Name","value":"start"}},{"kind":"Field","name":{"kind":"Name","value":"mode"}},{"kind":"Field","name":{"kind":"Name","value":"pricingType"}},{"kind":"Field","name":{"kind":"Name","value":"pricePerPod"}},{"kind":"Field","name":{"kind":"Name","value":"pricingFunction"}},{"kind":"Field","name":{"kind":"Name","value":"maxHarvestableIndex"}},{"kind":"Field","name":{"kind":"Name","value":"minFillAmount"}},{"kind":"Field","name":{"kind":"Name","value":"originalIndex"}},{"kind":"Field","name":{"kind":"Name","value":"originalPlaceInLine"}},{"kind":"Field","name":{"kind":"Name","value":"originalAmount"}},{"kind":"Field","name":{"kind":"Name","value":"filled"}},{"kind":"Field","name":{"kind":"Name","value":"amount"}},{"kind":"Field","name":{"kind":"Name","value":"remainingAmount"}},{"kind":"Field","name":{"kind":"Name","value":"filledAmount"}},{"kind":"Field","name":{"kind":"Name","value":"fill"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"placeInLine"}}]}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"creationHash"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"PodOrder"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"PodOrder"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"farmer"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"historyID"}},{"kind":"Field","name":{"kind":"Name","value":"pricingType"}},{"kind":"Field","name":{"kind":"Name","value":"pricePerPod"}},{"kind":"Field","name":{"kind":"Name","value":"pricingFunction"}},{"kind":"Field","name":{"kind":"Name","value":"maxPlaceInLine"}},{"kind":"Field","name":{"kind":"Name","value":"minFillAmount"}},{"kind":"Field","name":{"kind":"Name","value":"beanAmount"}},{"kind":"Field","name":{"kind":"Name","value":"podAmountFilled"}},{"kind":"Field","name":{"kind":"Name","value":"beanAmountFilled"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"creationHash"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"PodFill"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"PodFill"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"placeInLine"}},{"kind":"Field","name":{"kind":"Name","value":"amount"}},{"kind":"Field","name":{"kind":"Name","value":"index"}},{"kind":"Field","name":{"kind":"Name","value":"start"}},{"kind":"Field","name":{"kind":"Name","value":"costInBeans"}},{"kind":"Field","name":{"kind":"Name","value":"fromFarmer"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"toFarmer"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"listing"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"originalAmount"}}]}},{"kind":"Field","name":{"kind":"Name","value":"order"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"beanAmount"}}]}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}}]}}]} as unknown as DocumentNode; +export const FarmerReferralDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"FarmerReferral"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"farmer"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"totalReferralRewardPodsReceived"}},{"kind":"Field","name":{"kind":"Name","value":"refereeCount"}}]}}]}}]} as unknown as DocumentNode; +export const ReferralLeaderboardDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ReferralLeaderboard"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"first"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"skip"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"block"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Block_height"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"farmers"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"first"},"value":{"kind":"Variable","name":{"kind":"Name","value":"first"}}},{"kind":"Argument","name":{"kind":"Name","value":"skip"},"value":{"kind":"Variable","name":{"kind":"Name","value":"skip"}}},{"kind":"Argument","name":{"kind":"Name","value":"orderBy"},"value":{"kind":"EnumValue","value":"totalReferralRewardPodsReceived"}},{"kind":"Argument","name":{"kind":"Name","value":"orderDirection"},"value":{"kind":"EnumValue","value":"desc"}},{"kind":"Argument","name":{"kind":"Name","value":"where"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"refereeCount_gte"},"value":{"kind":"IntValue","value":"0"}}]}},{"kind":"Argument","name":{"kind":"Name","value":"block"},"value":{"kind":"Variable","name":{"kind":"Name","value":"block"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"refereeCount"}},{"kind":"Field","name":{"kind":"Name","value":"totalReferralRewardPodsReceived"}}]}}]}}]} as unknown as DocumentNode; export const FarmerSeasonalSiloDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"FarmerSeasonalSilo"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"from"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"to"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"account"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"siloHourlySnapshots"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"where"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"silo"},"value":{"kind":"Variable","name":{"kind":"Name","value":"account"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"season_gte"},"value":{"kind":"Variable","name":{"kind":"Name","value":"from"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"season_lte"},"value":{"kind":"Variable","name":{"kind":"Name","value":"to"}}}]}},{"kind":"Argument","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"1000"}},{"kind":"Argument","name":{"kind":"Name","value":"orderBy"},"value":{"kind":"EnumValue","value":"season"}},{"kind":"Argument","name":{"kind":"Name","value":"orderDirection"},"value":{"kind":"EnumValue","value":"asc"}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"season"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"plantedBeans"}},{"kind":"Field","name":{"kind":"Name","value":"stalk"}},{"kind":"Field","name":{"kind":"Name","value":"germinatingStalk"}},{"kind":"Field","name":{"kind":"Name","value":"depositedBDV"}}]}}]}}]} as unknown as DocumentNode; export const FarmerSeasonalSiloAssetTokenDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"FarmerSeasonalSiloAssetToken"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"from"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"to"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"siloAsset"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"siloAssetHourlySnapshots"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"where"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"siloAsset"},"value":{"kind":"Variable","name":{"kind":"Name","value":"siloAsset"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"season_gte"},"value":{"kind":"Variable","name":{"kind":"Name","value":"from"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"season_lte"},"value":{"kind":"Variable","name":{"kind":"Name","value":"to"}}}]}},{"kind":"Argument","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"1000"}},{"kind":"Argument","name":{"kind":"Name","value":"orderBy"},"value":{"kind":"EnumValue","value":"season"}},{"kind":"Argument","name":{"kind":"Name","value":"orderDirection"},"value":{"kind":"EnumValue","value":"asc"}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"season"}},{"kind":"Field","name":{"kind":"Name","value":"depositedAmount"}},{"kind":"Field","name":{"kind":"Name","value":"depositedBDV"}},{"kind":"Field","name":{"kind":"Name","value":"deltaDepositedBDV"}},{"kind":"Field","name":{"kind":"Name","value":"deltaDepositedAmount"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}}]}}]}}]} as unknown as DocumentNode; export const BeanstalkSeasonalSiloActiveFarmersDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"BeanstalkSeasonalSiloActiveFarmers"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"from"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"to"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"silo"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"siloHourlySnapshots"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"where"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"season_gte"},"value":{"kind":"Variable","name":{"kind":"Name","value":"from"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"season_lte"},"value":{"kind":"Variable","name":{"kind":"Name","value":"to"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"silo"},"value":{"kind":"Variable","name":{"kind":"Name","value":"silo"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"stalk_gt"},"value":{"kind":"IntValue","value":"0"}}]}},{"kind":"Argument","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"1000"}},{"kind":"Argument","name":{"kind":"Name","value":"orderBy"},"value":{"kind":"EnumValue","value":"season"}},{"kind":"Argument","name":{"kind":"Name","value":"orderDirection"},"value":{"kind":"EnumValue","value":"desc"}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"season"}},{"kind":"Field","name":{"kind":"Name","value":"activeFarmers"}}]}}]}}]} as unknown as DocumentNode; diff --git a/src/pages/Referral.tsx b/src/pages/Referral.tsx index b00f8b4b3..da62c6357 100644 --- a/src/pages/Referral.tsx +++ b/src/pages/Referral.tsx @@ -65,109 +65,6 @@ export default function Referral() { {/* Leaderboard */} - - {/* How It Works */} - -
      How It Works
      -
      -
      -
      - 1 -
      -
      -
      Qualify as a Referrer
      -
      - Sow at least 1,000 Pinto in the Field to unlock your referral link. -
      -
      -
      - -
      -
      - 2 -
      -
      -
      Share Your Link
      -
      - Copy your unique referral link and share it with friends, on social media, or anywhere else. -
      -
      -
      - -
      -
      - 3 -
      -
      -
      Earn Rewards
      -
      - When someone uses your link and Sows Pinto, you earn 10% of the Pods they receive as a referral - bonus. -
      -
      -
      - -
      -
      - 4 -
      -
      -
      Get Credited
      -
      - Referral rewards are automatically credited to your wallet address when your referral completes - their Sow transaction. -
      -
      -
      -
      -
      - - {/* Requirements Card */} - -
      Requirements & FAQs
      -
      -
      -
      Why do I need to Sow 1,000 Pinto first?
      -
      - This requirement ensures that referrers are genuine participants in the Pinto ecosystem and helps - prevent spam or gaming of the referral system. -
      -
      - -
      -
      - Is there a limit to how many people I can refer? -
      -
      - No! You can refer as many people as you'd like. There is no cap on referral earnings. -
      -
      - -
      -
      When do I receive my referral rewards?
      -
      - Referral rewards are credited immediately when your referral completes their Sow transaction. The Pods - are sent directly to your wallet address. -
      -
      - -
      -
      Can I refer myself?
      -
      - No, self-referrals are not allowed. Referral links are tracked by wallet address, so using your own - link won't generate rewards. -
      -
      - -
      -
      What if I lose my referral link?
      -
      - Don't worry! You can always come back to this page while connected with your wallet to retrieve your - referral link. It's permanently associated with your wallet address. -
      -
      -
      -
      diff --git a/src/queries/beanstalk/referral/FarmerReferral.graphql b/src/queries/beanstalk/referral/FarmerReferral.graphql new file mode 100644 index 000000000..66eea14f8 --- /dev/null +++ b/src/queries/beanstalk/referral/FarmerReferral.graphql @@ -0,0 +1,7 @@ +query FarmerReferral($id: ID!) { + farmer(id: $id) { + id + totalReferralRewardPodsReceived + refereeCount + } +} \ No newline at end of file diff --git a/src/queries/beanstalk/referral/ReferralLeaderboard.graphql b/src/queries/beanstalk/referral/ReferralLeaderboard.graphql index 9468609d5..bb13969a0 100644 --- a/src/queries/beanstalk/referral/ReferralLeaderboard.graphql +++ b/src/queries/beanstalk/referral/ReferralLeaderboard.graphql @@ -1,13 +1,14 @@ -query ReferralLeaderboard($first: Int!, $skip: Int!) { - referrerProfiles( +query ReferralLeaderboard($first: Int!, $skip: Int!, $block: Block_height) { + farmers( first: $first skip: $skip - orderBy: totalPodsEarned + orderBy: totalReferralRewardPodsReceived orderDirection: desc + where: { refereeCount_gte: 0 } + block: $block ) { id - totalPodsEarned - totalPintoSownFromReferrals - totalSuccessfulReferrals + refereeCount + totalReferralRewardPodsReceived } } diff --git a/src/queries/beanstalk/referral/UserReferralHistory.graphql b/src/queries/beanstalk/referral/UserReferralHistory.graphql deleted file mode 100644 index 82cc652c5..000000000 --- a/src/queries/beanstalk/referral/UserReferralHistory.graphql +++ /dev/null @@ -1,19 +0,0 @@ -query UserReferralHistory($referrer: Bytes!, $first: Int!) { - referralSows( - where: { referrer: $referrer } - first: $first - orderBy: blockNumber - orderDirection: desc - ) { - id - referrer - referrerIndex - referrerPods - referee - refereeIndex - refereePods - blockNumber - transactionHash - createdAt - } -} diff --git a/src/queries/beanstalk/referral/UserReferralProfile.graphql b/src/queries/beanstalk/referral/UserReferralProfile.graphql deleted file mode 100644 index 494da0bb3..000000000 --- a/src/queries/beanstalk/referral/UserReferralProfile.graphql +++ /dev/null @@ -1,15 +0,0 @@ -query UserReferralProfile($account: Bytes!) { - referrerProfile(id: $account) { - id - totalPodsEarned - totalSuccessfulReferrals - totalPodsCreatedFromReferrals - totalPintoSownFromReferrals - firstReferralTimestamp - lastReferralTimestamp - } - globalReferralStats(id: "global") { - totalReferrers - totalReferralSows - } -} diff --git a/src/state/referral/index.ts b/src/state/referral/index.ts index 770cbefa1..ea631632f 100644 --- a/src/state/referral/index.ts +++ b/src/state/referral/index.ts @@ -1,11 +1,8 @@ -export { useUserReferralProfile } from "./useUserReferralProfile"; -export type { UserReferralProfile, UseUserReferralProfileReturn } from "./useUserReferralProfile"; - export { useReferralLeaderboard } from "./useReferralLeaderboard"; export type { LeaderboardEntry, UseReferralLeaderboardReturn } from "./useReferralLeaderboard"; -export { useReferralHistory } from "./useReferralHistory"; -export type { ReferralHistoryEntry, UseReferralHistoryReturn } from "./useReferralHistory"; +export { useFarmerReferralData } from "./useFarmerReferralData"; +export type { FarmerReferralStats, UseFarmerReferralDataReturn } from "./useFarmerReferralData"; export { useReferralData } from "./useReferralData"; export type { UseReferralDataReturn } from "./useReferralData"; diff --git a/src/state/referral/useFarmerReferralData.ts b/src/state/referral/useFarmerReferralData.ts new file mode 100644 index 000000000..40e206421 --- /dev/null +++ b/src/state/referral/useFarmerReferralData.ts @@ -0,0 +1,64 @@ +import { TokenValue } from "@/classes/TokenValue"; +import { PODS } from "@/constants/internalTokens"; +import { subgraphs } from "@/constants/subgraph"; +import type { FarmerReferralQuery, FarmerReferralQueryVariables } from "@/generated/gql/pintostalk/graphql"; +import { FarmerReferralDocument } from "@/generated/gql/pintostalk/graphql"; +import { useQuery } from "@tanstack/react-query"; +import request from "graphql-request"; +import { useAccount, useChainId } from "wagmi"; + +export interface FarmerReferralStats { + /** Total referral reward pods earned */ + totalPodsEarned: TokenValue; + /** Number of successful referrals */ + refereeCount: number; + /** Farmer's wallet address */ + address: string; +} + +export interface UseFarmerReferralDataReturn { + data: FarmerReferralStats | null; + isLoading: boolean; + error: Error | null; + refetch: () => void; +} + +/** + * Hook for fetching individual farmer's referral data using codegen generated query + */ +export function useFarmerReferralData(): UseFarmerReferralDataReturn { + const { address } = useAccount(); + const chainId = useChainId(); + + const query = useQuery({ + queryKey: ["farmerReferral", address, chainId], + queryFn: async (): Promise => { + if (!address) throw new Error("No wallet address"); + + const variables: FarmerReferralQueryVariables = { + id: address.toLowerCase(), + }; + + return request(subgraphs[chainId].beanstalk, FarmerReferralDocument, variables); + }, + select: (data: FarmerReferralQuery): FarmerReferralStats | null => { + if (!data.farmer) return null; + + return { + totalPodsEarned: TokenValue.fromBlockchain(data.farmer.totalReferralRewardPodsReceived, PODS.decimals), + refereeCount: data.farmer.refereeCount, + address: data.farmer.id, + }; + }, + enabled: !!address && !!chainId, + staleTime: 5 * 60 * 1000, // 5 minutes + gcTime: 10 * 60 * 1000, // 10 minutes + }); + + return { + data: query.data || null, + isLoading: query.isLoading, + error: query.error, + refetch: query.refetch, + }; +} diff --git a/src/state/referral/useReferralHistory.ts b/src/state/referral/useReferralHistory.ts deleted file mode 100644 index d782b2548..000000000 --- a/src/state/referral/useReferralHistory.ts +++ /dev/null @@ -1,183 +0,0 @@ -import { TokenValue } from "@/classes/TokenValue"; -import { PODS } from "@/constants/internalTokens"; -import { subgraphs } from "@/constants/subgraph"; -import { calculatePintoSown, calculateTotalPodsCreated } from "@/utils/referral"; -// TODO: Uncomment after subgraph is deployed and codegen is run -// import { UserReferralHistoryDocument } from "@/generated/gql/pintostalk/graphql"; -import { useQuery } from "@tanstack/react-query"; -import request, { gql } from "graphql-request"; -import { useAccount, useChainId } from "wagmi"; -import useTokenData from "../useTokenData"; - -// TODO: Remove after codegen - temporary inline query -const UserReferralHistoryDocument = gql` - query UserReferralHistory($referrer: Bytes!, $first: Int!) { - referralSows( - where: { referrer: $referrer } - first: $first - orderBy: blockNumber - orderDirection: desc - ) { - id - referrer - referrerIndex - referrerPods - referee - refereeIndex - refereePods - blockNumber - transactionHash - createdAt - } - } -`; - -// Query to get season data from field snapshots -const SeasonFromBlockDocument = gql` - query SeasonFromBlock($blockNumber: BigInt!) { - fieldHourlySnapshots( - first: 1 - where: { blockNumber_lte: $blockNumber } - orderBy: blockNumber - orderDirection: desc - ) { - season - temperature - } - } -`; - -interface UserReferralHistoryResponse { - referralSows: Array<{ - id: string; - referrer: string; - referrerIndex: string; - referrerPods: string; - referee: string; - refereeIndex: string; - refereePods: string; - blockNumber: string; - transactionHash: string; - createdAt: string; - }>; -} - -interface SeasonFromBlockResponse { - fieldHourlySnapshots: Array<{ - season: number; - temperature: number; - }>; -} - -export interface ReferralHistoryEntry { - id: string; - referrer: string; - referrerIndex: string; - referrerPods: TokenValue; - referee: string; - refereeIndex: string; - refereePods: TokenValue; - totalPodsCreated: TokenValue; - pintoSown: TokenValue; - season: number | null; - temperature: number | null; - blockNumber: string; - transactionHash: string; - timestamp: Date; -} - -export interface UseReferralHistoryReturn { - data: ReferralHistoryEntry[]; - isLoading: boolean; - queryKey: string[]; -} - -export function useReferralHistory(limit = 100): UseReferralHistoryReturn { - const chainId = useChainId(); - const { address } = useAccount(); - const tokenData = useTokenData(); - - const queryKey = ["referralHistory", chainId.toString(), address ?? "", limit.toString()]; - - const query = useQuery({ - queryKey, - queryFn: async () => { - // First, fetch referral sows - const sowsData = await request( - subgraphs[chainId].beanstalk, - UserReferralHistoryDocument, - { referrer: address?.toLowerCase() as `0x${string}`, first: limit }, - ); - - // For each sow, try to get season/temperature data - const entriesWithSeasonData = await Promise.all( - sowsData.referralSows.map(async (sow) => { - let season: number | null = null; - let temperature: number | null = null; - - try { - // Try to get season data from field snapshots - const seasonData = await request( - subgraphs[chainId].beanstalk, - SeasonFromBlockDocument, - { blockNumber: sow.blockNumber }, - ); - - if (seasonData.fieldHourlySnapshots.length > 0) { - season = seasonData.fieldHourlySnapshots[0].season; - temperature = seasonData.fieldHourlySnapshots[0].temperature; - } - } catch (e) { - // If season lookup fails, continue without it - console.warn("Failed to fetch season data for block:", sow.blockNumber); - } - - return { ...sow, season, temperature }; - }), - ); - - return entriesWithSeasonData; - }, - enabled: !!address, - select: (data) => { - return data.map((sow) => { - const referrerPods = TokenValue.fromBlockchain(sow.referrerPods, PODS.decimals); - const refereePods = TokenValue.fromBlockchain(sow.refereePods, PODS.decimals); - - // Client-side calculation: totalPodsCreated = referrerPods + refereePods - const totalPodsCreatedStr = calculateTotalPodsCreated(sow.referrerPods, sow.refereePods); - const totalPodsCreated = TokenValue.fromBlockchain(totalPodsCreatedStr, PODS.decimals); - - // Client-side calculation: pintoSown = refereePods / (1 + temperature/100) - let pintoSown = TokenValue.ZERO; - if (sow.temperature !== null) { - const pintoSownStr = calculatePintoSown(sow.refereePods, sow.temperature); - pintoSown = TokenValue.fromBlockchain(pintoSownStr, tokenData.mainToken.decimals); - } - - return { - id: sow.id, - referrer: sow.referrer, - referrerIndex: sow.referrerIndex, - referrerPods, - referee: sow.referee, - refereeIndex: sow.refereeIndex, - refereePods, - totalPodsCreated, - pintoSown, - season: sow.season, - temperature: sow.temperature, - blockNumber: sow.blockNumber, - transactionHash: sow.transactionHash, - timestamp: new Date(Number(sow.createdAt) * 1000), - }; - }); - }, - }); - - return { - data: query.data || [], - isLoading: query.isLoading, - queryKey, - }; -} diff --git a/src/state/referral/useReferralLeaderboard.ts b/src/state/referral/useReferralLeaderboard.ts index b1f25a419..8a4320cae 100644 --- a/src/state/referral/useReferralLeaderboard.ts +++ b/src/state/referral/useReferralLeaderboard.ts @@ -1,84 +1,153 @@ import { TokenValue } from "@/classes/TokenValue"; import { PODS } from "@/constants/internalTokens"; import { subgraphs } from "@/constants/subgraph"; -// TODO: Uncomment after subgraph is deployed and codegen is run -// import { ReferralLeaderboardDocument } from "@/generated/gql/pintostalk/graphql"; +import type { ReferralLeaderboardQuery, ReferralLeaderboardQueryVariables } from "@/generated/gql/pintostalk/graphql"; +import { ReferralLeaderboardDocument } from "@/generated/gql/pintostalk/graphql"; +import { useLatestBlock } from "@/hooks/useLatestBlock"; +import { PaginationSettings, paginateSubgraph } from "@/utils/paginateSubgraph"; import { useQuery } from "@tanstack/react-query"; -import request, { gql } from "graphql-request"; -import { useChainId } from "wagmi"; -import useTokenData from "../useTokenData"; - -// TODO: Remove after codegen - temporary inline query -const ReferralLeaderboardDocument = gql` - query ReferralLeaderboard($first: Int!, $skip: Int!) { - referrerProfiles( - first: $first - skip: $skip - orderBy: totalPodsEarned - orderDirection: desc - ) { - id - totalPodsEarned - totalPintoSownFromReferrals - totalSuccessfulReferrals +import { useAccount, useChainId } from "wagmi"; + +/** + * Type aliases for codegen generated types + */ +export type FarmersLeaderboardResponse = ReferralLeaderboardQuery; +export type FarmersLeaderboardVariables = ReferralLeaderboardQueryVariables; +export type Farmer = ReferralLeaderboardQuery["farmers"][0]; + +/** + * Pagination settings configuration for farmers leaderboard using the paginateSubgraph utility. + * Implements robust pagination that prevents duplicate or missing entries during data updates. + */ +export const farmersLeaderboardPaginationSettings: PaginationSettings< + Farmer, + FarmersLeaderboardResponse, + "farmers", + FarmersLeaderboardVariables +> = { + /** Primary property name in the GraphQL response containing the array of farmers */ + primaryPropertyName: "farmers", + /** Field used to identify unique farmers */ + idField: "id", + /** + * Function to generate variables for the next page of results + * @param lastFarmer - The last farmer from the current page + * @param prevVars - Variables used for the previous query + * @returns Variables for next page or undefined to terminate pagination + */ + nextVars: (lastFarmer: Farmer, prevVars: FarmersLeaderboardVariables) => { + // If we have fewer than 1000 results, terminate pagination + if (!lastFarmer) { + return undefined; } - } -`; - -interface ReferralLeaderboardResponse { - referrerProfiles: Array<{ - id: string; - totalPodsEarned: string; - totalPintoSownFromReferrals: string; - totalSuccessfulReferrals: number; - }>; -} + // Continue pagination with next skip value + return { + ...prevVars, + skip: prevVars.skip + 1000, + }; + }, +}; +/** + * Processed leaderboard entry for display in the UI + */ export interface LeaderboardEntry { + /** Farmer's wallet address */ address: string; + /** Total pods earned from referrals as a TokenValue */ podsEarned: TokenValue; - totalPintoSown: TokenValue; + /** Number of successful referrals made */ totalSuccessfulReferrals: number; + /** Rank position in the leaderboard (1-based) */ rank: number; } export interface UseReferralLeaderboardReturn { data: LeaderboardEntry[]; isLoading: boolean; - hasNextPage: boolean; + error: Error | null; + refetch: () => void; + userRank: number | null; } -export function useReferralLeaderboard(pageSize = 50, page = 0): UseReferralLeaderboardReturn { +/** + * Hook for fetching referral leaderboard data using codegen generated query + */ +export function useReferralLeaderboard(): UseReferralLeaderboardReturn { const chainId = useChainId(); - const tokenData = useTokenData(); - const skip = page * pageSize; + const { address: userAddress } = useAccount(); + const { data: latestBlock, isLoading: isBlockLoading } = useLatestBlock(); - const queryKey = ["referralLeaderboard", chainId.toString(), page.toString(), pageSize.toString()]; + // Create stable query key that includes block height when available + const blockHeight = latestBlock?.number ? Number(latestBlock.number) : null; + const queryKey = ["referralLeaderboard", chainId.toString(), blockHeight?.toString() || "latest"]; const query = useQuery({ queryKey, - queryFn: async () => - request(subgraphs[chainId].beanstalk, ReferralLeaderboardDocument, { - first: pageSize, - skip, - }), - select: (data) => { - // Client-side rank calculation based on skip + index - const entries: LeaderboardEntry[] = data.referrerProfiles.map((profile, index) => ({ - address: profile.id, - podsEarned: TokenValue.fromBlockchain(profile.totalPodsEarned, PODS.decimals), - totalPintoSown: TokenValue.fromBlockchain(profile.totalPintoSownFromReferrals, tokenData.mainToken.decimals), - totalSuccessfulReferrals: profile.totalSuccessfulReferrals, - rank: skip + index + 1, + queryFn: async () => { + const initialVars: FarmersLeaderboardVariables = { + first: 1000, + skip: 0, + }; + + // Include block parameter for pagination session consistency when available + if (blockHeight) { + initialVars.block = { number: blockHeight }; + } + + // Execute pagination query + return paginateSubgraph( + farmersLeaderboardPaginationSettings, + subgraphs[chainId].beanstalk, + ReferralLeaderboardDocument, + initialVars, + ); + }, + select: (farmers: Farmer[]) => { + // Transform farmers to leaderboard entries with proper ranking + const entries: LeaderboardEntry[] = farmers.map((farmer, index) => ({ + address: farmer.id, + podsEarned: TokenValue.fromBlockchain(farmer.totalReferralRewardPodsReceived, PODS.decimals), + totalSuccessfulReferrals: farmer.refereeCount, + rank: index + 1, // Rank based on sorted order from subgraph })); return entries; }, + enabled: !!chainId && !isBlockLoading, + staleTime: 5 * 60 * 1000, // 5 minutes + gcTime: 10 * 60 * 1000, // 10 minutes }); + // Calculate user's rank in the leaderboard + const userRank = (() => { + // If user is not connected, return null + if (!userAddress) { + return null; + } + + // If data is not loaded yet, return null + if (!query.data) { + return null; + } + + // Find user's address in the leaderboard (case-insensitive comparison) + const userIndex = query.data.findIndex((entry) => entry.address.toLowerCase() === userAddress.toLowerCase()); + + // If user is not found in the leaderboard, return null + if (userIndex === -1) { + return null; + } + + // Return 1-based rank (index + 1) + return userIndex + 1; + })(); + return { data: query.data || [], - isLoading: query.isLoading, - hasNextPage: query.data ? query.data.length === pageSize : false, + isLoading: query.isLoading || isBlockLoading, + error: query.error, + refetch: query.refetch, + userRank, }; } diff --git a/src/state/referral/useUserReferralProfile.ts b/src/state/referral/useUserReferralProfile.ts deleted file mode 100644 index aff6e4e2c..000000000 --- a/src/state/referral/useUserReferralProfile.ts +++ /dev/null @@ -1,152 +0,0 @@ -import { TokenValue } from "@/classes/TokenValue"; -import { PODS } from "@/constants/internalTokens"; -import { subgraphs } from "@/constants/subgraph"; -// TODO: Uncomment after subgraph is deployed and codegen is run -// import { UserReferralProfileDocument } from "@/generated/gql/pintostalk/graphql"; -import { useQuery } from "@tanstack/react-query"; -import request, { gql } from "graphql-request"; -import { useAccount, useChainId } from "wagmi"; -import useTokenData from "../useTokenData"; - -// TODO: Remove after codegen - temporary inline query -const UserReferralProfileDocument = gql` - query UserReferralProfile($account: Bytes!) { - referrerProfile(id: $account) { - id - totalPodsEarned - totalSuccessfulReferrals - totalPodsCreatedFromReferrals - totalPintoSownFromReferrals - firstReferralTimestamp - lastReferralTimestamp - } - globalReferralStats(id: "global") { - totalReferrers - totalReferralSows - } - } -`; - -// Query to calculate rank by counting profiles with more pods -const RankCalculationDocument = gql` - query RankCalculation($totalPodsEarned: BigInt!) { - referrerProfiles( - where: { totalPodsEarned_gt: $totalPodsEarned } - ) { - id - } - } -`; - -interface UserReferralProfileResponse { - referrerProfile: { - id: string; - totalPodsEarned: string; - totalSuccessfulReferrals: number; - totalPodsCreatedFromReferrals: string; - totalPintoSownFromReferrals: string; - firstReferralTimestamp: string; - lastReferralTimestamp: string; - } | null; - globalReferralStats: { - totalReferrers: number; - totalReferralSows: number; - } | null; -} - -interface RankCalculationResponse { - referrerProfiles: Array<{ id: string }>; -} - -export interface UserReferralProfile { - podDestinationAddress: string; - totalPodsEarned: TokenValue; - totalSuccessfulReferrals: number; - rank: number; - totalReferrers: number; - rankDisplay: string; - totalReferralSows: number; - totalPodsCreatedFromReferrals: TokenValue; - totalPintoSownFromReferrals: TokenValue; - firstReferralDate: Date; - lastReferralDate: Date; -} - -export interface UseUserReferralProfileReturn { - data: UserReferralProfile | null; - isLoading: boolean; - isError: boolean; - queryKey: string[]; -} - -export function useUserReferralProfile(): UseUserReferralProfileReturn { - const chainId = useChainId(); - const { address } = useAccount(); - const tokenData = useTokenData(); - - const queryKey = ["userReferralProfile", chainId.toString(), address ?? ""]; - - const query = useQuery({ - queryKey, - queryFn: async () => { - // First, fetch user profile - const profileData = await request( - subgraphs[chainId].beanstalk, - UserReferralProfileDocument, - { account: address?.toLowerCase() as `0x${string}` }, - ); - - if (!profileData.referrerProfile) { - return null; - } - - // Client-side rank calculation: count profiles with more pods + 1 - let rank = 1; - try { - const rankData = await request(subgraphs[chainId].beanstalk, RankCalculationDocument, { - totalPodsEarned: profileData.referrerProfile.totalPodsEarned, - }); - rank = rankData.referrerProfiles.length + 1; - } catch (e) { - console.warn("Failed to calculate rank:", e); - } - - return { - profile: profileData.referrerProfile, - globalStats: profileData.globalReferralStats, - rank, - }; - }, - enabled: !!address, - select: (data) => { - if (!data) return null; - - const { profile, globalStats, rank } = data; - const totalReferrers = globalStats?.totalReferrers || 0; - - return { - podDestinationAddress: profile.id, - totalPodsEarned: TokenValue.fromBlockchain(profile.totalPodsEarned, PODS.decimals), - totalSuccessfulReferrals: profile.totalSuccessfulReferrals, - rank, - totalReferrers, - rankDisplay: `#${rank}/${totalReferrers}`, - totalReferralSows: globalStats?.totalReferralSows || 0, - totalPodsCreatedFromReferrals: TokenValue.fromBlockchain(profile.totalPodsCreatedFromReferrals, PODS.decimals), - totalPintoSownFromReferrals: TokenValue.fromBlockchain( - profile.totalPintoSownFromReferrals, - tokenData.mainToken.decimals, - ), - firstReferralDate: new Date(Number(profile.firstReferralTimestamp) * 1000), - lastReferralDate: new Date(Number(profile.lastReferralTimestamp) * 1000), - }; - }, - }); - - return { - data: query.data ?? null, - isLoading: query.isLoading, - isError: query.isError, - queryKey, - }; -} From 0680afcd2344aca833a96d2146d0cc5b0b649bb2 Mon Sep 17 00:00:00 2001 From: feyyazcigim Date: Mon, 15 Dec 2025 19:00:28 +0300 Subject: [PATCH 20/25] Add eligibility check --- .../referral-leaderboard-pagination/design.md | 219 ------------------ .../requirements.md | 88 ------- .../referral-leaderboard-pagination/tasks.md | 119 ---------- src/components/ReferralLinkGenerator.tsx | 77 ++++-- src/components/SowRequirementCard.tsx | 48 ++++ src/hooks/useFarmerSowEligibility.ts | 48 ++++ 6 files changed, 149 insertions(+), 450 deletions(-) delete mode 100644 .kiro/specs/referral-leaderboard-pagination/design.md delete mode 100644 .kiro/specs/referral-leaderboard-pagination/requirements.md delete mode 100644 .kiro/specs/referral-leaderboard-pagination/tasks.md create mode 100644 src/components/SowRequirementCard.tsx create mode 100644 src/hooks/useFarmerSowEligibility.ts diff --git a/.kiro/specs/referral-leaderboard-pagination/design.md b/.kiro/specs/referral-leaderboard-pagination/design.md deleted file mode 100644 index 2aa1bc823..000000000 --- a/.kiro/specs/referral-leaderboard-pagination/design.md +++ /dev/null @@ -1,219 +0,0 @@ -# Design Document - -## Overview - -This design implements robust pagination for the referral leaderboard by replacing the current simple skip/first pagination with the proven `paginateSubgraph` utility pattern. The implementation will ensure data consistency during pagination sessions using block height snapshots and provide a seamless user experience with familiar pagination controls. - -## Architecture - -The solution consists of three main components: - -1. **GraphQL Query Enhancement**: Update the existing query to support optional block height parameters -2. **Hook Refactoring**: Replace the current `useReferralLeaderboard` hook to use `paginateSubgraph` utility -3. **UI Component Updates**: Enhance the `ReferralLeaderboard` component with improved pagination controls and loading states - -### Data Flow - -``` -User Request → ReferralLeaderboard Component → useReferralLeaderboard Hook → paginateSubgraph Utility → GraphQL Subgraph → Aggregated Results → UI Display -``` - -## Components and Interfaces - -### 1. Enhanced GraphQL Query - -```typescript -const FarmersLeaderboardPageDocument = gql` - query FarmersLeaderboardPage($first: Int!, $skip: Int!, $block: Block_height) { - farmers( - first: $first - skip: $skip - orderBy: totalReferralRewardPodsReceived - orderDirection: desc - where: { refereeCount_gte: 0 } - block: $block - ) { - id - refereeCount - totalReferralRewardPodsReceived - } - } -`; -``` - -### 2. Pagination Settings Configuration - -```typescript -interface FarmersLeaderboardPaginationSettings extends PaginationSettings { - primaryPropertyName: "farmers"; - idField: "id"; - nextVars: (lastFarmer: Farmer, prevVars: FarmersLeaderboardVariables) => FarmersLeaderboardVariables | undefined; -} -``` - -### 3. Updated Hook Interface - -```typescript -export interface UseReferralLeaderboardReturn { - data: LeaderboardEntry[]; - isLoading: boolean; - error: Error | null; - refetch: () => void; -} - -export function useReferralLeaderboard(): UseReferralLeaderboardReturn; -``` - -### 4. Component State Management - -```typescript -interface ReferralLeaderboardState { - currentPage: number; - blockHeight: bigint | null; - isInitialLoad: boolean; - paginationError: Error | null; -} -``` - -## Data Models - -### Farmer Entity -```typescript -interface Farmer { - id: string; // Wallet address - refereeCount: number; - totalReferralRewardPodsReceived: string; // BigInt as string -} -``` - -### Leaderboard Entry -```typescript -interface LeaderboardEntry { - address: string; - podsEarned: TokenValue; - totalSuccessfulReferrals: number; - rank: number; -} -``` - -### Query Variables -```typescript -interface FarmersLeaderboardVariables { - first: number; - skip: number; - block?: { - number: number; - } | null; -} -``` - -## Correctness Properties -*A pr -operty is a characteristic or behavior that should hold true across all valid executions of a system-essentially, a formal statement about what the system should do. Properties serve as the bridge between human-readable specifications and machine-verifiable correctness guarantees.* - -### Property Reflection - -After reviewing all properties identified in the prework, several can be consolidated to eliminate redundancy: - -- Properties 1.1 and 1.2 both test data consistency during pagination and can be combined into a comprehensive consistency property -- Properties 1.4 and 4.1 both test block height usage and can be combined -- Properties 3.4, 6.2, and 6.4 all test loading state management and can be combined -- Properties 5.2 and 5.5 both test pagination control states and can be combined - -### Correctness Properties - -**Property 1: Pagination data consistency** -*For any* leaderboard pagination session with a fixed block height, the union of all paginated results should contain no duplicate entries and maintain proper ordering by totalReferralRewardPodsReceived -**Validates: Requirements 1.1, 1.2** - -**Property 2: Block height consistency across pages** -*For any* pagination session, when a block height is established on the first page request, all subsequent page requests should use the same block height -**Validates: Requirements 1.4, 4.1** - -**Property 3: Pagination termination** -*For any* pagination request, when the subgraph returns fewer results than the requested page size (1000), pagination should terminate and not request additional pages -**Validates: Requirements 1.5, 2.5** - -**Property 4: Query variable construction** -*For any* query variable construction, block height should only be included in the variables when it has a valid non-null value -**Validates: Requirements 4.4** - -**Property 5: Result aggregation completeness** -*For any* successful pagination operation, the final aggregated results should contain all entries from all requested pages without loss or duplication -**Validates: Requirements 3.5** - -**Property 6: Loading state management** -*For any* pagination operation in progress, the system should maintain appropriate loading states while preserving existing data and disabling controls to prevent concurrent requests -**Validates: Requirements 3.4, 6.2, 6.4** - -**Property 7: Pagination control states** -*For any* pagination UI state, Previous/Next buttons should be enabled/disabled based on current page position and data availability, and the current page number should be accurately displayed -**Validates: Requirements 5.2, 5.5** - -## Error Handling - -### Network Error Recovery -- Implement exponential backoff for failed requests -- Provide user-friendly error messages for network issues -- Allow manual retry functionality - -### Block Height Fallback -- When block height cannot be determined, gracefully fall back to real-time queries -- Log warnings for debugging purposes -- Maintain functionality without block height constraints - -### Invalid Data Handling -- Validate farmer data structure before processing -- Handle missing or malformed fields gracefully -- Provide default values where appropriate - -## Testing Strategy - -### Unit Testing -The implementation will include unit tests for: -- Query variable construction logic -- Pagination settings configuration -- Error handling scenarios -- Loading state management -- UI component interactions - -### Property-Based Testing -Property-based tests will be implemented using a suitable testing library (such as fast-check for TypeScript) to verify: -- Data consistency across pagination sessions -- Block height usage patterns -- Result aggregation correctness -- UI state management properties - -**Testing Configuration:** -- Minimum 100 iterations per property test -- Custom generators for farmer data, block heights, and pagination scenarios -- Edge case coverage for empty data, single page, and error conditions - -### Integration Testing -- Test the complete pagination flow from UI interaction to data display -- Verify compatibility with existing subgraph infrastructure -- Test error scenarios with mock GraphQL responses - -## Implementation Considerations - -### Performance Optimization -- Implement result caching to avoid redundant requests -- Use React Query's built-in caching mechanisms -- Optimize re-renders during pagination state changes - -### Backward Compatibility -- Maintain existing hook interface where possible -- Ensure smooth migration from current implementation -- Preserve existing UI behavior and styling - -### Monitoring and Observability -- Add logging for pagination operations -- Track pagination performance metrics -- Monitor error rates and retry patterns - -## Migration Strategy - -1. **Phase 1**: Implement new hook alongside existing implementation -2. **Phase 2**: Update UI component to use new hook with feature flag -3. **Phase 3**: Remove old implementation after validation -4. **Phase 4**: Monitor production performance and optimize as needed \ No newline at end of file diff --git a/.kiro/specs/referral-leaderboard-pagination/requirements.md b/.kiro/specs/referral-leaderboard-pagination/requirements.md deleted file mode 100644 index c8c1170e9..000000000 --- a/.kiro/specs/referral-leaderboard-pagination/requirements.md +++ /dev/null @@ -1,88 +0,0 @@ -# Requirements Document - -## Introduction - -This feature implements robust pagination for the referral leaderboard using the existing `paginateSubgraph` utility pattern. The current implementation uses simple skip/first pagination which can miss or duplicate entries when new data is added during pagination. The new implementation will use the proven pagination pattern already used throughout the application for seasonal data queries. - -## Glossary - -- **Referral_Leaderboard**: A ranked list of farmers ordered by total referral reward pods received -- **PaginateSubgraph_Utility**: The existing utility function that handles robust pagination for GraphQL subgraph queries -- **Block_Height**: A specific blockchain block number used to ensure consistent data snapshots during pagination -- **Farmer**: A user account that can earn referral rewards by referring other users -- **Pods**: The reward tokens earned through referrals -- **RefereeCount**: The number of successful referrals made by a farmer - -## Requirements - -### Requirement 1 - -**User Story:** As a user viewing the referral leaderboard, I want to see consistent data when navigating between pages, so that I don't see duplicate or missing entries due to new referrals being added during my browsing session. - -#### Acceptance Criteria - -1. WHEN a user navigates through leaderboard pages THEN the system SHALL maintain data consistency using block height snapshots -2. WHEN new referral data is added to the subgraph during pagination THEN the system SHALL prevent duplicate or missing entries in the paginated results -3. WHEN a user requests the first page THEN the system SHALL capture the current block height for the entire pagination session -4. WHEN a user requests subsequent pages THEN the system SHALL use the same block height from the first page request -5. WHEN the pagination reaches the end of available data THEN the system SHALL stop requesting additional pages - -### Requirement 2 - -**User Story:** As a developer, I want to use the existing `paginateSubgraph` utility for referral leaderboard pagination, so that the implementation follows established patterns and benefits from proven reliability. - -#### Acceptance Criteria - -1. WHEN implementing referral leaderboard pagination THEN the system SHALL use the existing `paginateSubgraph` utility function -2. WHEN configuring pagination settings THEN the system SHALL specify the primary property name as "farmers" -3. WHEN configuring pagination settings THEN the system SHALL specify the id field as "id" for farmer identification -4. WHEN determining the next page variables THEN the system SHALL implement the nextVars callback to handle farmer-based pagination -5. WHEN the subgraph returns fewer than 1000 results THEN the system SHALL terminate pagination - -### Requirement 3 - -**User Story:** As a user, I want the leaderboard to load efficiently with proper error handling, so that I can reliably view referral rankings even when there are network issues. - -#### Acceptance Criteria - -1. WHEN the pagination utility encounters network errors THEN the system SHALL handle errors gracefully and provide meaningful feedback -2. WHEN the block height cannot be determined THEN the system SHALL fall back to pagination without block height constraints -3. WHEN the GraphQL query fails THEN the system SHALL retry according to the existing query configuration -4. WHEN pagination is in progress THEN the system SHALL show appropriate loading states -5. WHEN pagination completes successfully THEN the system SHALL return the complete aggregated results - -### Requirement 4 - -**User Story:** As a user, I want the leaderboard query to support optional block height specification, so that the system can provide consistent snapshots when needed while remaining flexible for real-time data when block height is not specified. - -#### Acceptance Criteria - -1. WHEN a block height is provided in the query variables THEN the system SHALL use that specific block for data consistency -2. WHEN no block height is provided in the query variables THEN the system SHALL query the latest available data -3. WHEN the GraphQL query includes block height parameter THEN the system SHALL accept null values for real-time queries -4. WHEN constructing query variables THEN the system SHALL conditionally include block height only when available -5. WHEN the block height is invalid or too old THEN the system SHALL handle the error appropriately - -### Requirement 5 - -**User Story:** As a user viewing the referral leaderboard UI, I want intuitive pagination controls that follow the application's design patterns, so that I can easily navigate through all referral data with a familiar interface. - -#### Acceptance Criteria - -1. WHEN the leaderboard component loads THEN the system SHALL display pagination controls consistent with other paginated tables in the application -2. WHEN there are multiple pages of data THEN the system SHALL show Previous/Next buttons with appropriate enabled/disabled states -3. WHEN the user clicks the Next button THEN the system SHALL load the next page of results using the robust pagination system -4. WHEN the user clicks the Previous button THEN the system SHALL load the previous page of results -5. WHEN displaying pagination controls THEN the system SHALL show the current page number and total navigation context - -### Requirement 6 - -**User Story:** As a user, I want the leaderboard to handle loading states and empty data gracefully, so that I have clear feedback about the data loading process and understand when no referral activity exists. - -#### Acceptance Criteria - -1. WHEN the leaderboard is loading the first page THEN the system SHALL display a loading spinner in the center of the table area -2. WHEN the leaderboard is loading subsequent pages THEN the system SHALL show loading indicators while maintaining the current page data -3. WHEN no referral data exists THEN the system SHALL display an appropriate empty state message -4. WHEN pagination is loading THEN the system SHALL disable pagination controls to prevent multiple simultaneous requests -5. WHEN an error occurs during pagination THEN the system SHALL display error feedback and allow retry options \ No newline at end of file diff --git a/.kiro/specs/referral-leaderboard-pagination/tasks.md b/.kiro/specs/referral-leaderboard-pagination/tasks.md deleted file mode 100644 index 700c84bdd..000000000 --- a/.kiro/specs/referral-leaderboard-pagination/tasks.md +++ /dev/null @@ -1,119 +0,0 @@ -# Implementation Plan - -- [x] 1. Update GraphQL query and types - - Create the new FarmersLeaderboardPage query with block height support - - Update TypeScript interfaces to match the actual API response structure - - Remove totalPintoSown field from LeaderboardEntry interface since it's not available in the API - - _Requirements: 4.1, 4.2, 4.3_ - -- [x] 2. Implement pagination utility integration - - [x] 2.1 Create pagination settings configuration for farmers leaderboard - - Define PaginationSettings with primaryPropertyName as "farmers" - - Implement nextVars callback for farmer-based pagination logic - - Configure idField as "id" for farmer identification - - _Requirements: 2.1, 2.2, 2.3, 2.4_ - - - [ ]* 2.2 Write property test for pagination data consistency - - **Property 1: Pagination data consistency** - - **Validates: Requirements 1.1, 1.2** - - - [ ]* 2.3 Write property test for block height consistency - - **Property 2: Block height consistency across pages** - - **Validates: Requirements 1.4, 4.1** - -- [x] 3. Refactor useReferralLeaderboard hook - - [x] 3.1 Replace current pagination logic with paginateSubgraph utility - - Remove existing skip/first pagination implementation - - Integrate paginateSubgraph utility with proper configuration - - Add block height capture and management logic - - _Requirements: 2.1, 1.3, 1.4_ - - - [x] 3.2 Add block height management - - Implement current block height fetching using useLatestBlock hook - - Add block height state management for pagination sessions - - Implement fallback logic when block height is unavailable - - _Requirements: 1.3, 3.2, 4.2_ - - - [ ]* 3.3 Write property test for pagination termination - - **Property 3: Pagination termination** - - **Validates: Requirements 1.5, 2.5** - - - [ ]* 3.4 Write property test for query variable construction - - **Property 4: Query variable construction** - - **Validates: Requirements 4.4** - -- [x] 4. Update ReferralLeaderboard component - - [x] 4.1 Remove totalPintoSown column from the table - - Update table headers to remove "Total Pinto Sown" column - - Remove totalPintoSown display logic from table rows - - Adjust table column widths and responsive design - - _Requirements: Data model alignment_ - - - [x] 4.2 Enhance error handling and loading states - - Add comprehensive error state handling for pagination failures - - Implement loading state management during pagination operations - - Add retry functionality for failed requests - - _Requirements: 3.1, 6.1, 6.2, 6.5_ - - - [ ]* 4.3 Write property test for result aggregation completeness - - **Property 5: Result aggregation completeness** - - **Validates: Requirements 3.5** - - - [ ]* 4.4 Write property test for loading state management - - **Property 6: Loading state management** - - **Validates: Requirements 3.4, 6.2, 6.4** - -- [x] 5. Improve pagination UI controls - - [x] 5.1 Update pagination control logic - - Remove page-based state management in favor of data-driven pagination - - Update button enable/disable logic based on data availability - - Improve pagination control styling and accessibility - - _Requirements: 5.2, 5.3, 5.4, 5.5_ - - - [ ]* 5.2 Write property test for pagination control states - - **Property 7: Pagination control states** - - **Validates: Requirements 5.2, 5.5** - - - [ ]* 5.3 Write unit tests for UI interactions - - Test Next/Previous button click handlers - - Test loading state display during pagination - - Test empty state handling when no data exists - - _Requirements: 5.3, 5.4, 6.3_ - -- [ ] 6. Add comprehensive error handling - - [x] 6.1 Implement network error recovery - - Add exponential backoff for failed pagination requests - - Implement user-friendly error messages for network issues - - Add manual retry functionality for failed operations - - _Requirements: 3.1, 6.5_ - - - [x] 6.2 Add block height error handling - - Handle invalid or too old block height errors gracefully - - Implement fallback to real-time queries when block height fails - - Add appropriate logging for debugging block height issues - - _Requirements: 4.5, 3.2_ - - - [ ]* 6.3 Write unit tests for error scenarios - - Test network error handling and retry logic - - Test invalid block height error handling - - Test empty data state handling - - _Requirements: 3.1, 4.5, 6.3_ - -- [ ] 7. Checkpoint - Ensure all tests pass - - Ensure all tests pass, ask the user if questions arise. - -- [x] 8. Performance optimization and cleanup - - [x] 8.1 Implement result caching optimization - - Add appropriate caching strategies for pagination results - - Optimize React Query configuration for leaderboard data - - Minimize unnecessary re-renders during pagination state changes - - _Requirements: Performance considerations_ - - - [x] 8.2 Remove deprecated code and update documentation - - Remove old pagination implementation code - - Update component documentation and prop interfaces - - Add JSDoc comments for new pagination functionality - - _Requirements: Code maintenance_ - -- [ ] 9. Final checkpoint - Ensure all tests pass - - Ensure all tests pass, ask the user if questions arise. \ No newline at end of file diff --git a/src/components/ReferralLinkGenerator.tsx b/src/components/ReferralLinkGenerator.tsx index 04f94edec..505e11f3a 100644 --- a/src/components/ReferralLinkGenerator.tsx +++ b/src/components/ReferralLinkGenerator.tsx @@ -1,8 +1,10 @@ import telegramLogo from "@/assets/misc/telegram-logo.png"; import xLogo from "@/assets/misc/x-logo.png"; +import { SowRequirementCard } from "@/components/SowRequirementCard"; import { Button } from "@/components/ui/Button"; import { Input } from "@/components/ui/Input"; import { ANALYTICS_EVENTS } from "@/constants/analytics-events"; +import { useFarmerSowEligibility } from "@/hooks/useFarmerSowEligibility"; import { useReferralData } from "@/state/referral"; import { trackSimpleEvent } from "@/utils/analytics"; import { truncateHex } from "@/utils/format"; @@ -18,16 +20,17 @@ interface ReferralLinkGeneratorProps { export function ReferralLinkGenerator({ onChangeAddress }: ReferralLinkGeneratorProps) { const { address } = useAccount(); const { delegateAddress } = useReferralData(); + const { meetsRequirement, totalPods, amountNeeded, progressPercentage } = useFarmerSowEligibility(); - if (!address) { - return
      Connect your wallet to access referral features
      ; - } + const isWalletConnected = !!address; - const referralCode = encodeReferralAddress(address); + const referralCode = address ? encodeReferralAddress(address) : ""; const referralUrl = `${window.location.origin}/field?ref=${referralCode}`; const podDestinationAddress = delegateAddress || address; const handleCopyCode = () => { + if (!isWalletConnected) return; + navigator.clipboard.writeText(referralCode); toast.success("Referral code copied to clipboard!"); @@ -38,6 +41,8 @@ export function ReferralLinkGenerator({ onChangeAddress }: ReferralLinkGenerator }; const handleCopyLink = () => { + if (!isWalletConnected) return; + navigator.clipboard.writeText(referralUrl); toast.success("Referral link copied to clipboard!"); @@ -48,6 +53,8 @@ export function ReferralLinkGenerator({ onChangeAddress }: ReferralLinkGenerator }; const handleTwitterShare = () => { + if (!isWalletConnected) return; + console.log("Twitter/X share clicked"); const tweetText = "🌱 I'm farming on @PintoProtocol and earning passive rewards!\n\nJoin me and I'll earn bonus Pods when you Sow Pinto 🫘\n\nStart farming today:"; @@ -60,6 +67,8 @@ export function ReferralLinkGenerator({ onChangeAddress }: ReferralLinkGenerator }; const handleTelegramShare = () => { + if (!isWalletConnected) return; + console.log("Telegram share clicked"); const shareText = "🌱 I'm farming on Pinto Protocol and earning passive rewards! Join me and I'll earn bonus Pods when you Sow Pinto 🫘 Start farming today"; @@ -82,11 +91,12 @@ export function ReferralLinkGenerator({ onChangeAddress }: ReferralLinkGenerator
      @@ -105,11 +116,12 @@ export function ReferralLinkGenerator({ onChangeAddress }: ReferralLinkGenerator
      - {/* Pod Destination Address and Share via - Row Layout */} -
      - {/* Pod Destination Address */} -
      - -
      - {truncateHex(podDestinationAddress, 6, 4)} - +
      + {" "} + {/* Conditional rendering based on sow requirement */} + {!meetsRequirement || !isWalletConnected ? ( + + ) : ( + /* Pod Destination Address and Share via - Row Layout */ +
      + {/* Pod Destination Address */} +
      + +
      + + {podDestinationAddress ? truncateHex(podDestinationAddress, 6, 4) : "-"} + + +
      +
      -
      - + )} {/* Social Sharing Icons */}
      @@ -150,6 +177,7 @@ export function ReferralLinkGenerator({ onChangeAddress }: ReferralLinkGenerator size="icon" className="w-10 h-10 p-2" title="Share on X (Twitter)" + disabled={!isWalletConnected} > X @@ -159,6 +187,7 @@ export function ReferralLinkGenerator({ onChangeAddress }: ReferralLinkGenerator size="icon" className="w-10 h-10 p-2" title="Share on Telegram" + disabled={!isWalletConnected} > Telegram diff --git a/src/components/SowRequirementCard.tsx b/src/components/SowRequirementCard.tsx new file mode 100644 index 000000000..0a256cc72 --- /dev/null +++ b/src/components/SowRequirementCard.tsx @@ -0,0 +1,48 @@ +import { TokenValue } from "@/classes/TokenValue"; +import { Progress } from "@/components/ui/Progress"; +import { formatter } from "@/utils/format"; + +interface SowRequirementCardProps { + totalPods: TokenValue; + amountNeeded: TokenValue; + progressPercentage: number; + disabled?: boolean; +} + +export function SowRequirementCard({ + totalPods, + amountNeeded, + progressPercentage, + disabled = false, +}: SowRequirementCardProps) { + return ( +
      +
      +
      +
      + {disabled + ? "Connect your wallet to access referral features" + : "You currently do not meet the criteria to refer farmers"} +
      +
      + +
      +
      + Progress + + {disabled ? "- / 1000 Pinto sown" : `${formatter.number(totalPods)} / 1000 Pinto sown`} + +
      + + {!disabled && !amountNeeded.isZero && ( +
      {formatter.number(amountNeeded)} more Pinto needed
      + )} + {disabled &&
      Connect wallet to view progress
      } +
      +
      +
      + ); +} diff --git a/src/hooks/useFarmerSowEligibility.ts b/src/hooks/useFarmerSowEligibility.ts new file mode 100644 index 000000000..325928cb8 --- /dev/null +++ b/src/hooks/useFarmerSowEligibility.ts @@ -0,0 +1,48 @@ +import { TokenValue } from "@/classes/TokenValue"; +import { useFarmerField } from "@/state/useFarmerField"; +import { useMemo } from "react"; + +const MINIMUM_SOW_REQUIREMENT = TokenValue.fromHuman("1000", 6); // 1000 Pinto + +export interface FarmerSowEligibility { + /** Total pods owned by farmer */ + totalPods: TokenValue; + /** Whether farmer meets minimum sow requirement */ + meetsRequirement: boolean; + /** Amount still needed to meet requirement */ + amountNeeded: TokenValue; + /** Progress percentage (0-100) */ + progressPercentage: number; +} + +/** + * Hook to check if farmer meets the minimum sow requirement for referrals + */ +export function useFarmerSowEligibility(): FarmerSowEligibility { + const farmerField = useFarmerField(); + + const result = useMemo(() => { + // Calculate total pods from all plots + const totalPods = farmerField.plots.reduce( + (total, plot) => + total.add(plot.unharvestablePods ?? TokenValue.ZERO).add(plot.harvestablePods ?? TokenValue.ZERO), + TokenValue.ZERO, + ); + + const meetsRequirement = totalPods.gte(MINIMUM_SOW_REQUIREMENT); + const amountNeeded = meetsRequirement ? TokenValue.ZERO : MINIMUM_SOW_REQUIREMENT.sub(totalPods); + + const progressPercentage = totalPods.isZero + ? 0 + : Math.min(100, totalPods.div(MINIMUM_SOW_REQUIREMENT).mul(100).toNumber()); + + return { + totalPods, + meetsRequirement, + amountNeeded, + progressPercentage, + }; + }, [farmerField.plots]); + + return result; +} From 5306dda8a5a3c812bbc25a980c89f6d0c3306b49 Mon Sep 17 00:00:00 2001 From: feyyazcigim Date: Mon, 15 Dec 2025 19:12:11 +0300 Subject: [PATCH 21/25] Clear unnecessary comments --- src/components/ReferralLeaderboard.tsx | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/src/components/ReferralLeaderboard.tsx b/src/components/ReferralLeaderboard.tsx index 5949501e5..f9a7253cd 100644 --- a/src/components/ReferralLeaderboard.tsx +++ b/src/components/ReferralLeaderboard.tsx @@ -11,18 +11,7 @@ import { useCallback, useMemo, useState } from "react"; import { useAccount } from "wagmi"; /** - * ReferralLeaderboard component displays a paginated table of top referrers ranked by Pods earned. - * - * Features: - * - Client-side pagination with configurable rows per page - * - Optimized re-rendering with memoized calculations and callbacks - * - Comprehensive error handling with retry functionality - * - Loading states for both initial load and pagination operations - * - Empty state handling when no referral data exists - * - Responsive design with mobile-friendly controls - * - * The component uses the useReferralLeaderboard hook which implements robust pagination - * to prevent data inconsistencies during browsing sessions. + * Shows top referrers ranked by Pods earned in a paginated table. */ export default function ReferralLeaderboard() { // Local state for client-side pagination From aec3acbe3a6edf65ff3335e1b05621ee9e30388a Mon Sep 17 00:00:00 2001 From: feyyazcigim Date: Fri, 19 Dec 2025 01:57:30 +0300 Subject: [PATCH 22/25] Improve transaction handling --- src/components/DelegateReferralModal.tsx | 117 ++++++++++------------- 1 file changed, 50 insertions(+), 67 deletions(-) diff --git a/src/components/DelegateReferralModal.tsx b/src/components/DelegateReferralModal.tsx index 055bc79f4..97440a200 100644 --- a/src/components/DelegateReferralModal.tsx +++ b/src/components/DelegateReferralModal.tsx @@ -2,16 +2,13 @@ import { Col, Row } from "@/components/Container"; import { Button } from "@/components/ui/Button"; import { Input } from "@/components/ui/Input"; import { Label } from "@/components/ui/Label"; -import { - useSimulateBeanstalk_DelegateReferralRewards, - useWriteBeanstalk_DelegateReferralRewards, -} from "@/generated/contractHooks"; -import { getExplorerLink } from "@/utils/chain"; -import { CopyIcon, Cross2Icon } from "@radix-ui/react-icons"; -import { useEffect, useState } from "react"; +import { beanstalkAbi, beanstalkAddress } from "@/generated/contractHooks"; +import useTransaction from "@/hooks/useTransaction"; +import { Cross2Icon } from "@radix-ui/react-icons"; +import { useState } from "react"; import { toast } from "sonner"; import { isAddress } from "viem"; -import { useChainId, useWaitForTransactionReceipt } from "wagmi"; +import { useChainId } from "wagmi"; interface DelegateReferralModalProps { isOpen: boolean; @@ -26,54 +23,17 @@ export function DelegateReferralModal({ isOpen, onOpenChange }: DelegateReferral // Check if address is valid const isValidAddress = delegateAddress.trim() && isAddress(delegateAddress); - // Simulate the transaction - const { data: simulateData } = useSimulateBeanstalk_DelegateReferralRewards({ - args: isValidAddress ? [delegateAddress as `0x${string}`] : undefined, - query: { - enabled: !!isValidAddress, - }, - }); - - // Write contract - const { writeContract, data: hash, isPending } = useWriteBeanstalk_DelegateReferralRewards(); - - // Wait for transaction receipt - const { isLoading: isConfirming, isSuccess } = useWaitForTransactionReceipt({ - hash, - }); - - // Handle success - useEffect(() => { - if (isSuccess && hash) { + // Transaction handling + const { writeWithEstimateGas, setSubmitting, isConfirming } = useTransaction({ + successCallback: () => { setDelegateAddress(""); onOpenChange(false); - toast.dismiss(); - const explorerLink = getExplorerLink(hash, chainId); - toast.success( -
      - Delegate address updated successfully -
      - -
      { - navigator.clipboard.writeText(explorerLink); - toast.success("Link copied to clipboard"); - }} - > - -
      -
      -
      , - ); - } - }, [isSuccess, hash, chainId, onOpenChange]); + }, + successMessage: "Delegate address updated successfully", + errorMessage: "Failed to update delegate address", + }); - const handleSubmit = () => { + const handleSubmit = async () => { // Validate address if (!delegateAddress.trim()) { setError("Please enter an address"); @@ -87,22 +47,45 @@ export function DelegateReferralModal({ isOpen, onOpenChange }: DelegateReferral setError(""); - // Try with simulate data first, fallback to direct call - if (simulateData?.request) { - writeContract(simulateData.request); - } else { - // Fallback: call directly without simulation - writeContract({ + try { + setSubmitting(true); + toast.loading("Updating delegate address"); + + await writeWithEstimateGas({ + address: beanstalkAddress[chainId as keyof typeof beanstalkAddress], + abi: beanstalkAbi, + functionName: "delegateReferralRewards", args: [delegateAddress as `0x${string}`], }); + } catch (e) { + console.error("Failed to update delegate address:", e); + toast.dismiss(); + toast.error("Failed to update delegate address"); + } finally { + setSubmitting(false); } }; - const handleReset = () => { + const handleReset = async () => { setError(""); - writeContract({ - args: ["0x0000000000000000000000000000000000000000" as `0x${string}`], - }); + + try { + setSubmitting(true); + toast.loading("Resetting delegate address..."); + + await writeWithEstimateGas({ + address: beanstalkAddress[chainId as keyof typeof beanstalkAddress], + abi: beanstalkAbi, + functionName: "delegateReferralRewards", + args: ["0x0000000000000000000000000000000000000000" as `0x${string}`], + }); + } catch (e) { + console.error("Failed to reset delegate address:", e); + toast.dismiss(); + toast.error("Failed to reset delegate address"); + } finally { + setSubmitting(false); + } }; if (!isOpen) return null; @@ -153,7 +136,7 @@ export function DelegateReferralModal({ isOpen, onOpenChange }: DelegateReferral variant="outline" size="xlargest" rounded="full" - disabled={isPending || isConfirming} + disabled={isConfirming} className="w-full flex-1 text-pinto-light bg-pinto-gray-1" > Reset Delegate @@ -163,12 +146,12 @@ export function DelegateReferralModal({ isOpen, onOpenChange }: DelegateReferral onClick={handleSubmit} size="xlargest" rounded="full" - disabled={isPending || isConfirming || !isValidAddress} + disabled={isConfirming || !isValidAddress} className={`w-full flex-1 ${ - isPending || isConfirming ? "bg-pinto-gray-2 text-pinto-light" : "bg-pinto-green-4 text-white" + isConfirming ? "bg-pinto-gray-2 text-pinto-light" : "bg-pinto-green-4 text-white" }`} > - {isPending || isConfirming ? "Confirming..." : "Update Delegate"} + {isConfirming ? "Confirming..." : "Update Delegate"}
      From 99944d9472a320d6ae14230020843aa5a6836014 Mon Sep 17 00:00:00 2001 From: feyyazcigim Date: Fri, 19 Dec 2025 02:26:59 +0300 Subject: [PATCH 23/25] Use standardized UI components and make implementation modular --- src/components/HowToCard.tsx | 74 +++++++------------- src/components/ReferralLeaderboard.tsx | 19 +++-- src/components/ReferralLinkGenerator.tsx | 8 +-- src/components/ui/StepItem.tsx | 19 +++++ src/state/referral/useReferralLeaderboard.ts | 29 ++++---- 5 files changed, 77 insertions(+), 72 deletions(-) create mode 100644 src/components/ui/StepItem.tsx diff --git a/src/components/HowToCard.tsx b/src/components/HowToCard.tsx index 324be4c96..271de0361 100644 --- a/src/components/HowToCard.tsx +++ b/src/components/HowToCard.tsx @@ -1,56 +1,34 @@ +import { StepItem } from "./ui/StepItem"; + +const steps = [ + { + title: "Qualify as a Referrer", + description: "Sow at least 1,000 Pinto in the Field to unlock your referral link.", + }, + { + title: "Share Your Link", + description: "Copy your unique referral link and share it with friends, on social media, or anywhere else.", + }, + { + title: "Earn Rewards", + description: + "When someone uses your link and Sows Pinto, you earn 10% of the Pods they receive as a referral bonus.", + }, + { + title: "Get Credited", + description: + "Referral rewards are automatically credited to your wallet address when your referral completes their Sow transaction.", + }, +]; + export function HowToCard() { return (
      How It Works
      -
      -
      - 1 -
      -
      -
      Qualify as a Referrer
      -
      - Sow at least 1,000 Pinto in the Field to unlock your referral link. -
      -
      -
      - -
      -
      - 2 -
      -
      -
      Share Your Link
      -
      - Copy your unique referral link and share it with friends, on social media, or anywhere else. -
      -
      -
      - -
      -
      - 3 -
      -
      -
      Earn Rewards
      -
      - When someone uses your link and Sows Pinto, you earn 10% of the Pods they receive as a referral bonus. -
      -
      -
      - -
      -
      - 4 -
      -
      -
      Get Credited
      -
      - Referral rewards are automatically credited to your wallet address when your referral completes their Sow - transaction. -
      -
      -
      + {steps.map((step, index) => ( + + ))}
      ); diff --git a/src/components/ReferralLeaderboard.tsx b/src/components/ReferralLeaderboard.tsx index f9a7253cd..9eba3c651 100644 --- a/src/components/ReferralLeaderboard.tsx +++ b/src/components/ReferralLeaderboard.tsx @@ -80,15 +80,22 @@ export default function ReferralLeaderboard() { error.message.includes("fetch") || error.message.includes("network") || error.message.includes("timeout"); const isBlockHeightError = error.message.includes("block"); + let message: string; + if (isNetworkError) { + message = "Network error occurred while loading referral data."; + } else if (isBlockHeightError) { + message = "Block height error occurred. Data may be temporarily unavailable."; + } else { + message = "Failed to load referral data."; + } + + const suggestion = isNetworkError ? "Please check your connection and try again." : "Please try again later."; + return { isNetworkError, isBlockHeightError, - message: isNetworkError - ? "Network error occurred while loading referral data." - : isBlockHeightError - ? "Block height error occurred. Data may be temporarily unavailable." - : "Failed to load referral data.", - suggestion: isNetworkError ? "Please check your connection and try again." : "Please try again later.", + message, + suggestion, }; }, [error]); diff --git a/src/components/ReferralLinkGenerator.tsx b/src/components/ReferralLinkGenerator.tsx index 505e11f3a..bfe04a231 100644 --- a/src/components/ReferralLinkGenerator.tsx +++ b/src/components/ReferralLinkGenerator.tsx @@ -156,13 +156,9 @@ export function ReferralLinkGenerator({ onChangeAddress }: ReferralLinkGenerator {podDestinationAddress ? truncateHex(podDestinationAddress, 6, 4) : "-"} - +
      diff --git a/src/components/ui/StepItem.tsx b/src/components/ui/StepItem.tsx new file mode 100644 index 000000000..2d5aa71f6 --- /dev/null +++ b/src/components/ui/StepItem.tsx @@ -0,0 +1,19 @@ +interface StepItemProps { + stepNumber: number; + title: string; + description: string; +} + +export function StepItem({ stepNumber, title, description }: StepItemProps) { + return ( +
      +
      + {stepNumber} +
      +
      +
      {title}
      +
      {description}
      +
      +
      + ); +} diff --git a/src/state/referral/useReferralLeaderboard.ts b/src/state/referral/useReferralLeaderboard.ts index 8a4320cae..0a59d793f 100644 --- a/src/state/referral/useReferralLeaderboard.ts +++ b/src/state/referral/useReferralLeaderboard.ts @@ -5,6 +5,7 @@ import type { ReferralLeaderboardQuery, ReferralLeaderboardQueryVariables } from import { ReferralLeaderboardDocument } from "@/generated/gql/pintostalk/graphql"; import { useLatestBlock } from "@/hooks/useLatestBlock"; import { PaginationSettings, paginateSubgraph } from "@/utils/paginateSubgraph"; +import { stringEq } from "@/utils/string"; import { useQuery } from "@tanstack/react-query"; import { useAccount, useChainId } from "wagmi"; @@ -62,6 +63,20 @@ export interface LeaderboardEntry { rank: number; } +/** + * Stable select function to transform farmers data to leaderboard entries + * Extracted outside the hook to maintain stable reference and prevent unnecessary re-renders + */ +const selectLeaderboardEntries = (farmers: Farmer[]): LeaderboardEntry[] => { + // Transform farmers to leaderboard entries with proper ranking + return farmers.map((farmer, index) => ({ + address: farmer.id, + podsEarned: TokenValue.fromBlockchain(farmer.totalReferralRewardPodsReceived, PODS.decimals), + totalSuccessfulReferrals: farmer.refereeCount, + rank: index + 1, // Rank based on sorted order from subgraph + })); +}; + export interface UseReferralLeaderboardReturn { data: LeaderboardEntry[]; isLoading: boolean; @@ -103,17 +118,7 @@ export function useReferralLeaderboard(): UseReferralLeaderboardReturn { initialVars, ); }, - select: (farmers: Farmer[]) => { - // Transform farmers to leaderboard entries with proper ranking - const entries: LeaderboardEntry[] = farmers.map((farmer, index) => ({ - address: farmer.id, - podsEarned: TokenValue.fromBlockchain(farmer.totalReferralRewardPodsReceived, PODS.decimals), - totalSuccessfulReferrals: farmer.refereeCount, - rank: index + 1, // Rank based on sorted order from subgraph - })); - - return entries; - }, + select: selectLeaderboardEntries, enabled: !!chainId && !isBlockLoading, staleTime: 5 * 60 * 1000, // 5 minutes gcTime: 10 * 60 * 1000, // 10 minutes @@ -132,7 +137,7 @@ export function useReferralLeaderboard(): UseReferralLeaderboardReturn { } // Find user's address in the leaderboard (case-insensitive comparison) - const userIndex = query.data.findIndex((entry) => entry.address.toLowerCase() === userAddress.toLowerCase()); + const userIndex = query.data.findIndex((entry) => stringEq(entry.address, userAddress)); // If user is not found in the leaderboard, return null if (userIndex === -1) { From e4f9456ba6960f396163e16ccd445116f0a65dda Mon Sep 17 00:00:00 2001 From: feyyazcigim Date: Mon, 29 Dec 2025 04:18:22 +0300 Subject: [PATCH 24/25] Make visual updates to referral page components --- src/components/ReferralLinkGenerator.tsx | 4 ++-- src/components/SowRequirementCard.tsx | 4 ++-- src/components/ui/Button.tsx | 2 +- src/components/ui/StepItem.tsx | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/components/ReferralLinkGenerator.tsx b/src/components/ReferralLinkGenerator.tsx index bfe04a231..055f8747c 100644 --- a/src/components/ReferralLinkGenerator.tsx +++ b/src/components/ReferralLinkGenerator.tsx @@ -136,7 +136,7 @@ export function ReferralLinkGenerator({ onChangeAddress }: ReferralLinkGenerator
      -
      +
      {" "} {/* Conditional rendering based on sow requirement */} {!meetsRequirement || !isWalletConnected ? ( @@ -152,7 +152,7 @@ export function ReferralLinkGenerator({ onChangeAddress }: ReferralLinkGenerator {/* Pod Destination Address */}
      -
      +
      {podDestinationAddress ? truncateHex(podDestinationAddress, 6, 4) : "-"} diff --git a/src/components/SowRequirementCard.tsx b/src/components/SowRequirementCard.tsx index 0a256cc72..8c9388a2d 100644 --- a/src/components/SowRequirementCard.tsx +++ b/src/components/SowRequirementCard.tsx @@ -17,9 +17,9 @@ export function SowRequirementCard({ }: SowRequirementCardProps) { return (
      -
      +
      -
      +
      {disabled ? "Connect your wallet to access referral features" : "You currently do not meet the criteria to refer farmers"} diff --git a/src/components/ui/Button.tsx b/src/components/ui/Button.tsx index 5de6fd159..494186d32 100644 --- a/src/components/ui/Button.tsx +++ b/src/components/ui/Button.tsx @@ -39,7 +39,7 @@ const buttonVariants = cva( "outline-white": "border border-pinto-gray-2 bg-white hover:bg-pinto-gray-2/50 hover:text-accent-foreground", secondary: "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80", ghost: "hover:bg-pinto-gray-2/50 disabled:text-pinto-gray-4 disabled:bg-transparent", - link: "text-primary underline-offset-4 hover:underline", + link: "!text-sm !font-normal text-pinto-gray-4 underline-offset-4 hover:text-pinto-green-4 hover:underline", "silo-action": "hover:bg-pinto-green-1 h-[2.5rem] rounded-[1rem] font-[400] text-[1.25rem] text-pinto-gray-5 flex flex-row justify-start gap-[0.625rem] disabled:bg-transparent disabled:text-pinto-gray-5 disabled:opacity-30", hoverTextPrimary: "text-sm font-light text-pinto-green-4 hover:text-pinto-green-5 hover:underline", diff --git a/src/components/ui/StepItem.tsx b/src/components/ui/StepItem.tsx index 2d5aa71f6..dbece71e6 100644 --- a/src/components/ui/StepItem.tsx +++ b/src/components/ui/StepItem.tsx @@ -11,7 +11,7 @@ export function StepItem({ stepNumber, title, description }: StepItemProps) { {stepNumber}
      -
      {title}
      +
      {title}
      {description}
      From 2ccbe4b4adf3f735acc2cdd6e7d7ea33a7f2df46 Mon Sep 17 00:00:00 2001 From: feyyazcigim Date: Wed, 7 Jan 2026 06:09:09 +0300 Subject: [PATCH 25/25] fix visual bugs for responsive view --- src/components/ReferralLinkGenerator.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/ReferralLinkGenerator.tsx b/src/components/ReferralLinkGenerator.tsx index 055f8747c..ff7a7ce2c 100644 --- a/src/components/ReferralLinkGenerator.tsx +++ b/src/components/ReferralLinkGenerator.tsx @@ -136,7 +136,7 @@ export function ReferralLinkGenerator({ onChangeAddress }: ReferralLinkGenerator
      -
      +
      {" "} {/* Conditional rendering based on sow requirement */} {!meetsRequirement || !isWalletConnected ? ( @@ -152,7 +152,7 @@ export function ReferralLinkGenerator({ onChangeAddress }: ReferralLinkGenerator {/* Pod Destination Address */}
      -
      +
      {podDestinationAddress ? truncateHex(podDestinationAddress, 6, 4) : "-"}