From 07da043e1049df5c07642b65066910cdab0576dd Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 11 Jun 2026 19:27:28 +0000 Subject: [PATCH 01/13] Initial plan From a9837bf4db7d186d5a7bea21f1c3ee20356e90b2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 11 Jun 2026 19:56:31 +0000 Subject: [PATCH 02/13] Add governance homepage components --- examples/storybook/.storybook/main.ts | 8 +- examples/storybook/package.json | 3 +- .../storybook/src/shims/reactNativeSvg.tsx | 32 + .../GovernanceWidget.stories.tsx | 257 ++++++++ packages/governance-widget/package.json | 39 ++ .../src/governanceComponents.tsx | 606 ++++++++++++++++++ packages/governance-widget/src/index.ts | 21 + .../governance-widget/tsconfig.build.json | 11 + packages/governance-widget/tsconfig.json | 12 + packages/governance-widget/tsup.config.ts | 13 + pnpm-lock.yaml | 122 ++++ .../widgets/governance-widget/states.spec.ts | 120 ++++ .../test-results/gw-01-impact-light.png | Bin 0 -> 48382 bytes .../gw-02-impact-dark-mobile-disabled.png | Bin 0 -> 55519 bytes .../gw-03-balance-variants-light.png | Bin 0 -> 21207 bytes .../gw-04-balance-dark-compact.png | Bin 0 -> 14664 bytes .../gw-05-alignment-default-light.png | Bin 0 -> 35297 bytes .../gw-06-alignment-dark-long-options.png | Bin 0 -> 53277 bytes .../gw-07-optimistic-high-quorum-light.png | Bin 0 -> 34907 bytes ...gw-08-optimistic-dark-low-quorum-mixed.png | Bin 0 -> 44225 bytes .../gw-09-funding-distribution-light.png | Bin 0 -> 40347 bytes ...funding-distribution-empty-dark-mobile.png | Bin 0 -> 32729 bytes .../gw-11-interaction-alignment.png | Bin 0 -> 35820 bytes 23 files changed, 1241 insertions(+), 3 deletions(-) create mode 100644 examples/storybook/src/shims/reactNativeSvg.tsx create mode 100644 examples/storybook/src/stories/governance-widget/GovernanceWidget.stories.tsx create mode 100644 packages/governance-widget/package.json create mode 100644 packages/governance-widget/src/governanceComponents.tsx create mode 100644 packages/governance-widget/src/index.ts create mode 100644 packages/governance-widget/tsconfig.build.json create mode 100644 packages/governance-widget/tsconfig.json create mode 100644 packages/governance-widget/tsup.config.ts create mode 100644 tests/widgets/governance-widget/states.spec.ts create mode 100644 tests/widgets/governance-widget/test-results/gw-01-impact-light.png create mode 100644 tests/widgets/governance-widget/test-results/gw-02-impact-dark-mobile-disabled.png create mode 100644 tests/widgets/governance-widget/test-results/gw-03-balance-variants-light.png create mode 100644 tests/widgets/governance-widget/test-results/gw-04-balance-dark-compact.png create mode 100644 tests/widgets/governance-widget/test-results/gw-05-alignment-default-light.png create mode 100644 tests/widgets/governance-widget/test-results/gw-06-alignment-dark-long-options.png create mode 100644 tests/widgets/governance-widget/test-results/gw-07-optimistic-high-quorum-light.png create mode 100644 tests/widgets/governance-widget/test-results/gw-08-optimistic-dark-low-quorum-mixed.png create mode 100644 tests/widgets/governance-widget/test-results/gw-09-funding-distribution-light.png create mode 100644 tests/widgets/governance-widget/test-results/gw-10-funding-distribution-empty-dark-mobile.png create mode 100644 tests/widgets/governance-widget/test-results/gw-11-interaction-alignment.png diff --git a/examples/storybook/.storybook/main.ts b/examples/storybook/.storybook/main.ts index 4a35a68..ca94d9a 100644 --- a/examples/storybook/.storybook/main.ts +++ b/examples/storybook/.storybook/main.ts @@ -2,11 +2,14 @@ * Storybook main configuration. * * - Framework: @storybook/react-vite - * - Addons: essentials (controls, docs, actions, viewport) + interactions (play functions) + * - Addons: essentials (controls, docs, actions) + interactions (play functions) * - viteFinal: mirrors the react-native-web + Tamagui settings from examples/react-web */ +import { fileURLToPath } from 'node:url' import type { StorybookConfig } from '@storybook/react-vite' +const reactNativeSvgShim = fileURLToPath(new URL('../src/shims/reactNativeSvg.tsx', import.meta.url)) + const config: StorybookConfig = { stories: ['../src/**/*.stories.@(ts|tsx)'], addons: ['@storybook/addon-essentials', '@storybook/addon-interactions'], @@ -18,7 +21,7 @@ const config: StorybookConfig = { autodocs: 'tag', }, viteFinal: async (config) => { - // Mirror the Vite settings from examples/react-web so Tamagui + react-native-web resolve + // Mirror the Vite settings from examples/react-web so Tamagui + react-native-web resolve. config.define = { ...config.define, global: 'globalThis', @@ -30,6 +33,7 @@ const config: StorybookConfig = { alias: { ...(config.resolve?.alias as Record | undefined), 'react-native': 'react-native-web', + 'react-native-svg': reactNativeSvgShim, }, } config.optimizeDeps = { diff --git a/examples/storybook/package.json b/examples/storybook/package.json index 25373c9..289605b 100644 --- a/examples/storybook/package.json +++ b/examples/storybook/package.json @@ -16,7 +16,8 @@ "react": "^18.3.0", "react-dom": "^18.3.0", "react-native-web": "^0.19.13", - "viem": "^2.0.0" + "viem": "^2.0.0", + "@goodwidget/governance-widget": "workspace:*" }, "devDependencies": { "@storybook/addon-essentials": "^8.6.17", diff --git a/examples/storybook/src/shims/reactNativeSvg.tsx b/examples/storybook/src/shims/reactNativeSvg.tsx new file mode 100644 index 0000000..09c0d37 --- /dev/null +++ b/examples/storybook/src/shims/reactNativeSvg.tsx @@ -0,0 +1,32 @@ +import React from 'react' + +type SvgElementProps = React.SVGProps & { + accessibilityRole?: string +} + +type SvgGroupProps = React.SVGProps & { + rotation?: string | number + origin?: string +} + +type SvgCircleProps = React.SVGProps & { + onPress?: () => void +} + +/** Storybook web shim for the react-native-svg primitives used by the donut chart. */ +export default function Svg({ accessibilityRole: _accessibilityRole, ...props }: SvgElementProps) { + return +} + +/** Mirrors react-native-svg's G transform props with standard SVG attributes. */ +export function G({ rotation, origin, transform, ...props }: SvgGroupProps) { + const rotationTransform = rotation ? `rotate(${rotation} ${origin ?? ''})`.trim() : undefined + const combinedTransform = [transform, rotationTransform].filter(Boolean).join(' ') + + return +} + +/** Maps react-native-svg onPress to the browser SVG onClick event for stories. */ +export function Circle({ onPress, ...props }: SvgCircleProps) { + return +} diff --git a/examples/storybook/src/stories/governance-widget/GovernanceWidget.stories.tsx b/examples/storybook/src/stories/governance-widget/GovernanceWidget.stories.tsx new file mode 100644 index 0000000..5710b45 --- /dev/null +++ b/examples/storybook/src/stories/governance-widget/GovernanceWidget.stories.tsx @@ -0,0 +1,257 @@ +import React, { useState } from 'react' +import type { Meta, StoryObj } from '@storybook/react' +import { Text, XStack, YStack } from '@goodwidget/ui' +import { + AlignmentVotingProposalCard, + BalanceCard, + FundingDistributionChart, + ImpactCard, + OptimisticVotingProposalCard, +} from '@goodwidget/governance-widget' +import type { + FundingProjectAllocation, + RankedVotingOption, + VoteSegment, + VoterPreview, +} from '@goodwidget/governance-widget' + +const meta: Meta = { + title: 'Widgets/GovernanceWidget', + tags: ['autodocs'], + parameters: { + layout: 'centered', + goodWidgetProvider: { useShell: false, defaultTheme: 'light' }, + }, +} + +export default meta +type Story = StoryObj + +const alignmentOptions: RankedVotingOption[] = [ + { id: 'food-chain', label: 'Local Food Chain', percentage: 42 }, + { id: 'web3-literacy', label: 'Web3 Literacy', percentage: 31 }, + { id: 'civic-onboarding', label: 'Civic Onboarding', percentage: 27 }, + { id: 'regenerative-markets', label: 'Regenerative Markets', percentage: 18 }, +] + +const voteSegments: VoteSegment[] = [ + { id: 'for', label: 'For', percentage: 65, tone: 'for' }, + { id: 'against', label: 'Against', percentage: 10, tone: 'against' }, + { id: 'abstain', label: 'Abstain', percentage: 3, tone: 'abstain' }, +] + +const lowQuorumSegments: VoteSegment[] = [ + { id: 'for', label: 'For', percentage: 24, tone: 'for' }, + { id: 'against', label: 'Against', percentage: 18, tone: 'against' }, + { id: 'abstain', label: 'Abstain', percentage: 8, tone: 'abstain' }, +] + +const voters: VoterPreview[] = [ + { id: 'maya', label: 'Maya' }, + { id: 'kenji', label: 'Kenji' }, + { id: 'sol', label: 'Sol' }, + { id: 'ama', label: 'Ama' }, +] + +const fundingProjects: FundingProjectAllocation[] = [ + { id: 'food', name: 'Local Food Chain', amount: { value: 12400, token: 'G$', isStreaming: true }, percentage: 42 }, + { id: 'literacy', name: 'Web3 Literacy for Community Builders', amount: { value: 9100, token: 'G$' }, percentage: 31 }, + { id: 'civic', name: 'Civic Onboarding', amount: { value: 7900, token: 'G$' }, percentage: 27 }, +] + +function GovernanceStoryFrame({ children, width = 520 }: { children: React.ReactNode; width?: number }) { + const [lastAction, setLastAction] = useState('No interaction yet') + + // Mocked handlers make interaction affordances visible without wiring runtime data. + const enhancedChildren = React.Children.map(children, (child) => { + if (!React.isValidElement(child)) { + return child + } + + return React.cloneElement(child, { + onPress: (id: string) => setLastAction(`Opened ${id}`), + onCtaPress: () => setLastAction('CTA pressed'), + onProjectPress: (id: string) => setLastAction(`Opened project ${id}`), + } as Record) + }) + + return ( + + {enhancedChildren} + + {lastAction} + + + ) +} + +export const ImpactLight: Story = { + render: () => ( + + + + ), +} + +export const ImpactDarkLongDisabledMobile: Story = { + parameters: { goodWidgetProvider: { useShell: false, defaultTheme: 'dark' }, viewport: { defaultViewport: 'mobile1' } }, + render: () => ( + + + + ), +} + +export const BalanceVariantsLight: Story = { + render: () => ( + + + + + ), +} + +export const BalanceDarkCompact: Story = { + parameters: { goodWidgetProvider: { useShell: false, defaultTheme: 'dark' } }, + render: () => ( + + + + ), +} + +export const AlignmentDefaultLight: Story = { + render: () => ( + + + + ), +} + +export const AlignmentDarkLongOptions: Story = { + parameters: { goodWidgetProvider: { useShell: false, defaultTheme: 'dark' } }, + render: () => ( + + + + ), +} + +export const OptimisticHighQuorumLight: Story = { + render: () => ( + + + + ), +} + +export const OptimisticDarkLowQuorumMixed: Story = { + parameters: { goodWidgetProvider: { useShell: false, defaultTheme: 'dark' } }, + render: () => ( + + + + ), +} + +export const FundingDistributionLight: Story = { + render: () => ( + + + + ), +} + +export const FundingDistributionDarkEmptyMobile: Story = { + parameters: { goodWidgetProvider: { useShell: false, defaultTheme: 'dark' }, viewport: { defaultViewport: 'mobile1' } }, + render: () => ( + + + + ), +} diff --git a/packages/governance-widget/package.json b/packages/governance-widget/package.json new file mode 100644 index 0000000..007f847 --- /dev/null +++ b/packages/governance-widget/package.json @@ -0,0 +1,39 @@ +{ + "name": "@goodwidget/governance-widget", + "version": "0.1.0", + "description": "Presentational governance homepage components for GoodWidget", + "type": "module", + "main": "./dist/index.cjs", + "module": "./dist/index.js", + "types": "./dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "require": "./dist/index.cjs" + } + }, + "scripts": { + "build": "tsup", + "dev": "tsup --watch", + "lint": "eslint src/", + "clean": "rm -rf dist .turbo" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + }, + "dependencies": { + "@goodwidget/ui": "workspace:*", + "react-native-svg": "15.15.5", + "tamagui": "1.121.0" + }, + "devDependencies": { + "@types/react": "^18.3.0", + "@types/react-dom": "^18.3.0", + "react": "^18.3.0", + "react-dom": "^18.3.0", + "tsup": "^8.4.0", + "typescript": "^5.7.0" + } +} diff --git a/packages/governance-widget/src/governanceComponents.tsx b/packages/governance-widget/src/governanceComponents.tsx new file mode 100644 index 0000000..ccce74e --- /dev/null +++ b/packages/governance-widget/src/governanceComponents.tsx @@ -0,0 +1,606 @@ +import React from 'react' +import Svg, { Circle, G } from 'react-native-svg' +import { Stack, useTheme } from 'tamagui' +import { + Badge, + BadgeText, + Button, + ButtonText, + Card, + Heading, + Icon, + Text, + TokenAmount, + XStack, + YStack, +} from '@goodwidget/ui' +import type { IconName } from '@goodwidget/ui' + +export interface GovernanceAmount { + value: string | number + token?: string + isStreaming?: boolean + streamLabel?: string +} + +export interface ImpactCardMetric { + label: string + amount: GovernanceAmount + description?: string +} + +export interface ImpactCardProps { + title: string + metrics: [ImpactCardMetric, ImpactCardMetric] + description: string + ctaLabel?: string + ctaDisabled?: boolean + onCtaPress?: () => void + testID?: string +} + +export interface BalanceCardMetadata { + label: string + tone?: 'default' | 'positive' | 'muted' + icon?: IconName +} + +export interface BalanceCardProps { + icon: IconName + title: string + amount: GovernanceAmount | string | number + amountType?: 'token' | 'raw' + metadata: BalanceCardMetadata + compact?: boolean + testID?: string +} + +export interface RankedVotingOption { + id: string + label: string + percentage: number +} + +export interface AlignmentVotingProposalCardProps { + id: string + categoryLabel: string + title: string + summaryLabel?: string + options: RankedVotingOption[] + maxVisibleOptions?: number + onPress?: (id: string) => void + testID?: string +} + +export interface VoteSegment { + id: string + label: string + percentage: number + tone?: 'for' | 'against' | 'abstain' | 'neutral' +} + +export interface VoterPreview { + id: string + label: string + avatarUrl?: string +} + +export interface OptimisticVotingProposalCardProps { + id: string + categoryLabel: string + title: string + quorumLabel?: string + quorumReachedPercent: number + voteSegments: VoteSegment[] + voters: VoterPreview[] + remainingVoterCountLabel?: string + onPress?: (id: string) => void + testID?: string +} + +export interface FundingProjectAllocation { + id: string + name: string + amount: GovernanceAmount + percentage: number +} + +export interface FundingDistributionChartProps { + totalAmount: GovernanceAmount + projects: FundingProjectAllocation[] + isStreaming?: boolean + onProjectPress?: (id: string) => void + testID?: string +} + +const SEGMENT_TONES: Record, string> = { + for: '$primary', + against: '$error', + abstain: '$placeholderColor', + neutral: '$success', +} + +const DONUT_COLOR_KEYS = ['primary', 'success', 'warning', 'info', 'error'] as const + +function clampPercentage(value: number): number { + if (!Number.isFinite(value)) { + return 0 + } + + return Math.max(0, Math.min(100, value)) +} + +function formatRawValue(value: string | number): string { + if (typeof value === 'string') { + return value + } + + return new Intl.NumberFormat('en-US', { maximumFractionDigits: 2 }).format(value) +} + +function isGovernanceAmount(value: GovernanceAmount | string | number): value is GovernanceAmount { + return typeof value === 'object' && value !== null && 'value' in value +} + +function resolveThemeColor(theme: ReturnType, key: string, fallback: string): string { + const themeValue = theme[key as keyof typeof theme] + + if (themeValue && typeof themeValue === 'object' && 'val' in themeValue) { + return String(themeValue.val) + } + + return fallback +} + +function renderGovernanceAmount(amount: GovernanceAmount, size: 'sm' | 'md' | 'lg' | 'xl' = 'lg') { + return ( + + {amount.token ? ( + + ) : ( + {formatRawValue(amount.value)} + )} + {amount.isStreaming ? ( + + {amount.streamLabel ?? 'Live stream'} + + ) : null} + + ) +} + +function MetricBox({ metric }: { metric: ImpactCardMetric }) { + return ( + + + {metric.label} + + {renderGovernanceAmount(metric.amount, 'lg')} + {metric.description ? ( + + {metric.description} + + ) : null} + + ) +} + +function ProposalHeader({ categoryLabel }: { categoryLabel: string }) { + return ( + + + {categoryLabel} + + + + ) +} + +function ProgressBar({ percentage, colorToken = '$primary' }: { percentage: number; colorToken?: string }) { + return ( + + + + ) +} + +function RankedOptionRow({ option }: { option: RankedVotingOption }) { + return ( + + + + {option.label} + + + {clampPercentage(option.percentage)}% + + + + + ) +} + +function StackedProgressBar({ segments }: { segments: VoteSegment[] }) { + return ( + + {segments.map((segment) => ( + + ))} + + ) +} + +function VoterAvatar({ voter, index }: { voter: VoterPreview; index: number }) { + const initial = voter.label.trim().slice(0, 1).toUpperCase() || '?' + + return ( + + {voter.avatarUrl ? ( + {voter.label} + ) : ( + + {initial} + + )} + + ) +} + +function VoterPreviewGroup({ voters, remainingLabel }: { voters: VoterPreview[]; remainingLabel?: string }) { + return ( + + + {voters.slice(0, 4).map((voter, index) => ( + + ))} + + {remainingLabel ? ( + + {remainingLabel} + + ) : null} + + ) +} + +function VoteLegend({ segments }: { segments: VoteSegment[] }) { + return ( + + {segments.map((segment) => ( + + + + {segment.label} {clampPercentage(segment.percentage)}% + + + ))} + + ) +} + +function fundingAmountLabel(amount: GovernanceAmount): string { + const base = amount.token ? `${formatRawValue(amount.value)} ${amount.token}` : formatRawValue(amount.value) + + if (amount.isStreaming) { + return `${base} streaming` + } + + return base +} + +function FundingLegend({ + projects, + colors, + onProjectPress, +}: { + projects: FundingProjectAllocation[] + colors: string[] + onProjectPress?: (id: string) => void +}) { + if (projects.length === 0) { + return ( + + No active funding distribution yet. + + ) + } + + return ( + + {projects.map((project, index) => ( + + ))} + + ) +} + +function FundingDonut({ + projects, + totalAmount, + colors, + onProjectPress, +}: { + projects: FundingProjectAllocation[] + totalAmount: GovernanceAmount + colors: string[] + onProjectPress?: (id: string) => void +}) { + const size = 196 + const strokeWidth = 22 + const radius = (size - strokeWidth) / 2 + const circumference = 2 * Math.PI * radius + let offset = 0 + + return ( + + + + + {projects.map((project, index) => { + const percentage = clampPercentage(project.percentage) + const dashLength = (percentage / 100) * circumference + const dashOffset = -offset + offset += dashLength + + return ( + onProjectPress(project.id) : undefined} + /> + ) + })} + + + + {renderGovernanceAmount(totalAmount, 'md')} + + Total active funding + + + + ) +} + +export function ImpactCard({ + title, + metrics, + description, + ctaLabel, + ctaDisabled = false, + onCtaPress, + testID, +}: ImpactCardProps) { + return ( + + {title} + + {metrics.map((metric) => ( + + ))} + + {description} + {ctaLabel ? ( + + ) : null} + + ) +} + +export function BalanceCard({ + icon, + title, + amount, + amountType = 'token', + metadata, + compact = false, + testID, +}: BalanceCardProps) { + const amountValue = isGovernanceAmount(amount) ? amount : { value: amount, token: amountType === 'token' ? 'G$' : undefined } + const metadataTone = metadata.tone === 'positive' ? 'default' : metadata.tone === 'muted' ? 'secondary' : 'soft' + + return ( + + + + + {title} + + + {renderGovernanceAmount(amountValue, compact ? 'md' : 'lg')} + + {metadata.icon ? : null} + + {metadata.label} + + + + ) +} + +export function AlignmentVotingProposalCard({ + id, + categoryLabel, + title, + summaryLabel = 'Current top voted', + options, + maxVisibleOptions = 3, + onPress, + testID, +}: AlignmentVotingProposalCardProps) { + const visibleOptions = options.slice(0, maxVisibleOptions) + const hiddenCount = Math.max(0, options.length - visibleOptions.length) + + return ( + onPress(id) : undefined} + role={onPress ? 'button' : undefined} + aria-label={`Open proposal ${title}`} + > + + {title} + + + + {summaryLabel} + + + + {visibleOptions.map((option) => ( + + ))} + {hiddenCount > 0 ? ( + + +{hiddenCount} more options + + ) : null} + + + ) +} + +export function OptimisticVotingProposalCard({ + id, + categoryLabel, + title, + quorumLabel = 'Current vote quorum', + quorumReachedPercent, + voteSegments, + voters, + remainingVoterCountLabel, + onPress, + testID, +}: OptimisticVotingProposalCardProps) { + return ( + onPress(id) : undefined} + role={onPress ? 'button' : undefined} + aria-label={`Open proposal ${title}`} + > + + {title} + + + + {quorumLabel} + + + {clampPercentage(quorumReachedPercent)}% reached + + + + + + + + + + + + + + + ) +} + +export function FundingDistributionChart({ + totalAmount, + projects, + isStreaming = false, + onProjectPress, + testID, +}: FundingDistributionChartProps) { + const theme = useTheme() + const fallbackColors = ['#2563eb', '#16a34a', '#d97706', '#0891b2', '#dc2626'] + const colors = DONUT_COLOR_KEYS.map((key, index) => resolveThemeColor(theme, key, fallbackColors[index])) + const total = { ...totalAmount, isStreaming: totalAmount.isStreaming ?? isStreaming } + + return ( + + + Funding distribution + Current allocation across active governance projects. + + + + + + + ) +} diff --git a/packages/governance-widget/src/index.ts b/packages/governance-widget/src/index.ts new file mode 100644 index 0000000..0ad8bec --- /dev/null +++ b/packages/governance-widget/src/index.ts @@ -0,0 +1,21 @@ +export { + ImpactCard, + BalanceCard, + AlignmentVotingProposalCard, + OptimisticVotingProposalCard, + FundingDistributionChart, +} from './governanceComponents' +export type { + GovernanceAmount, + ImpactCardMetric, + ImpactCardProps, + BalanceCardProps, + BalanceCardMetadata, + RankedVotingOption, + AlignmentVotingProposalCardProps, + VoteSegment, + VoterPreview, + OptimisticVotingProposalCardProps, + FundingProjectAllocation, + FundingDistributionChartProps, +} from './governanceComponents' diff --git a/packages/governance-widget/tsconfig.build.json b/packages/governance-widget/tsconfig.build.json new file mode 100644 index 0000000..54871c4 --- /dev/null +++ b/packages/governance-widget/tsconfig.build.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src", + "paths": { + "react-native": ["./node_modules/react-native-web"] + } + }, + "include": ["src"] +} diff --git a/packages/governance-widget/tsconfig.json b/packages/governance-widget/tsconfig.json new file mode 100644 index 0000000..c2f740f --- /dev/null +++ b/packages/governance-widget/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src", + "paths": { + "@goodwidget/ui": ["../ui/src/index.ts"], + "react-native": ["./node_modules/react-native-web"] + } + }, + "include": ["src"] +} diff --git a/packages/governance-widget/tsup.config.ts b/packages/governance-widget/tsup.config.ts new file mode 100644 index 0000000..756b6b0 --- /dev/null +++ b/packages/governance-widget/tsup.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from 'tsup' + +export default defineConfig({ + entry: { + index: 'src/index.ts', + }, + format: ['esm', 'cjs'], + dts: true, + sourcemap: true, + clean: true, + tsconfig: 'tsconfig.build.json', + external: ['react', 'react-dom', 'react-native', 'react-native-web', 'react-native-svg'], +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 04afa8b..3c1446a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -170,6 +170,9 @@ importers: '@goodwidget/core': specifier: workspace:* version: link:../../packages/core + '@goodwidget/governance-widget': + specifier: workspace:* + version: link:../../packages/governance-widget '@goodwidget/ui': specifier: workspace:* version: link:../../packages/ui @@ -344,6 +347,37 @@ importers: specifier: ^5.7.0 version: 5.9.3 + packages/governance-widget: + dependencies: + '@goodwidget/ui': + specifier: workspace:* + version: link:../ui + react-native-svg: + specifier: 15.15.5 + version: 15.15.5(react-native@0.76.9(@babel/core@7.29.0)(@babel/preset-env@7.29.2(@babel/core@7.29.0))(@types/react@18.3.28)(react@18.3.1))(react@18.3.1) + tamagui: + specifier: 1.121.0 + version: 1.121.0(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.29.0)(@babel/preset-env@7.29.2(@babel/core@7.29.0))(@types/react@18.3.28)(react@18.3.1))(react@18.3.1) + devDependencies: + '@types/react': + specifier: ^18.3.0 + version: 18.3.28 + '@types/react-dom': + specifier: ^18.3.0 + version: 18.3.7(@types/react@18.3.28) + react: + specifier: ^18.3.0 + version: 18.3.1 + react-dom: + specifier: ^18.3.0 + version: 18.3.1(react@18.3.1) + tsup: + specifier: ^8.4.0 + version: 8.5.1(@swc/core@1.15.30)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.3) + typescript: + specifier: ^5.7.0 + version: 5.9.3 + packages/ui: dependencies: '@tamagui/animations-react-native': @@ -3592,6 +3626,9 @@ packages: resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} engines: {node: '>=0.6'} + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + bplist-creator@0.0.7: resolution: {integrity: sha512-xp/tcaV3T5PCiaY04mXga7o/TE+t95gqeLmADeBI1CvZtdWTbgBt3uLpvh4UWtenKeBhCV6oVxGk38yZr2uYEA==} @@ -3926,6 +3963,17 @@ packages: css-in-js-utils@3.1.0: resolution: {integrity: sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==} + css-select@5.2.2: + resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} + + css-tree@1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} + + css-what@6.2.2: + resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} + engines: {node: '>= 6'} + css.escape@1.5.1: resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} @@ -4067,6 +4115,9 @@ packages: dom-serializer@0.2.2: resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==} + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + domelementtype@1.3.1: resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==} @@ -4076,9 +4127,16 @@ packages: domhandler@2.4.2: resolution: {integrity: sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==} + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + domutils@1.7.0: resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==} + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + dotenv-expand@11.0.7: resolution: {integrity: sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==} engines: {node: '>=12'} @@ -4130,6 +4188,10 @@ packages: entities@2.2.0: resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + env-editor@0.4.2: resolution: {integrity: sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==} engines: {node: '>=8'} @@ -5407,6 +5469,9 @@ packages: md5@2.3.0: resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} + mdn-data@2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + memoize-one@5.2.1: resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} @@ -5724,6 +5789,9 @@ packages: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + nullthrows@1.1.1: resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} @@ -6161,6 +6229,12 @@ packages: react: '*' react-native: '*' + react-native-svg@15.15.5: + resolution: {integrity: sha512-L4go5jA+GWutdJ/JucuN20cjAbMg1HmMtAP+wZ+3JLCf6Jd0bhXQHxciRP/AQm/FlrIEZwkMcHNZP+FXAiic0w==} + peerDependencies: + react: '*' + react-native: '*' + react-native-web@0.19.13: resolution: {integrity: sha512-etv3bN8rJglrRCp/uL4p7l8QvUNUC++QwDbdZ8CB7BvZiMvsxfFIRM1j04vxNldG3uo2puRd6OSWR3ibtmc29A==} peerDependencies: @@ -11819,6 +11893,8 @@ snapshots: big-integer@1.6.52: {} + boolbase@1.0.0: {} + bplist-creator@0.0.7: dependencies: stream-buffers: 2.2.0 @@ -12193,6 +12269,21 @@ snapshots: dependencies: hyphenate-style-name: 1.1.0 + css-select@5.2.2: + dependencies: + boolbase: 1.0.0 + css-what: 6.2.2 + domhandler: 5.0.3 + domutils: 3.2.2 + nth-check: 2.1.1 + + css-tree@1.1.3: + dependencies: + mdn-data: 2.0.14 + source-map: 0.6.1 + + css-what@6.2.2: {} + css.escape@1.5.1: {} csstype@3.2.3: {} @@ -12297,6 +12388,12 @@ snapshots: domelementtype: 2.3.0 entities: 2.2.0 + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + domelementtype@1.3.1: {} domelementtype@2.3.0: {} @@ -12305,11 +12402,21 @@ snapshots: dependencies: domelementtype: 1.3.1 + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + domutils@1.7.0: dependencies: dom-serializer: 0.2.2 domelementtype: 1.3.1 + domutils@3.2.2: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + dotenv-expand@11.0.7: dependencies: dotenv: 16.4.7 @@ -12354,6 +12461,8 @@ snapshots: entities@2.2.0: {} + entities@4.5.0: {} + env-editor@0.4.2: {} error-ex@1.3.4: @@ -13963,6 +14072,8 @@ snapshots: crypt: 0.0.2 is-buffer: 1.1.6 + mdn-data@2.0.14: {} + memoize-one@5.2.1: {} memoize-one@6.0.0: {} @@ -14471,6 +14582,10 @@ snapshots: dependencies: path-key: 3.1.1 + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + nullthrows@1.1.1: {} nyc@15.1.0: @@ -14931,6 +15046,13 @@ snapshots: react-native: 0.76.9(@babel/core@7.29.0)(@babel/preset-env@7.29.2(@babel/core@7.29.0))(@types/react@18.3.28)(react@18.3.1) warn-once: 0.1.1 + react-native-svg@15.15.5(react-native@0.76.9(@babel/core@7.29.0)(@babel/preset-env@7.29.2(@babel/core@7.29.0))(@types/react@18.3.28)(react@18.3.1))(react@18.3.1): + dependencies: + css-select: 5.2.2 + css-tree: 1.1.3 + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.29.0)(@babel/preset-env@7.29.2(@babel/core@7.29.0))(@types/react@18.3.28)(react@18.3.1) + react-native-web@0.19.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.29.2 diff --git a/tests/widgets/governance-widget/states.spec.ts b/tests/widgets/governance-widget/states.spec.ts new file mode 100644 index 0000000..610da3f --- /dev/null +++ b/tests/widgets/governance-widget/states.spec.ts @@ -0,0 +1,120 @@ +/** + * states.spec.ts — Playwright smoke tests for presentational governance widgets. + * + * The stories use mocked values only; these tests verify screenshot-ready light, + * dark, mobile, long-content, empty, and interaction states without wallet or RPC. + */ +import { test, expect, Page } from '@playwright/test' + +type GovernanceStoryCase = { + id: string + testId: string + screenshot: string + width?: number + height?: number + expectedText: string +} + +const STORY_CASES: GovernanceStoryCase[] = [ + { + id: 'widgets-governancewidget--impact-light', + testId: 'ImpactCard-light', + screenshot: 'tests/widgets/governance-widget/test-results/gw-01-impact-light.png', + expectedText: 'Community impact this month', + }, + { + id: 'widgets-governancewidget--impact-dark-long-disabled-mobile', + testId: 'ImpactCard-dark-mobile-disabled', + screenshot: 'tests/widgets/governance-widget/test-results/gw-02-impact-dark-mobile-disabled.png', + width: 390, + height: 844, + expectedText: 'Coming soon', + }, + { + id: 'widgets-governancewidget--balance-variants-light', + testId: 'BalanceCard-token-growth', + screenshot: 'tests/widgets/governance-widget/test-results/gw-03-balance-variants-light.png', + expectedText: 'Voting balance', + }, + { + id: 'widgets-governancewidget--balance-dark-compact', + testId: 'BalanceCard-dark-compact', + screenshot: 'tests/widgets/governance-widget/test-results/gw-04-balance-dark-compact.png', + width: 390, + height: 844, + expectedText: 'Snapshot in 3 days', + }, + { + id: 'widgets-governancewidget--alignment-default-light', + testId: 'AlignmentVotingProposalCard-default', + screenshot: 'tests/widgets/governance-widget/test-results/gw-05-alignment-default-light.png', + expectedText: 'Current top 3 voted', + }, + { + id: 'widgets-governancewidget--alignment-dark-long-options', + testId: 'AlignmentVotingProposalCard-dark-long', + screenshot: 'tests/widgets/governance-widget/test-results/gw-06-alignment-dark-long-options.png', + expectedText: '+2 more options', + }, + { + id: 'widgets-governancewidget--optimistic-high-quorum-light', + testId: 'OptimisticVotingProposalCard-high-quorum', + screenshot: 'tests/widgets/governance-widget/test-results/gw-07-optimistic-high-quorum-light.png', + expectedText: '78% reached', + }, + { + id: 'widgets-governancewidget--optimistic-dark-low-quorum-mixed', + testId: 'OptimisticVotingProposalCard-low-quorum', + screenshot: 'tests/widgets/governance-widget/test-results/gw-08-optimistic-dark-low-quorum-mixed.png', + expectedText: '+84', + }, + { + id: 'widgets-governancewidget--funding-distribution-light', + testId: 'FundingDistributionChart-populated', + screenshot: 'tests/widgets/governance-widget/test-results/gw-09-funding-distribution-light.png', + width: 760, + height: 720, + expectedText: 'Local Food Chain', + }, + { + id: 'widgets-governancewidget--funding-distribution-dark-empty-mobile', + testId: 'FundingDistributionChart-empty-dark-mobile', + screenshot: 'tests/widgets/governance-widget/test-results/gw-10-funding-distribution-empty-dark-mobile.png', + width: 390, + height: 844, + expectedText: 'No active funding distribution yet.', + }, +] + +async function gotoStory(page: Page, storyId: string): Promise { + await page.goto(`/iframe.html?id=${storyId}&viewMode=story`) + await page.waitForLoadState('domcontentloaded') +} + +for (const storyCase of STORY_CASES) { + test(`${storyCase.id} renders and captures screenshot`, async ({ page }) => { + if (storyCase.width && storyCase.height) { + await page.setViewportSize({ width: storyCase.width, height: storyCase.height }) + } + + await gotoStory(page, storyCase.id) + + const component = page.getByTestId(storyCase.testId) + await expect(component).toBeVisible() + await expect(page.getByText(storyCase.expectedText).first()).toBeVisible() + + await page.screenshot({ path: storyCase.screenshot, fullPage: true }) + }) +} + +test('governance card interactions update mocked action state', async ({ page }) => { + await gotoStory(page, 'widgets-governancewidget--alignment-default-light') + + await page.getByTestId('AlignmentVotingProposalCard-default').click() + await expect(page.getByTestId('GovernanceWidget-last-action')).toContainText('Opened alignment-q3') + + await page.screenshot({ + path: 'tests/widgets/governance-widget/test-results/gw-11-interaction-alignment.png', + fullPage: true, + }) +}) diff --git a/tests/widgets/governance-widget/test-results/gw-01-impact-light.png b/tests/widgets/governance-widget/test-results/gw-01-impact-light.png new file mode 100644 index 0000000000000000000000000000000000000000..08f67fd2cc226de629f5dd99cf59f22de74bfa4d GIT binary patch literal 48382 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 M%Fmw`J%POaA1n@;+W-In literal 0 HcmV?d00001 diff --git a/tests/widgets/governance-widget/test-results/gw-02-impact-dark-mobile-disabled.png b/tests/widgets/governance-widget/test-results/gw-02-impact-dark-mobile-disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..f5d8dd6c5ddbab8552b9ed431aeefb102f609520 GIT binary patch literal 55519 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�cIV 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 o0D#@yLF2&4J#0hhe;Hsu;O`u5lX|Kh+Ibl>h($ literal 0 HcmV?d00001 diff --git a/tests/widgets/governance-widget/test-results/gw-03-balance-variants-light.png b/tests/widgets/governance-widget/test-results/gw-03-balance-variants-light.png new file mode 100644 index 0000000000000000000000000000000000000000..7303f44853ed85f959c627c6b4dd167f6e739677 GIT binary patch literal 21207 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 literal 0 HcmV?d00001 diff --git a/tests/widgets/governance-widget/test-results/gw-04-balance-dark-compact.png b/tests/widgets/governance-widget/test-results/gw-04-balance-dark-compact.png new file mode 100644 index 0000000000000000000000000000000000000000..7b3b223470f6167daad14a96673875ab876603ab GIT binary patch literal 14664 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 literal 0 HcmV?d00001 diff --git a/tests/widgets/governance-widget/test-results/gw-05-alignment-default-light.png b/tests/widgets/governance-widget/test-results/gw-05-alignment-default-light.png new file mode 100644 index 0000000000000000000000000000000000000000..212f1a1d0d2df07d5bf3b53e41bc6383b3adb927 GIT binary patch literal 35297 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 Wh2w9@XlfqstE!}>2zz4r;r{}>mtg|{ literal 0 HcmV?d00001 diff --git a/tests/widgets/governance-widget/test-results/gw-06-alignment-dark-long-options.png b/tests/widgets/governance-widget/test-results/gw-06-alignment-dark-long-options.png new file mode 100644 index 0000000000000000000000000000000000000000..03b87590f44743ea26733e49bdf7eb38ee6841eb GIT binary patch literal 53277 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

jN$P|692$3_Um| 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�#7EA zuA2yGWM;sY-tU&4LBY~=a1fRWRpTmh=054POSh^O-@BP!a)~(~No8Y!4n{6*D*?nB zwBvnGqbWrB+q)K~$+uGf*&x^5jN3{rJVZk#shSTha0H%2JmS$(I2>~-|8 z|E(~XK+vsJk=*Mw+0PYCR^KzEdV?e1!5b3J3#}Sacj?jE7N$)TqtbZS?s#H&xA50mL{ky4yBS_$y*93h3NyM pZqxhvx|>n}SKvoL{x^$$ix5p*R$DiQJ_Fx^0F+des1!2__+R*Ou>Sx6 literal 0 HcmV?d00001 diff --git a/tests/widgets/governance-widget/test-results/gw-11-interaction-alignment.png b/tests/widgets/governance-widget/test-results/gw-11-interaction-alignment.png new file mode 100644 index 0000000000000000000000000000000000000000..f9bf4fc5ca89a52c59c1493a8f6a8929fa0053dd GIT binary patch literal 35820 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 literal 0 HcmV?d00001 From 5e7bd759abc5d6673271114b3b56359921c9edc0 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 16 Jun 2026 13:49:53 +0000 Subject: [PATCH 03/13] Initial plan From f722215cccc7b7f7f5b9506d28001ccf5d69f5b0 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 16 Jun 2026 13:51:48 +0000 Subject: [PATCH 04/13] chore: start governance onboarding implementation --- .agents/skills/gooddollar/CONTRIBUTING.md | 121 ++ .agents/skills/gooddollar/SKILL.md | 215 ++++ .../contracts/BuyGDCloneFactory.abi.yaml | 205 ++++ .../BuyGDCloneFactory.selectors.yaml | 27 + .../contracts/BuyGDCloneV2.abi.yaml | 282 +++++ .../contracts/BuyGDCloneV2.selectors.yaml | 36 + .../contracts/CFAv1Forwarder.abi.yaml | 237 ++++ .../contracts/CFAv1Forwarder.selectors.yaml | 19 + .../ConstantFlowAgreementV1.abi.yaml | 560 +++++++++ .../ConstantFlowAgreementV1.selectors.yaml | 33 + .../contracts/GoodDollarOFTAdapter.abi.yaml | 100 ++ .../GoodDollarOFTAdapter.selectors.yaml | 12 + .../GooddollarSavingsStream.abi.yaml | 210 ++++ .../GooddollarSavingsStream.selectors.yaml | 27 + .../contracts/GovernanceStakingV2.abi.yaml | 202 ++++ .../GovernanceStakingV2.selectors.yaml | 26 + .../references/contracts/IdentityV3.abi.yaml | 390 +++++++ .../contracts/IdentityV3.selectors.yaml | 49 + .../references/contracts/IdentityV4.abi.yaml | 424 +++++++ .../contracts/IdentityV4.selectors.yaml | 51 + .../references/contracts/InvitesV2.abi.yaml | 333 ++++++ .../contracts/InvitesV2.selectors.yaml | 41 + .../references/contracts/MentoBroker.abi.yaml | 259 +++++ .../contracts/MentoBroker.selectors.yaml | 24 + .../contracts/MessagePassingBridge.abi.yaml | 542 +++++++++ .../MessagePassingBridge.selectors.yaml | 52 + .../references/contracts/NameService.abi.yaml | 104 ++ .../contracts/NameService.selectors.yaml | 11 + .../references/contracts/SuperToken.abi.yaml | 1033 +++++++++++++++++ .../contracts/SuperToken.selectors.yaml | 99 ++ .../references/contracts/Superfluid.abi.yaml | 757 ++++++++++++ .../contracts/Superfluid.selectors.yaml | 51 + .../references/contracts/UBISchemeV2.abi.yaml | 305 +++++ .../contracts/UBISchemeV2.selectors.yaml | 40 + .../contracts/_rich-abi-yaml-format.md | 93 ++ .../deep-researches/faucet-flows.md | 42 + .../fuse-to-celo-staking-migration.md | 38 + .../gooddao-daostack-surface.md | 37 + .../deep-researches/how-ubi-is-minted.md | 68 ++ .../inviter-invitee-reward-model.md | 58 + .../mento-reserve-economics.md | 27 + .../deep-researches/on-off-ramp-service.md | 69 ++ .../gooddollar/references/guides/bridge.md | 187 +++ .../references/guides/check-identity.md | 87 ++ .../gooddollar/references/guides/claim.md | 83 ++ .../gooddollar/references/guides/faucet.md | 76 ++ .../gooddollar/references/guides/gooddocs.md | 37 + .../gooddollar/references/guides/goodsdks.md | 110 ++ .../references/guides/hypersync-hyperrpc.md | 110 ++ .../references/guides/invite-bounties.md | 115 ++ .../migrate-fuse-staking-to-celo-savings.md | 116 ++ .../references/guides/on-off-ramp.md | 77 ++ .../gooddollar/references/guides/save.md | 93 ++ .../gooddollar/references/guides/stream.md | 135 +++ .../gooddollar/references/guides/swap.md | 83 ++ .../references/subgraphs/_query-patterns.md | 35 + .../subgraphs/goodcollective-guide.md | 54 + .../subgraphs/goodcollective.graphql | 200 ++++ .../subgraphs/gooddollar-celo-guide.md | 104 ++ .../subgraphs/gooddollar-celo.graphql | 113 ++ .../subgraphs/reserve-celo-guide.md | 41 + .../references/subgraphs/reserve-celo.graphql | 90 ++ skills-lock.json | 11 + 63 files changed, 9266 insertions(+) create mode 100644 .agents/skills/gooddollar/CONTRIBUTING.md create mode 100644 .agents/skills/gooddollar/SKILL.md create mode 100644 .agents/skills/gooddollar/references/contracts/BuyGDCloneFactory.abi.yaml create mode 100644 .agents/skills/gooddollar/references/contracts/BuyGDCloneFactory.selectors.yaml create mode 100644 .agents/skills/gooddollar/references/contracts/BuyGDCloneV2.abi.yaml create mode 100644 .agents/skills/gooddollar/references/contracts/BuyGDCloneV2.selectors.yaml create mode 100644 .agents/skills/gooddollar/references/contracts/CFAv1Forwarder.abi.yaml create mode 100644 .agents/skills/gooddollar/references/contracts/CFAv1Forwarder.selectors.yaml create mode 100644 .agents/skills/gooddollar/references/contracts/ConstantFlowAgreementV1.abi.yaml create mode 100644 .agents/skills/gooddollar/references/contracts/ConstantFlowAgreementV1.selectors.yaml create mode 100644 .agents/skills/gooddollar/references/contracts/GoodDollarOFTAdapter.abi.yaml create mode 100644 .agents/skills/gooddollar/references/contracts/GoodDollarOFTAdapter.selectors.yaml create mode 100644 .agents/skills/gooddollar/references/contracts/GooddollarSavingsStream.abi.yaml create mode 100644 .agents/skills/gooddollar/references/contracts/GooddollarSavingsStream.selectors.yaml create mode 100644 .agents/skills/gooddollar/references/contracts/GovernanceStakingV2.abi.yaml create mode 100644 .agents/skills/gooddollar/references/contracts/GovernanceStakingV2.selectors.yaml create mode 100644 .agents/skills/gooddollar/references/contracts/IdentityV3.abi.yaml create mode 100644 .agents/skills/gooddollar/references/contracts/IdentityV3.selectors.yaml create mode 100644 .agents/skills/gooddollar/references/contracts/IdentityV4.abi.yaml create mode 100644 .agents/skills/gooddollar/references/contracts/IdentityV4.selectors.yaml create mode 100644 .agents/skills/gooddollar/references/contracts/InvitesV2.abi.yaml create mode 100644 .agents/skills/gooddollar/references/contracts/InvitesV2.selectors.yaml create mode 100644 .agents/skills/gooddollar/references/contracts/MentoBroker.abi.yaml create mode 100644 .agents/skills/gooddollar/references/contracts/MentoBroker.selectors.yaml create mode 100644 .agents/skills/gooddollar/references/contracts/MessagePassingBridge.abi.yaml create mode 100644 .agents/skills/gooddollar/references/contracts/MessagePassingBridge.selectors.yaml create mode 100644 .agents/skills/gooddollar/references/contracts/NameService.abi.yaml create mode 100644 .agents/skills/gooddollar/references/contracts/NameService.selectors.yaml create mode 100644 .agents/skills/gooddollar/references/contracts/SuperToken.abi.yaml create mode 100644 .agents/skills/gooddollar/references/contracts/SuperToken.selectors.yaml create mode 100644 .agents/skills/gooddollar/references/contracts/Superfluid.abi.yaml create mode 100644 .agents/skills/gooddollar/references/contracts/Superfluid.selectors.yaml create mode 100644 .agents/skills/gooddollar/references/contracts/UBISchemeV2.abi.yaml create mode 100644 .agents/skills/gooddollar/references/contracts/UBISchemeV2.selectors.yaml create mode 100644 .agents/skills/gooddollar/references/contracts/_rich-abi-yaml-format.md create mode 100644 .agents/skills/gooddollar/references/deep-researches/faucet-flows.md create mode 100644 .agents/skills/gooddollar/references/deep-researches/fuse-to-celo-staking-migration.md create mode 100644 .agents/skills/gooddollar/references/deep-researches/gooddao-daostack-surface.md create mode 100644 .agents/skills/gooddollar/references/deep-researches/how-ubi-is-minted.md create mode 100644 .agents/skills/gooddollar/references/deep-researches/inviter-invitee-reward-model.md create mode 100644 .agents/skills/gooddollar/references/deep-researches/mento-reserve-economics.md create mode 100644 .agents/skills/gooddollar/references/deep-researches/on-off-ramp-service.md create mode 100644 .agents/skills/gooddollar/references/guides/bridge.md create mode 100644 .agents/skills/gooddollar/references/guides/check-identity.md create mode 100644 .agents/skills/gooddollar/references/guides/claim.md create mode 100644 .agents/skills/gooddollar/references/guides/faucet.md create mode 100644 .agents/skills/gooddollar/references/guides/gooddocs.md create mode 100644 .agents/skills/gooddollar/references/guides/goodsdks.md create mode 100644 .agents/skills/gooddollar/references/guides/hypersync-hyperrpc.md create mode 100644 .agents/skills/gooddollar/references/guides/invite-bounties.md create mode 100644 .agents/skills/gooddollar/references/guides/migrate-fuse-staking-to-celo-savings.md create mode 100644 .agents/skills/gooddollar/references/guides/on-off-ramp.md create mode 100644 .agents/skills/gooddollar/references/guides/save.md create mode 100644 .agents/skills/gooddollar/references/guides/stream.md create mode 100644 .agents/skills/gooddollar/references/guides/swap.md create mode 100644 .agents/skills/gooddollar/references/subgraphs/_query-patterns.md create mode 100644 .agents/skills/gooddollar/references/subgraphs/goodcollective-guide.md create mode 100644 .agents/skills/gooddollar/references/subgraphs/goodcollective.graphql create mode 100644 .agents/skills/gooddollar/references/subgraphs/gooddollar-celo-guide.md create mode 100644 .agents/skills/gooddollar/references/subgraphs/gooddollar-celo.graphql create mode 100644 .agents/skills/gooddollar/references/subgraphs/reserve-celo-guide.md create mode 100644 .agents/skills/gooddollar/references/subgraphs/reserve-celo.graphql create mode 100644 skills-lock.json diff --git a/.agents/skills/gooddollar/CONTRIBUTING.md b/.agents/skills/gooddollar/CONTRIBUTING.md new file mode 100644 index 0000000..ab855d3 --- /dev/null +++ b/.agents/skills/gooddollar/CONTRIBUTING.md @@ -0,0 +1,121 @@ +# Contributing to GoodSkills + +This repository is an AI skill pack. The goal of each update is to make agent behavior more reliable, more explicit, and easier to audit. + +## Update workflow + +1. Define the user-facing problem first. +2. For contract-related updates, add or update Rich ABI first (`references/contracts/*.abi.yaml`), then refresh selectors. +3. Decide the remaining artifact types: + - `references/guides/` for "what to do" + - `references/deep-researches/` for "why it works this way" + - `scripts/` for deterministic and repeatable execution +4. Update `SKILL.md` routing so the new artifact is discoverable. +5. Validate consistency (paths, naming, links, selectors, assumptions). + +If a change touches contract behavior, treat Rich ABI update/add as mandatory first step before guides, deep-research, or scripts. + +## Add or update a guide + +Use guides for execution playbooks and operator workflows. + +Required structure: + +- title and one-line usage trigger +- `## Goal` +- `## Required inputs` +- `## Execution flow` as numbered steps +- deterministic snippet when execution is non-trivial +- failure handling and output contract + +Guide rules: + +- prefer explicit pre-checks before state-changing actions +- include only one primary workflow per file +- use [GoodProtocol `releases/deployment.json`](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) as the **only** source for contract addresses (rich ABI `meta.deployments` mirrors those rows); use GoodDocs for behavior and UX, not for resolving addresses; use on-chain `NameService.getAddress` only when the deployment documents the string key +- avoid implementation-deep theory; keep that in deep-research files + +After adding a guide: + +- add it to `SKILL.md` in `Guides` +- add an entry in `Use-case to guide map` + +## Add or update a deep-research note + +Use deep-research files for architecture, rationale, tradeoffs, and root-cause logic. + +Deep-research rules: + +- explain causality, not only API surfaces +- distinguish current behavior from legacy behavior +- link source contracts/docs for traceability +- keep language natural and decision-oriented + +Do not turn deep-research files into step-by-step runbooks; move operational steps into guides. + +## Add or update Rich ABI YAML + +Location: `references/contracts/`. + +For each contract: + +- create or update `Foo.abi.yaml` +- generate or refresh `Foo.selectors.yaml` +- include function-level notes for non-obvious behavior +- when `meta.deployments` lists concrete addresses, add **`creationBlock`** next to each **`address`** (placement: `references/contracts/_rich-abi-yaml-format.md`; using it as **`fromBlock`** for log or HyperSync fetches: `references/guides/hypersync-hyperrpc.md`) + +Minimum ABI documentation quality: + +- correct mutability, inputs, outputs +- access pattern (`owner`, `avatar`, `anyone`, etc.) where relevant +- emitted events and practical errors +- notes for routing/edge-case semantics + +Source-of-truth policy: + +- prefer canonical contract repos (GoodProtocol, GoodBridge, mento-core) +- avoid inferred behavior when source is unclear +- update notes when protocol behavior changed + +Selector generation: + +```bash +node scripts/selectors.mjs generate Foo.abi.yaml +``` + +## Add or update scripts + +Location: `scripts/`. + +Use scripts when: + +- a workflow is repeated +- deterministic output is needed +- manual querying is error-prone + +Script standards: + +- require inputs through env vars or explicit args +- fail loudly with actionable messages +- print structured output for easy reuse +- keep script intent narrow + +When a script supports a guide: + +- reference it from that guide +- document expected inputs and outputs in the guide + +## Naming and organization + +- use lowercase kebab-case for guides and deep-research files +- keep one topic per file +- avoid duplicate guidance across files +- prefer updating existing files over creating near-duplicates + +## Update checklist before merge + +- `SKILL.md` routing updated +- links resolve and point to public sources +- guides and deep-research files respect "what" vs "why" separation +- ABI + selectors pairs are in sync +- new behavior is reflected in notes where needed diff --git a/.agents/skills/gooddollar/SKILL.md b/.agents/skills/gooddollar/SKILL.md new file mode 100644 index 0000000..2d59116 --- /dev/null +++ b/.agents/skills/gooddollar/SKILL.md @@ -0,0 +1,215 @@ +--- +name: gooddollar +description: > + Knowledge base for GoodProtocol action execution and GoodDollar (G$) integrations. + Use this skill BEFORE ad-hoc web search for claim, save/stake, swap, bridge, + stream, and identity tasks. Prefer GoodDocs (https://docs.gooddollar.org/) for + narrative; contract addresses only from GoodProtocol releases/deployment.json. +metadata: + version: 1.0.0 +license: MIT +--- + +# GoodDollar Skill Pack + +Routing index for GoodProtocol. This repo complements [GoodDocs](https://docs.gooddollar.org/) for behavior and user flows. **Contract addresses** come only from [GoodProtocol/releases/deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) (and `meta.deployments` in `references/contracts/*.abi.yaml`, which mirror those rows)—not from GoodDocs pages. + +Repository maintenance and update process is documented in `CONTRIBUTING.md`. + +## Protocol snapshot (from GoodDocs) + +- G$ is reserve-backed; issuance and pricing tie to the reserve and bonding-curve mechanics described in [How GoodDollar works](https://docs.gooddollar.org/how-gooddollar-works). +- The stack is multi-chain; which contracts exist per environment is defined only in [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) (for example `GoodDollar`, `Identity`, `NameService`, `UBIScheme`, Mento keys, `MpbBridge`, and related entries under `production`, `production-celo`, and `production-xdc`). +- UBI is daily for verified users; identity verification and connected accounts are documented under [user guides](https://docs.gooddollar.org/user-guides). + +## Guides (single location for action playbooks) + +All task-specific instructions live under `references/guides/`. + +- `references/guides/claim.md` — daily UBI (`claim` / UBIScheme). +- `references/guides/save.md` — stake, rewards, unstake. +- `references/guides/swap.md` — buy or sell G$ (Mento on supported chains). +- `references/guides/bridge.md` — MessagePassingBridge (GoodDocs); optional OFT path via ABI refs. +- `references/guides/stream.md` — Superfluid streams (Celo-oriented in GoodDocs). +- `references/guides/check-identity.md` — whitelist and connected-address semantics. +- `references/guides/goodsdks.md` — SDK-first integration routing for GoodSDKs packages. +- `references/guides/gooddocs.md` — hub links to [GoodDocs](https://docs.gooddollar.org/). +- `references/guides/hypersync-hyperrpc.md` — Envio HyperSync/HyperRPC data-source routing for high-volume historical reads. +- `references/guides/faucet.md` — Faucet gas top-up execution flow and preflight checks. +- `references/guides/on-off-ramp.md` — stable-token ramp service flow into and out of G$. +- `references/guides/invite-bounties.md` — verify and execute inviter-invitee bounty payouts. +- `references/guides/migrate-fuse-staking-to-celo-savings.md` — migrate Fuse governance stake to CELO savings flow. + +## Subgraphs (indexed chain history) + +Use this folder with the same pattern as the protocol subgraph references: one `*-guide.md` plus one companion `.graphql` per deployment. + +For historical on-chain data, **start with the subgraph**: confirm the deployment covers the question (entities and fields in the guide, freshness via `_meta`). If the subgraph does not work for the request—missing schema coverage, stale or lagging indexing, query limits, or endpoint errors—**then** move to **HyperSync** or **HyperRPC** using `references/guides/hypersync-hyperrpc.md`. + +- `references/subgraphs/_query-patterns.md` — cross-cutting query discipline. +- `references/subgraphs/reserve-celo-guide.md` + `references/subgraphs/reserve-celo.graphql` — reserve pricing and swap history. +- `references/subgraphs/gooddollar-celo-guide.md` + `references/subgraphs/gooddollar-celo.graphql` — GoodDollar Celo schema discovery and starter probes. +- `references/subgraphs/goodcollective-guide.md` + `references/subgraphs/goodcollective.graphql` — GoodCollective schema discovery and starter probes. + +For Superfluid protocol subgraphs (streams, pools, vesting schedulers), see [Superfluid documentation](https://docs.superfluid.finance/) and [subgraph endpoints](https://subgraph-endpoints.superfluid.dev/). + +## Historical data routing policy (strict) + +1. Query subgraphs first for all historical/indexed requests. +2. Validate required entities and fields against the target subgraph schema and guide before declaring a gap. +3. Use **HyperSync** or **HyperRPC** fallback only when at least one of these is true: + - required entities or fields are not available in subgraph schema + - indexing lag makes subgraph data stale for the requested range + - query limits or endpoint instability block reliable retrieval +4. Do not start with HyperSync or HyperRPC when subgraph data is available and fresh. +5. HyperRPC fallback requires a valid Envio API key; if missing, **explicitly ask the user** to provide `HYPERRPC_API_TOKEN` or `ENVIO_API_TOKEN` (or paste a full `HYPERRPC_URL`); do not treat anonymous HyperRPC as production. +6. When **HyperSync** is the best option for the query and no Envio API token is available (`ENVIO_API_TOKEN` or equivalent per `references/guides/hypersync-hyperrpc.md`), **explicitly ask the user** to provide the token before proceeding; do not silently substitute anonymous HyperSync usage. +7. When fallback is used, report reason explicitly (schema gap, lag, or reliability issue). + +## Data source decision table + +| Query type | Primary source | Secondary source | Notes | +|---|---|---|---| +| Current on-chain state (latest balances, allowances, config, flags, view calls) | RPC | None | Use direct contract RPC reads for latest state. | +| Historical indexed entity data (time-series, aggregates, protocol entities, event-derived analytics) | Subgraph | HyperSync/HyperRPC | Prefer subgraph first; fall back when it cannot answer. | +| Historical raw on-chain data when subgraph is missing fields/entities or stale | HyperSync | HyperRPC | Prefer HyperSync for bulk scans and data pipelines. | +| Historical data for existing JSON-RPC integrations | HyperRPC | HyperSync | Use HyperRPC when strict JSON-RPC compatibility is required. | + +Decision rule: + +1. If request is current state -> use RPC. +2. If request is historical/indexed -> query subgraph first. +3. If subgraph cannot satisfy request -> fallback to HyperSync or HyperRPC per compatibility and scale needs. +4. HyperRPC fallback requires Envio API key credentials. +5. HyperSync client usage requires an Envio API token; if HyperSync is chosen and the token is missing, explicitly ask the user to provide it (see `references/guides/hypersync-hyperrpc.md`). + +## Mapping data retrieval rule + +Solidity mappings are not iterable on-chain by keyspace scan. Do not assume full-key enumeration is possible from RPC alone. + +When data is stored in mapping-like structures: + +1. Check contract source and ABI for key-discovery paths first: + - events emitted on set or update + - arrays, counters, linked lists, or index getters storing keys + - dedicated pagination or enumerable view functions +2. If key discovery exists, reconstruct key set from those sources and then read mapping entries. +3. If key discovery does not exist, report that complete iteration is not possible from chain state alone. +4. For historical reconstruction, prefer subgraph indexing first; if unavailable, use HyperSync or HyperRPC log scans with explicit limitations. + +## Use-case to guide map + +- Claim requests -> `references/guides/claim.md` +- Eligibility or connected-address questions -> `references/guides/check-identity.md` +- Stake, save, unstake -> `references/guides/save.md` +- Buy or sell G$ against reserve rails -> `references/guides/swap.md` +- Cross-chain bridge -> `references/guides/bridge.md` +- Stream management -> `references/guides/stream.md` +- SDK app integration tasks -> `references/guides/goodsdks.md` +- Bulk historical reads or data-engineering fetches -> `references/guides/hypersync-hyperrpc.md` +- Faucet top-up tasks -> `references/guides/faucet.md` +- On-/off-ramp service flow tasks -> `references/guides/on-off-ramp.md` +- Invite bounty eligibility and payout tasks -> `references/guides/invite-bounties.md` +- Fuse to CELO staking migration tasks -> `references/guides/migrate-fuse-staking-to-celo-savings.md` +- Indexed history, analytics, or GraphQL against GoodDollar subgraphs -> `references/subgraphs/_query-patterns.md` +- Historical on-chain fetch when subgraph data is insufficient -> subgraphs first, then HyperSync or HyperRPC per `references/guides/hypersync-hyperrpc.md`; if HyperSync is best and `ENVIO_API_TOKEN` is missing, ask the user for it explicitly. + +## Ambiguous prompts and incomplete inputs + +Stop and **ask the user** whenever the task is underspecified or required facts are missing. List what you need in short, concrete questions (for example chain, contract, address, amount, account, RPC or signer access, time or block range, prior tx hash, approval scope). + +- **Ambiguous** means the goal, environment, contract surface, or acceptance criteria are not clear enough to choose a safe path. +- **Incomplete** means you lack inputs that would change what you build, call, or sign next. + +**Do not invent** chain, address, amount, or policy details that affect correctness, funds, or eligibility. For **information-only** work you may state a single explicit assumption, label it, and ask the user to confirm or correct it before going further. + +**Execution work** (writing or editing runnable code, sending transactions, migrations, or anything that can move funds or alter on-chain state) has **no guessing**: settle every required input with the user, then implement or run. + +## Execution rules + +1. Collect missing required inputs before sending transactions. +2. Run pre-checks first (allowance, whitelist, quotes, bridge **amount** limits, peer wiring when using OFT paths). +3. If a pre-check fails, stop and return the exact corrective action. +4. Return tx hash and key output values. +5. Never fabricate addresses, amounts, or ABI behavior. +6. Resolve decimals and units per chain as in [How to integrate the G$ token](https://docs.gooddollar.org/for-developers/developer-guides/how-to-integrate-the-gusd-token) (for example 18 decimals on Celo, 2 on Fuse and Ethereum where applicable). + +## Pre-check matrix + +- Claim: verify identity whitelist status before `claim()`. +- Save or stake: verify balance and allowance before `stake()`. +- Swap: fetch quote, apply slippage bounds, verify allowance; confirm Mento contract keys for the active chain exist in `deployment.json` (for example `MentoBroker` under `production-celo` or `production-xdc`). +- Bridge (MessagePassingBridge): on the **source** chain approve G$ to the bridge; optionally preflight `canBridge(from, amount)` on that same contract (outbound `_bridgeTo` does not call it internally). For LZ use `estimateSendFee` with the **normalized** burn amount per `references/guides/bridge.md`, then `bridgeToWithLz` with nonzero `msg.value` for the **cross-chain transport** fee only (distinct from destination **`bridgeFees`** on minted G$; see **Bridge fee context** in that guide). Read **`bridgeLimits`** / daily trackers when debugging **amount** caps; see **Bridge amount limit context** in that guide. Respect `isClosed`, `LZ_FEE`, `MISSING_FEE`, and `UNSUPPORTED_CHAIN`. **Destination** mint applies `_enforceLimits` and can still revert. Use **Axelar** only when `toAxelarChainId` returns a route (implementation maps 1, 5, 42220, 44787); for Fuse or XDC style targets prefer LZ unless mapping is extended on-chain. +- Bridge (OFT adapter path): verify peer wiring and `quoteSend` fee data. +- Stream: confirm Celo (or documented Superfluid network) and correct Super Token and forwarder or host addresses. +- Identity: resolve Identity from NameService; remember connected addresses do not multiply daily claims ([connect wallet guide](https://docs.gooddollar.org/user-guides/connect-another-wallet-address-to-identity)). + +## Output format requirements + +For any state-changing action return: + +- network and key contract addresses used +- normalized input amounts and min or max guards +- tx hash +- key post-state output when available +- follow-up action if user intervention is required + +## Rich contract ABI references + +Convention: each `Foo.abi.yaml` has a companion `Foo.selectors.yaml` (function, event, and custom error selectors). Schema: `references/contracts/_rich-abi-yaml-format.md`. + +GoodDollar / Mento: + +- `references/contracts/NameService.abi.yaml` +- `references/contracts/IdentityV3.abi.yaml` +- `references/contracts/IdentityV4.abi.yaml` +- `references/contracts/InvitesV2.abi.yaml` +- `references/contracts/BuyGDCloneFactory.abi.yaml` +- `references/contracts/BuyGDCloneV2.abi.yaml` +- `references/contracts/GovernanceStakingV2.abi.yaml` +- `references/contracts/GooddollarSavingsStream.abi.yaml` (Ubeswap Superfluid stream savings; Celo deployment) +- `references/contracts/UBISchemeV2.abi.yaml` +- `references/contracts/MentoBroker.abi.yaml` +- `references/contracts/MessagePassingBridge.abi.yaml` +- `references/contracts/GoodDollarOFTAdapter.abi.yaml` +- `references/contracts/CFAv1Forwarder.abi.yaml` +- `references/contracts/ConstantFlowAgreementV1.abi.yaml` +- `references/contracts/Superfluid.abi.yaml` +- `references/contracts/SuperToken.abi.yaml` + +Superfluid (CFA, CFAv1Forwarder, Host, full ABI library): use [Superfluid docs](https://docs.superfluid.finance/), npm packages such as `@superfluid-finance/ethereum-contracts` and `@sfpro/sdk`, and contract ABIs published with those packages. + +## Deep researches + +- `references/deep-researches/on-off-ramp-service.md` +- `references/deep-researches/how-ubi-is-minted.md` +- `references/deep-researches/inviter-invitee-reward-model.md` +- `references/deep-researches/mento-reserve-economics.md` +- `references/deep-researches/gooddao-daostack-surface.md` +- `references/deep-researches/faucet-flows.md` +- `references/deep-researches/fuse-to-celo-staking-migration.md` + +## Revert debugging quick map + +- Identity or eligibility errors -> Identity and UBIScheme ABIs; live addresses from `deployment.json` only; GoodDocs for whitelist and claim behavior. +- Approval or transfer failures -> token approvals and balances; see integration guide for `transferAndCall` vs `approve` plus `transferFrom`. +- Swap bound failures -> quote freshness and slippage settings. +- MessagePassingBridge failures -> `canBridge`; **`BRIDGE_LIMITS`** (amount caps, whitelist, **`closed`**, and related policy strings); transport `msg.value` (`MISSING_FEE`, `LZ_FEE`) vs destination protocol fee (`bridgeFees`, `feeRecipient`); correct `bridgeTo` arguments; [Bridge GoodDollars](https://docs.gooddollar.org/user-guides/bridge-gooddollars). +- OFT path failures -> peer wiring and `quoteSend` fee data. +- Stream failures -> CFA forwarder or host agreement calls, buffer and flow-rate limits per Superfluid docs linked from GoodDocs. +- Faucet top-up failures -> `canTop`, `onlyAuthorized`, daily or weekly caps; `references/deep-researches/faucet-flows.md`. +- DAO-gated reverts -> caller is not avatar; scheme not registered; `references/deep-researches/gooddao-daostack-surface.md`. + +## Library usage discipline + +1. Open `references/guides/gooddocs.md` when unsure which GoodDocs page applies. +2. Start at this file to classify intent. +3. Open one guide under `references/guides/` unless the user requests a multi-step workflow. For subgraph or indexed-data tasks, start at `references/subgraphs/_query-patterns.md`. +4. Read only the ABI references and matching `.selectors.yaml` files needed for the chosen action. +5. Prefer GoodDocs for documented behavior; use only `deployment.json` (and rich ABI `meta.deployments` aligned with it) for contract addresses—never infer addresses from GoodDocs. +6. For large historical reads, prefer `references/guides/hypersync-hyperrpc.md` and choose HyperSync over HyperRPC unless strict JSON-RPC compatibility is required. +7. Historical data routing is strict: subgraphs first; HyperSync or HyperRPC only with an explicit fallback reason. +8. HyperRPC usage requires Envio API key credentials; when absent, **explicitly ask the user** for `HYPERRPC_API_TOKEN` or `ENVIO_API_TOKEN` (or a full `HYPERRPC_URL`) and do not attempt anonymous production flow. +9. When HyperSync is the best historical-data path and no Envio API token is available, explicitly ask the user to provide `ENVIO_API_TOKEN` (or the token your client expects) before continuing; see `references/guides/hypersync-hyperrpc.md`. +10. For subgraph tasks, validate field availability from the relevant `references/subgraphs/*-guide.md` and companion `.graphql` before guessing alternate entities. +11. For local shells repeating HyperRPC log pulls (for example last N whitelist events), from the **GoodSkills repository root** run `scripts/fetch-whitelist-events-hyperrpc.mjs` per `references/guides/hypersync-hyperrpc.md` instead of re-deriving JSON-RPC setup each time; that script ships with **defaults for production Celo** (HyperRPC host + `Identity` contract from `deployment.json`) and URL composition from `HYPERRPC_API_TOKEN` or `ENVIO_API_TOKEN` unless you override `CONTRACT_ADDRESS` / `HYPERRPC_URL`. HyperSync remains a separate client install path documented in the same guide. diff --git a/.agents/skills/gooddollar/references/contracts/BuyGDCloneFactory.abi.yaml b/.agents/skills/gooddollar/references/contracts/BuyGDCloneFactory.abi.yaml new file mode 100644 index 0000000..40226b3 --- /dev/null +++ b/.agents/skills/gooddollar/references/contracts/BuyGDCloneFactory.abi.yaml @@ -0,0 +1,205 @@ +meta: + name: BuyGDCloneFactory + version: "1" + source: + - https://raw.githubusercontent.com/GoodDollar/GoodProtocol/master/contracts/utils/BuyGDClone.sol + note: > + Deterministic clone factory for BuyGDCloneV2 and DonateGDClone. Used to create per-owner + executors and optional create+swap flows for ramp services. + deployments: + mainnet: + production-celo: + BuyGDFactoryV2: + networkId: 42220 + address: "0x1F60C4C7037C6766924A43666B781ED1479587a2" + creationBlock: 22909812 + BuyGDFactory: + networkId: 42220 + address: "0x00e533B7d6255D05b7f15034B1c989c21F51b91C" + creationBlock: 21006324 + related: + - references/deep-researches/on-off-ramp-service.md + - references/guides/on-off-ramp.md + +create: + notes: + - "Deploys deterministic BuyGDCloneV2 clone for owner and initializes it." + - "Difference vs createAndSwap: this only deploys; no swap is executed." + mutability: nonpayable + access: anyone + inputs: + - owner: address + outputs: + - clone: address + +createDonation: + notes: + - "Deploys deterministic DonateGDClone with donation target and call payload." + - "Difference vs create: deploys donation-capable implementation instead of plain swap clone." + mutability: nonpayable + access: anyone + inputs: + - owner: address + - donateOrExecTo: address + - callData: bytes + outputs: + - clone: address + +createAndSwap: + notes: + - "One-transaction helper: create BuyGDCloneV2 then immediately call clone.swap(minAmount, msg.sender)." + - "Difference vs create: bundles deployment and first swap for faster ramp UX." + mutability: nonpayable + access: anyone + inputs: + - owner: address + - minAmount: uint256 + outputs: + - clone: address + +createDonationAndSwap: + notes: + - "One-transaction helper for DonateGDClone: deploy, then execute donation flow with optional pre-swap." + - "Difference vs createDonation: can execute immediate swap and/or target call instead of deployment only." + mutability: nonpayable + access: anyone + inputs: + - owner: address + - donateOrExecTo: address + - withSwap: bool + - minAmount: uint256 + - callData: bytes + outputs: + - clone: address + +predict: + notes: + - "Computes deterministic address for create(owner) salt." + mutability: view + inputs: + - owner: address + outputs: + - clone: address + +predictDonation: + notes: + - "Computes deterministic address for createDonation(owner, donateOrExecTo, callData) salt." + mutability: view + inputs: + - owner: address + - donateOrExecTo: address + - callData: bytes + outputs: + - clone: address + +getBaseFee: + mutability: view + inputs: [] + outputs: + - baseFee: uint256 + +quoter: + mutability: pure + inputs: [] + outputs: + - addr: address + +CUSD: + mutability: pure + inputs: [] + outputs: + - token: address + +celo: + mutability: pure + inputs: [] + outputs: + - token: address + +USDC: + mutability: pure + inputs: [] + outputs: + - token: address + +GLOUSD: + mutability: pure + inputs: [] + outputs: + - token: address + +PERIOD: + mutability: pure + inputs: [] + outputs: + - seconds: uint24 + +impl: + mutability: view + inputs: [] + outputs: + - addr: address + +donateImpl: + mutability: view + inputs: [] + outputs: + - addr: address + +gd: + mutability: view + inputs: [] + outputs: + - token: address + +stable: + mutability: view + inputs: [] + outputs: + - token: address + +oracle: + mutability: view + inputs: [] + outputs: + - addr: address + +router: + mutability: view + inputs: [] + outputs: + - addr: address + +mentoBroker: + mutability: view + inputs: [] + outputs: + - addr: address + +mentoExchangeProvider: + mutability: view + inputs: [] + outputs: + - addr: address + +mentoExchangeId: + mutability: view + inputs: [] + outputs: + - id: bytes32 + +events: + GDSwapToCusd: + indexed: [] + data: + - from: address + - to: address + - amountIn: uint256 + - amountOut: uint256 + - note: bytes + +errors: + NOT_GD_TOKEN: "onTokenTransfer caller is not G$ token." + INVALID_TWAP: "TWAP validation failed." + RECIPIENT_ZERO: "Recipient cannot be zero address." + ZERO_MINAMOUNT: "Minimum amount cannot be zero." diff --git a/.agents/skills/gooddollar/references/contracts/BuyGDCloneFactory.selectors.yaml b/.agents/skills/gooddollar/references/contracts/BuyGDCloneFactory.selectors.yaml new file mode 100644 index 0000000..16b13f2 --- /dev/null +++ b/.agents/skills/gooddollar/references/contracts/BuyGDCloneFactory.selectors.yaml @@ -0,0 +1,27 @@ +# Generated by scripts/selectors.mjs +functions: + create(address): 0x9ed93318 + createDonation(address,address,bytes): 0x48199e6b + createAndSwap(address,uint256): 0x89643a29 + createDonationAndSwap(address,address,bool,uint256,bytes): 0xeb5621b8 + predict(address): 0x901b96e7 + predictDonation(address,address,bytes): 0x3895de30 + getBaseFee(): 0x15e812ad + quoter(): 0xc6bbd5a7 + CUSD(): 0x758316c9 + celo(): 0x051ed8ef + USDC(): 0x89a30271 + GLOUSD(): 0x4b5b02d6 + PERIOD(): 0xb4d1d795 + impl(): 0x8abf6077 + donateImpl(): 0x21fc2eef + gd(): 0xa5e598fc + stable(): 0x22be3de1 + oracle(): 0x7dc0d1d0 + router(): 0xf887ea40 + mentoBroker(): 0x7b89f117 + mentoExchangeProvider(): 0x4f62feec + mentoExchangeId(): 0xd373b333 +events: + GDSwapToCusd(address,address,uint256,uint256,bytes): 0x252bc23e3fb01f9986fa157af621236fb8a706ea12622da296e7f2f30d4f1a56 +errors: {} diff --git a/.agents/skills/gooddollar/references/contracts/BuyGDCloneV2.abi.yaml b/.agents/skills/gooddollar/references/contracts/BuyGDCloneV2.abi.yaml new file mode 100644 index 0000000..5f35ee9 --- /dev/null +++ b/.agents/skills/gooddollar/references/contracts/BuyGDCloneV2.abi.yaml @@ -0,0 +1,282 @@ +meta: + name: BuyGDCloneV2 + version: "2" + source: + - https://raw.githubusercontent.com/GoodDollar/GoodProtocol/master/contracts/utils/BuyGDClone.sol + inherits: + - Initializable + note: > + Clone implementation used by BuyGDCloneFactory for deterministic per-owner swap executors. + Supports CELO and cUSD flows, with cUSD route selection between Uniswap and Mento when configured. + deployments: + mainnet: + production-celo: + BuyGDFactoryV2: + networkId: 42220 + address: "0x1F60C4C7037C6766924A43666B781ED1479587a2" + creationBlock: 22909812 + related: + - references/deep-researches/on-off-ramp-service.md + - references/guides/on-off-ramp.md + +initialize: + mutability: nonpayable + access: initializer + inputs: + - _owner: address + outputs: [] + +getSwapPath: + mutability: pure + inputs: + - tokens: address[] + - fees: uint24[] + outputs: + - path: bytes + +swap: + notes: + - "Dispatcher entrypoint: if clone holds native CELO balance it executes CELO route, otherwise uses cUSD route." + - "Difference vs swapCelo/swapCusd: this function chooses route by contract balances; specialized functions force a specific asset path." + mutability: payable + access: anyone + inputs: + - _minAmount: uint256 + - refundGas: address + outputs: + - bought: uint256 + emits: [Bought] + errors: [NO_BALANCE] + +swapCelo: + notes: + - "CELO-only convenience path using the default preconfigured Uniswap route." + - "Difference vs swapCeloWithPath: same Uniswap execution, but caller cannot override token path and fee tiers." + - "Difference vs cUSD paths: CELO path does not use Mento route selection." + mutability: payable + access: anyone + inputs: + - _minAmount: uint256 + - refundGas: address + outputs: + - bought: uint256 + emits: [BoughtFromUniswap] + errors: [REFUND_FAILED] + +swapCeloWithPath: + notes: + - "CELO-only path with caller-supplied Uniswap multi-hop route." + - "Difference vs swapCelo: allows custom path optimization when default route is not preferred." + - "Difference vs cUSD paths: still Uniswap-only and does not compare against Mento." + mutability: payable + access: anyone + inputs: + - _minAmount: uint256 + - refundGas: address + - _path: (address[],uint24[]) + outputs: + - bought: uint256 + emits: [BoughtFromUniswap] + errors: [REFUND_FAILED] + +swapCusd: + notes: + - "cUSD-only convenience path that compares expected output from default-path Uniswap and Mento, then executes the better quote." + - "Difference vs swapCusdWithPath: this uses hardcoded default Uniswap path for comparison." + - "Difference vs CELO paths: includes dual-route best-execution logic with optional Mento." + mutability: nonpayable + access: anyone + inputs: + - _minAmount: uint256 + - refundGas: address + outputs: + - bought: uint256 + emits: [BoughtFromMento, BoughtFromUniswap] + errors: [MENTO_NOT_CONFIGURED] + +swapCusdWithPath: + notes: + - "cUSD path with caller-supplied Uniswap route; still compares custom Uniswap quote against Mento quote and picks larger expected output." + - "Difference vs swapCusd: custom path changes only the Uniswap side of the comparison." + - "Difference vs swapCeloWithPath: this function performs route competition (Uniswap vs Mento), not only route customization." + mutability: nonpayable + access: anyone + inputs: + - _minAmount: uint256 + - refundGas: address + - _path: (address[],uint24[]) + outputs: + - bought: uint256 + emits: [BoughtFromMento, BoughtFromUniswap] + errors: [MENTO_NOT_CONFIGURED] + +getExpectedReturnFromUniswapPath: + notes: + - "Quote helper for Uniswap path expected output used by cUSD route selection and preflight checks." + mutability: nonpayable + inputs: + - amountIn: uint256 + - _path: (address[],uint24[]) + outputs: + - expectedReturn: uint256 + +getExpectedReturnFromMento: + notes: + - "Quote helper for Mento expected output for cUSD->G$ used in best-route decision." + mutability: view + inputs: + - cusdAmount: uint256 + outputs: + - expectedReturn: uint256 + errors: [MENTO_NOT_CONFIGURED] + +minAmountByTWAP: + mutability: view + inputs: + - baseAmount: uint256 + - baseToken: address + - period: uint32 + outputs: + - minTwap: uint256 + - quote: uint256 + +recover: + mutability: nonpayable + access: anyone + inputs: + - token: address + outputs: [] + errors: [REFUND_FAILED] + +router: + mutability: view + inputs: [] + outputs: + - addr: address + +celo: + mutability: pure + inputs: [] + outputs: + - token: address + +CUSD: + mutability: pure + inputs: [] + outputs: + - token: address + +USDC: + mutability: pure + inputs: [] + outputs: + - token: address + +GLOUSD: + mutability: pure + inputs: [] + outputs: + - token: address + +GD_FEE_TIER: + mutability: pure + inputs: [] + outputs: + - tier: uint24 + +CUSD_STABLE_FEE_TIER: + mutability: pure + inputs: [] + outputs: + - tier: uint24 + +CELO_STABLE_FEE_TIER: + mutability: pure + inputs: [] + outputs: + - tier: uint24 + +twapPeriod: + mutability: view + inputs: [] + outputs: + - period: uint32 + +stable: + mutability: view + inputs: [] + outputs: + - token: address + +gd: + mutability: view + inputs: [] + outputs: + - token: address + +oracle: + mutability: view + inputs: [] + outputs: + - addr: address + +quoter: + mutability: view + inputs: [] + outputs: + - addr: address + +mentoBroker: + mutability: view + inputs: [] + outputs: + - addr: address + +mentoExchangeProvider: + mutability: view + inputs: [] + outputs: + - addr: address + +mentoExchangeId: + mutability: view + inputs: [] + outputs: + - id: bytes32 + +owner: + mutability: view + inputs: [] + outputs: + - addr: address + +CUSD_GAS_COSTS: + mutability: pure + inputs: [] + outputs: + - amount: uint256 + +events: + Bought: + indexed: [] + data: + - inToken: address + - inAmount: uint256 + - outAmount: uint256 + BoughtFromMento: + indexed: [] + data: + - inToken: address + - inAmount: uint256 + - outAmount: uint256 + BoughtFromUniswap: + indexed: [] + data: + - inToken: address + - inAmount: uint256 + - outAmount: uint256 + +errors: + REFUND_FAILED: "Refund call failed." + NO_BALANCE: "No CELO or cUSD available on clone." + MENTO_NOT_CONFIGURED: "Mento broker path not configured." diff --git a/.agents/skills/gooddollar/references/contracts/BuyGDCloneV2.selectors.yaml b/.agents/skills/gooddollar/references/contracts/BuyGDCloneV2.selectors.yaml new file mode 100644 index 0000000..1476ae3 --- /dev/null +++ b/.agents/skills/gooddollar/references/contracts/BuyGDCloneV2.selectors.yaml @@ -0,0 +1,36 @@ +# Generated by scripts/selectors.mjs +functions: + initialize(address): 0xc4d66de8 + getSwapPath(address[],uint24[]): 0xf0036d5d + swap(uint256,address): 0xd3986f08 + swapCelo(uint256,address): 0xaa6bfa9d + swapCeloWithPath(uint256,address,(address[],uint24[])): 0x81b7d2e0 + swapCusd(uint256,address): 0xb1a5fa9f + swapCusdWithPath(uint256,address,(address[],uint24[])): 0x170ba915 + getExpectedReturnFromUniswapPath(uint256,(address[],uint24[])): 0x12194320 + getExpectedReturnFromMento(uint256): 0xdbb15eb2 + minAmountByTWAP(uint256,address,uint32): 0x821dc910 + recover(address): 0x0cd865ec + router(): 0xf887ea40 + celo(): 0x051ed8ef + CUSD(): 0x758316c9 + USDC(): 0x89a30271 + GLOUSD(): 0x4b5b02d6 + GD_FEE_TIER(): 0xe00e8fdd + CUSD_STABLE_FEE_TIER(): 0xba428926 + CELO_STABLE_FEE_TIER(): 0x60e4bf4b + twapPeriod(): 0xf6207326 + stable(): 0x22be3de1 + gd(): 0xa5e598fc + oracle(): 0x7dc0d1d0 + quoter(): 0xc6bbd5a7 + mentoBroker(): 0x7b89f117 + mentoExchangeProvider(): 0x4f62feec + mentoExchangeId(): 0xd373b333 + owner(): 0x8da5cb5b + CUSD_GAS_COSTS(): 0x32f90ac3 +events: + Bought(address,uint256,uint256): 0xa9a40dec7a304e5915d11358b968c1e8d365992abf20f82285d1df1b30c8e24c + BoughtFromMento(address,uint256,uint256): 0x8e2ac24d7ef5662ee242823a19dbd1c952b3e96ae127228f4bbce83e2816e3fb + BoughtFromUniswap(address,uint256,uint256): 0xdb1f2a6cbbfd964f19c648b140a35992aa80f482df8f519d3211d0bd86c9f335 +errors: {} diff --git a/.agents/skills/gooddollar/references/contracts/CFAv1Forwarder.abi.yaml b/.agents/skills/gooddollar/references/contracts/CFAv1Forwarder.abi.yaml new file mode 100644 index 0000000..32ba0de --- /dev/null +++ b/.agents/skills/gooddollar/references/contracts/CFAv1Forwarder.abi.yaml @@ -0,0 +1,237 @@ +# CFAv1Forwarder — convenience wrapper for ConstantFlowAgreementV1 +# Allows direct interaction with CFA functions without manually routing through +# the Host's batchCall / forwardBatchCall. Operates as a trusted forwarder, +# preserving msg.sender via EIP-2771. +# +# Each forwarder call is a standalone transaction — forwarder calls cannot be +# combined in a Host.batchCall. To batch multiple operations atomically (e.g. +# wrap tokens + create stream), use Host.batchCall with the raw CFA agreement +# (operationType 201). See Superfluid.abi.yaml for batch operation details. +# Tradeoff: forwarder calls produce human-readable descriptions in wallets +# (e.g. "setFlowrate(token, receiver, flowrate)"), while Host.batchCall +# shows encoded tuples that are difficult for users to verify. +# +# This contract has no events — all events are emitted by the underlying CFA. +# Errors from the CFA (and Host) propagate through to the caller. + +meta: + name: CFAv1Forwarder + version: v1 + source: + - https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/refs/heads/dev/packages/ethereum-contracts/contracts/utils/CFAv1Forwarder.sol + - https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/refs/heads/dev/packages/ethereum-contracts/contracts/utils/ForwarderBase.sol + inherits: [ForwarderBase] + deployments: + # Same address on all networks except avalanche-fuji + mainnet: + eth-mainnet: "0xcfA132E353cB4E398080B9700609bb008eceB125" + polygon-mainnet: "0xcfA132E353cB4E398080B9700609bb008eceB125" + xdai-mainnet: "0xcfA132E353cB4E398080B9700609bb008eceB125" + base-mainnet: "0xcfA132E353cB4E398080B9700609bb008eceB125" + optimism-mainnet: "0xcfA132E353cB4E398080B9700609bb008eceB125" + arbitrum-one: "0xcfA132E353cB4E398080B9700609bb008eceB125" + bsc-mainnet: "0xcfA132E353cB4E398080B9700609bb008eceB125" + avalanche-c: "0xcfA132E353cB4E398080B9700609bb008eceB125" + celo-mainnet: "0xcfA132E353cB4E398080B9700609bb008eceB125" + scroll-mainnet: "0xcfA132E353cB4E398080B9700609bb008eceB125" + degenchain: "0xcfA132E353cB4E398080B9700609bb008eceB125" + testnet: + avalanche-fuji: "0x2CDd45c5182602a36d391F7F16DD9f8386C3bD8D" + base-sepolia: "0xcfA132E353cB4E398080B9700609bb008eceB125" + eth-sepolia: "0xcfA132E353cB4E398080B9700609bb008eceB125" + optimism-sepolia: "0xcfA132E353cB4E398080B9700609bb008eceB125" + scroll-sepolia: "0xcfA132E353cB4E398080B9700609bb008eceB125" + deploymentCreationBlocks: + mainnet: + celo-mainnet: 17404156 + +# == Glossary == +# flowrate — token transfer rate in wad/second (int96) +# flowOperator — account authorized to create/update/delete flows on behalf of another +# buffer — deposit locked as solvency collateral while a flow is active +# permissions — bitmask of create | update | delete rights for an operator +# flowrateAllowance — max flowrate an operator may set per individual flow + +# == Flow Management == +# High-level functions that automatically create, update, or delete flows as needed. + +setFlowrate: + # Smart setter: creates a new flow if none exists, updates if flowrate changed, + # deletes if flowrate is zero. No-ops if the current rate already matches. + notes: + - "Gotcha: Negative flowrate values revert with CFA_FWD_INVALID_FLOW_RATE." + mutability: nonpayable + access: anyone # flow from msg.sender + inputs: + - token: address + - receiver: address + - flowrate: int96 # must be >= 0 + outputs: + - bool + errors: [CFA_FWD_INVALID_FLOW_RATE] + +setFlowrateFrom: + # Same as setFlowrate but can be called by a flow operator on behalf of `sender`. + # msg.sender must have sufficient operator permissions and flowrateAllowance. + mutability: nonpayable + access: sender | operator + inputs: + - token: address + - sender: address + - receiver: address + - flowrate: int96 + outputs: + - bool + errors: [CFA_FWD_INVALID_FLOW_RATE] + +# == Low-Level Flow Operations == +# Direct wrappers around CFA functions. These give full control (including userData) +# but require the caller to know whether a flow already exists. +# If sender != msg.sender, the *ByOperator variant is used internally. + +createFlow: + # Create a new flow. Reverts if a flow already exists between sender and receiver. + mutability: nonpayable + access: sender | operator + inputs: + - token: address + - sender: address + - receiver: address + - flowrate: int96 + - userData: bytes + outputs: + - bool + +updateFlow: + # Update an existing flow's rate. Reverts if no flow exists. + mutability: nonpayable + access: sender | operator + inputs: + - token: address + - sender: address + - receiver: address + - flowrate: int96 + - userData: bytes + outputs: + - bool + +deleteFlow: + # Delete an existing flow. Can be called by sender, receiver, or an operator. + # If msg.sender is neither sender nor receiver, deleteFlowByOperator is used. + mutability: nonpayable + access: sender | receiver | operator + inputs: + - token: address + - sender: address + - receiver: address + - userData: bytes + outputs: + - bool + +# == ACL (Operator Permissions) == + +grantPermissions: + # Grant full create/update/delete permissions with max flowrateAllowance to an operator. + # Convenience wrapper — equivalent to updateFlowOperatorPermissions with full control. + mutability: nonpayable + access: anyone # grants on msg.sender's flows + inputs: + - token: address + - flowOperator: address + outputs: + - bool + +revokePermissions: + # Revoke all permissions from an operator. Does not affect existing flows. + mutability: nonpayable + access: anyone # revokes on msg.sender's flows + inputs: + - token: address + - flowOperator: address + outputs: + - bool + +updateFlowOperatorPermissions: + # Set granular operator permissions and flowrate allowance. + notes: + - "Gotcha: flowrateAllowance limits per-flow rate, NOT aggregate net flow." + mutability: nonpayable + access: anyone # grants on msg.sender's flows + inputs: + - token: address + - flowOperator: address + - permissions: uint8 # bitmask: 1=create, 2=update, 4=delete + - flowrateAllowance: int96 + outputs: + - bool + +# == Flow Queries == + +getFlowrate: + mutability: view + inputs: + - token: address + - sender: address + - receiver: address + outputs: + - flowrate: int96 + +getFlowInfo: + mutability: view + inputs: + - token: address + - sender: address + - receiver: address + outputs: + - lastUpdated: uint256 + - flowrate: int96 + - deposit: uint256 + - owedDeposit: uint256 + +getBufferAmountByFlowrate: + # Returns the deposit/buffer required for a given flowrate. + notes: + - "Gotcha: This value is governance-configurable and may change over time. Changes only affect newly created/updated flows." + mutability: view + inputs: + - token: address + - flowrate: int96 + outputs: + - bufferAmount: uint256 + +getAccountFlowrate: + # Net aggregate flowrate for an account (incoming minus outgoing). + mutability: view + inputs: + - token: address + - account: address + outputs: + - flowrate: int96 + +getAccountFlowInfo: + mutability: view + inputs: + - token: address + - account: address + outputs: + - lastUpdated: uint256 + - flowrate: int96 + - deposit: uint256 + - owedDeposit: uint256 + +# == ACL Queries == + +getFlowOperatorPermissions: + mutability: view + inputs: + - token: address + - sender: address + - flowOperator: address + outputs: + - permissions: uint8 + - flowrateAllowance: int96 + +# == Errors == + +errors: + - CFA_FWD_INVALID_FLOW_RATE # flowrate argument was negative diff --git a/.agents/skills/gooddollar/references/contracts/CFAv1Forwarder.selectors.yaml b/.agents/skills/gooddollar/references/contracts/CFAv1Forwarder.selectors.yaml new file mode 100644 index 0000000..f98e21e --- /dev/null +++ b/.agents/skills/gooddollar/references/contracts/CFAv1Forwarder.selectors.yaml @@ -0,0 +1,19 @@ +# Generated by scripts/selectors.mjs +functions: + setFlowrate(address,address): 0x2f57fb6f + setFlowrateFrom(address,address,address,int96): 0xc5ad5c1a + createFlow(address,address,address,int96,bytes): 0xe15536b6 + updateFlow(address,address,address,int96,bytes): 0x0c033991 + deleteFlow(address,address,address,bytes): 0xb4b333c6 + grantPermissions(address,address): 0x7243fb93 + revokePermissions(address,address): 0x0bd0728d + updateFlowOperatorPermissions(address,address): 0x42294caf + getFlowrate(address,address,address): 0x1d8b6526 + getFlowInfo(address,address,address): 0x2860fd93 + getBufferAmountByFlowrate(address,int96): 0x09f0b495 + getAccountFlowrate(address,address): 0x22c904d9 + getAccountFlowInfo(address,address): 0x0f1ac495 + getFlowOperatorPermissions(address,address,address): 0x4d3f60f9 +events: +{} +errors: {} diff --git a/.agents/skills/gooddollar/references/contracts/ConstantFlowAgreementV1.abi.yaml b/.agents/skills/gooddollar/references/contracts/ConstantFlowAgreementV1.abi.yaml new file mode 100644 index 0000000..afaec5d --- /dev/null +++ b/.agents/skills/gooddollar/references/contracts/ConstantFlowAgreementV1.abi.yaml @@ -0,0 +1,560 @@ +# Superfluid Constant Flow Agreement (CFA) v1 +# Manages continuous per-second token streams between accounts. +# +# NOTE: emits/errors mappings are traced from source code — verify against implementation. +# Proxy/upgradability functions (castrate, updateCode, getCodeAddress, proxiableUUID) +# are omitted — they belong to the UUPSProxiable / AgreementBase layer. +# Pure helpers addPermissions/removePermissions are omitted — they were made public +# for testability only and are not part of the protocol interface. + +meta: + name: ConstantFlowAgreementV1 + version: v1 + source: + - https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/refs/heads/dev/packages/ethereum-contracts/contracts/agreements/ConstantFlowAgreementV1.sol + - https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/refs/heads/dev/packages/ethereum-contracts/contracts/interfaces/agreements/IConstantFlowAgreementV1.sol + - https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/refs/heads/dev/packages/ethereum-contracts/contracts/agreements/AgreementBase.sol + implements: [IConstantFlowAgreementV1, ISuperAgreement] + inherits: [AgreementBase] + deployments: + mainnet: + eth-mainnet: "0x2844c1BBdA121E9E43105630b9C8310e5c72744b" + polygon-mainnet: "0x6EeE6060f715257b970700bc2656De21dEdF074C" + xdai-mainnet: "0xEbdA4ceF883A7B12c4E669Ebc58927FBa8447C7D" + base-mainnet: "0x19ba78B9cDB05A877718841c574325fdB53601bb" + optimism-mainnet: "0x204C6f131bb7F258b2Ea1593f5309911d8E458eD" + arbitrum-one: "0x731FdBB12944973B500518aea61942381d7e240D" + bsc-mainnet: "0x49c38108870e74Cb9420C0991a85D3edd6363F75" + avalanche-c: "0x6946c5B38Ffea373b0a2340b4AEf0De8F6782e58" + celo-mainnet: "0x9d369e78e1a682cE0F8d9aD849BeA4FE1c3bD3Ad" + scroll-mainnet: "0xB3bcD6da1eeB6c97258B3806A853A6dcD3B6C00c" + degenchain: "0x82cc052d1b17aC554a22A88D5876B56c6b51e95c" + testnet: + avalanche-fuji: "0x16843ac25Ccc58Aa7960ba05f61cBB17b36b130A" + base-sepolia: "0x6836F23d6171D74Ef62FcF776655aBcD2bcd62Ef" + eth-sepolia: "0x6836F23d6171D74Ef62FcF776655aBcD2bcd62Ef" + optimism-sepolia: "0x8a3170AdbC67233196371226141736E4151e7C26" + scroll-sepolia: "0xbc46B4Aa41c055578306820013d4B65fff42711E" + deploymentCreationBlocks: + mainnet: + celo-mainnet: 16393492 + +# == Abbreviations == +# 3Ps — Three Periods: liquidation, patrician, and pleb (solvency model) +# ACL — Access Control List (flow operator permissions) +# CFA — Constant Flow Agreement +# ctx — context (Superfluid call context bytes, carries msg.sender and userData) +# GDA — General Distribution Agreement (the other Superfluid agreement) +# PPP — Patrician-Pleb-Pirate (the 3Ps solvency periods) + +# == Glossary == +# flow / stream — continuous per-second token transfer, used interchangeably +# flowRate — tokens per second (int96, wei-denominated); positive = outgoing +# deposit — buffer locked when opening a flow; protects against insolvency +# owed deposit — portion of deposit owed back to the sender by a Super App receiver +# flow operator — an address authorized to create/update/delete flows on behalf of a sender +# flow rate allowance — maximum net flow rate an operator may allocate (int96); decrements on use +# permissions bitmask — uint8: bit 0 = create (1), bit 1 = update (2), bit 2 = delete (4) +# liquidation — closing an insolvent sender's flow; rewards go to the liquidator or bond +# patrician period — grace window after insolvency where reward goes to the bond account +# pleb period — window after patrician where reward goes to the liquidator +# pirate / bailout — state where total deposit cannot cover the deficit; protocol bails out +# Super App — a contract registered with the Host that receives agreement callbacks +# app credit — deposit credit enabling "zero-balance Super Apps" to relay flows +# without pre-funded tokens. 1:1 relay (one in, one out at same rate) +# always works at zero balance. Fan-out (1:N) needs the app to hold +# tokens. Credit is settled as "owed deposit" on the original sender. +# critical — an account whose available balance is negative (eligible for liquidation) +# jailed — a Super App penalized for violating protocol rules; loses callbacks +# +# == Time Conventions == +# Conventional seconds-per-period used in Superfluid apps for flow rate conversion: +# month: 2628000 (365.25 / 12 * 86400) +# year: 31536000 (365 * 86400) +# Flow rate from a monthly amount: flowRate = monthlyAmount / 2628000 +# Flow rate from a yearly amount: flowRate = yearlyAmount / 31536000 + +# == Flow Management == +# Core operations for creating, updating, and deleting token streams. +# Functions with ctx are called through the Host — either via +# Host.callAgreement (single op) or Host.batchCall (operationType 201). +# For batchCall, the data field is abi.encode(callData, userData) where +# callData is the full ABI-encoded function call with an empty ctx ("0x") +# as placeholder. The Host replaces the placeholder with the real context. +# The access field reflects who can initiate the call, not the direct caller. + +createFlow: + # Start a new stream from ctx.msgSender to receiver. + # The deposit amount depends on the governance-configured liquidation period + # and minimum deposit. The lower 32 bits of the deposit are clipped (rounded up). + notes: + - "Gotcha: A deposit is taken as a safety margin for solvency agents." + mutability: nonpayable + access: anyone # flow from ctx.msgSender + inputs: + - token: address + - receiver: address + - flowRate: int96 # must be > 0 + - ctx: bytes + outputs: + - newCtx: bytes + emits: [FlowUpdated, FlowUpdatedExtension] + errors: [CFA_ZERO_ADDRESS_RECEIVER, CFA_NO_SELF_FLOW, CFA_INVALID_FLOW_RATE, CFA_FLOW_ALREADY_EXISTS, CFA_INSUFFICIENT_BALANCE] + +updateFlow: + # Change the flow rate of an existing stream from ctx.msgSender to receiver. + # Note: owedDeposit accumulates when a Super App receiver uses app credit to + # open outgoing streams. The sender bears the deposit cost for those streams. + notes: + - "Gotcha: Deposit is adjusted to match the new flow rate but never refunds owed deposit — that adjustment happens separately via the app credit system." + mutability: nonpayable + access: anyone # flow from ctx.msgSender + inputs: + - token: address + - receiver: address + - flowRate: int96 # must be > 0 + - ctx: bytes + outputs: + - newCtx: bytes + emits: [FlowUpdated, FlowUpdatedExtension] + errors: [CFA_ZERO_ADDRESS_RECEIVER, CFA_NO_SELF_FLOW, CFA_INVALID_FLOW_RATE, CFA_FLOW_DOES_NOT_EXIST, CFA_INSUFFICIENT_BALANCE] + +deleteFlow: + # Stop a stream between sender and receiver. + # During liquidation the reward distribution depends on the solvency period: + # patrician → bond account gets reward; pleb → liquidator gets reward; + # pirate → liquidator gets full single deposit, protocol covers the bailout. + notes: + - "Gotcha: Third-party callers (not sender, receiver, or operator) only succeed if the sender is critical (negative available balance) or either party is jailed." + mutability: nonpayable + access: sender | receiver | operator | anyone(if-critical-or-jailed) + inputs: + - token: address + - sender: address + - receiver: address + - ctx: bytes + outputs: + - newCtx: bytes + emits: [FlowUpdated, FlowUpdatedExtension] + errors: [CFA_ZERO_ADDRESS_SENDER, CFA_ZERO_ADDRESS_RECEIVER, CFA_FLOW_DOES_NOT_EXIST, CFA_NON_CRITICAL_SENDER] + +# == Operator Flow Management == +# Act on behalf of another account. Requires ACL permissions granted by the sender. +# The operator's flow rate allowance is decremented on create/update. +# Functions with ctx are called through the Host. + +createFlowByOperator: + # Create a flow on behalf of sender. Consumes flow rate allowance. + notes: + - "Gotcha: Reverts if ctx.msgSender IS the sender — use createFlow instead." + mutability: nonpayable + access: operator + inputs: + - token: address + - sender: address + - receiver: address + - flowRate: int96 # must be > 0 + - ctx: bytes + outputs: + - newCtx: bytes + emits: [FlowUpdated, FlowUpdatedExtension] + errors: [CFA_ACL_NO_SENDER_CREATE, CFA_ACL_OPERATOR_NO_CREATE_PERMISSIONS, CFA_ACL_FLOW_RATE_ALLOWANCE_EXCEEDED, CFA_ZERO_ADDRESS_RECEIVER, CFA_NO_SELF_FLOW, CFA_INVALID_FLOW_RATE, CFA_FLOW_ALREADY_EXISTS, CFA_INSUFFICIENT_BALANCE] + +updateFlowByOperator: + # Update a flow on behalf of sender. Only consumes allowance if flow rate increases. + # If flowRateAllowance is type(int96).max, it is treated as unlimited. + notes: + - "Gotcha: If the new rate is lower than the old rate, no allowance is consumed." + mutability: nonpayable + access: operator + inputs: + - token: address + - sender: address + - receiver: address + - flowRate: int96 # must be > 0 + - ctx: bytes + outputs: + - newCtx: bytes + emits: [FlowUpdated, FlowUpdatedExtension] + errors: [CFA_ACL_NO_SENDER_UPDATE, CFA_ACL_OPERATOR_NO_UPDATE_PERMISSIONS, CFA_ACL_FLOW_RATE_ALLOWANCE_EXCEEDED, CFA_ZERO_ADDRESS_RECEIVER, CFA_NO_SELF_FLOW, CFA_INVALID_FLOW_RATE, CFA_FLOW_DOES_NOT_EXIST, CFA_INSUFFICIENT_BALANCE] + +deleteFlowByOperator: + # Delete a flow on behalf of sender. Does not consume flow rate allowance. + mutability: nonpayable + access: operator + inputs: + - token: address + - sender: address + - receiver: address + - ctx: bytes + outputs: + - newCtx: bytes + emits: [FlowUpdated, FlowUpdatedExtension] + errors: [CFA_ACL_OPERATOR_NO_DELETE_PERMISSIONS, CFA_ZERO_ADDRESS_SENDER, CFA_ZERO_ADDRESS_RECEIVER, CFA_FLOW_DOES_NOT_EXIST, CFA_NON_CRITICAL_SENDER] + +# == Flow Queries == + +realtimeBalanceOf: + # Compute the real-time CFA balance contribution for an account. + # Returns the dynamic balance delta (flowRate * elapsed), total deposit held, + # and total owed deposit. This is called by the token's realtimeBalanceOfNow + # to assemble the full balance across all agreements. + # To get an account's actual token balance, use SuperToken.realtimeBalanceOfNow + # (or SuperToken.balanceOf for ERC-20 compatible, clamped to zero). + # It can be deeply negative for net-outflow accounts as time progresses. + notes: + - "Gotcha: Returns only the CFA portion of the balance, not the total." + - "Gotcha: The returned dynamicBalance is a delta, not an absolute balance." + mutability: view + inputs: + - token: address + - account: address + - time: uint256 + outputs: + - dynamicBalance: int256 # flowRate * (time - lastUpdate); can be negative + - deposit: uint256 # total deposit locked across all outflows + - owedDeposit: uint256 # total owed deposit from Super App receivers + +getFlow: + # Get flow data between a specific sender-receiver pair. + mutability: view + inputs: + - token: address + - sender: address + - receiver: address + outputs: + - timestamp: uint256 # last update time + - flowRate: int96 + - deposit: uint256 + - owedDeposit: uint256 + +getFlowByID: + # Get flow data using the agreement ID (keccak256 of sender and receiver). + mutability: view + inputs: + - token: address + - flowId: bytes32 # keccak256(abi.encode(sender, receiver)) + outputs: + - timestamp: uint256 + - flowRate: int96 + - deposit: uint256 + - owedDeposit: uint256 + +getAccountFlowInfo: + # Aggregated flow state for an account across all its CFA flows. + mutability: view + inputs: + - token: address + - account: address + outputs: + - timestamp: uint256 # last time any flow was updated for this account + - flowRate: int96 # net flow rate (inflows - outflows) + - deposit: uint256 # sum of deposits across all outflows + - owedDeposit: uint256 # sum of owed deposits across all outflows + +getNetFlow: + # Net flow rate for an account (sum of inflows minus outflows). + mutability: view + inputs: + - token: address + - account: address + outputs: + - flowRate: int96 + +# == ACL Management == +# Manage flow operator permissions and flow rate allowances. +# The caller (ctx.msgSender) is always the permission granter — they control +# who can operate on their own flows. +# Functions with ctx are called through the Host. + +updateFlowOperatorPermissions: + # Set exact permissions and flow rate allowance for a flow operator. + mutability: nonpayable + access: anyone # grants on ctx.msgSender's flows + inputs: + - token: address + - flowOperator: address + - permissions: uint8 # bitmask: 1=create, 2=update, 4=delete + - flowRateAllowance: int96 + - ctx: bytes + outputs: + - newCtx: bytes + emits: [FlowOperatorUpdated] + errors: [CFA_ACL_UNCLEAN_PERMISSIONS, CFA_ACL_NO_SENDER_FLOW_OPERATOR, CFA_ACL_NO_NEGATIVE_ALLOWANCE] + +authorizeFlowOperatorWithFullControl: + # Grant all permissions (create+update+delete) with unlimited allowance. + # Shorthand for updateFlowOperatorPermissions(token, op, 7, type(int96).max, ctx). + mutability: nonpayable + access: anyone # grants on ctx.msgSender's flows + inputs: + - token: address + - flowOperator: address + - ctx: bytes + outputs: + - newCtx: bytes + emits: [FlowOperatorUpdated] + errors: [CFA_ACL_UNCLEAN_PERMISSIONS, CFA_ACL_NO_SENDER_FLOW_OPERATOR, CFA_ACL_NO_NEGATIVE_ALLOWANCE] + +revokeFlowOperatorWithFullControl: + # Revoke all permissions and set allowance to zero. + # Shorthand for updateFlowOperatorPermissions(token, op, 0, 0, ctx). + mutability: nonpayable + access: anyone # revokes on ctx.msgSender's flows + inputs: + - token: address + - flowOperator: address + - ctx: bytes + outputs: + - newCtx: bytes + emits: [FlowOperatorUpdated] + errors: [CFA_ACL_UNCLEAN_PERMISSIONS, CFA_ACL_NO_SENDER_FLOW_OPERATOR, CFA_ACL_NO_NEGATIVE_ALLOWANCE] + +increaseFlowRateAllowance: + # Increase flow rate allowance for an operator by a delta. + # Delegates to increaseFlowRateAllowanceWithPermissions with permissionsToAdd=0. + mutability: nonpayable + access: anyone # ctx.msgSender's allowance + inputs: + - token: address + - flowOperator: address + - addedFlowRateAllowance: int96 + - ctx: bytes + outputs: + - newCtx: bytes + emits: [FlowOperatorUpdated] + errors: [CFA_ACL_UNCLEAN_PERMISSIONS, CFA_ACL_NO_SENDER_FLOW_OPERATOR, CFA_ACL_NO_NEGATIVE_ALLOWANCE] + +decreaseFlowRateAllowance: + # Decrease flow rate allowance for an operator by a delta. + # Delegates to decreaseFlowRateAllowanceWithPermissions with permissionsToRemove=0. + mutability: nonpayable + access: anyone # ctx.msgSender's allowance + inputs: + - token: address + - flowOperator: address + - subtractedFlowRateAllowance: int96 + - ctx: bytes + outputs: + - newCtx: bytes + emits: [FlowOperatorUpdated] + errors: [CFA_ACL_UNCLEAN_PERMISSIONS, CFA_ACL_NO_SENDER_FLOW_OPERATOR, CFA_ACL_NO_NEGATIVE_ALLOWANCE] + +increaseFlowRateAllowanceWithPermissions: + # Increase flow rate allowance and add permission bits in one call. + # permissionsToAdd is OR'd with existing permissions. + mutability: nonpayable + access: anyone # ctx.msgSender's allowance + inputs: + - token: address + - flowOperator: address + - permissionsToAdd: uint8 # bitmask OR'd onto existing permissions + - addedFlowRateAllowance: int96 + - ctx: bytes + outputs: + - newCtx: bytes + emits: [FlowOperatorUpdated] + errors: [CFA_ACL_UNCLEAN_PERMISSIONS, CFA_ACL_NO_SENDER_FLOW_OPERATOR, CFA_ACL_NO_NEGATIVE_ALLOWANCE] + +decreaseFlowRateAllowanceWithPermissions: + # Decrease flow rate allowance and remove permission bits in one call. + # permissionsToRemove is AND-NOT'd from existing permissions. + notes: + - "Gotcha: Reverts if the resulting allowance would go negative." + mutability: nonpayable + access: anyone # ctx.msgSender's allowance + inputs: + - token: address + - flowOperator: address + - permissionsToRemove: uint8 # bitmask AND-NOT'd from existing permissions + - subtractedFlowRateAllowance: int96 + - ctx: bytes + outputs: + - newCtx: bytes + emits: [FlowOperatorUpdated] + errors: [CFA_ACL_UNCLEAN_PERMISSIONS, CFA_ACL_NO_SENDER_FLOW_OPERATOR, CFA_ACL_NO_NEGATIVE_ALLOWANCE] + +# == ACL Queries == + +getFlowOperatorData: + # Get permissions and allowance for a flow operator. + mutability: view + inputs: + - token: address + - sender: address # the permission granter + - flowOperator: address # the permission grantee + outputs: + - flowOperatorId: bytes32 # keccak256(abi.encode("flowOperator", sender, flowOperator)) + - permissions: uint8 # bitmask: 1=create, 2=update, 4=delete + - flowRateAllowance: int96 + +getFlowOperatorDataByID: + # Get permissions and allowance using the pre-computed operator ID. + mutability: view + inputs: + - token: address + - flowOperatorId: bytes32 + outputs: + - permissions: uint8 + - flowRateAllowance: int96 + +# == Solvency Queries == +# Check whether an account is in the patrician period (grace window for liquidation). + +isPatricianPeriodNow: + # Check patrician period status using the Host's current timestamp. + mutability: view + inputs: + - token: address + - account: address + outputs: + - isCurrentlyPatricianPeriod: bool + - timestamp: uint256 # the Host's block.timestamp used for the check + +isPatricianPeriod: + # Check patrician period status at a specific timestamp. + mutability: view + inputs: + - token: address + - account: address + - timestamp: uint256 + outputs: + - bool + +# == Deposit Helpers == + +getMaximumFlowRateFromDeposit: + # Calculate the maximum flow rate achievable with a given deposit. + notes: + - "Gotcha: Deposit is clipped (lower 32 bits zeroed) and rounded down." + mutability: view + inputs: + - token: address # needed to look up liquidation period from governance + - deposit: uint256 + outputs: + - flowRate: int96 + errors: [CFA_DEPOSIT_TOO_BIG] + +getDepositRequiredForFlowRate: + # Calculate the deposit required for a given flow rate. + # Returns max(minimumDeposit, flowRate * liquidationPeriod) with rounding. + mutability: view + inputs: + - token: address # needed to look up liquidation period and minimum deposit + - flowRate: int96 + outputs: + - deposit: uint256 + errors: [CFA_INVALID_FLOW_RATE, CFA_FLOW_RATE_TOO_BIG] + +# == Protocol Constants == + +agreementType: + # Returns keccak256("org.superfluid-finance.agreements.ConstantFlowAgreement.v1") + mutability: pure + outputs: + - bytes32 + +DEFAULT_MINIMUM_DEPOSIT: + # Minimum deposit floor: uint96(1 << 32) ≈ 4.29 * 10^9 wei. + # Governance may set a higher per-token minimum; this is the absolute floor. + mutability: view + outputs: + - uint256 + +MAXIMUM_DEPOSIT: + # Maximum deposit cap: type(int96).max + mutability: view + outputs: + - uint256 + +MAXIMUM_FLOW_RATE: + # Maximum flow rate: type(int96).max + mutability: view + outputs: + - uint256 + +CFA_HOOK_GAS_LIMIT: + # Gas limit for external hook calls (Super App callbacks): 250,000 + mutability: view + outputs: + - uint64 + +# == Events == + +events: + FlowUpdated: + # Emitted on every create, update, and delete flow operation. + # totalSenderFlowRate and totalReceiverFlowRate are the NET flow rates + # after the operation, not the individual flow rate. + notes: + - "Gotcha: Always emitted together with FlowUpdatedExtension." + indexed: + - token: address + - sender: address + - receiver: address + data: + - flowRate: int96 # new rate for this specific flow (0 on delete) + - totalSenderFlowRate: int256 # sender's net flow rate after this operation + - totalReceiverFlowRate: int256 + - userData: bytes + + FlowUpdatedExtension: + # Companion event to FlowUpdated. Carries the operator and new deposit. + # Emitted immediately after FlowUpdated so indexers can correlate them. + indexed: + - flowOperator: address # ctx.msgSender who initiated the operation + data: + - deposit: uint256 # new deposit for this specific flow + + FlowOperatorUpdated: + # Emitted when operator permissions or flow rate allowance change. + indexed: + - token: address + - sender: address # the permission granter + - flowOperator: address # the permission grantee + data: + - permissions: uint8 # updated bitmask + - flowRateAllowance: int96 # updated allowance + + # Inherited events (from AgreementBase / UUPSProxiable): + # CodeUpdated — emitted on proxy upgrade (uuid, codeAddress) + # Initialized — emitted on proxy initialization (version) + +# == Errors == + +errors: + # Flow validation + - CFA_FLOW_ALREADY_EXISTS # createFlow when flow exists + - CFA_FLOW_DOES_NOT_EXIST # update/delete when no flow + - CFA_INVALID_FLOW_RATE # flowRate <= 0 + - CFA_NO_SELF_FLOW # sender == receiver + - CFA_ZERO_ADDRESS_SENDER # sender is address(0) + - CFA_ZERO_ADDRESS_RECEIVER # receiver is address(0) + # Solvency + - CFA_INSUFFICIENT_BALANCE # sender cannot cover deposit + - CFA_NON_CRITICAL_SENDER # third-party delete but sender is solvent + - CFA_DEPOSIT_TOO_BIG # deposit > MAXIMUM_DEPOSIT + - CFA_FLOW_RATE_TOO_BIG # flowRate * liquidationPeriod overflows + # ACL + - CFA_ACL_FLOW_RATE_ALLOWANCE_EXCEEDED # operator exceeds granted allowance + - CFA_ACL_NO_NEGATIVE_ALLOWANCE # resulting allowance would be < 0 + - CFA_ACL_NO_SENDER_CREATE # operator cannot be the sender (use createFlow) + - CFA_ACL_NO_SENDER_FLOW_OPERATOR # cannot set yourself as your own operator + - CFA_ACL_NO_SENDER_UPDATE # operator cannot be the sender (use updateFlow) + - CFA_ACL_OPERATOR_NO_CREATE_PERMISSIONS + - CFA_ACL_OPERATOR_NO_DELETE_PERMISSIONS + - CFA_ACL_OPERATOR_NO_UPDATE_PERMISSIONS + - CFA_ACL_UNCLEAN_PERMISSIONS # permission bits outside valid range + # Super App / Host + - CFA_HOOK_OUT_OF_GAS # Super App callback exceeded gas limit + - APP_RULE: # Super App rule violation + inputs: + - _code: uint256 + - AGREEMENT_BASE_ONLY_HOST # call not routed through the Host contract + # SafeCast (inherited from OpenZeppelin) + - SafeCastOverflowedIntToUint: # int256 value overflows on cast to uint256 + inputs: + - value: int256 + - SafeCastOverflowedUintToInt: # uint256 value overflows on cast to int256 + inputs: + - value: uint256 diff --git a/.agents/skills/gooddollar/references/contracts/ConstantFlowAgreementV1.selectors.yaml b/.agents/skills/gooddollar/references/contracts/ConstantFlowAgreementV1.selectors.yaml new file mode 100644 index 0000000..a929e06 --- /dev/null +++ b/.agents/skills/gooddollar/references/contracts/ConstantFlowAgreementV1.selectors.yaml @@ -0,0 +1,33 @@ +# Generated by scripts/selectors.mjs +functions: + createFlow(address,address): 0x7deac86a + updateFlow(address,address): 0xb6214437 + deleteFlow(address,address,address,bytes): 0xb4b333c6 + createFlowByOperator(address,address,address): 0x97b0b745 + updateFlowByOperator(address,address,address): 0xaea4dc29 + deleteFlowByOperator(address,address,address,bytes): 0x4c8b181f + realtimeBalanceOf(address,address,uint256): 0x9b2e48bc + getFlow(address,address,address): 0xe6a1e888 + getFlowByID(address): 0x4eccd8ac + getAccountFlowInfo(address,address): 0x0f1ac495 + getNetFlow(address,address): 0xe8e7e2d1 + updateFlowOperatorPermissions(address,address): 0x42294caf + authorizeFlowOperatorWithFullControl(address,address,bytes): 0x54b770e3 + revokeFlowOperatorWithFullControl(address,address,bytes): 0x062e56ec + increaseFlowRateAllowance(address,address,int96,bytes): 0xac5f5d00 + decreaseFlowRateAllowance(address,address,int96,bytes): 0x5f51fb23 + increaseFlowRateAllowanceWithPermissions(address,address): 0x5e6a4dc3 + decreaseFlowRateAllowanceWithPermissions(address,address): 0x8de39d9b + getFlowOperatorData(address): 0x5f13dbbc + getFlowOperatorDataByID(address,bytes32): 0x09d256ef + isPatricianPeriodNow(address,address): 0x4fe9c291 + isPatricianPeriod(address,address,uint256): 0x4b839e0b + getMaximumFlowRateFromDeposit(): 0x4ba52c34 + getDepositRequiredForFlowRate(): 0xcc111b9e + CFA_HOOK_GAS_LIMIT(): 0xbf3fbc28 +events: + FlowUpdated(address,address,address,int256,bytes): 0x8e3b8f31fe09d2ca20fa7f76ec574bc9fea49f16a91f1ca828154ea76e76a20a + FlowUpdatedExtension(): 0x9bf0b3e0199b411ca09607d040b7672430af5dae9d159b715c9f8004c876065f + FlowOperatorUpdated(address): 0x401d2cb05b3db80617d70aabf976f52d2a5dac64298eadeed7a81ad4bb5d4fdd + # Inherited events (from AgreementBase / UUPSProxiable)(): 0xcabfd4ad95e3bb803739ac513717fccee724fc0c5741e01cf84319a96120eefa +errors: {} diff --git a/.agents/skills/gooddollar/references/contracts/GoodDollarOFTAdapter.abi.yaml b/.agents/skills/gooddollar/references/contracts/GoodDollarOFTAdapter.abi.yaml new file mode 100644 index 0000000..c60d498 --- /dev/null +++ b/.agents/skills/gooddollar/references/contracts/GoodDollarOFTAdapter.abi.yaml @@ -0,0 +1,100 @@ +# GoodDollarOFTAdapter — LayerZero V2 OFT adapter pattern bridging underlying G$ +# Exact bytecode lives in the GoodDollar OFT deployment; this documents the surface agents call. + +meta: + name: GoodDollarOFTAdapter + version: LayerZero-OFT-adapter (generic) + source: + - https://docs.layerzero.network/ + - https://github.com/LayerZero-Labs/devtools + note: > + Flow: optional peers(dstEid) check -> approve underlying to minterBurner if + MessagingFee, refundAddress) paying nativeFee in msg.value when applicable. + SendParam mirrors LayerZero OFT: dstEid, to (bytes32 padded recipient), + amountLD, minAmountLD, extraOptions, composeMsg, oftCmd. + Verify tuple field order and OFT revision against your deployed artifact before mainnet use. + Event names and topic0 hashes vary by OFT package version — pull from the deployment ABI. + related: + - references/guides/bridge.md + +token: + mutability: view + inputs: [] + outputs: + - underlyingToken: address + +minterBurner: + notes: + - "Underlying G$ must approve this spender when burning for cross-chain send." + mutability: view + inputs: [] + outputs: + - minterBurner: address + +oftVersion: + mutability: view + inputs: [] + outputs: + - interfaceId: bytes4 + - version: uint64 + +peers: + notes: + - "Returns bytes32 peer address configured for destination endpoint id." + mutability: view + inputs: + - dstEid: uint32 + outputs: + - peer: bytes32 + +endpoint: + mutability: view + inputs: [] + outputs: + - lzEndpoint: address + +owner: + mutability: view + inputs: [] + outputs: + - account: address + +quoteSend: + notes: + - "Simulates messaging + bridge fee; use nativeFee as msg.value on send when paying in native gas token." + mutability: view + inputs: + - sendParam: SendParam + - payInLzToken: bool + outputs: + - nativeFee: uint256 + - lzTokenFee: uint256 + errors: + - NO_PEER + - LZ_INVALID_OPTIONS + +send: + notes: + - "Payable: include MessagingFee.nativeFee in msg.value when fee is native." + - "Consumes sendParam.amountLD from sender on source chain and emits cross-chain message to dstEid peer." + - "sendParam.to must be destination receiver encoded as bytes32." + mutability: payable + access: sender + inputs: + - sendParam: SendParam + - fee: MessagingFee + - refundAddress: address + outputs: + - msgReceipt: MessageReceipt + - oftReceipt: OFTReceipt + errors: + - NO_PEER + - SLIPPAGE_OR_AMOUNT + - LZ_INVALID_OPTIONS + +events: {} + +errors: + NO_PEER: "Destination peer not configured for dstEid." + LZ_INVALID_OPTIONS: "Composer/options payload rejected by LayerZero." + SLIPPAGE_OR_AMOUNT: "Bridged amount violates minAmount or available balance." diff --git a/.agents/skills/gooddollar/references/contracts/GoodDollarOFTAdapter.selectors.yaml b/.agents/skills/gooddollar/references/contracts/GoodDollarOFTAdapter.selectors.yaml new file mode 100644 index 0000000..e5615a1 --- /dev/null +++ b/.agents/skills/gooddollar/references/contracts/GoodDollarOFTAdapter.selectors.yaml @@ -0,0 +1,12 @@ +# Generated by scripts/selectors.mjs +functions: + token(): 0xfc0c546a + minterBurner(): 0x2ef8c5a4 + approvalRequired(): 0x9f68b964 + oftVersion(): 0x156a0d0f + peers(uint32): 0xbb0b6a53 + endpoint(): 0x5e280f11 + owner(): 0x8da5cb5b +events: +{} +errors: {} diff --git a/.agents/skills/gooddollar/references/contracts/GooddollarSavingsStream.abi.yaml b/.agents/skills/gooddollar/references/contracts/GooddollarSavingsStream.abi.yaml new file mode 100644 index 0000000..d736bc1 --- /dev/null +++ b/.agents/skills/gooddollar/references/contracts/GooddollarSavingsStream.abi.yaml @@ -0,0 +1,210 @@ +# GooddollarSavingsStream (Ubeswap) — G$ native Super Token stake with Superfluid GDA reward stream + +meta: + name: GooddollarSavingsStream + version: "1" + source: + - https://raw.githubusercontent.com/Ubeswap/gooddollar-contracts/main/contracts/GooddollarSavingsStream.sol + - https://raw.githubusercontent.com/Ubeswap/gooddollar-contracts/main/contracts/interfaces/IGooddollarSavingsStream.sol + - https://raw.githubusercontent.com/Ubeswap/gooddollar-contracts/main/contracts/StakingVault.sol + inherits: + - IGooddollarSavingsStream + - Ownable + - ERC2771Context + - ReentrancyGuard + note: > + Celo production savings. Staked principal sits in StakingVault; this contract holds reward + balance and streams via a Superfluid GDA distribution pool (`distributeFlow`). Effective rate is + min(rewardRate, maxRewardRatePerToken * totalSupply / 1e18), throttled when reward balance is low. + Staking token is the G$ native Super Token (`superToken`). Fuse->CELO migration uses `stakeFor` + after bridge. Ubeswap lists this as Celo mainnet savings (streaming). + deployments: + mainnet: + production-celo: + GooddollarSavingsStream: + networkId: 42220 + address: "0x059ee811414230d1Fb157878D2b491240F4D8d3B" + creationBlock: 66685884 + related: + - https://github.com/Ubeswap/gooddollar-contracts/blob/main/README.md + - https://celoscan.io/address/0x059ee811414230d1Fb157878D2b491240F4D8d3B + - references/contracts/SuperToken.abi.yaml + - references/guides/migrate-fuse-staking-to-celo-savings.md + - references/deep-researches/fuse-to-celo-staking-migration.md + +totalSupply: + mutability: view + inputs: [] + outputs: + - supply: uint256 + +balanceOf: + mutability: view + inputs: + - account: address + outputs: + - balance: uint256 + +getDailyRewards: + mutability: view + inputs: [] + outputs: + - daily: uint256 + +getEffectiveFlowRate: + notes: + - "Returns 0 when totalSupply is 0, rewardRate is 0, or reward balance cannot sustain MIN_STREAM_BUFFER_SECONDS." + - "Otherwise min(global rewardRate, APR cap) as int96 for Superfluid distributeFlow." + mutability: view + inputs: [] + outputs: + - flowRate: int96 + +periodFinish: + notes: + - "Estimated timestamp when current reward balance is drained at getEffectiveFlowRate; 0 if not streaming." + mutability: view + inputs: [] + outputs: + - finish: uint256 + +getUnits: + mutability: view + inputs: + - account: address + outputs: + - units: uint128 + +getTotalUnits: + mutability: view + inputs: [] + outputs: + - units: uint128 + +stake: + notes: + - "Pulls G$ Super Token from msg.sender, deposits principal to StakingVault, updates GDA pool units, syncFlowRate." + - "Requires prior superToken.approve(this, amount)." + mutability: nonpayable + access: anyone + inputs: + - amount: uint256 + outputs: [] + emits: [Staked] + +stakeFor: + notes: + - "Migrator path: caller funds transfer; stake credits `_balances[recipient]` and pool units for recipient." + - "recipient must not be zero, this, superToken, or vault." + - "Used after Fuse->CELO bridge when backend wallet holds bridged G$." + mutability: nonpayable + access: anyone + inputs: + - amount: uint256 + - recipient: address + outputs: [] + emits: [Staked] + +withdraw: + notes: + - "Reduces stake and pool units, syncFlowRate, then vault.withdraw to msg.sender." + mutability: nonpayable + access: anyone + inputs: + - amount: uint256 + outputs: [] + emits: [Withdrawn] + +exit: + notes: + - "Full withdraw of caller principal via withdraw(balance)." + mutability: nonpayable + access: anyone + inputs: [] + outputs: [] + emits: [Withdrawn] + +addToReward: + notes: + - "Pulls reward Super Token from caller; re-syncs flow rate when balance was throttling the stream." + mutability: nonpayable + access: anyone + inputs: + - reward: uint256 + outputs: [] + emits: [RewardAdded] + +syncFlowRate: + notes: + - "Permissionless; call when tokens were sent directly to the contract so distributeFlow picks up balance." + mutability: nonpayable + access: anyone + inputs: [] + outputs: [] + emits: [FlowRateUpdated] + +setDailyRewards: + mutability: nonpayable + access: owner + inputs: + - _dailyRewards: uint256 + outputs: [] + emits: [DailyRewardsUpdated] + +setMaxRewardRatePerToken: + mutability: nonpayable + access: owner + inputs: + - _value: uint256 + outputs: [] + emits: [MaxRewardRateUpdated] + +recoverERC20: + notes: + - "Cannot recover the G$ Super Token (staking/reward asset)." + mutability: nonpayable + access: owner + inputs: + - tokenAddress: address + - tokenAmount: uint256 + outputs: [] + emits: [Recovered] + +events: + Staked: + indexed: + - user: address + data: + - amount: uint256 + Withdrawn: + indexed: + - user: address + data: + - amount: uint256 + RewardAdded: + data: + - reward: uint256 + DailyRewardsUpdated: + data: + - rewardRate: uint256 + - givenDailyRewards: uint256 + MaxRewardRateUpdated: + data: + - newMaxRate: uint256 + FlowRateUpdated: + data: + - newFlowRate: int96 + Recovered: + indexed: + - token: address + data: + - amount: uint256 + - receiver: address + +errors: + - CannotStakeZero + - CannotWithdrawZero + - InsufficientStake + - InvalidAddress + - NoRewardToAdd + - CannotRecoverStakingToken diff --git a/.agents/skills/gooddollar/references/contracts/GooddollarSavingsStream.selectors.yaml b/.agents/skills/gooddollar/references/contracts/GooddollarSavingsStream.selectors.yaml new file mode 100644 index 0000000..f04d75a --- /dev/null +++ b/.agents/skills/gooddollar/references/contracts/GooddollarSavingsStream.selectors.yaml @@ -0,0 +1,27 @@ +# Generated by scripts/selectors.mjs +functions: + totalSupply(): 0x18160ddd + balanceOf(address): 0x70a08231 + getDailyRewards(): 0x68527008 + getEffectiveFlowRate(): 0xa2efe857 + periodFinish(): 0xebe2b12b + getUnits(address): 0x0fefbc09 + getTotalUnits(): 0xa754a702 + stake(uint256): 0xa694fc3a + stakeFor(uint256,address): 0x51746bb2 + withdraw(uint256): 0x2e1a7d4d + exit(): 0xe9fad8ee + addToReward(uint256): 0x2ce618fa + syncFlowRate(): 0x0e83284a + setDailyRewards(uint256): 0x4adef718 + setMaxRewardRatePerToken(uint256): 0x6a03a9e2 + recoverERC20(address,uint256): 0x8980f11f +events: + Staked(address,uint256): 0x9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d + Withdrawn(address,uint256): 0x7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5 + RewardAdded(uint256): 0xde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d + DailyRewardsUpdated(uint256,uint256): 0x54f5b7ef058007cebca11af0127cd80c0bac4e968788eabb3c1e70d1bfb78edd + MaxRewardRateUpdated(uint256): 0x9041b23d05af9bceefc73becffefd1887907ad55c3d6c6655230b37ef87dbb07 + FlowRateUpdated(int96): 0xd02fcf6b96acb60ac68942c7d5075e11a8a0b38cc865c1916934f4e1f129ded0 + Recovered(address,uint256,address): 0xb197f0a554c4d7840105e6ae65f0e275e9e8605a969dffa8caa7f1f118a2e1f5 +errors: {} diff --git a/.agents/skills/gooddollar/references/contracts/GovernanceStakingV2.abi.yaml b/.agents/skills/gooddollar/references/contracts/GovernanceStakingV2.abi.yaml new file mode 100644 index 0000000..5adccb3 --- /dev/null +++ b/.agents/skills/gooddollar/references/contracts/GovernanceStakingV2.abi.yaml @@ -0,0 +1,202 @@ +# GovernanceStakingV2 (Fuse) — G$ staking share token with GDAO reward accrual +# Deployment key in GoodProtocol release metadata is GovernanceStakingV2. + +meta: + name: GovernanceStakingV2 + version: "2" + source: + - https://raw.githubusercontent.com/GoodDollar/GoodProtocol/master/contracts/governance/GovernanceStaking.sol + - https://raw.githubusercontent.com/GoodDollar/GoodProtocol/master/releases/deployment.json + inherits: + - ERC20Upgradeable + - MultiBaseGovernanceShareField + - DAOUpgradeableContract + - ReentrancyGuardUpgradeable + note: > + Fuse governance staking contract where users stake G$ and receive staking shares (`sG$`) with + GDAO-style rewards minted on reward withdrawal paths. `withdrawStake(0)` means full unstake. + In GoodProtocol `releases/deployment.json` this address is listed as GovernanceStakingV2 on Fuse `production`. + This is the old staking contract in Fuse->CELO migration flows. + deployments: + mainnet: + production: + GovernanceStakingV2: + networkId: 122 + address: "0xB7C3e738224625289C573c54d402E9Be46205546" + creationBlock: 15956809 + related: + - references/guides/migrate-fuse-staking-to-celo-savings.md + - references/deep-researches/fuse-to-celo-staking-migration.md + +getChainBlocksPerMonth: + mutability: pure + inputs: [] + outputs: + - blocks: uint256 + +stake: + notes: + - "Requires prior G$ ERC20 approval to staking contract." + - "Mints staking share token and updates reward productivity before event emission." + mutability: nonpayable + access: anyone + inputs: + - _amount: uint256 + outputs: [] + emits: [Staked] + +withdrawStake: + notes: + - "If _amount is 0, contract interprets it as full user unstake." + - "Burns staking shares, updates productivity, mints pending rewards, then transfers G$ out." + mutability: nonpayable + access: anyone + inputs: + - _amount: uint256 + outputs: [] + emits: [StakeWithdraw] + +withdrawRewards: + notes: + - "Claims rewards without changing staked principal." + mutability: nonpayable + access: anyone + inputs: [] + outputs: + - minted: uint256 + emits: [ReputationEarned] + +setMonthlyRewards: + notes: + - "DAO-controlled update of rewardsPerBlock schedule via avatar authorization." + mutability: nonpayable + access: avatar + inputs: + - _monthlyAmount: uint256 + outputs: [] + +getRewardsPerBlock: + mutability: view + inputs: [] + outputs: + - amount: uint256 + +getProductivity: + mutability: view + inputs: + - _user: address + outputs: + - productivity: uint256 + - rewardDebt: uint256 + +getUserPendingReward: + mutability: view + inputs: + - _user: address + outputs: + - pending: uint256 + +users: + notes: + - "UserInfo getter for internal staking productivity record." + mutability: view + inputs: + - _user: address + outputs: + - amount: uint256 + - rewardDebt: uint256 + +totalRewardsPerShare: + mutability: view + inputs: [] + outputs: + - value: uint256 + +decimals: + mutability: view + inputs: [] + outputs: + - d: uint8 + +totalSupply: + mutability: view + inputs: [] + outputs: + - supply: uint256 + +balanceOf: + mutability: view + inputs: + - account: address + outputs: + - balance: uint256 + +allowance: + mutability: view + inputs: + - owner: address + - spender: address + outputs: + - amount: uint256 + +approve: + mutability: nonpayable + access: anyone + inputs: + - spender: address + - amount: uint256 + outputs: + - ok: bool + emits: [Approval] + +transfer: + mutability: nonpayable + access: anyone + inputs: + - to: address + - amount: uint256 + outputs: + - ok: bool + emits: [Transfer] + +transferFrom: + mutability: nonpayable + access: anyone + inputs: + - from: address + - to: address + - amount: uint256 + outputs: + - ok: bool + emits: [Transfer, Approval] + +events: + ReputationEarned: + indexed: + - staker: address + data: + - amount: uint256 + Staked: + indexed: + - staker: address + data: + - amount: uint256 + StakeWithdraw: + indexed: + - staker: address + data: + - amount: uint256 + Transfer: + indexed: + - from: address + - to: address + data: + - value: uint256 + Approval: + indexed: + - owner: address + - spender: address + data: + - value: uint256 + +errors: {} diff --git a/.agents/skills/gooddollar/references/contracts/GovernanceStakingV2.selectors.yaml b/.agents/skills/gooddollar/references/contracts/GovernanceStakingV2.selectors.yaml new file mode 100644 index 0000000..37388ba --- /dev/null +++ b/.agents/skills/gooddollar/references/contracts/GovernanceStakingV2.selectors.yaml @@ -0,0 +1,26 @@ +# Generated by scripts/selectors.mjs +functions: + getChainBlocksPerMonth(): 0x213b329e + stake(uint256): 0xa694fc3a + withdrawStake(uint256): 0x25d5971f + withdrawRewards(): 0xc7b8981c + setMonthlyRewards(uint256): 0xc76279a2 + getRewardsPerBlock(): 0x0c1cd7f3 + getProductivity(address): 0x28e964e9 + getUserPendingReward(address): 0xc6710629 + users(address): 0xa87430ba + totalRewardsPerShare(): 0xbf8e9b6e + decimals(): 0x313ce567 + totalSupply(): 0x18160ddd + balanceOf(address): 0x70a08231 + allowance(address,address): 0xdd62ed3e + approve(address,uint256): 0x095ea7b3 + transfer(address,uint256): 0xa9059cbb + transferFrom(address,address,uint256): 0x23b872dd +events: + ReputationEarned(address,uint256): 0x43848d0574703c28d68ae8958e0571521618f60c4bcacfb094cff2156eaae0f1 + Staked(address,uint256): 0x9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d + StakeWithdraw(address,uint256): 0x1248d48e2de900a1010c7fce73506969ecec243600bfc08b641b158f26d857cd + Transfer(address,address,uint256): 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef + Approval(address,address,uint256): 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925 +errors: {} diff --git a/.agents/skills/gooddollar/references/contracts/IdentityV3.abi.yaml b/.agents/skills/gooddollar/references/contracts/IdentityV3.abi.yaml new file mode 100644 index 0000000..aea2efe --- /dev/null +++ b/.agents/skills/gooddollar/references/contracts/IdentityV3.abi.yaml @@ -0,0 +1,390 @@ +# IdentityV3 — whitelist, blacklist, DID, and connected-account graph for GoodDollar +# UBI eligibility uses getWhitelistedRoot; connectAccount links extra wallets to a root. + +meta: + name: IdentityV3 + version: v3 + source: + - https://raw.githubusercontent.com/GoodDollar/GoodProtocol/master/contracts/identity/IdentityV3.sol + inherits: + - DAOUpgradeableContract + - AccessControlUpgradeable + - PausableUpgradeable + - EIP712Upgradeable + note: > + isWhitelisted enforces authenticationPeriod against dateAuthenticated and status==1, + with fallback to oldIdentity. getWhitelistedRoot returns the root address for a + connected wallet or the wallet itself when directly whitelisted. + deployments: + mainnet: + production: + Identity: + networkId: 122 + address: "0x2F9C28de9e6d44b71B91b8BA337A5D82e308E7BE" + creationBlock: 22022901 + IdentityOld: + networkId: 122 + address: "0xFa8d865A962ca8456dF331D78806152d3aC5B84F" + creationBlock: 6246324 + production-celo: + Identity: + networkId: 42220 + address: "0xC361A6E67822a0EDc17D899227dd9FC50BD62F42" + creationBlock: 17237952 + production-xdc: + Identity: + networkId: 50 + address: "0x27a4a02C9ed591E1a86e2e5D05870292c34622C9" + creationBlock: 95143058 + related: + - https://docs.gooddollar.org/for-developers/core-contracts/identity + - https://docs.gooddollar.org/user-guides/connect-another-wallet-address-to-identity + +initialize: + mutability: nonpayable + access: initializer + inputs: + - _owner: address + - _oldIdentity: address + outputs: [] + +initDAO: + notes: + - "Wires NameService via setDAO and transfers DEFAULT_ADMIN_ROLE, PAUSER_ROLE, IDENTITY_ADMIN_ROLE to avatar." + mutability: nonpayable + access: DEFAULT_ADMIN_ROLE + inputs: + - _ns: address + outputs: [] + errors: [ALREADY_INITIALIZED] + +setAuthenticationPeriod: + mutability: nonpayable + access: avatar + inputs: + - period: uint256 + outputs: [] + errors: [WHEN_NOT_PAUSED_REVERT] + +authenticate: + notes: + - "Public wrapper; forwards to authenticateWithTimestamp(account, block.timestamp)." + mutability: nonpayable + inputs: + - account: address + outputs: [] + +authenticateWithTimestamp: + mutability: nonpayable + access: IDENTITY_ADMIN_ROLE + inputs: + - account: address + - timestamp: uint256 + outputs: [] + emits: [WhitelistedAuthenticated] + errors: [NOT_WHITELISTED_STATUS, WHEN_NOT_PAUSED_REVERT] + +addWhitelisted: + mutability: nonpayable + access: IDENTITY_ADMIN_ROLE + inputs: + - account: address + outputs: [] + emits: [WhitelistedAdded] + errors: [ALREADY_HAS_STATUS, WHEN_NOT_PAUSED_REVERT] + +addWhitelistedWithDIDAndChain: + mutability: nonpayable + access: IDENTITY_ADMIN_ROLE + inputs: + - account: address + - did: string + - orgChain: uint256 + - dateAuthenticated: uint256 + outputs: [] + emits: [WhitelistedAdded] + errors: [DID_ALREADY_REGISTERED, ALREADY_HAS_STATUS, WHEN_NOT_PAUSED_REVERT] + +addWhitelistedWithDID: + mutability: nonpayable + access: IDENTITY_ADMIN_ROLE + inputs: + - account: address + - did: string + outputs: [] + emits: [WhitelistedAdded] + errors: [DID_ALREADY_REGISTERED, ALREADY_HAS_STATUS, WHEN_NOT_PAUSED_REVERT] + +removeWhitelisted: + mutability: nonpayable + access: IDENTITY_ADMIN_ROLE + inputs: + - account: address + outputs: [] + emits: [WhitelistedRemoved] + errors: [WHEN_NOT_PAUSED_REVERT] + +renounceWhitelisted: + mutability: nonpayable + access: whitelisted sender + inputs: [] + outputs: [] + emits: [WhitelistedRemoved] + errors: [NOT_WHITELISTED_SENDER, WHEN_NOT_PAUSED_REVERT] + +isWhitelisted: + notes: + - "Combines local Identity record with optional oldIdentity.isWhitelisted try/catch." + mutability: view + inputs: + - account: address + outputs: + - ok: bool + +lastAuthenticated: + mutability: view + inputs: + - account: address + outputs: + - ts: uint256 + +addBlacklisted: + mutability: nonpayable + access: IDENTITY_ADMIN_ROLE + inputs: + - account: address + outputs: [] + emits: [BlacklistAdded, WhitelistedRemoved] + errors: [WHEN_NOT_PAUSED_REVERT] + +removeBlacklisted: + mutability: nonpayable + access: IDENTITY_ADMIN_ROLE + inputs: + - account: address + outputs: [] + emits: [BlacklistRemoved] + errors: [WHEN_NOT_PAUSED_REVERT] + +addContract: + mutability: nonpayable + access: IDENTITY_ADMIN_ROLE + inputs: + - account: address + outputs: [] + emits: [ContractAdded] + errors: [NOT_CONTRACT, ALREADY_HAS_STATUS, WHEN_NOT_PAUSED_REVERT] + +removeContract: + mutability: nonpayable + access: IDENTITY_ADMIN_ROLE + inputs: + - account: address + outputs: [] + emits: [ContractRemoved] + errors: [WHEN_NOT_PAUSED_REVERT] + +isDAOContract: + mutability: view + inputs: + - account: address + outputs: + - ok: bool + +isBlacklisted: + mutability: view + inputs: + - account: address + outputs: + - ok: bool + +connectAccount: + notes: + - "Caller must be whitelisted; target must not already be whitelisted or blacklisted; stores connectedAccounts[account]=msg.sender." + mutability: nonpayable + access: whitelisted sender + inputs: + - account: address + outputs: [] + emits: [AccountConnected] + errors: [INVALID_ACCOUNT_FOR_CONNECT, ALREADY_CONNECTED, WHEN_NOT_PAUSED_REVERT] + +disconnectAccount: + notes: + - "Caller must be either the linked root or the connected wallet." + mutability: nonpayable + inputs: + - connected: address + outputs: [] + emits: [AccountDisconnected] + errors: [UNAUTHORIZED_DISCONNECT] + +getWhitelistedRoot: + notes: + - "Returns account if directly whitelisted; returns connected root if connected account is whitelisted; else zero." + mutability: view + inputs: + - account: address + outputs: + - whitelisted: address + +pause: + mutability: nonpayable + access: PAUSER_ROLE + inputs: + - toPause: bool + outputs: [] + +setDID: + mutability: nonpayable + inputs: + - account: address + - did: string + outputs: [] + errors: [NOT_AUTHORIZED_SET_DID, NOT_WHITELISTED_FOR_DID, DID_EMPTY, DID_ALREADY_REGISTERED, DID_ALREADY_REGISTERED_OLD, WHEN_NOT_PAUSED_REVERT] + +addrToDID: + mutability: view + inputs: + - account: address + outputs: + - did: string + +getWhitelistedOnChainId: + mutability: view + inputs: + - account: address + outputs: + - chainId: uint256 + +isRegistered: + notes: + - "Compatibility shim; always returns true." + mutability: pure + inputs: [] + outputs: + - ok: bool + +IDENTITY_ADMIN_ROLE: + mutability: view + inputs: [] + outputs: + - role: bytes32 + +PAUSER_ROLE: + mutability: view + inputs: [] + outputs: + - role: bytes32 + +TYPED_STRUCTURE: + mutability: view + inputs: [] + outputs: + - schema: string + +whitelistedCount: + mutability: view + inputs: [] + outputs: + - n: uint256 + +whitelistedContracts: + mutability: view + inputs: [] + outputs: + - n: uint256 + +authenticationPeriod: + mutability: view + inputs: [] + outputs: + - seconds: uint256 + +identities: + mutability: view + inputs: + - account: address + outputs: + - dateAuthenticated: uint256 + - dateAdded: uint256 + - did: string + - whitelistedOnChainId: uint256 + - status: uint8 + +didHashToAddress: + mutability: view + inputs: + - hash: bytes32 + outputs: + - account: address + +connectedAccounts: + mutability: view + inputs: + - account: address + outputs: + - root: address + +oldIdentity: + mutability: view + inputs: [] + outputs: + - addr: address + +events: + BlacklistAdded: + indexed: + - account: address + data: [] + BlacklistRemoved: + indexed: + - account: address + data: [] + WhitelistedAdded: + indexed: + - account: address + data: [] + WhitelistedRemoved: + indexed: + - account: address + data: [] + WhitelistedAuthenticated: + indexed: + - account: address + data: + - timestamp: uint256 + ContractAdded: + indexed: + - account: address + data: [] + ContractRemoved: + indexed: + - account: address + data: [] + AccountConnected: + indexed: + - connected: address + - to: address + data: [] + AccountDisconnected: + indexed: + - disconnected: address + - from: address + data: [] + +errors: + ALREADY_INITIALIZED: "already initialized — initDAO twice." + NOT_WHITELISTED_STATUS: "not whitelisted — authenticateWithTimestamp." + NOT_WHITELISTED_SENDER: "not whitelisted — renounceWhitelisted modifier." + NOT_WHITELISTED_FOR_DID: "not whitelisted — setDID internal." + ALREADY_HAS_STATUS: "already has status — _addWhitelisted." + DID_ALREADY_REGISTERED: "DID already registered — _addWhitelistedWithDID or _setDID." + DID_ALREADY_REGISTERED_OLD: "DID already registered oldIdentity — _setDID conflict path." + NOT_CONTRACT: "Given address is not a contract — addContract." + INVALID_ACCOUNT_FOR_CONNECT: "invalid account — connectAccount target checks." + ALREADY_CONNECTED: "already connected — connectAccount." + UNAUTHORIZED_DISCONNECT: "unauthorized — disconnectAccount." + NOT_AUTHORIZED_SET_DID: "not authorized — setDID caller." + DID_EMPTY: "did empty — _setDID." + WHEN_NOT_PAUSED_REVERT: "OpenZeppelin Pausable whenNotPaused on gated calls." diff --git a/.agents/skills/gooddollar/references/contracts/IdentityV3.selectors.yaml b/.agents/skills/gooddollar/references/contracts/IdentityV3.selectors.yaml new file mode 100644 index 0000000..9b53f00 --- /dev/null +++ b/.agents/skills/gooddollar/references/contracts/IdentityV3.selectors.yaml @@ -0,0 +1,49 @@ +# Generated by scripts/selectors.mjs +functions: + initialize(address,address): 0x485cc955 + initDAO(address): 0x2b14dda8 + setAuthenticationPeriod(uint256): 0xfff930d4 + authenticate(address): 0x08e0d29d + authenticateWithTimestamp(address,uint256): 0x96a1ef79 + addWhitelisted(address): 0x10154bad + addWhitelistedWithDIDAndChain(address,string,uint256,uint256): 0xe737031a + addWhitelistedWithDID(address,string): 0x1b027099 + removeWhitelisted(address): 0x291d9549 + renounceWhitelisted(): 0xd6cd9473 + isWhitelisted(address): 0x3af32abf + lastAuthenticated(address): 0xe1e360ba + addBlacklisted(address): 0x188efc16 + removeBlacklisted(address): 0xc6a276c2 + addContract(address): 0x5f539d69 + removeContract(address): 0xc375c2ef + isDAOContract(address): 0xc73cc4ae + isBlacklisted(address): 0xfe575a87 + connectAccount(address): 0xd21685f4 + disconnectAccount(address): 0x37a1a987 + getWhitelistedRoot(address): 0x2d0e9b46 + pause(bool): 0x02329a29 + setDID(address,string): 0xd3262816 + addrToDID(address): 0x54f9f7a3 + getWhitelistedOnChainId(address): 0xa061922d + isRegistered(): 0x22366844 + IDENTITY_ADMIN_ROLE(): 0x1aaff63c + PAUSER_ROLE(): 0xe63ab1e9 + TYPED_STRUCTURE(): 0x2cec5330 + whitelistedCount(): 0xb2a1de22 + whitelistedContracts(): 0xb30f7e7f + authenticationPeriod(): 0x31b376e2 + identities(address): 0xf653b81e + didHashToAddress(bytes32): 0x67c75937 + connectedAccounts(address): 0x61320040 + oldIdentity(): 0x4125f0f2 +events: + BlacklistAdded(address): 0x44d5fe68b00f68950fb9c1ff0a61ef7f747b1a36359a7e3a7f3324db4b878967 + BlacklistRemoved(address): 0x1747ca720b1a174a464b6513ace29b1d3190b5f632b9f34147017c81425bfde8 + WhitelistedAdded(address): 0xee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f + WhitelistedRemoved(address): 0x270d9b30cf5b0793bbfd54c9d5b94aeb49462b8148399000265144a8722da6b6 + WhitelistedAuthenticated(address,uint256): 0xb2a82fce6d8c7a633efe9579f77b4edb96bfdf171a49bfc2ce666dc543a1f500 + ContractAdded(address): 0x89c66952b48f3e96bf1d8ba1b63189520fd988a6979b8b740bd5c5d8dc53e205 + ContractRemoved(address): 0x8d30d41865a0b811b9545d879520d2dde9f4cc49e4241f486ad9752bc904b565 + AccountConnected(address,address): 0x18f7736ef54539debd9afd3c9500b106e12ae7c70e685f5a5efd727b1ce1d54c + AccountDisconnected(address,address): 0x7cdef5f9c5cb8ce728661ede956fef26cb91eb4d7d2180cc041b73f9fef568d2 +errors: {} diff --git a/.agents/skills/gooddollar/references/contracts/IdentityV4.abi.yaml b/.agents/skills/gooddollar/references/contracts/IdentityV4.abi.yaml new file mode 100644 index 0000000..485254d --- /dev/null +++ b/.agents/skills/gooddollar/references/contracts/IdentityV4.abi.yaml @@ -0,0 +1,424 @@ +# IdentityV4 — whitelist, blacklist, DID, connected accounts, and reverification schedule +# isWhitelisted uses shouldReverify against reverifyDaysOptions and authCount; oldIdentity fallback preserved. + +meta: + name: IdentityV4 + version: v4 + source: + - https://raw.githubusercontent.com/GoodDollar/GoodProtocol/master/contracts/identity/IdentityV4.sol + inherits: + - DAOUpgradeableContract + - AccessControlUpgradeable + - PausableUpgradeable + - EIP712Upgradeable + note: > + authenticationPeriod() returns the largest reverify interval in days (last entry of reverifyDaysOptions), + not seconds. isWhitelisted is false when shouldReverify is true for the current elapsed days since + dateAuthenticated. Post-upgrade, accounts with dateAuthenticated before 1772697574 are treated as + having authCount at the last schedule step for reverify logic. + deployments: + mainnet: + production: + Identity: + networkId: 122 + address: "0x2F9C28de9e6d44b71B91b8BA337A5D82e308E7BE" + creationBlock: 22022901 + production-celo: + Identity: + networkId: 42220 + address: "0xC361A6E67822a0EDc17D899227dd9FC50BD62F42" + creationBlock: 17237952 + production-xdc: + Identity: + networkId: 50 + address: "0x27a4a02C9ed591E1a86e2e5D05870292c34622C9" + creationBlock: 95143058 + related: + - https://docs.gooddollar.org/for-developers/core-contracts/identity + - https://docs.gooddollar.org/user-guides/connect-another-wallet-address-to-identity + +initialize: + mutability: nonpayable + access: initializer + inputs: + - _owner: address + - _oldIdentity: address + outputs: [] + +initDAO: + notes: + - "Wires NameService via setDAO and transfers DEFAULT_ADMIN_ROLE, PAUSER_ROLE, IDENTITY_ADMIN_ROLE to avatar." + mutability: nonpayable + access: DEFAULT_ADMIN_ROLE + inputs: + - _ns: address + outputs: [] + errors: [ALREADY_INITIALIZED] + +setReverifyDaysOptions: + notes: + - "Replaces the full schedule; values must be strictly ascending uint8 days; non-empty array." + mutability: nonpayable + access: IDENTITY_ADMIN_ROLE + inputs: + - options: uint8[] + outputs: [] + errors: [EMPTY_REVERIFY_OPTIONS, OPTIONS_NOT_ASCENDING, WHEN_NOT_PAUSED_REVERT] + +authenticate: + notes: + - "Forwards to authenticateWithTimestamp(account, block.timestamp); requires IDENTITY_ADMIN_ROLE on the inner call." + mutability: nonpayable + access: IDENTITY_ADMIN_ROLE + inputs: + - account: address + outputs: [] + errors: [NOT_WHITELISTED_STATUS, WHEN_NOT_PAUSED_REVERT] + +authenticateWithTimestamp: + notes: + - "Refreshes authentication timestamp for status-1 account and advances authCount when reverification threshold is reached." + - "Legacy accounts before cutoff are evaluated at last schedule step for reverify math." + mutability: nonpayable + access: IDENTITY_ADMIN_ROLE + inputs: + - account: address + - timestamp: uint256 + outputs: [] + emits: [WhitelistedAuthenticated] + errors: [NOT_WHITELISTED_STATUS, WHEN_NOT_PAUSED_REVERT] + +addWhitelisted: + mutability: nonpayable + access: IDENTITY_ADMIN_ROLE + inputs: + - account: address + outputs: [] + emits: [WhitelistedAdded] + errors: [ALREADY_HAS_STATUS, WHEN_NOT_PAUSED_REVERT] + +addWhitelistedWithDIDAndChain: + notes: + - "Adds whitelisted account and stores DID plus originating chain id and authentication timestamp." + mutability: nonpayable + access: IDENTITY_ADMIN_ROLE + inputs: + - account: address + - did: string + - orgChain: uint256 + - dateAuthenticated: uint256 + outputs: [] + emits: [WhitelistedAdded] + errors: [DID_ALREADY_REGISTERED, ALREADY_HAS_STATUS, WHEN_NOT_PAUSED_REVERT] + +addWhitelistedWithDID: + mutability: nonpayable + access: IDENTITY_ADMIN_ROLE + inputs: + - account: address + - did: string + outputs: [] + emits: [WhitelistedAdded] + errors: [DID_ALREADY_REGISTERED, ALREADY_HAS_STATUS, WHEN_NOT_PAUSED_REVERT] + +removeWhitelisted: + mutability: nonpayable + access: IDENTITY_ADMIN_ROLE + inputs: + - account: address + outputs: [] + emits: [WhitelistedRemoved] + errors: [WHEN_NOT_PAUSED_REVERT] + +renounceWhitelisted: + mutability: nonpayable + access: whitelisted sender + inputs: [] + outputs: [] + emits: [WhitelistedRemoved] + errors: [NOT_WHITELISTED_SENDER, WHEN_NOT_PAUSED_REVERT] + +shouldReverify: + notes: + - "Compares daysSinceAuth against current reverifyDaysOptions step selected by authCount." + mutability: view + inputs: + - account: address + - daysSinceAuth: uint256 + outputs: + - needed: bool + +isWhitelisted: + notes: + - "Local status 1 with shouldReverify false; else oldIdentity.isWhitelisted try/catch." + mutability: view + inputs: + - account: address + outputs: + - ok: bool + +lastAuthenticated: + notes: + - "Returns local dateAuthenticated or falls back to oldIdentity when local record has no timestamp." + mutability: view + inputs: + - account: address + outputs: + - ts: uint256 + +addBlacklisted: + mutability: nonpayable + access: IDENTITY_ADMIN_ROLE + inputs: + - account: address + outputs: [] + emits: [BlacklistAdded, WhitelistedRemoved] + errors: [WHEN_NOT_PAUSED_REVERT] + +removeBlacklisted: + mutability: nonpayable + access: IDENTITY_ADMIN_ROLE + inputs: + - account: address + outputs: [] + emits: [BlacklistRemoved] + errors: [WHEN_NOT_PAUSED_REVERT] + +addContract: + mutability: nonpayable + access: IDENTITY_ADMIN_ROLE + inputs: + - account: address + outputs: [] + emits: [ContractAdded] + errors: [NOT_CONTRACT, ALREADY_HAS_STATUS, WHEN_NOT_PAUSED_REVERT] + +removeContract: + mutability: nonpayable + access: IDENTITY_ADMIN_ROLE + inputs: + - account: address + outputs: [] + emits: [ContractRemoved] + errors: [WHEN_NOT_PAUSED_REVERT] + +isDAOContract: + mutability: view + inputs: + - account: address + outputs: + - ok: bool + +isBlacklisted: + mutability: view + inputs: + - account: address + outputs: + - ok: bool + +connectAccount: + notes: + - "Caller must be whitelisted; target must not already be whitelisted or blacklisted; stores connectedAccounts[account]=msg.sender." + mutability: nonpayable + access: whitelisted sender + inputs: + - account: address + outputs: [] + emits: [AccountConnected] + errors: [INVALID_ACCOUNT_FOR_CONNECT, ALREADY_CONNECTED, WHEN_NOT_PAUSED_REVERT] + +disconnectAccount: + notes: + - "Caller must be either the linked root or the connected wallet." + mutability: nonpayable + inputs: + - connected: address + outputs: [] + emits: [AccountDisconnected] + errors: [UNAUTHORIZED_DISCONNECT] + +getWhitelistedRoot: + notes: + - "Returns account if directly whitelisted; returns connected root if connected account is whitelisted; else zero." + mutability: view + inputs: + - account: address + outputs: + - whitelisted: address + +pause: + mutability: nonpayable + access: PAUSER_ROLE + inputs: + - toPause: bool + outputs: [] + +setDID: + notes: + - "Sets DID for account by admin or account itself when whitelisted; enforces uniqueness across local and old identity." + mutability: nonpayable + inputs: + - account: address + - did: string + outputs: [] + errors: [NOT_AUTHORIZED_SET_DID, NOT_WHITELISTED_FOR_DID, DID_EMPTY, DID_ALREADY_REGISTERED, DID_ALREADY_REGISTERED_OLD, WHEN_NOT_PAUSED_REVERT] + +addrToDID: + mutability: view + inputs: + - account: address + outputs: + - did: string + +getWhitelistedOnChainId: + notes: + - "Returns chain id recorded during whitelisting for cross-chain eligibility checks." + mutability: view + inputs: + - account: address + outputs: + - chainId: uint256 + +isRegistered: + notes: + - "Compatibility shim; always returns true." + mutability: pure + inputs: [] + outputs: + - ok: bool + +IDENTITY_ADMIN_ROLE: + mutability: view + inputs: [] + outputs: + - role: bytes32 + +PAUSER_ROLE: + mutability: view + inputs: [] + outputs: + - role: bytes32 + +TYPED_STRUCTURE: + mutability: view + inputs: [] + outputs: + - schema: string + +whitelistedCount: + mutability: view + inputs: [] + outputs: + - n: uint256 + +whitelistedContracts: + mutability: view + inputs: [] + outputs: + - n: uint256 + +authenticationPeriod: + notes: + - "Returns reverifyDaysOptions[last] in days, not seconds." + mutability: view + inputs: [] + outputs: + - days: uint256 + +reverifyDaysOptions: + mutability: view + inputs: + - index: uint256 + outputs: + - days: uint32 + +identities: + mutability: view + inputs: + - account: address + outputs: + - dateAuthenticated: uint256 + - dateAdded: uint256 + - did: string + - whitelistedOnChainId: uint256 + - status: uint8 + - authCount: uint32 + +didHashToAddress: + mutability: view + inputs: + - hash: bytes32 + outputs: + - account: address + +connectedAccounts: + mutability: view + inputs: + - account: address + outputs: + - root: address + +oldIdentity: + mutability: view + inputs: [] + outputs: + - addr: address + +events: + BlacklistAdded: + indexed: + - account: address + data: [] + BlacklistRemoved: + indexed: + - account: address + data: [] + WhitelistedAdded: + indexed: + - account: address + data: [] + WhitelistedRemoved: + indexed: + - account: address + data: [] + WhitelistedAuthenticated: + indexed: + - account: address + data: + - timestamp: uint256 + ContractAdded: + indexed: + - account: address + data: [] + ContractRemoved: + indexed: + - account: address + data: [] + AccountConnected: + indexed: + - connected: address + - to: address + data: [] + AccountDisconnected: + indexed: + - disconnected: address + - from: address + data: [] + +errors: + ALREADY_INITIALIZED: "already initialized — initDAO twice." + EMPTY_REVERIFY_OPTIONS: "empty options — setReverifyDaysOptions." + OPTIONS_NOT_ASCENDING: "options not in ascending order — setReverifyDaysOptions." + NOT_WHITELISTED_STATUS: "not whitelisted — authenticateWithTimestamp." + NOT_WHITELISTED_SENDER: "not whitelisted — renounceWhitelisted modifier." + NOT_WHITELISTED_FOR_DID: "not whitelisted — _setDID." + ALREADY_HAS_STATUS: "already has status — _addWhitelisted." + DID_ALREADY_REGISTERED: "DID already registered — _addWhitelistedWithDID or _setDID." + DID_ALREADY_REGISTERED_OLD: "DID already registered oldIdentity — _setDID conflict path." + NOT_CONTRACT: "Given address is not a contract — addContract." + INVALID_ACCOUNT_FOR_CONNECT: "invalid account — connectAccount target checks." + ALREADY_CONNECTED: "already connected — connectAccount." + UNAUTHORIZED_DISCONNECT: "unauthorized — disconnectAccount." + NOT_AUTHORIZED_SET_DID: "not authorized — setDID caller." + DID_EMPTY: "did empty — _setDID." + WHEN_NOT_PAUSED_REVERT: "OpenZeppelin Pausable whenNotPaused on gated calls." diff --git a/.agents/skills/gooddollar/references/contracts/IdentityV4.selectors.yaml b/.agents/skills/gooddollar/references/contracts/IdentityV4.selectors.yaml new file mode 100644 index 0000000..3440a5e --- /dev/null +++ b/.agents/skills/gooddollar/references/contracts/IdentityV4.selectors.yaml @@ -0,0 +1,51 @@ +# Generated by scripts/selectors.mjs +functions: + initialize(address,address): 0x485cc955 + initDAO(address): 0x2b14dda8 + setReverifyDaysOptions(uint8[]): 0x925e8c1a + authenticate(address): 0x08e0d29d + authenticateWithTimestamp(address,uint256): 0x96a1ef79 + addWhitelisted(address): 0x10154bad + addWhitelistedWithDIDAndChain(address,string,uint256,uint256): 0xe737031a + addWhitelistedWithDID(address,string): 0x1b027099 + removeWhitelisted(address): 0x291d9549 + renounceWhitelisted(): 0xd6cd9473 + shouldReverify(address,uint256): 0x4a03813f + isWhitelisted(address): 0x3af32abf + lastAuthenticated(address): 0xe1e360ba + addBlacklisted(address): 0x188efc16 + removeBlacklisted(address): 0xc6a276c2 + addContract(address): 0x5f539d69 + removeContract(address): 0xc375c2ef + isDAOContract(address): 0xc73cc4ae + isBlacklisted(address): 0xfe575a87 + connectAccount(address): 0xd21685f4 + disconnectAccount(address): 0x37a1a987 + getWhitelistedRoot(address): 0x2d0e9b46 + pause(bool): 0x02329a29 + setDID(address,string): 0xd3262816 + addrToDID(address): 0x54f9f7a3 + getWhitelistedOnChainId(address): 0xa061922d + isRegistered(): 0x22366844 + IDENTITY_ADMIN_ROLE(): 0x1aaff63c + PAUSER_ROLE(): 0xe63ab1e9 + TYPED_STRUCTURE(): 0x2cec5330 + whitelistedCount(): 0xb2a1de22 + whitelistedContracts(): 0xb30f7e7f + authenticationPeriod(): 0x31b376e2 + reverifyDaysOptions(uint256): 0xcadef5ac + identities(address): 0xf653b81e + didHashToAddress(bytes32): 0x67c75937 + connectedAccounts(address): 0x61320040 + oldIdentity(): 0x4125f0f2 +events: + BlacklistAdded(address): 0x44d5fe68b00f68950fb9c1ff0a61ef7f747b1a36359a7e3a7f3324db4b878967 + BlacklistRemoved(address): 0x1747ca720b1a174a464b6513ace29b1d3190b5f632b9f34147017c81425bfde8 + WhitelistedAdded(address): 0xee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f + WhitelistedRemoved(address): 0x270d9b30cf5b0793bbfd54c9d5b94aeb49462b8148399000265144a8722da6b6 + WhitelistedAuthenticated(address,uint256): 0xb2a82fce6d8c7a633efe9579f77b4edb96bfdf171a49bfc2ce666dc543a1f500 + ContractAdded(address): 0x89c66952b48f3e96bf1d8ba1b63189520fd988a6979b8b740bd5c5d8dc53e205 + ContractRemoved(address): 0x8d30d41865a0b811b9545d879520d2dde9f4cc49e4241f486ad9752bc904b565 + AccountConnected(address,address): 0x18f7736ef54539debd9afd3c9500b106e12ae7c70e685f5a5efd727b1ce1d54c + AccountDisconnected(address,address): 0x7cdef5f9c5cb8ce728661ede956fef26cb91eb4d7d2180cc041b73f9fef568d2 +errors: {} diff --git a/.agents/skills/gooddollar/references/contracts/InvitesV2.abi.yaml b/.agents/skills/gooddollar/references/contracts/InvitesV2.abi.yaml new file mode 100644 index 0000000..d69e3d6 --- /dev/null +++ b/.agents/skills/gooddollar/references/contracts/InvitesV2.abi.yaml @@ -0,0 +1,333 @@ +# InvitesV2 — invite codes, inviter levels, and G$ bounties (UUPS upgradeable) +# Bounty amounts on Level use G$ cents (2 decimals). Invitee receives half the inviter bounty on payout. + +meta: + name: InvitesV2 + version: "2.4" + source: + - https://raw.githubusercontent.com/GoodDollar/GoodProtocol/master/contracts/invite/InvitesV2.sol + inherits: + - DAOUpgradeableContract + note: > + join binds invite code and optional inviter; bounty eligibility uses minimumDays, minimumClaims, + whitelist on invitee (and inviter when present), and same-chain whitelisting via Identity + getWhitelistedOnChainId. collectBounties and bountyFor pay invitee bountyToPay/2 and inviter + bountyToPay when applicable. Campaign inviter is address(this) when inviter code maps to contract. + deployments: + mainnet: + production: + Invites: + networkId: 122 + address: "0xCa2F09c3ccFD7aD5cB9276918Bd1868f2b922ea0" + creationBlock: 8853311 + production-celo: + Invites: + networkId: 42220 + address: "0x36829D1Cda92FFF5782d5d48991620664FC857d3" + creationBlock: 18003063 + production-xdc: + Invites: + networkId: 50 + address: "0x6bd698566632bf2e81e2278f1656CB24aAF06D2e" + creationBlock: 95144756 + related: + - references/deep-researches/inviter-invitee-reward-model.md + +initialize: + mutability: nonpayable + access: initializer + inputs: + - _ns: address + - _level0Bounty: uint256 + - _owner: address + outputs: [] + +updateAvatar: + mutability: nonpayable + access: anyone + inputs: [] + outputs: [] + +nativeToken: + mutability: view + inputs: [] + outputs: + - token: address + +dao: + mutability: view + inputs: [] + outputs: + - controller: address + +avatar: + mutability: view + inputs: [] + outputs: + - addr: address + +nameService: + mutability: view + inputs: [] + outputs: + - ns: address + +upgradeTo: + mutability: nonpayable + access: ownerOrAvatar + inputs: + - newImplementation: address + outputs: [] + +upgradeToAndCall: + mutability: payable + access: ownerOrAvatar + inputs: + - newImplementation: address + - data: bytes + outputs: [] + +proxiableUUID: + mutability: view + inputs: [] + outputs: + - slot: bytes32 + +setLevelExpirationEnabled: + mutability: nonpayable + access: ownerOrAvatar + inputs: + - _isEnabled: bool + outputs: [] + +getIdentity: + mutability: view + inputs: [] + outputs: + - identity: address + +join: + notes: + - "Registers invite code; may set inviter; may trigger _bountyFor when canCollectBountyFor is already true." + mutability: nonpayable + access: anyone + inputs: + - _myCode: bytes32 + - _inviterCode: bytes32 + outputs: [] + emits: [InviteeJoined] + errors: [NOT_ACTIVE, INVITE_CODE_IN_USE, SELF_INVITE, USER_ALREADY_JOINED] + +canCollectBountyFor: + notes: + - "Primary eligibility gate: checks active state, whitelist, minimumDays, minimumClaims, unpaid bounty, and chain constraints." + mutability: view + inputs: + - _invitee: address + outputs: + - ok: bool + +getInvitees: + mutability: view + inputs: + - _inviter: address + outputs: + - invitees: address[] + +getPendingInvitees: + mutability: view + inputs: + - _inviter: address + outputs: + - pending: address[] + +getPendingBounties: + mutability: view + inputs: + - _inviter: address + outputs: + - count: uint256 + +bountyFor: + notes: + - "Single-invitee payout path; revalidates eligibility and transfers bounty shares to inviter/invitee on success." + mutability: nonpayable + access: anyone + inputs: + - _invitee: address + outputs: + - bounty: uint256 + emits: [InviterBounty] + errors: [NOT_ACTIVE, NOT_ELIGIBLE_BOUNTY] + +collectBounties: + notes: + - "Batch payout path over caller pending invitees; useful for claiming multiple matured bounties in one tx." + mutability: nonpayable + access: anyone + inputs: [] + outputs: [] + emits: [InviterBounty] + errors: [NOT_ACTIVE] + +setLevel: + notes: + - "Configures inviter level progression rule and bounty amount (bounty units are G$ cents)." + mutability: nonpayable + access: ownerOrAvatar + inputs: + - _lvl: uint256 + - _toNext: uint256 + - _bounty: uint256 + - _daysToComplete: uint256 + outputs: [] + +setActive: + mutability: nonpayable + access: ownerOrAvatar + inputs: + - _active: bool + outputs: [] + +setCampaignCode: + notes: + - "Maps a campaign code to contract-address inviter flow (address(this)) used by join." + mutability: nonpayable + access: ownerOrAvatar + inputs: + - _code: bytes32 + outputs: [] + +setMinimums: + notes: + - "Sets minimumClaims and minimumDays thresholds used by canCollectBountyFor." + mutability: nonpayable + access: ownerOrAvatar + inputs: + - _minClaims: uint8 + - _minDays: uint8 + outputs: [] + +end: + mutability: nonpayable + access: ownerOrAvatar + inputs: [] + outputs: [] + errors: [NOT_ACTIVE] + +setOwner: + mutability: nonpayable + access: ownerOrAvatar + inputs: + - _owner: address + outputs: [] + +version: + mutability: pure + inputs: [] + outputs: + - v: string + +codeToUser: + mutability: view + inputs: + - code: bytes32 + outputs: + - user: address + +users: + notes: + - "Public getter omits dynamic invitees/pending arrays; use getInvitees and getPendingInvitees." + mutability: view + inputs: + - user: address + outputs: + - invitedBy: address + - inviteCode: bytes32 + - bountyPaid: bool + - level: uint256 + - levelStarted: uint256 + - totalApprovedInvites: uint256 + - totalEarned: uint256 + - joinedAt: uint256 + - bountyAtJoin: uint256 + +levels: + notes: + - "bounty is in G$ cents (2 decimals). Reserved struct slots are not exposed on the getter." + mutability: view + inputs: + - lvl: uint256 + outputs: + - toNext: uint256 + - bounty: uint256 + - daysToComplete: uint256 + +owner: + mutability: view + inputs: [] + outputs: + - addr: address + +goodDollar: + mutability: view + inputs: [] + outputs: + - token: address + +active: + mutability: view + inputs: [] + outputs: + - ok: bool + +stats: + notes: + - "Reserved Stats struct slots are not exposed on the getter." + mutability: view + inputs: [] + outputs: + - totalApprovedInvites: uint256 + - totalBountiesPaid: uint256 + - totalInvited: uint256 + +levelExpirationEnabled: + mutability: view + inputs: [] + outputs: + - ok: bool + +minimumClaims: + mutability: view + inputs: [] + outputs: + - n: uint8 + +minimumDays: + mutability: view + inputs: [] + outputs: + - n: uint8 + +events: + InviteeJoined: + indexed: + - inviter: address + - invitee: address + data: [] + InviterBounty: + indexed: + - inviter: address + - invitee: address + data: + - bountyPaid: uint256 + - inviterLevel: uint256 + - earnedLevel: bool + +errors: + NOT_ACTIVE: "not active — isActive modifier." + ONLY_OWNER_OR_AVATAR: "Only owner or avatar can perform this action — ownerOrAvatar." + INVITE_CODE_IN_USE: "invite code already in use — join." + SELF_INVITE: "self invite — join." + USER_ALREADY_JOINED: "user already joined — join." + NOT_ELIGIBLE_BOUNTY: "user not elligble for bounty yet — bountyFor." diff --git a/.agents/skills/gooddollar/references/contracts/InvitesV2.selectors.yaml b/.agents/skills/gooddollar/references/contracts/InvitesV2.selectors.yaml new file mode 100644 index 0000000..d717955 --- /dev/null +++ b/.agents/skills/gooddollar/references/contracts/InvitesV2.selectors.yaml @@ -0,0 +1,41 @@ +# Generated by scripts/selectors.mjs +functions: + initialize(address,uint256,address): 0xc350a1b5 + updateAvatar(): 0x1b3c90a8 + nativeToken(): 0xe1758bd8 + dao(): 0x4162169f + avatar(): 0x5aef7de6 + nameService(): 0x3e6326fc + upgradeTo(address): 0x3659cfe6 + upgradeToAndCall(address,bytes): 0x4f1ef286 + proxiableUUID(): 0x52d1902d + setLevelExpirationEnabled(bool): 0x21132aad + getIdentity(): 0x36afc6fa + join(bytes32,bytes32): 0x5b419a65 + canCollectBountyFor(address): 0x6d619ef8 + getInvitees(address): 0xe9881a5e + getPendingInvitees(address): 0xe951a3aa + getPendingBounties(address): 0x41155d5e + bountyFor(address): 0xb6567cd5 + collectBounties(): 0xaf6346b0 + setLevel(uint256,uint256,uint256,uint256): 0xb9fb2d18 + setActive(bool): 0xacec338a + setCampaignCode(bytes32): 0xf14b8649 + setMinimums(uint8,uint8): 0x47826c82 + end(): 0xefbe1c1c + setOwner(address): 0x13af4035 + version(): 0x54fd4d50 + codeToUser(bytes32): 0xba6f5680 + users(address): 0xa87430ba + levels(uint256): 0xb2596a67 + owner(): 0x8da5cb5b + goodDollar(): 0x119e5bf3 + active(): 0x02fb0c5e + stats(): 0xd80528ae + levelExpirationEnabled(): 0xa1df6fd3 + minimumClaims(): 0xc121cb92 + minimumDays(): 0xdf0dca04 +events: + InviteeJoined(address,address): 0xd8c638d8979e2ba5dba1f0d66246ee4b1c54b838f0e0a2b601365345eb23b051 + InviterBounty(address,address,uint256,uint256,bool): 0x6081787cd1bd02ab1576c52f03e8710d792d460e7881c3155d77d23893f3768b +errors: {} diff --git a/.agents/skills/gooddollar/references/contracts/MentoBroker.abi.yaml b/.agents/skills/gooddollar/references/contracts/MentoBroker.abi.yaml new file mode 100644 index 0000000..f6f47f4 --- /dev/null +++ b/.agents/skills/gooddollar/references/contracts/MentoBroker.abi.yaml @@ -0,0 +1,259 @@ +# Mento Broker (IBroker + IBrokerAdmin) — swap router and trading-limit gate for GoodDollar Mento rails +# Interface definitions are vendored in GoodProtocol; implementation lives in mento-core. + +meta: + name: Broker + version: IBroker / IBrokerAdmin + source: + - https://raw.githubusercontent.com/GoodDollar/GoodProtocol/master/contracts/MentoInterfaces.sol + - https://raw.githubusercontent.com/mento-org/mento-core/main/contracts/swap/Broker.sol + - https://raw.githubusercontent.com/mento-org/mento-core/main/contracts/interfaces/IBroker.sol + implements: [IBroker, IBrokerAdmin] + note: > + swapIn is exact-input; swapOut is exact-output. Quotes route through the + configured exchangeProvider + exchangeId. Reverts use require strings in + Broker.sol plus TradingLimits library checks ("amountOutMin not met", + "amountInMax exceeded", trading-limit errors). + deployments: + mainnet: + production-celo: + MentoBroker: + networkId: 42220 + address: "0x88de45906D4F5a57315c133620cfa484cB297541" + creationBlock: 31415857 + production-xdc: + MentoBroker: + networkId: 50 + address: "0x88de45906D4F5a57315c133620cfa484cB297541" + creationBlock: 100091095 + related: + - https://docs.gooddollar.org/for-developers/core-contracts/mentobroker + - references/guides/swap.md + +initialize: + mutability: nonpayable + access: initializer + inputs: + - _exchangeProviders: address[] + - _reserves: address[] + outputs: [] + +setReserves: + notes: + - "Updates reserve address per already-listed provider without changing provider registration." + mutability: nonpayable + access: owner + inputs: + - _exchangeProviders: address[] + - _reserves: address[] + outputs: [] + emits: [ReserveSet] + errors: + - EXCHANGE_PROVIDER_MISSING + - RESERVE_ZERO + +addExchangeProvider: + mutability: nonpayable + access: owner + inputs: + - exchangeProvider: address + - reserve: address + outputs: + - index: uint256 + emits: [ExchangeProviderAdded, ReserveSet] + errors: + - PROVIDER_ALREADY_LISTED + - PROVIDER_ZERO + - RESERVE_ZERO + +removeExchangeProvider: + mutability: nonpayable + access: owner + inputs: + - exchangeProvider: address + - index: uint256 + outputs: [] + emits: [ExchangeProviderRemoved] + errors: + - INDEX_MISMATCH + +getAmountIn: + notes: + - "Exact-output quote path: returns required tokenIn for target amountOut." + - "Pre-checks collateral reserve balance when tokenOut is collateral." + mutability: view + inputs: + - exchangeProvider: address + - exchangeId: bytes32 + - tokenIn: address + - tokenOut: address + - amountOut: uint256 + outputs: + - amountIn: uint256 + errors: + - EXCHANGE_PROVIDER_MISSING + - INSUFFICIENT_RESERVE_BALANCE + +getAmountOut: + notes: + - "Exact-input quote path: returns expected tokenOut for fixed amountIn." + - "Pre-checks collateral reserve balance when tokenOut is collateral." + mutability: view + inputs: + - exchangeProvider: address + - exchangeId: bytes32 + - tokenIn: address + - tokenOut: address + - amountIn: uint256 + outputs: + - amountOut: uint256 + errors: + - EXCHANGE_PROVIDER_MISSING + - INSUFFICIENT_RESERVE_BALANCE + +swapIn: + notes: + - "Transfers tokenIn from msg.sender then delivers tokenOut; enforces amountOut >= amountOutMin after exchange + limits." + mutability: nonpayable + access: nonReentrant + inputs: + - exchangeProvider: address + - exchangeId: bytes32 + - tokenIn: address + - tokenOut: address + - amountIn: uint256 + - amountOutMin: uint256 + outputs: + - amountOut: uint256 + emits: [Swap] + errors: + - EXCHANGE_PROVIDER_MISSING + - INSUFFICIENT_RESERVE_BALANCE + - AMOUNT_OUT_MIN_NOT_MET + - TRADING_LIMIT_OR_SAFE_TRANSFER + +swapOut: + notes: + - "Computes required tokenIn then pulls up to amountInMax; reverts if amountIn would exceed cap." + mutability: nonpayable + access: nonReentrant + inputs: + - exchangeProvider: address + - exchangeId: bytes32 + - tokenIn: address + - tokenOut: address + - amountOut: uint256 + - amountInMax: uint256 + outputs: + - amountIn: uint256 + emits: [Swap] + errors: + - EXCHANGE_PROVIDER_MISSING + - INSUFFICIENT_RESERVE_BALANCE + - AMOUNT_IN_MAX_EXCEEDED + - TRADING_LIMIT_OR_SAFE_TRANSFER + +burnStableTokens: + notes: + - "Owner-maintained escape hatch burning stables from msg.sender via reserve plumbing." + mutability: nonpayable + access: owner + inputs: + - token: address + - amount: uint256 + outputs: + - ok: bool + errors: + - COLLATERAL_TRANSFER_FAILED + +configureTradingLimit: + notes: + - "Sets per (exchangeId, token) limit config used by swapIn/swapOut guardTradingLimits checks." + mutability: nonpayable + access: owner + inputs: + - exchangeId: bytes32 + - token: address + - config: TradingLimits.Config + outputs: [] + emits: [TradingLimitConfigured] + +getExchangeProviders: + notes: + - "Discovery helper for clients that need the active provider set before quoting/swapping." + mutability: view + inputs: [] + outputs: + - providers: address[] + +exchangeProviders: + mutability: view + inputs: + - index: uint256 + outputs: + - exchangeProvider: address + +isExchangeProvider: + mutability: view + inputs: + - exchangeProvider: address + outputs: + - ok: bool + +tradingLimitsState: + mutability: view + inputs: + - eid: bytes32 + outputs: + - state: TradingLimits.State + +tradingLimitsConfig: + mutability: view + inputs: + - eid: bytes32 + outputs: + - config: TradingLimits.Config + +events: + Swap: + indexed: + - exchangeId: bytes32 + - trader: address + - tokenIn: address + data: + - exchangeProvider: address + - tokenOut: address + - amountIn: uint256 + - amountOut: uint256 + TradingLimitConfigured: + indexed: [] + data: + - exchangeId: bytes32 + - token: address + - config: TradingLimits.Config + ExchangeProviderAdded: + indexed: + - exchangeProvider: address + data: [] + ExchangeProviderRemoved: + indexed: + - exchangeProvider: address + data: [] + ReserveSet: + indexed: + - newAddress: address + - prevAddress: address + data: [] + +errors: + EXCHANGE_PROVIDER_MISSING: "ExchangeProvider does not exist" + EXCHANGE_PROVIDER_EXISTS: "ExchangeProvider already exists in the list" + PROVIDER_ZERO: "ExchangeProvider address can't be 0" + RESERVE_ZERO: "Reserve address can't be 0" + INDEX_MISMATCH: "index doesn't match provider" + INSUFFICIENT_RESERVE_BALANCE: "Insufficient balance in reserve" + AMOUNT_OUT_MIN_NOT_MET: "amountOutMin not met" + AMOUNT_IN_MAX_EXCEEDED: "amountInMax exceeded" + COLLATERAL_TRANSFER_FAILED: "Transfer of the collateral asset failed" + AMOUNT_TOO_LARGE: "amountIn too large / amountOut too large — uint256 to int256 safety checks" + TRADING_LIMIT_OR_SAFE_TRANSFER: "TradingLimits library reverts or ERC20 safety failures during swap" diff --git a/.agents/skills/gooddollar/references/contracts/MentoBroker.selectors.yaml b/.agents/skills/gooddollar/references/contracts/MentoBroker.selectors.yaml new file mode 100644 index 0000000..249edce --- /dev/null +++ b/.agents/skills/gooddollar/references/contracts/MentoBroker.selectors.yaml @@ -0,0 +1,24 @@ +# Generated by scripts/selectors.mjs +functions: + initialize(address[],address[]): 0x73cf25f8 + setReserves(address[],address[]): 0xddeb9dd2 + addExchangeProvider(address,address): 0x770d0a34 + removeExchangeProvider(address,uint256): 0x04710d53 + getAmountIn(address,bytes32,address,address,uint256): 0x04e45640 + getAmountOut(address,bytes32,address,address,uint256): 0xa20f2305 + swapIn(address,bytes32,address,address,uint256,uint256): 0xddbbe850 + swapOut(address,bytes32,address,address,uint256,uint256): 0xd163b135 + burnStableTokens(address,uint256): 0x131cab2a + configureTradingLimit(bytes32,address,(uint32,uint32,int48,int48,int48,int48,int48,uint8)): 0xa868d140 + getExchangeProviders(): 0x2cac2568 + exchangeProviders(uint256): 0xc4454fdc + isExchangeProvider(address): 0xd1d786b1 + tradingLimitsState(bytes32): 0xf01ecd17 + tradingLimitsConfig(bytes32): 0x821a816c +events: + Swap(bytes32,address,address,address,address,uint256,uint256): 0x46e6aeaebfb8f1b6a9be6403b5fc420d9827172046f365e786acb9d5b56c9409 + TradingLimitConfigured(bytes32,address,(uint32,uint32,int48,int48,int48,int48,int48,uint8)): 0x3ed50aa123e1e547aa90fcf88624ef8278d253e252bb1feac75eda93e1905bb6 + ExchangeProviderAdded(address): 0x2ee2cb0721ec60b86190cae5c48e25064b69b35abad32452a4ec99d232033de2 + ExchangeProviderRemoved(address): 0x29e92ab2e30f4f74283034c28c451b6faac986b554f1808101eb6418bdba19d4 + ReserveSet(address,address): 0xb69e1c416d8be92ac92c8e97e77c4626fba5e6ab50161099f659ea3303479e50 +errors: {} diff --git a/.agents/skills/gooddollar/references/contracts/MessagePassingBridge.abi.yaml b/.agents/skills/gooddollar/references/contracts/MessagePassingBridge.abi.yaml new file mode 100644 index 0000000..d4bb1f2 --- /dev/null +++ b/.agents/skills/gooddollar/references/contracts/MessagePassingBridge.abi.yaml @@ -0,0 +1,542 @@ +meta: + name: MessagePassingBridge + version: Axelar + LayerZero message passing + source: + - https://raw.githubusercontent.com/GoodDollar/GoodBridge/master/packages/bridge-contracts/contracts/messagePassingBridge/MessagePassingBridge.sol + - https://raw.githubusercontent.com/GoodDollar/GoodBridge/master/packages/bridge-contracts/contracts/messagePassingBridge/IMessagePassingBridge.sol + note: > + Bridge implementation that burns source tokens and mints destination tokens, + transporting requests through Axelar or LayerZero. + Cross-chain transport uses msg.value on the source (LayerZero estimateSendFee path, Axelar gas prepay); destination mint applies bridgeFees bps to the delivered G$ amount. See references/guides/bridge.md "Bridge fee context". + deployments: + mainnet: + production: + MpbBridge: + networkId: 122 + address: "0xa3247276DbCC76Dd7705273f766eB3E8a5ecF4a5" + creationBlock: 25464921 + production-celo: + MpbBridge: + networkId: 42220 + address: "0xa3247276DbCC76Dd7705273f766eB3E8a5ecF4a5" + creationBlock: 21473545 + production-xdc: + MpbBridge: + networkId: 50 + address: "0xa3247276DbCC76Dd7705273f766eB3E8a5ecF4a5" + creationBlock: 95254417 + related: + - references/guides/bridge.md + +initialize: + notes: + - "Initial bootstrap for DAO wiring and bridge policy state." + - "Sets guardian to msg.sender and uses NameService UBISCHEME as feeRecipient fallback to avatar when missing." + - "Preloads default LZ mappings for Ethereum, Celo, Fuse, and XDC using this contract as trusted remote." + mutability: nonpayable + access: initializer + inputs: + - nameService: address + - limits: (uint256,uint256,uint256,uint256,bool) + - fees: (uint256,uint256,uint256) + outputs: [] + +upgrade: + notes: + - "Reinitializer for migration path; re-applies default LZ mappings through internal add function." + - "Used when upgrading existing proxy deployments to mapping-aware version." + mutability: nonpayable + access: reinitializer + inputs: [] + outputs: [] + +addLzChainSupport: + notes: + - "Administrative chain wiring method for LayerZero transport." + - "Writes both forward (chainId->lzChainId) and reverse (lzChainId->chainId) mappings." + - "Also updates trustedRemoteLookup to enforce source-contract authenticity on receive." + mutability: nonpayable + access: ownerOrAvatarOrGuardian + inputs: + - lzChainId: uint16 + - chainId: uint256 + - remote: address + outputs: [] + +approveRequest: + notes: + - "Manual override for stuck/exceptional inbound requests." + - "When approved, destination _bridgeFrom skips limits enforcement for that request id." + mutability: nonpayable + access: ownerOrAvatarOrGuardian + inputs: + - id: uint256 + outputs: [] + +preventRequest: + notes: + - "Emergency/manual block for a specific request id." + - "Prevents execution by pre-marking executedRequests[id]=true." + mutability: nonpayable + access: ownerOrAvatarOrGuardian + inputs: + - id: uint256 + outputs: [] + +setFeeRecipient: + notes: + - "Sets destination fee mint recipient." + - "If feeRecipient is zero, fee minting is skipped in _bridgeFrom." + mutability: nonpayable + access: ownerOrAvatarOrGuardian + inputs: + - recipient: address + outputs: [] + +setBridgeLimits: + notes: + - "Updates operational throttles: min amount, tx cap, account/day cap, global/day cap, whitelist mode." + - "These limits are checked by canBridge and enforced in _enforceLimits." + mutability: nonpayable + access: ownerOrAvatarOrGuardian + inputs: + - limits: (uint256,uint256,uint256,uint256,bool) + outputs: [] + +setBridgeFees: + notes: + - "Updates bridge fee parameters in basis points with min/max clamps." + - "Reverts when fee exceeds 10000 bps." + - "Effective fee deduction is computed in _takeFee during destination execution." + mutability: nonpayable + access: ownerOrAvatarOrGuardian + inputs: + - fees: (uint256,uint256,uint256) + outputs: [] + +setDisabledBridges: + notes: + - "Toggles allowlist state for source bridge combinations." + - "Key format is keccak256(abi.encode(sourceChainId, BridgeService))." + - "Checked in _bridgeFrom before request execution." + mutability: nonpayable + access: ownerOrAvatarOrGuardian + inputs: + - bridgeKeys: bytes32[] + - disabled: bool[] + outputs: [] + +setFaucet: + notes: + - "Configures optional faucet top-up callback used after successful destination processing." + mutability: nonpayable + access: ownerOrAvatarOrGuardian + inputs: + - _faucet: address + outputs: [] + +setGuardian: + notes: + - "Rotates guardian authority used by owner/avatar/guardian admin gate." + mutability: nonpayable + access: ownerOrAvatarOrGuardian + inputs: + - _guardian: address + outputs: [] + +withdraw: + notes: + - "Avatar-only rescue function for arbitrary token balances held by bridge." + - "Amount 0 means full balance withdrawal." + mutability: nonpayable + access: avatar + inputs: + - token: address + - amount: uint256 + outputs: [] + +pauseBridge: + notes: + - "Sets isClosed state for outbound flow." + - "When closed, _bridgeTo reverts with BRIDGE_LIMITS('closed')." + mutability: nonpayable + access: ownerOrAvatarOrGuardian + inputs: + - isPaused: bool + outputs: [] + +canBridge: + notes: + - "Purely diagnostic read path for preflight checks." + - "Returns (ok, reason) using BridgeHelperLibrary policy evaluation." + - "Includes close flag, whitelist gate, and per-account/global daily limit windows." + mutability: view + inputs: + - from: address + - amount: uint256 + outputs: + - isWithinLimit: bool + - error: string + +bridgeTo: + notes: + - "Generic outbound bridge entrypoint selecting BridgeService.AXELAR or BridgeService.LZ." + - "Burns source-side token amount, normalizes to 18 decimals, and emits BridgeRequest with request id." + - "Requires msg.value for transport fee payment." + mutability: payable + access: anyone + inputs: + - target: address + - targetChainId: uint256 + - amount: uint256 + - bridge: uint8 + outputs: [] + +bridgeToWithLz: + notes: + - "Outbound convenience wrapper fixed to LayerZero transport." + - "If adapterParams is empty, contract injects default type-1 options with 400k gas." + - "Compares required native fee from estimateSendFee against msg.value and reverts on underpayment." + mutability: payable + access: anyone + inputs: + - target: address + - targetChainId: uint256 + - amount: uint256 + - adapterParams: bytes + outputs: [] + +bridgeToWithAxelar: + notes: + - "Outbound convenience wrapper fixed to Axelar transport." + - "Uses gasRefundAddress when provided, otherwise msg.sender as refund recipient." + mutability: payable + access: anyone + inputs: + - target: address + - targetChainId: uint256 + - amount: uint256 + - gasRefundAddress: address + outputs: [] + +toLzChainId: + notes: + - "Lookup helper from local chain id to LayerZero chain id." + mutability: view + inputs: + - chainId: uint256 + outputs: + - lzChainId: uint16 + +fromLzChainId: + notes: + - "Lookup helper from LayerZero chain id to local chain id." + mutability: view + inputs: + - lzChainId: uint16 + outputs: + - chainId: uint256 + +toAxelarChainId: + notes: + - "Pure mapping in current implementation: chainId 1 -> 'Ethereum', 5 -> 'ethereum-2', 42220 and 44787 -> 'celo'; any other id returns empty string and outbound Axelar reverts UNSUPPORTED_CHAIN." + mutability: pure + inputs: + - chainId: uint256 + outputs: + - axlChainId: string + +fromAxelarChainId: + notes: + - "Maps Axelar chain-name strings back into local numeric chain ids." + mutability: pure + inputs: + - axlChainId: string + outputs: + - chainId: uint256 + +estimateSendFee: + notes: + - "Transport fee preflight for LZ path." + - "Builds payload with request id set to 0 for estimation." + - "Returns (0,0) on endpoint estimation failure in handler implementation." + - "_normalizedAmount must match BridgeHelperLibrary.normalizeFromTokenTo18Decimals burned raw amount using native token decimals on the outbound chain." + mutability: view + inputs: + - _dstChainId: uint16 + - _fromAddress: address + - _toAddress: address + - _normalizedAmount: uint256 + - _useZro: bool + - _adapterParams: bytes + outputs: + - nativeFee: uint256 + - zroFee: uint256 + +lzReceive: + notes: + - "LayerZero receive entrypoint." + - "Validates caller is configured endpoint before dispatching nonblocking receive pipeline." + mutability: nonpayable + inputs: + - _srcChainId: uint16 + - _srcAddress: bytes + - _nonce: uint64 + - _payload: bytes + outputs: [] + +lzEndpoint_: + notes: + - "Immutable LayerZero endpoint configured in constructor." + mutability: view + inputs: [] + outputs: + - endpoint: address + +HOME_CHAIN_ID: + notes: + - "Immutable deployment home chain marker." + mutability: view + inputs: [] + outputs: + - chainId: uint32 + +guardian: + notes: + - "Current guardian account authorized for admin operations." + mutability: view + inputs: [] + outputs: + - account: address + +executedRequests: + notes: + - "Replay protection state for inbound request ids." + mutability: view + inputs: + - id: uint256 + outputs: + - done: bool + +disabledSourceBridges: + notes: + - "Per-source bridge toggle state keyed by (sourceChainId, bridgeService) hash." + mutability: view + inputs: + - key: bytes32 + outputs: + - disabled: bool + +isClosed: + notes: + - "Outbound bridge pause state." + mutability: view + inputs: [] + outputs: + - closed: bool + +bridgeFees: + notes: + - "Current fee policy parameters: minFee, maxFee, feeBps." + mutability: view + inputs: [] + outputs: + - minFee: uint256 + - maxFee: uint256 + - fee: uint256 + +bridgeLimits: + notes: + - "Current bridge traffic limits and whitelist policy." + mutability: view + inputs: [] + outputs: + - dailyLimit: uint256 + - txLimit: uint256 + - accountDailyLimit: uint256 + - minAmount: uint256 + - onlyWhitelisted: bool + +bridgeDailyLimit: + notes: + - "Aggregate 24h bridge usage tracker." + mutability: view + inputs: [] + outputs: + - lastTransferReset: uint256 + - bridged24Hours: uint256 + +accountsDailyLimit: + notes: + - "Per-account 24h usage tracker." + mutability: view + inputs: + - account: address + outputs: + - lastTransferReset: uint256 + - bridged24Hours: uint256 + +faucet: + notes: + - "Optional gas top-up contract used on destination completion." + mutability: view + inputs: [] + outputs: + - addr: address + +currentId: + notes: + - "Monotonic nonce component used to derive outbound request ids." + mutability: view + inputs: [] + outputs: + - id: uint256 + +lzChainIdsMapping: + notes: + - "Local chain id -> LayerZero chain id mapping." + mutability: view + inputs: + - chainId: uint256 + outputs: + - lzChainId: uint16 + +feeRecipient: + notes: + - "Address receiving bridge fee mints on destination." + mutability: view + inputs: [] + outputs: + - recipient: address + +approvedRequests: + notes: + - "Manual approvals allowing request execution above standard limits." + mutability: view + inputs: + - id: uint256 + outputs: + - approved: bool + +lzChainToIdsMapping: + notes: + - "LayerZero chain id -> local chain id mapping." + mutability: view + inputs: + - lzChainId: uint16 + outputs: + - chainId: uint256 + +trustedRemoteLookup: + notes: + - "Trusted remote path used to authenticate inbound LZ/Axelar source contract." + mutability: view + inputs: + - lzChainId: uint16 + outputs: + - path: bytes + +gateway: + notes: + - "Axelar gateway address inherited from AxelarExecutable." + mutability: view + inputs: [] + outputs: + - addr: address + +gasService: + notes: + - "Axelar gas service used to prepay cross-chain execution." + mutability: view + inputs: [] + outputs: + - addr: address + +nameService: + notes: + - "DAO NameService pointer from DAOUpgradeableContract." + mutability: view + inputs: [] + outputs: + - addr: address + +avatar: + notes: + - "DAO avatar authority address." + mutability: view + inputs: [] + outputs: + - addr: address + +owner: + notes: + - "Ownable owner from upgradeable ownership flow." + mutability: view + inputs: [] + outputs: + - account: address + +events: + BridgeRequest: + indexed: + - from: address + - to: address + - id: uint256 + data: + - targetChainId: uint256 + - normalizedAmount: uint256 + - timestamp: uint256 + - bridge: uint8 + note: "Outbound intent event; relayers consume this to deliver payload on destination." + ExecutedTransfer: + indexed: + - from: address + - to: address + - id: uint256 + data: + - normalizedAmount: uint256 + - fee: uint256 + - sourceChainId: uint256 + - bridge: uint8 + note: "Destination completion event after replay checks, source-auth checks, limit checks, and mint/fee mint." + FalseSender: + indexed: [] + data: + - sourceChainId: uint256 + - sourceAddress: address + note: "Inbound message ignored because source contract does not match trusted remote path." + +errors: + AlreadyInitialized: "LZ chain support already initialized for this lz chain id." + NOT_GUARDIAN: + inputs: + - sender: address + WRONG_TOKEN: + inputs: + - token: address + INVALID_TARGET_OR_CHAINID: + inputs: + - target: address + - chainId: uint256 + BRIDGE_LIMITS: + inputs: + - reason: string + TRANSFER_FROM: "Source burn/transferFrom style failure." + TRANSFER: "Destination transfer style failure." + ALREADY_EXECUTED: + inputs: + - requestId: uint256 + MISSING_FEE: "Bridge call requires msg.value for transport fee." + UNSUPPORTED_CHAIN: + inputs: + - chainId: uint256 + LZ_FEE: + inputs: + - required: uint256 + - sent: uint256 + INVALID_SENDER: + inputs: + - _srcAddress: bytes + INVALID_ENDPOINT: + inputs: + - lzEndpoint: address diff --git a/.agents/skills/gooddollar/references/contracts/MessagePassingBridge.selectors.yaml b/.agents/skills/gooddollar/references/contracts/MessagePassingBridge.selectors.yaml new file mode 100644 index 0000000..104b943 --- /dev/null +++ b/.agents/skills/gooddollar/references/contracts/MessagePassingBridge.selectors.yaml @@ -0,0 +1,52 @@ +# Generated by scripts/selectors.mjs +functions: + initialize(address,(uint256,uint256,uint256,uint256,bool),(uint256,uint256,uint256)): 0xfad16abe + upgrade(): 0xd55ec697 + addLzChainSupport(uint16,uint256,address): 0xc01c8123 + approveRequest(uint256): 0xd7d1bbdb + preventRequest(uint256): 0xc612f9ea + setFeeRecipient(address): 0xe74b981b + setBridgeLimits((uint256,uint256,uint256,uint256,bool)): 0x29b70872 + setBridgeFees((uint256,uint256,uint256)): 0x82dc737d + setDisabledBridges(bytes32[],bool[]): 0xc78ab882 + setFaucet(address): 0xd8b31c77 + setGuardian(address): 0x8a0dac4a + withdraw(address,uint256): 0xf3fef3a3 + pauseBridge(bool): 0x1a394795 + canBridge(address,uint256): 0x3095634a + bridgeTo(address,uint256,uint256,uint8): 0x1fec5c5c + bridgeToWithLz(address,uint256,uint256,bytes): 0xc56bbdd9 + bridgeToWithAxelar(address,uint256,uint256,address): 0x40a00aaf + toLzChainId(uint256): 0x5b23a990 + fromLzChainId(uint16): 0x16ad5512 + toAxelarChainId(uint256): 0x9a9ee081 + fromAxelarChainId(string): 0x56026f37 + estimateSendFee(uint16,address,address,uint256,bool,bytes): 0x05fead15 + lzReceive(uint16,bytes,uint64,bytes): 0x001d3567 + lzEndpoint_(): 0x020051cf + HOME_CHAIN_ID(): 0x8f65be85 + guardian(): 0x452a9320 + executedRequests(uint256): 0x425cfb53 + disabledSourceBridges(bytes32): 0x69c20d36 + isClosed(): 0xc2b6b58c + bridgeFees(): 0x7b0240c0 + bridgeLimits(): 0xc6dd812f + bridgeDailyLimit(): 0xb2f7667f + accountsDailyLimit(address): 0xd4227947 + faucet(): 0xde5f72fd + currentId(): 0xe00dd161 + lzChainIdsMapping(uint256): 0xb5569f18 + feeRecipient(): 0x46904840 + approvedRequests(uint256): 0x0dce292e + lzChainToIdsMapping(uint16): 0x73800fc4 + trustedRemoteLookup(uint16): 0x7533d788 + gateway(): 0x116191b6 + gasService(): 0x6a22d8cc + nameService(): 0x3e6326fc + avatar(): 0x5aef7de6 + owner(): 0x8da5cb5b +events: + BridgeRequest(address,address,uint256,uint256,uint256,uint256,uint8): 0x34b675c8c84b6a9e7979a0d3a54f2b036a19d6444167091a925af2d81e8e66fe + ExecutedTransfer(address,address,uint256,uint256,uint256,uint256,uint8): 0x81e772e0c4366ddbae472926005267ef278dbb257be45dfe97c676ceae348dbe + FalseSender(uint256,address): 0x1eafb58197ea0dc76b9278ccad47f61a239f00b017d89a19081a89321cce213d +errors: {} diff --git a/.agents/skills/gooddollar/references/contracts/NameService.abi.yaml b/.agents/skills/gooddollar/references/contracts/NameService.abi.yaml new file mode 100644 index 0000000..01692b7 --- /dev/null +++ b/.agents/skills/gooddollar/references/contracts/NameService.abi.yaml @@ -0,0 +1,104 @@ +# NameService — string-key to address registry for GoodProtocol deployments +# Resolves keys such as IDENTITY, UBISCHEME, GOODDOLLAR, GDAO_STAKING. + +meta: + name: NameService + version: UUPS-upgradeable v1 + source: + - https://raw.githubusercontent.com/GoodDollar/GoodProtocol/master/contracts/utils/NameService.sol + implements: [] + inherits: [Initializable, UUPSUpgradeable] + note: > + Almost every integration starts here. Writes are restricted to the DAO + avatar. Reads are permissionless. Use getAddress(string) with the same + key strings your deployment documented in releases/deployment.json. + deployments: + mainnet: + production: + NameService: + networkId: 122 + address: "0xec6dcE387B1616a0c44fF2E4fA9E90e53Cf14eb0" + creationBlock: 15740314 + production-celo: + NameService: + networkId: 42220 + address: "0x0F5dB7a64A6a64052693676CA898EC7F7A94FF4e" + creationBlock: 17237962 + production-xdc: + NameService: + networkId: 50 + address: "0x1e5154Bf5e31FF56051bbd45958b879Fb7a290FE" + creationBlock: 95143608 + related: + - https://docs.gooddollar.org/for-developers/core-contracts/nameservice + - https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json + +addresses: + # Solidity auto-getter for public mapping addresses(bytes32 => address). + notes: + - "Prefer getAddress(string) off-chain; this expects keccak256(abi.encodePacked(name)) for manual lookups." + mutability: view + inputs: + - nameHash: bytes32 + outputs: + - addr: address + +dao: + mutability: view + inputs: [] + outputs: + - controller: address + +initialize: + notes: + - "Initializer wires Controller and optional pre-hashed name batch." + - "Automatically registers CONTROLLER and AVATAR hashes to dao and dao.avatar()." + mutability: nonpayable + access: initializer + inputs: + - _dao: address + - _nameHashes: bytes32[] + - _addresses: address[] + outputs: [] + +setAddress: + notes: + - "Stores addresses[keccak256(bytes(name))] = addr and emits AddressChanged." + mutability: nonpayable + access: avatar + inputs: + - name: string + - addr: address + outputs: [] + emits: [AddressChanged] + errors: [ONLY_AVATAR] + +setAddresses: + notes: + - "Batch write by raw bytes32 keys; no per-name event emission in this loop." + mutability: nonpayable + access: avatar + inputs: + - hash: bytes32[] + - addrs: address[] + outputs: [] + errors: [ONLY_AVATAR] + +getAddress: + notes: + - "Primary lookup used by claim, staking, identity, and swap integrations." + mutability: view + inputs: + - name: string + outputs: + - addr: address + +events: + AddressChanged: + indexed: [] + data: + - name: string + - addr: address + +errors: + ONLY_AVATAR: "only avatar can call this method — revert string on any avatar-gated path including UUPS _authorizeUpgrade." diff --git a/.agents/skills/gooddollar/references/contracts/NameService.selectors.yaml b/.agents/skills/gooddollar/references/contracts/NameService.selectors.yaml new file mode 100644 index 0000000..48e1bcf --- /dev/null +++ b/.agents/skills/gooddollar/references/contracts/NameService.selectors.yaml @@ -0,0 +1,11 @@ +# Generated by scripts/selectors.mjs +functions: + addresses(bytes32): 0x699f200f + dao(): 0x4162169f + initialize(address,bytes32[],address[]): 0xd41b4e72 + setAddress(string,address): 0x9b2ea4bd + setAddresses(bytes32[],address[]): 0x4ab01f5b + getAddress(string): 0xbf40fac1 +events: + AddressChanged(string,address): 0x135cf55549d8538a41f19f46cc85625da93e68b63484cca8fcb9aaf19e520137 +errors: {} diff --git a/.agents/skills/gooddollar/references/contracts/SuperToken.abi.yaml b/.agents/skills/gooddollar/references/contracts/SuperToken.abi.yaml new file mode 100644 index 0000000..abfc91c --- /dev/null +++ b/.agents/skills/gooddollar/references/contracts/SuperToken.abi.yaml @@ -0,0 +1,1033 @@ +# SuperToken — the Superfluid Protocol's token standard +# Merges three variants into a single ABI surface: +# • Wrapper Super Token — wraps an existing ERC-20 (upgrade / downgrade) +# • Native Asset Super Token (SETH) — wraps chain-native asset (upgradeByETH / downgradeToETH) +# • Pure Super Token — pre-minted, no underlying token (upgrade/downgrade revert) +# +# Inherits ERC-20, ERC-777, ERC-2612 (permit), EIP-5267, and the Superfluid real-time +# balance and agreement hosting layer from SuperfluidToken. +# +# Proxy / upgradability functions are omitted: +# castrate, getCodeAddress, proxiableUUID, initialize, initializeWithAdmin, updateCode +# Proxy-related events are also omitted: CodeUpdated, Initialized. + +meta: + name: SuperToken + version: v1 + source: + - https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/refs/heads/dev/packages/ethereum-contracts/contracts/superfluid/SuperToken.sol + - https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/refs/heads/dev/packages/ethereum-contracts/contracts/interfaces/superfluid/ISuperToken.sol + - https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/refs/heads/dev/packages/ethereum-contracts/contracts/superfluid/SuperfluidToken.sol + - https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/refs/heads/dev/packages/ethereum-contracts/contracts/interfaces/superfluid/IYieldBackend.sol + inherits: [SuperfluidToken, ISuperToken, UUPSProxiable] + yield_backends: + - name: AaveYieldBackend + note: "Production backend for ERC-20 wrapper tokens using Aave V3" + source: https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/refs/heads/dev/packages/ethereum-contracts/contracts/superfluid/AaveYieldBackend.sol + - name: AaveETHYieldBackend + note: "Variant for native-asset (ETH/WETH) wrapper tokens using Aave V3" + source: https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/refs/heads/dev/packages/ethereum-contracts/contracts/superfluid/AaveETHYieldBackend.sol + - name: ERC4626YieldBackend + note: "Generic backend for any ERC-4626 vault" + source: https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/refs/heads/dev/packages/ethereum-contracts/contracts/superfluid/ERC4626YieldBackend.sol + - name: SparkYieldBackend + note: "Extends ERC4626YieldBackend for Spark Protocol vaults with referral tracking" + source: https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/refs/heads/dev/packages/ethereum-contracts/contracts/superfluid/SparkYieldBackend.sol + variants: + wrapper: "Standard ERC-20 wrapper — upgrade() / downgrade()" + native-asset: "Native asset wrapper (SETH) — upgradeByETH() / downgradeToETH()" + pure: "Pre-minted supply, no underlying — upgrade/downgrade revert" + note: > + Super Tokens are deployed as individual proxies (one per token) by the + SuperTokenFactory. There is no single canonical deployment address. + All proxies share the same logic contract which is upgraded via governance. + +# wrapper super token — a Super Token backed by an ERC-20 underlying token +# native asset super token (SETH) — a Super Token backed by the chain-native asset (ETH, MATIC, etc.) +# pure super token — a Super Token with no underlying; supply is pre-minted at deploy time +# underlying token — the ERC-20 token that a wrapper super token wraps +# real-time balance — balance that changes continuously based on active agreements (CFA/GDA) +# available balance — real-time balance minus locked deposits +# critical — an account whose available balance is negative +# solvent — an account whose real-time balance (before deposit deductions) is non-negative +# operator (ERC-777) — an address authorized to send/burn tokens on behalf of a holder +# buffer / deposit — collateral locked while an outgoing flow is active + +# == ERC-20 Token Info == + +name: + mutability: view + inputs: [] + outputs: + - string + +symbol: + mutability: view + inputs: [] + outputs: + - string + +decimals: + # Always returns 18 regardless of underlying token decimals. + notes: + - "Always returns 18, regardless of the underlying token's decimals (e.g. USDC has 6). The upgrade/downgrade functions handle decimal conversion internally." + mutability: pure + inputs: [] + outputs: + - uint8 + +totalSupply: + mutability: view + inputs: [] + outputs: + - uint256 + +# == ERC-20 Balance & Allowance == + +balanceOf: + # Returns max(0, availableBalance) — clamps negative balances to zero. + # For the full real-time picture, use realtimeBalanceOfNow. + notes: + - "Returns max(0, availableBalance) — negative/critical balances are clamped to zero. Use realtimeBalanceOfNow to detect critical accounts." + mutability: view + inputs: + - account: address + outputs: + - balance: uint256 + +allowance: + mutability: view + inputs: + - account: address + - spender: address + outputs: + - uint256 + +approve: + mutability: nonpayable + access: anyone + inputs: + - spender: address + - amount: uint256 + outputs: + - bool + emits: [Approval] + errors: [SUPER_TOKEN_APPROVE_FROM_ZERO_ADDRESS, SUPER_TOKEN_APPROVE_TO_ZERO_ADDRESS] + +increaseAllowance: + mutability: nonpayable + access: anyone + inputs: + - spender: address + - addedValue: uint256 + outputs: + - bool + emits: [Approval] + errors: [SUPER_TOKEN_APPROVE_FROM_ZERO_ADDRESS, SUPER_TOKEN_APPROVE_TO_ZERO_ADDRESS] + +decreaseAllowance: + mutability: nonpayable + access: anyone + inputs: + - spender: address + - subtractedValue: uint256 + outputs: + - bool + emits: [Approval] + errors: [SUPER_TOKEN_APPROVE_FROM_ZERO_ADDRESS, SUPER_TOKEN_APPROVE_TO_ZERO_ADDRESS] + +# == ERC-20 Transfers == + +transfer: + # ERC-20 transfer. Does NOT invoke ERC-777 send/receive hooks (by design). + mutability: nonpayable + access: anyone + inputs: + - recipient: address + - amount: uint256 + outputs: + - bool + emits: [Sent, Transfer] + errors: [SUPER_TOKEN_TRANSFER_FROM_ZERO_ADDRESS, SUPER_TOKEN_TRANSFER_TO_ZERO_ADDRESS, SF_TOKEN_MOVE_INSUFFICIENT_BALANCE] + +transferFrom: + # ERC-20 transferFrom. Does NOT invoke ERC-777 send/receive hooks. + # Does NOT emit an Approval event on allowance spend (OZ v5 behaviour). + mutability: nonpayable + access: anyone + inputs: + - holder: address + - recipient: address + - amount: uint256 + outputs: + - bool + emits: [Sent, Transfer] + errors: [SUPER_TOKEN_TRANSFER_FROM_ZERO_ADDRESS, SUPER_TOKEN_TRANSFER_TO_ZERO_ADDRESS, SF_TOKEN_MOVE_INSUFFICIENT_BALANCE] + +transferAll: + # Transfer the caller's entire balanceOf to recipient. + mutability: nonpayable + access: anyone # transfers msg.sender's entire balance + inputs: + - recipient: address + emits: [Sent, Transfer] + errors: [SUPER_TOKEN_TRANSFER_FROM_ZERO_ADDRESS, SUPER_TOKEN_TRANSFER_TO_ZERO_ADDRESS, SF_TOKEN_MOVE_INSUFFICIENT_BALANCE] + +# == ERC-777 == + +granularity: + # Always returns 1. + mutability: pure + inputs: [] + outputs: + - uint256 + +send: + # ERC-777 send — invokes tokensToSend / tokensReceived hooks. + mutability: nonpayable + access: anyone + inputs: + - recipient: address + - amount: uint256 + - userData: bytes + emits: [Sent, Transfer] + errors: [SUPER_TOKEN_TRANSFER_FROM_ZERO_ADDRESS, SUPER_TOKEN_TRANSFER_TO_ZERO_ADDRESS, SF_TOKEN_MOVE_INSUFFICIENT_BALANCE, SUPER_TOKEN_NOT_ERC777_TOKENS_RECIPIENT] + +burn: + # ERC-777 burn — in SuperToken this actually performs a downgrade (unwrap). + notes: + - "Gotcha: Reverts with SUPER_TOKEN_NO_UNDERLYING_TOKEN on Pure Super Tokens." + mutability: nonpayable + access: anyone + inputs: + - amount: uint256 + - userData: bytes + emits: [Burned, Transfer, TokenDowngraded] + errors: [SUPER_TOKEN_NO_UNDERLYING_TOKEN, SUPER_TOKEN_BURN_FROM_ZERO_ADDRESS, SF_TOKEN_BURN_INSUFFICIENT_BALANCE, SUPER_TOKEN_INFLATIONARY_DEFLATIONARY_NOT_SUPPORTED] + +authorizeOperator: + mutability: nonpayable + access: anyone + inputs: + - operator: address + emits: [AuthorizedOperator] + +revokeOperator: + mutability: nonpayable + access: anyone + inputs: + - operator: address + emits: [RevokedOperator] + +isOperatorFor: + mutability: view + inputs: + - operator: address + - tokenHolder: address + outputs: + - bool + +defaultOperators: + mutability: view + inputs: [] + outputs: + - "address[]" + +operatorSend: + # ERC-777 operatorSend — invokes tokensToSend / tokensReceived hooks. + mutability: nonpayable + access: operator + inputs: + - sender: address + - recipient: address + - amount: uint256 + - userData: bytes + - operatorData: bytes + emits: [Sent, Transfer] + errors: [SUPER_TOKEN_CALLER_IS_NOT_OPERATOR_FOR_HOLDER, SUPER_TOKEN_TRANSFER_FROM_ZERO_ADDRESS, SUPER_TOKEN_TRANSFER_TO_ZERO_ADDRESS, SF_TOKEN_MOVE_INSUFFICIENT_BALANCE, SUPER_TOKEN_NOT_ERC777_TOKENS_RECIPIENT] + +operatorBurn: + # ERC-777 operatorBurn — like burn(), actually performs a downgrade. + mutability: nonpayable + access: operator + inputs: + - account: address + - amount: uint256 + - userData: bytes + - operatorData: bytes + emits: [Burned, Transfer, TokenDowngraded] + errors: [SUPER_TOKEN_CALLER_IS_NOT_OPERATOR_FOR_HOLDER, SUPER_TOKEN_NO_UNDERLYING_TOKEN, SUPER_TOKEN_BURN_FROM_ZERO_ADDRESS, SF_TOKEN_BURN_INSUFFICIENT_BALANCE, SUPER_TOKEN_INFLATIONARY_DEFLATIONARY_NOT_SUPPORTED] + +# == ERC-20 Permit == + +permit: + mutability: nonpayable + access: anyone + inputs: + - owner: address + - spender: address + - value: uint256 + - deadline: uint256 + - v: uint8 + - r: bytes32 + - s: bytes32 + emits: [Approval] + errors: [SUPER_TOKEN_PERMIT_EXPIRED_SIGNATURE, SUPER_TOKEN_PERMIT_INVALID_SIGNER, ECDSAInvalidSignature, ECDSAInvalidSignatureLength, ECDSAInvalidSignatureS, SUPER_TOKEN_APPROVE_FROM_ZERO_ADDRESS, SUPER_TOKEN_APPROVE_TO_ZERO_ADDRESS] + +nonces: + mutability: view + inputs: + - owner: address + outputs: + - uint256 + +DOMAIN_SEPARATOR: + mutability: view + inputs: [] + outputs: + - bytes32 + +eip712Domain: + # EIP-5267 domain retrieval. + mutability: view + inputs: [] + outputs: + - fields: bytes1 + - name: string + - version: string + - chainId: uint256 + - verifyingContract: address + - salt: bytes32 + - "extensions: uint256[]" + +# == ERC-20 Wrapping == +# These functions interact with the underlying ERC-20 token. +# They revert with SUPER_TOKEN_NO_UNDERLYING_TOKEN on Pure and Native Asset +# Super Tokens (use upgradeByETH / downgradeToETH for SETH). + +upgrade: + # Wrap underlying ERC-20 into Super Tokens for msg.sender. + # Requires prior ERC-20 approval on the underlying token. + notes: + - "Gotcha: amount is always in SuperToken decimals (18), regardless of the underlying token's decimals. The contract handles downscaling internally when pulling from the underlying via transferFrom. However, the ERC-20 approval on the underlying token must use the underlying's native decimals. Example: to wrap 1000 USDC, approve 1000e6 on USDC, then call upgrade(1000e18)." + mutability: nonpayable + access: anyone # wraps for msg.sender + inputs: + - amount: uint256 # in SuperToken decimals (always 18) + emits: [Minted, Transfer, TokenUpgraded] + errors: [SUPER_TOKEN_NO_UNDERLYING_TOKEN, SUPER_TOKEN_INFLATIONARY_DEFLATIONARY_NOT_SUPPORTED, SUPER_TOKEN_MINT_TO_ZERO_ADDRESS, SafeERC20FailedOperation, SafeCastOverflowedUintToInt] + +upgradeTo: + # Wrap underlying ERC-20 and mint Super Tokens to a different address. + mutability: nonpayable + access: anyone + inputs: + - to: address + - amount: uint256 + - userData: bytes + emits: [Minted, Transfer, TokenUpgraded] + errors: [SUPER_TOKEN_NO_UNDERLYING_TOKEN, SUPER_TOKEN_INFLATIONARY_DEFLATIONARY_NOT_SUPPORTED, SUPER_TOKEN_MINT_TO_ZERO_ADDRESS, SUPER_TOKEN_NOT_ERC777_TOKENS_RECIPIENT, SafeERC20FailedOperation, SafeCastOverflowedUintToInt] + +downgrade: + # Unwrap Super Tokens back to underlying ERC-20 for msg.sender. + mutability: nonpayable + access: anyone # unwraps to msg.sender + inputs: + - amount: uint256 + emits: [Burned, Transfer, TokenDowngraded] + errors: [SUPER_TOKEN_NO_UNDERLYING_TOKEN, SUPER_TOKEN_BURN_FROM_ZERO_ADDRESS, SF_TOKEN_BURN_INSUFFICIENT_BALANCE, SUPER_TOKEN_INFLATIONARY_DEFLATIONARY_NOT_SUPPORTED, SafeERC20FailedOperation] + +downgradeTo: + # Unwrap Super Tokens and send underlying ERC-20 to a different address. + mutability: nonpayable + access: anyone + inputs: + - to: address + - amount: uint256 + emits: [Burned, Transfer, TokenDowngraded] + errors: [SUPER_TOKEN_NO_UNDERLYING_TOKEN, SUPER_TOKEN_BURN_FROM_ZERO_ADDRESS, SF_TOKEN_BURN_INSUFFICIENT_BALANCE, SUPER_TOKEN_INFLATIONARY_DEFLATIONARY_NOT_SUPPORTED, SafeERC20FailedOperation] + +getUnderlyingToken: + # Returns address(0) for Pure and Native Asset Super Tokens. + mutability: view + inputs: [] + outputs: + - address + +getUnderlyingDecimals: + mutability: view + inputs: [] + outputs: + - uint8 + +toUnderlyingAmount: + # Convert a Super Token amount to its underlying equivalent, accounting for + # decimal differences. adjustedAmount strips precision loss. + mutability: view + inputs: + - amount: uint256 + outputs: + - underlyingAmount: uint256 + - adjustedAmount: uint256 + +# == Native Asset Wrapping (SETH only) == +# These functions exist only on Native Asset Super Token (SETH) proxies. +# They are defined in the SETHProxy contract, not in the SuperToken logic. +# The SETH proxy also accepts plain ETH transfers via receive() which mints +# Super Tokens to the sender. + +upgradeByETH: + # Wrap sent ETH/native asset into Super Tokens for msg.sender. + # Variant: native-asset + mutability: payable + access: anyone # wraps for msg.sender + inputs: [] + emits: [Minted, Transfer, TokenUpgraded] + +upgradeByETHTo: + # Wrap sent ETH/native asset into Super Tokens for a different address. + # Variant: native-asset + mutability: payable + access: anyone + inputs: + - to: address + emits: [Minted, Transfer, TokenUpgraded] + +downgradeToETH: + # Unwrap Super Tokens back to ETH/native asset for msg.sender. + # Variant: native-asset + mutability: nonpayable + access: anyone # unwraps to msg.sender + inputs: + - wad: uint256 + emits: [Burned, Transfer, TokenDowngraded] + +# == Real-time Balance == + +realtimeBalanceOf: + # Full real-time balance across ALL agreements at a given timestamp. + # This aggregates the realtimeBalanceOf from every agreement (CFA, GDA, IDA) + # into a single balance. Use this (or realtimeBalanceOfNow) to check an + # account's actual balance — not the per-agreement versions. + # availableBalance = settled + agreement dynamics − max(0, deposit − owedDeposit) + mutability: view + inputs: + - account: address + - timestamp: uint256 + outputs: + - availableBalance: int256 + - deposit: uint256 + - owedDeposit: uint256 + +realtimeBalanceOfNow: + # Convenience wrapper: realtimeBalanceOf at the current Host timestamp. + # This is the recommended way to check an account's real-time balance. + mutability: view + inputs: + - account: address + outputs: + - availableBalance: int256 + - deposit: uint256 + - owedDeposit: uint256 + - timestamp: uint256 + +isAccountCritical: + # True if availableBalance < 0 at the given timestamp. + mutability: view + inputs: + - account: address + - timestamp: uint256 + outputs: + - isCritical: bool + +isAccountCriticalNow: + mutability: view + inputs: + - account: address + outputs: + - isCritical: bool + +isAccountSolvent: + # True if realtime balance (before deposit deduction) >= 0 at the given timestamp. + mutability: view + inputs: + - account: address + - timestamp: uint256 + outputs: + - isSolvent: bool + +isAccountSolventNow: + mutability: view + inputs: + - account: address + outputs: + - isSolvent: bool + +# == Admin == +# The admin defaults to the Host contract when address(0). +# An explicit admin can be set during initializeWithAdmin or via changeAdmin. + +changeAdmin: + mutability: nonpayable + access: admin + inputs: + - newAdmin: address + emits: [AdminChanged] + errors: [SUPER_TOKEN_ONLY_ADMIN] + +getAdmin: + # Returns address(0) if the Host is the implicit admin. + mutability: view + inputs: [] + outputs: + - address + +# == Yield Backend == +# Hot-pluggable yield generation for wrapper Super Tokens. The yield backend is a +# contract implementing IYieldBackend that is invoked via delegatecall. When enabled, +# the underlying ERC-20 is deposited into a yield protocol (e.g. Aave, Spark, ERC4626 vaults). +# Surplus yield (balance exceeding totalSupply) can be withdrawn by the admin. + +enableYieldBackend: + # Enable a yield backend and deposit all underlying token balance into it. + # Requires no existing yield backend to be set. + notes: + - "Gotcha: Reverts if a yield backend is already enabled — must call disableYieldBackend first to switch backends." + - "The yield backend contract is invoked via delegatecall — it executes in the SuperToken's context." + mutability: nonpayable + access: admin + inputs: + - newYieldBackend: address # must implement IYieldBackend + emits: [YieldBackendEnabled] + +disableYieldBackend: + # Withdraw all assets from the yield backend and disable it. + notes: + - "Calls withdrawMax() then disable() on the backend via delegatecall." + mutability: nonpayable + access: admin + inputs: [] + emits: [YieldBackendDisabled] + +getYieldBackend: + # Returns the current yield backend address, or address(0) if none is set. + mutability: view + inputs: [] + outputs: + - yieldBackend: address + +withdrawSurplusFromYieldBackend: + # Withdraw yield surplus (deposited amount exceeding totalSupply) from the backend. + # The surplus is sent to a receiver defined by the yield backend implementation. + mutability: nonpayable + access: admin + inputs: [] + +# == Self Operations == +# Can only be called by the token contract itself (address(this)). +# Used by custom super token proxies (SETH, Pure) to mint/burn/approve/transfer +# tokens through their own proxy logic. + +selfMint: + mutability: nonpayable + access: self + inputs: + - account: address + - amount: uint256 + - userData: bytes + emits: [Minted, Transfer] + errors: [SUPER_TOKEN_ONLY_SELF, SUPER_TOKEN_MINT_TO_ZERO_ADDRESS] + +selfBurn: + mutability: nonpayable + access: self + inputs: + - account: address + - amount: uint256 + - userData: bytes + emits: [Burned, Transfer] + errors: [SUPER_TOKEN_ONLY_SELF, SUPER_TOKEN_BURN_FROM_ZERO_ADDRESS, SF_TOKEN_BURN_INSUFFICIENT_BALANCE] + +selfApproveFor: + mutability: nonpayable + access: self + inputs: + - account: address + - spender: address + - amount: uint256 + emits: [Approval] + errors: [SUPER_TOKEN_ONLY_SELF, SUPER_TOKEN_APPROVE_FROM_ZERO_ADDRESS, SUPER_TOKEN_APPROVE_TO_ZERO_ADDRESS] + +selfTransferFrom: + mutability: nonpayable + access: self + inputs: + - holder: address + - spender: address + - recipient: address + - amount: uint256 + emits: [Sent, Transfer] + errors: [SUPER_TOKEN_ONLY_SELF, SUPER_TOKEN_TRANSFER_FROM_ZERO_ADDRESS, SUPER_TOKEN_TRANSFER_TO_ZERO_ADDRESS, SF_TOKEN_MOVE_INSUFFICIENT_BALANCE] + +# == Host Batch Operations == +# Called by the Host contract on behalf of a user within batchCall / +# forwardBatchCall. Each mirrors a user-facing function but takes the +# account address explicitly. + +operationApprove: + mutability: nonpayable + access: host + inputs: + - account: address + - spender: address + - amount: uint256 + emits: [Approval] + errors: [SF_TOKEN_ONLY_HOST, SUPER_TOKEN_APPROVE_FROM_ZERO_ADDRESS, SUPER_TOKEN_APPROVE_TO_ZERO_ADDRESS] + +operationIncreaseAllowance: + mutability: nonpayable + access: host + inputs: + - account: address + - spender: address + - addedValue: uint256 + emits: [Approval] + errors: [SF_TOKEN_ONLY_HOST, SUPER_TOKEN_APPROVE_FROM_ZERO_ADDRESS, SUPER_TOKEN_APPROVE_TO_ZERO_ADDRESS] + +operationDecreaseAllowance: + mutability: nonpayable + access: host + inputs: + - account: address + - spender: address + - subtractedValue: uint256 + emits: [Approval] + errors: [SF_TOKEN_ONLY_HOST, SUPER_TOKEN_APPROVE_FROM_ZERO_ADDRESS, SUPER_TOKEN_APPROVE_TO_ZERO_ADDRESS] + +operationTransferFrom: + mutability: nonpayable + access: host + inputs: + - account: address + - spender: address + - recipient: address + - amount: uint256 + emits: [Sent, Transfer] + errors: [SF_TOKEN_ONLY_HOST, SUPER_TOKEN_TRANSFER_FROM_ZERO_ADDRESS, SUPER_TOKEN_TRANSFER_TO_ZERO_ADDRESS, SF_TOKEN_MOVE_INSUFFICIENT_BALANCE] + +operationSend: + mutability: nonpayable + access: host + inputs: + - spender: address + - recipient: address + - amount: uint256 + - userData: bytes + emits: [Sent, Transfer] + errors: [SF_TOKEN_ONLY_HOST, SUPER_TOKEN_TRANSFER_FROM_ZERO_ADDRESS, SUPER_TOKEN_TRANSFER_TO_ZERO_ADDRESS, SF_TOKEN_MOVE_INSUFFICIENT_BALANCE, SUPER_TOKEN_NOT_ERC777_TOKENS_RECIPIENT] + +operationUpgrade: + mutability: nonpayable + access: host + inputs: + - account: address + - amount: uint256 + emits: [Minted, Transfer, TokenUpgraded] + errors: [SF_TOKEN_ONLY_HOST, SUPER_TOKEN_NO_UNDERLYING_TOKEN, SUPER_TOKEN_INFLATIONARY_DEFLATIONARY_NOT_SUPPORTED, SUPER_TOKEN_MINT_TO_ZERO_ADDRESS, SafeERC20FailedOperation, SafeCastOverflowedUintToInt] + +operationDowngrade: + mutability: nonpayable + access: host + inputs: + - account: address + - amount: uint256 + emits: [Burned, Transfer, TokenDowngraded] + errors: [SF_TOKEN_ONLY_HOST, SUPER_TOKEN_NO_UNDERLYING_TOKEN, SUPER_TOKEN_BURN_FROM_ZERO_ADDRESS, SF_TOKEN_BURN_INSUFFICIENT_BALANCE, SUPER_TOKEN_INFLATIONARY_DEFLATIONARY_NOT_SUPPORTED, SafeERC20FailedOperation] + +operationUpgradeTo: + mutability: nonpayable + access: host + inputs: + - account: address + - to: address + - amount: uint256 + emits: [Minted, Transfer, TokenUpgraded] + errors: [SF_TOKEN_ONLY_HOST, SUPER_TOKEN_NO_UNDERLYING_TOKEN, SUPER_TOKEN_INFLATIONARY_DEFLATIONARY_NOT_SUPPORTED, SUPER_TOKEN_MINT_TO_ZERO_ADDRESS, SafeERC20FailedOperation, SafeCastOverflowedUintToInt] + +operationDowngradeTo: + mutability: nonpayable + access: host + inputs: + - account: address + - to: address + - amount: uint256 + emits: [Burned, Transfer, TokenDowngraded] + errors: [SF_TOKEN_ONLY_HOST, SUPER_TOKEN_NO_UNDERLYING_TOKEN, SUPER_TOKEN_BURN_FROM_ZERO_ADDRESS, SF_TOKEN_BURN_INSUFFICIENT_BALANCE, SUPER_TOKEN_INFLATIONARY_DEFLATIONARY_NOT_SUPPORTED, SafeERC20FailedOperation] + +# == Agreement Hosting == +# The token acts as storage host for agreement data. These functions are +# called by registered agreement contracts (CFA, GDA, IDA) through the Host. + +createAgreement: + mutability: nonpayable + access: agreement + inputs: + - id: bytes32 + - "data: bytes32[]" + emits: [AgreementCreated] + errors: [SF_TOKEN_AGREEMENT_ALREADY_EXISTS] + +getAgreementData: + mutability: view + inputs: + - agreementClass: address + - id: bytes32 + - dataLength: uint256 + outputs: + - "data: bytes32[]" + +updateAgreementData: + mutability: nonpayable + access: agreement + inputs: + - id: bytes32 + - "data: bytes32[]" + emits: [AgreementUpdated] + +terminateAgreement: + mutability: nonpayable + access: agreement + inputs: + - id: bytes32 + - dataLength: uint256 + emits: [AgreementTerminated] + errors: [SF_TOKEN_AGREEMENT_DOES_NOT_EXIST] + +updateAgreementStateSlot: + mutability: nonpayable + access: agreement + inputs: + - account: address + - slotId: uint256 + - "slotData: bytes32[]" + emits: [AgreementStateUpdated] + +getAgreementStateSlot: + mutability: view + inputs: + - agreementClass: address + - account: address + - slotId: uint256 + - dataLength: uint256 + outputs: + - "slotData: bytes32[]" + +settleBalance: + # Adjust an account's settled balance. Only listed agreements can call this. + mutability: nonpayable + access: agreement + inputs: + - account: address + - delta: int256 + errors: [SF_TOKEN_ONLY_LISTED_AGREEMENT] + +makeLiquidationPayoutsV2: + # Execute liquidation payouts. Transfers reward to liquidator or reward account, + # and adjusts the target account's balance. Only listed agreements can call this. + mutability: nonpayable + access: agreement + inputs: + - id: bytes32 + - liquidationTypeData: bytes + - liquidatorAccount: address + - useDefaultRewardAccount: bool + - targetAccount: address + - rewardAmount: uint256 + - targetAccountBalanceDelta: int256 + emits: [Transfer, AgreementLiquidatedV2] + errors: [SF_TOKEN_ONLY_LISTED_AGREEMENT] + +getAccountActiveAgreements: + mutability: view + inputs: + - account: address + outputs: + - "ISuperAgreement[]" + +# == Protocol Info == + +getHost: + mutability: view + inputs: [] + outputs: + - host: address + +POOL_ADMIN_NFT: + # Immutable address of the canonical PoolAdminNFT proxy. + mutability: view + inputs: [] + outputs: + - address + +POOL_MEMBER_NFT: + # Immutable address of the (deprecated) PoolMemberNFT proxy. + mutability: view + inputs: [] + outputs: + - address + +VERSION: + # Returns the version string of the SuperToken logic contract (e.g. "1.0.0"). + mutability: view + inputs: [] + outputs: + - string + +# == Events == + +events: + + # -- ERC-20 -- + + Transfer: + indexed: + - from: address + - to: address + data: + - value: uint256 + + Approval: + indexed: + - owner: address + - spender: address + data: + - value: uint256 + + # -- ERC-777 -- + + Sent: + indexed: + - operator: address + - from: address + - to: address + data: + - amount: uint256 + - data: bytes + - operatorData: bytes + + Minted: + indexed: + - operator: address + - to: address + data: + - amount: uint256 + - data: bytes + - operatorData: bytes + + Burned: + indexed: + - operator: address + - from: address + data: + - amount: uint256 + - data: bytes + - operatorData: bytes + + AuthorizedOperator: + indexed: + - operator: address + - tokenHolder: address + + RevokedOperator: + indexed: + - operator: address + - tokenHolder: address + + # -- EIP-5267 -- + + EIP712DomainChanged: + # Signalled when the EIP-712 domain changes. Not explicitly emitted by + # SuperToken, but declared in the EIP-5267 interface for indexing support. + + # -- Wrapping -- + + TokenUpgraded: + indexed: + - account: address + data: + - amount: uint256 + + TokenDowngraded: + indexed: + - account: address + data: + - amount: uint256 + + # -- Admin -- + + AdminChanged: + indexed: [] + data: + - oldAdmin: address + - newAdmin: address + + # -- Yield Backend -- + + YieldBackendEnabled: + indexed: + - yieldBackend: address + data: + - depositAmount: uint256 + + YieldBackendDisabled: + indexed: + - yieldBackend: address + + PoolAdminNFTCreated: + # Emitted once during logic contract constructor deployment. + indexed: [] + data: + - poolAdminNFT: address + + # -- Agreement Hosting -- + + AgreementCreated: + indexed: + - agreementClass: address + - id: bytes32 + data: + - "data: bytes32[]" + + AgreementUpdated: + indexed: + - agreementClass: address + - id: bytes32 + data: + - "data: bytes32[]" + + AgreementTerminated: + indexed: + - agreementClass: address + - id: bytes32 + + AgreementStateUpdated: + indexed: + - agreementClass: address + - account: address + data: + - slotId: uint256 + + AgreementLiquidatedV2: + indexed: + - agreementClass: address + - id: bytes32 + data: + - liquidatorAccount: address + - targetAccount: address + - rewardAmountReceiver: address + - rewardAmount: uint256 + - targetAccountBalanceDelta: int256 + - liquidationTypeData: bytes + + # -- Deprecated events (from ISuperfluidToken, no longer emitted) -- + + AgreementLiquidated: + deprecated: true + note: "Use AgreementLiquidatedV2" + indexed: + - agreementClass: address + - id: bytes32 + data: + - penaltyAccount: address + - rewardAccount: address + - rewardAmount: uint256 + + AgreementLiquidatedBy: + deprecated: true + note: "Use AgreementLiquidatedV2" + indexed: + - liquidatorAccount: address + - agreementClass: address + - id: bytes32 + data: + - penaltyAccount: address + - bondAccount: address + - rewardAmount: uint256 + - bailoutAmount: uint256 + + Bailout: + deprecated: true + note: "Use AgreementLiquidatedV2" + indexed: + - bailoutAccount: address + - bailoutAmount: uint256 + +# == Errors == + +errors: + + # -- Super Token access -- + - SUPER_TOKEN_ONLY_SELF + - SUPER_TOKEN_ONLY_ADMIN + - SUPER_TOKEN_ONLY_GOV_OWNER + + # -- SuperfluidToken access -- + - SF_TOKEN_ONLY_HOST + - SF_TOKEN_ONLY_LISTED_AGREEMENT + + # -- Wrapping -- + - SUPER_TOKEN_NO_UNDERLYING_TOKEN + - SUPER_TOKEN_INFLATIONARY_DEFLATIONARY_NOT_SUPPORTED + + # -- ERC-20 / ERC-777 transfer -- + - SUPER_TOKEN_TRANSFER_FROM_ZERO_ADDRESS + - SUPER_TOKEN_TRANSFER_TO_ZERO_ADDRESS + - SF_TOKEN_MOVE_INSUFFICIENT_BALANCE + + # -- Approve -- + - SUPER_TOKEN_APPROVE_FROM_ZERO_ADDRESS + - SUPER_TOKEN_APPROVE_TO_ZERO_ADDRESS + + # -- Mint / Burn -- + - SUPER_TOKEN_MINT_TO_ZERO_ADDRESS + - SUPER_TOKEN_BURN_FROM_ZERO_ADDRESS + - SF_TOKEN_BURN_INSUFFICIENT_BALANCE + + # -- ERC-777 operator -- + - SUPER_TOKEN_CALLER_IS_NOT_OPERATOR_FOR_HOLDER + - SUPER_TOKEN_NOT_ERC777_TOKENS_RECIPIENT + + # -- ERC-2612 permit -- + - SUPER_TOKEN_PERMIT_EXPIRED_SIGNATURE: + inputs: + - deadline: uint256 + - SUPER_TOKEN_PERMIT_INVALID_SIGNER: + inputs: + - signer: address + - owner: address + + # -- NFT proxy -- + - SUPER_TOKEN_NFT_PROXY_ADDRESS_CHANGED + + # -- Agreement hosting -- + - SF_TOKEN_AGREEMENT_ALREADY_EXISTS + - SF_TOKEN_AGREEMENT_DOES_NOT_EXIST + + # -- OpenZeppelin ECDSA (from permit) -- + - ECDSAInvalidSignature + - ECDSAInvalidSignatureLength: + inputs: + - length: uint256 + - ECDSAInvalidSignatureS: + inputs: + - s: bytes32 + + # -- OpenZeppelin SafeCast -- + - SafeCastOverflowedUintToInt: + inputs: + - value: uint256 + + # -- OpenZeppelin SafeERC20 -- + - SafeERC20FailedOperation: + inputs: + - token: address diff --git a/.agents/skills/gooddollar/references/contracts/SuperToken.selectors.yaml b/.agents/skills/gooddollar/references/contracts/SuperToken.selectors.yaml new file mode 100644 index 0000000..f9bb474 --- /dev/null +++ b/.agents/skills/gooddollar/references/contracts/SuperToken.selectors.yaml @@ -0,0 +1,99 @@ +# Generated by scripts/selectors.mjs +functions: + name(): 0x06fdde03 + symbol(): 0x95d89b41 + decimals(): 0x313ce567 + totalSupply(): 0x18160ddd + balanceOf(address): 0x70a08231 + allowance(address,address): 0xdd62ed3e + approve(address,uint256): 0x095ea7b3 + increaseAllowance(address,uint256): 0x39509351 + decreaseAllowance(address,uint256): 0xa457c2d7 + transfer(address,uint256): 0xa9059cbb + transferFrom(address,address,uint256): 0x23b872dd + transferAll(address): 0xa3a7e7f3 + granularity(): 0x556f0dc7 + send(address,uint256,bytes): 0x9bd9bbc6 + burn(uint256,bytes): 0xfe9d9303 + authorizeOperator(address): 0x959b8c3f + revokeOperator(address): 0xfad8b32a + isOperatorFor(address,address): 0xd95b6371 + defaultOperators(): 0x06e48538 + operatorSend(address,address,uint256,bytes,bytes): 0x62ad1b83 + operatorBurn(address,uint256,bytes,bytes): 0xfc673c4f + permit(address,address,uint256,uint256,uint8,bytes32,bytes32): 0xd505accf + nonces(address): 0x7ecebe00 + DOMAIN_SEPARATOR(): 0x3644e515 + eip712Domain(): 0x84b0196e + upgrade(): 0xd55ec697 + upgradeTo(address,uint256,bytes): 0x5b9d09cc + downgrade(uint256): 0x11bcc81e + downgradeTo(address,uint256): 0x83ba2525 + getUnderlyingToken(): 0xee719bc8 + getUnderlyingDecimals(): 0x92081a47 + toUnderlyingAmount(uint256): 0x282a050b + upgradeByETH(): 0xcf81464b + upgradeByETHTo(address): 0x7687d19b + downgradeToETH(uint256): 0x160e8be3 + realtimeBalanceOf(address,uint256): 0xeb3537cc + realtimeBalanceOfNow(address): 0x2ec8eec7 + isAccountCritical(address,uint256): 0xd9d078d6 + isAccountCriticalNow(address): 0x79359f6f + isAccountSolvent(address,uint256): 0xb84cdd4a + isAccountSolventNow(address): 0xbb0d196e + changeAdmin(address): 0x8f283970 + getAdmin(): 0x6e9960c3 + enableYieldBackend(): 0x5127b621 + disableYieldBackend(): 0x370a190f + getYieldBackend(): 0xe729804b + withdrawSurplusFromYieldBackend(): 0x4a3acda0 + selfMint(address,uint256,bytes): 0xc68d4283 + selfBurn(address,uint256,bytes): 0x9d876741 + selfApproveFor(address,address,uint256): 0x66a12fb6 + selfTransferFrom(address,address,address,uint256): 0x41b706be + operationApprove(address,address,uint256): 0x62aa5287 + operationIncreaseAllowance(address,address,uint256): 0x4b2763b3 + operationDecreaseAllowance(address,address,uint256): 0xc780fd82 + operationTransferFrom(address,address,address,uint256): 0x16d055d6 + operationSend(address,address,uint256,bytes): 0xca0c1e7f + operationUpgrade(address,uint256): 0xca789464 + operationDowngrade(address,uint256): 0x245887fc + operationUpgradeTo(address,address,uint256): 0x1ae88ffc + operationDowngradeTo(address,address,uint256): 0x47ba7ad1 + createAgreement(bytes32,bytes32[]"): 0x816e2dc5 + getAgreementData(address,bytes32,uint256): 0x6c2d9f2f + updateAgreementData(bytes32,bytes32[]"): 0x1bced9c7 + terminateAgreement(bytes32,uint256): 0x27048397 + updateAgreementStateSlot(address,uint256,bytes32[]"): 0x003af740 + getAgreementStateSlot(address,address,uint256,uint256): 0x4b61cc33 + settleBalance(address,int256): 0xcf97256d + makeLiquidationPayoutsV2(bytes32,bytes,address,bool,address,uint256,int256): 0x1863e809 + getAccountActiveAgreements(address): 0x386fa221 + getHost(): 0x20bc4425 + POOL_ADMIN_NFT(): 0xb20db1ac + POOL_MEMBER_NFT(): 0xf5a8b4dd + VERSION(): 0xffa1ad74 +events: + Transfer(address,address,uint256): 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef + Approval(address,address,uint256): 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925 + Sent(address,address,address,uint256,bytes,bytes): 0x06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc82614677987 + Minted(address,address,uint256,bytes,bytes): 0x2fe5be0146f74c5bce36c0b80911af6c7d86ff27e89d5cfa61fc681327954e5d + Burned(address,address,uint256,bytes,bytes): 0xa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a4098 + AuthorizedOperator(address,address): 0xf4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f9 + RevokedOperator(address,address): 0x50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa1 + EIP712DomainChanged(): 0x0a6387c9ea3628b88a633bb4f3b151770f70085117a15f9bf3787cda53f13d31 + TokenUpgraded(address,uint256): 0x25ca84076773b0455db53621c459ddc84fe40840e4932a62706a032566f399df + TokenDowngraded(address,uint256): 0x3bc27981aebbb57f9247dc00fde9d6cd91e4b230083fec3238fedbcba1f9ab3d + AdminChanged(address,address): 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f + YieldBackendEnabled(address,uint256): 0x8d15dd569157df615aedb4b16273001ae8980ce2aac93e39adc48481dfaefbb5 + YieldBackendDisabled(address): 0x2486b5241145ce1b97a13655ecd4e8e51094ac93259a0589d24524304d6d70d4 + PoolAdminNFTCreated(address): 0xeb87fb34067547f3dc0b85096c3da73c99d4fbb08ff41212b8d7c0b5008b42e6 + AgreementCreated(address,bytes32,bytes32[]"): 0x9a5caaf4460c6dff81ed3dc58f3aef40fe511737a163340e06a4abc1bfe21a73 + AgreementUpdated(address,bytes32,bytes32[]"): 0xc00aaaf56818c1a9d6c54e14c6f93965eb34c9729232fdafa62f90a10600e70a + AgreementTerminated(address,bytes32): 0x71a63dc095de07aa5512ad57a7596a39516317e316981a1cd71000057be1537b + AgreementStateUpdated(address,address,uint256): 0x30f416fa68fca014a0f334464c64b000ba53e99b6d2afdea9d5ca756372d5985 + AgreementLiquidatedV2(address,bytes32,address,address,address,uint256,int256,bytes): 0xb8381a3ce157650e06186e3e8f4dd4dc29236f2688b6eed1893d0a60d7c6386f + AgreementLiquidated(address,bytes32,address,address,uint256): 0x8505c3d8f1f184f032cf0bc4cd80ee61c8b9d94f8907c3281bf0101a2610fe80 + AgreementLiquidatedBy(address,address,bytes32,address,address,uint256,uint256): 0x5f22b60e58b1d6de858bc27c48d5a4653e052da99e083c1d88bb8c58e1abc8ef + Bailout(address,uint256): 0xd6c9a04afc81e8c614310bbee6c9e84f5abe15b82038bf8347014ce0852e6ffd +errors: {} diff --git a/.agents/skills/gooddollar/references/contracts/Superfluid.abi.yaml b/.agents/skills/gooddollar/references/contracts/Superfluid.abi.yaml new file mode 100644 index 0000000..33ac5a9 --- /dev/null +++ b/.agents/skills/gooddollar/references/contracts/Superfluid.abi.yaml @@ -0,0 +1,757 @@ +# Superfluid Host — the central protocol router +# All agreement calls (CFA, IDA, GDA) are routed through the Host, which manages +# the Superfluid call context, Super App callbacks, app credit, and governance. +# The Host is also the entry point for batch calls and meta-transactions. +# +# NOTE: emits/errors mappings are traced from source code — verify against implementation. +# Proxy/upgradability functions (castrate, updateCode, getCodeAddress, proxiableUUID, initialize) +# are omitted — they belong to the UUPSProxiable layer. + +meta: + name: Superfluid + version: v1 + source: + - https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/refs/heads/dev/packages/ethereum-contracts/contracts/superfluid/Superfluid.sol + - https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/refs/heads/dev/packages/ethereum-contracts/contracts/interfaces/superfluid/ISuperfluid.sol + implements: [ISuperfluid] + inherits: [UUPSProxiable, BaseRelayRecipient] + deployments: + mainnet: + eth-mainnet: "0x4E583d9390082B65Bef884b629DFA426114CED6d" + polygon-mainnet: "0x3E14dC1b13c488a8d5D310918780c983bD5982E7" + xdai-mainnet: "0x2dFe937cD98Ab92e59cF3139138f18c823a4efE7" + base-mainnet: "0x4C073B3baB6d8826b8C5b229f3cfdC1eC6E47E74" + optimism-mainnet: "0x567c4B141ED61923967cA25Ef4906C8781069a10" + arbitrum-one: "0xCf8Acb4eF033efF16E8080aed4c7D5B9285D2192" + bsc-mainnet: "0xd1e2cFb6441680002Eb7A44223160aB9B67d7E6E" + avalanche-c: "0x60377C7016E4cdB03C87EF474896C11cB560752C" + celo-mainnet: "0xA4Ff07cF81C02CFD356184879D953970cA957585" + scroll-mainnet: "0x0F86a21F6216c061B222c224e315d9FC34520bb7" + degenchain: "0xc1314EdcD7e478C831a7a24169F7dEADB2646eD2" + testnet: + avalanche-fuji: "0x85Fe79b998509B77BF10A8BD4001D58475D29386" + base-sepolia: "0x109412E3C84f0539b43d39dB691B08c90f58dC7c" + eth-sepolia: "0x109412E3C84f0539b43d39dB691B08c90f58dC7c" + optimism-sepolia: "0xd399e2Fb5f4cf3722a11F65b88FAB6B2B8621005" + scroll-sepolia: "0x42b05a6016B9eED232E13fd56a8F0725693DBF8e" + deploymentCreationBlocks: + mainnet: + celo-mainnet: 16393469 + +# == Abbreviations == +# ctx — context (Superfluid call context bytes) +# ACL — Access Control List +# ERC — Ethereum Request for Comments + +# == Glossary == +# Host — central Superfluid contract routing agreement/app calls +# agreement class — a registered agreement contract (CFA, IDA, GDA) +# Super App — a smart contract registered with the Host that receives callbacks +# callback — beforeAgreement* / afterAgreement* hooks called on Super Apps +# context (ctx) — encoded call metadata: msgSender, timestamp, userData, app credit +# app credit — temporary token allowance granted to a Super App during a callback +# jailed — a Super App that violated protocol rules; its callbacks are bypassed +# configWord — bitmask encoding a Super App's app level and callback noop flags. +# App level: APP_LEVEL_FINAL (1 << 1) or APP_LEVEL_SECOND (1 << 0). +# Noop flags disable specific before/after callbacks per agreement type. +# batch operation — a single step in a batchCall array (see BatchOperation in Definitions.sol) +# trusted forwarder — a contract allowed to call forwardBatchCall for meta-transactions + +# == Batch Call == +# Primary entry point for interacting with the protocol. Users compose arrays of +# typed operations (ERC-20 approvals, SuperToken wrapping, agreement calls, etc.). +# +# == Batch Operation Types == +# Used in the operationType field of batchCall/forwardBatchCall operations. +# Data encoding varies by category — see notes on each type. +# +# Category 1–5: ERC-20/ERC-777 token ops +# target: must be a SuperToken (routes through SuperToken.operation* methods, +# NOT arbitrary ERC-20 contracts — use a separate tx for underlying approvals) +# data: abi-encoded parameters only (strip the 4-byte function selector) +# +# Category 101–102: SuperToken wrap/unwrap +# target: the SuperToken +# data: abi-encoded parameters only (strip the 4-byte function selector) +# +# Category 201: agreement call +# target: the agreement contract (e.g. CFA, GDA) +# data: abi.encode(callData, userData) where callData is full +# encodeFunctionData (selector included, with empty ctx placeholder "0x") +# +# Category 202: app action +# target: the Super App +# data: abi.encode(callData) where callData is full encodeFunctionData +# (selector included, with empty ctx placeholder "0x") +# +# Category 301: simple forward +# target: any contract +# data: full encodeFunctionData (selector included), or "0x" for pure value transfers +# +# Category 302: ERC-2771 forward +# target: any contract (must be an ERC-2771 recipient to extract the real sender) +# data: full encodeFunctionData (selector included) +# The ERC2771Forwarder appends the original msg.sender to calldata per ERC-2771. +# Use when the target contract needs to know who initiated the batch. + +batch_operation_types: + ERC20_APPROVE: 1 + ERC20_TRANSFER_FROM: 2 + ERC777_SEND: 3 # deprecated — ERC-777 is being phased out + ERC20_INCREASE_ALLOWANCE: 4 + ERC20_DECREASE_ALLOWANCE: 5 + SUPERTOKEN_UPGRADE: 101 + SUPERTOKEN_DOWNGRADE: 102 + SUPERFLUID_CALL_AGREEMENT: 201 + CALL_APP_ACTION: 202 + SIMPLE_FORWARD_CALL: 301 + ERC2771_FORWARD_CALL: 302 + +batchCall: + # Execute an array of operations in a single transaction as msg.sender. + notes: + - "Gotcha: For SIMPLE_FORWARD_CALL (type 301), target sees msg.sender as the SimpleForwarder contract, NOT the original caller. Use only when the target doesn't need to identify the sender." + - "Gotcha: ERC-20 ops (types 1-5) route through SuperToken.operation* methods, NOT arbitrary ERC-20 contracts. The target must be a SuperToken address. To approve an underlying ERC-20 (e.g. for wrapping), use a separate transaction." + - "Gotcha: If msg.value > 0, the entire amount is forwarded to the first CALL_APP_ACTION, SIMPLE_FORWARD, or ERC2771_FORWARD operation. If none exist, the native tokens are returned to the sender." + mutability: payable + access: anyone + inputs: + - operations: tuple[] + components: + - operationType: uint32 # see batch_operation_types above + - target: address + - data: bytes # encoding varies by operationType — see above + errors: [HOST_UNKNOWN_BATCH_CALL_OPERATION_TYPE] + +forwardBatchCall: + # Same as batchCall but uses EIP-2771 to extract msgSender from calldata. + # Can only be called by contracts registered as trusted forwarders in governance. + # If native tokens are left over, they are refunded to the EIP-2771 sender. + mutability: payable + access: trusted-forwarder + inputs: + - operations: tuple[] + components: + - operationType: uint32 # see batch_operation_types above + - target: address + - data: bytes # encoding varies by operationType — see above + errors: [HOST_UNKNOWN_BATCH_CALL_OPERATION_TYPE] + +# == Contextless Call Proxies == +# Entry points for EOAs and non-app contracts to interact with agreements or apps. +# These create a fresh Superfluid context with msg.sender, inject it into the call, +# and route through to the target agreement/app. + +callAgreement: + # Call an agreement function. The Host creates a context with msg.sender and replaces + # the placeholder ctx bytes in callData. This is how EOAs interact with CFA/IDA/GDA. + mutability: nonpayable + access: anyone # context set to msg.sender + inputs: + - agreementClass: address # must be a registered agreement + - callData: bytes # abi-encoded agreement call with placeholder ctx + - userData: bytes # extra data forwarded to Super App callbacks + outputs: + - returnedData: bytes + errors: [APP_RULE, HOST_ONLY_LISTED_AGREEMENT] + +callAppAction: + # Call an app action function on a Super App. The Host creates a context and routes + # the call. The action must not be an agreement callback selector. + mutability: nonpayable + access: anyone # context set to msg.sender + inputs: + - app: address # must be a registered, non-jailed Super App + - callData: bytes # abi-encoded app action call with placeholder ctx + outputs: + - returnedData: bytes + errors: [APP_RULE, HOST_NOT_A_SUPER_APP, HOST_SUPER_APP_IS_JAILED, HOST_AGREEMENT_CALLBACK_IS_NOT_ACTION] + +# == Contextual Call Proxies == +# For Super Apps to chain calls during callbacks. The app must pass the ctx it received. +# Only callable by the app currently executing a callback (ctx.appAddress == msg.sender). + +callAgreementWithContext: + # Chain an agreement call from within a Super App callback. + # The ctx must be valid and msg.sender must be the current callback app. + mutability: nonpayable + access: super-app + inputs: + - agreementClass: address + - callData: bytes + - userData: bytes + - ctx: bytes + outputs: + - newCtx: bytes + - returnedData: bytes + errors: [APP_RULE, HOST_ONLY_LISTED_AGREEMENT, HOST_CALL_AGREEMENT_WITH_CTX_FROM_WRONG_ADDRESS] + +callAppActionWithContext: + # Chain an app action call from within a Super App callback. + mutability: nonpayable + access: super-app + inputs: + - app: address + - callData: bytes + - ctx: bytes + outputs: + - newCtx: bytes + errors: [APP_RULE, HOST_NOT_A_SUPER_APP, HOST_SUPER_APP_IS_JAILED, HOST_AGREEMENT_CALLBACK_IS_NOT_ACTION, HOST_CALL_APP_ACTION_WITH_CTX_FROM_WRONG_ADDRESS] + +# == Context Utilities == + +decodeCtx: + # Decode a raw context bytes blob into the structured Context fields. + mutability: pure + inputs: + - ctx: bytes + outputs: + - context: + type: tuple + components: + - appCallbackLevel: uint8 + - callType: uint8 + - timestamp: uint256 + - msgSender: address + - agreementSelector: bytes4 + - userData: bytes + - appCreditGranted: uint256 + - appCreditWantedDeprecated: uint256 + - appCreditUsed: int256 + - appAddress: address + - appCreditToken: address + +isCtxValid: + # Check if a context blob matches the current transaction's context stamp. + mutability: view + inputs: + - ctx: bytes + outputs: + - bool + +# == App Registry == +# Super App registration. On some deployments, governance permission (via SimpleACL +# or legacy governance config) is required before an app can register. + +registerApp: + # Register msg.sender as a Super App with the given config word. + # On whitelisting-enabled deployments, tx.origin must have the + # ACL_SUPERAPP_REGISTRATION_ROLE or a valid legacy governance key. + mutability: nonpayable + access: self + inputs: + - configWord: uint256 # Super App manifest flags (see SuperAppDefinitions) + emits: [AppRegistered] + errors: [HOST_NO_APP_REGISTRATION_PERMISSION, HOST_INVALID_CONFIG_WORD, HOST_SUPER_APP_ALREADY_REGISTERED] + +registerApp(address,uint256): + # Register an external contract as a Super App. + # Useful for factory patterns where the deployer registers the app. + mutability: nonpayable + access: anyone + inputs: + - app: address # must be a contract + - configWord: uint256 + emits: [AppRegistered] + errors: [HOST_MUST_BE_CONTRACT, HOST_NO_APP_REGISTRATION_PERMISSION, HOST_INVALID_CONFIG_WORD, HOST_SUPER_APP_ALREADY_REGISTERED] + +registerAppWithKey: + # DEPRECATED — use registerApp(uint256) instead. + # Legacy registration using a governance-provided registration key string. + mutability: nonpayable + access: self + inputs: + - configWord: uint256 + - registrationKey: string + emits: [AppRegistered] + errors: [HOST_NO_APP_REGISTRATION_PERMISSION, HOST_INVALID_CONFIG_WORD, HOST_SUPER_APP_ALREADY_REGISTERED] + +registerAppByFactory: + # DEPRECATED — use registerApp(address, uint256) instead. + # Legacy factory-based registration using governance-authorized factory addresses. + mutability: nonpayable + access: factory + inputs: + - app: address + - configWord: uint256 + emits: [AppRegistered] + errors: [HOST_MUST_BE_CONTRACT, HOST_NO_APP_REGISTRATION_PERMISSION, HOST_INVALID_CONFIG_WORD, HOST_SUPER_APP_ALREADY_REGISTERED] + +# == App Queries == + +isApp: + mutability: view + inputs: + - app: address + outputs: + - bool + +getAppCallbackLevel: + mutability: view + inputs: + - appAddr: address + outputs: + - uint8 + +getAppManifest: + # Returns the full manifest of a Super App. + # isSuperApp is false if the address was never registered. + mutability: view + inputs: + - app: address + outputs: + - isSuperApp: bool + - isJailed: bool + - noopMask: uint256 # bitmask of noop'd agreement callback selectors + +isAppJailed: + mutability: view + inputs: + - app: address + outputs: + - isJail: bool + +# == App Composition == +# Source apps can whitelist target apps for composability (calling downstream). +# Currently limited to MAX_APP_CALLBACK_LEVEL = 1 (one level of nesting). + +allowCompositeApp: + # Whitelist a target Super App for composition. msg.sender must be a Super App + # with a higher callback level than the target. + mutability: nonpayable + access: super-app + inputs: + - targetApp: address + errors: [HOST_SENDER_IS_NOT_SUPER_APP, HOST_RECEIVER_IS_NOT_SUPER_APP, HOST_SOURCE_APP_NEEDS_HIGHER_APP_LEVEL] + +isCompositeAppAllowed: + mutability: view + inputs: + - app: address + - targetApp: address + outputs: + - isAppAllowed: bool + +# == Agreement Framework == +# Internal protocol functions called by registered agreement contracts (CFA, IDA, GDA) +# to manage Super App callbacks and app credit. Only callable by agreements. +# +# Callback lifecycle (called by agreement during flow operations): +# 1. appCallbackPush — set up credit, push callback frame +# 2. callAppBeforeCallback — staticcall app's before hook (read-only) +# 3. (agreement executes core logic) +# 4. callAppAfterCallback — call app's after hook (state changes OK) +# 5. appCallbackPop — finalize credit accounting, pop frame + +callAppBeforeCallback: + # StaticCall a Super App's before-callback. Returns the callback data. + # If the callback reverts during a termination, the app is jailed instead of reverting. + mutability: nonpayable + access: agreement + inputs: + - app: address + - callData: bytes + - isTermination: bool + - ctx: bytes + outputs: + - cbdata: bytes + errors: [HOST_ONLY_LISTED_AGREEMENT, HOST_NEED_MORE_GAS, APP_RULE] + +callAppAfterCallback: + # Call a Super App's after-callback. Returns the (potentially modified) context. + # If the app returns an invalid ctx, it is jailed on termination or reverts otherwise. + mutability: nonpayable + access: agreement + inputs: + - app: address + - callData: bytes + - isTermination: bool + - ctx: bytes + outputs: + - newCtx: bytes + errors: [HOST_ONLY_LISTED_AGREEMENT, HOST_NEED_MORE_GAS, APP_RULE] + +appCallbackPush: + # Push a new callback frame onto the context stack before invoking a Super App. + # Sets up app credit and tracks the callback nesting level. + notes: + - "Gotcha: The appCreditGranted is backed by the flow sender's deposit as \"owed deposit\". If the Super App opens outgoing streams using this credit, the sender's total locked capital increases accordingly (roughly doubles for 1:1 relay, more for fan-out patterns)." + mutability: nonpayable + access: agreement + inputs: + - ctx: bytes + - app: address + - appCreditGranted: uint256 + - appCreditUsed: int256 + - appCreditToken: address + outputs: + - appCtx: bytes + errors: [HOST_ONLY_LISTED_AGREEMENT, APP_RULE] + +appCallbackPop: + # Pop the callback frame after a Super App callback completes. + # Adjusts appCreditUsed by the delta from the callback. + mutability: nonpayable + access: agreement + inputs: + - ctx: bytes + - appCreditUsedDelta: int256 + outputs: + - newCtx: bytes + errors: [HOST_ONLY_LISTED_AGREEMENT] + +ctxUseCredit: + # Record additional app credit usage during an agreement operation. + mutability: nonpayable + access: agreement + inputs: + - ctx: bytes + - appCreditUsedMore: int256 + outputs: + - newCtx: bytes + errors: [HOST_ONLY_LISTED_AGREEMENT] + +jailApp: + # Jail a Super App from within an agreement. Jailed apps have their callbacks bypassed. + mutability: nonpayable + access: agreement + inputs: + - ctx: bytes + - app: address + - reason: uint256 # see SuperAppDefinitions for jail reason codes + outputs: + - newCtx: bytes + emits: [Jail] + errors: [HOST_ONLY_LISTED_AGREEMENT] + +# == Governance == + +getGovernance: + mutability: view + outputs: + - governance: address + +replaceGovernance: + mutability: nonpayable + access: governance + inputs: + - newGov: address + emits: [GovernanceReplaced] + errors: [HOST_ONLY_GOVERNANCE] + +# == Agreement Whitelisting == +# Governance registers and upgrades agreement classes (CFA, IDA, GDA). + +registerAgreementClass: + # Register a new agreement class. Creates a UUPS proxy in upgradable deployments. + mutability: nonpayable + access: governance + inputs: + - agreementClassLogic: address + emits: [AgreementClassRegistered] + errors: [HOST_ONLY_GOVERNANCE, HOST_AGREEMENT_ALREADY_REGISTERED, HOST_MAX_256_AGREEMENTS] + +updateAgreementClass: + # Upgrade an existing agreement class to a new implementation. + mutability: nonpayable + access: governance + inputs: + - agreementClassLogic: address + emits: [AgreementClassUpdated] + errors: [HOST_ONLY_GOVERNANCE, HOST_NON_UPGRADEABLE, HOST_AGREEMENT_IS_NOT_REGISTERED] + +isAgreementTypeListed: + mutability: view + inputs: + - agreementType: bytes32 # keccak256 of agreement name string + outputs: + - yes: bool + +isAgreementClassListed: + mutability: view + inputs: + - agreementClass: address + outputs: + - yes: bool + +getAgreementClass: + mutability: view + inputs: + - agreementType: bytes32 + outputs: + - agreementClass: address + errors: [HOST_AGREEMENT_IS_NOT_REGISTERED] + +mapAgreementClasses: + # Decode a bitmap into an array of agreement class addresses. + mutability: view + inputs: + - bitmap: uint256 + outputs: + - agreementClasses: address[] + +addToAgreementClassesBitmap: + mutability: view + inputs: + - bitmap: uint256 + - agreementType: bytes32 + outputs: + - newBitmap: uint256 + errors: [HOST_AGREEMENT_IS_NOT_REGISTERED] + +removeFromAgreementClassesBitmap: + mutability: view + inputs: + - bitmap: uint256 + - agreementType: bytes32 + outputs: + - newBitmap: uint256 + errors: [HOST_AGREEMENT_IS_NOT_REGISTERED] + +# == Super Token Factory == + +getSuperTokenFactory: + mutability: view + outputs: + - factory: address + +getSuperTokenFactoryLogic: + # Returns the logic address behind the factory proxy. For non-upgradable + # deployments, returns the factory address itself. + mutability: view + outputs: + - logic: address + +updateSuperTokenFactory: + # Deploy or upgrade the SuperTokenFactory. On first call, creates a UUPS proxy. + mutability: nonpayable + access: governance + inputs: + - newFactory: address + emits: [SuperTokenFactoryUpdated] + errors: [HOST_ONLY_GOVERNANCE, HOST_NON_UPGRADEABLE] + +updateSuperTokenLogic: + # Upgrade a SuperToken proxy to new logic. If newLogicOverride is address(0), + # uses the canonical logic from the SuperTokenFactory. + mutability: nonpayable + access: governance + inputs: + - token: address + - newLogicOverride: address # address(0) means use canonical logic + emits: [SuperTokenLogicUpdated] + errors: [HOST_ONLY_GOVERNANCE] + +changeSuperTokenAdmin: + # Change the admin of a SuperToken. The admin is the only account allowed to + # upgrade the token logic. Default admin is the Host itself. + mutability: nonpayable + access: governance + inputs: + - token: address + - newAdmin: address + errors: [HOST_ONLY_GOVERNANCE] + +# == Pool Beacon == + +updatePoolBeaconLogic: + # Upgrade the SuperfluidPool beacon to new logic. Affects all GDA pool proxies. + mutability: nonpayable + access: governance + inputs: + - newLogic: address + emits: [PoolBeaconLogicUpdated] + errors: [HOST_ONLY_GOVERNANCE] + +# == ERC2771 / Forwarder == + +isTrustedForwarder: + # Check if an address is a governance-approved trusted forwarder for meta-transactions. + mutability: view + inputs: + - forwarder: address + outputs: + - bool + +versionRecipient: + # ERC2771 relay recipient version string. Returns "v1". + mutability: pure + outputs: + - string + +getERC2771Forwarder: + # Returns the ERC2771Forwarder contract used for ERC2771_FORWARD_CALL batch operations. + mutability: view + outputs: + - address + +getSimpleACL: + # Returns the SimpleACL contract used for Super App registration permissioning. + mutability: view + outputs: + - address + +# == Time == + +getNow: + # Returns block.timestamp. Useful for off-chain tooling and testing. + mutability: view + outputs: + - uint256 + +# == Protocol Constants == + +NON_UPGRADABLE_DEPLOYMENT: + # True if the Host was deployed in non-upgradable mode. + mutability: view + outputs: + - bool + +APP_WHITE_LISTING_ENABLED: + # True if Super App registration requires governance permission. + mutability: view + outputs: + - bool + +CALLBACK_GAS_LIMIT: + # Maximum gas forwarded to Super App callbacks. + mutability: view + outputs: + - uint64 + +MAX_APP_CALLBACK_LEVEL: + # Maximum callback nesting depth for composed Super Apps. Currently 1. + mutability: view + outputs: + - uint256 + +MAX_NUM_AGREEMENTS: + # Maximum number of agreement classes that can be registered. 256. + mutability: view + outputs: + - uint32 + +ACL_SUPERAPP_REGISTRATION_ROLE: + # keccak256("ACL_SUPERAPP_REGISTRATION_ROLE") — the SimpleACL role for app registration. + mutability: view + outputs: + - bytes32 + +SIMPLE_FORWARDER: + # Address of the SimpleForwarder used for SIMPLE_FORWARD_CALL batch operations. + mutability: view + outputs: + - address + +# == Events == + +events: + GovernanceReplaced: + data: + - oldGov: address + - newGov: address + + AgreementClassRegistered: + # agreementType is keccak256("org.superfluid-finance.agreements..") + data: + - agreementType: bytes32 + - code: address + + AgreementClassUpdated: + data: + - agreementType: bytes32 + - code: address + + SuperTokenFactoryUpdated: + data: + - newFactory: address + + SuperTokenLogicUpdated: + indexed: + - token: address + data: + - code: address + + PoolBeaconLogicUpdated: + indexed: + - beaconProxy: address + data: + - newBeaconLogic: address + + AppRegistered: + indexed: + - app: address + + Jail: + # Emitted when a Super App is jailed for violating protocol rules. + # See APP_RULE error below for reason code values. + indexed: + - app: address + data: + - reason: uint256 + + # Inherited events (from UUPSProxiable): + # CodeUpdated — emitted on proxy upgrade (uuid, codeAddress) + # Initialized — emitted on proxy initialization (version) + +# == Errors == + +errors: + # Governance + - HOST_ONLY_GOVERNANCE # caller is not the governance contract + + # Agreement whitelisting + - HOST_AGREEMENT_ALREADY_REGISTERED + - HOST_AGREEMENT_IS_NOT_REGISTERED + - HOST_MAX_256_AGREEMENTS # maximum agreement slots exhausted + - HOST_ONLY_LISTED_AGREEMENT # caller is not a registered agreement + + # Upgradability + - HOST_NON_UPGRADEABLE # deployment is non-upgradable + - HOST_CANNOT_DOWNGRADE_TO_NON_UPGRADEABLE + + # App registration + - HOST_MUST_BE_CONTRACT # app address has no code + - HOST_NO_APP_REGISTRATION_PERMISSION + - HOST_INVALID_CONFIG_WORD # invalid Super App manifest flags + - HOST_SUPER_APP_ALREADY_REGISTERED + - HOST_NOT_A_SUPER_APP # target is not a registered Super App + - HOST_SUPER_APP_IS_JAILED + + # App composition + - HOST_SENDER_IS_NOT_SUPER_APP + - HOST_RECEIVER_IS_NOT_SUPER_APP + - HOST_SOURCE_APP_NEEDS_HIGHER_APP_LEVEL + + # Context & call proxies + - HOST_NON_ZERO_LENGTH_PLACEHOLDER_CTX # placeholder ctx must be empty + - HOST_CALL_AGREEMENT_WITH_CTX_FROM_WRONG_ADDRESS # msg.sender != ctx.appAddress + - HOST_CALL_APP_ACTION_WITH_CTX_FROM_WRONG_ADDRESS # msg.sender != ctx.appAddress + - HOST_AGREEMENT_CALLBACK_IS_NOT_ACTION # app action selector matches a callback + + # Batch call + - HOST_UNKNOWN_BATCH_CALL_OPERATION_TYPE + + # Callback execution + - HOST_NEED_MORE_GAS # insufficient gas for Super App callback + + # Super App rule violations (generic, carries a reason code) + # Reason codes (from SuperAppDefinitions.sol): + # 10 — NO_REVERT_ON_TERMINATION_CALLBACK (delete callback reverted) + # 11 — NO_CRITICAL_SENDER_ACCOUNT (callback made sender critical) + # 12 — NO_CRITICAL_RECEIVER_ACCOUNT (callback made receiver critical) + # 20 — CTX_IS_READONLY (state change in before-callback staticcall) + # 21 — CTX_IS_NOT_CLEAN (context not properly returned) + # 22 — CTX_IS_MALFORMATED (context bytes corrupted/fabricated) + # 30 — COMPOSITE_APP_IS_NOT_WHITELISTED (no allowCompositeApp) + # 31 — COMPOSITE_APP_IS_JAILED (downstream app is jailed) + # 40 — MAX_APP_LEVEL_REACHED (callback nesting exceeded limit) + - APP_RULE: + inputs: + - _code: uint256 + + # SafeCast (inherited from OpenZeppelin) + - SafeCastOverflowedUintDowncast: + inputs: + - bits: uint8 + - value: uint256 diff --git a/.agents/skills/gooddollar/references/contracts/Superfluid.selectors.yaml b/.agents/skills/gooddollar/references/contracts/Superfluid.selectors.yaml new file mode 100644 index 0000000..18edf9b --- /dev/null +++ b/.agents/skills/gooddollar/references/contracts/Superfluid.selectors.yaml @@ -0,0 +1,51 @@ +# Generated by scripts/selectors.mjs +functions: + batchCall(tuple[]): 0x31131761 + forwardBatchCall(tuple[]): 0xbc5a2101 + callAgreement(): 0xb7a9d0f0 + callAppAction(): 0x40df3d29 + callAgreementWithContext(address,bytes,bytes,bytes): 0x4329d293 + callAppActionWithContext(address,bytes,bytes): 0xba48b5f8 + decodeCtx(bytes): 0x3f6c923a + isCtxValid(bytes): 0xbf428734 + registerApp(): 0x6d6c85c3 + registerAppWithKey(uint256,string): 0xbd1c448b + registerAppByFactory(address,uint256): 0xf3733052 + isApp(address): 0x3ca3ad4e + getAppCallbackLevel(address): 0x9378fa13 + getAppManifest(address): 0xf9f522f4 + isAppJailed(address): 0x6b4f3335 + allowCompositeApp(address): 0x57121e0c + isCompositeAppAllowed(address,address): 0xbb84cfa1 + callAppBeforeCallback(address,bytes,bool,bytes): 0x74041e02 + callAppAfterCallback(address,bytes,bool,bytes): 0x1e6d0a84 + appCallbackPush(bytes,address,uint256,int256,address): 0x768fabb0 + appCallbackPop(bytes,int256): 0x989b0c3e + ctxUseCredit(bytes,int256): 0x59a29141 + jailApp(bytes,address): 0x5578431e + replaceGovernance(address): 0x7283100c + registerAgreementClass(address): 0x15a024e1 + updateAgreementClass(address): 0x06cecba8 + isAgreementTypeListed(): 0xf8dba358 + isAgreementClassListed(address): 0x8ca48484 + getAgreementClass(bytes32): 0xb6d200de + mapAgreementClasses(uint256): 0xc56a069d + addToAgreementClassesBitmap(uint256,bytes32): 0xbced3ddc + removeFromAgreementClassesBitmap(uint256,bytes32): 0xa5dbbbcd + updateSuperTokenFactory(address): 0x54fbc493 + updateSuperTokenLogic(address): 0x787afde7 + changeSuperTokenAdmin(address,address): 0x0c565075 + updatePoolBeaconLogic(address): 0x2f89bf89 + isTrustedForwarder(address): 0x572b6c05 + SIMPLE_FORWARDER(): 0xf85263b9 +events: + GovernanceReplaced(address,address): 0x13abda02e63c790d0e2818b251282cfe5cbe0a8abd69c54bf5d2260c0907bd2e + AgreementClassRegistered(bytes32,address): 0x878135063a6cfb3bc333e534b1fdc83f4f12221cad6705c31c0567048a8bd3d1 + AgreementClassUpdated(bytes32,address): 0x9279aa773f2b588996032d8de89911555039f28b13a11a7c17074330bc082d9a + SuperTokenFactoryUpdated(address): 0xce13a9895a1719ad4493b2ac1a9bfb36070566161abab408e7ecbe586da8d499 + SuperTokenLogicUpdated(address,address): 0x840acbd291b38534819f47f875839277e502f40e1c7bfea2c5fc2c8017442cd3 + PoolBeaconLogicUpdated(address,address): 0x052cea8931962dd445ef48b0b998d3056bd0705f437087d60fe3c46a3fa09e1f + AppRegistered(address): 0x0d540ad8f39e07d19909687352b9fa017405d93c91a6760981fbae9cf28bfef7 + Jail(address,uint256): 0xbe3aa33bd245135e4e26b223d79d14ea479a47bff09f2b03c53838af1edbb14b + # Inherited events (from UUPSProxiable)(): 0x3a1d0f622cf5be33dc2558b359f025fbeca1d6fb271fb70452a02b0ec2666ce8 +errors: {} diff --git a/.agents/skills/gooddollar/references/contracts/UBISchemeV2.abi.yaml b/.agents/skills/gooddollar/references/contracts/UBISchemeV2.abi.yaml new file mode 100644 index 0000000..75e5e43 --- /dev/null +++ b/.agents/skills/gooddollar/references/contracts/UBISchemeV2.abi.yaml @@ -0,0 +1,305 @@ +# UBISchemeV2 — dynamic daily UBI pool with per-root claiming and cycle accounting +# Claim uses Identity getWhitelistedRoot(msg.sender); transfers use the root as claim key. + +meta: + name: UBISchemeV2 + version: v2 + source: + - https://raw.githubusercontent.com/GoodDollar/GoodProtocol/master/contracts/ubi/UBISchemeV2.sol + inherits: [DAOUpgradeableContract] + note: > + Pool sizing uses cycleLength, reserveFactor, minActiveUsers, and on-chain G$ + balance. claim() reverts if Identity root is zero. Internal accounting keys + claims by whitelisted root, payouts go to msg.sender. + deployments: + mainnet: + production: + UBIScheme: + networkId: 122 + address: "0xd253A5203817225e9768C05E5996d642fb96bA86" + creationBlock: 15747401 + production-celo: + UBIScheme: + networkId: 42220 + address: "0x43d72Ff17701B2DA814620735C39C620Ce0ea4A1" + creationBlock: 18006679 + production-xdc: + UBIScheme: + networkId: 50 + address: "0x22867567E2D80f2049200E25C6F31CB6Ec2F0faf" + creationBlock: 95249624 + related: + - https://docs.gooddollar.org/for-developers/core-contracts/ubischeme + - references/guides/claim.md + +getClaimerCount: + mutability: view + inputs: + - day: uint256 + outputs: + - count: uint256 + +getClaimAmount: + notes: + - "Returns aggregate amount claimed for the provided day index." + mutability: view + inputs: + - day: uint256 + outputs: + - amount: uint256 + +getDailyStats: + notes: + - "Returns (claimer count, total claimed amount) for the calendar day derived from periodStart." + mutability: view + inputs: [] + outputs: + - claimerCount: uint256 + - claimAmount: uint256 + +setCycleLength: + mutability: nonpayable + access: avatar + inputs: + - _newLength: uint256 + outputs: [] + emits: [CycleLengthSet] + errors: [CYCLE_TOO_SHORT, ONLY_AVATAR] + +setDay: + notes: + - "Anyone may advance currentDay when wall-clock day crosses the next boundary." + mutability: nonpayable + inputs: [] + outputs: [] + emits: [DaySet] + +hasClaimed: + mutability: view + inputs: + - account: address + outputs: + - claimed: bool + +isNotNewUser: + mutability: view + inputs: + - _account: address + outputs: + - isReturning: bool + +estimateNextDailyUBI: + notes: + - "View-only projection when dailyUbi not yet fixed for the current wall day." + mutability: view + inputs: [] + outputs: + - projected: uint256 + +"checkEntitlement()": + notes: + - "Uses msg.sender as member; resolves Identity root before hasClaimed check." + mutability: view + inputs: [] + outputs: + - amount: uint256 + +"checkEntitlement(address)": + notes: + - "Checks claimable amount for the provided member using that account's whitelisted root." + mutability: view + inputs: + - _member: address + outputs: + - amount: uint256 + +claim: + notes: + - "Resolves whitelistedRoot = Identity.getWhitelistedRoot(msg.sender); reverts if zero." + - "_claim keys bookkeeping by root but pays msg.sender." + - "May notify ClaimersDistribution at GDAO_CLAIMERS if configured." + - "On success emits UBIClaimed; distributionFormula may emit UBICalculated, UBICycleCalculated, DaySet, WithdrawFromDao." + mutability: nonpayable + access: anyone + inputs: [] + outputs: + - didClaim: bool + errors: + - NOT_IN_PERIOD_OR_PAUSED + - NOT_WHITELISTED + - CLAIM_TRANSFER_FAILED + - DAO_TRANSFER_FAILED + +setShouldWithdrawFromDAO: + mutability: nonpayable + access: avatar + inputs: + - _shouldWithdraw: bool + outputs: [] + emits: [ShouldWithdrawFromDAOSet] + errors: [ONLY_AVATAR] + +pause: + mutability: nonpayable + access: avatar + inputs: + - _pause: bool + outputs: [] + errors: [ONLY_AVATAR] + +setNewClaimersReserveFactor: + notes: + - "Adjusts reserveFactor used by distribution formula to reserve part of pool for new claimers." + mutability: nonpayable + access: avatar + inputs: + - _reserveFactor: uint32 + outputs: [] + errors: [ONLY_AVATAR] + +withdraw: + notes: + - "Avatar-controlled treasury action transferring G$ from scheme balance to recipient." + mutability: nonpayable + access: avatar + inputs: + - _amount: uint256 + - _recipient: address + outputs: [] + errors: + - ONLY_AVATAR + - WITHDRAW_FAILED + +lastClaimed: + notes: + - "Returns last claim timestamp keyed by account root logic used by hasClaimed checks." + mutability: view + inputs: + - account: address + outputs: + - ts: uint256 + +currentDay: + mutability: view + inputs: [] + outputs: + - day: uint256 + +periodStart: + mutability: view + inputs: [] + outputs: + - ts: uint256 + +dailyUbi: + mutability: view + inputs: [] + outputs: + - amount: uint256 + +lastWithdrawDay: + mutability: view + inputs: [] + outputs: + - day: uint256 + +shouldWithdrawFromDAO: + mutability: view + inputs: [] + outputs: + - flag: bool + +cycleLength: + mutability: view + inputs: [] + outputs: + - days: uint256 + +dailyCyclePool: + mutability: view + inputs: [] + outputs: + - pool: uint256 + +startOfCycle: + mutability: view + inputs: [] + outputs: + - ts: uint256 + +currentCycleLength: + mutability: view + inputs: [] + outputs: + - length: uint256 + +minActiveUsers: + mutability: view + inputs: [] + outputs: + - n: uint256 + +totalClaimsPerUser: + mutability: view + inputs: + - account: address + outputs: + - count: uint256 + +reserveFactor: + mutability: view + inputs: [] + outputs: + - bps: uint32 + +paused: + mutability: view + inputs: [] + outputs: + - isPaused: bool + +events: + WithdrawFromDao: + indexed: [] + data: + - prevBalance: uint256 + - newBalance: uint256 + UBICalculated: + indexed: [] + data: + - day: uint256 + - dailyUbi: uint256 + - blockNumber: uint256 + UBICycleCalculated: + indexed: [] + data: + - day: uint256 + - pool: uint256 + - cycleLength: uint256 + - dailyUBIPool: uint256 + UBIClaimed: + indexed: + - claimer: address + data: + - amount: uint256 + CycleLengthSet: + indexed: [] + data: + - newCycleLength: uint256 + DaySet: + indexed: [] + data: + - newDay: uint256 + ShouldWithdrawFromDAOSet: + indexed: [] + data: + - ShouldWithdrawFromDAO: bool + +errors: + NOT_IN_PERIOD_OR_PAUSED: "not in periodStarted or paused — requireStarted modifier." + CYCLE_TOO_SHORT: "cycle must be at least 1 day long" + DAO_TRANSFER_FAILED: "DAO transfer has failed — _withdrawFromDao balance check." + NOT_WHITELISTED: "UBIScheme: not whitelisted — claim()" + CLAIM_TRANSFER_FAILED: "claim transfer failed — G$ transfer in _transferTokens." + WITHDRAW_FAILED: "withdraw failed — avatar withdraw." + ONLY_AVATAR: "Inherited avatar-only guard on DAOUpgradeable paths." diff --git a/.agents/skills/gooddollar/references/contracts/UBISchemeV2.selectors.yaml b/.agents/skills/gooddollar/references/contracts/UBISchemeV2.selectors.yaml new file mode 100644 index 0000000..666b89d --- /dev/null +++ b/.agents/skills/gooddollar/references/contracts/UBISchemeV2.selectors.yaml @@ -0,0 +1,40 @@ +# Generated by scripts/selectors.mjs +functions: + getClaimerCount(uint256): 0xc7a76adf + getClaimAmount(uint256): 0xcef63600 + getDailyStats(): 0x069786ea + setCycleLength(uint256): 0x3d84ceca + setDay(): 0xdddc3616 + hasClaimed(address): 0x73b2e80e + isNotNewUser(address): 0xa21f698a + estimateNextDailyUBI(): 0xc7713870 + checkEntitlement(): 0x98d6621b + checkEntitlement(address): 0x1a787f2e + claim(): 0x4e71d92d + setShouldWithdrawFromDAO(bool): 0xde1de3a0 + pause(bool): 0x02329a29 + setNewClaimersReserveFactor(uint32): 0x414089be + withdraw(uint256,address): 0x00f714ce + lastClaimed(address): 0x013eba92 + currentDay(): 0x5c9302c9 + periodStart(): 0xeda4e6d6 + dailyUbi(): 0x1d8f5ea9 + lastWithdrawDay(): 0xd7c4cbb8 + shouldWithdrawFromDAO(): 0x456ac1c2 + cycleLength(): 0xeac471a0 + dailyCyclePool(): 0x9dc2c033 + startOfCycle(): 0xba075410 + currentCycleLength(): 0x741470ac + minActiveUsers(): 0x37658574 + totalClaimsPerUser(address): 0xcc054dfc + reserveFactor(): 0x4322b714 + paused(): 0x5c975abb +events: + WithdrawFromDao(uint256,uint256): 0x3107ec7eaa50b775d2486c7a394472235804b6fe1c0d4b7bd1d79b09df60f2ba + UBICalculated(uint256,uint256,uint256): 0x836fa39995340265746dfe9587d9fe5c5de35b7bce778afd9b124ce1cfeafdc4 + UBICycleCalculated(uint256,uint256,uint256,uint256): 0x83e0d535b9e84324e0a25922406398d6ff5f96d0c686204ee490e16d7670566f + UBIClaimed(address,uint256): 0x89ed24731df6b066e4c5186901fffdba18cd9a10f07494aff900bdee260d1304 + CycleLengthSet(uint256): 0xa61e6cca2c12e2a0a493683acfe95b034f0f50d793434f4dfe3ba06ea201f344 + DaySet(uint256): 0x67eb03bd555181f9dd23f546e4331ddfb8b4a7d0c8d261ba44e037f30ce894ea + ShouldWithdrawFromDAOSet(bool): 0x6cd9a0fd2e006be39a9918bf56c85cae1d4f4599474483ff18cb93355ebaaf8e +errors: {} diff --git a/.agents/skills/gooddollar/references/contracts/_rich-abi-yaml-format.md b/.agents/skills/gooddollar/references/contracts/_rich-abi-yaml-format.md new file mode 100644 index 0000000..41e2bae --- /dev/null +++ b/.agents/skills/gooddollar/references/contracts/_rich-abi-yaml-format.md @@ -0,0 +1,93 @@ +# Reading the Rich ABI YAMLs + +Each YAML is a self-contained contract reference. Here's how to parse them. + +## Root structure + +``` +# Header comment — contract name, description, key notes +meta: # name, version, source, implements, inherits, deployments, + # deploymentCreationBlocks (optional), notes +# == Section == # Grouped functions (these are the core content) +events: # All events the contract emits +errors: # Complete error index +``` + +Three root keys are reserved: `meta`, `events`, `errors`. Every other +root-level key is a **function**. + +## Function entries + +```yaml +createFlow: + # Description of what the function does. + notes: + - "Gotcha: Non-obvious behavior or edge cases listed here as structured data." + mutability: nonpayable # view | pure | nonpayable | payable + access: sender | operator # who can call (omitted for view/pure) + inputs: + - token: address + - receiver: address + - flowRate: int96 # inline comments for non-obvious params + - ctx: bytes + outputs: + - newCtx: bytes + emits: [FlowUpdated, FlowUpdatedExtension] # ordered by emission sequence + errors: [CFA_FLOW_ALREADY_EXISTS, CFA_INVALID_FLOW_RATE] # ordered by check sequence +``` + +Fields appear in this order: description comment, `notes`, `mutability`, +`access`, `inputs`, `outputs`, `emits`, `errors`. All are omitted when not +applicable. + +## Key conventions + +- **`ctx: bytes` parameter** = function is called through the Host + (`callAgreement` / `batchCall`), never directly. +- **`access` labels**: `anyone`, `host`, `self`, `admin`, `governance`, + `sender`, `receiver`, `operator`, `manager`, `pic`, `agreement`, + `trusted-forwarder`, `factory`, `super-app`. Combine with `|`. Conditional: + `anyone(if-critical-or-jailed)`. +- **`emits` and `errors` ordering** carries meaning: matches execution flow, + not alphabetical. First errors in the list are the most likely causes. +- **`notes:` field** on functions (and `meta.notes:` at contract level) + lists non-obvious behavior, common mistakes, or edge cases. Always read + these carefully. +- **`meta.source`** is an array of raw GitHub URLs to the Solidity source files + (implementation, interface, base — filenames are self-documenting). +- **`meta.deployments`** has per-network addresses split into `mainnet` and + `testnet` subgroups. +- **`creationBlock`**: decimal block where that **`address`** first has code; + put it on the same object as **`networkId`** / **`address`**, immediately after **`address`**. +- **`meta.deploymentCreationBlocks`**: same shape as **`meta.deployments`**, for + deployments stored as plain address strings; leaves are decimal block numbers. + +## Events section + +```yaml +events: + FlowUpdated: + indexed: # log topics (filterable) + - token: address + - sender: address + data: # log payload + - flowRate: int96 +``` + +## Errors section + +```yaml +errors: + # -- Category -- + - SIMPLE_ERROR # description + - PARAMETERIZED_ERROR: # errors with diagnostic data + inputs: + - value: uint256 +``` + +## Selector sidecar files + +Every `Foo.abi.yaml` has a companion `Foo.selectors.yaml` in the same +directory. These contain computed hex selectors (function 4-byte, error +4-byte, event 32-byte topic0) with full Solidity signatures for +verification. Generated by `scripts/selectors.mjs`. diff --git a/.agents/skills/gooddollar/references/deep-researches/faucet-flows.md b/.agents/skills/gooddollar/references/deep-researches/faucet-flows.md new file mode 100644 index 0000000..12b1899 --- /dev/null +++ b/.agents/skills/gooddollar/references/deep-researches/faucet-flows.md @@ -0,0 +1,42 @@ +# Faucet flows (user-facing explanation) + +This note explains the Faucet in plain language: what it does for users, why a top-up can fail, and what limits exist. + +The on-chain Faucet contract is used to add a small amount of native gas token to a wallet so the user can pay transaction fees. +Reference implementation: [`contracts/fuseFaucet/Faucet.sol`](https://github.com/GoodDollar/GoodProtocol/blob/master/contracts/fuseFaucet/Faucet.sol). +Addresses per chain: [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) only (for example `Faucet` under `production`, `production-celo`, `production-xdc`). + +## What this means for users + +- If your wallet is eligible, Faucet can send a small gas top-up. +- Eligibility usually depends on identity status and anti-abuse limits. +- This is a support mechanism for transaction fees, not a general transfer or swap service. + +## Main actions (in user language) + +- **Top up wallet** (`topWallet`) + Attempts to send gas to the target wallet after checks pass. + +- **Check eligibility first** (`canTop`) + Fast pre-check to see if top-up is currently allowed. + +- **Estimate top-up amount** (`getToppingAmount`) + Shows the amount Faucet would try to send right now. + +## Why a top-up may fail + +- You are not currently authorized by identity rules. +- Daily limit reached. +- Weekly limit reached. +- Wallet is temporarily banned. +- Wallet is too new for current policy. +- Calculated top-up is below minimum threshold. + +## Important safety note + +- The `onTokenTransfer` path includes a swap-like mechanism and is not meant as a normal user swap route. +- It does not enforce slippage protection in the same way users expect from a dedicated swap UI. + +## For developers and agents + +Use `references/guides/faucet.md` for step-by-step execution flow and deterministic preflight calls. diff --git a/.agents/skills/gooddollar/references/deep-researches/fuse-to-celo-staking-migration.md b/.agents/skills/gooddollar/references/deep-researches/fuse-to-celo-staking-migration.md new file mode 100644 index 0000000..261c2d7 --- /dev/null +++ b/.agents/skills/gooddollar/references/deep-researches/fuse-to-celo-staking-migration.md @@ -0,0 +1,38 @@ +# Why Fuse to CELO staking migration uses a staged backend flow + +This explains why the migration is split into allowance detection, unstake, bridge, and destination re-stake instead of a single transaction. In this context, Fuse `GovernanceStakingV2` is the old/source staking contract and Celo **`GooddollarSavingsStream`** is the destination staking contract ([source](https://github.com/Ubeswap/gooddollar-contracts/blob/main/contracts/GooddollarSavingsStream.sol), [0x059ee811414230d1Fb157878D2b491240F4D8d3B](https://celoscan.io/address/0x059ee811414230d1Fb157878D2b491240F4D8d3B)). + +## Why this cannot be one-chain atomic + +Fuse governance staking and CELO destination savings live on different chains, so the system cannot atomically close and reopen stake in one EVM transaction. Cross-chain migration is asynchronous by design and must tolerate timing gaps between source completion and destination finalization. + +## Why user allowance is first + +The migration flow assumes a backend-operated execution wallet. If that wallet needs to pull or operate on user funds in the source path, user approval must exist first. Without allowance, all downstream steps fail, so approval state is the earliest hard gate. + +## Why unstake is separated from bridge + +The source staking position is the canonical balance record on Fuse. The migration must first materialize transferable G$ by closing or reducing stake, then bridge only the confirmed unlocked amount. Bridging before final unstake confirmation introduces mismatch risk. + +## Why bridge finalization must be explicit + +Bridge transfers are eventually consistent across chains. The destination stake step must only run after the bridged G$ is confirmed on CELO. This avoids phantom staking attempts and preserves deterministic accounting. + +## Why destination uses `stakeFor` + +Ubeswap `GooddollarSavingsStream` on Celo supports `stakeFor(amount, recipient)`, which allows the backend execution wallet to stake on behalf of the user after bridge finalization. This fits migration operations where custody is temporary during the transfer window. + +## Main operational risks + +- partial migration from source unstake or bridge limit constraints +- stuck-in-transit bridge messages delaying destination staking +- stale assumptions about contract addresses across networks +- reward expectation mismatch when moving from Fuse governance staking mechanics to CELO savings mechanics + +## Contract/source map + +- Fuse staking family (GoodProtocol): [`GovernanceStaking.sol`](https://github.com/GoodDollar/GoodProtocol/blob/master/contracts/governance/GovernanceStaking.sol) +- Fuse deployment mapping: [`deployment.json`](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) (`production.GovernanceStakingV2`) +- Celo savings (Ubeswap): [`GooddollarSavingsStream.sol`](https://github.com/Ubeswap/gooddollar-contracts/blob/main/contracts/GooddollarSavingsStream.sol) +- Ubeswap contracts repository: [Ubeswap/gooddollar-contracts](https://github.com/Ubeswap/gooddollar-contracts) +- Bridge normalization for LZ quotes: [`BridgeHelperLibrary.normalizeFromTokenTo18Decimals`](https://github.com/GoodDollar/GoodBridge/blob/master/packages/bridge-contracts/contracts/messagePassingBridge/BridgeHelperLibrary.sol) (off-chain LayerZero fee estimation must match this; `canBridge` and `bridgeToWithLz` use the raw burn amount on the source chain) diff --git a/.agents/skills/gooddollar/references/deep-researches/gooddao-daostack-surface.md b/.agents/skills/gooddollar/references/deep-researches/gooddao-daostack-surface.md new file mode 100644 index 0000000..754a3a0 --- /dev/null +++ b/.agents/skills/gooddollar/references/deep-researches/gooddao-daostack-surface.md @@ -0,0 +1,37 @@ +# GoodDAO and DAOStack surface + +GoodProtocol’s on-chain **governance shell** is largely **DAOStack-shaped**: an **Avatar** holds protocol assets and reputation context; a **Controller** registers **schemes** and routes privileged calls. GoodDocs summarizes DAO-facing roles; **Avatar**, **Controller**, and other DAO contract addresses live only in [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json). Implementation follows [DAOStack Arc](https://github.com/daostack/arc) patterns. + +## Core interfaces (GoodProtocol) + +[`DAOStackInterfaces.sol`](https://github.com/GoodDollar/GoodProtocol/blob/master/contracts/DAOStackInterfaces.sol) defines the pieces most integrations touch: + +### Avatar + +- **`nativeToken()`** — often the G$ token address for the deployment. +- **`nativeReputation()`** — **`GReputation`** token for voting weight (see `GReputation` in `deployment.json`). +- **`owner()`** — owner of the Avatar, typically the **`Controller`** contract. + +### Controller + +- **`avatar()`** — address of the Avatar contract. +- **`registerScheme` / `unregisterScheme` / `unregisterSelf` / `isSchemeRegistered` / `getSchemePermissions`** — scheme lifecycle and permission bitmask per scheme+avatar. +- **`genericCall(contract, data, avatar, value)`** — executes arbitrary calls **as the avatar** (used heavily by DAO-backed contracts to move tokens or call NameService). +- **`mintTokens`**, **`externalTokenTransfer`**, **`sendEther`** — treasury-style operations through the controller/avatar. + +## How GoodProtocol contracts use it + +- **`DAOUpgradeableContract`** / **`DAOContract`** descendants resolve **`dao`** (Controller) and **`avatar`** from **NameService** keys such as **`CONTROLLER`** and **`AVATAR`** (also written during **NameService.initialize**). +- **Avatar-gated writes** (for example **NameService.setAddress**, **UBISchemeV2** admin functions, **IdentityV3** after `initDAO`) require **`msg.sender == dao.avatar()`** (or equivalent role), not EOAs. +- Schemes that upgrade themselves (for example staking **`upgrade()`**) use **`dao.genericCall`** and **`unregisterSelf`** against the avatar. + +## What agents should do + +1. Treat **DAO calls** as **governance-only** unless the user explicitly controls the avatar or a registered scheme. +2. For **read-only** work, use **NameService** and per-contract **view** functions; use **Controller.isSchemeRegistered** when validating that a target contract is an approved scheme (for example staking migrations). +3. Never fabricate **Avatar** or **Controller** addresses — use [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) or NameService. + +## References + +- [Core contracts — DAO contracts](https://docs.gooddollar.org/for-developers/core-contracts) (narrative only; addresses from [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) only) +- DAOStack Arc controller and avatar concepts in the upstream repo linked from GoodDocs. diff --git a/.agents/skills/gooddollar/references/deep-researches/how-ubi-is-minted.md b/.agents/skills/gooddollar/references/deep-researches/how-ubi-is-minted.md new file mode 100644 index 0000000..96d321a --- /dev/null +++ b/.agents/skills/gooddollar/references/deep-researches/how-ubi-is-minted.md @@ -0,0 +1,68 @@ +# How UBI is minted + +This document aligns agent explanations with [How GoodDollar works](https://docs.gooddollar.org/how-gooddollar-works) and GoodDocs component pages; **contract addresses** come only from [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json). + +## Monetary creation (protocol level) + +- New G$ is created in connection with reserve mechanics: purchases into the reserve and reserve-side parameters (including reserve ratio) influence how much G$ can be issued while maintaining backing (see sustainability and issuance sections in GoodDocs). +- Selling G$ back to the reserve burns supply in that model. +- G$ that the protocol creates is allocated across UBI, savings incentives, treasury, and ecosystem uses per the distribution section of GoodDocs. + +## Where G$ is actually created + +Creation happens at the G$ token `mint(...)` call site, not inside `UBIScheme.claim()`. + +Current implementation uses the Mento-core expansion path: + +- `GoodDollarExpansionController` mints and routes to distribution helper. + +**DistributionHelper recipients** decide how much eventually lands in the UBI pool. + +## Claim vs reserve minting (important distinction) + +- **Reserve path:** Buying G$ through the reserve-backed AMM (or related Mento rails) is where mint and burn tied to the reserve model most directly apply at the token level. +- **Daily UBI `claim()`:** On `UBISchemeV2`, a successful claim typically **transfers G$ from the scheme contract’s balance** to the user (`token.transfer` in `_transferTokens`). The scheme may be **refilled** from the DAO avatar via internal `_withdrawFromDao` when configured, not necessarily minting in the same transaction as `claim()`. So describe user-facing UBI as **receipt from the UBI scheme balance**; reserve **minting** is the macro story, **transfer** is the usual claim-time mechanism. + +## Mento-core expansion flow (detailed) + +This is the detailed path for modern reserve-ratio-aware expansion. + +1. A caller triggers `mintUBIFromExpansion(exchangeId)` on `GoodDollarExpansionController`. +2. Expansion is time-gated by config (`expansionFrequency`, `lastExpansion`), so it does not run every block. +3. Controller computes a reserve-ratio scalar (effectively compounding `(1 - expansionRate)` for elapsed periods). +4. Controller calls `GoodDollarExchangeProvider.mintFromExpansion(exchangeId, reserveRatioScalar)`. +5. Exchange provider updates exchange state (including reserve-ratio math) and returns `amountToMint`. +6. Controller mints G$ to `distributionHelper`. +7. Controller triggers distribution (`onDistribution`) so recipients (including UBIScheme when configured) receive allocation. + +Also in `GoodDollarExpansionController`: + +- `mintUBIFromInterest(exchangeId, reserveInterest)` +- `mintUBIFromReserveBalance(exchangeId)` + +These are additional funding paths that mint to distribution helper as part of reserve-driven policy. + +## Reserve ratio, expansion, and risk + +- Practical reserve-ratio intuition: collateral backing strength per unit of G$ supply. +- Lower reserve ratio means weaker backing and higher risk when adding new supply. +- Expansion uses reserve-ratio-aware math instead of blind fixed minting, but aggressive params can still increase sell pressure. +- Key policy levers are expansion rate and expansion frequency (plus caller cadence/automation quality). + +## What claimers experience + +- Verified users receive daily UBI from a pool split among those who claim in each period (GoodDocs). +- The user-facing transaction is a UBIScheme-style `claim` on chains where it is deployed; ABI and version follow your deployment. + +## On-chain components (typical) + +- Identity system for verification and whitelist roots. +- UBIScheme (or successor) for entitlement and claim execution. +- G$ token: value reaches users via **transfer** from scheme balance and/or broader minting economics from the reserve side depending on which action you analyze. +- DistributionHelper: bridge layer between mint source and recipient buckets (UBI, others). + +## Agent guidance + +- Use GoodDocs for macro issuance and allocation; use UBIScheme + token transfer behavior for **claim** explanations. +- Use [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) for contract addresses instead of guessing. +- When users ask "why no UBI funding today", check whether mint functions were executed, then verify DistributionHelper recipient config and UBIScheme balance. diff --git a/.agents/skills/gooddollar/references/deep-researches/inviter-invitee-reward-model.md b/.agents/skills/gooddollar/references/deep-researches/inviter-invitee-reward-model.md new file mode 100644 index 0000000..267fa74 --- /dev/null +++ b/.agents/skills/gooddollar/references/deep-researches/inviter-invitee-reward-model.md @@ -0,0 +1,58 @@ +# Inviter and invitee reward model + +This explains why invite rewards sometimes work and sometimes fail, in user-facing terms. + +Invite rewards are handled by `InvitesV2`, but eligibility depends heavily on the identity system (`Identity`, often `IdentityV4`). In practice, most confusing cases are caused by whitelist or reverification state, not by the invite contract itself. + +## How the reward model works + +There are two separate moments: + +- `join`: the invitee registers with an invite code. +- bounty payout: the contract later checks if this invitee is eligible and pays inviter and invitee when rules pass. + +So joining does not guarantee immediate payout. Payout depends on current eligibility at claim time. + +## Why whitelist status is the main gate + +For bounty eligibility, `InvitesV2` checks whitelist state through Identity. + +The important behavior is: + +- A user can still have status `1` in identity storage but fail `isWhitelisted(...)` if reverification is due. +- When reverification is due, bounty checks fail until an admin refreshes authentication(Face Verification). +- Connected-wallet setups can still fail if the specific address used in invite flow does not pass the whitelist check expected by the contract path. + +## Why reverification blocks rewards + +Reverification cadence is defined in `IdentityV4` with day-based options (`reverifyDaysOptions`) and per-user progression (`authCount`). + +When too many days pass since the last authentication for that user’s current step: + +- `shouldReverify(...)` becomes true +- `isWhitelisted(...)` becomes false for bounty gating +- `canCollectBountyFor(...)` fails until authentication is refreshed + +This is why teams may see users who were once valid but are currently not eligible for invite rewards. + +## Common reasons a bounty is not paid + +- Invitee or inviter is not currently whitelisted. +- Reverification is due for invitee or inviter. +- `minimumClaims` or `minimumDays` thresholds are not met yet. +- Bounty was already paid or was zero at join time. +- Contract is inactive, or identity-chain checks do not match the active chain. +- Invite code or join state is invalid (duplicate code, self-invite, already joined). + +## What to measure for analytics + +- Historical pass: account was authenticated at least once (`lastAuthenticated > 0`). +- Current eligibility: account is currently whitelist-valid (`isWhitelisted`/non-zero root, depending on query design). + +Do not treat these as the same metric. Historical pass explains past onboarding success; current eligibility explains current payout success. + +## Contract sources + +- Invite contract: [`InvitesV2.sol`](https://github.com/GoodDollar/GoodProtocol/blob/master/contracts/invite/InvitesV2.sol) +- Identity contract: [`IdentityV4.sol`](https://github.com/GoodDollar/GoodProtocol/blob/master/contracts/identity/IdentityV4.sol) +- Deployment addresses: [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) diff --git a/.agents/skills/gooddollar/references/deep-researches/mento-reserve-economics.md b/.agents/skills/gooddollar/references/deep-researches/mento-reserve-economics.md new file mode 100644 index 0000000..e46db2a --- /dev/null +++ b/.agents/skills/gooddollar/references/deep-researches/mento-reserve-economics.md @@ -0,0 +1,27 @@ +# Mento and reserve economics + +This note ties **macro G$ economics** (GoodDocs) to **Mento trading surfaces** (broker, reserve, expansion) that agents integrate on-chain. + +## Protocol-level story (GoodDocs) + +- G$ is **reserve-backed**; issuance and price discovery follow an **augmented bonding curve** (Bancor-style dynamics) described in [How GoodDollar works](https://docs.gooddollar.org/how-gooddollar-works). +- **Buying** from the reserve side increases reserve assets and can support **new G$ supply** within reserve rules; **selling back** burns G$ and returns collateral, with parameters governed by **GoodDAO**. +- Distribution of newly created G$ spans UBI, savings incentives, treasury, and ecosystem allocations (same doc), but execution timing depends on the mint path and distribution trigger used by the deployment flow. + +## User-facing buy and sell (historical vs current) + +- [Buy and Sell G$](https://docs.gooddollar.org/user-guides) describes reserve interaction, fees (including exit contribution on some paths), and older explorer flows (GoodMarketMaker / exchangeHelper on Ethereum testnets). Treat that page as **product narrative**; **live contract addresses** must come only from [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json). + +## Mento stack (agent integration) + +On networks where GoodDollar uses Mento (see `MentoBroker` and related keys in [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) for your environment): + +- **`IBroker`** (implementation in [mento-core `Broker.sol`](https://github.com/mento-org/mento-core)) is the usual **swap entrypoint**: `getAmountIn` / `getAmountOut`, `swapIn` (exact in), `swapOut` (exact out), plus **trading limits** state per exchange id and token. +- **Reserve** holds collateral; **exchange provider** contracts price trades against the reserve; **GoodDollarExpansionController** and related interfaces in GoodProtocol’s [`MentoInterfaces.sol`](https://github.com/GoodDollar/GoodProtocol/blob/master/contracts/MentoInterfaces.sol) describe expansion and avatar wiring for governance-facing changes. +- Agents should not hardcode **exchangeId** or provider addresses: read them from [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) or discover via `getExchangeProviders()` after confirming the broker address for the chain from that file. + +## Agent guidance + +1. Explain **macro** supply and reserve behavior with GoodDocs language. +2. Execute **swaps** with broker quotes, slippage bounds, and allowances per `references/guides/swap.md`. +3. On revert, distinguish **slippage / limit** failures (broker) from **reserve liquidity** messages (see `MentoBroker.abi.yaml` error map and mento-core source). diff --git a/.agents/skills/gooddollar/references/deep-researches/on-off-ramp-service.md b/.agents/skills/gooddollar/references/deep-researches/on-off-ramp-service.md new file mode 100644 index 0000000..b59e5c9 --- /dev/null +++ b/.agents/skills/gooddollar/references/deep-researches/on-off-ramp-service.md @@ -0,0 +1,69 @@ +# On- and off-ramp service via stable token swap + +Use this note for the service pattern where ramp providers do not list G$ directly. The practical path is: ramp in/out with a listed stable token (for example cUSD), then swap between stable and G$ on-chain. + +## Why this is required + +- Most on-/off-ramp providers list mainstream stable tokens, not G$. +- Service needs a bridge asset for fiat rails. +- Stable token becomes the integration point with ramp providers, while G$ remains the in-app asset. + +## On-chain source of truth + +- Solidity: [`contracts/utils/BuyGDClone.sol`](https://github.com/GoodDollar/GoodProtocol/blob/master/contracts/utils/BuyGDClone.sol) +- Components: + - `BuyGDCloneFactory` + - `BuyGDCloneV2` + - `DonateGDClone` +- Deployments: [releases/deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) + +## Service architecture + +The factory deploys EIP-1167 minimal clones and wires swap infrastructure (router, oracle, quoter, optional Mento broker configuration, G$ token, stable token). + +Swap execution is **dual-path**: + +- **Uniswap-style route** (router/quoter path) +- **Mento-based route** (broker/exchange-provider path) + +For each swap request, the service compares quoted outputs and selects the route with the **larger `amountOut`** (best execution for the same input amount), then enforces `minAmount` guard on the selected path. + +Each user gets a deterministic clone address from owner-based salt: + +- `predict(owner)` for buy clone +- `predictDonation(owner, donor)` for donation clone + +This is why clone-per-user design is used: + +- predictable per-user addresses for audit and routing +- isolated execution context +- cheaper deployment than full contract instances + +## Execution surface (conceptual) + +The operational surface is intentionally small and deterministic: + +- `create(owner)` +- `createAndSwap(owner, minAmount)` +- `predict(owner)` +- `createDonation`, `createDonationAndSwap`, `predictDonation` + +This keeps on-/off-ramp architecture auditable and predictable across users. + +## Risks + +- Wrong factory or wrong chain causes permanent fund loss risk. +- Stale router/oracle/mento config can fail swap or produce bad execution. +- Missing `minAmount` protection increases slippage risk. +- Quote source mismatch or stale quotes across Uniswap/Mento can pick a suboptimal route if not refreshed just before execution. + +## Boundary note + +This file explains **why** this architecture exists for ramp services and why per-user clones matter. +For step-by-step service execution flow, use `references/guides/on-off-ramp.md`. + +## Cross-reference + +- User narrative: [Buy and Sell G$](https://docs.gooddollar.org/user-guides) +- Token integration details: [How to integrate the G$ token](https://docs.gooddollar.org/for-developers/developer-guides/how-to-integrate-the-gusd-token) +- Broker ABI: `references/contracts/MentoBroker.abi.yaml` diff --git a/.agents/skills/gooddollar/references/guides/bridge.md b/.agents/skills/gooddollar/references/guides/bridge.md new file mode 100644 index 0000000..71fd6e8 --- /dev/null +++ b/.agents/skills/gooddollar/references/guides/bridge.md @@ -0,0 +1,187 @@ +# Bridge guide + +Use for moving G$ across supported networks with deployment-specific bridge contracts. + +Primary local ABI reference for MessagePassingBridge flow: + +- `references/contracts/MessagePassingBridge.abi.yaml` + +## GoodDocs alignment + +- User flow and high-level behavior: [Bridge GoodDollars](https://docs.gooddollar.org/user-guides/bridge-gooddollars). +- Resolve supported bridge contract addresses per chain from [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) only (for example `MpbBridge` under `production`, `production-celo`, `production-xdc`). Use [Bridge GoodDollars](https://docs.gooddollar.org/user-guides/bridge-gooddollars) for user-facing flow and troubleshooting, not for addresses. + +## Goal + +Bridge with deterministic pre-checks: bridge support, allowance, amount, cross-chain transport fee, and delivered G$ after destination **amount** limits and protocol fee. + +## Required inputs + +- source and destination chain metadata +- bridge contract address for source chain +- source G$ token address +- amount in source token decimals +- signer and rpc url + +## Execution flow + +1. Resolve source bridge and token addresses for the network pair. +2. Run bridge eligibility checks for sender and amount via `canBridge(from, amount)` on the **source** bridge (same contract you call for `bridgeToWithLz` / `bridgeToWithAxelar`). Outbound burn does not invoke `canBridge` inside `_bridgeTo`; destination mint still enforces **amount** limits (see **Bridge amount limit context**). +3. Read allowance and approve bridge spender when required. +4. Resolve transport mode (`LZ` or `AXELAR`) and estimate required native fee. +5. Send bridge transaction with nonzero `msg.value` and explicit transport method. +6. Return tx hash and normalized bridge parameters. + +## Bridge fee context + +Two different costs show up on `MessagePassingBridge`; do not conflate them. + +**1. Cross-chain transport fee (native gas token on the source chain)** +Paid as **`msg.value`** on the outbound call. The contract reverts with **`MISSING_FEE`** if `msg.value` is zero. On the **LayerZero** path the contract compares your `msg.value` to **`estimateSendFee`** and reverts **`LZ_FEE(required, sent)`** if it is too low. Use the same **normalized** amount for `estimateSendFee` as the contract uses internally (see the next section). On the **Axelar** path you still attach native value for Gas Service / execution; there is no single `estimateSendFee` analogue in the snippet—follow Envio/Axelar docs or simulate the exact call for production amounts. + +**2. Protocol fee on minted G$ (destination chain, basis points)** +When the message is executed on the **destination** chain, the bridge applies **`bridgeFees`** (min / max / fee bps via `setBridgeFees`) and mints the recipient **minus** that fee; the fee portion is minted to **`feeRecipient`** when it is non-zero (see `bridgeFees()`, `feeRecipient`, and `_takeFee` / `ExecutedTransfer` in `references/contracts/MessagePassingBridge.abi.yaml`). This is **not** the LayerZero relayer fee; it is a separate cut on the **token amount** delivered on arrival. + +**3. Optional OFT / LayerZero token-adapter path** +If the flow uses the GoodDollar OFT-style adapter instead of `MessagePassingBridge`, fee quoting follows **`quoteSend`** / **`MessagingFee`** on that contract; see `references/contracts/GoodDollarOFTAdapter.abi.yaml`. + +## Bridge amount limit context + +**Bridge limit** means **bridge amount limit**: policy on **how much G$** (token volume) may move—**`minAmount`**, per-transfer cap, per-account daily cap, and aggregate daily cap—plus **`onlyWhitelisted`**. It does **not** mean the cross-chain **native** transport fee (`msg.value`, **`LZ_FEE`**), and it does **not** mean the **destination mint fee** in **`bridgeFees`** (bps); those are covered under **Bridge fee context**. + +Amount caps and counters are **per bridge deployment**: read the **source** contract for outbound **amount** policy and usage meters tied to the burn, and the **destination** contract for **`_enforceLimits`** at inbound mint completion; do not assume identical **`bridgeLimits`** across chains. + +**1. Amount caps and usage meters** +**`bridgeLimits()`** exposes **`dailyLimit`**, **`txLimit`**, **`accountDailyLimit`**, **`minAmount`**, and **`onlyWhitelisted`**. Compare those caps to **`bridgeDailyLimit()`** (aggregate **`bridged24Hours`** and **`lastTransferReset`**) and **`accountsDailyLimit(account)`** (same fields per sender). Updates use **`setBridgeLimits`** (access per the ABI). Field-level notes and accessors live in `references/contracts/MessagePassingBridge.abi.yaml`. + +**2. Source preflight vs destination enforcement** +**`canBridge(from, amount)`** on the **source** is a view-only diagnostic for **that amount**: same policy family as amount limit checks, evaluated on the **raw** burn size (not the LayerZero fee normalization). Outbound **`_bridgeTo`** does **not** call **`canBridge`**; call it from the client if you want **`(false, reason)`** before signing instead of learning only from a revert after burn setup. When the message is executed on the **destination**, **`_enforceLimits`** is the hard gate for **amount** throttles and whitelist behavior at mint time. + +## Outbound pause, approved requests, and inbound source bridges + +These controls are separate from numeric **amount** caps; they still block or relax bridging and can surface as **`BRIDGE_LIMITS`** or inbound skips. + +**`pauseBridge`** sets **`isClosed`**; when closed, outbound flow reverts with **`BRIDGE_LIMITS('closed')`**. **`approvedRequests(requestId)`** on the destination lets **`_bridgeFrom`** skip standard **amount** limit enforcement for that completion when set. **`setDisabledBridges`** toggles **`disabledSourceBridges`** entries keyed by **`keccak256(abi.encode(sourceChainId, BridgeService))`**, controlling whether an inbound relay from that source is accepted before the rest of destination handling. See `references/contracts/MessagePassingBridge.abi.yaml`. + +## Axelar vs LayerZero on GoodDollar deployments + +LayerZero mappings are initialized for Ethereum, Celo, Fuse, and XDC in `initialize` / `upgrade` on `MessagePassingBridge`. The **Axelar** path is only usable where `toAxelarChainId(targetChainId)` returns a non-empty string; the on-chain pure function currently maps **1**, **5**, **42220**, and **44787** only. For **Fuse (122)** or **XDC (50)** targets, use **LZ** (`bridgeToWithLz`) unless governance ships a broader Axelar mapping. + +## LayerZero fee and `estimateSendFee` + +`bridgeToWithLz` burns the G$ **raw** amount in the source token’s `decimals()`. Inside the contract, LayerZero payload and `estimateSendFee` use a value normalized to **18 decimals** the same way as [GoodBridge `BridgeHelperLibrary.normalizeFromTokenTo18Decimals`](https://github.com/GoodDollar/GoodBridge/blob/master/packages/bridge-contracts/contracts/messagePassingBridge/BridgeHelperLibrary.sol): if `decimals < 18`, multiply by `10^(18 - decimals)`; if `decimals > 18`, divide by `10^(decimals - 18)`; otherwise use the raw amount. + +`canBridge(from, amount)` is evaluated on the **raw** burn amount, not the normalized value. + +Read `decimals()` from the source G$ contract when building off-chain fee quotes so you stay aligned if a deployment differs. + +## Deterministic snippet + +```js +import { ethers } from "ethers"; + +function normalizedForLzFee(raw, tokenDecimals) { + if (tokenDecimals < 18) return raw * 10n ** BigInt(18 - tokenDecimals); + if (tokenDecimals > 18) return raw / 10n ** BigInt(tokenDecimals - 18); + return raw; +} + +const provider = new ethers.JsonRpcProvider(process.env.RPC_URL); +const signer = new ethers.Wallet(process.env.PRIVATE_KEY, provider); + +const token = new ethers.Contract( + process.env.GOODDOLLAR_ADDRESS, + [ + "function decimals() view returns (uint8)", + "function allowance(address,address) view returns (uint256)", + "function approve(address,uint256) returns (bool)", + ], + signer, +); + +const bridge = new ethers.Contract( + process.env.BRIDGE_ADDRESS, + [ + "function canBridge(address,uint256) view returns (bool,string)", + "function toLzChainId(uint256) view returns (uint16)", + "function estimateSendFee(uint16,address,address,uint256,bool,bytes) view returns (uint256,uint256)", + "function bridgeToWithLz(address,uint256,uint256,bytes) payable", + "function bridgeToWithAxelar(address,uint256,uint256,address) payable", + ], + signer, +); + +const owner = await signer.getAddress(); +const targetChainId = Number(process.env.TARGET_CHAIN_ID); +const recipient = process.env.RECIPIENT; +const amount = ethers.parseUnits(process.env.AMOUNT, Number(process.env.DECIMALS)); +const transport = (process.env.BRIDGE_TRANSPORT || "LZ").toUpperCase(); +const tokenDecimals = await token.decimals(); +const normalizedForLzEstimate = normalizedForLzFee(amount, Number(tokenDecimals)); + +const [canBridge, reason] = await bridge.canBridge(owner, amount); +if (!canBridge) throw new Error(`Bridge blocked: ${reason}`); + +const allowance = await token.allowance(owner, process.env.BRIDGE_ADDRESS); +if (allowance < amount) { + const approveTx = await token.approve(process.env.BRIDGE_ADDRESS, amount); + await approveTx.wait(); +} + +let tx; + +if (transport === "LZ") { + const dstEid = await bridge.toLzChainId(targetChainId); + if (dstEid === 0) throw new Error("Unsupported target chain for LayerZero"); + + const adapterParams = process.env.LZ_ADAPTER_PARAMS || "0x"; + const [nativeFee] = await bridge.estimateSendFee( + dstEid, + owner, + recipient, + normalizedForLzEstimate, + false, + adapterParams, + ); + if (nativeFee <= 0n) throw new Error("Estimated LayerZero fee is zero"); + + tx = await bridge.bridgeToWithLz(recipient, targetChainId, amount, adapterParams, { + value: nativeFee, + }); +} else if (transport === "AXELAR") { + const nativeFee = ethers.parseEther(process.env.AXELAR_FEE_ETH || "0.01"); + tx = await bridge.bridgeToWithAxelar(recipient, targetChainId, amount, owner, { + value: nativeFee, + }); +} else { + throw new Error("Unsupported BRIDGE_TRANSPORT. Use LZ or AXELAR"); +} + +const receipt = await tx.wait(); +console.log( + JSON.stringify( + { + txHash: receipt.hash, + sourceBridge: process.env.BRIDGE_ADDRESS, + targetChainId, + transport, + recipient, + rawAmount: amount.toString(), + tokenDecimals: Number(tokenDecimals), + normalizedAmountForLz: normalizedForLzEstimate.toString(), + }, + null, + 2, + ), +); +``` + +## Failure handling + +- unsupported destination: return targetChainId, bridge address, and transport mode +- fee too low (`LZ_FEE` or underpriced Axelar fee): re-estimate and retry with user confirmation +- approval or balance issue: return required delta +- credited G$ on destination is reduced by **`bridgeFees`** (bps / min / max); that is independent of the source **`msg.value`** transport fee +- **`canBridge`** false on source: return the **`reason`** string from the view call +- **`BRIDGE_LIMITS(reason)`** custom error (see `references/contracts/MessagePassingBridge.abi.yaml` **errors**): **`reason`** labels the failing check (numeric **amount** limit, whitelist, **`closed`**, or other policy string from the implementation) +- source preflight passed but destination still reverts: re-read **`bridgeLimits`** and daily counters for **amount** caps and **`onlyWhitelisted`**; check **`isClosed`**, **`approvedRequests`**, and **`disabledSourceBridges`** per **Outbound pause, approved requests, and inbound source bridges**; message delivery can cross a reset boundary or policy change diff --git a/.agents/skills/gooddollar/references/guides/check-identity.md b/.agents/skills/gooddollar/references/guides/check-identity.md new file mode 100644 index 0000000..adc0165 --- /dev/null +++ b/.agents/skills/gooddollar/references/guides/check-identity.md @@ -0,0 +1,87 @@ +# Check identity guide + +Use when the user asks whether an address is eligible for UBI or how identity links wallets. + +## GoodDocs alignment + +- [Connect another wallet address to identity](https://docs.gooddollar.org/user-guides/connect-another-wallet-address-to-identity): associated addresses resolve to a verified root in the Identity contract; `connectAccount` links wallets. +- One claim per day applies across all connected addresses for the same verified identity (see the hint on that page). + +## Goal + +Determine whitelist or authentication status with deterministic on-chain reads. + +## Metric semantics + +- **Passed whitelisting (historical):** use `lastAuthenticated(account) > 0`. +- **Still whitelisted (current):** use `getWhitelistedRoot(account) != 0x0` or `isWhitelisted(account) == true`. +- `getWhitelistedRoot(account) != 0x0` is a current-state signal, not an "ever passed" signal. + +## Required inputs + +- `nameServiceAddress` or explicit Identity address +- `account` to check +- `rpcUrl` and chain configuration + +## Execution flow + +1. Resolve `IDENTITY` from NameService when used on the deployment. +2. Read `getWhitelistedRoot(account)` or equivalent for the deployed Identity version. +3. Treat non-zero root as tied to a whitelisted identity tree when that is the protocol rule for the deployment. +4. Read `lastAuthenticated(account)` for historical pass status and `getWhitelistedRoot(account)` or `isWhitelisted(account)` for current status. + +## Deterministic snippet + +```js +import { ethers } from "ethers"; + +const provider = new ethers.JsonRpcProvider(process.env.RPC_URL); + +const nameService = new ethers.Contract( + process.env.NAMESERVICE_ADDRESS, + ["function getAddress(string) view returns (address)"], + provider, +); + +const identityAddress = await nameService.getAddress("IDENTITY"); +const identity = new ethers.Contract( + identityAddress, + [ + "function getWhitelistedRoot(address) view returns (address)", + "function isWhitelisted(address) view returns (bool)", + "function lastAuthenticated(address) view returns (uint256)", + ], + provider, +); + +const account = process.env.ACCOUNT; +const root = await identity.getWhitelistedRoot(account); +const isWhitelisted = await identity.isWhitelisted(account); +const lastAuthenticated = await identity.lastAuthenticated(account); + +console.log( + JSON.stringify( + { + account, + identityAddress, + whitelistedRoot: root, + isWhitelisted, + lastAuthenticated: lastAuthenticated.toString(), + }, + null, + 2, + ), +); +``` + +## Return shape + +- `isWhitelisted` or equivalent boolean summary +- `whitelistedRoot` or equivalent +- `lastAuthenticated` for historical-pass classification +- optional metadata fields when available + +## Failure handling + +- NameService cannot resolve `IDENTITY`: stop and fix inputs using [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) (`Identity` / `NameService` for the target environment)—not GoodDocs tables. +- Read failures: return the failing call and next step. diff --git a/.agents/skills/gooddollar/references/guides/claim.md b/.agents/skills/gooddollar/references/guides/claim.md new file mode 100644 index 0000000..bd51abd --- /dev/null +++ b/.agents/skills/gooddollar/references/guides/claim.md @@ -0,0 +1,83 @@ +# Claim guide + +Use when the user wants to claim daily UBI. Protocol context: [How GoodDollar works](https://docs.gooddollar.org/how-gooddollar-works) and [UBIScheme (GoodDocs behavior)](https://docs.gooddollar.org/for-developers/core-contracts/ubischeme)—contract addresses only from [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json). + +## Goal + +Execute a safe `claim()` with identity pre-checks and clear outputs. + +## GoodDocs alignment + +- UBI is distributed daily to verified users; the active pool is split among claimers in each period (see [How GoodDollar works](https://docs.gooddollar.org/how-gooddollar-works)). +- UBIScheme deployments vary by chain (Fuse, Celo, XDC); resolve live contract addresses only from [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) (`UBIScheme` under `production`, `production-celo`, or `production-xdc`). Use [Core contracts / UBIScheme](https://docs.gooddollar.org/for-developers/core-contracts/ubischeme) for documented behavior, not for addresses. + +## Required inputs + +- `nameServiceAddress` or explicit UBIScheme and Identity addresses from [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) +- `rpcUrl` and chain configuration +- signer context + +## Execution flow + +1. Resolve `IDENTITY` and `UBISCHEME` from NameService when NameService is the source of truth for the deployment. +2. Confirm whitelist status for the claiming account. +3. Optionally read entitlement or claimable state before sending `claim()`. +4. Call `claim()` on the resolved UBIScheme (contract generation may differ by deployment; align ABI with your target). +5. Return tx hash and claimed amount when derivable from events or balance delta. + +## Deterministic snippet + +```js +import { ethers } from "ethers"; + +const provider = new ethers.JsonRpcProvider(process.env.RPC_URL); +const signer = new ethers.Wallet(process.env.PRIVATE_KEY, provider); + +const nameService = new ethers.Contract( + process.env.NAMESERVICE_ADDRESS, + ["function getAddress(string) view returns (address)"], + provider, +); + +const identityAddress = await nameService.getAddress("IDENTITY"); +const ubiAddress = await nameService.getAddress("UBISCHEME"); + +const identity = new ethers.Contract( + identityAddress, + [ + "function isWhitelisted(address) view returns (bool)", + "function getWhitelistedRoot(address) view returns (address)", + ], + provider, +); + +const account = await signer.getAddress(); +const isWhitelisted = await identity.isWhitelisted(account); +if (!isWhitelisted) throw new Error("Account is not whitelisted"); + +const root = await identity.getWhitelistedRoot(account); +if (root === ethers.ZeroAddress) throw new Error("No whitelisted root"); + +const ubi = new ethers.Contract( + ubiAddress, + ["function claim()", "event UBICalculated(address,uint256,uint256,uint256)"], + signer, +); + +const tx = await ubi.claim(); +const receipt = await tx.wait(); +console.log(JSON.stringify({ txHash: receipt.hash, account, root }, null, 2)); +``` + +## Pre-check failures + +- Not whitelisted: stop and point the user to identity verification flows in GoodDocs. +- Missing contract address: stop; use [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) only. +- Zero entitlement: communicate that nothing is claimable in the current period without guessing amounts. + +## Output contract + +- network +- resolved contract addresses +- tx hash +- claim outcome details when available diff --git a/.agents/skills/gooddollar/references/guides/faucet.md b/.agents/skills/gooddollar/references/guides/faucet.md new file mode 100644 index 0000000..d224e85 --- /dev/null +++ b/.agents/skills/gooddollar/references/guides/faucet.md @@ -0,0 +1,76 @@ +# Faucet top-up guide + +Use when the user needs native gas top-up via GoodProtocol Faucet. + +## Goal + +Run deterministic pre-checks and call `topWallet` only when eligibility and limits pass. + +## Required inputs + +- `rpcUrl`, chain configuration, signer +- Faucet address for the chain (from [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) `Faucet` under the matching environment, or `NameService.getAddress` when the deployment documents the key) +- target user address + +## Execution flow + +1. Resolve Faucet contract address for the active chain from [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json). +2. Run `canTop(user)` as preflight. +3. Read `getToppingAmount(user)` and communicate expected top-up. +4. If eligible, call `topWallet(user)`. +5. Return tx hash and resulting top-up context. + +## Deterministic snippet + +```js +import { ethers } from "ethers"; + +const provider = new ethers.JsonRpcProvider(process.env.RPC_URL); +const signer = new ethers.Wallet(process.env.PRIVATE_KEY, provider); + +const faucet = new ethers.Contract( + process.env.FAUCET_ADDRESS, + [ + "function canTop(address) view returns (bool)", + "function getToppingAmount(address) view returns (uint256)", + "function topWallet(address payable)", + ], + signer, +); + +const user = process.env.USER; +const canTop = await faucet.canTop(user); +if (!canTop) throw new Error("Faucet canTop returned false"); + +const amount = await faucet.getToppingAmount(user); +const tx = await faucet.topWallet(user); +const receipt = await tx.wait(); + +console.log( + JSON.stringify( + { + txHash: receipt.hash, + user, + toppingAmount: amount.toString(), + }, + null, + 2, + ), +); +``` + +## Common rejection reasons + +- `not authorized` +- daily or weekly cap reached +- banned address +- low effective `toTop` vs minimum threshold +- faucet inactive or wrong chain/address + +## Output contract + +- network +- faucet address +- `canTop` preflight result +- top-up amount estimate +- tx hash (when executed) diff --git a/.agents/skills/gooddollar/references/guides/gooddocs.md b/.agents/skills/gooddollar/references/guides/gooddocs.md new file mode 100644 index 0000000..5e5b4b3 --- /dev/null +++ b/.agents/skills/gooddollar/references/guides/gooddocs.md @@ -0,0 +1,37 @@ +# GoodDocs hub + +Canonical protocol documentation lives at [GoodDocs](https://docs.gooddollar.org/). + +This is a **routing guide** (quick link map), not a deep protocol analysis note. + +## Start here + +- [Welcome](https://docs.gooddollar.org/) +- [How GoodDollar works](https://docs.gooddollar.org/how-gooddollar-works) + +## User guides + +- [Buy and Sell G$](https://docs.gooddollar.org/user-guides) (reserve-backed buy/sell; includes historical Ethereum/Kovan explorer workflows in the doc) +- [Bridge GoodDollars](https://docs.gooddollar.org/user-guides/bridge-gooddollars) (MessagePassingBridge, fees, limits, troubleshooting) +- [Connect another wallet address to identity](https://docs.gooddollar.org/user-guides/connect-another-wallet-address-to-identity) + +## Developers + +- [Core contracts](https://docs.gooddollar.org/for-developers/core-contracts) (module overview; **do not** read contract addresses from GoodDocs—use [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) only) +- [Developer guides index](https://docs.gooddollar.org/for-developers/developer-guides) +- [Integrate the G$ token](https://docs.gooddollar.org/for-developers/developer-guides/how-to-integrate-the-gusd-token) (ERC-677, ERC-777, decimals by chain, `transferAndCall`, fees) +- [Use G$ streaming](https://docs.gooddollar.org/for-developers/developer-guides/use-gusd-streaming) (Superfluid on Celo, CFAv1Forwarder) + +## Chain IDs (bridge doc) + +| Network | Chain ID | +| -------- | -------- | +| Ethereum | 1 | +| Fuse | 122 | +| Celo | 42220 | +| XDC | 50 | + +## This repo + +- Action playbooks: `references/guides/*.md`. +- Rich ABIs: `references/contracts/*.abi.yaml`. diff --git a/.agents/skills/gooddollar/references/guides/goodsdks.md b/.agents/skills/gooddollar/references/guides/goodsdks.md new file mode 100644 index 0000000..8092e40 --- /dev/null +++ b/.agents/skills/gooddollar/references/guides/goodsdks.md @@ -0,0 +1,110 @@ +# GoodSDKs integration guide + +Use this guide when the task is SDK-first (app integration), not raw contract-first. + +## Scope + +GoodSDKs is the app integration layer for GoodDollar: + +- `@goodsdks/citizen-sdk` for identity and claim flows. +- `@goodsdks/react-hooks` for Wagmi React hooks. +- `@goodsdks/good-reserve` for reserve buy or sell flows. +- `@goodsdks/engagement-sdk` for engagement rewards flows. +- `@goodsdks/ui-components` and `@goodsdks/savings-widget` for web components. + +## Routing map + +- Check whitelist, identity root, FV link -> `@goodsdks/citizen-sdk` (`IdentitySDK`) +- Claim UBI with entitlement checks and fallback chains -> `@goodsdks/citizen-sdk` (`ClaimSDK`) +- React app with Wagmi and minimal glue code -> `@goodsdks/react-hooks` +- Buy or sell via reserve rails (Celo or XDC support rules) -> `@goodsdks/good-reserve` +- Reward app registration, claims, reward history -> `@goodsdks/engagement-sdk` +- Embeddable UI in non-React or mixed stacks -> `@goodsdks/ui-components` or `@goodsdks/savings-widget` + +## Deterministic setup + +Monorepo prerequisites: + +```bash +cd ~/Projects/GoodSDKs +corepack enable +yarn install --immutable +yarn build +``` + +Target one workspace: + +```bash +yarn workspace @goodsdks/citizen-sdk build +yarn workspace @goodsdks/react-hooks build +``` + +## Deterministic usage snippets + +Identity SDK: + +```ts +import { createPublicClient, createWalletClient, custom, http } from "viem"; +import { IdentitySDK } from "@goodsdks/citizen-sdk"; + +const publicClient = createPublicClient({ transport: http("https://forno.celo.org") }); +const walletClient = createWalletClient({ transport: custom(window.ethereum) }); + +const identitySDK = await IdentitySDK.init({ + publicClient, + walletClient, + env: "production", +}); + +const { isWhitelisted, root } = await identitySDK.getWhitelistedRoot("0xYourAccount"); +console.log({ isWhitelisted, root }); +``` + +Claim SDK: + +```ts +import { ClaimSDK, IdentitySDK } from "@goodsdks/citizen-sdk"; + +const identitySDK = await IdentitySDK.init({ publicClient, walletClient, env: "production" }); +const claimSDK = await ClaimSDK.init({ + publicClient, + walletClient, + identitySDK, + env: "production", +}); + +const entitlement = await claimSDK.checkEntitlement(); +if (entitlement.amount > 0n) { + const receipt = await claimSDK.claim(); + console.log(receipt.transactionHash); +} +``` + +React hooks: + +```tsx +import { useIdentitySDK, useClaimSDK, useGoodReserve } from "@goodsdks/react-hooks"; + +const identity = useIdentitySDK("production"); +const claim = useClaimSDK("production"); +const reserve = useGoodReserve("production"); +``` + +Reserve SDK: + +```ts +import { GoodReserveSDK } from "@goodsdks/good-reserve"; + +const sdk = new GoodReserveSDK(publicClient, walletClient, "production"); +const quote = await sdk.getBuyQuote(CUSD_ADDRESS, amountIn); +const tx = await sdk.buy(CUSD_ADDRESS, amountIn, (quote * 95n) / 100n); +console.log(tx.hash); +``` + +## Agent rules + +1. Prefer SDK methods first for app tasks. +2. Use contract-level guides only when SDK does not expose required behavior. +3. Do not invent SDK method names; align with package READMEs and exported types. +4. For chain support errors, report chain and env explicitly (do not silently fallback). +5. For UI tasks, prefer hooks or components over bespoke wallet and viem plumbing. diff --git a/.agents/skills/gooddollar/references/guides/hypersync-hyperrpc.md b/.agents/skills/gooddollar/references/guides/hypersync-hyperrpc.md new file mode 100644 index 0000000..e7b6f28 --- /dev/null +++ b/.agents/skills/gooddollar/references/guides/hypersync-hyperrpc.md @@ -0,0 +1,110 @@ +# Envio HyperSync and HyperRPC + +Use this guide when the task is high-volume historical blockchain data fetch (events, blocks, txs), especially analytics and indexing workflows. + +## Official docs + +- HyperSync overview: [docs.envio.dev/docs/HyperSync/overview](https://docs.envio.dev/docs/HyperSync/overview) +- HyperRPC overview: [docs.envio.dev/docs/HyperRPC/overview-hyperrpc](https://docs.envio.dev/docs/HyperRPC/overview-hyperrpc) +- HyperRPC supported networks: [docs.envio.dev/docs/HyperRPC/hyperrpc-supported-networks](https://docs.envio.dev/docs/HyperRPC/hyperrpc-supported-networks) + +## What to use + +- **HyperSync**: preferred for new data pipelines and heavy historical scans. +- **HyperRPC**: read-only JSON-RPC drop-in for existing RPC code paths. + +## HyperRPC vs HyperSync (avoid mixing them up) + +- **HyperRPC** is a **hosted JSON-RPC URL** (same methods as `eth_getLogs`, `eth_blockNumber`, and so on). Any HTTP client or existing RPC stack can call it; put the API token in the URL path as Envio documents. +- **HyperSync** is a **separate high-throughput query API** used through **Envio client libraries** (for example `@envio-dev/hypersync-client` in Node). It is **not** “just another RPC endpoint” with the same ergonomics as a one-line `fetch` to `eth_getLogs` at large scale. + +## Decision rule + +1. For GoodDollar protocol history that exists on subgraphs, query the subgraph first and validate fields in `references/subgraphs/*-guide.md`. +2. If subgraph schema or freshness cannot satisfy the request, use **HyperSync** for large scans and pipelines, or **HyperRPC** when you must stay inside standard JSON-RPC. +3. For write operations (sending tx), use normal RPC providers; HyperRPC is read-only. + +## GoodDollar-relevant network coverage + +- Celo and XDC are supported on HyperRPC. +- Fuse is not currently listed; treat this as non-blocking and use existing providers for Fuse. + +## Access and auth + +- HyperRPC/HyperSync usage is account-based. +- HyperRPC requires an API key for reliable production use. +- Requests without API token are rate-limited and should be treated as non-production fallback only. +- Add API key in endpoint URL as documented by Envio. +- HyperRPC token pattern example from docs: `https://.rpc.hypersync.xyz/` + +## Agents: Envio API token when HyperSync is the best option + +After you decide **HyperSync** is the right tool for the user query (for example large historical scans or pipeline-scale log pulls where subgraphs are insufficient), check for a usable Envio credential in the execution environment (`ENVIO_API_TOKEN` for `@envio-dev/hypersync-client`, or the token Envio documents for your chosen URL pattern). + +If **no** Envio API token is available and you cannot complete the HyperSync path without it, **stop and explicitly ask the user** to provide an Envio API token (name the env var you need, typically `ENVIO_API_TOKEN`). Do not silently rely on anonymous or heavily rate-limited access as a substitute when HyperSync was already identified as the best approach. + +## Practical use in this repo + +- Keep subgraphs as first option for indexed protocol entities. +- Use HyperSync/HyperRPC when subgraph coverage is missing, stale, or insufficient for bulk historical pulls. +- When an agent chooses **HyperSync** as the best path and no Envio API token is available, follow **Agents: Envio API token when HyperSync is the best option** in this file and ask the user for `ENVIO_API_TOKEN` before proceeding. +- Keep contract addresses from [GoodProtocol/deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) only; use GoodDocs for product context, not for resolving contract addresses. +- For implementation details (client setup, query structure, supported methods), follow the Envio docs links above directly. + +## From block for historical fetches + +For **`eth_getLogs`**, HyperRPC, and HyperSync range queries, the lower bound is **`fromBlock`** (or the client’s equivalent). Prefer the deployment’s **`creationBlock`** from the matching row in `references/contracts/*.abi.yaml` (or **`meta.deploymentCreationBlocks`** where deployments are plain address strings) so scans do not start at genesis when you only need post-deploy history. Field placement for **`creationBlock`** is defined in `references/contracts/_rich-abi-yaml-format.md`. If you cannot determine the creation block, **`fromBlock` 0** is valid. + +## Prebuilt scripts (developers and local agents) + +These scripts avoid rediscovering HyperRPC wiring on every task. They require **Node.js 18 or newer** (global `fetch`). Paths like `scripts/...` are relative to the **GoodSkills repository root** (the directory that contains both `skills/` and `scripts/`), not relative to `skills/gooddollar/` alone. + +### Last N Identity `WhitelistedAdded` logs via HyperRPC + +- Script: `scripts/fetch-whitelist-events-hyperrpc.mjs` +- Default `EVENT_TOPIC0` matches `WhitelistedAdded(address)` on `IdentityV4`; override `EVENT_TOPIC0` for other events. +- Production Celo defaults: `CONTRACT_ADDRESS` defaults to `Identity` from `production-celo` in [GoodProtocol deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) (`0xC361A6E67822a0EDc17D899227dd9FC50BD62F42`). If `HYPERRPC_URL` is unset, the script builds `https://celo.rpc.hypersync.xyz/` from `HYPERRPC_API_TOKEN` or `ENVIO_API_TOKEN`. +- Optional env: `HYPERRPC_URL` (overrides token-based default), `CONTRACT_ADDRESS`, `LIMIT` (default `500`), `STEP` (default `2000`), `FROM_BLOCK` (decimal; omit to read **`creationBlock`** for `CONTRACT_ADDRESS` from `ABI_PATH` or the default `skills/gooddollar/references/contracts/IdentityV4.abi.yaml`), `ABI_PATH`, `TO_BLOCK` (default `latest`). **`fromBlock`** behavior is described in **From block for historical fetches** above. + +```bash +cd /path/to/GoodSkills +export HYPERRPC_API_TOKEN='' +node scripts/fetch-whitelist-events-hyperrpc.mjs +``` + +Web-only assistants without a shell cannot run the file; they should return the same env keys and command text so the user runs it locally. + +## HyperSync client minimal path (install required) + +HyperSync uses the official client. Install and query pattern (Celo example URLs from [Envio Celo docs](https://docs.envio.dev/docs/HyperIndex/celo)): + +```bash +npm install @envio-dev/hypersync-client +export ENVIO_API_TOKEN='' +``` + +Save as a `.mjs` file (or use `"type": "module"` in a local `package.json`) and run with `node`: + +```javascript +import { HypersyncClient, presetQueryLogsOfEvent } from "@envio-dev/hypersync-client"; + +const client = new HypersyncClient({ + url: "https://celo.hypersync.xyz", + apiToken: process.env.ENVIO_API_TOKEN, +}); + +const identity = "0x..."; +const whitelistedAddedTopic0 = + "0xee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f"; + +const fromBlock = 17237952; +const toBlock = await client.getHeight(); + +const query = presetQueryLogsOfEvent(identity, whitelistedAddedTopic0, fromBlock, toBlock); +const res = await client.get(query); +console.log(res.data.logs.length); +``` + +The example **`fromBlock`** matches **`creationBlock`** for production Celo Identity in `skills/gooddollar/references/contracts/IdentityV4.abi.yaml`; see **From block for historical fetches** above. + +Full API and streaming patterns: [HyperSync clients](https://docs.envio.dev/docs/HyperSync/hypersync-clients) and the package README for `@envio-dev/hypersync-client`. diff --git a/.agents/skills/gooddollar/references/guides/invite-bounties.md b/.agents/skills/gooddollar/references/guides/invite-bounties.md new file mode 100644 index 0000000..d60aafd --- /dev/null +++ b/.agents/skills/gooddollar/references/guides/invite-bounties.md @@ -0,0 +1,115 @@ +# Invite bounties guide + +Use when the task is to verify or execute inviter-invitee bounty payout flow and explain why payout is blocked. + +## Goal + +Check eligibility deterministically, execute payout only when eligible, and return exact failure reason when not eligible. + +## Required inputs + +- target chain +- `InvitesV2` address +- `Identity` address +- optional `UBISchemeV2` address when claims threshold is active +- invitee address +- inviter address +- rpc url and signer + +## Execution flow + +1. Resolve contract addresses from `deployment.json`. +2. Read invitee state from `users(invitee)` and global thresholds (`minimumClaims`, `minimumDays`, `active`). +3. Check current eligibility with `canCollectBountyFor(invitee)`. +4. If not eligible, read identity whitelist for invitee and inviter and return concrete blocker. +5. If eligible, execute `bountyFor(invitee)` or `collectBounties()` and return tx hash plus payout values from events. + +## Deterministic snippet + +```js +import { ethers } from "ethers"; + +const provider = new ethers.JsonRpcProvider(process.env.RPC_URL); +const signer = new ethers.Wallet(process.env.PRIVATE_KEY, provider); + +const invites = new ethers.Contract( + process.env.INVITES_ADDRESS, + [ + "function canCollectBountyFor(address) view returns (bool)", + "function bountyFor(address)", + "function users(address) view returns (bytes32,address,uint40,uint24,bool,uint256)", + "function minimumClaims() view returns (uint256)", + "function minimumDays() view returns (uint256)", + "function active() view returns (bool)", + "event InviterBounty(address indexed inviter,address indexed invitee,uint256 bountyPaid,uint256 inviterLevel,bool earnedLevel)" + ], + signer, +); + +const identity = new ethers.Contract( + process.env.IDENTITY_ADDRESS, + [ + "function isWhitelisted(address) view returns (bool)" + ], + provider, +); + +const invitee = process.env.INVITEE_ADDRESS; +const inviter = process.env.INVITER_ADDRESS; + +const [isActive, eligible, inviteeWhitelisted, inviterWhitelisted, minClaims, minDays] = await Promise.all([ + invites.active(), + invites.canCollectBountyFor(invitee), + identity.isWhitelisted(invitee), + identity.isWhitelisted(inviter), + invites.minimumClaims(), + invites.minimumDays(), +]); + +if (!isActive) throw new Error("Invites contract is inactive"); +if (!eligible) { + throw new Error( + `Not eligible. inviteeWhitelisted=${inviteeWhitelisted} inviterWhitelisted=${inviterWhitelisted} minimumClaims=${minClaims} minimumDays=${minDays}`, + ); +} + +const tx = await invites.bountyFor(invitee); +const receipt = await tx.wait(); +const bountyEvent = receipt.logs + .map((log) => { + try { + return invites.interface.parseLog(log); + } catch { + return null; + } + }) + .find((e) => e && e.name === "InviterBounty"); + +console.log( + JSON.stringify( + { + txHash: receipt.hash, + invitee, + inviter, + bountyPaid: bountyEvent?.args?.bountyPaid?.toString() ?? null, + }, + null, + 2, + ), +); +``` + +## Failure handling + +- invitee or inviter is not currently whitelisted +- reverification is due and whitelist check fails until re-authentication +- minimum claims or minimum days is not met +- bounty already paid or bounty-at-join is zero +- contract inactive or wrong deployment addresses + +## Output contract + +- network and addresses used +- eligibility status and blockers +- tx hash when sent +- payout values when available from logs diff --git a/.agents/skills/gooddollar/references/guides/migrate-fuse-staking-to-celo-savings.md b/.agents/skills/gooddollar/references/guides/migrate-fuse-staking-to-celo-savings.md new file mode 100644 index 0000000..4ad9fd2 --- /dev/null +++ b/.agents/skills/gooddollar/references/guides/migrate-fuse-staking-to-celo-savings.md @@ -0,0 +1,116 @@ +# Fuse to CELO staking migration guide + +Use when the user wants to migrate an existing Fuse governance stake into a CELO destination savings flow. In this flow, Fuse `GovernanceStakingV2` is the old staking contract (source) and **`GooddollarSavingsStream`** on Celo is the destination savings contract ([`GooddollarSavingsStream.sol`](https://github.com/Ubeswap/gooddollar-contracts/blob/main/contracts/GooddollarSavingsStream.sol), [CeloScan](https://celoscan.io/address/0x059ee811414230d1Fb157878D2b491240F4D8d3B)). + +## Goal + +Close a user stake on Fuse, bridge the resulting G$ to CELO, and stake on CELO for that user in a controlled backend flow. + +## Required inputs + +- user address on Fuse and corresponding destination address on CELO +- Fuse `GovernanceStakingV2` address (`production.GovernanceStakingV2` in [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json)) +- Fuse G$ token address and bridge contract address (from [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json): `GoodDollar`, `MpbBridge` under `production`) +- CELO G$ token address (from `production-celo` in the same file) and destination savings contract address +- backend signer or service wallet with required execution permissions +- chain RPC URLs for Fuse and CELO + +## Address resolution quick table + +| Purpose | Network | Source key/path | Value | +|---|---|---|---| +| Governance staking (source close) | Fuse (`production`, `networkId: 122`) | `deployment.json` -> `production.GovernanceStakingV2` | `0xB7C3e738224625289C573c54d402E9Be46205546` | +| Governance staking (previous) | Fuse (`production`, `networkId: 122`) | `deployment.json` -> `production.GovernanceStaking` | `0xFAF457Fb4A978Be059506F6CD41f9B30fCa753b0` | +| Fuse G$ token | Fuse (`production`, `networkId: 122`) | `deployment.json` -> `production.GoodDollar` | `0x495d133B938596C9984d462F007B676bDc57eCEC` | +| Fuse bridge | Fuse (`production`, `networkId: 122`) | `deployment.json` -> `production.MpbBridge` | `0xa3247276DbCC76Dd7705273f766eB3E8a5ecF4a5` | +| Destination savings | CELO (`networkId: 42220`) | [CeloScan](https://celoscan.io/address/0x059ee811414230d1Fb157878D2b491240F4D8d3B) / `GooddollarSavingsStream` | `0x059ee811414230d1Fb157878D2b491240F4D8d3B` (`process.env.CELO_SAVINGS`) | + +Canonical sources: + +- [GoodProtocol deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) +- [Fuse explorer contract (GovernanceStakingV2 address)](https://explorer.fuse.io/address/0xB7C3e738224625289C573c54d402E9Be46205546?tab=contract) +- [Ubeswap gooddollar-contracts](https://github.com/Ubeswap/gooddollar-contracts) +- [GoodBridge bridge helper normalization](https://github.com/GoodDollar/GoodBridge/blob/master/packages/bridge-contracts/contracts/messagePassingBridge/BridgeHelperLibrary.sol) + +## Token decimals and `MessagePassingBridge` LZ fees + +Production deployments checked on-chain: Fuse `GoodDollar` uses **2** decimals and Celo `GoodDollar` uses **18**. Fuse `GovernanceStakingV2` (sG$) uses **2** decimals. Resolve `decimals()` from each live token in your runner so you stay correct if deployments change. + +On the Fuse `MpbBridge` (`MessagePassingBridge`), `canBridge(from, amount)` and `bridgeToWithLz(..., amount, ...)` use the **raw G$ burn amount** in source token decimals. Off-chain **`estimateSendFee`’s `_normalizedAmount` argument** must match what the contract builds internally: **`normalizeFromTokenTo18Decimals(amount, IERC20(nativeToken()).decimals())`** ([`BridgeHelperLibrary`](https://github.com/GoodDollar/GoodBridge/blob/master/packages/bridge-contracts/contracts/messagePassingBridge/BridgeHelperLibrary.sol)). Format displayed amounts per chain (`formatUnits`/UI) using each chain’s G$ decimals. + +## Execution flow + +1. Confirm allowance for whichever asset your flow spends first (for example sG$ allowance to the backend on Fuse `GovernanceStakingV2`, or Fuse G$ allowance if you pull G$ directly), before any transfers or bridges. +2. Verify current stake state on Fuse before closing: + - stake token balance + - withdrawable stake amount + - pending rewards if any +3. Execute Fuse unstake or close flow on governance staking (`withdrawStake` or equivalent full-close path). +4. Compute net G$ available for migration after unstake completion and any reward claim behavior. +5. Bridge G$ from Fuse to CELO using the configured bridge path and track the transfer id or tx hash pair. +6. Wait for destination finalization on CELO and verify credited G$ balance at the backend execution wallet. +7. Approve destination savings contract to spend migrated G$ amount. +8. Stake for the user on CELO with `stakeFor(amount, recipient)` on `GooddollarSavingsStream` (G$ native Super Token; approve the savings contract, not only ERC20 GoodDollar from `deployment.json` if your wallet holds the Super Token). +9. Return a migration result with both chain tx hashes and final CELO staked amount. + +## Deterministic snippet + +```js +import { ethers } from "ethers"; + +const fuse = new ethers.JsonRpcProvider(process.env.FUSE_RPC_URL); +const celo = new ethers.JsonRpcProvider(process.env.CELO_RPC_URL); +const signerFuse = new ethers.Wallet(process.env.BACKEND_PK, fuse); +const signerCelo = new ethers.Wallet(process.env.BACKEND_PK, celo); + +const user = process.env.USER_ADDRESS; +const migrateAmount = BigInt(process.env.MIGRATE_AMOUNT); + +const celoGd = new ethers.Contract( + process.env.CELO_GD_TOKEN, + [ + "function approve(address spender,uint256 amount) returns (bool)", + "function balanceOf(address) view returns (uint256)", + ], + signerCelo, +); + +const savings = new ethers.Contract( + process.env.CELO_SAVINGS, + ["function stakeFor(uint256 amount,address recipient)"], + signerCelo, +); + +const approveTx = await celoGd.approve(process.env.CELO_SAVINGS, migrateAmount); +await approveTx.wait(); + +const stakeTx = await savings.stakeFor(migrateAmount, user); +const receipt = await stakeTx.wait(); + +console.log( + JSON.stringify( + { + user, + celoStakeTx: receipt.hash, + migratedAmount: migrateAmount.toString(), + }, + null, + 2, + ), +); +``` + +## Pre-check failures + +- User allowance missing on Fuse: stop and request allowance tx from user. +- Stake close fails on Fuse: stop and return exact revert reason before bridge. +- Bridge transfer not finalized on CELO: do not call `stakeFor` until destination balance is confirmed. +- CELO savings approval missing or too low: re-approve exact amount before staking. + +## Output contract + +- user address +- Fuse unstake tx hash +- bridge tx hash or transfer identifier +- CELO stake tx hash +- final staked amount on CELO diff --git a/.agents/skills/gooddollar/references/guides/on-off-ramp.md b/.agents/skills/gooddollar/references/guides/on-off-ramp.md new file mode 100644 index 0000000..d212705 --- /dev/null +++ b/.agents/skills/gooddollar/references/guides/on-off-ramp.md @@ -0,0 +1,77 @@ +# On- and off-ramp service guide + +Use when implementing service flow where fiat ramps support a listed stable token (for example cUSD), and the app needs stable <-> G$ swap on-chain. + +## Goal + +Operate deterministic clone-based swap routing with explicit chain/factory verification and slippage guard. + +## Required inputs + +- target chain and factory address +- owner address used for clone derivation +- stable token and G$ token addresses +- direction: on-ramp or off-ramp +- `minAmount` guard +- signer and rpc url + +## Execution flow + +1. Resolve factory for target chain from [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) (`BuyGDFactory` / `BuyGDFactoryV2` under `production-celo`, or the key your deployment uses). +2. Compute expected clone via `predict(owner)`. +3. If clone not yet deployed for flow, call `create(owner)` or `createAndSwap(owner, minAmount)`. +4. Execute stable -> G$ (on-ramp) or G$ -> stable (off-ramp) through clone path. +5. Return chain id, factory, predicted clone, effective clone, tx hashes. + +## Deterministic snippet + +```js +import { ethers } from "ethers"; + +const provider = new ethers.JsonRpcProvider(process.env.RPC_URL); +const signer = new ethers.Wallet(process.env.PRIVATE_KEY, provider); + +const factory = new ethers.Contract( + process.env.BUY_GD_CLONE_FACTORY, + [ + "function predict(address) view returns (address)", + "function create(address) returns (address)", + "function createAndSwap(address,uint256) returns (address)", + ], + signer, +); + +const owner = process.env.OWNER; +const minAmount = ethers.parseUnits(process.env.MIN_AMOUNT, Number(process.env.DECIMALS_OUT)); +const predicted = await factory.predict(owner); + +const tx = await factory.createAndSwap(owner, minAmount); +const receipt = await tx.wait(); + +console.log( + JSON.stringify( + { + txHash: receipt.hash, + owner, + predictedClone: predicted, + chainId: (await provider.getNetwork()).chainId.toString(), + }, + null, + 2, + ), +); +``` + +## Failure handling + +- predicted clone mismatch with trusted expectation +- wrong chain or wrong factory address +- swap output below `minAmount` +- stale router/oracle or exchange configuration + +## Output contract + +- network and chain id +- factory address +- predicted and actual clone addresses +- tx hashes diff --git a/.agents/skills/gooddollar/references/guides/save.md b/.agents/skills/gooddollar/references/guides/save.md new file mode 100644 index 0000000..d0e716c --- /dev/null +++ b/.agents/skills/gooddollar/references/guides/save.md @@ -0,0 +1,93 @@ +# Save and stake guide + +Use when the user wants to stake G$, withdraw rewards, or exit stake. Staking economics sit alongside other protocol allocations described in [How GoodDollar works](https://docs.gooddollar.org/how-gooddollar-works). + +## GoodDocs alignment + +- Token integration and fee awareness: [How to integrate the G$ token](https://docs.gooddollar.org/for-developers/developer-guides/how-to-integrate-the-gusd-token) (`_processFees`, decimals per chain). +- Contract addresses: [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) only (for example staking and G$ token keys under `production` / `production-celo`). GoodDocs covers behavior and decimals patterns, not canonical deployment addresses. + +## Goal + +Run staking actions with balance and allowance safety checks. + +## Required inputs + +- `nameServiceAddress` or explicit staking and token addresses +- `amount` or `shares` depending on the action +- `rpcUrl`, chain configuration, signer + +## Execution flow + +1. Resolve staking and G$ token addresses from [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) or, when the deployment documents the key, from `NameService.getAddress` on chain. +2. Read token balance and allowance. +3. Approve the staking contract when `stake` uses `transferFrom`. +4. Execute `stake`, `withdrawRewards`, or `withdrawStake` as requested. +5. Return tx hash and key resulting balances or events. + +## Deterministic snippets + +```js +import { ethers } from "ethers"; + +const provider = new ethers.JsonRpcProvider(process.env.RPC_URL); +const signer = new ethers.Wallet(process.env.PRIVATE_KEY, provider); + +const token = new ethers.Contract( + process.env.GOODDOLLAR_ADDRESS, + [ + "function balanceOf(address) view returns (uint256)", + "function allowance(address,address) view returns (uint256)", + "function approve(address,uint256) returns (bool)", + ], + signer, +); + +const staking = new ethers.Contract( + process.env.STAKING_ADDRESS, + [ + "function stake(uint256)", + "function withdrawRewards()", + "function withdrawStake(uint256)", + ], + signer, +); +``` + +Stake: + +```js +const amount = ethers.parseUnits(process.env.AMOUNT, Number(process.env.DECIMALS)); +const owner = await signer.getAddress(); +const allowance = await token.allowance(owner, process.env.STAKING_ADDRESS); +if (allowance < amount) { + const approveTx = await token.approve(process.env.STAKING_ADDRESS, amount); + await approveTx.wait(); +} +const tx = await staking.stake(amount); +const receipt = await tx.wait(); +console.log(JSON.stringify({ txHash: receipt.hash, action: "stake" }, null, 2)); +``` + +Withdraw rewards: + +```js +const tx = await staking.withdrawRewards(); +const receipt = await tx.wait(); +console.log(JSON.stringify({ txHash: receipt.hash, action: "withdrawRewards" }, null, 2)); +``` + +Withdraw stake: + +```js +const shares = ethers.parseUnits(process.env.SHARES, Number(process.env.DECIMALS)); +const tx = await staking.withdrawStake(shares); +const receipt = await tx.wait(); +console.log(JSON.stringify({ txHash: receipt.hash, action: "withdrawStake" }, null, 2)); +``` + +## Failure handling + +- Insufficient balance: report shortfall. +- Approval issues: report token, spender, and required allowance. +- Reverts: return attempted function and parameters without guessing custom errors. diff --git a/.agents/skills/gooddollar/references/guides/stream.md b/.agents/skills/gooddollar/references/guides/stream.md new file mode 100644 index 0000000..6cbf7a4 --- /dev/null +++ b/.agents/skills/gooddollar/references/guides/stream.md @@ -0,0 +1,135 @@ +# Stream guide + +Primary references for stream execution are local ABI assets in this repo: + +- `references/contracts/CFAv1Forwarder.abi.yaml` +- `references/contracts/ConstantFlowAgreementV1.abi.yaml` +- `references/contracts/Superfluid.abi.yaml` +- `references/contracts/SuperToken.abi.yaml` + +## Goal + +Create, update, or delete Superfluid constant flows using deterministic contract calls and local ABI references. + +## Protocol facts used by this guide + +- Forwarder path uses `CFAv1Forwarder.createFlow`, `updateFlow`, `deleteFlow`. +- Host path uses `Superfluid.callAgreement` with CFA calldata for `createFlow`, `updateFlow`, `deleteFlow`. +- Stream token is a SuperToken; flow rates are `int96` in token-wei per second. +- `getBufferAmountByFlowrate(token, flowRate)` is the canonical pre-check for required buffer. + +## Two implementation styles in this repo + +1. **Forwarder (matches GoodDocs):** call CFAv1Forwarder with token, sender, receiver, flowRate, userData. +2. **Host callAgreement:** encode CFA `createFlow` / `updateFlow` / `deleteFlow` and call `Superfluid.callAgreement`. + +## Minimal method map + +- Forwarder: + - `createFlow(address token, address receiver, int96 flowrate, bytes userData)` + - `updateFlow(address token, address receiver, int96 flowrate, bytes userData)` + - `deleteFlow(address token, address sender, address receiver, bytes userData)` + - `getBufferAmountByFlowrate(address token, int96 flowrate)` +- Host: + - `callAgreement(address agreementClass, bytes callData, bytes userData)` +- CFA: + - `createFlow(address token, address receiver, int96 flowRate, bytes ctx)` + - `updateFlow(address token, address receiver, int96 flowRate, bytes ctx)` + - `deleteFlow(address token, address sender, address receiver, bytes ctx)` + +## Required inputs + +- G$ Super Token address for the environment +- CFA forwarder address, or Superfluid host address plus CFA agreement address +- `action`: create, update, delete +- `receiver`, `flowRate` where applicable +- `rpcUrl`, chain configuration, signer + +## Deterministic snippet + +```js +import { ethers } from "ethers"; + +const provider = new ethers.JsonRpcProvider(process.env.RPC_URL); +const signer = new ethers.Wallet(process.env.PRIVATE_KEY, provider); + +const forwarder = new ethers.Contract( + process.env.CFA_FORWARDER, + [ + "function createFlow(address,address,int96,bytes)", + "function updateFlow(address,address,int96,bytes)", + "function deleteFlow(address,address,address,bytes)", + ], + signer, +); + +const token = process.env.SUPER_TOKEN; +const sender = await signer.getAddress(); +const receiver = process.env.RECEIVER; +const flowRate = BigInt(process.env.FLOW_RATE); + +if (process.env.ACTION === "create") { + const tx = await forwarder.createFlow(token, receiver, flowRate, "0x"); + const receipt = await tx.wait(); + console.log(JSON.stringify({ txHash: receipt.hash, action: "create" }, null, 2)); +} + +if (process.env.ACTION === "update") { + const tx = await forwarder.updateFlow(token, receiver, flowRate, "0x"); + const receipt = await tx.wait(); + console.log(JSON.stringify({ txHash: receipt.hash, action: "update" }, null, 2)); +} + +if (process.env.ACTION === "delete") { + const tx = await forwarder.deleteFlow(token, sender, receiver, "0x"); + const receipt = await tx.wait(); + console.log(JSON.stringify({ txHash: receipt.hash, action: "delete" }, null, 2)); +} +``` + +Host callAgreement example: + +```js +import { ethers } from "ethers"; + +const provider = new ethers.JsonRpcProvider(process.env.RPC_URL); +const signer = new ethers.Wallet(process.env.PRIVATE_KEY, provider); + +const cfa = new ethers.Interface([ + "function createFlow(address,address,int96,bytes)", + "function updateFlow(address,address,int96,bytes)", + "function deleteFlow(address,address,address,bytes)", +]); + +const host = new ethers.Contract( + process.env.SUPERFLUID_HOST, + ["function callAgreement(address,bytes,bytes) returns (bytes)"], + signer, +); + +const token = process.env.SUPER_TOKEN; +const sender = await signer.getAddress(); +const receiver = process.env.RECEIVER; +const flowRate = BigInt(process.env.FLOW_RATE); + +let callData = "0x"; +if (process.env.ACTION === "create") { + callData = cfa.encodeFunctionData("createFlow", [token, receiver, flowRate, "0x"]); +} +if (process.env.ACTION === "update") { + callData = cfa.encodeFunctionData("updateFlow", [token, receiver, flowRate, "0x"]); +} +if (process.env.ACTION === "delete") { + callData = cfa.encodeFunctionData("deleteFlow", [token, sender, receiver, "0x"]); +} + +const tx = await host.callAgreement(process.env.CFA_ADDRESS, callData, "0x"); +const receipt = await tx.wait(); +console.log(JSON.stringify({ txHash: receipt.hash, action: process.env.ACTION }, null, 2)); +``` + +## Failure handling + +- Wrong network or missing addresses: stop and return missing host or forwarder or token addresses. +- Insufficient buffer: use `getBufferAmountByFlowrate` and reduce flow rate or top up balance. +- Revert on create or update: verify token is a SuperToken and flowRate is positive. diff --git a/.agents/skills/gooddollar/references/guides/swap.md b/.agents/skills/gooddollar/references/guides/swap.md new file mode 100644 index 0000000..3db8c2d --- /dev/null +++ b/.agents/skills/gooddollar/references/guides/swap.md @@ -0,0 +1,83 @@ +# Swap guide + +Use for buying or selling G$ through Mento-connected contracts on networks where they appear in [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) (for example `MentoBroker`, `MentoReserve`, `MentoExchangeProvider`, `MentoExpansionController` keys under `production-celo` or `production-xdc`). GoodDocs describes Mento product behavior, not deployment addresses. + +## GoodDocs alignment + +- Reserve and buy or sell mechanics at the protocol level: [How GoodDollar works](https://docs.gooddollar.org/how-gooddollar-works) and [Buy and Sell G$ user guide](https://docs.gooddollar.org/user-guides) (includes reserve AMM narrative; older explorer step-by-step for Ethereum testnets remains in that page for reference). +- Integration patterns and decimals: [How to integrate the G$ token](https://docs.gooddollar.org/for-developers/developer-guides/how-to-integrate-the-gusd-token). + +## Goal + +Execute bounded swaps using broker quotes and correct allowances. + +## Required inputs + +- `direction` as buy or sell +- broker and exchange identifiers for the deployment +- amounts in correct token decimals for the chain +- `rpcUrl`, chain configuration, signer + +## Execution flow + +1. Confirm Mento Broker (and related) addresses for the chain from [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) only. +2. Fetch quote (`getAmountOut` or `getAmountIn` depending on direction and ABI). +3. Apply slippage bounds. +4. Approve the spent token for the broker when required. +5. Call `swapIn` or `swapOut` per your integration. +6. Return tx hash and effective amounts. + +## Deterministic snippet + +```js +import { ethers } from "ethers"; + +const provider = new ethers.JsonRpcProvider(process.env.RPC_URL); +const signer = new ethers.Wallet(process.env.PRIVATE_KEY, provider); + +const broker = new ethers.Contract( + process.env.BROKER_ADDRESS, + [ + "function getAmountOut(address,address,uint256) view returns (uint256)", + "function swapIn(address,address,uint256,uint256) returns (uint256)", + ], + signer, +); + +const tokenIn = new ethers.Contract( + process.env.TOKEN_IN, + [ + "function allowance(address,address) view returns (uint256)", + "function approve(address,uint256) returns (bool)", + ], + signer, +); + +const amountIn = ethers.parseUnits(process.env.AMOUNT_IN, Number(process.env.DECIMALS_IN)); +const quotedOut = await broker.getAmountOut(process.env.TOKEN_IN, process.env.TOKEN_OUT, amountIn); +const slippageBps = BigInt(process.env.SLIPPAGE_BPS); +const minOut = quotedOut * (10000n - slippageBps) / 10000n; + +const owner = await signer.getAddress(); +const allowance = await tokenIn.allowance(owner, process.env.BROKER_ADDRESS); +if (allowance < amountIn) { + const approveTx = await tokenIn.approve(process.env.BROKER_ADDRESS, amountIn); + await approveTx.wait(); +} + +const tx = await broker.swapIn(process.env.TOKEN_IN, process.env.TOKEN_OUT, amountIn, minOut); +const receipt = await tx.wait(); +console.log( + JSON.stringify( + { txHash: receipt.hash, amountIn: amountIn.toString(), minOut: minOut.toString() }, + null, + 2, + ), +); +``` + +## Failure handling + +- No deployment on chain: direct the user to an environment that defines the needed keys in [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) (for example `production-celo` with `MentoBroker`). +- Stale quote or tight slippage: refresh quote or relax bounds with user consent. +- Allowance or balance shortfall: report exact delta. diff --git a/.agents/skills/gooddollar/references/subgraphs/_query-patterns.md b/.agents/skills/gooddollar/references/subgraphs/_query-patterns.md new file mode 100644 index 0000000..36af639 --- /dev/null +++ b/.agents/skills/gooddollar/references/subgraphs/_query-patterns.md @@ -0,0 +1,35 @@ +# Subgraph query discipline (GoodDollar) + +## Subgraph vs RPC + +- **Subgraph:** historical events, lists, aggregates, time ranges, analytics. Data lags chain head. +- **RPC / SDK:** current balances, live `claim` eligibility, exact view calls. Prefer for user-facing “what is true right now”. + +## Generic GraphQL mechanics + +Graph-node generates `entity`, `entities`, `Entity_filter`, `Entity_orderBy`, pagination, and `_meta` from each deployment’s `schema.graphql`. For scalar rules, filters, `_meta`, and common pitfalls, see [The Graph — Querying a subgraph](https://thegraph.com/docs/en/querying/graphql-api/). + +## GoodDollar-specific + +- **Addresses in `where` clauses:** normalize to **lowercase** hex strings; subgraphs store addresses lowercased. +- **BigInt fields:** query as **string** literals in GraphQL JSON (e.g. `"1000000000000000000"`). +- **Schema truth:** entity names differ per deployment. Run introspection or read the deployment’s `schema.graphql` under the relevant package in [GoodDollar/GoodSubGraphs](https://github.com/GoodDollar/GoodSubGraphs) before assuming field names. + +## Meta block + +Use `_meta { block { number } }` to detect how far behind indexing is when debugging stale data. + +```graphql +{ + _meta { + block { + number + } + hasIndexingErrors + } +} +``` + +## When subgraphs are not enough + +If the subgraph cannot answer the question (missing entities or fields, or stale indexing per `_meta`), switch to the decision rules in `references/guides/hypersync-hyperrpc.md`. When **HyperSync** is the best fit and no Envio API token is available in the environment, **ask the user directly** for `ENVIO_API_TOKEN` (or the token your HyperSync client expects) before running large scans; do not silently use anonymous quota as a stand-in. diff --git a/.agents/skills/gooddollar/references/subgraphs/goodcollective-guide.md b/.agents/skills/gooddollar/references/subgraphs/goodcollective-guide.md new file mode 100644 index 0000000..a266cea --- /dev/null +++ b/.agents/skills/gooddollar/references/subgraphs/goodcollective-guide.md @@ -0,0 +1,54 @@ +# GoodCollective — Subgraph Usage Guide + +Companion to `goodcollective.graphql`. + +## Endpoint + +- Explorer: [GoodCollective](https://thegraph.com/explorer/subgraphs/3LbJh9DXhJVvuVDdm5i6StNboJmL9oMNNkBaKyzc4Y8Y?view=Query&chain=arbitrum-one) +- Gateway form: `https://gateway.thegraph.com/api/subgraphs/id/3LbJh9DXhJVvuVDdm5i6StNboJmL9oMNNkBaKyzc4Y8Y` + +--- + +## Terminology: “claim” here is not daily UBI + +In this subgraph, **Claim** and **ClaimEvent** refer to **GoodCollective reward or pool claim flows**, not the protocol’s **daily UBI claim** from `UBIScheme` / `UBISchemeV2`. + +When a user says **“claim”** in normal GoodDollar product language, they almost always mean **claim daily UBI**. For that, use the GoodDollar Celo subgraph (`walletStats` / claim-related aggregates) and on-chain `claim` per `references/guides/claim.md` — do not answer “last N UBI claims” from GoodCollective **Claim** alone. + +--- + +## Entity Overview + +### Core collective graph + +**Collective** — pool identity, limits/settings links, totals, and claim/payment counters. +**Donor** / **Steward** — participant-level donation/support state. +**DonorCollective** / **StewardCollective** — join entities tying participants to a collective. + +### Claim and support flow + +**Claim** and **ClaimEvent** — GoodCollective **reward** claim lifecycle and per-claim reward events (not daily UBI from UBIScheme). +**SupportEvent** — support/donation change events across donor/collective links. + +### Metadata and policy entities + +**IpfsCollective** — IPFS metadata projection. +**PoolSettings**, **UBILimits**, **SafetyLimits** — pool policy and operational bounds. +**ProvableNFT** — NFT linkage used in claim/reward flows. + +--- + +## Typical Questions This Subgraph Answers + +- Which donors/stewards are attached to a collective? +- How much was donated/rewarded per collective and per participant? +- Which claim events occurred and what reward quantities were emitted? +- What limits and settings govern a specific collective pool? + +--- + +## Query Discipline + +- Use authenticated gateway access for programmatic queries. +- Lowercase address-like identifiers where applicable. +- Validate `_meta` before operational dashboards or reporting exports. diff --git a/.agents/skills/gooddollar/references/subgraphs/goodcollective.graphql b/.agents/skills/gooddollar/references/subgraphs/goodcollective.graphql new file mode 100644 index 0000000..e503db9 --- /dev/null +++ b/.agents/skills/gooddollar/references/subgraphs/goodcollective.graphql @@ -0,0 +1,200 @@ +scalar BigDecimal + +scalar BigInt + +scalar Boolean + +scalar Bytes + +type Claim { + id: String! + collective: Collective! + txHash: String! + networkFee: BigInt! + totalRewards: BigInt! + events: [ClaimEvent!]! + timestamp: Int! +} + +type ClaimEvent { + id: String! + eventType: Int! + timestamp: Int! + quantity: BigInt! + rewardPerContributor: BigInt! + contributors: [Steward!]! + nft: ProvableNFT + claim: Claim! +} + +type Collective { + id: String! + pooltype: PoolType! + ipfs: IpfsCollective + settings: PoolSettings! + ubiLimits: UBILimits + limits: SafetyLimits + donors: [DonorCollective!] + stewards: [StewardCollective!] + projectId: String! + isVerified: Boolean! + poolFactory: String! + timestamp: Int! + paymentsMade: Int! + totalDonations: BigInt! + totalRewards: BigInt! + claims: [Claim!]! +} + +type Donor { + id: String! + timestamp: Int! + totalDonated: BigInt! + collectives: [DonorCollective!]! +} + +""" +Represents the relationship between a Donor and a Collective + +""" + +type DonorCollective { + id: String! + donor: Donor! + collective: Collective! + contribution: BigInt! + flowRate: BigInt! + timestamp: Int! + events: [SupportEvent!]! +} + +scalar Float + +scalar ID + +""" +4 bytes signed integer + +""" + +scalar Int + +""" +8 bytes signed integer + +""" + +scalar Int8 + +type IpfsCollective { + id: String! + name: String! + description: String! + rewardDescription: String + goodidDescription: String + email: String + website: String + twitter: String + instagram: String + threads: String + infoLabel: String + headerImage: String! + logo: String! + images: [String!] +} + +type PoolSettings { + id: String! + nftType: BigInt! + manager: Bytes! + membersValidator: Bytes! + uniquenessValidator: Bytes! + rewardToken: Bytes! +} + +enum PoolType { + DirectPayments + UBI +} + +type ProvableNFT { + id: String! + owner: String! + hash: String! + stewards: [Steward!]! + collective: Collective +} + +type SafetyLimits { + id: String! + maxTotalPerMonth: BigInt! + maxMemberPerMonth: BigInt! + maxMemberPerDay: BigInt! +} + +type Steward { + """ + { user address} + + """ + id: String! + """ + Number of actions performed + + """ + actions: Int! + totalEarned: BigInt! + totalUBIEarned: BigInt! + """ + NFT's minted to steward + + """ + nfts: [ProvableNFT!]! + """ + Collectives the steward is apart of + + """ + collectives: [StewardCollective!]! +} + +""" +Represents the relationship between a Steward and a Collective + +""" + +type StewardCollective { + id: String! + steward: Steward! + collective: Collective! + actions: Int! + totalEarned: BigInt! +} + +scalar String + +type SupportEvent { + id: String! + networkFee: BigInt! + donor: Donor! + collective: Collective! + donorCollective: DonorCollective! + contribution: BigInt! + previousContribution: BigInt! + isFlowUpdate: Boolean! + flowRate: BigInt! + previousFlowRate: BigInt! + timestamp: Int! +} + +scalar Timestamp + +type UBILimits { + id: String! + cycleLengthDays: BigInt! + claimPeriodDays: BigInt! + minActiveUsers: BigInt! + claimForEnabled: Boolean! + maxClaimAmount: BigInt! + maxClaimers: BigInt! + onlyMembers: Boolean! +} diff --git a/.agents/skills/gooddollar/references/subgraphs/gooddollar-celo-guide.md b/.agents/skills/gooddollar/references/subgraphs/gooddollar-celo-guide.md new file mode 100644 index 0000000..347951f --- /dev/null +++ b/.agents/skills/gooddollar/references/subgraphs/gooddollar-celo-guide.md @@ -0,0 +1,104 @@ +# GoodDollar Celo — Subgraph Usage Guide + +Companion to `gooddollar-celo.graphql`. + +## Endpoint + +- Explorer: [GoodDollarCelo](https://thegraph.com/explorer/subgraphs/F7314rxGdcpKPC1nN5KCoFW84EGRoUyzseY2sAT9PEkw?view=Query&chain=arbitrum-one) +- Gateway form: `https://gateway.thegraph.com/api/subgraphs/id/F7314rxGdcpKPC1nN5KCoFW84EGRoUyzseY2sAT9PEkw` + +--- + +## Entity Overview + +### UBI and usage statistics + +**DailyUBI** — day-level UBI pool/quota activity and cycle fields. +**WalletStat** — wallet behavior aggregates: tx counts/values, claim stats, active/whitelist indicators. +**TransactionStat** — day-level transaction totals and circulation view. +**GlobalStatistics** — global claim and distribution rollups. + +### Additional UBI history entities + +**UBICollected** — collected UBI/community-pool values by block event. +**UBIHistory** — timeline totals for daily UBI/community-pool. + +--- + +## Field Availability Reference (use before drafting queries) + +Use this section to validate what the subgraph already provides before switching data sources. + +### DailyUBI + +- `id` — day index key (`unix / 86400`) +- `pool` — UBI cycle pool for that day +- `quota` — daily UBI amount per eligible claimer +- `activeUsers` — active users count in scheme context +- `totalUBIDistributed` — amount actually claimed/distributed that day +- `totalClaims` — claim tx count for that day +- `newClaimers` — newly whitelisted users for that day +- `timestamp` — last update timestamp for the record +- `ubiSchemeAddress` — UBIScheme address used for the record +- `balance` — G$ balance held by UBIScheme +- `cycleLength` — current cycle length +- `dayInCycle` — current day position inside cycle + +### WalletStat + +- `id` — wallet address +- `dateAppeared` — first indexed wallet activity timestamp +- `balance` — running token balance from transfers +- `inTransactionsCount`, `inTransactionsValue` — incoming tx count and value +- `outTransactionsCount`, `outTransactionsValue` — outgoing tx count and value +- `totalTransactionsCount`, `totalTransactionsValue` — total tx count and value +- `inTransactionsCountClean`, `inTransactionsValueClean` — incoming metrics excluding contract-address flows +- `outTransactionsCountClean`, `outTransactionsValueClean` — outgoing metrics excluding contract-address flows +- `totalTransactionsCountClean`, `totalTransactionsValueClean` — total clean traffic metrics +- `lastClaimed` — timestamp of latest UBI claim +- `totalClaimedCount`, `totalClaimedValue` — total claims and cumulative claimed value +- `claimStreak`, `longestClaimStreak` — current and best historical streaks +- `isWhitelisted` — current whitelist status +- `isActiveUser` — current active-user status +- `dateJoined` — first-whitelist timestamp +- `lastTransactionFrom`, `lastTransactionTo` — latest outgoing and incoming tx timestamps + +### TransactionStat + +- `id` — bucket key (day key or `"aggregated"`) +- `dayStartBlockNumber` — first block in bucket +- `transactionsCount`, `transactionsValue` — all transfer tx count and value +- `transactionsCountClean`, `transactionsValueClean` — transfer metrics excluding contract-address flows +- `totalInCirculation` — inferred circulating supply from mint or burn behavior + +### GlobalStatistics + +- `id` — fixed key (`"statistics"`) +- `TransactionStat` — link to aggregated transaction stats +- `totalUBIDistributed` — lifetime distributed UBI +- `uniqueClaimers` — tracked unique claimers via whitelist add or remove +- `totalClaims` — lifetime UBI claim events + +### Explorer naming + +- Singular names (`dailyUBI`, `walletStat`) fetch by `id` +- Plural names (`dailyUBIs`, `walletStats`) query lists with filters and pagination + +--- + +## Typical Questions This Subgraph Answers + +- How much UBI was distributed on a day/cycle? +- Which wallets are active or recently claiming? +- What are aggregate tx/circulation trends? +- How did collected UBI/community-pool values evolve over time? + +--- + +## Query Discipline + +- Use lowercase address strings in filters. +- Use string-safe handling for large integer values. +- Use `_meta` to validate freshness before cross-day analytics. +- Use authenticated gateway access for programmatic queries. +- Before claiming a field or entity is missing, verify availability from this guide and schema first. diff --git a/.agents/skills/gooddollar/references/subgraphs/gooddollar-celo.graphql b/.agents/skills/gooddollar/references/subgraphs/gooddollar-celo.graphql new file mode 100644 index 0000000..e544a0d --- /dev/null +++ b/.agents/skills/gooddollar/references/subgraphs/gooddollar-celo.graphql @@ -0,0 +1,113 @@ +scalar BigDecimal + +scalar BigInt + +scalar Boolean + +scalar Bytes + +type DailyUBI { + id: ID! + pool: BigInt! + quota: BigInt! + activeUsers: BigInt! + totalUBIDistributed: BigInt! + totalClaims: BigInt! + newClaimers: BigInt! + timestamp: BigInt! + ubiSchemeAddress: Bytes + balance: BigInt! + cycleLength: BigInt! + dayInCycle: BigInt! +} + +scalar Float + +type GlobalStatistics { + id: ID! + TransactionStat: TransactionStat + totalUBIDistributed: BigInt! + uniqueClaimers: BigInt! + totalClaims: BigInt! +} + +scalar ID + +""" +4 bytes signed integer +""" + +scalar Int + +""" +8 bytes signed integer +""" + +scalar Int8 + +""" +Defines the order direction, either ascending or descending +""" + +scalar String + +""" +A string representation of microseconds UNIX timestamp (16 digits) +""" + +scalar Timestamp + +type TransactionStat { + id: ID! + dayStartBlockNumber: BigInt! + transactionsCount: BigInt! + transactionsCountClean: BigInt! + transactionsValue: BigInt! + transactionsValueClean: BigInt! + totalInCirculation: BigInt! +} + +type UBICollected { + id: ID! + contract: Bytes + block: BigInt! + blockTimestamp: BigInt! + ubi: BigDecimal! + communityPool: BigDecimal! +} + +type UBIHistory { + id: ID! + block: BigInt! + blockTimestamp: BigInt! + totalDailyUBI: BigDecimal! + totalDailyCommunityPool: BigDecimal! +} + +type WalletStat { + id: ID! + dateAppeared: BigInt! + balance: BigInt! + inTransactionsCount: BigInt! + inTransactionsCountClean: BigInt! + inTransactionsValue: BigInt! + inTransactionsValueClean: BigInt! + outTransactionsCount: BigInt! + outTransactionsCountClean: BigInt! + outTransactionsValue: BigInt! + outTransactionsValueClean: BigInt! + totalTransactionsCount: BigInt! + totalTransactionsCountClean: BigInt! + totalTransactionsValue: BigInt! + totalTransactionsValueClean: BigInt! + lastClaimed: BigInt! + totalClaimedCount: BigInt! + totalClaimedValue: BigInt! + claimStreak: BigInt! + longestClaimStreak: BigInt! + isWhitelisted: Boolean! + isActiveUser: Boolean! + dateJoined: BigInt! + lastTransactionFrom: BigInt! + lastTransactionTo: BigInt! +} diff --git a/.agents/skills/gooddollar/references/subgraphs/reserve-celo-guide.md b/.agents/skills/gooddollar/references/subgraphs/reserve-celo-guide.md new file mode 100644 index 0000000..9f55b73 --- /dev/null +++ b/.agents/skills/gooddollar/references/subgraphs/reserve-celo-guide.md @@ -0,0 +1,41 @@ +# Reserve Celo — Subgraph Usage Guide + +Companion to `reserve-celo.graphql`. This guide is for reserve pricing and broker swap indexing on Celo. + +## Endpoint + +- Goldsky: `https://api.goldsky.com/api/public/project_cmizuamdtfouu01x4csuk5dk1/subgraphs/reserve_celo/1.0/gn` + +--- + +## Entity Overview + +### Core entity + +**ReservePrice** — one indexed reserve pricing point produced from broker swap flow plus exchange-provider price read. +Key fields: `exchangeId`, `exchangeProvider`, `price`, `timestamp`, `day`, `tokenIn`, `tokenOut`, `amountIn`, `amountOut`, `user`, `blockNumber`, `transactionHash`. + +--- + +## Typical Questions This Subgraph Answers + +- What are the most recent reserve prices? +- What was the reserve price on a specific day window? +- Which token pair and user triggered a pricing point? +- Which tx hash/block produced a given price point? + +--- + +## Query Discipline + +- Lowercase all address values in filters. +- Use string values for large integer variables. +- Use `_meta` before analytics queries when stale indexing is suspected. + +--- + +## Practical Start + +1. Check `_meta` block height and `hasIndexingErrors`. +2. Pull latest `ReservePrice` records sorted by `timestamp desc`. +3. Add `day`-based narrowing for historical windows. diff --git a/.agents/skills/gooddollar/references/subgraphs/reserve-celo.graphql b/.agents/skills/gooddollar/references/subgraphs/reserve-celo.graphql new file mode 100644 index 0000000..56cac37 --- /dev/null +++ b/.agents/skills/gooddollar/references/subgraphs/reserve-celo.graphql @@ -0,0 +1,90 @@ +scalar BigDecimal + +scalar BigInt + +scalar Boolean + +scalar Bytes + +scalar Float + +scalar ID + +""" +4 bytes signed integer +""" + +scalar Int + +""" +8 bytes signed integer +""" + +scalar Int8 + +""" +Defines the order direction, either ascending or descending +""" + +type ReservePrice { + """ + Exchange ID combined with timestamp + """ + id: ID! + """ + The exchange ID from the Swap event + """ + exchangeId: Bytes! + """ + The exchange provider address + """ + exchangeProvider: Bytes! + """ + The current price from IBancorExchangeProvider.currentPrice() + """ + price: BigInt! + """ + Transaction timestamp + """ + timestamp: BigInt! + """ + Day ID (timestamp / 86400) + """ + day: BigInt! + """ + Token in address from the swap + """ + tokenIn: Bytes! + """ + Token out address from the swap + """ + tokenOut: Bytes! + """ + Amount in from the swap + """ + amountIn: BigInt! + """ + Amount out from the swap + """ + amountOut: BigInt! + """ + User who initiated the swap + """ + user: Bytes! + """ + Block number + """ + blockNumber: BigInt! + """ + Transaction hash + """ + transactionHash: Bytes! +} + +scalar String + +""" +A string representation of microseconds UNIX timestamp (16 digits) +""" + +scalar Timestamp diff --git a/skills-lock.json b/skills-lock.json new file mode 100644 index 0000000..9b92c72 --- /dev/null +++ b/skills-lock.json @@ -0,0 +1,11 @@ +{ + "version": 1, + "skills": { + "gooddollar": { + "source": "GoodDollar/GoodSkills", + "sourceType": "github", + "skillPath": "skills/gooddollar/SKILL.md", + "computedHash": "d5f8cc5079f386e7170925e61214fb3334176aa6d0fc6bdc50400e535692b377" + } + } +} From 8c7decd51f0cdfd0418910c43525e090a5554223 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 16 Jun 2026 14:07:59 +0000 Subject: [PATCH 05/13] feat: add governance onboarding ui flow --- examples/storybook/package.json | 1 + .../GovernanceWidget.stories.tsx | 272 ++++++ packages/governance-widget/package.json | 45 + .../src/GovernanceOnboardingWidget.tsx | 870 ++++++++++++++++++ packages/governance-widget/src/index.ts | 11 + packages/governance-widget/src/types.ts | 48 + .../governance-widget/tsconfig.build.json | 8 + packages/governance-widget/tsconfig.json | 12 + packages/governance-widget/tsup.config.ts | 13 + packages/ui/src/components/PageWizard.tsx | 232 +++++ packages/ui/src/components/Stepper.tsx | 329 +++++++ packages/ui/src/index.ts | 8 + pnpm-lock.yaml | 37 + .../widgets/governance-widget/states.spec.ts | 141 +++ .../test-results/gwo-01-welcome-verified.png | Bin 0 -> 79330 bytes .../test-results/gwo-02-house-selection.png | Bin 0 -> 100572 bytes .../test-results/gwo-03-profile-alignment.png | Bin 0 -> 143611 bytes .../gwo-04-stake-progress-active.png | Bin 0 -> 109083 bytes .../test-results/gwo-05-success.png | Bin 0 -> 74296 bytes .../gwo-06-welcome-unverified.png | Bin 0 -> 85297 bytes .../gwo-07-house-selection-standalone.png | Bin 0 -> 103559 bytes .../gwo-08-profile-citizenship-ready.png | Bin 0 -> 113974 bytes .../gwo-09-profile-alignment-error.png | Bin 0 -> 139282 bytes .../gwo-10-stake-progress-failed.png | Bin 0 -> 98638 bytes .../gwo-11-success-standalone.png | Bin 0 -> 74296 bytes 25 files changed, 2027 insertions(+) create mode 100644 examples/storybook/src/stories/governance-widget/GovernanceWidget.stories.tsx create mode 100644 packages/governance-widget/package.json create mode 100644 packages/governance-widget/src/GovernanceOnboardingWidget.tsx create mode 100644 packages/governance-widget/src/index.ts create mode 100644 packages/governance-widget/src/types.ts create mode 100644 packages/governance-widget/tsconfig.build.json create mode 100644 packages/governance-widget/tsconfig.json create mode 100644 packages/governance-widget/tsup.config.ts create mode 100644 packages/ui/src/components/PageWizard.tsx create mode 100644 packages/ui/src/components/Stepper.tsx create mode 100644 tests/widgets/governance-widget/states.spec.ts create mode 100644 tests/widgets/governance-widget/test-results/gwo-01-welcome-verified.png create mode 100644 tests/widgets/governance-widget/test-results/gwo-02-house-selection.png create mode 100644 tests/widgets/governance-widget/test-results/gwo-03-profile-alignment.png create mode 100644 tests/widgets/governance-widget/test-results/gwo-04-stake-progress-active.png create mode 100644 tests/widgets/governance-widget/test-results/gwo-05-success.png create mode 100644 tests/widgets/governance-widget/test-results/gwo-06-welcome-unverified.png create mode 100644 tests/widgets/governance-widget/test-results/gwo-07-house-selection-standalone.png create mode 100644 tests/widgets/governance-widget/test-results/gwo-08-profile-citizenship-ready.png create mode 100644 tests/widgets/governance-widget/test-results/gwo-09-profile-alignment-error.png create mode 100644 tests/widgets/governance-widget/test-results/gwo-10-stake-progress-failed.png create mode 100644 tests/widgets/governance-widget/test-results/gwo-11-success-standalone.png diff --git a/examples/storybook/package.json b/examples/storybook/package.json index 25373c9..dc1e8b8 100644 --- a/examples/storybook/package.json +++ b/examples/storybook/package.json @@ -13,6 +13,7 @@ "@goodwidget/ui": "workspace:*", "@goodwidget/claim-widget-theme-demo": "workspace:*", "@goodwidget/citizen-claim-widget": "workspace:*", + "@goodwidget/governance-widget": "workspace:*", "react": "^18.3.0", "react-dom": "^18.3.0", "react-native-web": "^0.19.13", diff --git a/examples/storybook/src/stories/governance-widget/GovernanceWidget.stories.tsx b/examples/storybook/src/stories/governance-widget/GovernanceWidget.stories.tsx new file mode 100644 index 0000000..b1dc12d --- /dev/null +++ b/examples/storybook/src/stories/governance-widget/GovernanceWidget.stories.tsx @@ -0,0 +1,272 @@ +import React from 'react' +import type { Meta, StoryObj } from '@storybook/react' +import { Card, Text, YStack } from '@goodwidget/ui' +import { + GovernanceOnboardingWidget, + type GovernanceOnboardingWidgetProps, +} from '@goodwidget/governance-widget' +import { + getInjectedEip1193Provider, + isInjectedProviderUsable, +} from '../../fixtures/injectedEip1193' +import { createCustodialEip1193Provider } from '../../fixtures/custodialEip1193' + +const meta: Meta = { + title: 'Widgets/GovernanceWidget', + component: GovernanceOnboardingWidget, + tags: ['autodocs'], + parameters: { + layout: 'centered', + goodWidgetProvider: { useShell: false, defaultTheme: 'light' }, + }, +} + +export default meta +type Story = StoryObj + +const failedTransactionSteps = [ + { + id: 'prepare', + title: 'Prepare wallet balance', + status: 'completed', + }, + { + id: 'approve', + title: 'Approve governance stake', + status: 'completed', + }, + { + id: 'stake', + title: 'Lock the membership stake', + description: 'The previous transaction failed and needs a retry from the wallet.', + status: 'failed', + }, + { + id: 'finalize', + title: 'Finalize governance access', + status: 'pending', + }, +] as const + +function GovernanceStoryFrame({ + walletLabel, + children, + dataTestId, +}: { + walletLabel: string + children: React.ReactNode + dataTestId: string +}) { + return ( + + + + {walletLabel} + + + {children} + + ) +} + +function InjectedGovernanceStory({ + walletLabel, + storyProps, + dataTestId, +}: { + walletLabel: string + storyProps: GovernanceOnboardingWidgetProps + dataTestId: string +}) { + const injectedProvider = getInjectedEip1193Provider() + const usableProvider = isInjectedProviderUsable(injectedProvider) + + if (!usableProvider) { + return ( + + + No injected wallet found + + Install or enable an injected EIP-1193 wallet in this browser, then refresh Storybook. + + + + ) + } + + return ( + + + + ) +} + +function CustodialGovernanceStory({ + walletLabel, + storyProps, + dataTestId, +}: { + walletLabel: string + storyProps: GovernanceOnboardingWidgetProps + dataTestId: string +}) { + try { + createCustodialEip1193Provider() + + return ( + + + + ) + } catch (error: unknown) { + return ( + + + Custodial fixture not configured + + {error instanceof Error ? error.message : 'Set a local private key in custodialEip1193.ts'} + + + + ) + } +} + +export const InjectedWelcomeUnverified: Story = { + render: () => ( + + ), +} + +export const CustodialInteractiveFlow: Story = { + render: () => ( + + ), +} + +export const CustodialWelcomeUnverified: Story = { + render: () => ( + + ), +} + +export const CustodialHouseSelection: Story = { + render: () => ( + + ), +} + +export const CustodialCitizenshipProfileReady: Story = { + render: () => ( + + ), +} + +export const CustodialAlignmentProfileError: Story = { + parameters: { + goodWidgetProvider: { useShell: false, defaultTheme: 'dark' }, + }, + render: () => ( + + ), +} + +export const CustodialStakeProgress: Story = { + parameters: { + goodWidgetProvider: { useShell: false, defaultTheme: 'dark' }, + }, + render: () => ( + + ), +} + +export const CustodialSuccess: Story = { + render: () => ( + + ), +} diff --git a/packages/governance-widget/package.json b/packages/governance-widget/package.json new file mode 100644 index 0000000..8a31494 --- /dev/null +++ b/packages/governance-widget/package.json @@ -0,0 +1,45 @@ +{ + "name": "@goodwidget/governance-widget", + "version": "0.1.0", + "description": "Presentational governance onboarding flow components for GoodWidget", + "type": "module", + "main": "./dist/index.cjs", + "module": "./dist/index.js", + "types": "./dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "require": "./dist/index.cjs" + } + }, + "scripts": { + "build": "tsup", + "dev": "tsup --watch", + "lint": "eslint src/", + "clean": "rm -rf dist .turbo" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0", + "react-native": ">=0.76.0" + }, + "peerDependenciesMeta": { + "react-native": { + "optional": true + } + }, + "dependencies": { + "@goodwidget/ui": "workspace:*", + "tamagui": "1.121.0" + }, + "devDependencies": { + "@types/react": "^18.3.0", + "@types/react-dom": "^18.3.0", + "react": "^18.3.0", + "react-dom": "^18.3.0", + "react-native-web": "^0.19.13", + "tsup": "^8.4.0", + "typescript": "^5.7.0" + } +} diff --git a/packages/governance-widget/src/GovernanceOnboardingWidget.tsx b/packages/governance-widget/src/GovernanceOnboardingWidget.tsx new file mode 100644 index 0000000..27cdb78 --- /dev/null +++ b/packages/governance-widget/src/GovernanceOnboardingWidget.tsx @@ -0,0 +1,870 @@ +import React, { useMemo, useState } from 'react' +import { Stack, styled } from 'tamagui' +import { + Badge, + BadgeText, + Button, + ButtonText, + Card, + createComponent, + Heading, + Icon, + InputError, + InputFrame, + InputLabel, + PageWizardProvider, + PageWizardShell, + Stepper, + Text, + XStack, + YStack, + usePageWizard, + type PageWizardStep, + type StepperStepItem, +} from '@goodwidget/ui' +import type { + GovernanceHouse, + GovernanceIdentityStatus, + GovernanceOnboardingAction, + GovernanceOnboardingStepId, + GovernanceOnboardingWidgetProps, + GovernanceProfileDraft, + GovernanceProfileFieldErrors, + GovernanceProfileFieldKey, +} from './types' + +const ONBOARDING_STEPS: PageWizardStep[] = [ + { id: 'welcome', title: 'Welcome' }, + { id: 'house', title: 'House' }, + { id: 'profile', title: 'Profile' }, + { id: 'stake', title: 'Stake' }, + { id: 'success', title: 'Complete' }, +] + +const REQUIRED_PROFILE_FIELDS: Record = { + citizenship: ['name', 'socialLinks'], + alignment: ['name', 'projectWebpage', 'missionStatement', 'distributionStrategy'], +} + +const DEFAULT_TRANSACTION_STEPS: StepperStepItem[] = [ + { + id: 'prepare', + title: 'Prepare wallet balance', + description: 'Keep the required G$ amount available before the staking transaction starts.', + status: 'completed', + }, + { + id: 'approve', + title: 'Approve governance stake', + description: 'Waiting for the wallet confirmation that authorizes the G$ stake amount.', + status: 'active', + }, + { + id: 'stake', + title: 'Lock the membership stake', + status: 'pending', + }, + { + id: 'finalize', + title: 'Finalize governance access', + status: 'pending', + }, +] + +const DEFAULT_FINAL_ACTIONS: GovernanceOnboardingAction[] = [ + { id: 'dashboard', label: 'Open governance dashboard', variant: 'primary' }, + { id: 'members', label: 'View member guide', variant: 'secondary' }, +] + +const HOUSE_COPY: Record< + GovernanceHouse, + { + title: string + summary: string + helper: string + } +> = { + citizenship: { + title: 'House of Citizenship', + summary: 'Represent verified community members and highlight your public governance identity.', + helper: 'Collect the profile details that describe the member behind the wallet.', + }, + alignment: { + title: 'House of Alignment', + summary: 'Coordinate aligned projects and explain how your mission creates value for the network.', + helper: 'Collect project-facing metadata that can later map to the onchain registration shape.', + }, +} + +const HouseOptionButton = createComponent(Stack, { + name: 'GovernanceHouseOptionButton', + tag: 'button', + alignItems: 'flex-start', + justifyContent: 'flex-start', + width: '100%', + borderRadius: '$4', + borderWidth: 1, + borderColor: '$borderColor', + backgroundColor: '$background', + padding: '$4', + gap: '$3', + cursor: 'pointer', + hoverStyle: { + borderColor: '$borderColorFocus', + backgroundColor: '$backgroundHover', + }, + pressStyle: { + borderColor: '$borderColorFocus', + backgroundColor: '$backgroundPress', + }, + variants: { + selected: { + true: { + borderColor: '$borderColorFocus', + backgroundColor: '$backgroundHover', + }, + }, + disabled: { + true: { + opacity: 0.5, + cursor: 'not-allowed', + pointerEvents: 'none', + }, + }, + } as const, +}) + +const ProfileTextArea = createComponent(Stack, { + name: 'GovernanceOnboardingTextArea', + tag: 'textarea', + backgroundColor: '$background', + borderRadius: '$2', + borderWidth: 1, + borderColor: '$borderColor', + paddingHorizontal: '$3', + paddingVertical: '$3', + minHeight: 112, + color: '$color', + fontFamily: '$body', + fontSize: '$3', + lineHeight: '$4', + outlineWidth: 0, + resize: 'vertical' as const, + hoverStyle: { + borderColor: '$borderColorHover', + }, + focusStyle: { + borderColor: '$borderColorFocus', + shadowColor: '$shadowColorFocus', + shadowRadius: 4, + shadowOpacity: 1, + }, + variants: { + error: { + true: { + borderColor: '$error', + }, + }, + } as const, +}) + +const SuccessGlyph = styled(YStack, { + name: 'GovernanceOnboardingSuccessGlyph', + width: 64, + height: 64, + borderRadius: '$full', + alignItems: 'center', + justifyContent: 'center', + backgroundColor: '$successMuted', +}) + +interface GovernanceWizardData extends Record { + selectedHouse?: GovernanceHouse + profileDraft: GovernanceProfileDraft +} + +function createRequiredFieldLabel(fieldKey: GovernanceProfileFieldKey): string { + switch (fieldKey) { + case 'name': + return 'Name is required' + case 'socialLinks': + return 'Social links are required' + case 'projectWebpage': + return 'Project webpage is required' + case 'missionStatement': + return 'Mission statement is required' + case 'distributionStrategy': + return 'Distribution strategy is required' + default: + return 'This field is required' + } +} + +function validateProfileDraft( + selectedHouse: GovernanceHouse, + profileDraft: GovernanceProfileDraft, +): GovernanceProfileFieldErrors { + return REQUIRED_PROFILE_FIELDS[selectedHouse].reduce((errors, fieldKey) => { + const fieldValue = profileDraft[fieldKey]?.trim() + if (!fieldValue) { + errors[fieldKey] = createRequiredFieldLabel(fieldKey) + } + return errors + }, {}) +} + +function isProfileDraftComplete( + selectedHouse: GovernanceHouse, + profileDraft: GovernanceProfileDraft, + fieldErrors: GovernanceProfileFieldErrors, +): boolean { + const validationErrors = validateProfileDraft(selectedHouse, profileDraft) + return Object.keys(validationErrors).length === 0 && Object.keys(fieldErrors).length === 0 +} + +function resolveStakeSummary(transactionSteps: StepperStepItem[]): { + title: string + badgeType: 'info' | 'warning' | 'success' + description: string +} { + const failedStep = transactionSteps.find((step) => step.status === 'failed' || step.status === 'attention') + if (failedStep) { + return { + title: 'Action required', + badgeType: 'warning', + description: failedStep.description ?? 'A stake transaction needs attention before governance onboarding can finish.', + } + } + + const activeStep = transactionSteps.find((step) => step.status === 'active') + if (activeStep) { + return { + title: 'Transaction in progress', + badgeType: 'info', + description: activeStep.description ?? 'The next governance transaction is currently waiting for confirmation.', + } + } + + return { + title: 'Stake confirmed', + badgeType: 'success', + description: 'All presentational transaction states are completed and the member can move to the final success state.', + } +} + +function renderButtonLabel(label: string) { + return {label} +} + +function OnboardingNotice({ + badgeLabel, + badgeType, + title, + description, + iconName, +}: { + badgeLabel: string + badgeType: 'info' | 'warning' | 'success' + title: string + description: string + iconName: 'info' | 'check' | 'alert-triangle' +}) { + return ( + + + + + + + + {badgeLabel} + + + {title} + {description} + + + + + ) +} + +function HouseSelectionCard({ + house, + isSelected, + isDisabled, + onPress, +}: { + house: GovernanceHouse + isSelected: boolean + isDisabled: boolean + onPress: () => void +}) { + const houseCopy = HOUSE_COPY[house] + + return ( + + + + {isSelected ? 'Selected' : 'Choose house'} + + + + + {houseCopy.title} + {houseCopy.summary} + + {houseCopy.helper} + + ) +} + +function ProfileField({ + label, + placeholder, + value, + helperText, + errorMessage, + onChangeText, +}: { + label: string + placeholder: string + value?: string + helperText?: string + errorMessage?: string + onChangeText: (nextValue: string) => void +}) { + return ( + + {label} + ) => { + onChangeText(event.currentTarget.value) + }} + /> + {errorMessage ? {errorMessage} : null} + {helperText ? {helperText} : null} + + ) +} + +function ProfileTextAreaField({ + label, + placeholder, + value, + helperText, + errorMessage, + onChangeText, +}: { + label: string + placeholder: string + value?: string + helperText?: string + errorMessage?: string + onChangeText: (nextValue: string) => void +}) { + return ( + + {label} + ) => { + onChangeText(event.currentTarget.value) + }} + /> + {helperText ? {helperText} : null} + {errorMessage ? {errorMessage} : null} + + ) +} + +function WelcomeStepContent({ + identityStatus, +}: { + identityStatus: GovernanceIdentityStatus +}) { + const isVerified = identityStatus === 'verified' + + return ( + + + + This onboarding flow stays UI-only for now, so it mirrors the future governance membership journey without sending any transactions. + + + + + ) +} + +function HouseStepContent({ + selectedHouse, + disabledHouseOptions, + onHouseSelect, +}: { + selectedHouse?: GovernanceHouse + disabledHouseOptions: GovernanceHouse[] + onHouseSelect: (nextHouse: GovernanceHouse) => void +}) { + return ( + + + + Select the governance house that should receive your onboarding profile and stake commitment. + + + onHouseSelect('citizenship')} + /> + onHouseSelect('alignment')} + /> + + + + ) +} + +function ProfileStepContent({ + selectedHouse, + profileDraft, + fieldErrors, + stakeAmountLabel, + onProfileFieldChange, +}: { + selectedHouse: GovernanceHouse + profileDraft: GovernanceProfileDraft + fieldErrors: GovernanceProfileFieldErrors + stakeAmountLabel: string + onProfileFieldChange: (fieldKey: GovernanceProfileFieldKey, nextValue: string) => void +}) { + const isReadyToContinue = isProfileDraftComplete(selectedHouse, profileDraft, fieldErrors) + const isPristine = Object.values(profileDraft).every((fieldValue) => !fieldValue) + const statusBadgeLabel = isReadyToContinue + ? 'Ready to continue' + : Object.keys(fieldErrors).length > 0 + ? 'Validation needed' + : isPristine + ? 'Profile empty' + : 'Editing profile' + + return ( + + + + 0 ? 'warning' : 'info'}> + {statusBadgeLabel} + + + {stakeAmountLabel} stake required + + + + + {HOUSE_COPY[selectedHouse].title} profile + {HOUSE_COPY[selectedHouse].helper} + + + + + + onProfileFieldChange('name', nextValue)} + /> + + {selectedHouse === 'citizenship' ? ( + onProfileFieldChange('socialLinks', nextValue)} + /> + ) : ( + <> + onProfileFieldChange('projectWebpage', nextValue)} + /> + onProfileFieldChange('missionStatement', nextValue)} + /> + onProfileFieldChange('distributionStrategy', nextValue)} + /> + + )} + + + + ) +} + +function StakeStepContent({ + stakeAmountLabel, + transactionSteps, +}: { + stakeAmountLabel: string + transactionSteps: StepperStepItem[] +}) { + const stakeSummary = resolveStakeSummary(transactionSteps) + + return ( + + + + + {stakeAmountLabel} locked stake + + + {stakeSummary.title} + + + + + This screen stays presentational today, but the step statuses already match the future runtime states for pending, active, completed, and failed stake transitions. + + + + Stake progress tracker + {stakeSummary.description} + + } + maxHeight={320} + /> + + + ) +} + +function SuccessStepContent({ + finalActions, + onFinalActionPress, +}: { + finalActions: GovernanceOnboardingAction[] + onFinalActionPress?: (actionId: string) => void +}) { + return ( + + + + + + + + Governance onboarding complete + + The final success state keeps the celebratory confirmation compact while still leaving room for one or more post-onboarding redirects. + + + + {finalActions.map((action) => ( + + ))} + + + + + ) +} + +function GovernanceOnboardingFlow({ + identityStatus, + disabledHouseOptions, + initialFieldErrors, + stakeAmountLabel, + transactionSteps, + finalActions, + onVerifyIdentity, + onFinalActionPress, + dataTestId, +}: { + identityStatus: GovernanceIdentityStatus + disabledHouseOptions: GovernanceHouse[] + initialFieldErrors: GovernanceProfileFieldErrors + stakeAmountLabel: string + transactionSteps: StepperStepItem[] + finalActions: GovernanceOnboardingAction[] + onVerifyIdentity?: () => void + onFinalActionPress?: (actionId: string) => void + dataTestId?: string +}) { + const { currentStep, data, setData, next, back, isFirst, currentIndex } = usePageWizard() + const [fieldErrors, setFieldErrors] = useState(initialFieldErrors) + + const wizardData = data as GovernanceWizardData + const selectedHouse = wizardData.selectedHouse + const profileDraft = wizardData.profileDraft ?? {} + const resolvedHouse = selectedHouse ?? 'citizenship' + const isIdentityVerified = identityStatus === 'verified' + const isProfileReady = isProfileDraftComplete(resolvedHouse, profileDraft, fieldErrors) + + const updateProfileField = (fieldKey: GovernanceProfileFieldKey, nextValue: string) => { + setData({ + profileDraft: { + ...profileDraft, + [fieldKey]: nextValue, + }, + }) + + setFieldErrors((previousErrors) => { + const nextErrors = { ...previousErrors } + delete nextErrors[fieldKey] + return nextErrors + }) + } + + const handleProfileContinue = () => { + const nextFieldErrors = validateProfileDraft(resolvedHouse, profileDraft) + setFieldErrors(nextFieldErrors) + + if (Object.keys(nextFieldErrors).length === 0) { + next() + } + } + + const handleHouseSelect = (nextHouse: GovernanceHouse) => { + setData({ selectedHouse: nextHouse }) + } + + let shellTitle = 'Governance onboarding' + let shellDescription = 'Move through the five-step UI flow before the runtime integration is wired.' + let shellContent: React.ReactNode = null + let shellFooter: React.ReactNode = null + + switch (currentStep?.id as GovernanceOnboardingStepId | undefined) { + case 'welcome': + default: + shellTitle = 'Join GoodDollar governance' + shellDescription = 'Start with identity status, then move through house selection, profile setup, staking progress, and success.' + shellContent = + shellFooter = ( + + + + + ) + break + + case 'house': + shellTitle = 'Select your governance house' + shellDescription = 'Choose the house that should own the profile and membership stake shown in later steps.' + shellContent = ( + + ) + shellFooter = ( + + + + + ) + break + + case 'profile': + shellTitle = `Complete the ${HOUSE_COPY[resolvedHouse].title} profile` + shellDescription = 'Keep the form readable in light and dark themes while collecting the stake-aware metadata required by the selected house.' + shellContent = ( + + ) + shellFooter = ( + + + + + ) + break + + case 'stake': + shellTitle = 'Track the membership stake journey' + shellDescription = 'Present the transaction tracker so a future runtime can drive its step statuses without changing the screen structure.' + shellContent = ( + + ) + shellFooter = ( + + + + + ) + break + + case 'success': + shellTitle = 'Membership onboarding completed' + shellDescription = 'Leave the screen ready for one or more redirect actions after a successful governance onboarding flow.' + shellContent = ( + + ) + shellFooter = ( + + Step {currentIndex + 1} of {ONBOARDING_STEPS.length} + + ) + break + } + + return ( + + {shellContent} + + ) +} + +/** + * GovernanceOnboardingWidget keeps the five onboarding pages UI-only for now. + * The component owns light/dark-safe visuals, simple local navigation, and a + * presentational state contract that stories and later runtime integrations can drive. + */ +export function GovernanceOnboardingWidget({ + currentStepId, + initialStepId = 'welcome', + identityStatus = 'verified', + initialHouse, + disabledHouseOptions = [], + initialProfileDraft, + initialFieldErrors = {}, + stakeAmountLabel = '250 G$', + transactionSteps = DEFAULT_TRANSACTION_STEPS, + finalActions = DEFAULT_FINAL_ACTIONS, + dataTestId, + onStepChange, + onVerifyIdentity, + onFinalActionPress, +}: GovernanceOnboardingWidgetProps) { + const initialWizardData = useMemo( + () => ({ + selectedHouse: initialHouse, + profileDraft: initialProfileDraft ?? {}, + }), + [initialHouse, initialProfileDraft], + ) + + return ( + onStepChange?.(stepId as GovernanceOnboardingStepId)} + > + + + ) +} diff --git a/packages/governance-widget/src/index.ts b/packages/governance-widget/src/index.ts new file mode 100644 index 0000000..731ab70 --- /dev/null +++ b/packages/governance-widget/src/index.ts @@ -0,0 +1,11 @@ +export { GovernanceOnboardingWidget } from './GovernanceOnboardingWidget' +export type { + GovernanceHouse, + GovernanceIdentityStatus, + GovernanceOnboardingAction, + GovernanceOnboardingStepId, + GovernanceOnboardingWidgetProps, + GovernanceProfileDraft, + GovernanceProfileFieldErrors, + GovernanceProfileFieldKey, +} from './types' diff --git a/packages/governance-widget/src/types.ts b/packages/governance-widget/src/types.ts new file mode 100644 index 0000000..4499de7 --- /dev/null +++ b/packages/governance-widget/src/types.ts @@ -0,0 +1,48 @@ +import type { ButtonProps, StepperStepItem } from '@goodwidget/ui' + +export type GovernanceHouse = 'citizenship' | 'alignment' + +export type GovernanceOnboardingStepId = + | 'welcome' + | 'house' + | 'profile' + | 'stake' + | 'success' + +export type GovernanceIdentityStatus = 'verified' | 'unverified' + +export interface GovernanceProfileDraft { + name?: string + socialLinks?: string + projectWebpage?: string + missionStatement?: string + distributionStrategy?: string +} + +export type GovernanceProfileFieldKey = keyof GovernanceProfileDraft + +export type GovernanceProfileFieldErrors = Partial> + +export interface GovernanceOnboardingAction { + id: string + label: string + variant?: ButtonProps['variant'] + disabled?: boolean +} + +export interface GovernanceOnboardingWidgetProps { + currentStepId?: GovernanceOnboardingStepId + initialStepId?: GovernanceOnboardingStepId + identityStatus?: GovernanceIdentityStatus + initialHouse?: GovernanceHouse + disabledHouseOptions?: GovernanceHouse[] + initialProfileDraft?: GovernanceProfileDraft + initialFieldErrors?: GovernanceProfileFieldErrors + stakeAmountLabel?: string + transactionSteps?: StepperStepItem[] + finalActions?: GovernanceOnboardingAction[] + dataTestId?: string + onStepChange?: (stepId: GovernanceOnboardingStepId) => void + onVerifyIdentity?: () => void + onFinalActionPress?: (actionId: string) => void +} diff --git a/packages/governance-widget/tsconfig.build.json b/packages/governance-widget/tsconfig.build.json new file mode 100644 index 0000000..5a24989 --- /dev/null +++ b/packages/governance-widget/tsconfig.build.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src"] +} diff --git a/packages/governance-widget/tsconfig.json b/packages/governance-widget/tsconfig.json new file mode 100644 index 0000000..c2f740f --- /dev/null +++ b/packages/governance-widget/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src", + "paths": { + "@goodwidget/ui": ["../ui/src/index.ts"], + "react-native": ["./node_modules/react-native-web"] + } + }, + "include": ["src"] +} diff --git a/packages/governance-widget/tsup.config.ts b/packages/governance-widget/tsup.config.ts new file mode 100644 index 0000000..511ca60 --- /dev/null +++ b/packages/governance-widget/tsup.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from 'tsup' + +export default defineConfig({ + entry: { + index: 'src/index.ts', + }, + format: ['esm', 'cjs'], + dts: true, + sourcemap: true, + clean: true, + tsconfig: 'tsconfig.build.json', + external: ['react', 'react-dom', 'react-native', 'react-native-web'], +}) diff --git a/packages/ui/src/components/PageWizard.tsx b/packages/ui/src/components/PageWizard.tsx new file mode 100644 index 0000000..994311b --- /dev/null +++ b/packages/ui/src/components/PageWizard.tsx @@ -0,0 +1,232 @@ +import React, { + createContext, + useCallback, + useContext, + useMemo, + useState, + type ReactNode, +} from 'react' +import { Stack } from 'tamagui' +import { createComponent } from '../createComponent' +import { XStack, YStack } from '../components-test/Stacks' +import { Heading } from './Heading' +import { Text } from './Text' + +export interface PageWizardStep { + id: string + title: string + description?: string +} + +export interface PageWizardContextValue { + currentIndex: number + currentStep?: PageWizardStep + steps: PageWizardStep[] + data: Record + setData: (patch: Record) => void + next: () => void + back: () => void + goTo: (index: number) => void + goToStep: (stepId: string) => void + isFirst: boolean + isLast: boolean +} + +interface PageWizardProviderProps { + steps: PageWizardStep[] + initialStepId?: string + currentStepId?: string + initialData?: Record + onStepChange?: (stepId: string, index: number) => void + children: ReactNode +} + +interface PageWizardShellProps { + title: string + description?: string + footer?: ReactNode + children: ReactNode + dataTestId?: string +} + +const PageWizardContext = createContext(null) + +const PageWizardStepCircle = createComponent(Stack, { + name: 'PageWizardStepCircle', + width: 32, + height: 32, + borderRadius: '$full', + alignItems: 'center', + justifyContent: 'center', + borderWidth: 1, + borderColor: '$borderColor', + backgroundColor: '$background', +}) + +function resolveStepIndex(steps: PageWizardStep[], stepId?: string): number { + if (!stepId) { + return 0 + } + + const nextIndex = steps.findIndex((step) => step.id === stepId) + return nextIndex >= 0 ? nextIndex : 0 +} + +export function PageWizardProvider({ + steps, + initialStepId, + currentStepId, + initialData, + onStepChange, + children, +}: PageWizardProviderProps) { + const [uncontrolledStepId, setUncontrolledStepId] = useState(initialStepId) + const [data, setDataState] = useState>(initialData ?? {}) + + const resolvedStepId = currentStepId ?? uncontrolledStepId ?? steps[0]?.id + const currentIndex = resolveStepIndex(steps, resolvedStepId) + + const setData = useCallback((patch: Record) => { + setDataState((previousData) => ({ + ...previousData, + ...patch, + })) + }, []) + + const updateStep = useCallback( + (nextIndex: number) => { + if (steps.length === 0) { + return + } + + const boundedIndex = Math.max(0, Math.min(nextIndex, steps.length - 1)) + const nextStep = steps[boundedIndex] + + if (!currentStepId) { + setUncontrolledStepId(nextStep.id) + } + + onStepChange?.(nextStep.id, boundedIndex) + }, + [currentStepId, onStepChange, steps], + ) + + const goTo = useCallback( + (nextIndex: number) => { + updateStep(nextIndex) + }, + [updateStep], + ) + + const goToStep = useCallback( + (stepId: string) => { + updateStep(resolveStepIndex(steps, stepId)) + }, + [steps, updateStep], + ) + + const next = useCallback(() => { + updateStep(currentIndex + 1) + }, [currentIndex, updateStep]) + + const back = useCallback(() => { + updateStep(currentIndex - 1) + }, [currentIndex, updateStep]) + + const value = useMemo( + () => ({ + currentIndex, + currentStep: steps[currentIndex], + steps, + data, + setData, + next, + back, + goTo, + goToStep, + isFirst: currentIndex <= 0, + isLast: currentIndex >= steps.length - 1, + }), + [back, currentIndex, data, goTo, goToStep, next, setData, steps], + ) + + return {children} +} + +export function usePageWizard(): PageWizardContextValue { + const contextValue = useContext(PageWizardContext) + + if (!contextValue) { + throw new Error('usePageWizard must be used inside a PageWizardProvider') + } + + return contextValue +} + +export function PageWizardShell({ + title, + description, + footer, + children, + dataTestId, +}: PageWizardShellProps) { + const { currentIndex, steps } = usePageWizard() + + return ( + + + + {steps.map((step, index) => { + const isActiveStep = index === currentIndex + const isCompletedStep = index < currentIndex + const stepColor = isActiveStep || isCompletedStep ? '$white' : '$placeholderColor' + const connectorColor = index < currentIndex ? '$success' : '$borderColor' + + return ( + + + + + {index + 1} + + + + {step.title} + + + {index < steps.length - 1 ? ( + + ) : null} + + ) + })} + + + + {title} + {description ? {description} : null} + + + + {children} + {footer} + + ) +} diff --git a/packages/ui/src/components/Stepper.tsx b/packages/ui/src/components/Stepper.tsx new file mode 100644 index 0000000..0332253 --- /dev/null +++ b/packages/ui/src/components/Stepper.tsx @@ -0,0 +1,329 @@ +import React, { useEffect, useRef } from 'react' +import type { ReactNode } from 'react' +import { Icon } from './Icon' +import { Text } from './Text' +import { XStack, YStack } from '../components-test/Stacks' +import { createComponent } from '../createComponent' + +const MARKER_SIZE = 28 +const ROW_GAP_PX = 8 + +export type StepperStepStatus = 'pending' | 'active' | 'completed' | 'failed' | 'attention' + +export interface StepperStepItem { + id: string + title: string + description?: string + status: StepperStepStatus +} + +export interface StepperProps { + steps: StepperStepItem[] + activeStepId?: string | null + header?: ReactNode + maxHeight?: number +} + +function connectorColor(status: StepperStepStatus): string { + if (status === 'completed') { + return '$borderColorFocus' + } + + return '$borderColor' +} + +function statusLabel(status: StepperStepStatus): string { + if (status === 'failed') { + return 'Needs attention' + } + + if (status === 'completed') { + return 'Completed' + } + + if (status === 'active' || status === 'attention') { + return 'In progress' + } + + return 'Pending' +} + +function statusColor(status: StepperStepStatus): string | undefined { + if (status === 'failed' || status === 'attention') { + return '$warning' + } + + if (status === 'completed') { + return '$success' + } + + if (status === 'active') { + return '$primary' + } + + return undefined +} + +type StepperMarkerVariant = 'completed' | 'active' | 'failed' | 'pending' | 'attention' + +function resolveMarkerVariant(status: StepperStepStatus): StepperMarkerVariant { + if (status === 'completed') { + return 'completed' + } + + if (status === 'failed') { + return 'failed' + } + + if (status === 'attention') { + return 'attention' + } + + if (status === 'active') { + return 'active' + } + + return 'pending' +} + +function StepperMarker({ variant }: { variant: StepperMarkerVariant }) { + if (variant === 'pending') { + return ( + + ) + } + + if (variant === 'attention') { + return ( + + ) + } + + const fillColor = variant === 'failed' ? '$warning' : '$borderColorFocus' + const glyph = + variant === 'completed' ? ( + + ) : variant === 'failed' ? ( + + ) : ( + + ) + + return ( + + {glyph} + + ) +} + +interface StepperStepRowProps { + step: StepperStepItem + isFirst: boolean + isLast: boolean + connectorAboveColor?: string + stepRef: (node: HTMLElement | null) => void +} + +function StepperStepRow({ + step, + isFirst, + isLast, + connectorAboveColor, + stepRef, +}: StepperStepRowProps) { + const isActiveStep = step.status === 'active' || step.status === 'attention' + const isFailedStep = step.status === 'failed' + const isAttentionStep = step.status === 'attention' + const connectorBelowColor = connectorColor(step.status) + const titleColor = isAttentionStep + ? '$warning' + : isFailedStep + ? '$warning' + : step.status === 'completed' || isActiveStep + ? '$color' + : '$placeholderColor' + const contentBackgroundColor = isActiveStep ? '$backgroundHover' : undefined + const contentBorderColor = isAttentionStep + ? '$warning' + : isFailedStep + ? '$warning' + : isActiveStep + ? '$borderColorFocus' + : 'transparent' + const shouldShowDescription = Boolean(step.description) && (isActiveStep || isFailedStep) + const railOffset = isActiveStep || isFailedStep ? '$2' : '$1' + + return ( + + + + {!isFirst && connectorAboveColor ? ( + + ) : null} + + {!isLast ? ( + + ) : null} + + + + + + + {step.title} + + {isAttentionStep ? : null} + + + {statusLabel(step.status)} + + + {shouldShowDescription ? ( + + {step.description} + + ) : null} + + + + ) +} + +const SCROLL_HIDE_CLASS = 'gw-stepper-scroll-hide' + +let scrollbarStyleInjected = false + +function ensureScrollbarHidden(): void { + if (scrollbarStyleInjected || typeof document === 'undefined') { + return + } + + scrollbarStyleInjected = true + const style = document.createElement('style') + style.id = 'gw-stepper-scroll-hide' + style.textContent = `.${SCROLL_HIDE_CLASS}::-webkit-scrollbar { display: none; width: 0; height: 0; }` + document.head.appendChild(style) +} + +const StepperScrollFrame = createComponent(YStack, { + name: 'Stepper', + width: '100%', + overflow: 'auto' as const, +}) + +function resolveActiveStepId(steps: StepperStepItem[], activeStepId?: string | null): string | null { + if (activeStepId) { + return activeStepId + } + + const prioritizedStep = steps.find( + (step) => step.status === 'active' || step.status === 'failed' || step.status === 'attention', + ) + + return prioritizedStep?.id ?? null +} + +export function Stepper({ steps, activeStepId, header, maxHeight = 360 }: StepperProps) { + const stepRefs = useRef(new Map()) + const resolvedActiveStepId = resolveActiveStepId(steps, activeStepId) + + ensureScrollbarHidden() + + useEffect(() => { + if (!resolvedActiveStepId) { + return undefined + } + + const frame = requestAnimationFrame(() => { + const node = stepRefs.current.get(resolvedActiveStepId) + node?.scrollIntoView({ block: 'center', behavior: 'smooth' }) + }) + + return () => cancelAnimationFrame(frame) + }, [resolvedActiveStepId, steps]) + + return ( + + {header} + + + {steps.map((step, index) => ( + { + if (node) { + stepRefs.current.set(step.id, node) + return + } + + stepRefs.current.delete(step.id) + }} + /> + ))} + + + + ) +} diff --git a/packages/ui/src/index.ts b/packages/ui/src/index.ts index 27a33dc..f52de56 100644 --- a/packages/ui/src/index.ts +++ b/packages/ui/src/index.ts @@ -69,6 +69,14 @@ export type { ToastStatus, ToastConfig, ToastItem } from './components/Toast' export { Alert } from './components-test/Alert' export { Badge, BadgeText } from './components-test/Badge' export { Drawer } from './components/Drawer' +export { + PageWizardProvider, + PageWizardShell, + usePageWizard, +} from './components/PageWizard' +export type { PageWizardContextValue, PageWizardStep } from './components/PageWizard' +export { Stepper } from './components/Stepper' +export type { StepperProps, StepperStepItem, StepperStepStatus } from './components/Stepper' // Icon — new component with inline SVG registry and semantic color/size props export { Icon } from './components/Icon' diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 04afa8b..517c8b4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -170,6 +170,9 @@ importers: '@goodwidget/core': specifier: workspace:* version: link:../../packages/core + '@goodwidget/governance-widget': + specifier: workspace:* + version: link:../../packages/governance-widget '@goodwidget/ui': specifier: workspace:* version: link:../../packages/ui @@ -344,6 +347,40 @@ importers: specifier: ^5.7.0 version: 5.9.3 + packages/governance-widget: + dependencies: + '@goodwidget/ui': + specifier: workspace:* + version: link:../ui + react-native: + specifier: '>=0.76.0' + version: 0.76.9(@babel/core@7.29.0)(@babel/preset-env@7.29.2(@babel/core@7.29.0))(@types/react@18.3.28)(react@18.3.1) + tamagui: + specifier: 1.121.0 + version: 1.121.0(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.29.0)(@babel/preset-env@7.29.2(@babel/core@7.29.0))(@types/react@18.3.28)(react@18.3.1))(react@18.3.1) + devDependencies: + '@types/react': + specifier: ^18.3.0 + version: 18.3.28 + '@types/react-dom': + specifier: ^18.3.0 + version: 18.3.7(@types/react@18.3.28) + react: + specifier: ^18.3.0 + version: 18.3.1 + react-dom: + specifier: ^18.3.0 + version: 18.3.1(react@18.3.1) + react-native-web: + specifier: ^0.19.13 + version: 0.19.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + tsup: + specifier: ^8.4.0 + version: 8.5.1(@swc/core@1.15.30)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.3) + typescript: + specifier: ^5.7.0 + version: 5.9.3 + packages/ui: dependencies: '@tamagui/animations-react-native': diff --git a/tests/widgets/governance-widget/states.spec.ts b/tests/widgets/governance-widget/states.spec.ts new file mode 100644 index 0000000..6eabe44 --- /dev/null +++ b/tests/widgets/governance-widget/states.spec.ts @@ -0,0 +1,141 @@ +import { expect, test, type Page } from '@playwright/test' + +const STORY_IDS = { + injectedWelcomeUnverified: + '/iframe.html?id=widgets-governancewidget--injected-welcome-unverified&viewMode=story', + custodialWelcomeUnverified: + '/iframe.html?id=widgets-governancewidget--custodial-welcome-unverified&viewMode=story', + custodialInteractiveFlow: + '/iframe.html?id=widgets-governancewidget--custodial-interactive-flow&viewMode=story', + custodialHouseSelection: + '/iframe.html?id=widgets-governancewidget--custodial-house-selection&viewMode=story', + custodialCitizenshipProfileReady: + '/iframe.html?id=widgets-governancewidget--custodial-citizenship-profile-ready&viewMode=story', + custodialAlignmentProfileError: + '/iframe.html?id=widgets-governancewidget--custodial-alignment-profile-error&viewMode=story', + custodialStakeProgress: + '/iframe.html?id=widgets-governancewidget--custodial-stake-progress&viewMode=story', + custodialSuccess: '/iframe.html?id=widgets-governancewidget--custodial-success&viewMode=story', +} as const + +async function gotoStory(page: Page, storyUrl: string): Promise { + await page.goto(storyUrl) + await page.waitForLoadState('domcontentloaded') +} + +test('Governance onboarding interactive flow persists selected house into profile and success steps', async ({ + page, +}) => { + await gotoStory(page, STORY_IDS.custodialInteractiveFlow) + + await expect(page.getByText('Join GoodDollar governance')).toBeVisible() + await expect(page.getByRole('button', { name: 'Continue to house selection' })).toBeEnabled() + await page.screenshot({ + path: 'tests/widgets/governance-widget/test-results/gwo-01-welcome-verified.png', + fullPage: true, + }) + + await page.getByRole('button', { name: 'Continue to house selection' }).click() + await expect(page.getByText('Select your governance house')).toBeVisible() + await page.screenshot({ + path: 'tests/widgets/governance-widget/test-results/gwo-02-house-selection.png', + fullPage: true, + }) + + await page.getByTestId('GovernanceOnboardingWidget-house-alignment').click() + await page.getByRole('button', { name: 'Continue to profile' }).click() + await expect(page.getByText('House of Alignment profile', { exact: true })).toBeVisible() + await expect(page.getByText('Mission statement')).toBeVisible() + await page.screenshot({ + path: 'tests/widgets/governance-widget/test-results/gwo-03-profile-alignment.png', + fullPage: true, + }) + + await page.getByPlaceholder('Describe the member or project name').fill('Solar Commons') + await page.getByPlaceholder('https://goodproject.example').fill('https://solar.example') + await page + .getByPlaceholder( + 'Explain the mission that aligns the project with the GoodDollar ecosystem.', + ) + .fill('Expand regenerative local access.') + await page + .getByPlaceholder('Describe how governance-approved funding will be allocated.') + .fill('Allocate quarterly grants through community review.') + await page.getByRole('button', { name: /continue/i }).click() + + await expect(page.getByText('Track the membership stake journey')).toBeVisible() + await expect(page.getByText('Approve governance stake')).toBeVisible() + await page.screenshot({ + path: 'tests/widgets/governance-widget/test-results/gwo-04-stake-progress-active.png', + fullPage: true, + }) + + await page.getByRole('button', { name: 'Continue to success' }).click() + await expect(page.getByText('Governance onboarding complete')).toBeVisible() + await page.screenshot({ + path: 'tests/widgets/governance-widget/test-results/gwo-05-success.png', + fullPage: true, + }) +}) + +test('Governance onboarding shows the unverified welcome state', async ({ page }) => { + await gotoStory(page, STORY_IDS.custodialWelcomeUnverified) + await expect(page.getByText('Verification required')).toBeVisible() + await expect(page.getByRole('button', { name: 'Continue to house selection' })).toBeDisabled() + await page.screenshot({ + path: 'tests/widgets/governance-widget/test-results/gwo-06-welcome-unverified.png', + fullPage: true, + }) +}) + +test('Governance onboarding shows house selection as a standalone state', async ({ page }) => { + await gotoStory(page, STORY_IDS.custodialHouseSelection) + await expect(page.getByText('House of Citizenship')).toBeVisible() + await expect(page.getByText('House of Alignment')).toBeVisible() + await page.screenshot({ + path: 'tests/widgets/governance-widget/test-results/gwo-07-house-selection-standalone.png', + fullPage: true, + }) +}) + +test('Governance onboarding shows the citizenship profile ready state', async ({ page }) => { + await gotoStory(page, STORY_IDS.custodialCitizenshipProfileReady) + await expect(page.getByText('Ready to continue')).toBeVisible() + await expect(page.getByRole('button', { name: 'Continue to stake flow' })).toHaveCount(1) + await page.screenshot({ + path: 'tests/widgets/governance-widget/test-results/gwo-08-profile-citizenship-ready.png', + fullPage: true, + }) +}) + +test('Governance onboarding shows the alignment profile validation state', async ({ page }) => { + await gotoStory(page, STORY_IDS.custodialAlignmentProfileError) + await expect(page.getByText('Project webpage is required')).toBeVisible() + await expect(page.getByText('Distribution strategy is required')).toBeVisible() + await page.screenshot({ + path: 'tests/widgets/governance-widget/test-results/gwo-09-profile-alignment-error.png', + fullPage: true, + }) +}) + +test('Governance onboarding shows the failed stake progress state', async ({ page }) => { + await gotoStory(page, STORY_IDS.custodialStakeProgress) + await expect(page.getByText('Action required')).toBeVisible() + await expect( + page.getByText('The previous transaction failed and needs a retry from the wallet.').first(), + ).toBeVisible() + await page.screenshot({ + path: 'tests/widgets/governance-widget/test-results/gwo-10-stake-progress-failed.png', + fullPage: true, + }) +}) + +test('Governance onboarding shows the standalone success state actions', async ({ page }) => { + await gotoStory(page, STORY_IDS.custodialSuccess) + await expect(page.getByRole('button', { name: 'Open governance dashboard' })).toBeVisible() + await expect(page.getByRole('button', { name: 'Review proposal queue' })).toBeVisible() + await page.screenshot({ + path: 'tests/widgets/governance-widget/test-results/gwo-11-success-standalone.png', + fullPage: true, + }) +}) diff --git a/tests/widgets/governance-widget/test-results/gwo-01-welcome-verified.png b/tests/widgets/governance-widget/test-results/gwo-01-welcome-verified.png new file mode 100644 index 0000000000000000000000000000000000000000..4a075c77d66dbb6da0ea9fb8a76b967360f1763a GIT binary patch literal 79330 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
N?VfSja%dHfDdGs&Afb;opANSMz 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 z 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
sJy7 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 Q|Dedryn&RyH2(Pi0L_CfUH||9 literal 0 HcmV?d00001 diff --git a/tests/widgets/governance-widget/test-results/gwo-04-stake-progress-active.png b/tests/widgets/governance-widget/test-results/gwo-04-stake-progress-active.png new file mode 100644 index 0000000000000000000000000000000000000000..ac17dac128965e92b08ec238d57a8b000fd69d45 GIT binary patch literal 109083 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�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 U_aB3LmN1yKxV%`YD8ldm0HVEmKL7v# literal 0 HcmV?d00001 diff --git a/tests/widgets/governance-widget/test-results/gwo-07-house-selection-standalone.png b/tests/widgets/governance-widget/test-results/gwo-07-house-selection-standalone.png new file mode 100644 index 0000000000000000000000000000000000000000..9aa96a55f14e62244e24bdbd7ce4839e59af91e3 GIT binary patch literal 103559 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�SB**5GTWj{S$$uZ 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 literal 0 HcmV?d00001 diff --git a/tests/widgets/governance-widget/test-results/gwo-09-profile-alignment-error.png b/tests/widgets/governance-widget/test-results/gwo-09-profile-alignment-error.png new file mode 100644 index 0000000000000000000000000000000000000000..d72bdc73cc1b8245627246c90e80fc9550584d93 GIT binary patch literal 139282 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

b?v7g-&HL@;ZUBYCss}jKCxBq!&l%(UA)CIM{ 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

EE~TyAIiav;!yxz-6%8xBHjxMs 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

FPiBlcT^*p>*)H%skTkQ8~ zG;&;`hL-s_!*tUH2Xe1Nbi$k9q0m*MD!x|HoZ)N%A@VcvXnvGot6Xw7j0G9(fFivRKP+$)w|rx^iP?Z_JG}zQ=@g3 zHUw6(NswCX+Q;X8|ZdTT(JR>g0rirm6v zmmT7$nKRX7qTymzf+sIJQarL31EOthD~xj0;{&UnVASiN%nIH1Oz!Ia5ZI5Z0W1<{ zJr6N0?@2`_T-8E0n23F;4@kV6)_e4Rm>kkd^>>QhSEm9U&y;D9S{0HWbjwD(%+_!{ zG%ENsFMj1R#(H{NfMd3^t%Ecl3KrsQNL!Ppw#yG=|0oE0Egi*E?Mr6x0EJxqo;B-VDW?_ROe(szqD9XIzA>qddi1 zV}f}uwYlUTHykAfIL6&_Se&q5XfH$%l3Yuc&yG3TjpAf{d*$ZxCqr4iV&SSR-qap+ z_dO#C^#d<#@7>Wd&cXX$%jrl=gm7ncZC&eG;WOm^n>Lm#9=lWw?-8M>FoKM_>5bld z3;2Y|SM6L{NWw9#=AmjM%B{o9o4Ew ziQN-!>znTBu+7F7P9jz|nFViJzGMkF%1 zP-waFd7^Uf+TOF7isLvFeC`q-l}J%Z>5!T9il zcB4E1NYk;U!Bc9#j=lh|zmvhE^}olz=&N?!QEGiXn|g^d`{i&-oulJ??-~)`xGl%e6arDFaKr zH*^j{pg=5+uB%`sp;RucBGD>Vd*T%*Ce5tbWNbtr$1S2S9@1vC`mX)n&*XSztflp- zttO;8!3rdUc)|ZXUvjj%XF}V(b!7BSD0{=t>b&<^ z`KFRVciM!C4d@bAk>Vgp+21Ga*0z1p;&S*?J2HfbXkG^=W>4Wq)=gFcS*Tg$Vc z$pXCLuOqm)@l`NIp_5t4%tYhPIeA~Bi*3HLC2b6XFaod-GfjVIC#`by;$dp zm`9?Tro=?hx9rY3IJEDRzDj-Tcw58titC2yXu;jLg@;0>PHEgeovul9jXmNK?`RAx z-}!}9wV~^W!r>~$=KcAS2nM}*caO(xa(xrsyZ4vu$DLqb!GDP{aG9A0_GM=h^K}SC z1T0^>^x_On;e~5{(N!#&!r&q*t~uG0P=l70og9~u-rour09sgtb}x8xl8jqjKqT#^ zx@g7p@|MXKWQV`mvo0f$I$v_ z0l_eKy00ycF>KzQ-Tj{#M7tjKqY;CvQdkKIS}aM+h)2-h z(kvzqDpXLg8(SY&PN*_9-j1b&jwTn886_2o9pch*xAe-^E~o}=A1yVNf_3GRmJeK0 zwHI#%WAt(d7=F`i_ieL;j~(pVTR~{&Uo6jV(3k)N;4u3a5!)~^nt3$vq?#bE97IOQ zvn%5;I8IO*xfU+e9_HiCZF#c2jWf;zS1J>uWNQC&vfiOXAI8ef_u!@puHE#_Nrd;rV1c zc%{29a~{HUmA|WE6bUxsnH(qX-x96kw@Hq^$|7S?XT)ny!u1$coKtNMb5-^W7wNH9}{JT2VOd--AtU(0YUa3a3hCKi_DkdniF_u1t19?dNka|K=CqmaI> zjF~@wwZC}w$Rzy+sAbz%@XcTj6_z8ue+`C~o=Y}=1DP|^FH|C0HrcJ|Hz`&%y$ANr zQ*#3@yA-zLOJ-@1S2nWS8(|b}G-^7Z)Klb2X$YmH!g}eaxPy75c>Q37|Yf6wc4neI{zDNtWTGpHY@2JL!PVs8fKjP;t^iJ_E%Z(YhYq{8#{yE*bZ6G z2~?Btp(s&N0m0X1T-I5-`5!SnGFa}Kw9^v8YpUHVmz5hK6SRqvkf+Ok zK5I9cgG~a3qt3nfcu0MPE7u^0cq^^rZBkZZ3Lwdr z&>B?n)P+7B3OfFn_D>l@aF6-FXmqOLRqt8(z8X

    A494iN_cahCH4GWgk_=oT~5 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�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 G(EkF~;v_@> literal 0 HcmV?d00001 diff --git a/tests/widgets/governance-widget/test-results/gwo-11-success-standalone.png b/tests/widgets/governance-widget/test-results/gwo-11-success-standalone.png new file mode 100644 index 0000000000000000000000000000000000000000..d21bb985c0295bc01c65303bc6d5b8b7d3649d7d GIT binary patch literal 74296 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�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 S;^6QMg(B?q-%-9T{M Date: Tue, 16 Jun 2026 15:49:01 +0000 Subject: [PATCH 06/13] chore: remove accidentally committed skills folder --- .agents/skills/gooddollar/CONTRIBUTING.md | 121 -- .agents/skills/gooddollar/SKILL.md | 215 ---- .../contracts/BuyGDCloneFactory.abi.yaml | 205 ---- .../BuyGDCloneFactory.selectors.yaml | 27 - .../contracts/BuyGDCloneV2.abi.yaml | 282 ----- .../contracts/BuyGDCloneV2.selectors.yaml | 36 - .../contracts/CFAv1Forwarder.abi.yaml | 237 ---- .../contracts/CFAv1Forwarder.selectors.yaml | 19 - .../ConstantFlowAgreementV1.abi.yaml | 560 --------- .../ConstantFlowAgreementV1.selectors.yaml | 33 - .../contracts/GoodDollarOFTAdapter.abi.yaml | 100 -- .../GoodDollarOFTAdapter.selectors.yaml | 12 - .../GooddollarSavingsStream.abi.yaml | 210 ---- .../GooddollarSavingsStream.selectors.yaml | 27 - .../contracts/GovernanceStakingV2.abi.yaml | 202 ---- .../GovernanceStakingV2.selectors.yaml | 26 - .../references/contracts/IdentityV3.abi.yaml | 390 ------- .../contracts/IdentityV3.selectors.yaml | 49 - .../references/contracts/IdentityV4.abi.yaml | 424 ------- .../contracts/IdentityV4.selectors.yaml | 51 - .../references/contracts/InvitesV2.abi.yaml | 333 ------ .../contracts/InvitesV2.selectors.yaml | 41 - .../references/contracts/MentoBroker.abi.yaml | 259 ----- .../contracts/MentoBroker.selectors.yaml | 24 - .../contracts/MessagePassingBridge.abi.yaml | 542 --------- .../MessagePassingBridge.selectors.yaml | 52 - .../references/contracts/NameService.abi.yaml | 104 -- .../contracts/NameService.selectors.yaml | 11 - .../references/contracts/SuperToken.abi.yaml | 1033 ----------------- .../contracts/SuperToken.selectors.yaml | 99 -- .../references/contracts/Superfluid.abi.yaml | 757 ------------ .../contracts/Superfluid.selectors.yaml | 51 - .../references/contracts/UBISchemeV2.abi.yaml | 305 ----- .../contracts/UBISchemeV2.selectors.yaml | 40 - .../contracts/_rich-abi-yaml-format.md | 93 -- .../deep-researches/faucet-flows.md | 42 - .../fuse-to-celo-staking-migration.md | 38 - .../gooddao-daostack-surface.md | 37 - .../deep-researches/how-ubi-is-minted.md | 68 -- .../inviter-invitee-reward-model.md | 58 - .../mento-reserve-economics.md | 27 - .../deep-researches/on-off-ramp-service.md | 69 -- .../gooddollar/references/guides/bridge.md | 187 --- .../references/guides/check-identity.md | 87 -- .../gooddollar/references/guides/claim.md | 83 -- .../gooddollar/references/guides/faucet.md | 76 -- .../gooddollar/references/guides/gooddocs.md | 37 - .../gooddollar/references/guides/goodsdks.md | 110 -- .../references/guides/hypersync-hyperrpc.md | 110 -- .../references/guides/invite-bounties.md | 115 -- .../migrate-fuse-staking-to-celo-savings.md | 116 -- .../references/guides/on-off-ramp.md | 77 -- .../gooddollar/references/guides/save.md | 93 -- .../gooddollar/references/guides/stream.md | 135 --- .../gooddollar/references/guides/swap.md | 83 -- .../references/subgraphs/_query-patterns.md | 35 - .../subgraphs/goodcollective-guide.md | 54 - .../subgraphs/goodcollective.graphql | 200 ---- .../subgraphs/gooddollar-celo-guide.md | 104 -- .../subgraphs/gooddollar-celo.graphql | 113 -- .../subgraphs/reserve-celo-guide.md | 41 - .../references/subgraphs/reserve-celo.graphql | 90 -- 62 files changed, 9255 deletions(-) delete mode 100644 .agents/skills/gooddollar/CONTRIBUTING.md delete mode 100644 .agents/skills/gooddollar/SKILL.md delete mode 100644 .agents/skills/gooddollar/references/contracts/BuyGDCloneFactory.abi.yaml delete mode 100644 .agents/skills/gooddollar/references/contracts/BuyGDCloneFactory.selectors.yaml delete mode 100644 .agents/skills/gooddollar/references/contracts/BuyGDCloneV2.abi.yaml delete mode 100644 .agents/skills/gooddollar/references/contracts/BuyGDCloneV2.selectors.yaml delete mode 100644 .agents/skills/gooddollar/references/contracts/CFAv1Forwarder.abi.yaml delete mode 100644 .agents/skills/gooddollar/references/contracts/CFAv1Forwarder.selectors.yaml delete mode 100644 .agents/skills/gooddollar/references/contracts/ConstantFlowAgreementV1.abi.yaml delete mode 100644 .agents/skills/gooddollar/references/contracts/ConstantFlowAgreementV1.selectors.yaml delete mode 100644 .agents/skills/gooddollar/references/contracts/GoodDollarOFTAdapter.abi.yaml delete mode 100644 .agents/skills/gooddollar/references/contracts/GoodDollarOFTAdapter.selectors.yaml delete mode 100644 .agents/skills/gooddollar/references/contracts/GooddollarSavingsStream.abi.yaml delete mode 100644 .agents/skills/gooddollar/references/contracts/GooddollarSavingsStream.selectors.yaml delete mode 100644 .agents/skills/gooddollar/references/contracts/GovernanceStakingV2.abi.yaml delete mode 100644 .agents/skills/gooddollar/references/contracts/GovernanceStakingV2.selectors.yaml delete mode 100644 .agents/skills/gooddollar/references/contracts/IdentityV3.abi.yaml delete mode 100644 .agents/skills/gooddollar/references/contracts/IdentityV3.selectors.yaml delete mode 100644 .agents/skills/gooddollar/references/contracts/IdentityV4.abi.yaml delete mode 100644 .agents/skills/gooddollar/references/contracts/IdentityV4.selectors.yaml delete mode 100644 .agents/skills/gooddollar/references/contracts/InvitesV2.abi.yaml delete mode 100644 .agents/skills/gooddollar/references/contracts/InvitesV2.selectors.yaml delete mode 100644 .agents/skills/gooddollar/references/contracts/MentoBroker.abi.yaml delete mode 100644 .agents/skills/gooddollar/references/contracts/MentoBroker.selectors.yaml delete mode 100644 .agents/skills/gooddollar/references/contracts/MessagePassingBridge.abi.yaml delete mode 100644 .agents/skills/gooddollar/references/contracts/MessagePassingBridge.selectors.yaml delete mode 100644 .agents/skills/gooddollar/references/contracts/NameService.abi.yaml delete mode 100644 .agents/skills/gooddollar/references/contracts/NameService.selectors.yaml delete mode 100644 .agents/skills/gooddollar/references/contracts/SuperToken.abi.yaml delete mode 100644 .agents/skills/gooddollar/references/contracts/SuperToken.selectors.yaml delete mode 100644 .agents/skills/gooddollar/references/contracts/Superfluid.abi.yaml delete mode 100644 .agents/skills/gooddollar/references/contracts/Superfluid.selectors.yaml delete mode 100644 .agents/skills/gooddollar/references/contracts/UBISchemeV2.abi.yaml delete mode 100644 .agents/skills/gooddollar/references/contracts/UBISchemeV2.selectors.yaml delete mode 100644 .agents/skills/gooddollar/references/contracts/_rich-abi-yaml-format.md delete mode 100644 .agents/skills/gooddollar/references/deep-researches/faucet-flows.md delete mode 100644 .agents/skills/gooddollar/references/deep-researches/fuse-to-celo-staking-migration.md delete mode 100644 .agents/skills/gooddollar/references/deep-researches/gooddao-daostack-surface.md delete mode 100644 .agents/skills/gooddollar/references/deep-researches/how-ubi-is-minted.md delete mode 100644 .agents/skills/gooddollar/references/deep-researches/inviter-invitee-reward-model.md delete mode 100644 .agents/skills/gooddollar/references/deep-researches/mento-reserve-economics.md delete mode 100644 .agents/skills/gooddollar/references/deep-researches/on-off-ramp-service.md delete mode 100644 .agents/skills/gooddollar/references/guides/bridge.md delete mode 100644 .agents/skills/gooddollar/references/guides/check-identity.md delete mode 100644 .agents/skills/gooddollar/references/guides/claim.md delete mode 100644 .agents/skills/gooddollar/references/guides/faucet.md delete mode 100644 .agents/skills/gooddollar/references/guides/gooddocs.md delete mode 100644 .agents/skills/gooddollar/references/guides/goodsdks.md delete mode 100644 .agents/skills/gooddollar/references/guides/hypersync-hyperrpc.md delete mode 100644 .agents/skills/gooddollar/references/guides/invite-bounties.md delete mode 100644 .agents/skills/gooddollar/references/guides/migrate-fuse-staking-to-celo-savings.md delete mode 100644 .agents/skills/gooddollar/references/guides/on-off-ramp.md delete mode 100644 .agents/skills/gooddollar/references/guides/save.md delete mode 100644 .agents/skills/gooddollar/references/guides/stream.md delete mode 100644 .agents/skills/gooddollar/references/guides/swap.md delete mode 100644 .agents/skills/gooddollar/references/subgraphs/_query-patterns.md delete mode 100644 .agents/skills/gooddollar/references/subgraphs/goodcollective-guide.md delete mode 100644 .agents/skills/gooddollar/references/subgraphs/goodcollective.graphql delete mode 100644 .agents/skills/gooddollar/references/subgraphs/gooddollar-celo-guide.md delete mode 100644 .agents/skills/gooddollar/references/subgraphs/gooddollar-celo.graphql delete mode 100644 .agents/skills/gooddollar/references/subgraphs/reserve-celo-guide.md delete mode 100644 .agents/skills/gooddollar/references/subgraphs/reserve-celo.graphql diff --git a/.agents/skills/gooddollar/CONTRIBUTING.md b/.agents/skills/gooddollar/CONTRIBUTING.md deleted file mode 100644 index ab855d3..0000000 --- a/.agents/skills/gooddollar/CONTRIBUTING.md +++ /dev/null @@ -1,121 +0,0 @@ -# Contributing to GoodSkills - -This repository is an AI skill pack. The goal of each update is to make agent behavior more reliable, more explicit, and easier to audit. - -## Update workflow - -1. Define the user-facing problem first. -2. For contract-related updates, add or update Rich ABI first (`references/contracts/*.abi.yaml`), then refresh selectors. -3. Decide the remaining artifact types: - - `references/guides/` for "what to do" - - `references/deep-researches/` for "why it works this way" - - `scripts/` for deterministic and repeatable execution -4. Update `SKILL.md` routing so the new artifact is discoverable. -5. Validate consistency (paths, naming, links, selectors, assumptions). - -If a change touches contract behavior, treat Rich ABI update/add as mandatory first step before guides, deep-research, or scripts. - -## Add or update a guide - -Use guides for execution playbooks and operator workflows. - -Required structure: - -- title and one-line usage trigger -- `## Goal` -- `## Required inputs` -- `## Execution flow` as numbered steps -- deterministic snippet when execution is non-trivial -- failure handling and output contract - -Guide rules: - -- prefer explicit pre-checks before state-changing actions -- include only one primary workflow per file -- use [GoodProtocol `releases/deployment.json`](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) as the **only** source for contract addresses (rich ABI `meta.deployments` mirrors those rows); use GoodDocs for behavior and UX, not for resolving addresses; use on-chain `NameService.getAddress` only when the deployment documents the string key -- avoid implementation-deep theory; keep that in deep-research files - -After adding a guide: - -- add it to `SKILL.md` in `Guides` -- add an entry in `Use-case to guide map` - -## Add or update a deep-research note - -Use deep-research files for architecture, rationale, tradeoffs, and root-cause logic. - -Deep-research rules: - -- explain causality, not only API surfaces -- distinguish current behavior from legacy behavior -- link source contracts/docs for traceability -- keep language natural and decision-oriented - -Do not turn deep-research files into step-by-step runbooks; move operational steps into guides. - -## Add or update Rich ABI YAML - -Location: `references/contracts/`. - -For each contract: - -- create or update `Foo.abi.yaml` -- generate or refresh `Foo.selectors.yaml` -- include function-level notes for non-obvious behavior -- when `meta.deployments` lists concrete addresses, add **`creationBlock`** next to each **`address`** (placement: `references/contracts/_rich-abi-yaml-format.md`; using it as **`fromBlock`** for log or HyperSync fetches: `references/guides/hypersync-hyperrpc.md`) - -Minimum ABI documentation quality: - -- correct mutability, inputs, outputs -- access pattern (`owner`, `avatar`, `anyone`, etc.) where relevant -- emitted events and practical errors -- notes for routing/edge-case semantics - -Source-of-truth policy: - -- prefer canonical contract repos (GoodProtocol, GoodBridge, mento-core) -- avoid inferred behavior when source is unclear -- update notes when protocol behavior changed - -Selector generation: - -```bash -node scripts/selectors.mjs generate Foo.abi.yaml -``` - -## Add or update scripts - -Location: `scripts/`. - -Use scripts when: - -- a workflow is repeated -- deterministic output is needed -- manual querying is error-prone - -Script standards: - -- require inputs through env vars or explicit args -- fail loudly with actionable messages -- print structured output for easy reuse -- keep script intent narrow - -When a script supports a guide: - -- reference it from that guide -- document expected inputs and outputs in the guide - -## Naming and organization - -- use lowercase kebab-case for guides and deep-research files -- keep one topic per file -- avoid duplicate guidance across files -- prefer updating existing files over creating near-duplicates - -## Update checklist before merge - -- `SKILL.md` routing updated -- links resolve and point to public sources -- guides and deep-research files respect "what" vs "why" separation -- ABI + selectors pairs are in sync -- new behavior is reflected in notes where needed diff --git a/.agents/skills/gooddollar/SKILL.md b/.agents/skills/gooddollar/SKILL.md deleted file mode 100644 index 2d59116..0000000 --- a/.agents/skills/gooddollar/SKILL.md +++ /dev/null @@ -1,215 +0,0 @@ ---- -name: gooddollar -description: > - Knowledge base for GoodProtocol action execution and GoodDollar (G$) integrations. - Use this skill BEFORE ad-hoc web search for claim, save/stake, swap, bridge, - stream, and identity tasks. Prefer GoodDocs (https://docs.gooddollar.org/) for - narrative; contract addresses only from GoodProtocol releases/deployment.json. -metadata: - version: 1.0.0 -license: MIT ---- - -# GoodDollar Skill Pack - -Routing index for GoodProtocol. This repo complements [GoodDocs](https://docs.gooddollar.org/) for behavior and user flows. **Contract addresses** come only from [GoodProtocol/releases/deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) (and `meta.deployments` in `references/contracts/*.abi.yaml`, which mirror those rows)—not from GoodDocs pages. - -Repository maintenance and update process is documented in `CONTRIBUTING.md`. - -## Protocol snapshot (from GoodDocs) - -- G$ is reserve-backed; issuance and pricing tie to the reserve and bonding-curve mechanics described in [How GoodDollar works](https://docs.gooddollar.org/how-gooddollar-works). -- The stack is multi-chain; which contracts exist per environment is defined only in [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) (for example `GoodDollar`, `Identity`, `NameService`, `UBIScheme`, Mento keys, `MpbBridge`, and related entries under `production`, `production-celo`, and `production-xdc`). -- UBI is daily for verified users; identity verification and connected accounts are documented under [user guides](https://docs.gooddollar.org/user-guides). - -## Guides (single location for action playbooks) - -All task-specific instructions live under `references/guides/`. - -- `references/guides/claim.md` — daily UBI (`claim` / UBIScheme). -- `references/guides/save.md` — stake, rewards, unstake. -- `references/guides/swap.md` — buy or sell G$ (Mento on supported chains). -- `references/guides/bridge.md` — MessagePassingBridge (GoodDocs); optional OFT path via ABI refs. -- `references/guides/stream.md` — Superfluid streams (Celo-oriented in GoodDocs). -- `references/guides/check-identity.md` — whitelist and connected-address semantics. -- `references/guides/goodsdks.md` — SDK-first integration routing for GoodSDKs packages. -- `references/guides/gooddocs.md` — hub links to [GoodDocs](https://docs.gooddollar.org/). -- `references/guides/hypersync-hyperrpc.md` — Envio HyperSync/HyperRPC data-source routing for high-volume historical reads. -- `references/guides/faucet.md` — Faucet gas top-up execution flow and preflight checks. -- `references/guides/on-off-ramp.md` — stable-token ramp service flow into and out of G$. -- `references/guides/invite-bounties.md` — verify and execute inviter-invitee bounty payouts. -- `references/guides/migrate-fuse-staking-to-celo-savings.md` — migrate Fuse governance stake to CELO savings flow. - -## Subgraphs (indexed chain history) - -Use this folder with the same pattern as the protocol subgraph references: one `*-guide.md` plus one companion `.graphql` per deployment. - -For historical on-chain data, **start with the subgraph**: confirm the deployment covers the question (entities and fields in the guide, freshness via `_meta`). If the subgraph does not work for the request—missing schema coverage, stale or lagging indexing, query limits, or endpoint errors—**then** move to **HyperSync** or **HyperRPC** using `references/guides/hypersync-hyperrpc.md`. - -- `references/subgraphs/_query-patterns.md` — cross-cutting query discipline. -- `references/subgraphs/reserve-celo-guide.md` + `references/subgraphs/reserve-celo.graphql` — reserve pricing and swap history. -- `references/subgraphs/gooddollar-celo-guide.md` + `references/subgraphs/gooddollar-celo.graphql` — GoodDollar Celo schema discovery and starter probes. -- `references/subgraphs/goodcollective-guide.md` + `references/subgraphs/goodcollective.graphql` — GoodCollective schema discovery and starter probes. - -For Superfluid protocol subgraphs (streams, pools, vesting schedulers), see [Superfluid documentation](https://docs.superfluid.finance/) and [subgraph endpoints](https://subgraph-endpoints.superfluid.dev/). - -## Historical data routing policy (strict) - -1. Query subgraphs first for all historical/indexed requests. -2. Validate required entities and fields against the target subgraph schema and guide before declaring a gap. -3. Use **HyperSync** or **HyperRPC** fallback only when at least one of these is true: - - required entities or fields are not available in subgraph schema - - indexing lag makes subgraph data stale for the requested range - - query limits or endpoint instability block reliable retrieval -4. Do not start with HyperSync or HyperRPC when subgraph data is available and fresh. -5. HyperRPC fallback requires a valid Envio API key; if missing, **explicitly ask the user** to provide `HYPERRPC_API_TOKEN` or `ENVIO_API_TOKEN` (or paste a full `HYPERRPC_URL`); do not treat anonymous HyperRPC as production. -6. When **HyperSync** is the best option for the query and no Envio API token is available (`ENVIO_API_TOKEN` or equivalent per `references/guides/hypersync-hyperrpc.md`), **explicitly ask the user** to provide the token before proceeding; do not silently substitute anonymous HyperSync usage. -7. When fallback is used, report reason explicitly (schema gap, lag, or reliability issue). - -## Data source decision table - -| Query type | Primary source | Secondary source | Notes | -|---|---|---|---| -| Current on-chain state (latest balances, allowances, config, flags, view calls) | RPC | None | Use direct contract RPC reads for latest state. | -| Historical indexed entity data (time-series, aggregates, protocol entities, event-derived analytics) | Subgraph | HyperSync/HyperRPC | Prefer subgraph first; fall back when it cannot answer. | -| Historical raw on-chain data when subgraph is missing fields/entities or stale | HyperSync | HyperRPC | Prefer HyperSync for bulk scans and data pipelines. | -| Historical data for existing JSON-RPC integrations | HyperRPC | HyperSync | Use HyperRPC when strict JSON-RPC compatibility is required. | - -Decision rule: - -1. If request is current state -> use RPC. -2. If request is historical/indexed -> query subgraph first. -3. If subgraph cannot satisfy request -> fallback to HyperSync or HyperRPC per compatibility and scale needs. -4. HyperRPC fallback requires Envio API key credentials. -5. HyperSync client usage requires an Envio API token; if HyperSync is chosen and the token is missing, explicitly ask the user to provide it (see `references/guides/hypersync-hyperrpc.md`). - -## Mapping data retrieval rule - -Solidity mappings are not iterable on-chain by keyspace scan. Do not assume full-key enumeration is possible from RPC alone. - -When data is stored in mapping-like structures: - -1. Check contract source and ABI for key-discovery paths first: - - events emitted on set or update - - arrays, counters, linked lists, or index getters storing keys - - dedicated pagination or enumerable view functions -2. If key discovery exists, reconstruct key set from those sources and then read mapping entries. -3. If key discovery does not exist, report that complete iteration is not possible from chain state alone. -4. For historical reconstruction, prefer subgraph indexing first; if unavailable, use HyperSync or HyperRPC log scans with explicit limitations. - -## Use-case to guide map - -- Claim requests -> `references/guides/claim.md` -- Eligibility or connected-address questions -> `references/guides/check-identity.md` -- Stake, save, unstake -> `references/guides/save.md` -- Buy or sell G$ against reserve rails -> `references/guides/swap.md` -- Cross-chain bridge -> `references/guides/bridge.md` -- Stream management -> `references/guides/stream.md` -- SDK app integration tasks -> `references/guides/goodsdks.md` -- Bulk historical reads or data-engineering fetches -> `references/guides/hypersync-hyperrpc.md` -- Faucet top-up tasks -> `references/guides/faucet.md` -- On-/off-ramp service flow tasks -> `references/guides/on-off-ramp.md` -- Invite bounty eligibility and payout tasks -> `references/guides/invite-bounties.md` -- Fuse to CELO staking migration tasks -> `references/guides/migrate-fuse-staking-to-celo-savings.md` -- Indexed history, analytics, or GraphQL against GoodDollar subgraphs -> `references/subgraphs/_query-patterns.md` -- Historical on-chain fetch when subgraph data is insufficient -> subgraphs first, then HyperSync or HyperRPC per `references/guides/hypersync-hyperrpc.md`; if HyperSync is best and `ENVIO_API_TOKEN` is missing, ask the user for it explicitly. - -## Ambiguous prompts and incomplete inputs - -Stop and **ask the user** whenever the task is underspecified or required facts are missing. List what you need in short, concrete questions (for example chain, contract, address, amount, account, RPC or signer access, time or block range, prior tx hash, approval scope). - -- **Ambiguous** means the goal, environment, contract surface, or acceptance criteria are not clear enough to choose a safe path. -- **Incomplete** means you lack inputs that would change what you build, call, or sign next. - -**Do not invent** chain, address, amount, or policy details that affect correctness, funds, or eligibility. For **information-only** work you may state a single explicit assumption, label it, and ask the user to confirm or correct it before going further. - -**Execution work** (writing or editing runnable code, sending transactions, migrations, or anything that can move funds or alter on-chain state) has **no guessing**: settle every required input with the user, then implement or run. - -## Execution rules - -1. Collect missing required inputs before sending transactions. -2. Run pre-checks first (allowance, whitelist, quotes, bridge **amount** limits, peer wiring when using OFT paths). -3. If a pre-check fails, stop and return the exact corrective action. -4. Return tx hash and key output values. -5. Never fabricate addresses, amounts, or ABI behavior. -6. Resolve decimals and units per chain as in [How to integrate the G$ token](https://docs.gooddollar.org/for-developers/developer-guides/how-to-integrate-the-gusd-token) (for example 18 decimals on Celo, 2 on Fuse and Ethereum where applicable). - -## Pre-check matrix - -- Claim: verify identity whitelist status before `claim()`. -- Save or stake: verify balance and allowance before `stake()`. -- Swap: fetch quote, apply slippage bounds, verify allowance; confirm Mento contract keys for the active chain exist in `deployment.json` (for example `MentoBroker` under `production-celo` or `production-xdc`). -- Bridge (MessagePassingBridge): on the **source** chain approve G$ to the bridge; optionally preflight `canBridge(from, amount)` on that same contract (outbound `_bridgeTo` does not call it internally). For LZ use `estimateSendFee` with the **normalized** burn amount per `references/guides/bridge.md`, then `bridgeToWithLz` with nonzero `msg.value` for the **cross-chain transport** fee only (distinct from destination **`bridgeFees`** on minted G$; see **Bridge fee context** in that guide). Read **`bridgeLimits`** / daily trackers when debugging **amount** caps; see **Bridge amount limit context** in that guide. Respect `isClosed`, `LZ_FEE`, `MISSING_FEE`, and `UNSUPPORTED_CHAIN`. **Destination** mint applies `_enforceLimits` and can still revert. Use **Axelar** only when `toAxelarChainId` returns a route (implementation maps 1, 5, 42220, 44787); for Fuse or XDC style targets prefer LZ unless mapping is extended on-chain. -- Bridge (OFT adapter path): verify peer wiring and `quoteSend` fee data. -- Stream: confirm Celo (or documented Superfluid network) and correct Super Token and forwarder or host addresses. -- Identity: resolve Identity from NameService; remember connected addresses do not multiply daily claims ([connect wallet guide](https://docs.gooddollar.org/user-guides/connect-another-wallet-address-to-identity)). - -## Output format requirements - -For any state-changing action return: - -- network and key contract addresses used -- normalized input amounts and min or max guards -- tx hash -- key post-state output when available -- follow-up action if user intervention is required - -## Rich contract ABI references - -Convention: each `Foo.abi.yaml` has a companion `Foo.selectors.yaml` (function, event, and custom error selectors). Schema: `references/contracts/_rich-abi-yaml-format.md`. - -GoodDollar / Mento: - -- `references/contracts/NameService.abi.yaml` -- `references/contracts/IdentityV3.abi.yaml` -- `references/contracts/IdentityV4.abi.yaml` -- `references/contracts/InvitesV2.abi.yaml` -- `references/contracts/BuyGDCloneFactory.abi.yaml` -- `references/contracts/BuyGDCloneV2.abi.yaml` -- `references/contracts/GovernanceStakingV2.abi.yaml` -- `references/contracts/GooddollarSavingsStream.abi.yaml` (Ubeswap Superfluid stream savings; Celo deployment) -- `references/contracts/UBISchemeV2.abi.yaml` -- `references/contracts/MentoBroker.abi.yaml` -- `references/contracts/MessagePassingBridge.abi.yaml` -- `references/contracts/GoodDollarOFTAdapter.abi.yaml` -- `references/contracts/CFAv1Forwarder.abi.yaml` -- `references/contracts/ConstantFlowAgreementV1.abi.yaml` -- `references/contracts/Superfluid.abi.yaml` -- `references/contracts/SuperToken.abi.yaml` - -Superfluid (CFA, CFAv1Forwarder, Host, full ABI library): use [Superfluid docs](https://docs.superfluid.finance/), npm packages such as `@superfluid-finance/ethereum-contracts` and `@sfpro/sdk`, and contract ABIs published with those packages. - -## Deep researches - -- `references/deep-researches/on-off-ramp-service.md` -- `references/deep-researches/how-ubi-is-minted.md` -- `references/deep-researches/inviter-invitee-reward-model.md` -- `references/deep-researches/mento-reserve-economics.md` -- `references/deep-researches/gooddao-daostack-surface.md` -- `references/deep-researches/faucet-flows.md` -- `references/deep-researches/fuse-to-celo-staking-migration.md` - -## Revert debugging quick map - -- Identity or eligibility errors -> Identity and UBIScheme ABIs; live addresses from `deployment.json` only; GoodDocs for whitelist and claim behavior. -- Approval or transfer failures -> token approvals and balances; see integration guide for `transferAndCall` vs `approve` plus `transferFrom`. -- Swap bound failures -> quote freshness and slippage settings. -- MessagePassingBridge failures -> `canBridge`; **`BRIDGE_LIMITS`** (amount caps, whitelist, **`closed`**, and related policy strings); transport `msg.value` (`MISSING_FEE`, `LZ_FEE`) vs destination protocol fee (`bridgeFees`, `feeRecipient`); correct `bridgeTo` arguments; [Bridge GoodDollars](https://docs.gooddollar.org/user-guides/bridge-gooddollars). -- OFT path failures -> peer wiring and `quoteSend` fee data. -- Stream failures -> CFA forwarder or host agreement calls, buffer and flow-rate limits per Superfluid docs linked from GoodDocs. -- Faucet top-up failures -> `canTop`, `onlyAuthorized`, daily or weekly caps; `references/deep-researches/faucet-flows.md`. -- DAO-gated reverts -> caller is not avatar; scheme not registered; `references/deep-researches/gooddao-daostack-surface.md`. - -## Library usage discipline - -1. Open `references/guides/gooddocs.md` when unsure which GoodDocs page applies. -2. Start at this file to classify intent. -3. Open one guide under `references/guides/` unless the user requests a multi-step workflow. For subgraph or indexed-data tasks, start at `references/subgraphs/_query-patterns.md`. -4. Read only the ABI references and matching `.selectors.yaml` files needed for the chosen action. -5. Prefer GoodDocs for documented behavior; use only `deployment.json` (and rich ABI `meta.deployments` aligned with it) for contract addresses—never infer addresses from GoodDocs. -6. For large historical reads, prefer `references/guides/hypersync-hyperrpc.md` and choose HyperSync over HyperRPC unless strict JSON-RPC compatibility is required. -7. Historical data routing is strict: subgraphs first; HyperSync or HyperRPC only with an explicit fallback reason. -8. HyperRPC usage requires Envio API key credentials; when absent, **explicitly ask the user** for `HYPERRPC_API_TOKEN` or `ENVIO_API_TOKEN` (or a full `HYPERRPC_URL`) and do not attempt anonymous production flow. -9. When HyperSync is the best historical-data path and no Envio API token is available, explicitly ask the user to provide `ENVIO_API_TOKEN` (or the token your client expects) before continuing; see `references/guides/hypersync-hyperrpc.md`. -10. For subgraph tasks, validate field availability from the relevant `references/subgraphs/*-guide.md` and companion `.graphql` before guessing alternate entities. -11. For local shells repeating HyperRPC log pulls (for example last N whitelist events), from the **GoodSkills repository root** run `scripts/fetch-whitelist-events-hyperrpc.mjs` per `references/guides/hypersync-hyperrpc.md` instead of re-deriving JSON-RPC setup each time; that script ships with **defaults for production Celo** (HyperRPC host + `Identity` contract from `deployment.json`) and URL composition from `HYPERRPC_API_TOKEN` or `ENVIO_API_TOKEN` unless you override `CONTRACT_ADDRESS` / `HYPERRPC_URL`. HyperSync remains a separate client install path documented in the same guide. diff --git a/.agents/skills/gooddollar/references/contracts/BuyGDCloneFactory.abi.yaml b/.agents/skills/gooddollar/references/contracts/BuyGDCloneFactory.abi.yaml deleted file mode 100644 index 40226b3..0000000 --- a/.agents/skills/gooddollar/references/contracts/BuyGDCloneFactory.abi.yaml +++ /dev/null @@ -1,205 +0,0 @@ -meta: - name: BuyGDCloneFactory - version: "1" - source: - - https://raw.githubusercontent.com/GoodDollar/GoodProtocol/master/contracts/utils/BuyGDClone.sol - note: > - Deterministic clone factory for BuyGDCloneV2 and DonateGDClone. Used to create per-owner - executors and optional create+swap flows for ramp services. - deployments: - mainnet: - production-celo: - BuyGDFactoryV2: - networkId: 42220 - address: "0x1F60C4C7037C6766924A43666B781ED1479587a2" - creationBlock: 22909812 - BuyGDFactory: - networkId: 42220 - address: "0x00e533B7d6255D05b7f15034B1c989c21F51b91C" - creationBlock: 21006324 - related: - - references/deep-researches/on-off-ramp-service.md - - references/guides/on-off-ramp.md - -create: - notes: - - "Deploys deterministic BuyGDCloneV2 clone for owner and initializes it." - - "Difference vs createAndSwap: this only deploys; no swap is executed." - mutability: nonpayable - access: anyone - inputs: - - owner: address - outputs: - - clone: address - -createDonation: - notes: - - "Deploys deterministic DonateGDClone with donation target and call payload." - - "Difference vs create: deploys donation-capable implementation instead of plain swap clone." - mutability: nonpayable - access: anyone - inputs: - - owner: address - - donateOrExecTo: address - - callData: bytes - outputs: - - clone: address - -createAndSwap: - notes: - - "One-transaction helper: create BuyGDCloneV2 then immediately call clone.swap(minAmount, msg.sender)." - - "Difference vs create: bundles deployment and first swap for faster ramp UX." - mutability: nonpayable - access: anyone - inputs: - - owner: address - - minAmount: uint256 - outputs: - - clone: address - -createDonationAndSwap: - notes: - - "One-transaction helper for DonateGDClone: deploy, then execute donation flow with optional pre-swap." - - "Difference vs createDonation: can execute immediate swap and/or target call instead of deployment only." - mutability: nonpayable - access: anyone - inputs: - - owner: address - - donateOrExecTo: address - - withSwap: bool - - minAmount: uint256 - - callData: bytes - outputs: - - clone: address - -predict: - notes: - - "Computes deterministic address for create(owner) salt." - mutability: view - inputs: - - owner: address - outputs: - - clone: address - -predictDonation: - notes: - - "Computes deterministic address for createDonation(owner, donateOrExecTo, callData) salt." - mutability: view - inputs: - - owner: address - - donateOrExecTo: address - - callData: bytes - outputs: - - clone: address - -getBaseFee: - mutability: view - inputs: [] - outputs: - - baseFee: uint256 - -quoter: - mutability: pure - inputs: [] - outputs: - - addr: address - -CUSD: - mutability: pure - inputs: [] - outputs: - - token: address - -celo: - mutability: pure - inputs: [] - outputs: - - token: address - -USDC: - mutability: pure - inputs: [] - outputs: - - token: address - -GLOUSD: - mutability: pure - inputs: [] - outputs: - - token: address - -PERIOD: - mutability: pure - inputs: [] - outputs: - - seconds: uint24 - -impl: - mutability: view - inputs: [] - outputs: - - addr: address - -donateImpl: - mutability: view - inputs: [] - outputs: - - addr: address - -gd: - mutability: view - inputs: [] - outputs: - - token: address - -stable: - mutability: view - inputs: [] - outputs: - - token: address - -oracle: - mutability: view - inputs: [] - outputs: - - addr: address - -router: - mutability: view - inputs: [] - outputs: - - addr: address - -mentoBroker: - mutability: view - inputs: [] - outputs: - - addr: address - -mentoExchangeProvider: - mutability: view - inputs: [] - outputs: - - addr: address - -mentoExchangeId: - mutability: view - inputs: [] - outputs: - - id: bytes32 - -events: - GDSwapToCusd: - indexed: [] - data: - - from: address - - to: address - - amountIn: uint256 - - amountOut: uint256 - - note: bytes - -errors: - NOT_GD_TOKEN: "onTokenTransfer caller is not G$ token." - INVALID_TWAP: "TWAP validation failed." - RECIPIENT_ZERO: "Recipient cannot be zero address." - ZERO_MINAMOUNT: "Minimum amount cannot be zero." diff --git a/.agents/skills/gooddollar/references/contracts/BuyGDCloneFactory.selectors.yaml b/.agents/skills/gooddollar/references/contracts/BuyGDCloneFactory.selectors.yaml deleted file mode 100644 index 16b13f2..0000000 --- a/.agents/skills/gooddollar/references/contracts/BuyGDCloneFactory.selectors.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Generated by scripts/selectors.mjs -functions: - create(address): 0x9ed93318 - createDonation(address,address,bytes): 0x48199e6b - createAndSwap(address,uint256): 0x89643a29 - createDonationAndSwap(address,address,bool,uint256,bytes): 0xeb5621b8 - predict(address): 0x901b96e7 - predictDonation(address,address,bytes): 0x3895de30 - getBaseFee(): 0x15e812ad - quoter(): 0xc6bbd5a7 - CUSD(): 0x758316c9 - celo(): 0x051ed8ef - USDC(): 0x89a30271 - GLOUSD(): 0x4b5b02d6 - PERIOD(): 0xb4d1d795 - impl(): 0x8abf6077 - donateImpl(): 0x21fc2eef - gd(): 0xa5e598fc - stable(): 0x22be3de1 - oracle(): 0x7dc0d1d0 - router(): 0xf887ea40 - mentoBroker(): 0x7b89f117 - mentoExchangeProvider(): 0x4f62feec - mentoExchangeId(): 0xd373b333 -events: - GDSwapToCusd(address,address,uint256,uint256,bytes): 0x252bc23e3fb01f9986fa157af621236fb8a706ea12622da296e7f2f30d4f1a56 -errors: {} diff --git a/.agents/skills/gooddollar/references/contracts/BuyGDCloneV2.abi.yaml b/.agents/skills/gooddollar/references/contracts/BuyGDCloneV2.abi.yaml deleted file mode 100644 index 5f35ee9..0000000 --- a/.agents/skills/gooddollar/references/contracts/BuyGDCloneV2.abi.yaml +++ /dev/null @@ -1,282 +0,0 @@ -meta: - name: BuyGDCloneV2 - version: "2" - source: - - https://raw.githubusercontent.com/GoodDollar/GoodProtocol/master/contracts/utils/BuyGDClone.sol - inherits: - - Initializable - note: > - Clone implementation used by BuyGDCloneFactory for deterministic per-owner swap executors. - Supports CELO and cUSD flows, with cUSD route selection between Uniswap and Mento when configured. - deployments: - mainnet: - production-celo: - BuyGDFactoryV2: - networkId: 42220 - address: "0x1F60C4C7037C6766924A43666B781ED1479587a2" - creationBlock: 22909812 - related: - - references/deep-researches/on-off-ramp-service.md - - references/guides/on-off-ramp.md - -initialize: - mutability: nonpayable - access: initializer - inputs: - - _owner: address - outputs: [] - -getSwapPath: - mutability: pure - inputs: - - tokens: address[] - - fees: uint24[] - outputs: - - path: bytes - -swap: - notes: - - "Dispatcher entrypoint: if clone holds native CELO balance it executes CELO route, otherwise uses cUSD route." - - "Difference vs swapCelo/swapCusd: this function chooses route by contract balances; specialized functions force a specific asset path." - mutability: payable - access: anyone - inputs: - - _minAmount: uint256 - - refundGas: address - outputs: - - bought: uint256 - emits: [Bought] - errors: [NO_BALANCE] - -swapCelo: - notes: - - "CELO-only convenience path using the default preconfigured Uniswap route." - - "Difference vs swapCeloWithPath: same Uniswap execution, but caller cannot override token path and fee tiers." - - "Difference vs cUSD paths: CELO path does not use Mento route selection." - mutability: payable - access: anyone - inputs: - - _minAmount: uint256 - - refundGas: address - outputs: - - bought: uint256 - emits: [BoughtFromUniswap] - errors: [REFUND_FAILED] - -swapCeloWithPath: - notes: - - "CELO-only path with caller-supplied Uniswap multi-hop route." - - "Difference vs swapCelo: allows custom path optimization when default route is not preferred." - - "Difference vs cUSD paths: still Uniswap-only and does not compare against Mento." - mutability: payable - access: anyone - inputs: - - _minAmount: uint256 - - refundGas: address - - _path: (address[],uint24[]) - outputs: - - bought: uint256 - emits: [BoughtFromUniswap] - errors: [REFUND_FAILED] - -swapCusd: - notes: - - "cUSD-only convenience path that compares expected output from default-path Uniswap and Mento, then executes the better quote." - - "Difference vs swapCusdWithPath: this uses hardcoded default Uniswap path for comparison." - - "Difference vs CELO paths: includes dual-route best-execution logic with optional Mento." - mutability: nonpayable - access: anyone - inputs: - - _minAmount: uint256 - - refundGas: address - outputs: - - bought: uint256 - emits: [BoughtFromMento, BoughtFromUniswap] - errors: [MENTO_NOT_CONFIGURED] - -swapCusdWithPath: - notes: - - "cUSD path with caller-supplied Uniswap route; still compares custom Uniswap quote against Mento quote and picks larger expected output." - - "Difference vs swapCusd: custom path changes only the Uniswap side of the comparison." - - "Difference vs swapCeloWithPath: this function performs route competition (Uniswap vs Mento), not only route customization." - mutability: nonpayable - access: anyone - inputs: - - _minAmount: uint256 - - refundGas: address - - _path: (address[],uint24[]) - outputs: - - bought: uint256 - emits: [BoughtFromMento, BoughtFromUniswap] - errors: [MENTO_NOT_CONFIGURED] - -getExpectedReturnFromUniswapPath: - notes: - - "Quote helper for Uniswap path expected output used by cUSD route selection and preflight checks." - mutability: nonpayable - inputs: - - amountIn: uint256 - - _path: (address[],uint24[]) - outputs: - - expectedReturn: uint256 - -getExpectedReturnFromMento: - notes: - - "Quote helper for Mento expected output for cUSD->G$ used in best-route decision." - mutability: view - inputs: - - cusdAmount: uint256 - outputs: - - expectedReturn: uint256 - errors: [MENTO_NOT_CONFIGURED] - -minAmountByTWAP: - mutability: view - inputs: - - baseAmount: uint256 - - baseToken: address - - period: uint32 - outputs: - - minTwap: uint256 - - quote: uint256 - -recover: - mutability: nonpayable - access: anyone - inputs: - - token: address - outputs: [] - errors: [REFUND_FAILED] - -router: - mutability: view - inputs: [] - outputs: - - addr: address - -celo: - mutability: pure - inputs: [] - outputs: - - token: address - -CUSD: - mutability: pure - inputs: [] - outputs: - - token: address - -USDC: - mutability: pure - inputs: [] - outputs: - - token: address - -GLOUSD: - mutability: pure - inputs: [] - outputs: - - token: address - -GD_FEE_TIER: - mutability: pure - inputs: [] - outputs: - - tier: uint24 - -CUSD_STABLE_FEE_TIER: - mutability: pure - inputs: [] - outputs: - - tier: uint24 - -CELO_STABLE_FEE_TIER: - mutability: pure - inputs: [] - outputs: - - tier: uint24 - -twapPeriod: - mutability: view - inputs: [] - outputs: - - period: uint32 - -stable: - mutability: view - inputs: [] - outputs: - - token: address - -gd: - mutability: view - inputs: [] - outputs: - - token: address - -oracle: - mutability: view - inputs: [] - outputs: - - addr: address - -quoter: - mutability: view - inputs: [] - outputs: - - addr: address - -mentoBroker: - mutability: view - inputs: [] - outputs: - - addr: address - -mentoExchangeProvider: - mutability: view - inputs: [] - outputs: - - addr: address - -mentoExchangeId: - mutability: view - inputs: [] - outputs: - - id: bytes32 - -owner: - mutability: view - inputs: [] - outputs: - - addr: address - -CUSD_GAS_COSTS: - mutability: pure - inputs: [] - outputs: - - amount: uint256 - -events: - Bought: - indexed: [] - data: - - inToken: address - - inAmount: uint256 - - outAmount: uint256 - BoughtFromMento: - indexed: [] - data: - - inToken: address - - inAmount: uint256 - - outAmount: uint256 - BoughtFromUniswap: - indexed: [] - data: - - inToken: address - - inAmount: uint256 - - outAmount: uint256 - -errors: - REFUND_FAILED: "Refund call failed." - NO_BALANCE: "No CELO or cUSD available on clone." - MENTO_NOT_CONFIGURED: "Mento broker path not configured." diff --git a/.agents/skills/gooddollar/references/contracts/BuyGDCloneV2.selectors.yaml b/.agents/skills/gooddollar/references/contracts/BuyGDCloneV2.selectors.yaml deleted file mode 100644 index 1476ae3..0000000 --- a/.agents/skills/gooddollar/references/contracts/BuyGDCloneV2.selectors.yaml +++ /dev/null @@ -1,36 +0,0 @@ -# Generated by scripts/selectors.mjs -functions: - initialize(address): 0xc4d66de8 - getSwapPath(address[],uint24[]): 0xf0036d5d - swap(uint256,address): 0xd3986f08 - swapCelo(uint256,address): 0xaa6bfa9d - swapCeloWithPath(uint256,address,(address[],uint24[])): 0x81b7d2e0 - swapCusd(uint256,address): 0xb1a5fa9f - swapCusdWithPath(uint256,address,(address[],uint24[])): 0x170ba915 - getExpectedReturnFromUniswapPath(uint256,(address[],uint24[])): 0x12194320 - getExpectedReturnFromMento(uint256): 0xdbb15eb2 - minAmountByTWAP(uint256,address,uint32): 0x821dc910 - recover(address): 0x0cd865ec - router(): 0xf887ea40 - celo(): 0x051ed8ef - CUSD(): 0x758316c9 - USDC(): 0x89a30271 - GLOUSD(): 0x4b5b02d6 - GD_FEE_TIER(): 0xe00e8fdd - CUSD_STABLE_FEE_TIER(): 0xba428926 - CELO_STABLE_FEE_TIER(): 0x60e4bf4b - twapPeriod(): 0xf6207326 - stable(): 0x22be3de1 - gd(): 0xa5e598fc - oracle(): 0x7dc0d1d0 - quoter(): 0xc6bbd5a7 - mentoBroker(): 0x7b89f117 - mentoExchangeProvider(): 0x4f62feec - mentoExchangeId(): 0xd373b333 - owner(): 0x8da5cb5b - CUSD_GAS_COSTS(): 0x32f90ac3 -events: - Bought(address,uint256,uint256): 0xa9a40dec7a304e5915d11358b968c1e8d365992abf20f82285d1df1b30c8e24c - BoughtFromMento(address,uint256,uint256): 0x8e2ac24d7ef5662ee242823a19dbd1c952b3e96ae127228f4bbce83e2816e3fb - BoughtFromUniswap(address,uint256,uint256): 0xdb1f2a6cbbfd964f19c648b140a35992aa80f482df8f519d3211d0bd86c9f335 -errors: {} diff --git a/.agents/skills/gooddollar/references/contracts/CFAv1Forwarder.abi.yaml b/.agents/skills/gooddollar/references/contracts/CFAv1Forwarder.abi.yaml deleted file mode 100644 index 32ba0de..0000000 --- a/.agents/skills/gooddollar/references/contracts/CFAv1Forwarder.abi.yaml +++ /dev/null @@ -1,237 +0,0 @@ -# CFAv1Forwarder — convenience wrapper for ConstantFlowAgreementV1 -# Allows direct interaction with CFA functions without manually routing through -# the Host's batchCall / forwardBatchCall. Operates as a trusted forwarder, -# preserving msg.sender via EIP-2771. -# -# Each forwarder call is a standalone transaction — forwarder calls cannot be -# combined in a Host.batchCall. To batch multiple operations atomically (e.g. -# wrap tokens + create stream), use Host.batchCall with the raw CFA agreement -# (operationType 201). See Superfluid.abi.yaml for batch operation details. -# Tradeoff: forwarder calls produce human-readable descriptions in wallets -# (e.g. "setFlowrate(token, receiver, flowrate)"), while Host.batchCall -# shows encoded tuples that are difficult for users to verify. -# -# This contract has no events — all events are emitted by the underlying CFA. -# Errors from the CFA (and Host) propagate through to the caller. - -meta: - name: CFAv1Forwarder - version: v1 - source: - - https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/refs/heads/dev/packages/ethereum-contracts/contracts/utils/CFAv1Forwarder.sol - - https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/refs/heads/dev/packages/ethereum-contracts/contracts/utils/ForwarderBase.sol - inherits: [ForwarderBase] - deployments: - # Same address on all networks except avalanche-fuji - mainnet: - eth-mainnet: "0xcfA132E353cB4E398080B9700609bb008eceB125" - polygon-mainnet: "0xcfA132E353cB4E398080B9700609bb008eceB125" - xdai-mainnet: "0xcfA132E353cB4E398080B9700609bb008eceB125" - base-mainnet: "0xcfA132E353cB4E398080B9700609bb008eceB125" - optimism-mainnet: "0xcfA132E353cB4E398080B9700609bb008eceB125" - arbitrum-one: "0xcfA132E353cB4E398080B9700609bb008eceB125" - bsc-mainnet: "0xcfA132E353cB4E398080B9700609bb008eceB125" - avalanche-c: "0xcfA132E353cB4E398080B9700609bb008eceB125" - celo-mainnet: "0xcfA132E353cB4E398080B9700609bb008eceB125" - scroll-mainnet: "0xcfA132E353cB4E398080B9700609bb008eceB125" - degenchain: "0xcfA132E353cB4E398080B9700609bb008eceB125" - testnet: - avalanche-fuji: "0x2CDd45c5182602a36d391F7F16DD9f8386C3bD8D" - base-sepolia: "0xcfA132E353cB4E398080B9700609bb008eceB125" - eth-sepolia: "0xcfA132E353cB4E398080B9700609bb008eceB125" - optimism-sepolia: "0xcfA132E353cB4E398080B9700609bb008eceB125" - scroll-sepolia: "0xcfA132E353cB4E398080B9700609bb008eceB125" - deploymentCreationBlocks: - mainnet: - celo-mainnet: 17404156 - -# == Glossary == -# flowrate — token transfer rate in wad/second (int96) -# flowOperator — account authorized to create/update/delete flows on behalf of another -# buffer — deposit locked as solvency collateral while a flow is active -# permissions — bitmask of create | update | delete rights for an operator -# flowrateAllowance — max flowrate an operator may set per individual flow - -# == Flow Management == -# High-level functions that automatically create, update, or delete flows as needed. - -setFlowrate: - # Smart setter: creates a new flow if none exists, updates if flowrate changed, - # deletes if flowrate is zero. No-ops if the current rate already matches. - notes: - - "Gotcha: Negative flowrate values revert with CFA_FWD_INVALID_FLOW_RATE." - mutability: nonpayable - access: anyone # flow from msg.sender - inputs: - - token: address - - receiver: address - - flowrate: int96 # must be >= 0 - outputs: - - bool - errors: [CFA_FWD_INVALID_FLOW_RATE] - -setFlowrateFrom: - # Same as setFlowrate but can be called by a flow operator on behalf of `sender`. - # msg.sender must have sufficient operator permissions and flowrateAllowance. - mutability: nonpayable - access: sender | operator - inputs: - - token: address - - sender: address - - receiver: address - - flowrate: int96 - outputs: - - bool - errors: [CFA_FWD_INVALID_FLOW_RATE] - -# == Low-Level Flow Operations == -# Direct wrappers around CFA functions. These give full control (including userData) -# but require the caller to know whether a flow already exists. -# If sender != msg.sender, the *ByOperator variant is used internally. - -createFlow: - # Create a new flow. Reverts if a flow already exists between sender and receiver. - mutability: nonpayable - access: sender | operator - inputs: - - token: address - - sender: address - - receiver: address - - flowrate: int96 - - userData: bytes - outputs: - - bool - -updateFlow: - # Update an existing flow's rate. Reverts if no flow exists. - mutability: nonpayable - access: sender | operator - inputs: - - token: address - - sender: address - - receiver: address - - flowrate: int96 - - userData: bytes - outputs: - - bool - -deleteFlow: - # Delete an existing flow. Can be called by sender, receiver, or an operator. - # If msg.sender is neither sender nor receiver, deleteFlowByOperator is used. - mutability: nonpayable - access: sender | receiver | operator - inputs: - - token: address - - sender: address - - receiver: address - - userData: bytes - outputs: - - bool - -# == ACL (Operator Permissions) == - -grantPermissions: - # Grant full create/update/delete permissions with max flowrateAllowance to an operator. - # Convenience wrapper — equivalent to updateFlowOperatorPermissions with full control. - mutability: nonpayable - access: anyone # grants on msg.sender's flows - inputs: - - token: address - - flowOperator: address - outputs: - - bool - -revokePermissions: - # Revoke all permissions from an operator. Does not affect existing flows. - mutability: nonpayable - access: anyone # revokes on msg.sender's flows - inputs: - - token: address - - flowOperator: address - outputs: - - bool - -updateFlowOperatorPermissions: - # Set granular operator permissions and flowrate allowance. - notes: - - "Gotcha: flowrateAllowance limits per-flow rate, NOT aggregate net flow." - mutability: nonpayable - access: anyone # grants on msg.sender's flows - inputs: - - token: address - - flowOperator: address - - permissions: uint8 # bitmask: 1=create, 2=update, 4=delete - - flowrateAllowance: int96 - outputs: - - bool - -# == Flow Queries == - -getFlowrate: - mutability: view - inputs: - - token: address - - sender: address - - receiver: address - outputs: - - flowrate: int96 - -getFlowInfo: - mutability: view - inputs: - - token: address - - sender: address - - receiver: address - outputs: - - lastUpdated: uint256 - - flowrate: int96 - - deposit: uint256 - - owedDeposit: uint256 - -getBufferAmountByFlowrate: - # Returns the deposit/buffer required for a given flowrate. - notes: - - "Gotcha: This value is governance-configurable and may change over time. Changes only affect newly created/updated flows." - mutability: view - inputs: - - token: address - - flowrate: int96 - outputs: - - bufferAmount: uint256 - -getAccountFlowrate: - # Net aggregate flowrate for an account (incoming minus outgoing). - mutability: view - inputs: - - token: address - - account: address - outputs: - - flowrate: int96 - -getAccountFlowInfo: - mutability: view - inputs: - - token: address - - account: address - outputs: - - lastUpdated: uint256 - - flowrate: int96 - - deposit: uint256 - - owedDeposit: uint256 - -# == ACL Queries == - -getFlowOperatorPermissions: - mutability: view - inputs: - - token: address - - sender: address - - flowOperator: address - outputs: - - permissions: uint8 - - flowrateAllowance: int96 - -# == Errors == - -errors: - - CFA_FWD_INVALID_FLOW_RATE # flowrate argument was negative diff --git a/.agents/skills/gooddollar/references/contracts/CFAv1Forwarder.selectors.yaml b/.agents/skills/gooddollar/references/contracts/CFAv1Forwarder.selectors.yaml deleted file mode 100644 index f98e21e..0000000 --- a/.agents/skills/gooddollar/references/contracts/CFAv1Forwarder.selectors.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by scripts/selectors.mjs -functions: - setFlowrate(address,address): 0x2f57fb6f - setFlowrateFrom(address,address,address,int96): 0xc5ad5c1a - createFlow(address,address,address,int96,bytes): 0xe15536b6 - updateFlow(address,address,address,int96,bytes): 0x0c033991 - deleteFlow(address,address,address,bytes): 0xb4b333c6 - grantPermissions(address,address): 0x7243fb93 - revokePermissions(address,address): 0x0bd0728d - updateFlowOperatorPermissions(address,address): 0x42294caf - getFlowrate(address,address,address): 0x1d8b6526 - getFlowInfo(address,address,address): 0x2860fd93 - getBufferAmountByFlowrate(address,int96): 0x09f0b495 - getAccountFlowrate(address,address): 0x22c904d9 - getAccountFlowInfo(address,address): 0x0f1ac495 - getFlowOperatorPermissions(address,address,address): 0x4d3f60f9 -events: -{} -errors: {} diff --git a/.agents/skills/gooddollar/references/contracts/ConstantFlowAgreementV1.abi.yaml b/.agents/skills/gooddollar/references/contracts/ConstantFlowAgreementV1.abi.yaml deleted file mode 100644 index afaec5d..0000000 --- a/.agents/skills/gooddollar/references/contracts/ConstantFlowAgreementV1.abi.yaml +++ /dev/null @@ -1,560 +0,0 @@ -# Superfluid Constant Flow Agreement (CFA) v1 -# Manages continuous per-second token streams between accounts. -# -# NOTE: emits/errors mappings are traced from source code — verify against implementation. -# Proxy/upgradability functions (castrate, updateCode, getCodeAddress, proxiableUUID) -# are omitted — they belong to the UUPSProxiable / AgreementBase layer. -# Pure helpers addPermissions/removePermissions are omitted — they were made public -# for testability only and are not part of the protocol interface. - -meta: - name: ConstantFlowAgreementV1 - version: v1 - source: - - https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/refs/heads/dev/packages/ethereum-contracts/contracts/agreements/ConstantFlowAgreementV1.sol - - https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/refs/heads/dev/packages/ethereum-contracts/contracts/interfaces/agreements/IConstantFlowAgreementV1.sol - - https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/refs/heads/dev/packages/ethereum-contracts/contracts/agreements/AgreementBase.sol - implements: [IConstantFlowAgreementV1, ISuperAgreement] - inherits: [AgreementBase] - deployments: - mainnet: - eth-mainnet: "0x2844c1BBdA121E9E43105630b9C8310e5c72744b" - polygon-mainnet: "0x6EeE6060f715257b970700bc2656De21dEdF074C" - xdai-mainnet: "0xEbdA4ceF883A7B12c4E669Ebc58927FBa8447C7D" - base-mainnet: "0x19ba78B9cDB05A877718841c574325fdB53601bb" - optimism-mainnet: "0x204C6f131bb7F258b2Ea1593f5309911d8E458eD" - arbitrum-one: "0x731FdBB12944973B500518aea61942381d7e240D" - bsc-mainnet: "0x49c38108870e74Cb9420C0991a85D3edd6363F75" - avalanche-c: "0x6946c5B38Ffea373b0a2340b4AEf0De8F6782e58" - celo-mainnet: "0x9d369e78e1a682cE0F8d9aD849BeA4FE1c3bD3Ad" - scroll-mainnet: "0xB3bcD6da1eeB6c97258B3806A853A6dcD3B6C00c" - degenchain: "0x82cc052d1b17aC554a22A88D5876B56c6b51e95c" - testnet: - avalanche-fuji: "0x16843ac25Ccc58Aa7960ba05f61cBB17b36b130A" - base-sepolia: "0x6836F23d6171D74Ef62FcF776655aBcD2bcd62Ef" - eth-sepolia: "0x6836F23d6171D74Ef62FcF776655aBcD2bcd62Ef" - optimism-sepolia: "0x8a3170AdbC67233196371226141736E4151e7C26" - scroll-sepolia: "0xbc46B4Aa41c055578306820013d4B65fff42711E" - deploymentCreationBlocks: - mainnet: - celo-mainnet: 16393492 - -# == Abbreviations == -# 3Ps — Three Periods: liquidation, patrician, and pleb (solvency model) -# ACL — Access Control List (flow operator permissions) -# CFA — Constant Flow Agreement -# ctx — context (Superfluid call context bytes, carries msg.sender and userData) -# GDA — General Distribution Agreement (the other Superfluid agreement) -# PPP — Patrician-Pleb-Pirate (the 3Ps solvency periods) - -# == Glossary == -# flow / stream — continuous per-second token transfer, used interchangeably -# flowRate — tokens per second (int96, wei-denominated); positive = outgoing -# deposit — buffer locked when opening a flow; protects against insolvency -# owed deposit — portion of deposit owed back to the sender by a Super App receiver -# flow operator — an address authorized to create/update/delete flows on behalf of a sender -# flow rate allowance — maximum net flow rate an operator may allocate (int96); decrements on use -# permissions bitmask — uint8: bit 0 = create (1), bit 1 = update (2), bit 2 = delete (4) -# liquidation — closing an insolvent sender's flow; rewards go to the liquidator or bond -# patrician period — grace window after insolvency where reward goes to the bond account -# pleb period — window after patrician where reward goes to the liquidator -# pirate / bailout — state where total deposit cannot cover the deficit; protocol bails out -# Super App — a contract registered with the Host that receives agreement callbacks -# app credit — deposit credit enabling "zero-balance Super Apps" to relay flows -# without pre-funded tokens. 1:1 relay (one in, one out at same rate) -# always works at zero balance. Fan-out (1:N) needs the app to hold -# tokens. Credit is settled as "owed deposit" on the original sender. -# critical — an account whose available balance is negative (eligible for liquidation) -# jailed — a Super App penalized for violating protocol rules; loses callbacks -# -# == Time Conventions == -# Conventional seconds-per-period used in Superfluid apps for flow rate conversion: -# month: 2628000 (365.25 / 12 * 86400) -# year: 31536000 (365 * 86400) -# Flow rate from a monthly amount: flowRate = monthlyAmount / 2628000 -# Flow rate from a yearly amount: flowRate = yearlyAmount / 31536000 - -# == Flow Management == -# Core operations for creating, updating, and deleting token streams. -# Functions with ctx are called through the Host — either via -# Host.callAgreement (single op) or Host.batchCall (operationType 201). -# For batchCall, the data field is abi.encode(callData, userData) where -# callData is the full ABI-encoded function call with an empty ctx ("0x") -# as placeholder. The Host replaces the placeholder with the real context. -# The access field reflects who can initiate the call, not the direct caller. - -createFlow: - # Start a new stream from ctx.msgSender to receiver. - # The deposit amount depends on the governance-configured liquidation period - # and minimum deposit. The lower 32 bits of the deposit are clipped (rounded up). - notes: - - "Gotcha: A deposit is taken as a safety margin for solvency agents." - mutability: nonpayable - access: anyone # flow from ctx.msgSender - inputs: - - token: address - - receiver: address - - flowRate: int96 # must be > 0 - - ctx: bytes - outputs: - - newCtx: bytes - emits: [FlowUpdated, FlowUpdatedExtension] - errors: [CFA_ZERO_ADDRESS_RECEIVER, CFA_NO_SELF_FLOW, CFA_INVALID_FLOW_RATE, CFA_FLOW_ALREADY_EXISTS, CFA_INSUFFICIENT_BALANCE] - -updateFlow: - # Change the flow rate of an existing stream from ctx.msgSender to receiver. - # Note: owedDeposit accumulates when a Super App receiver uses app credit to - # open outgoing streams. The sender bears the deposit cost for those streams. - notes: - - "Gotcha: Deposit is adjusted to match the new flow rate but never refunds owed deposit — that adjustment happens separately via the app credit system." - mutability: nonpayable - access: anyone # flow from ctx.msgSender - inputs: - - token: address - - receiver: address - - flowRate: int96 # must be > 0 - - ctx: bytes - outputs: - - newCtx: bytes - emits: [FlowUpdated, FlowUpdatedExtension] - errors: [CFA_ZERO_ADDRESS_RECEIVER, CFA_NO_SELF_FLOW, CFA_INVALID_FLOW_RATE, CFA_FLOW_DOES_NOT_EXIST, CFA_INSUFFICIENT_BALANCE] - -deleteFlow: - # Stop a stream between sender and receiver. - # During liquidation the reward distribution depends on the solvency period: - # patrician → bond account gets reward; pleb → liquidator gets reward; - # pirate → liquidator gets full single deposit, protocol covers the bailout. - notes: - - "Gotcha: Third-party callers (not sender, receiver, or operator) only succeed if the sender is critical (negative available balance) or either party is jailed." - mutability: nonpayable - access: sender | receiver | operator | anyone(if-critical-or-jailed) - inputs: - - token: address - - sender: address - - receiver: address - - ctx: bytes - outputs: - - newCtx: bytes - emits: [FlowUpdated, FlowUpdatedExtension] - errors: [CFA_ZERO_ADDRESS_SENDER, CFA_ZERO_ADDRESS_RECEIVER, CFA_FLOW_DOES_NOT_EXIST, CFA_NON_CRITICAL_SENDER] - -# == Operator Flow Management == -# Act on behalf of another account. Requires ACL permissions granted by the sender. -# The operator's flow rate allowance is decremented on create/update. -# Functions with ctx are called through the Host. - -createFlowByOperator: - # Create a flow on behalf of sender. Consumes flow rate allowance. - notes: - - "Gotcha: Reverts if ctx.msgSender IS the sender — use createFlow instead." - mutability: nonpayable - access: operator - inputs: - - token: address - - sender: address - - receiver: address - - flowRate: int96 # must be > 0 - - ctx: bytes - outputs: - - newCtx: bytes - emits: [FlowUpdated, FlowUpdatedExtension] - errors: [CFA_ACL_NO_SENDER_CREATE, CFA_ACL_OPERATOR_NO_CREATE_PERMISSIONS, CFA_ACL_FLOW_RATE_ALLOWANCE_EXCEEDED, CFA_ZERO_ADDRESS_RECEIVER, CFA_NO_SELF_FLOW, CFA_INVALID_FLOW_RATE, CFA_FLOW_ALREADY_EXISTS, CFA_INSUFFICIENT_BALANCE] - -updateFlowByOperator: - # Update a flow on behalf of sender. Only consumes allowance if flow rate increases. - # If flowRateAllowance is type(int96).max, it is treated as unlimited. - notes: - - "Gotcha: If the new rate is lower than the old rate, no allowance is consumed." - mutability: nonpayable - access: operator - inputs: - - token: address - - sender: address - - receiver: address - - flowRate: int96 # must be > 0 - - ctx: bytes - outputs: - - newCtx: bytes - emits: [FlowUpdated, FlowUpdatedExtension] - errors: [CFA_ACL_NO_SENDER_UPDATE, CFA_ACL_OPERATOR_NO_UPDATE_PERMISSIONS, CFA_ACL_FLOW_RATE_ALLOWANCE_EXCEEDED, CFA_ZERO_ADDRESS_RECEIVER, CFA_NO_SELF_FLOW, CFA_INVALID_FLOW_RATE, CFA_FLOW_DOES_NOT_EXIST, CFA_INSUFFICIENT_BALANCE] - -deleteFlowByOperator: - # Delete a flow on behalf of sender. Does not consume flow rate allowance. - mutability: nonpayable - access: operator - inputs: - - token: address - - sender: address - - receiver: address - - ctx: bytes - outputs: - - newCtx: bytes - emits: [FlowUpdated, FlowUpdatedExtension] - errors: [CFA_ACL_OPERATOR_NO_DELETE_PERMISSIONS, CFA_ZERO_ADDRESS_SENDER, CFA_ZERO_ADDRESS_RECEIVER, CFA_FLOW_DOES_NOT_EXIST, CFA_NON_CRITICAL_SENDER] - -# == Flow Queries == - -realtimeBalanceOf: - # Compute the real-time CFA balance contribution for an account. - # Returns the dynamic balance delta (flowRate * elapsed), total deposit held, - # and total owed deposit. This is called by the token's realtimeBalanceOfNow - # to assemble the full balance across all agreements. - # To get an account's actual token balance, use SuperToken.realtimeBalanceOfNow - # (or SuperToken.balanceOf for ERC-20 compatible, clamped to zero). - # It can be deeply negative for net-outflow accounts as time progresses. - notes: - - "Gotcha: Returns only the CFA portion of the balance, not the total." - - "Gotcha: The returned dynamicBalance is a delta, not an absolute balance." - mutability: view - inputs: - - token: address - - account: address - - time: uint256 - outputs: - - dynamicBalance: int256 # flowRate * (time - lastUpdate); can be negative - - deposit: uint256 # total deposit locked across all outflows - - owedDeposit: uint256 # total owed deposit from Super App receivers - -getFlow: - # Get flow data between a specific sender-receiver pair. - mutability: view - inputs: - - token: address - - sender: address - - receiver: address - outputs: - - timestamp: uint256 # last update time - - flowRate: int96 - - deposit: uint256 - - owedDeposit: uint256 - -getFlowByID: - # Get flow data using the agreement ID (keccak256 of sender and receiver). - mutability: view - inputs: - - token: address - - flowId: bytes32 # keccak256(abi.encode(sender, receiver)) - outputs: - - timestamp: uint256 - - flowRate: int96 - - deposit: uint256 - - owedDeposit: uint256 - -getAccountFlowInfo: - # Aggregated flow state for an account across all its CFA flows. - mutability: view - inputs: - - token: address - - account: address - outputs: - - timestamp: uint256 # last time any flow was updated for this account - - flowRate: int96 # net flow rate (inflows - outflows) - - deposit: uint256 # sum of deposits across all outflows - - owedDeposit: uint256 # sum of owed deposits across all outflows - -getNetFlow: - # Net flow rate for an account (sum of inflows minus outflows). - mutability: view - inputs: - - token: address - - account: address - outputs: - - flowRate: int96 - -# == ACL Management == -# Manage flow operator permissions and flow rate allowances. -# The caller (ctx.msgSender) is always the permission granter — they control -# who can operate on their own flows. -# Functions with ctx are called through the Host. - -updateFlowOperatorPermissions: - # Set exact permissions and flow rate allowance for a flow operator. - mutability: nonpayable - access: anyone # grants on ctx.msgSender's flows - inputs: - - token: address - - flowOperator: address - - permissions: uint8 # bitmask: 1=create, 2=update, 4=delete - - flowRateAllowance: int96 - - ctx: bytes - outputs: - - newCtx: bytes - emits: [FlowOperatorUpdated] - errors: [CFA_ACL_UNCLEAN_PERMISSIONS, CFA_ACL_NO_SENDER_FLOW_OPERATOR, CFA_ACL_NO_NEGATIVE_ALLOWANCE] - -authorizeFlowOperatorWithFullControl: - # Grant all permissions (create+update+delete) with unlimited allowance. - # Shorthand for updateFlowOperatorPermissions(token, op, 7, type(int96).max, ctx). - mutability: nonpayable - access: anyone # grants on ctx.msgSender's flows - inputs: - - token: address - - flowOperator: address - - ctx: bytes - outputs: - - newCtx: bytes - emits: [FlowOperatorUpdated] - errors: [CFA_ACL_UNCLEAN_PERMISSIONS, CFA_ACL_NO_SENDER_FLOW_OPERATOR, CFA_ACL_NO_NEGATIVE_ALLOWANCE] - -revokeFlowOperatorWithFullControl: - # Revoke all permissions and set allowance to zero. - # Shorthand for updateFlowOperatorPermissions(token, op, 0, 0, ctx). - mutability: nonpayable - access: anyone # revokes on ctx.msgSender's flows - inputs: - - token: address - - flowOperator: address - - ctx: bytes - outputs: - - newCtx: bytes - emits: [FlowOperatorUpdated] - errors: [CFA_ACL_UNCLEAN_PERMISSIONS, CFA_ACL_NO_SENDER_FLOW_OPERATOR, CFA_ACL_NO_NEGATIVE_ALLOWANCE] - -increaseFlowRateAllowance: - # Increase flow rate allowance for an operator by a delta. - # Delegates to increaseFlowRateAllowanceWithPermissions with permissionsToAdd=0. - mutability: nonpayable - access: anyone # ctx.msgSender's allowance - inputs: - - token: address - - flowOperator: address - - addedFlowRateAllowance: int96 - - ctx: bytes - outputs: - - newCtx: bytes - emits: [FlowOperatorUpdated] - errors: [CFA_ACL_UNCLEAN_PERMISSIONS, CFA_ACL_NO_SENDER_FLOW_OPERATOR, CFA_ACL_NO_NEGATIVE_ALLOWANCE] - -decreaseFlowRateAllowance: - # Decrease flow rate allowance for an operator by a delta. - # Delegates to decreaseFlowRateAllowanceWithPermissions with permissionsToRemove=0. - mutability: nonpayable - access: anyone # ctx.msgSender's allowance - inputs: - - token: address - - flowOperator: address - - subtractedFlowRateAllowance: int96 - - ctx: bytes - outputs: - - newCtx: bytes - emits: [FlowOperatorUpdated] - errors: [CFA_ACL_UNCLEAN_PERMISSIONS, CFA_ACL_NO_SENDER_FLOW_OPERATOR, CFA_ACL_NO_NEGATIVE_ALLOWANCE] - -increaseFlowRateAllowanceWithPermissions: - # Increase flow rate allowance and add permission bits in one call. - # permissionsToAdd is OR'd with existing permissions. - mutability: nonpayable - access: anyone # ctx.msgSender's allowance - inputs: - - token: address - - flowOperator: address - - permissionsToAdd: uint8 # bitmask OR'd onto existing permissions - - addedFlowRateAllowance: int96 - - ctx: bytes - outputs: - - newCtx: bytes - emits: [FlowOperatorUpdated] - errors: [CFA_ACL_UNCLEAN_PERMISSIONS, CFA_ACL_NO_SENDER_FLOW_OPERATOR, CFA_ACL_NO_NEGATIVE_ALLOWANCE] - -decreaseFlowRateAllowanceWithPermissions: - # Decrease flow rate allowance and remove permission bits in one call. - # permissionsToRemove is AND-NOT'd from existing permissions. - notes: - - "Gotcha: Reverts if the resulting allowance would go negative." - mutability: nonpayable - access: anyone # ctx.msgSender's allowance - inputs: - - token: address - - flowOperator: address - - permissionsToRemove: uint8 # bitmask AND-NOT'd from existing permissions - - subtractedFlowRateAllowance: int96 - - ctx: bytes - outputs: - - newCtx: bytes - emits: [FlowOperatorUpdated] - errors: [CFA_ACL_UNCLEAN_PERMISSIONS, CFA_ACL_NO_SENDER_FLOW_OPERATOR, CFA_ACL_NO_NEGATIVE_ALLOWANCE] - -# == ACL Queries == - -getFlowOperatorData: - # Get permissions and allowance for a flow operator. - mutability: view - inputs: - - token: address - - sender: address # the permission granter - - flowOperator: address # the permission grantee - outputs: - - flowOperatorId: bytes32 # keccak256(abi.encode("flowOperator", sender, flowOperator)) - - permissions: uint8 # bitmask: 1=create, 2=update, 4=delete - - flowRateAllowance: int96 - -getFlowOperatorDataByID: - # Get permissions and allowance using the pre-computed operator ID. - mutability: view - inputs: - - token: address - - flowOperatorId: bytes32 - outputs: - - permissions: uint8 - - flowRateAllowance: int96 - -# == Solvency Queries == -# Check whether an account is in the patrician period (grace window for liquidation). - -isPatricianPeriodNow: - # Check patrician period status using the Host's current timestamp. - mutability: view - inputs: - - token: address - - account: address - outputs: - - isCurrentlyPatricianPeriod: bool - - timestamp: uint256 # the Host's block.timestamp used for the check - -isPatricianPeriod: - # Check patrician period status at a specific timestamp. - mutability: view - inputs: - - token: address - - account: address - - timestamp: uint256 - outputs: - - bool - -# == Deposit Helpers == - -getMaximumFlowRateFromDeposit: - # Calculate the maximum flow rate achievable with a given deposit. - notes: - - "Gotcha: Deposit is clipped (lower 32 bits zeroed) and rounded down." - mutability: view - inputs: - - token: address # needed to look up liquidation period from governance - - deposit: uint256 - outputs: - - flowRate: int96 - errors: [CFA_DEPOSIT_TOO_BIG] - -getDepositRequiredForFlowRate: - # Calculate the deposit required for a given flow rate. - # Returns max(minimumDeposit, flowRate * liquidationPeriod) with rounding. - mutability: view - inputs: - - token: address # needed to look up liquidation period and minimum deposit - - flowRate: int96 - outputs: - - deposit: uint256 - errors: [CFA_INVALID_FLOW_RATE, CFA_FLOW_RATE_TOO_BIG] - -# == Protocol Constants == - -agreementType: - # Returns keccak256("org.superfluid-finance.agreements.ConstantFlowAgreement.v1") - mutability: pure - outputs: - - bytes32 - -DEFAULT_MINIMUM_DEPOSIT: - # Minimum deposit floor: uint96(1 << 32) ≈ 4.29 * 10^9 wei. - # Governance may set a higher per-token minimum; this is the absolute floor. - mutability: view - outputs: - - uint256 - -MAXIMUM_DEPOSIT: - # Maximum deposit cap: type(int96).max - mutability: view - outputs: - - uint256 - -MAXIMUM_FLOW_RATE: - # Maximum flow rate: type(int96).max - mutability: view - outputs: - - uint256 - -CFA_HOOK_GAS_LIMIT: - # Gas limit for external hook calls (Super App callbacks): 250,000 - mutability: view - outputs: - - uint64 - -# == Events == - -events: - FlowUpdated: - # Emitted on every create, update, and delete flow operation. - # totalSenderFlowRate and totalReceiverFlowRate are the NET flow rates - # after the operation, not the individual flow rate. - notes: - - "Gotcha: Always emitted together with FlowUpdatedExtension." - indexed: - - token: address - - sender: address - - receiver: address - data: - - flowRate: int96 # new rate for this specific flow (0 on delete) - - totalSenderFlowRate: int256 # sender's net flow rate after this operation - - totalReceiverFlowRate: int256 - - userData: bytes - - FlowUpdatedExtension: - # Companion event to FlowUpdated. Carries the operator and new deposit. - # Emitted immediately after FlowUpdated so indexers can correlate them. - indexed: - - flowOperator: address # ctx.msgSender who initiated the operation - data: - - deposit: uint256 # new deposit for this specific flow - - FlowOperatorUpdated: - # Emitted when operator permissions or flow rate allowance change. - indexed: - - token: address - - sender: address # the permission granter - - flowOperator: address # the permission grantee - data: - - permissions: uint8 # updated bitmask - - flowRateAllowance: int96 # updated allowance - - # Inherited events (from AgreementBase / UUPSProxiable): - # CodeUpdated — emitted on proxy upgrade (uuid, codeAddress) - # Initialized — emitted on proxy initialization (version) - -# == Errors == - -errors: - # Flow validation - - CFA_FLOW_ALREADY_EXISTS # createFlow when flow exists - - CFA_FLOW_DOES_NOT_EXIST # update/delete when no flow - - CFA_INVALID_FLOW_RATE # flowRate <= 0 - - CFA_NO_SELF_FLOW # sender == receiver - - CFA_ZERO_ADDRESS_SENDER # sender is address(0) - - CFA_ZERO_ADDRESS_RECEIVER # receiver is address(0) - # Solvency - - CFA_INSUFFICIENT_BALANCE # sender cannot cover deposit - - CFA_NON_CRITICAL_SENDER # third-party delete but sender is solvent - - CFA_DEPOSIT_TOO_BIG # deposit > MAXIMUM_DEPOSIT - - CFA_FLOW_RATE_TOO_BIG # flowRate * liquidationPeriod overflows - # ACL - - CFA_ACL_FLOW_RATE_ALLOWANCE_EXCEEDED # operator exceeds granted allowance - - CFA_ACL_NO_NEGATIVE_ALLOWANCE # resulting allowance would be < 0 - - CFA_ACL_NO_SENDER_CREATE # operator cannot be the sender (use createFlow) - - CFA_ACL_NO_SENDER_FLOW_OPERATOR # cannot set yourself as your own operator - - CFA_ACL_NO_SENDER_UPDATE # operator cannot be the sender (use updateFlow) - - CFA_ACL_OPERATOR_NO_CREATE_PERMISSIONS - - CFA_ACL_OPERATOR_NO_DELETE_PERMISSIONS - - CFA_ACL_OPERATOR_NO_UPDATE_PERMISSIONS - - CFA_ACL_UNCLEAN_PERMISSIONS # permission bits outside valid range - # Super App / Host - - CFA_HOOK_OUT_OF_GAS # Super App callback exceeded gas limit - - APP_RULE: # Super App rule violation - inputs: - - _code: uint256 - - AGREEMENT_BASE_ONLY_HOST # call not routed through the Host contract - # SafeCast (inherited from OpenZeppelin) - - SafeCastOverflowedIntToUint: # int256 value overflows on cast to uint256 - inputs: - - value: int256 - - SafeCastOverflowedUintToInt: # uint256 value overflows on cast to int256 - inputs: - - value: uint256 diff --git a/.agents/skills/gooddollar/references/contracts/ConstantFlowAgreementV1.selectors.yaml b/.agents/skills/gooddollar/references/contracts/ConstantFlowAgreementV1.selectors.yaml deleted file mode 100644 index a929e06..0000000 --- a/.agents/skills/gooddollar/references/contracts/ConstantFlowAgreementV1.selectors.yaml +++ /dev/null @@ -1,33 +0,0 @@ -# Generated by scripts/selectors.mjs -functions: - createFlow(address,address): 0x7deac86a - updateFlow(address,address): 0xb6214437 - deleteFlow(address,address,address,bytes): 0xb4b333c6 - createFlowByOperator(address,address,address): 0x97b0b745 - updateFlowByOperator(address,address,address): 0xaea4dc29 - deleteFlowByOperator(address,address,address,bytes): 0x4c8b181f - realtimeBalanceOf(address,address,uint256): 0x9b2e48bc - getFlow(address,address,address): 0xe6a1e888 - getFlowByID(address): 0x4eccd8ac - getAccountFlowInfo(address,address): 0x0f1ac495 - getNetFlow(address,address): 0xe8e7e2d1 - updateFlowOperatorPermissions(address,address): 0x42294caf - authorizeFlowOperatorWithFullControl(address,address,bytes): 0x54b770e3 - revokeFlowOperatorWithFullControl(address,address,bytes): 0x062e56ec - increaseFlowRateAllowance(address,address,int96,bytes): 0xac5f5d00 - decreaseFlowRateAllowance(address,address,int96,bytes): 0x5f51fb23 - increaseFlowRateAllowanceWithPermissions(address,address): 0x5e6a4dc3 - decreaseFlowRateAllowanceWithPermissions(address,address): 0x8de39d9b - getFlowOperatorData(address): 0x5f13dbbc - getFlowOperatorDataByID(address,bytes32): 0x09d256ef - isPatricianPeriodNow(address,address): 0x4fe9c291 - isPatricianPeriod(address,address,uint256): 0x4b839e0b - getMaximumFlowRateFromDeposit(): 0x4ba52c34 - getDepositRequiredForFlowRate(): 0xcc111b9e - CFA_HOOK_GAS_LIMIT(): 0xbf3fbc28 -events: - FlowUpdated(address,address,address,int256,bytes): 0x8e3b8f31fe09d2ca20fa7f76ec574bc9fea49f16a91f1ca828154ea76e76a20a - FlowUpdatedExtension(): 0x9bf0b3e0199b411ca09607d040b7672430af5dae9d159b715c9f8004c876065f - FlowOperatorUpdated(address): 0x401d2cb05b3db80617d70aabf976f52d2a5dac64298eadeed7a81ad4bb5d4fdd - # Inherited events (from AgreementBase / UUPSProxiable)(): 0xcabfd4ad95e3bb803739ac513717fccee724fc0c5741e01cf84319a96120eefa -errors: {} diff --git a/.agents/skills/gooddollar/references/contracts/GoodDollarOFTAdapter.abi.yaml b/.agents/skills/gooddollar/references/contracts/GoodDollarOFTAdapter.abi.yaml deleted file mode 100644 index c60d498..0000000 --- a/.agents/skills/gooddollar/references/contracts/GoodDollarOFTAdapter.abi.yaml +++ /dev/null @@ -1,100 +0,0 @@ -# GoodDollarOFTAdapter — LayerZero V2 OFT adapter pattern bridging underlying G$ -# Exact bytecode lives in the GoodDollar OFT deployment; this documents the surface agents call. - -meta: - name: GoodDollarOFTAdapter - version: LayerZero-OFT-adapter (generic) - source: - - https://docs.layerzero.network/ - - https://github.com/LayerZero-Labs/devtools - note: > - Flow: optional peers(dstEid) check -> approve underlying to minterBurner if - MessagingFee, refundAddress) paying nativeFee in msg.value when applicable. - SendParam mirrors LayerZero OFT: dstEid, to (bytes32 padded recipient), - amountLD, minAmountLD, extraOptions, composeMsg, oftCmd. - Verify tuple field order and OFT revision against your deployed artifact before mainnet use. - Event names and topic0 hashes vary by OFT package version — pull from the deployment ABI. - related: - - references/guides/bridge.md - -token: - mutability: view - inputs: [] - outputs: - - underlyingToken: address - -minterBurner: - notes: - - "Underlying G$ must approve this spender when burning for cross-chain send." - mutability: view - inputs: [] - outputs: - - minterBurner: address - -oftVersion: - mutability: view - inputs: [] - outputs: - - interfaceId: bytes4 - - version: uint64 - -peers: - notes: - - "Returns bytes32 peer address configured for destination endpoint id." - mutability: view - inputs: - - dstEid: uint32 - outputs: - - peer: bytes32 - -endpoint: - mutability: view - inputs: [] - outputs: - - lzEndpoint: address - -owner: - mutability: view - inputs: [] - outputs: - - account: address - -quoteSend: - notes: - - "Simulates messaging + bridge fee; use nativeFee as msg.value on send when paying in native gas token." - mutability: view - inputs: - - sendParam: SendParam - - payInLzToken: bool - outputs: - - nativeFee: uint256 - - lzTokenFee: uint256 - errors: - - NO_PEER - - LZ_INVALID_OPTIONS - -send: - notes: - - "Payable: include MessagingFee.nativeFee in msg.value when fee is native." - - "Consumes sendParam.amountLD from sender on source chain and emits cross-chain message to dstEid peer." - - "sendParam.to must be destination receiver encoded as bytes32." - mutability: payable - access: sender - inputs: - - sendParam: SendParam - - fee: MessagingFee - - refundAddress: address - outputs: - - msgReceipt: MessageReceipt - - oftReceipt: OFTReceipt - errors: - - NO_PEER - - SLIPPAGE_OR_AMOUNT - - LZ_INVALID_OPTIONS - -events: {} - -errors: - NO_PEER: "Destination peer not configured for dstEid." - LZ_INVALID_OPTIONS: "Composer/options payload rejected by LayerZero." - SLIPPAGE_OR_AMOUNT: "Bridged amount violates minAmount or available balance." diff --git a/.agents/skills/gooddollar/references/contracts/GoodDollarOFTAdapter.selectors.yaml b/.agents/skills/gooddollar/references/contracts/GoodDollarOFTAdapter.selectors.yaml deleted file mode 100644 index e5615a1..0000000 --- a/.agents/skills/gooddollar/references/contracts/GoodDollarOFTAdapter.selectors.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# Generated by scripts/selectors.mjs -functions: - token(): 0xfc0c546a - minterBurner(): 0x2ef8c5a4 - approvalRequired(): 0x9f68b964 - oftVersion(): 0x156a0d0f - peers(uint32): 0xbb0b6a53 - endpoint(): 0x5e280f11 - owner(): 0x8da5cb5b -events: -{} -errors: {} diff --git a/.agents/skills/gooddollar/references/contracts/GooddollarSavingsStream.abi.yaml b/.agents/skills/gooddollar/references/contracts/GooddollarSavingsStream.abi.yaml deleted file mode 100644 index d736bc1..0000000 --- a/.agents/skills/gooddollar/references/contracts/GooddollarSavingsStream.abi.yaml +++ /dev/null @@ -1,210 +0,0 @@ -# GooddollarSavingsStream (Ubeswap) — G$ native Super Token stake with Superfluid GDA reward stream - -meta: - name: GooddollarSavingsStream - version: "1" - source: - - https://raw.githubusercontent.com/Ubeswap/gooddollar-contracts/main/contracts/GooddollarSavingsStream.sol - - https://raw.githubusercontent.com/Ubeswap/gooddollar-contracts/main/contracts/interfaces/IGooddollarSavingsStream.sol - - https://raw.githubusercontent.com/Ubeswap/gooddollar-contracts/main/contracts/StakingVault.sol - inherits: - - IGooddollarSavingsStream - - Ownable - - ERC2771Context - - ReentrancyGuard - note: > - Celo production savings. Staked principal sits in StakingVault; this contract holds reward - balance and streams via a Superfluid GDA distribution pool (`distributeFlow`). Effective rate is - min(rewardRate, maxRewardRatePerToken * totalSupply / 1e18), throttled when reward balance is low. - Staking token is the G$ native Super Token (`superToken`). Fuse->CELO migration uses `stakeFor` - after bridge. Ubeswap lists this as Celo mainnet savings (streaming). - deployments: - mainnet: - production-celo: - GooddollarSavingsStream: - networkId: 42220 - address: "0x059ee811414230d1Fb157878D2b491240F4D8d3B" - creationBlock: 66685884 - related: - - https://github.com/Ubeswap/gooddollar-contracts/blob/main/README.md - - https://celoscan.io/address/0x059ee811414230d1Fb157878D2b491240F4D8d3B - - references/contracts/SuperToken.abi.yaml - - references/guides/migrate-fuse-staking-to-celo-savings.md - - references/deep-researches/fuse-to-celo-staking-migration.md - -totalSupply: - mutability: view - inputs: [] - outputs: - - supply: uint256 - -balanceOf: - mutability: view - inputs: - - account: address - outputs: - - balance: uint256 - -getDailyRewards: - mutability: view - inputs: [] - outputs: - - daily: uint256 - -getEffectiveFlowRate: - notes: - - "Returns 0 when totalSupply is 0, rewardRate is 0, or reward balance cannot sustain MIN_STREAM_BUFFER_SECONDS." - - "Otherwise min(global rewardRate, APR cap) as int96 for Superfluid distributeFlow." - mutability: view - inputs: [] - outputs: - - flowRate: int96 - -periodFinish: - notes: - - "Estimated timestamp when current reward balance is drained at getEffectiveFlowRate; 0 if not streaming." - mutability: view - inputs: [] - outputs: - - finish: uint256 - -getUnits: - mutability: view - inputs: - - account: address - outputs: - - units: uint128 - -getTotalUnits: - mutability: view - inputs: [] - outputs: - - units: uint128 - -stake: - notes: - - "Pulls G$ Super Token from msg.sender, deposits principal to StakingVault, updates GDA pool units, syncFlowRate." - - "Requires prior superToken.approve(this, amount)." - mutability: nonpayable - access: anyone - inputs: - - amount: uint256 - outputs: [] - emits: [Staked] - -stakeFor: - notes: - - "Migrator path: caller funds transfer; stake credits `_balances[recipient]` and pool units for recipient." - - "recipient must not be zero, this, superToken, or vault." - - "Used after Fuse->CELO bridge when backend wallet holds bridged G$." - mutability: nonpayable - access: anyone - inputs: - - amount: uint256 - - recipient: address - outputs: [] - emits: [Staked] - -withdraw: - notes: - - "Reduces stake and pool units, syncFlowRate, then vault.withdraw to msg.sender." - mutability: nonpayable - access: anyone - inputs: - - amount: uint256 - outputs: [] - emits: [Withdrawn] - -exit: - notes: - - "Full withdraw of caller principal via withdraw(balance)." - mutability: nonpayable - access: anyone - inputs: [] - outputs: [] - emits: [Withdrawn] - -addToReward: - notes: - - "Pulls reward Super Token from caller; re-syncs flow rate when balance was throttling the stream." - mutability: nonpayable - access: anyone - inputs: - - reward: uint256 - outputs: [] - emits: [RewardAdded] - -syncFlowRate: - notes: - - "Permissionless; call when tokens were sent directly to the contract so distributeFlow picks up balance." - mutability: nonpayable - access: anyone - inputs: [] - outputs: [] - emits: [FlowRateUpdated] - -setDailyRewards: - mutability: nonpayable - access: owner - inputs: - - _dailyRewards: uint256 - outputs: [] - emits: [DailyRewardsUpdated] - -setMaxRewardRatePerToken: - mutability: nonpayable - access: owner - inputs: - - _value: uint256 - outputs: [] - emits: [MaxRewardRateUpdated] - -recoverERC20: - notes: - - "Cannot recover the G$ Super Token (staking/reward asset)." - mutability: nonpayable - access: owner - inputs: - - tokenAddress: address - - tokenAmount: uint256 - outputs: [] - emits: [Recovered] - -events: - Staked: - indexed: - - user: address - data: - - amount: uint256 - Withdrawn: - indexed: - - user: address - data: - - amount: uint256 - RewardAdded: - data: - - reward: uint256 - DailyRewardsUpdated: - data: - - rewardRate: uint256 - - givenDailyRewards: uint256 - MaxRewardRateUpdated: - data: - - newMaxRate: uint256 - FlowRateUpdated: - data: - - newFlowRate: int96 - Recovered: - indexed: - - token: address - data: - - amount: uint256 - - receiver: address - -errors: - - CannotStakeZero - - CannotWithdrawZero - - InsufficientStake - - InvalidAddress - - NoRewardToAdd - - CannotRecoverStakingToken diff --git a/.agents/skills/gooddollar/references/contracts/GooddollarSavingsStream.selectors.yaml b/.agents/skills/gooddollar/references/contracts/GooddollarSavingsStream.selectors.yaml deleted file mode 100644 index f04d75a..0000000 --- a/.agents/skills/gooddollar/references/contracts/GooddollarSavingsStream.selectors.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Generated by scripts/selectors.mjs -functions: - totalSupply(): 0x18160ddd - balanceOf(address): 0x70a08231 - getDailyRewards(): 0x68527008 - getEffectiveFlowRate(): 0xa2efe857 - periodFinish(): 0xebe2b12b - getUnits(address): 0x0fefbc09 - getTotalUnits(): 0xa754a702 - stake(uint256): 0xa694fc3a - stakeFor(uint256,address): 0x51746bb2 - withdraw(uint256): 0x2e1a7d4d - exit(): 0xe9fad8ee - addToReward(uint256): 0x2ce618fa - syncFlowRate(): 0x0e83284a - setDailyRewards(uint256): 0x4adef718 - setMaxRewardRatePerToken(uint256): 0x6a03a9e2 - recoverERC20(address,uint256): 0x8980f11f -events: - Staked(address,uint256): 0x9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d - Withdrawn(address,uint256): 0x7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5 - RewardAdded(uint256): 0xde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d - DailyRewardsUpdated(uint256,uint256): 0x54f5b7ef058007cebca11af0127cd80c0bac4e968788eabb3c1e70d1bfb78edd - MaxRewardRateUpdated(uint256): 0x9041b23d05af9bceefc73becffefd1887907ad55c3d6c6655230b37ef87dbb07 - FlowRateUpdated(int96): 0xd02fcf6b96acb60ac68942c7d5075e11a8a0b38cc865c1916934f4e1f129ded0 - Recovered(address,uint256,address): 0xb197f0a554c4d7840105e6ae65f0e275e9e8605a969dffa8caa7f1f118a2e1f5 -errors: {} diff --git a/.agents/skills/gooddollar/references/contracts/GovernanceStakingV2.abi.yaml b/.agents/skills/gooddollar/references/contracts/GovernanceStakingV2.abi.yaml deleted file mode 100644 index 5adccb3..0000000 --- a/.agents/skills/gooddollar/references/contracts/GovernanceStakingV2.abi.yaml +++ /dev/null @@ -1,202 +0,0 @@ -# GovernanceStakingV2 (Fuse) — G$ staking share token with GDAO reward accrual -# Deployment key in GoodProtocol release metadata is GovernanceStakingV2. - -meta: - name: GovernanceStakingV2 - version: "2" - source: - - https://raw.githubusercontent.com/GoodDollar/GoodProtocol/master/contracts/governance/GovernanceStaking.sol - - https://raw.githubusercontent.com/GoodDollar/GoodProtocol/master/releases/deployment.json - inherits: - - ERC20Upgradeable - - MultiBaseGovernanceShareField - - DAOUpgradeableContract - - ReentrancyGuardUpgradeable - note: > - Fuse governance staking contract where users stake G$ and receive staking shares (`sG$`) with - GDAO-style rewards minted on reward withdrawal paths. `withdrawStake(0)` means full unstake. - In GoodProtocol `releases/deployment.json` this address is listed as GovernanceStakingV2 on Fuse `production`. - This is the old staking contract in Fuse->CELO migration flows. - deployments: - mainnet: - production: - GovernanceStakingV2: - networkId: 122 - address: "0xB7C3e738224625289C573c54d402E9Be46205546" - creationBlock: 15956809 - related: - - references/guides/migrate-fuse-staking-to-celo-savings.md - - references/deep-researches/fuse-to-celo-staking-migration.md - -getChainBlocksPerMonth: - mutability: pure - inputs: [] - outputs: - - blocks: uint256 - -stake: - notes: - - "Requires prior G$ ERC20 approval to staking contract." - - "Mints staking share token and updates reward productivity before event emission." - mutability: nonpayable - access: anyone - inputs: - - _amount: uint256 - outputs: [] - emits: [Staked] - -withdrawStake: - notes: - - "If _amount is 0, contract interprets it as full user unstake." - - "Burns staking shares, updates productivity, mints pending rewards, then transfers G$ out." - mutability: nonpayable - access: anyone - inputs: - - _amount: uint256 - outputs: [] - emits: [StakeWithdraw] - -withdrawRewards: - notes: - - "Claims rewards without changing staked principal." - mutability: nonpayable - access: anyone - inputs: [] - outputs: - - minted: uint256 - emits: [ReputationEarned] - -setMonthlyRewards: - notes: - - "DAO-controlled update of rewardsPerBlock schedule via avatar authorization." - mutability: nonpayable - access: avatar - inputs: - - _monthlyAmount: uint256 - outputs: [] - -getRewardsPerBlock: - mutability: view - inputs: [] - outputs: - - amount: uint256 - -getProductivity: - mutability: view - inputs: - - _user: address - outputs: - - productivity: uint256 - - rewardDebt: uint256 - -getUserPendingReward: - mutability: view - inputs: - - _user: address - outputs: - - pending: uint256 - -users: - notes: - - "UserInfo getter for internal staking productivity record." - mutability: view - inputs: - - _user: address - outputs: - - amount: uint256 - - rewardDebt: uint256 - -totalRewardsPerShare: - mutability: view - inputs: [] - outputs: - - value: uint256 - -decimals: - mutability: view - inputs: [] - outputs: - - d: uint8 - -totalSupply: - mutability: view - inputs: [] - outputs: - - supply: uint256 - -balanceOf: - mutability: view - inputs: - - account: address - outputs: - - balance: uint256 - -allowance: - mutability: view - inputs: - - owner: address - - spender: address - outputs: - - amount: uint256 - -approve: - mutability: nonpayable - access: anyone - inputs: - - spender: address - - amount: uint256 - outputs: - - ok: bool - emits: [Approval] - -transfer: - mutability: nonpayable - access: anyone - inputs: - - to: address - - amount: uint256 - outputs: - - ok: bool - emits: [Transfer] - -transferFrom: - mutability: nonpayable - access: anyone - inputs: - - from: address - - to: address - - amount: uint256 - outputs: - - ok: bool - emits: [Transfer, Approval] - -events: - ReputationEarned: - indexed: - - staker: address - data: - - amount: uint256 - Staked: - indexed: - - staker: address - data: - - amount: uint256 - StakeWithdraw: - indexed: - - staker: address - data: - - amount: uint256 - Transfer: - indexed: - - from: address - - to: address - data: - - value: uint256 - Approval: - indexed: - - owner: address - - spender: address - data: - - value: uint256 - -errors: {} diff --git a/.agents/skills/gooddollar/references/contracts/GovernanceStakingV2.selectors.yaml b/.agents/skills/gooddollar/references/contracts/GovernanceStakingV2.selectors.yaml deleted file mode 100644 index 37388ba..0000000 --- a/.agents/skills/gooddollar/references/contracts/GovernanceStakingV2.selectors.yaml +++ /dev/null @@ -1,26 +0,0 @@ -# Generated by scripts/selectors.mjs -functions: - getChainBlocksPerMonth(): 0x213b329e - stake(uint256): 0xa694fc3a - withdrawStake(uint256): 0x25d5971f - withdrawRewards(): 0xc7b8981c - setMonthlyRewards(uint256): 0xc76279a2 - getRewardsPerBlock(): 0x0c1cd7f3 - getProductivity(address): 0x28e964e9 - getUserPendingReward(address): 0xc6710629 - users(address): 0xa87430ba - totalRewardsPerShare(): 0xbf8e9b6e - decimals(): 0x313ce567 - totalSupply(): 0x18160ddd - balanceOf(address): 0x70a08231 - allowance(address,address): 0xdd62ed3e - approve(address,uint256): 0x095ea7b3 - transfer(address,uint256): 0xa9059cbb - transferFrom(address,address,uint256): 0x23b872dd -events: - ReputationEarned(address,uint256): 0x43848d0574703c28d68ae8958e0571521618f60c4bcacfb094cff2156eaae0f1 - Staked(address,uint256): 0x9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d - StakeWithdraw(address,uint256): 0x1248d48e2de900a1010c7fce73506969ecec243600bfc08b641b158f26d857cd - Transfer(address,address,uint256): 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef - Approval(address,address,uint256): 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925 -errors: {} diff --git a/.agents/skills/gooddollar/references/contracts/IdentityV3.abi.yaml b/.agents/skills/gooddollar/references/contracts/IdentityV3.abi.yaml deleted file mode 100644 index aea2efe..0000000 --- a/.agents/skills/gooddollar/references/contracts/IdentityV3.abi.yaml +++ /dev/null @@ -1,390 +0,0 @@ -# IdentityV3 — whitelist, blacklist, DID, and connected-account graph for GoodDollar -# UBI eligibility uses getWhitelistedRoot; connectAccount links extra wallets to a root. - -meta: - name: IdentityV3 - version: v3 - source: - - https://raw.githubusercontent.com/GoodDollar/GoodProtocol/master/contracts/identity/IdentityV3.sol - inherits: - - DAOUpgradeableContract - - AccessControlUpgradeable - - PausableUpgradeable - - EIP712Upgradeable - note: > - isWhitelisted enforces authenticationPeriod against dateAuthenticated and status==1, - with fallback to oldIdentity. getWhitelistedRoot returns the root address for a - connected wallet or the wallet itself when directly whitelisted. - deployments: - mainnet: - production: - Identity: - networkId: 122 - address: "0x2F9C28de9e6d44b71B91b8BA337A5D82e308E7BE" - creationBlock: 22022901 - IdentityOld: - networkId: 122 - address: "0xFa8d865A962ca8456dF331D78806152d3aC5B84F" - creationBlock: 6246324 - production-celo: - Identity: - networkId: 42220 - address: "0xC361A6E67822a0EDc17D899227dd9FC50BD62F42" - creationBlock: 17237952 - production-xdc: - Identity: - networkId: 50 - address: "0x27a4a02C9ed591E1a86e2e5D05870292c34622C9" - creationBlock: 95143058 - related: - - https://docs.gooddollar.org/for-developers/core-contracts/identity - - https://docs.gooddollar.org/user-guides/connect-another-wallet-address-to-identity - -initialize: - mutability: nonpayable - access: initializer - inputs: - - _owner: address - - _oldIdentity: address - outputs: [] - -initDAO: - notes: - - "Wires NameService via setDAO and transfers DEFAULT_ADMIN_ROLE, PAUSER_ROLE, IDENTITY_ADMIN_ROLE to avatar." - mutability: nonpayable - access: DEFAULT_ADMIN_ROLE - inputs: - - _ns: address - outputs: [] - errors: [ALREADY_INITIALIZED] - -setAuthenticationPeriod: - mutability: nonpayable - access: avatar - inputs: - - period: uint256 - outputs: [] - errors: [WHEN_NOT_PAUSED_REVERT] - -authenticate: - notes: - - "Public wrapper; forwards to authenticateWithTimestamp(account, block.timestamp)." - mutability: nonpayable - inputs: - - account: address - outputs: [] - -authenticateWithTimestamp: - mutability: nonpayable - access: IDENTITY_ADMIN_ROLE - inputs: - - account: address - - timestamp: uint256 - outputs: [] - emits: [WhitelistedAuthenticated] - errors: [NOT_WHITELISTED_STATUS, WHEN_NOT_PAUSED_REVERT] - -addWhitelisted: - mutability: nonpayable - access: IDENTITY_ADMIN_ROLE - inputs: - - account: address - outputs: [] - emits: [WhitelistedAdded] - errors: [ALREADY_HAS_STATUS, WHEN_NOT_PAUSED_REVERT] - -addWhitelistedWithDIDAndChain: - mutability: nonpayable - access: IDENTITY_ADMIN_ROLE - inputs: - - account: address - - did: string - - orgChain: uint256 - - dateAuthenticated: uint256 - outputs: [] - emits: [WhitelistedAdded] - errors: [DID_ALREADY_REGISTERED, ALREADY_HAS_STATUS, WHEN_NOT_PAUSED_REVERT] - -addWhitelistedWithDID: - mutability: nonpayable - access: IDENTITY_ADMIN_ROLE - inputs: - - account: address - - did: string - outputs: [] - emits: [WhitelistedAdded] - errors: [DID_ALREADY_REGISTERED, ALREADY_HAS_STATUS, WHEN_NOT_PAUSED_REVERT] - -removeWhitelisted: - mutability: nonpayable - access: IDENTITY_ADMIN_ROLE - inputs: - - account: address - outputs: [] - emits: [WhitelistedRemoved] - errors: [WHEN_NOT_PAUSED_REVERT] - -renounceWhitelisted: - mutability: nonpayable - access: whitelisted sender - inputs: [] - outputs: [] - emits: [WhitelistedRemoved] - errors: [NOT_WHITELISTED_SENDER, WHEN_NOT_PAUSED_REVERT] - -isWhitelisted: - notes: - - "Combines local Identity record with optional oldIdentity.isWhitelisted try/catch." - mutability: view - inputs: - - account: address - outputs: - - ok: bool - -lastAuthenticated: - mutability: view - inputs: - - account: address - outputs: - - ts: uint256 - -addBlacklisted: - mutability: nonpayable - access: IDENTITY_ADMIN_ROLE - inputs: - - account: address - outputs: [] - emits: [BlacklistAdded, WhitelistedRemoved] - errors: [WHEN_NOT_PAUSED_REVERT] - -removeBlacklisted: - mutability: nonpayable - access: IDENTITY_ADMIN_ROLE - inputs: - - account: address - outputs: [] - emits: [BlacklistRemoved] - errors: [WHEN_NOT_PAUSED_REVERT] - -addContract: - mutability: nonpayable - access: IDENTITY_ADMIN_ROLE - inputs: - - account: address - outputs: [] - emits: [ContractAdded] - errors: [NOT_CONTRACT, ALREADY_HAS_STATUS, WHEN_NOT_PAUSED_REVERT] - -removeContract: - mutability: nonpayable - access: IDENTITY_ADMIN_ROLE - inputs: - - account: address - outputs: [] - emits: [ContractRemoved] - errors: [WHEN_NOT_PAUSED_REVERT] - -isDAOContract: - mutability: view - inputs: - - account: address - outputs: - - ok: bool - -isBlacklisted: - mutability: view - inputs: - - account: address - outputs: - - ok: bool - -connectAccount: - notes: - - "Caller must be whitelisted; target must not already be whitelisted or blacklisted; stores connectedAccounts[account]=msg.sender." - mutability: nonpayable - access: whitelisted sender - inputs: - - account: address - outputs: [] - emits: [AccountConnected] - errors: [INVALID_ACCOUNT_FOR_CONNECT, ALREADY_CONNECTED, WHEN_NOT_PAUSED_REVERT] - -disconnectAccount: - notes: - - "Caller must be either the linked root or the connected wallet." - mutability: nonpayable - inputs: - - connected: address - outputs: [] - emits: [AccountDisconnected] - errors: [UNAUTHORIZED_DISCONNECT] - -getWhitelistedRoot: - notes: - - "Returns account if directly whitelisted; returns connected root if connected account is whitelisted; else zero." - mutability: view - inputs: - - account: address - outputs: - - whitelisted: address - -pause: - mutability: nonpayable - access: PAUSER_ROLE - inputs: - - toPause: bool - outputs: [] - -setDID: - mutability: nonpayable - inputs: - - account: address - - did: string - outputs: [] - errors: [NOT_AUTHORIZED_SET_DID, NOT_WHITELISTED_FOR_DID, DID_EMPTY, DID_ALREADY_REGISTERED, DID_ALREADY_REGISTERED_OLD, WHEN_NOT_PAUSED_REVERT] - -addrToDID: - mutability: view - inputs: - - account: address - outputs: - - did: string - -getWhitelistedOnChainId: - mutability: view - inputs: - - account: address - outputs: - - chainId: uint256 - -isRegistered: - notes: - - "Compatibility shim; always returns true." - mutability: pure - inputs: [] - outputs: - - ok: bool - -IDENTITY_ADMIN_ROLE: - mutability: view - inputs: [] - outputs: - - role: bytes32 - -PAUSER_ROLE: - mutability: view - inputs: [] - outputs: - - role: bytes32 - -TYPED_STRUCTURE: - mutability: view - inputs: [] - outputs: - - schema: string - -whitelistedCount: - mutability: view - inputs: [] - outputs: - - n: uint256 - -whitelistedContracts: - mutability: view - inputs: [] - outputs: - - n: uint256 - -authenticationPeriod: - mutability: view - inputs: [] - outputs: - - seconds: uint256 - -identities: - mutability: view - inputs: - - account: address - outputs: - - dateAuthenticated: uint256 - - dateAdded: uint256 - - did: string - - whitelistedOnChainId: uint256 - - status: uint8 - -didHashToAddress: - mutability: view - inputs: - - hash: bytes32 - outputs: - - account: address - -connectedAccounts: - mutability: view - inputs: - - account: address - outputs: - - root: address - -oldIdentity: - mutability: view - inputs: [] - outputs: - - addr: address - -events: - BlacklistAdded: - indexed: - - account: address - data: [] - BlacklistRemoved: - indexed: - - account: address - data: [] - WhitelistedAdded: - indexed: - - account: address - data: [] - WhitelistedRemoved: - indexed: - - account: address - data: [] - WhitelistedAuthenticated: - indexed: - - account: address - data: - - timestamp: uint256 - ContractAdded: - indexed: - - account: address - data: [] - ContractRemoved: - indexed: - - account: address - data: [] - AccountConnected: - indexed: - - connected: address - - to: address - data: [] - AccountDisconnected: - indexed: - - disconnected: address - - from: address - data: [] - -errors: - ALREADY_INITIALIZED: "already initialized — initDAO twice." - NOT_WHITELISTED_STATUS: "not whitelisted — authenticateWithTimestamp." - NOT_WHITELISTED_SENDER: "not whitelisted — renounceWhitelisted modifier." - NOT_WHITELISTED_FOR_DID: "not whitelisted — setDID internal." - ALREADY_HAS_STATUS: "already has status — _addWhitelisted." - DID_ALREADY_REGISTERED: "DID already registered — _addWhitelistedWithDID or _setDID." - DID_ALREADY_REGISTERED_OLD: "DID already registered oldIdentity — _setDID conflict path." - NOT_CONTRACT: "Given address is not a contract — addContract." - INVALID_ACCOUNT_FOR_CONNECT: "invalid account — connectAccount target checks." - ALREADY_CONNECTED: "already connected — connectAccount." - UNAUTHORIZED_DISCONNECT: "unauthorized — disconnectAccount." - NOT_AUTHORIZED_SET_DID: "not authorized — setDID caller." - DID_EMPTY: "did empty — _setDID." - WHEN_NOT_PAUSED_REVERT: "OpenZeppelin Pausable whenNotPaused on gated calls." diff --git a/.agents/skills/gooddollar/references/contracts/IdentityV3.selectors.yaml b/.agents/skills/gooddollar/references/contracts/IdentityV3.selectors.yaml deleted file mode 100644 index 9b53f00..0000000 --- a/.agents/skills/gooddollar/references/contracts/IdentityV3.selectors.yaml +++ /dev/null @@ -1,49 +0,0 @@ -# Generated by scripts/selectors.mjs -functions: - initialize(address,address): 0x485cc955 - initDAO(address): 0x2b14dda8 - setAuthenticationPeriod(uint256): 0xfff930d4 - authenticate(address): 0x08e0d29d - authenticateWithTimestamp(address,uint256): 0x96a1ef79 - addWhitelisted(address): 0x10154bad - addWhitelistedWithDIDAndChain(address,string,uint256,uint256): 0xe737031a - addWhitelistedWithDID(address,string): 0x1b027099 - removeWhitelisted(address): 0x291d9549 - renounceWhitelisted(): 0xd6cd9473 - isWhitelisted(address): 0x3af32abf - lastAuthenticated(address): 0xe1e360ba - addBlacklisted(address): 0x188efc16 - removeBlacklisted(address): 0xc6a276c2 - addContract(address): 0x5f539d69 - removeContract(address): 0xc375c2ef - isDAOContract(address): 0xc73cc4ae - isBlacklisted(address): 0xfe575a87 - connectAccount(address): 0xd21685f4 - disconnectAccount(address): 0x37a1a987 - getWhitelistedRoot(address): 0x2d0e9b46 - pause(bool): 0x02329a29 - setDID(address,string): 0xd3262816 - addrToDID(address): 0x54f9f7a3 - getWhitelistedOnChainId(address): 0xa061922d - isRegistered(): 0x22366844 - IDENTITY_ADMIN_ROLE(): 0x1aaff63c - PAUSER_ROLE(): 0xe63ab1e9 - TYPED_STRUCTURE(): 0x2cec5330 - whitelistedCount(): 0xb2a1de22 - whitelistedContracts(): 0xb30f7e7f - authenticationPeriod(): 0x31b376e2 - identities(address): 0xf653b81e - didHashToAddress(bytes32): 0x67c75937 - connectedAccounts(address): 0x61320040 - oldIdentity(): 0x4125f0f2 -events: - BlacklistAdded(address): 0x44d5fe68b00f68950fb9c1ff0a61ef7f747b1a36359a7e3a7f3324db4b878967 - BlacklistRemoved(address): 0x1747ca720b1a174a464b6513ace29b1d3190b5f632b9f34147017c81425bfde8 - WhitelistedAdded(address): 0xee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f - WhitelistedRemoved(address): 0x270d9b30cf5b0793bbfd54c9d5b94aeb49462b8148399000265144a8722da6b6 - WhitelistedAuthenticated(address,uint256): 0xb2a82fce6d8c7a633efe9579f77b4edb96bfdf171a49bfc2ce666dc543a1f500 - ContractAdded(address): 0x89c66952b48f3e96bf1d8ba1b63189520fd988a6979b8b740bd5c5d8dc53e205 - ContractRemoved(address): 0x8d30d41865a0b811b9545d879520d2dde9f4cc49e4241f486ad9752bc904b565 - AccountConnected(address,address): 0x18f7736ef54539debd9afd3c9500b106e12ae7c70e685f5a5efd727b1ce1d54c - AccountDisconnected(address,address): 0x7cdef5f9c5cb8ce728661ede956fef26cb91eb4d7d2180cc041b73f9fef568d2 -errors: {} diff --git a/.agents/skills/gooddollar/references/contracts/IdentityV4.abi.yaml b/.agents/skills/gooddollar/references/contracts/IdentityV4.abi.yaml deleted file mode 100644 index 485254d..0000000 --- a/.agents/skills/gooddollar/references/contracts/IdentityV4.abi.yaml +++ /dev/null @@ -1,424 +0,0 @@ -# IdentityV4 — whitelist, blacklist, DID, connected accounts, and reverification schedule -# isWhitelisted uses shouldReverify against reverifyDaysOptions and authCount; oldIdentity fallback preserved. - -meta: - name: IdentityV4 - version: v4 - source: - - https://raw.githubusercontent.com/GoodDollar/GoodProtocol/master/contracts/identity/IdentityV4.sol - inherits: - - DAOUpgradeableContract - - AccessControlUpgradeable - - PausableUpgradeable - - EIP712Upgradeable - note: > - authenticationPeriod() returns the largest reverify interval in days (last entry of reverifyDaysOptions), - not seconds. isWhitelisted is false when shouldReverify is true for the current elapsed days since - dateAuthenticated. Post-upgrade, accounts with dateAuthenticated before 1772697574 are treated as - having authCount at the last schedule step for reverify logic. - deployments: - mainnet: - production: - Identity: - networkId: 122 - address: "0x2F9C28de9e6d44b71B91b8BA337A5D82e308E7BE" - creationBlock: 22022901 - production-celo: - Identity: - networkId: 42220 - address: "0xC361A6E67822a0EDc17D899227dd9FC50BD62F42" - creationBlock: 17237952 - production-xdc: - Identity: - networkId: 50 - address: "0x27a4a02C9ed591E1a86e2e5D05870292c34622C9" - creationBlock: 95143058 - related: - - https://docs.gooddollar.org/for-developers/core-contracts/identity - - https://docs.gooddollar.org/user-guides/connect-another-wallet-address-to-identity - -initialize: - mutability: nonpayable - access: initializer - inputs: - - _owner: address - - _oldIdentity: address - outputs: [] - -initDAO: - notes: - - "Wires NameService via setDAO and transfers DEFAULT_ADMIN_ROLE, PAUSER_ROLE, IDENTITY_ADMIN_ROLE to avatar." - mutability: nonpayable - access: DEFAULT_ADMIN_ROLE - inputs: - - _ns: address - outputs: [] - errors: [ALREADY_INITIALIZED] - -setReverifyDaysOptions: - notes: - - "Replaces the full schedule; values must be strictly ascending uint8 days; non-empty array." - mutability: nonpayable - access: IDENTITY_ADMIN_ROLE - inputs: - - options: uint8[] - outputs: [] - errors: [EMPTY_REVERIFY_OPTIONS, OPTIONS_NOT_ASCENDING, WHEN_NOT_PAUSED_REVERT] - -authenticate: - notes: - - "Forwards to authenticateWithTimestamp(account, block.timestamp); requires IDENTITY_ADMIN_ROLE on the inner call." - mutability: nonpayable - access: IDENTITY_ADMIN_ROLE - inputs: - - account: address - outputs: [] - errors: [NOT_WHITELISTED_STATUS, WHEN_NOT_PAUSED_REVERT] - -authenticateWithTimestamp: - notes: - - "Refreshes authentication timestamp for status-1 account and advances authCount when reverification threshold is reached." - - "Legacy accounts before cutoff are evaluated at last schedule step for reverify math." - mutability: nonpayable - access: IDENTITY_ADMIN_ROLE - inputs: - - account: address - - timestamp: uint256 - outputs: [] - emits: [WhitelistedAuthenticated] - errors: [NOT_WHITELISTED_STATUS, WHEN_NOT_PAUSED_REVERT] - -addWhitelisted: - mutability: nonpayable - access: IDENTITY_ADMIN_ROLE - inputs: - - account: address - outputs: [] - emits: [WhitelistedAdded] - errors: [ALREADY_HAS_STATUS, WHEN_NOT_PAUSED_REVERT] - -addWhitelistedWithDIDAndChain: - notes: - - "Adds whitelisted account and stores DID plus originating chain id and authentication timestamp." - mutability: nonpayable - access: IDENTITY_ADMIN_ROLE - inputs: - - account: address - - did: string - - orgChain: uint256 - - dateAuthenticated: uint256 - outputs: [] - emits: [WhitelistedAdded] - errors: [DID_ALREADY_REGISTERED, ALREADY_HAS_STATUS, WHEN_NOT_PAUSED_REVERT] - -addWhitelistedWithDID: - mutability: nonpayable - access: IDENTITY_ADMIN_ROLE - inputs: - - account: address - - did: string - outputs: [] - emits: [WhitelistedAdded] - errors: [DID_ALREADY_REGISTERED, ALREADY_HAS_STATUS, WHEN_NOT_PAUSED_REVERT] - -removeWhitelisted: - mutability: nonpayable - access: IDENTITY_ADMIN_ROLE - inputs: - - account: address - outputs: [] - emits: [WhitelistedRemoved] - errors: [WHEN_NOT_PAUSED_REVERT] - -renounceWhitelisted: - mutability: nonpayable - access: whitelisted sender - inputs: [] - outputs: [] - emits: [WhitelistedRemoved] - errors: [NOT_WHITELISTED_SENDER, WHEN_NOT_PAUSED_REVERT] - -shouldReverify: - notes: - - "Compares daysSinceAuth against current reverifyDaysOptions step selected by authCount." - mutability: view - inputs: - - account: address - - daysSinceAuth: uint256 - outputs: - - needed: bool - -isWhitelisted: - notes: - - "Local status 1 with shouldReverify false; else oldIdentity.isWhitelisted try/catch." - mutability: view - inputs: - - account: address - outputs: - - ok: bool - -lastAuthenticated: - notes: - - "Returns local dateAuthenticated or falls back to oldIdentity when local record has no timestamp." - mutability: view - inputs: - - account: address - outputs: - - ts: uint256 - -addBlacklisted: - mutability: nonpayable - access: IDENTITY_ADMIN_ROLE - inputs: - - account: address - outputs: [] - emits: [BlacklistAdded, WhitelistedRemoved] - errors: [WHEN_NOT_PAUSED_REVERT] - -removeBlacklisted: - mutability: nonpayable - access: IDENTITY_ADMIN_ROLE - inputs: - - account: address - outputs: [] - emits: [BlacklistRemoved] - errors: [WHEN_NOT_PAUSED_REVERT] - -addContract: - mutability: nonpayable - access: IDENTITY_ADMIN_ROLE - inputs: - - account: address - outputs: [] - emits: [ContractAdded] - errors: [NOT_CONTRACT, ALREADY_HAS_STATUS, WHEN_NOT_PAUSED_REVERT] - -removeContract: - mutability: nonpayable - access: IDENTITY_ADMIN_ROLE - inputs: - - account: address - outputs: [] - emits: [ContractRemoved] - errors: [WHEN_NOT_PAUSED_REVERT] - -isDAOContract: - mutability: view - inputs: - - account: address - outputs: - - ok: bool - -isBlacklisted: - mutability: view - inputs: - - account: address - outputs: - - ok: bool - -connectAccount: - notes: - - "Caller must be whitelisted; target must not already be whitelisted or blacklisted; stores connectedAccounts[account]=msg.sender." - mutability: nonpayable - access: whitelisted sender - inputs: - - account: address - outputs: [] - emits: [AccountConnected] - errors: [INVALID_ACCOUNT_FOR_CONNECT, ALREADY_CONNECTED, WHEN_NOT_PAUSED_REVERT] - -disconnectAccount: - notes: - - "Caller must be either the linked root or the connected wallet." - mutability: nonpayable - inputs: - - connected: address - outputs: [] - emits: [AccountDisconnected] - errors: [UNAUTHORIZED_DISCONNECT] - -getWhitelistedRoot: - notes: - - "Returns account if directly whitelisted; returns connected root if connected account is whitelisted; else zero." - mutability: view - inputs: - - account: address - outputs: - - whitelisted: address - -pause: - mutability: nonpayable - access: PAUSER_ROLE - inputs: - - toPause: bool - outputs: [] - -setDID: - notes: - - "Sets DID for account by admin or account itself when whitelisted; enforces uniqueness across local and old identity." - mutability: nonpayable - inputs: - - account: address - - did: string - outputs: [] - errors: [NOT_AUTHORIZED_SET_DID, NOT_WHITELISTED_FOR_DID, DID_EMPTY, DID_ALREADY_REGISTERED, DID_ALREADY_REGISTERED_OLD, WHEN_NOT_PAUSED_REVERT] - -addrToDID: - mutability: view - inputs: - - account: address - outputs: - - did: string - -getWhitelistedOnChainId: - notes: - - "Returns chain id recorded during whitelisting for cross-chain eligibility checks." - mutability: view - inputs: - - account: address - outputs: - - chainId: uint256 - -isRegistered: - notes: - - "Compatibility shim; always returns true." - mutability: pure - inputs: [] - outputs: - - ok: bool - -IDENTITY_ADMIN_ROLE: - mutability: view - inputs: [] - outputs: - - role: bytes32 - -PAUSER_ROLE: - mutability: view - inputs: [] - outputs: - - role: bytes32 - -TYPED_STRUCTURE: - mutability: view - inputs: [] - outputs: - - schema: string - -whitelistedCount: - mutability: view - inputs: [] - outputs: - - n: uint256 - -whitelistedContracts: - mutability: view - inputs: [] - outputs: - - n: uint256 - -authenticationPeriod: - notes: - - "Returns reverifyDaysOptions[last] in days, not seconds." - mutability: view - inputs: [] - outputs: - - days: uint256 - -reverifyDaysOptions: - mutability: view - inputs: - - index: uint256 - outputs: - - days: uint32 - -identities: - mutability: view - inputs: - - account: address - outputs: - - dateAuthenticated: uint256 - - dateAdded: uint256 - - did: string - - whitelistedOnChainId: uint256 - - status: uint8 - - authCount: uint32 - -didHashToAddress: - mutability: view - inputs: - - hash: bytes32 - outputs: - - account: address - -connectedAccounts: - mutability: view - inputs: - - account: address - outputs: - - root: address - -oldIdentity: - mutability: view - inputs: [] - outputs: - - addr: address - -events: - BlacklistAdded: - indexed: - - account: address - data: [] - BlacklistRemoved: - indexed: - - account: address - data: [] - WhitelistedAdded: - indexed: - - account: address - data: [] - WhitelistedRemoved: - indexed: - - account: address - data: [] - WhitelistedAuthenticated: - indexed: - - account: address - data: - - timestamp: uint256 - ContractAdded: - indexed: - - account: address - data: [] - ContractRemoved: - indexed: - - account: address - data: [] - AccountConnected: - indexed: - - connected: address - - to: address - data: [] - AccountDisconnected: - indexed: - - disconnected: address - - from: address - data: [] - -errors: - ALREADY_INITIALIZED: "already initialized — initDAO twice." - EMPTY_REVERIFY_OPTIONS: "empty options — setReverifyDaysOptions." - OPTIONS_NOT_ASCENDING: "options not in ascending order — setReverifyDaysOptions." - NOT_WHITELISTED_STATUS: "not whitelisted — authenticateWithTimestamp." - NOT_WHITELISTED_SENDER: "not whitelisted — renounceWhitelisted modifier." - NOT_WHITELISTED_FOR_DID: "not whitelisted — _setDID." - ALREADY_HAS_STATUS: "already has status — _addWhitelisted." - DID_ALREADY_REGISTERED: "DID already registered — _addWhitelistedWithDID or _setDID." - DID_ALREADY_REGISTERED_OLD: "DID already registered oldIdentity — _setDID conflict path." - NOT_CONTRACT: "Given address is not a contract — addContract." - INVALID_ACCOUNT_FOR_CONNECT: "invalid account — connectAccount target checks." - ALREADY_CONNECTED: "already connected — connectAccount." - UNAUTHORIZED_DISCONNECT: "unauthorized — disconnectAccount." - NOT_AUTHORIZED_SET_DID: "not authorized — setDID caller." - DID_EMPTY: "did empty — _setDID." - WHEN_NOT_PAUSED_REVERT: "OpenZeppelin Pausable whenNotPaused on gated calls." diff --git a/.agents/skills/gooddollar/references/contracts/IdentityV4.selectors.yaml b/.agents/skills/gooddollar/references/contracts/IdentityV4.selectors.yaml deleted file mode 100644 index 3440a5e..0000000 --- a/.agents/skills/gooddollar/references/contracts/IdentityV4.selectors.yaml +++ /dev/null @@ -1,51 +0,0 @@ -# Generated by scripts/selectors.mjs -functions: - initialize(address,address): 0x485cc955 - initDAO(address): 0x2b14dda8 - setReverifyDaysOptions(uint8[]): 0x925e8c1a - authenticate(address): 0x08e0d29d - authenticateWithTimestamp(address,uint256): 0x96a1ef79 - addWhitelisted(address): 0x10154bad - addWhitelistedWithDIDAndChain(address,string,uint256,uint256): 0xe737031a - addWhitelistedWithDID(address,string): 0x1b027099 - removeWhitelisted(address): 0x291d9549 - renounceWhitelisted(): 0xd6cd9473 - shouldReverify(address,uint256): 0x4a03813f - isWhitelisted(address): 0x3af32abf - lastAuthenticated(address): 0xe1e360ba - addBlacklisted(address): 0x188efc16 - removeBlacklisted(address): 0xc6a276c2 - addContract(address): 0x5f539d69 - removeContract(address): 0xc375c2ef - isDAOContract(address): 0xc73cc4ae - isBlacklisted(address): 0xfe575a87 - connectAccount(address): 0xd21685f4 - disconnectAccount(address): 0x37a1a987 - getWhitelistedRoot(address): 0x2d0e9b46 - pause(bool): 0x02329a29 - setDID(address,string): 0xd3262816 - addrToDID(address): 0x54f9f7a3 - getWhitelistedOnChainId(address): 0xa061922d - isRegistered(): 0x22366844 - IDENTITY_ADMIN_ROLE(): 0x1aaff63c - PAUSER_ROLE(): 0xe63ab1e9 - TYPED_STRUCTURE(): 0x2cec5330 - whitelistedCount(): 0xb2a1de22 - whitelistedContracts(): 0xb30f7e7f - authenticationPeriod(): 0x31b376e2 - reverifyDaysOptions(uint256): 0xcadef5ac - identities(address): 0xf653b81e - didHashToAddress(bytes32): 0x67c75937 - connectedAccounts(address): 0x61320040 - oldIdentity(): 0x4125f0f2 -events: - BlacklistAdded(address): 0x44d5fe68b00f68950fb9c1ff0a61ef7f747b1a36359a7e3a7f3324db4b878967 - BlacklistRemoved(address): 0x1747ca720b1a174a464b6513ace29b1d3190b5f632b9f34147017c81425bfde8 - WhitelistedAdded(address): 0xee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f - WhitelistedRemoved(address): 0x270d9b30cf5b0793bbfd54c9d5b94aeb49462b8148399000265144a8722da6b6 - WhitelistedAuthenticated(address,uint256): 0xb2a82fce6d8c7a633efe9579f77b4edb96bfdf171a49bfc2ce666dc543a1f500 - ContractAdded(address): 0x89c66952b48f3e96bf1d8ba1b63189520fd988a6979b8b740bd5c5d8dc53e205 - ContractRemoved(address): 0x8d30d41865a0b811b9545d879520d2dde9f4cc49e4241f486ad9752bc904b565 - AccountConnected(address,address): 0x18f7736ef54539debd9afd3c9500b106e12ae7c70e685f5a5efd727b1ce1d54c - AccountDisconnected(address,address): 0x7cdef5f9c5cb8ce728661ede956fef26cb91eb4d7d2180cc041b73f9fef568d2 -errors: {} diff --git a/.agents/skills/gooddollar/references/contracts/InvitesV2.abi.yaml b/.agents/skills/gooddollar/references/contracts/InvitesV2.abi.yaml deleted file mode 100644 index d69e3d6..0000000 --- a/.agents/skills/gooddollar/references/contracts/InvitesV2.abi.yaml +++ /dev/null @@ -1,333 +0,0 @@ -# InvitesV2 — invite codes, inviter levels, and G$ bounties (UUPS upgradeable) -# Bounty amounts on Level use G$ cents (2 decimals). Invitee receives half the inviter bounty on payout. - -meta: - name: InvitesV2 - version: "2.4" - source: - - https://raw.githubusercontent.com/GoodDollar/GoodProtocol/master/contracts/invite/InvitesV2.sol - inherits: - - DAOUpgradeableContract - note: > - join binds invite code and optional inviter; bounty eligibility uses minimumDays, minimumClaims, - whitelist on invitee (and inviter when present), and same-chain whitelisting via Identity - getWhitelistedOnChainId. collectBounties and bountyFor pay invitee bountyToPay/2 and inviter - bountyToPay when applicable. Campaign inviter is address(this) when inviter code maps to contract. - deployments: - mainnet: - production: - Invites: - networkId: 122 - address: "0xCa2F09c3ccFD7aD5cB9276918Bd1868f2b922ea0" - creationBlock: 8853311 - production-celo: - Invites: - networkId: 42220 - address: "0x36829D1Cda92FFF5782d5d48991620664FC857d3" - creationBlock: 18003063 - production-xdc: - Invites: - networkId: 50 - address: "0x6bd698566632bf2e81e2278f1656CB24aAF06D2e" - creationBlock: 95144756 - related: - - references/deep-researches/inviter-invitee-reward-model.md - -initialize: - mutability: nonpayable - access: initializer - inputs: - - _ns: address - - _level0Bounty: uint256 - - _owner: address - outputs: [] - -updateAvatar: - mutability: nonpayable - access: anyone - inputs: [] - outputs: [] - -nativeToken: - mutability: view - inputs: [] - outputs: - - token: address - -dao: - mutability: view - inputs: [] - outputs: - - controller: address - -avatar: - mutability: view - inputs: [] - outputs: - - addr: address - -nameService: - mutability: view - inputs: [] - outputs: - - ns: address - -upgradeTo: - mutability: nonpayable - access: ownerOrAvatar - inputs: - - newImplementation: address - outputs: [] - -upgradeToAndCall: - mutability: payable - access: ownerOrAvatar - inputs: - - newImplementation: address - - data: bytes - outputs: [] - -proxiableUUID: - mutability: view - inputs: [] - outputs: - - slot: bytes32 - -setLevelExpirationEnabled: - mutability: nonpayable - access: ownerOrAvatar - inputs: - - _isEnabled: bool - outputs: [] - -getIdentity: - mutability: view - inputs: [] - outputs: - - identity: address - -join: - notes: - - "Registers invite code; may set inviter; may trigger _bountyFor when canCollectBountyFor is already true." - mutability: nonpayable - access: anyone - inputs: - - _myCode: bytes32 - - _inviterCode: bytes32 - outputs: [] - emits: [InviteeJoined] - errors: [NOT_ACTIVE, INVITE_CODE_IN_USE, SELF_INVITE, USER_ALREADY_JOINED] - -canCollectBountyFor: - notes: - - "Primary eligibility gate: checks active state, whitelist, minimumDays, minimumClaims, unpaid bounty, and chain constraints." - mutability: view - inputs: - - _invitee: address - outputs: - - ok: bool - -getInvitees: - mutability: view - inputs: - - _inviter: address - outputs: - - invitees: address[] - -getPendingInvitees: - mutability: view - inputs: - - _inviter: address - outputs: - - pending: address[] - -getPendingBounties: - mutability: view - inputs: - - _inviter: address - outputs: - - count: uint256 - -bountyFor: - notes: - - "Single-invitee payout path; revalidates eligibility and transfers bounty shares to inviter/invitee on success." - mutability: nonpayable - access: anyone - inputs: - - _invitee: address - outputs: - - bounty: uint256 - emits: [InviterBounty] - errors: [NOT_ACTIVE, NOT_ELIGIBLE_BOUNTY] - -collectBounties: - notes: - - "Batch payout path over caller pending invitees; useful for claiming multiple matured bounties in one tx." - mutability: nonpayable - access: anyone - inputs: [] - outputs: [] - emits: [InviterBounty] - errors: [NOT_ACTIVE] - -setLevel: - notes: - - "Configures inviter level progression rule and bounty amount (bounty units are G$ cents)." - mutability: nonpayable - access: ownerOrAvatar - inputs: - - _lvl: uint256 - - _toNext: uint256 - - _bounty: uint256 - - _daysToComplete: uint256 - outputs: [] - -setActive: - mutability: nonpayable - access: ownerOrAvatar - inputs: - - _active: bool - outputs: [] - -setCampaignCode: - notes: - - "Maps a campaign code to contract-address inviter flow (address(this)) used by join." - mutability: nonpayable - access: ownerOrAvatar - inputs: - - _code: bytes32 - outputs: [] - -setMinimums: - notes: - - "Sets minimumClaims and minimumDays thresholds used by canCollectBountyFor." - mutability: nonpayable - access: ownerOrAvatar - inputs: - - _minClaims: uint8 - - _minDays: uint8 - outputs: [] - -end: - mutability: nonpayable - access: ownerOrAvatar - inputs: [] - outputs: [] - errors: [NOT_ACTIVE] - -setOwner: - mutability: nonpayable - access: ownerOrAvatar - inputs: - - _owner: address - outputs: [] - -version: - mutability: pure - inputs: [] - outputs: - - v: string - -codeToUser: - mutability: view - inputs: - - code: bytes32 - outputs: - - user: address - -users: - notes: - - "Public getter omits dynamic invitees/pending arrays; use getInvitees and getPendingInvitees." - mutability: view - inputs: - - user: address - outputs: - - invitedBy: address - - inviteCode: bytes32 - - bountyPaid: bool - - level: uint256 - - levelStarted: uint256 - - totalApprovedInvites: uint256 - - totalEarned: uint256 - - joinedAt: uint256 - - bountyAtJoin: uint256 - -levels: - notes: - - "bounty is in G$ cents (2 decimals). Reserved struct slots are not exposed on the getter." - mutability: view - inputs: - - lvl: uint256 - outputs: - - toNext: uint256 - - bounty: uint256 - - daysToComplete: uint256 - -owner: - mutability: view - inputs: [] - outputs: - - addr: address - -goodDollar: - mutability: view - inputs: [] - outputs: - - token: address - -active: - mutability: view - inputs: [] - outputs: - - ok: bool - -stats: - notes: - - "Reserved Stats struct slots are not exposed on the getter." - mutability: view - inputs: [] - outputs: - - totalApprovedInvites: uint256 - - totalBountiesPaid: uint256 - - totalInvited: uint256 - -levelExpirationEnabled: - mutability: view - inputs: [] - outputs: - - ok: bool - -minimumClaims: - mutability: view - inputs: [] - outputs: - - n: uint8 - -minimumDays: - mutability: view - inputs: [] - outputs: - - n: uint8 - -events: - InviteeJoined: - indexed: - - inviter: address - - invitee: address - data: [] - InviterBounty: - indexed: - - inviter: address - - invitee: address - data: - - bountyPaid: uint256 - - inviterLevel: uint256 - - earnedLevel: bool - -errors: - NOT_ACTIVE: "not active — isActive modifier." - ONLY_OWNER_OR_AVATAR: "Only owner or avatar can perform this action — ownerOrAvatar." - INVITE_CODE_IN_USE: "invite code already in use — join." - SELF_INVITE: "self invite — join." - USER_ALREADY_JOINED: "user already joined — join." - NOT_ELIGIBLE_BOUNTY: "user not elligble for bounty yet — bountyFor." diff --git a/.agents/skills/gooddollar/references/contracts/InvitesV2.selectors.yaml b/.agents/skills/gooddollar/references/contracts/InvitesV2.selectors.yaml deleted file mode 100644 index d717955..0000000 --- a/.agents/skills/gooddollar/references/contracts/InvitesV2.selectors.yaml +++ /dev/null @@ -1,41 +0,0 @@ -# Generated by scripts/selectors.mjs -functions: - initialize(address,uint256,address): 0xc350a1b5 - updateAvatar(): 0x1b3c90a8 - nativeToken(): 0xe1758bd8 - dao(): 0x4162169f - avatar(): 0x5aef7de6 - nameService(): 0x3e6326fc - upgradeTo(address): 0x3659cfe6 - upgradeToAndCall(address,bytes): 0x4f1ef286 - proxiableUUID(): 0x52d1902d - setLevelExpirationEnabled(bool): 0x21132aad - getIdentity(): 0x36afc6fa - join(bytes32,bytes32): 0x5b419a65 - canCollectBountyFor(address): 0x6d619ef8 - getInvitees(address): 0xe9881a5e - getPendingInvitees(address): 0xe951a3aa - getPendingBounties(address): 0x41155d5e - bountyFor(address): 0xb6567cd5 - collectBounties(): 0xaf6346b0 - setLevel(uint256,uint256,uint256,uint256): 0xb9fb2d18 - setActive(bool): 0xacec338a - setCampaignCode(bytes32): 0xf14b8649 - setMinimums(uint8,uint8): 0x47826c82 - end(): 0xefbe1c1c - setOwner(address): 0x13af4035 - version(): 0x54fd4d50 - codeToUser(bytes32): 0xba6f5680 - users(address): 0xa87430ba - levels(uint256): 0xb2596a67 - owner(): 0x8da5cb5b - goodDollar(): 0x119e5bf3 - active(): 0x02fb0c5e - stats(): 0xd80528ae - levelExpirationEnabled(): 0xa1df6fd3 - minimumClaims(): 0xc121cb92 - minimumDays(): 0xdf0dca04 -events: - InviteeJoined(address,address): 0xd8c638d8979e2ba5dba1f0d66246ee4b1c54b838f0e0a2b601365345eb23b051 - InviterBounty(address,address,uint256,uint256,bool): 0x6081787cd1bd02ab1576c52f03e8710d792d460e7881c3155d77d23893f3768b -errors: {} diff --git a/.agents/skills/gooddollar/references/contracts/MentoBroker.abi.yaml b/.agents/skills/gooddollar/references/contracts/MentoBroker.abi.yaml deleted file mode 100644 index f6f47f4..0000000 --- a/.agents/skills/gooddollar/references/contracts/MentoBroker.abi.yaml +++ /dev/null @@ -1,259 +0,0 @@ -# Mento Broker (IBroker + IBrokerAdmin) — swap router and trading-limit gate for GoodDollar Mento rails -# Interface definitions are vendored in GoodProtocol; implementation lives in mento-core. - -meta: - name: Broker - version: IBroker / IBrokerAdmin - source: - - https://raw.githubusercontent.com/GoodDollar/GoodProtocol/master/contracts/MentoInterfaces.sol - - https://raw.githubusercontent.com/mento-org/mento-core/main/contracts/swap/Broker.sol - - https://raw.githubusercontent.com/mento-org/mento-core/main/contracts/interfaces/IBroker.sol - implements: [IBroker, IBrokerAdmin] - note: > - swapIn is exact-input; swapOut is exact-output. Quotes route through the - configured exchangeProvider + exchangeId. Reverts use require strings in - Broker.sol plus TradingLimits library checks ("amountOutMin not met", - "amountInMax exceeded", trading-limit errors). - deployments: - mainnet: - production-celo: - MentoBroker: - networkId: 42220 - address: "0x88de45906D4F5a57315c133620cfa484cB297541" - creationBlock: 31415857 - production-xdc: - MentoBroker: - networkId: 50 - address: "0x88de45906D4F5a57315c133620cfa484cB297541" - creationBlock: 100091095 - related: - - https://docs.gooddollar.org/for-developers/core-contracts/mentobroker - - references/guides/swap.md - -initialize: - mutability: nonpayable - access: initializer - inputs: - - _exchangeProviders: address[] - - _reserves: address[] - outputs: [] - -setReserves: - notes: - - "Updates reserve address per already-listed provider without changing provider registration." - mutability: nonpayable - access: owner - inputs: - - _exchangeProviders: address[] - - _reserves: address[] - outputs: [] - emits: [ReserveSet] - errors: - - EXCHANGE_PROVIDER_MISSING - - RESERVE_ZERO - -addExchangeProvider: - mutability: nonpayable - access: owner - inputs: - - exchangeProvider: address - - reserve: address - outputs: - - index: uint256 - emits: [ExchangeProviderAdded, ReserveSet] - errors: - - PROVIDER_ALREADY_LISTED - - PROVIDER_ZERO - - RESERVE_ZERO - -removeExchangeProvider: - mutability: nonpayable - access: owner - inputs: - - exchangeProvider: address - - index: uint256 - outputs: [] - emits: [ExchangeProviderRemoved] - errors: - - INDEX_MISMATCH - -getAmountIn: - notes: - - "Exact-output quote path: returns required tokenIn for target amountOut." - - "Pre-checks collateral reserve balance when tokenOut is collateral." - mutability: view - inputs: - - exchangeProvider: address - - exchangeId: bytes32 - - tokenIn: address - - tokenOut: address - - amountOut: uint256 - outputs: - - amountIn: uint256 - errors: - - EXCHANGE_PROVIDER_MISSING - - INSUFFICIENT_RESERVE_BALANCE - -getAmountOut: - notes: - - "Exact-input quote path: returns expected tokenOut for fixed amountIn." - - "Pre-checks collateral reserve balance when tokenOut is collateral." - mutability: view - inputs: - - exchangeProvider: address - - exchangeId: bytes32 - - tokenIn: address - - tokenOut: address - - amountIn: uint256 - outputs: - - amountOut: uint256 - errors: - - EXCHANGE_PROVIDER_MISSING - - INSUFFICIENT_RESERVE_BALANCE - -swapIn: - notes: - - "Transfers tokenIn from msg.sender then delivers tokenOut; enforces amountOut >= amountOutMin after exchange + limits." - mutability: nonpayable - access: nonReentrant - inputs: - - exchangeProvider: address - - exchangeId: bytes32 - - tokenIn: address - - tokenOut: address - - amountIn: uint256 - - amountOutMin: uint256 - outputs: - - amountOut: uint256 - emits: [Swap] - errors: - - EXCHANGE_PROVIDER_MISSING - - INSUFFICIENT_RESERVE_BALANCE - - AMOUNT_OUT_MIN_NOT_MET - - TRADING_LIMIT_OR_SAFE_TRANSFER - -swapOut: - notes: - - "Computes required tokenIn then pulls up to amountInMax; reverts if amountIn would exceed cap." - mutability: nonpayable - access: nonReentrant - inputs: - - exchangeProvider: address - - exchangeId: bytes32 - - tokenIn: address - - tokenOut: address - - amountOut: uint256 - - amountInMax: uint256 - outputs: - - amountIn: uint256 - emits: [Swap] - errors: - - EXCHANGE_PROVIDER_MISSING - - INSUFFICIENT_RESERVE_BALANCE - - AMOUNT_IN_MAX_EXCEEDED - - TRADING_LIMIT_OR_SAFE_TRANSFER - -burnStableTokens: - notes: - - "Owner-maintained escape hatch burning stables from msg.sender via reserve plumbing." - mutability: nonpayable - access: owner - inputs: - - token: address - - amount: uint256 - outputs: - - ok: bool - errors: - - COLLATERAL_TRANSFER_FAILED - -configureTradingLimit: - notes: - - "Sets per (exchangeId, token) limit config used by swapIn/swapOut guardTradingLimits checks." - mutability: nonpayable - access: owner - inputs: - - exchangeId: bytes32 - - token: address - - config: TradingLimits.Config - outputs: [] - emits: [TradingLimitConfigured] - -getExchangeProviders: - notes: - - "Discovery helper for clients that need the active provider set before quoting/swapping." - mutability: view - inputs: [] - outputs: - - providers: address[] - -exchangeProviders: - mutability: view - inputs: - - index: uint256 - outputs: - - exchangeProvider: address - -isExchangeProvider: - mutability: view - inputs: - - exchangeProvider: address - outputs: - - ok: bool - -tradingLimitsState: - mutability: view - inputs: - - eid: bytes32 - outputs: - - state: TradingLimits.State - -tradingLimitsConfig: - mutability: view - inputs: - - eid: bytes32 - outputs: - - config: TradingLimits.Config - -events: - Swap: - indexed: - - exchangeId: bytes32 - - trader: address - - tokenIn: address - data: - - exchangeProvider: address - - tokenOut: address - - amountIn: uint256 - - amountOut: uint256 - TradingLimitConfigured: - indexed: [] - data: - - exchangeId: bytes32 - - token: address - - config: TradingLimits.Config - ExchangeProviderAdded: - indexed: - - exchangeProvider: address - data: [] - ExchangeProviderRemoved: - indexed: - - exchangeProvider: address - data: [] - ReserveSet: - indexed: - - newAddress: address - - prevAddress: address - data: [] - -errors: - EXCHANGE_PROVIDER_MISSING: "ExchangeProvider does not exist" - EXCHANGE_PROVIDER_EXISTS: "ExchangeProvider already exists in the list" - PROVIDER_ZERO: "ExchangeProvider address can't be 0" - RESERVE_ZERO: "Reserve address can't be 0" - INDEX_MISMATCH: "index doesn't match provider" - INSUFFICIENT_RESERVE_BALANCE: "Insufficient balance in reserve" - AMOUNT_OUT_MIN_NOT_MET: "amountOutMin not met" - AMOUNT_IN_MAX_EXCEEDED: "amountInMax exceeded" - COLLATERAL_TRANSFER_FAILED: "Transfer of the collateral asset failed" - AMOUNT_TOO_LARGE: "amountIn too large / amountOut too large — uint256 to int256 safety checks" - TRADING_LIMIT_OR_SAFE_TRANSFER: "TradingLimits library reverts or ERC20 safety failures during swap" diff --git a/.agents/skills/gooddollar/references/contracts/MentoBroker.selectors.yaml b/.agents/skills/gooddollar/references/contracts/MentoBroker.selectors.yaml deleted file mode 100644 index 249edce..0000000 --- a/.agents/skills/gooddollar/references/contracts/MentoBroker.selectors.yaml +++ /dev/null @@ -1,24 +0,0 @@ -# Generated by scripts/selectors.mjs -functions: - initialize(address[],address[]): 0x73cf25f8 - setReserves(address[],address[]): 0xddeb9dd2 - addExchangeProvider(address,address): 0x770d0a34 - removeExchangeProvider(address,uint256): 0x04710d53 - getAmountIn(address,bytes32,address,address,uint256): 0x04e45640 - getAmountOut(address,bytes32,address,address,uint256): 0xa20f2305 - swapIn(address,bytes32,address,address,uint256,uint256): 0xddbbe850 - swapOut(address,bytes32,address,address,uint256,uint256): 0xd163b135 - burnStableTokens(address,uint256): 0x131cab2a - configureTradingLimit(bytes32,address,(uint32,uint32,int48,int48,int48,int48,int48,uint8)): 0xa868d140 - getExchangeProviders(): 0x2cac2568 - exchangeProviders(uint256): 0xc4454fdc - isExchangeProvider(address): 0xd1d786b1 - tradingLimitsState(bytes32): 0xf01ecd17 - tradingLimitsConfig(bytes32): 0x821a816c -events: - Swap(bytes32,address,address,address,address,uint256,uint256): 0x46e6aeaebfb8f1b6a9be6403b5fc420d9827172046f365e786acb9d5b56c9409 - TradingLimitConfigured(bytes32,address,(uint32,uint32,int48,int48,int48,int48,int48,uint8)): 0x3ed50aa123e1e547aa90fcf88624ef8278d253e252bb1feac75eda93e1905bb6 - ExchangeProviderAdded(address): 0x2ee2cb0721ec60b86190cae5c48e25064b69b35abad32452a4ec99d232033de2 - ExchangeProviderRemoved(address): 0x29e92ab2e30f4f74283034c28c451b6faac986b554f1808101eb6418bdba19d4 - ReserveSet(address,address): 0xb69e1c416d8be92ac92c8e97e77c4626fba5e6ab50161099f659ea3303479e50 -errors: {} diff --git a/.agents/skills/gooddollar/references/contracts/MessagePassingBridge.abi.yaml b/.agents/skills/gooddollar/references/contracts/MessagePassingBridge.abi.yaml deleted file mode 100644 index d4bb1f2..0000000 --- a/.agents/skills/gooddollar/references/contracts/MessagePassingBridge.abi.yaml +++ /dev/null @@ -1,542 +0,0 @@ -meta: - name: MessagePassingBridge - version: Axelar + LayerZero message passing - source: - - https://raw.githubusercontent.com/GoodDollar/GoodBridge/master/packages/bridge-contracts/contracts/messagePassingBridge/MessagePassingBridge.sol - - https://raw.githubusercontent.com/GoodDollar/GoodBridge/master/packages/bridge-contracts/contracts/messagePassingBridge/IMessagePassingBridge.sol - note: > - Bridge implementation that burns source tokens and mints destination tokens, - transporting requests through Axelar or LayerZero. - Cross-chain transport uses msg.value on the source (LayerZero estimateSendFee path, Axelar gas prepay); destination mint applies bridgeFees bps to the delivered G$ amount. See references/guides/bridge.md "Bridge fee context". - deployments: - mainnet: - production: - MpbBridge: - networkId: 122 - address: "0xa3247276DbCC76Dd7705273f766eB3E8a5ecF4a5" - creationBlock: 25464921 - production-celo: - MpbBridge: - networkId: 42220 - address: "0xa3247276DbCC76Dd7705273f766eB3E8a5ecF4a5" - creationBlock: 21473545 - production-xdc: - MpbBridge: - networkId: 50 - address: "0xa3247276DbCC76Dd7705273f766eB3E8a5ecF4a5" - creationBlock: 95254417 - related: - - references/guides/bridge.md - -initialize: - notes: - - "Initial bootstrap for DAO wiring and bridge policy state." - - "Sets guardian to msg.sender and uses NameService UBISCHEME as feeRecipient fallback to avatar when missing." - - "Preloads default LZ mappings for Ethereum, Celo, Fuse, and XDC using this contract as trusted remote." - mutability: nonpayable - access: initializer - inputs: - - nameService: address - - limits: (uint256,uint256,uint256,uint256,bool) - - fees: (uint256,uint256,uint256) - outputs: [] - -upgrade: - notes: - - "Reinitializer for migration path; re-applies default LZ mappings through internal add function." - - "Used when upgrading existing proxy deployments to mapping-aware version." - mutability: nonpayable - access: reinitializer - inputs: [] - outputs: [] - -addLzChainSupport: - notes: - - "Administrative chain wiring method for LayerZero transport." - - "Writes both forward (chainId->lzChainId) and reverse (lzChainId->chainId) mappings." - - "Also updates trustedRemoteLookup to enforce source-contract authenticity on receive." - mutability: nonpayable - access: ownerOrAvatarOrGuardian - inputs: - - lzChainId: uint16 - - chainId: uint256 - - remote: address - outputs: [] - -approveRequest: - notes: - - "Manual override for stuck/exceptional inbound requests." - - "When approved, destination _bridgeFrom skips limits enforcement for that request id." - mutability: nonpayable - access: ownerOrAvatarOrGuardian - inputs: - - id: uint256 - outputs: [] - -preventRequest: - notes: - - "Emergency/manual block for a specific request id." - - "Prevents execution by pre-marking executedRequests[id]=true." - mutability: nonpayable - access: ownerOrAvatarOrGuardian - inputs: - - id: uint256 - outputs: [] - -setFeeRecipient: - notes: - - "Sets destination fee mint recipient." - - "If feeRecipient is zero, fee minting is skipped in _bridgeFrom." - mutability: nonpayable - access: ownerOrAvatarOrGuardian - inputs: - - recipient: address - outputs: [] - -setBridgeLimits: - notes: - - "Updates operational throttles: min amount, tx cap, account/day cap, global/day cap, whitelist mode." - - "These limits are checked by canBridge and enforced in _enforceLimits." - mutability: nonpayable - access: ownerOrAvatarOrGuardian - inputs: - - limits: (uint256,uint256,uint256,uint256,bool) - outputs: [] - -setBridgeFees: - notes: - - "Updates bridge fee parameters in basis points with min/max clamps." - - "Reverts when fee exceeds 10000 bps." - - "Effective fee deduction is computed in _takeFee during destination execution." - mutability: nonpayable - access: ownerOrAvatarOrGuardian - inputs: - - fees: (uint256,uint256,uint256) - outputs: [] - -setDisabledBridges: - notes: - - "Toggles allowlist state for source bridge combinations." - - "Key format is keccak256(abi.encode(sourceChainId, BridgeService))." - - "Checked in _bridgeFrom before request execution." - mutability: nonpayable - access: ownerOrAvatarOrGuardian - inputs: - - bridgeKeys: bytes32[] - - disabled: bool[] - outputs: [] - -setFaucet: - notes: - - "Configures optional faucet top-up callback used after successful destination processing." - mutability: nonpayable - access: ownerOrAvatarOrGuardian - inputs: - - _faucet: address - outputs: [] - -setGuardian: - notes: - - "Rotates guardian authority used by owner/avatar/guardian admin gate." - mutability: nonpayable - access: ownerOrAvatarOrGuardian - inputs: - - _guardian: address - outputs: [] - -withdraw: - notes: - - "Avatar-only rescue function for arbitrary token balances held by bridge." - - "Amount 0 means full balance withdrawal." - mutability: nonpayable - access: avatar - inputs: - - token: address - - amount: uint256 - outputs: [] - -pauseBridge: - notes: - - "Sets isClosed state for outbound flow." - - "When closed, _bridgeTo reverts with BRIDGE_LIMITS('closed')." - mutability: nonpayable - access: ownerOrAvatarOrGuardian - inputs: - - isPaused: bool - outputs: [] - -canBridge: - notes: - - "Purely diagnostic read path for preflight checks." - - "Returns (ok, reason) using BridgeHelperLibrary policy evaluation." - - "Includes close flag, whitelist gate, and per-account/global daily limit windows." - mutability: view - inputs: - - from: address - - amount: uint256 - outputs: - - isWithinLimit: bool - - error: string - -bridgeTo: - notes: - - "Generic outbound bridge entrypoint selecting BridgeService.AXELAR or BridgeService.LZ." - - "Burns source-side token amount, normalizes to 18 decimals, and emits BridgeRequest with request id." - - "Requires msg.value for transport fee payment." - mutability: payable - access: anyone - inputs: - - target: address - - targetChainId: uint256 - - amount: uint256 - - bridge: uint8 - outputs: [] - -bridgeToWithLz: - notes: - - "Outbound convenience wrapper fixed to LayerZero transport." - - "If adapterParams is empty, contract injects default type-1 options with 400k gas." - - "Compares required native fee from estimateSendFee against msg.value and reverts on underpayment." - mutability: payable - access: anyone - inputs: - - target: address - - targetChainId: uint256 - - amount: uint256 - - adapterParams: bytes - outputs: [] - -bridgeToWithAxelar: - notes: - - "Outbound convenience wrapper fixed to Axelar transport." - - "Uses gasRefundAddress when provided, otherwise msg.sender as refund recipient." - mutability: payable - access: anyone - inputs: - - target: address - - targetChainId: uint256 - - amount: uint256 - - gasRefundAddress: address - outputs: [] - -toLzChainId: - notes: - - "Lookup helper from local chain id to LayerZero chain id." - mutability: view - inputs: - - chainId: uint256 - outputs: - - lzChainId: uint16 - -fromLzChainId: - notes: - - "Lookup helper from LayerZero chain id to local chain id." - mutability: view - inputs: - - lzChainId: uint16 - outputs: - - chainId: uint256 - -toAxelarChainId: - notes: - - "Pure mapping in current implementation: chainId 1 -> 'Ethereum', 5 -> 'ethereum-2', 42220 and 44787 -> 'celo'; any other id returns empty string and outbound Axelar reverts UNSUPPORTED_CHAIN." - mutability: pure - inputs: - - chainId: uint256 - outputs: - - axlChainId: string - -fromAxelarChainId: - notes: - - "Maps Axelar chain-name strings back into local numeric chain ids." - mutability: pure - inputs: - - axlChainId: string - outputs: - - chainId: uint256 - -estimateSendFee: - notes: - - "Transport fee preflight for LZ path." - - "Builds payload with request id set to 0 for estimation." - - "Returns (0,0) on endpoint estimation failure in handler implementation." - - "_normalizedAmount must match BridgeHelperLibrary.normalizeFromTokenTo18Decimals burned raw amount using native token decimals on the outbound chain." - mutability: view - inputs: - - _dstChainId: uint16 - - _fromAddress: address - - _toAddress: address - - _normalizedAmount: uint256 - - _useZro: bool - - _adapterParams: bytes - outputs: - - nativeFee: uint256 - - zroFee: uint256 - -lzReceive: - notes: - - "LayerZero receive entrypoint." - - "Validates caller is configured endpoint before dispatching nonblocking receive pipeline." - mutability: nonpayable - inputs: - - _srcChainId: uint16 - - _srcAddress: bytes - - _nonce: uint64 - - _payload: bytes - outputs: [] - -lzEndpoint_: - notes: - - "Immutable LayerZero endpoint configured in constructor." - mutability: view - inputs: [] - outputs: - - endpoint: address - -HOME_CHAIN_ID: - notes: - - "Immutable deployment home chain marker." - mutability: view - inputs: [] - outputs: - - chainId: uint32 - -guardian: - notes: - - "Current guardian account authorized for admin operations." - mutability: view - inputs: [] - outputs: - - account: address - -executedRequests: - notes: - - "Replay protection state for inbound request ids." - mutability: view - inputs: - - id: uint256 - outputs: - - done: bool - -disabledSourceBridges: - notes: - - "Per-source bridge toggle state keyed by (sourceChainId, bridgeService) hash." - mutability: view - inputs: - - key: bytes32 - outputs: - - disabled: bool - -isClosed: - notes: - - "Outbound bridge pause state." - mutability: view - inputs: [] - outputs: - - closed: bool - -bridgeFees: - notes: - - "Current fee policy parameters: minFee, maxFee, feeBps." - mutability: view - inputs: [] - outputs: - - minFee: uint256 - - maxFee: uint256 - - fee: uint256 - -bridgeLimits: - notes: - - "Current bridge traffic limits and whitelist policy." - mutability: view - inputs: [] - outputs: - - dailyLimit: uint256 - - txLimit: uint256 - - accountDailyLimit: uint256 - - minAmount: uint256 - - onlyWhitelisted: bool - -bridgeDailyLimit: - notes: - - "Aggregate 24h bridge usage tracker." - mutability: view - inputs: [] - outputs: - - lastTransferReset: uint256 - - bridged24Hours: uint256 - -accountsDailyLimit: - notes: - - "Per-account 24h usage tracker." - mutability: view - inputs: - - account: address - outputs: - - lastTransferReset: uint256 - - bridged24Hours: uint256 - -faucet: - notes: - - "Optional gas top-up contract used on destination completion." - mutability: view - inputs: [] - outputs: - - addr: address - -currentId: - notes: - - "Monotonic nonce component used to derive outbound request ids." - mutability: view - inputs: [] - outputs: - - id: uint256 - -lzChainIdsMapping: - notes: - - "Local chain id -> LayerZero chain id mapping." - mutability: view - inputs: - - chainId: uint256 - outputs: - - lzChainId: uint16 - -feeRecipient: - notes: - - "Address receiving bridge fee mints on destination." - mutability: view - inputs: [] - outputs: - - recipient: address - -approvedRequests: - notes: - - "Manual approvals allowing request execution above standard limits." - mutability: view - inputs: - - id: uint256 - outputs: - - approved: bool - -lzChainToIdsMapping: - notes: - - "LayerZero chain id -> local chain id mapping." - mutability: view - inputs: - - lzChainId: uint16 - outputs: - - chainId: uint256 - -trustedRemoteLookup: - notes: - - "Trusted remote path used to authenticate inbound LZ/Axelar source contract." - mutability: view - inputs: - - lzChainId: uint16 - outputs: - - path: bytes - -gateway: - notes: - - "Axelar gateway address inherited from AxelarExecutable." - mutability: view - inputs: [] - outputs: - - addr: address - -gasService: - notes: - - "Axelar gas service used to prepay cross-chain execution." - mutability: view - inputs: [] - outputs: - - addr: address - -nameService: - notes: - - "DAO NameService pointer from DAOUpgradeableContract." - mutability: view - inputs: [] - outputs: - - addr: address - -avatar: - notes: - - "DAO avatar authority address." - mutability: view - inputs: [] - outputs: - - addr: address - -owner: - notes: - - "Ownable owner from upgradeable ownership flow." - mutability: view - inputs: [] - outputs: - - account: address - -events: - BridgeRequest: - indexed: - - from: address - - to: address - - id: uint256 - data: - - targetChainId: uint256 - - normalizedAmount: uint256 - - timestamp: uint256 - - bridge: uint8 - note: "Outbound intent event; relayers consume this to deliver payload on destination." - ExecutedTransfer: - indexed: - - from: address - - to: address - - id: uint256 - data: - - normalizedAmount: uint256 - - fee: uint256 - - sourceChainId: uint256 - - bridge: uint8 - note: "Destination completion event after replay checks, source-auth checks, limit checks, and mint/fee mint." - FalseSender: - indexed: [] - data: - - sourceChainId: uint256 - - sourceAddress: address - note: "Inbound message ignored because source contract does not match trusted remote path." - -errors: - AlreadyInitialized: "LZ chain support already initialized for this lz chain id." - NOT_GUARDIAN: - inputs: - - sender: address - WRONG_TOKEN: - inputs: - - token: address - INVALID_TARGET_OR_CHAINID: - inputs: - - target: address - - chainId: uint256 - BRIDGE_LIMITS: - inputs: - - reason: string - TRANSFER_FROM: "Source burn/transferFrom style failure." - TRANSFER: "Destination transfer style failure." - ALREADY_EXECUTED: - inputs: - - requestId: uint256 - MISSING_FEE: "Bridge call requires msg.value for transport fee." - UNSUPPORTED_CHAIN: - inputs: - - chainId: uint256 - LZ_FEE: - inputs: - - required: uint256 - - sent: uint256 - INVALID_SENDER: - inputs: - - _srcAddress: bytes - INVALID_ENDPOINT: - inputs: - - lzEndpoint: address diff --git a/.agents/skills/gooddollar/references/contracts/MessagePassingBridge.selectors.yaml b/.agents/skills/gooddollar/references/contracts/MessagePassingBridge.selectors.yaml deleted file mode 100644 index 104b943..0000000 --- a/.agents/skills/gooddollar/references/contracts/MessagePassingBridge.selectors.yaml +++ /dev/null @@ -1,52 +0,0 @@ -# Generated by scripts/selectors.mjs -functions: - initialize(address,(uint256,uint256,uint256,uint256,bool),(uint256,uint256,uint256)): 0xfad16abe - upgrade(): 0xd55ec697 - addLzChainSupport(uint16,uint256,address): 0xc01c8123 - approveRequest(uint256): 0xd7d1bbdb - preventRequest(uint256): 0xc612f9ea - setFeeRecipient(address): 0xe74b981b - setBridgeLimits((uint256,uint256,uint256,uint256,bool)): 0x29b70872 - setBridgeFees((uint256,uint256,uint256)): 0x82dc737d - setDisabledBridges(bytes32[],bool[]): 0xc78ab882 - setFaucet(address): 0xd8b31c77 - setGuardian(address): 0x8a0dac4a - withdraw(address,uint256): 0xf3fef3a3 - pauseBridge(bool): 0x1a394795 - canBridge(address,uint256): 0x3095634a - bridgeTo(address,uint256,uint256,uint8): 0x1fec5c5c - bridgeToWithLz(address,uint256,uint256,bytes): 0xc56bbdd9 - bridgeToWithAxelar(address,uint256,uint256,address): 0x40a00aaf - toLzChainId(uint256): 0x5b23a990 - fromLzChainId(uint16): 0x16ad5512 - toAxelarChainId(uint256): 0x9a9ee081 - fromAxelarChainId(string): 0x56026f37 - estimateSendFee(uint16,address,address,uint256,bool,bytes): 0x05fead15 - lzReceive(uint16,bytes,uint64,bytes): 0x001d3567 - lzEndpoint_(): 0x020051cf - HOME_CHAIN_ID(): 0x8f65be85 - guardian(): 0x452a9320 - executedRequests(uint256): 0x425cfb53 - disabledSourceBridges(bytes32): 0x69c20d36 - isClosed(): 0xc2b6b58c - bridgeFees(): 0x7b0240c0 - bridgeLimits(): 0xc6dd812f - bridgeDailyLimit(): 0xb2f7667f - accountsDailyLimit(address): 0xd4227947 - faucet(): 0xde5f72fd - currentId(): 0xe00dd161 - lzChainIdsMapping(uint256): 0xb5569f18 - feeRecipient(): 0x46904840 - approvedRequests(uint256): 0x0dce292e - lzChainToIdsMapping(uint16): 0x73800fc4 - trustedRemoteLookup(uint16): 0x7533d788 - gateway(): 0x116191b6 - gasService(): 0x6a22d8cc - nameService(): 0x3e6326fc - avatar(): 0x5aef7de6 - owner(): 0x8da5cb5b -events: - BridgeRequest(address,address,uint256,uint256,uint256,uint256,uint8): 0x34b675c8c84b6a9e7979a0d3a54f2b036a19d6444167091a925af2d81e8e66fe - ExecutedTransfer(address,address,uint256,uint256,uint256,uint256,uint8): 0x81e772e0c4366ddbae472926005267ef278dbb257be45dfe97c676ceae348dbe - FalseSender(uint256,address): 0x1eafb58197ea0dc76b9278ccad47f61a239f00b017d89a19081a89321cce213d -errors: {} diff --git a/.agents/skills/gooddollar/references/contracts/NameService.abi.yaml b/.agents/skills/gooddollar/references/contracts/NameService.abi.yaml deleted file mode 100644 index 01692b7..0000000 --- a/.agents/skills/gooddollar/references/contracts/NameService.abi.yaml +++ /dev/null @@ -1,104 +0,0 @@ -# NameService — string-key to address registry for GoodProtocol deployments -# Resolves keys such as IDENTITY, UBISCHEME, GOODDOLLAR, GDAO_STAKING. - -meta: - name: NameService - version: UUPS-upgradeable v1 - source: - - https://raw.githubusercontent.com/GoodDollar/GoodProtocol/master/contracts/utils/NameService.sol - implements: [] - inherits: [Initializable, UUPSUpgradeable] - note: > - Almost every integration starts here. Writes are restricted to the DAO - avatar. Reads are permissionless. Use getAddress(string) with the same - key strings your deployment documented in releases/deployment.json. - deployments: - mainnet: - production: - NameService: - networkId: 122 - address: "0xec6dcE387B1616a0c44fF2E4fA9E90e53Cf14eb0" - creationBlock: 15740314 - production-celo: - NameService: - networkId: 42220 - address: "0x0F5dB7a64A6a64052693676CA898EC7F7A94FF4e" - creationBlock: 17237962 - production-xdc: - NameService: - networkId: 50 - address: "0x1e5154Bf5e31FF56051bbd45958b879Fb7a290FE" - creationBlock: 95143608 - related: - - https://docs.gooddollar.org/for-developers/core-contracts/nameservice - - https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json - -addresses: - # Solidity auto-getter for public mapping addresses(bytes32 => address). - notes: - - "Prefer getAddress(string) off-chain; this expects keccak256(abi.encodePacked(name)) for manual lookups." - mutability: view - inputs: - - nameHash: bytes32 - outputs: - - addr: address - -dao: - mutability: view - inputs: [] - outputs: - - controller: address - -initialize: - notes: - - "Initializer wires Controller and optional pre-hashed name batch." - - "Automatically registers CONTROLLER and AVATAR hashes to dao and dao.avatar()." - mutability: nonpayable - access: initializer - inputs: - - _dao: address - - _nameHashes: bytes32[] - - _addresses: address[] - outputs: [] - -setAddress: - notes: - - "Stores addresses[keccak256(bytes(name))] = addr and emits AddressChanged." - mutability: nonpayable - access: avatar - inputs: - - name: string - - addr: address - outputs: [] - emits: [AddressChanged] - errors: [ONLY_AVATAR] - -setAddresses: - notes: - - "Batch write by raw bytes32 keys; no per-name event emission in this loop." - mutability: nonpayable - access: avatar - inputs: - - hash: bytes32[] - - addrs: address[] - outputs: [] - errors: [ONLY_AVATAR] - -getAddress: - notes: - - "Primary lookup used by claim, staking, identity, and swap integrations." - mutability: view - inputs: - - name: string - outputs: - - addr: address - -events: - AddressChanged: - indexed: [] - data: - - name: string - - addr: address - -errors: - ONLY_AVATAR: "only avatar can call this method — revert string on any avatar-gated path including UUPS _authorizeUpgrade." diff --git a/.agents/skills/gooddollar/references/contracts/NameService.selectors.yaml b/.agents/skills/gooddollar/references/contracts/NameService.selectors.yaml deleted file mode 100644 index 48e1bcf..0000000 --- a/.agents/skills/gooddollar/references/contracts/NameService.selectors.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# Generated by scripts/selectors.mjs -functions: - addresses(bytes32): 0x699f200f - dao(): 0x4162169f - initialize(address,bytes32[],address[]): 0xd41b4e72 - setAddress(string,address): 0x9b2ea4bd - setAddresses(bytes32[],address[]): 0x4ab01f5b - getAddress(string): 0xbf40fac1 -events: - AddressChanged(string,address): 0x135cf55549d8538a41f19f46cc85625da93e68b63484cca8fcb9aaf19e520137 -errors: {} diff --git a/.agents/skills/gooddollar/references/contracts/SuperToken.abi.yaml b/.agents/skills/gooddollar/references/contracts/SuperToken.abi.yaml deleted file mode 100644 index abfc91c..0000000 --- a/.agents/skills/gooddollar/references/contracts/SuperToken.abi.yaml +++ /dev/null @@ -1,1033 +0,0 @@ -# SuperToken — the Superfluid Protocol's token standard -# Merges three variants into a single ABI surface: -# • Wrapper Super Token — wraps an existing ERC-20 (upgrade / downgrade) -# • Native Asset Super Token (SETH) — wraps chain-native asset (upgradeByETH / downgradeToETH) -# • Pure Super Token — pre-minted, no underlying token (upgrade/downgrade revert) -# -# Inherits ERC-20, ERC-777, ERC-2612 (permit), EIP-5267, and the Superfluid real-time -# balance and agreement hosting layer from SuperfluidToken. -# -# Proxy / upgradability functions are omitted: -# castrate, getCodeAddress, proxiableUUID, initialize, initializeWithAdmin, updateCode -# Proxy-related events are also omitted: CodeUpdated, Initialized. - -meta: - name: SuperToken - version: v1 - source: - - https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/refs/heads/dev/packages/ethereum-contracts/contracts/superfluid/SuperToken.sol - - https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/refs/heads/dev/packages/ethereum-contracts/contracts/interfaces/superfluid/ISuperToken.sol - - https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/refs/heads/dev/packages/ethereum-contracts/contracts/superfluid/SuperfluidToken.sol - - https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/refs/heads/dev/packages/ethereum-contracts/contracts/interfaces/superfluid/IYieldBackend.sol - inherits: [SuperfluidToken, ISuperToken, UUPSProxiable] - yield_backends: - - name: AaveYieldBackend - note: "Production backend for ERC-20 wrapper tokens using Aave V3" - source: https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/refs/heads/dev/packages/ethereum-contracts/contracts/superfluid/AaveYieldBackend.sol - - name: AaveETHYieldBackend - note: "Variant for native-asset (ETH/WETH) wrapper tokens using Aave V3" - source: https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/refs/heads/dev/packages/ethereum-contracts/contracts/superfluid/AaveETHYieldBackend.sol - - name: ERC4626YieldBackend - note: "Generic backend for any ERC-4626 vault" - source: https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/refs/heads/dev/packages/ethereum-contracts/contracts/superfluid/ERC4626YieldBackend.sol - - name: SparkYieldBackend - note: "Extends ERC4626YieldBackend for Spark Protocol vaults with referral tracking" - source: https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/refs/heads/dev/packages/ethereum-contracts/contracts/superfluid/SparkYieldBackend.sol - variants: - wrapper: "Standard ERC-20 wrapper — upgrade() / downgrade()" - native-asset: "Native asset wrapper (SETH) — upgradeByETH() / downgradeToETH()" - pure: "Pre-minted supply, no underlying — upgrade/downgrade revert" - note: > - Super Tokens are deployed as individual proxies (one per token) by the - SuperTokenFactory. There is no single canonical deployment address. - All proxies share the same logic contract which is upgraded via governance. - -# wrapper super token — a Super Token backed by an ERC-20 underlying token -# native asset super token (SETH) — a Super Token backed by the chain-native asset (ETH, MATIC, etc.) -# pure super token — a Super Token with no underlying; supply is pre-minted at deploy time -# underlying token — the ERC-20 token that a wrapper super token wraps -# real-time balance — balance that changes continuously based on active agreements (CFA/GDA) -# available balance — real-time balance minus locked deposits -# critical — an account whose available balance is negative -# solvent — an account whose real-time balance (before deposit deductions) is non-negative -# operator (ERC-777) — an address authorized to send/burn tokens on behalf of a holder -# buffer / deposit — collateral locked while an outgoing flow is active - -# == ERC-20 Token Info == - -name: - mutability: view - inputs: [] - outputs: - - string - -symbol: - mutability: view - inputs: [] - outputs: - - string - -decimals: - # Always returns 18 regardless of underlying token decimals. - notes: - - "Always returns 18, regardless of the underlying token's decimals (e.g. USDC has 6). The upgrade/downgrade functions handle decimal conversion internally." - mutability: pure - inputs: [] - outputs: - - uint8 - -totalSupply: - mutability: view - inputs: [] - outputs: - - uint256 - -# == ERC-20 Balance & Allowance == - -balanceOf: - # Returns max(0, availableBalance) — clamps negative balances to zero. - # For the full real-time picture, use realtimeBalanceOfNow. - notes: - - "Returns max(0, availableBalance) — negative/critical balances are clamped to zero. Use realtimeBalanceOfNow to detect critical accounts." - mutability: view - inputs: - - account: address - outputs: - - balance: uint256 - -allowance: - mutability: view - inputs: - - account: address - - spender: address - outputs: - - uint256 - -approve: - mutability: nonpayable - access: anyone - inputs: - - spender: address - - amount: uint256 - outputs: - - bool - emits: [Approval] - errors: [SUPER_TOKEN_APPROVE_FROM_ZERO_ADDRESS, SUPER_TOKEN_APPROVE_TO_ZERO_ADDRESS] - -increaseAllowance: - mutability: nonpayable - access: anyone - inputs: - - spender: address - - addedValue: uint256 - outputs: - - bool - emits: [Approval] - errors: [SUPER_TOKEN_APPROVE_FROM_ZERO_ADDRESS, SUPER_TOKEN_APPROVE_TO_ZERO_ADDRESS] - -decreaseAllowance: - mutability: nonpayable - access: anyone - inputs: - - spender: address - - subtractedValue: uint256 - outputs: - - bool - emits: [Approval] - errors: [SUPER_TOKEN_APPROVE_FROM_ZERO_ADDRESS, SUPER_TOKEN_APPROVE_TO_ZERO_ADDRESS] - -# == ERC-20 Transfers == - -transfer: - # ERC-20 transfer. Does NOT invoke ERC-777 send/receive hooks (by design). - mutability: nonpayable - access: anyone - inputs: - - recipient: address - - amount: uint256 - outputs: - - bool - emits: [Sent, Transfer] - errors: [SUPER_TOKEN_TRANSFER_FROM_ZERO_ADDRESS, SUPER_TOKEN_TRANSFER_TO_ZERO_ADDRESS, SF_TOKEN_MOVE_INSUFFICIENT_BALANCE] - -transferFrom: - # ERC-20 transferFrom. Does NOT invoke ERC-777 send/receive hooks. - # Does NOT emit an Approval event on allowance spend (OZ v5 behaviour). - mutability: nonpayable - access: anyone - inputs: - - holder: address - - recipient: address - - amount: uint256 - outputs: - - bool - emits: [Sent, Transfer] - errors: [SUPER_TOKEN_TRANSFER_FROM_ZERO_ADDRESS, SUPER_TOKEN_TRANSFER_TO_ZERO_ADDRESS, SF_TOKEN_MOVE_INSUFFICIENT_BALANCE] - -transferAll: - # Transfer the caller's entire balanceOf to recipient. - mutability: nonpayable - access: anyone # transfers msg.sender's entire balance - inputs: - - recipient: address - emits: [Sent, Transfer] - errors: [SUPER_TOKEN_TRANSFER_FROM_ZERO_ADDRESS, SUPER_TOKEN_TRANSFER_TO_ZERO_ADDRESS, SF_TOKEN_MOVE_INSUFFICIENT_BALANCE] - -# == ERC-777 == - -granularity: - # Always returns 1. - mutability: pure - inputs: [] - outputs: - - uint256 - -send: - # ERC-777 send — invokes tokensToSend / tokensReceived hooks. - mutability: nonpayable - access: anyone - inputs: - - recipient: address - - amount: uint256 - - userData: bytes - emits: [Sent, Transfer] - errors: [SUPER_TOKEN_TRANSFER_FROM_ZERO_ADDRESS, SUPER_TOKEN_TRANSFER_TO_ZERO_ADDRESS, SF_TOKEN_MOVE_INSUFFICIENT_BALANCE, SUPER_TOKEN_NOT_ERC777_TOKENS_RECIPIENT] - -burn: - # ERC-777 burn — in SuperToken this actually performs a downgrade (unwrap). - notes: - - "Gotcha: Reverts with SUPER_TOKEN_NO_UNDERLYING_TOKEN on Pure Super Tokens." - mutability: nonpayable - access: anyone - inputs: - - amount: uint256 - - userData: bytes - emits: [Burned, Transfer, TokenDowngraded] - errors: [SUPER_TOKEN_NO_UNDERLYING_TOKEN, SUPER_TOKEN_BURN_FROM_ZERO_ADDRESS, SF_TOKEN_BURN_INSUFFICIENT_BALANCE, SUPER_TOKEN_INFLATIONARY_DEFLATIONARY_NOT_SUPPORTED] - -authorizeOperator: - mutability: nonpayable - access: anyone - inputs: - - operator: address - emits: [AuthorizedOperator] - -revokeOperator: - mutability: nonpayable - access: anyone - inputs: - - operator: address - emits: [RevokedOperator] - -isOperatorFor: - mutability: view - inputs: - - operator: address - - tokenHolder: address - outputs: - - bool - -defaultOperators: - mutability: view - inputs: [] - outputs: - - "address[]" - -operatorSend: - # ERC-777 operatorSend — invokes tokensToSend / tokensReceived hooks. - mutability: nonpayable - access: operator - inputs: - - sender: address - - recipient: address - - amount: uint256 - - userData: bytes - - operatorData: bytes - emits: [Sent, Transfer] - errors: [SUPER_TOKEN_CALLER_IS_NOT_OPERATOR_FOR_HOLDER, SUPER_TOKEN_TRANSFER_FROM_ZERO_ADDRESS, SUPER_TOKEN_TRANSFER_TO_ZERO_ADDRESS, SF_TOKEN_MOVE_INSUFFICIENT_BALANCE, SUPER_TOKEN_NOT_ERC777_TOKENS_RECIPIENT] - -operatorBurn: - # ERC-777 operatorBurn — like burn(), actually performs a downgrade. - mutability: nonpayable - access: operator - inputs: - - account: address - - amount: uint256 - - userData: bytes - - operatorData: bytes - emits: [Burned, Transfer, TokenDowngraded] - errors: [SUPER_TOKEN_CALLER_IS_NOT_OPERATOR_FOR_HOLDER, SUPER_TOKEN_NO_UNDERLYING_TOKEN, SUPER_TOKEN_BURN_FROM_ZERO_ADDRESS, SF_TOKEN_BURN_INSUFFICIENT_BALANCE, SUPER_TOKEN_INFLATIONARY_DEFLATIONARY_NOT_SUPPORTED] - -# == ERC-20 Permit == - -permit: - mutability: nonpayable - access: anyone - inputs: - - owner: address - - spender: address - - value: uint256 - - deadline: uint256 - - v: uint8 - - r: bytes32 - - s: bytes32 - emits: [Approval] - errors: [SUPER_TOKEN_PERMIT_EXPIRED_SIGNATURE, SUPER_TOKEN_PERMIT_INVALID_SIGNER, ECDSAInvalidSignature, ECDSAInvalidSignatureLength, ECDSAInvalidSignatureS, SUPER_TOKEN_APPROVE_FROM_ZERO_ADDRESS, SUPER_TOKEN_APPROVE_TO_ZERO_ADDRESS] - -nonces: - mutability: view - inputs: - - owner: address - outputs: - - uint256 - -DOMAIN_SEPARATOR: - mutability: view - inputs: [] - outputs: - - bytes32 - -eip712Domain: - # EIP-5267 domain retrieval. - mutability: view - inputs: [] - outputs: - - fields: bytes1 - - name: string - - version: string - - chainId: uint256 - - verifyingContract: address - - salt: bytes32 - - "extensions: uint256[]" - -# == ERC-20 Wrapping == -# These functions interact with the underlying ERC-20 token. -# They revert with SUPER_TOKEN_NO_UNDERLYING_TOKEN on Pure and Native Asset -# Super Tokens (use upgradeByETH / downgradeToETH for SETH). - -upgrade: - # Wrap underlying ERC-20 into Super Tokens for msg.sender. - # Requires prior ERC-20 approval on the underlying token. - notes: - - "Gotcha: amount is always in SuperToken decimals (18), regardless of the underlying token's decimals. The contract handles downscaling internally when pulling from the underlying via transferFrom. However, the ERC-20 approval on the underlying token must use the underlying's native decimals. Example: to wrap 1000 USDC, approve 1000e6 on USDC, then call upgrade(1000e18)." - mutability: nonpayable - access: anyone # wraps for msg.sender - inputs: - - amount: uint256 # in SuperToken decimals (always 18) - emits: [Minted, Transfer, TokenUpgraded] - errors: [SUPER_TOKEN_NO_UNDERLYING_TOKEN, SUPER_TOKEN_INFLATIONARY_DEFLATIONARY_NOT_SUPPORTED, SUPER_TOKEN_MINT_TO_ZERO_ADDRESS, SafeERC20FailedOperation, SafeCastOverflowedUintToInt] - -upgradeTo: - # Wrap underlying ERC-20 and mint Super Tokens to a different address. - mutability: nonpayable - access: anyone - inputs: - - to: address - - amount: uint256 - - userData: bytes - emits: [Minted, Transfer, TokenUpgraded] - errors: [SUPER_TOKEN_NO_UNDERLYING_TOKEN, SUPER_TOKEN_INFLATIONARY_DEFLATIONARY_NOT_SUPPORTED, SUPER_TOKEN_MINT_TO_ZERO_ADDRESS, SUPER_TOKEN_NOT_ERC777_TOKENS_RECIPIENT, SafeERC20FailedOperation, SafeCastOverflowedUintToInt] - -downgrade: - # Unwrap Super Tokens back to underlying ERC-20 for msg.sender. - mutability: nonpayable - access: anyone # unwraps to msg.sender - inputs: - - amount: uint256 - emits: [Burned, Transfer, TokenDowngraded] - errors: [SUPER_TOKEN_NO_UNDERLYING_TOKEN, SUPER_TOKEN_BURN_FROM_ZERO_ADDRESS, SF_TOKEN_BURN_INSUFFICIENT_BALANCE, SUPER_TOKEN_INFLATIONARY_DEFLATIONARY_NOT_SUPPORTED, SafeERC20FailedOperation] - -downgradeTo: - # Unwrap Super Tokens and send underlying ERC-20 to a different address. - mutability: nonpayable - access: anyone - inputs: - - to: address - - amount: uint256 - emits: [Burned, Transfer, TokenDowngraded] - errors: [SUPER_TOKEN_NO_UNDERLYING_TOKEN, SUPER_TOKEN_BURN_FROM_ZERO_ADDRESS, SF_TOKEN_BURN_INSUFFICIENT_BALANCE, SUPER_TOKEN_INFLATIONARY_DEFLATIONARY_NOT_SUPPORTED, SafeERC20FailedOperation] - -getUnderlyingToken: - # Returns address(0) for Pure and Native Asset Super Tokens. - mutability: view - inputs: [] - outputs: - - address - -getUnderlyingDecimals: - mutability: view - inputs: [] - outputs: - - uint8 - -toUnderlyingAmount: - # Convert a Super Token amount to its underlying equivalent, accounting for - # decimal differences. adjustedAmount strips precision loss. - mutability: view - inputs: - - amount: uint256 - outputs: - - underlyingAmount: uint256 - - adjustedAmount: uint256 - -# == Native Asset Wrapping (SETH only) == -# These functions exist only on Native Asset Super Token (SETH) proxies. -# They are defined in the SETHProxy contract, not in the SuperToken logic. -# The SETH proxy also accepts plain ETH transfers via receive() which mints -# Super Tokens to the sender. - -upgradeByETH: - # Wrap sent ETH/native asset into Super Tokens for msg.sender. - # Variant: native-asset - mutability: payable - access: anyone # wraps for msg.sender - inputs: [] - emits: [Minted, Transfer, TokenUpgraded] - -upgradeByETHTo: - # Wrap sent ETH/native asset into Super Tokens for a different address. - # Variant: native-asset - mutability: payable - access: anyone - inputs: - - to: address - emits: [Minted, Transfer, TokenUpgraded] - -downgradeToETH: - # Unwrap Super Tokens back to ETH/native asset for msg.sender. - # Variant: native-asset - mutability: nonpayable - access: anyone # unwraps to msg.sender - inputs: - - wad: uint256 - emits: [Burned, Transfer, TokenDowngraded] - -# == Real-time Balance == - -realtimeBalanceOf: - # Full real-time balance across ALL agreements at a given timestamp. - # This aggregates the realtimeBalanceOf from every agreement (CFA, GDA, IDA) - # into a single balance. Use this (or realtimeBalanceOfNow) to check an - # account's actual balance — not the per-agreement versions. - # availableBalance = settled + agreement dynamics − max(0, deposit − owedDeposit) - mutability: view - inputs: - - account: address - - timestamp: uint256 - outputs: - - availableBalance: int256 - - deposit: uint256 - - owedDeposit: uint256 - -realtimeBalanceOfNow: - # Convenience wrapper: realtimeBalanceOf at the current Host timestamp. - # This is the recommended way to check an account's real-time balance. - mutability: view - inputs: - - account: address - outputs: - - availableBalance: int256 - - deposit: uint256 - - owedDeposit: uint256 - - timestamp: uint256 - -isAccountCritical: - # True if availableBalance < 0 at the given timestamp. - mutability: view - inputs: - - account: address - - timestamp: uint256 - outputs: - - isCritical: bool - -isAccountCriticalNow: - mutability: view - inputs: - - account: address - outputs: - - isCritical: bool - -isAccountSolvent: - # True if realtime balance (before deposit deduction) >= 0 at the given timestamp. - mutability: view - inputs: - - account: address - - timestamp: uint256 - outputs: - - isSolvent: bool - -isAccountSolventNow: - mutability: view - inputs: - - account: address - outputs: - - isSolvent: bool - -# == Admin == -# The admin defaults to the Host contract when address(0). -# An explicit admin can be set during initializeWithAdmin or via changeAdmin. - -changeAdmin: - mutability: nonpayable - access: admin - inputs: - - newAdmin: address - emits: [AdminChanged] - errors: [SUPER_TOKEN_ONLY_ADMIN] - -getAdmin: - # Returns address(0) if the Host is the implicit admin. - mutability: view - inputs: [] - outputs: - - address - -# == Yield Backend == -# Hot-pluggable yield generation for wrapper Super Tokens. The yield backend is a -# contract implementing IYieldBackend that is invoked via delegatecall. When enabled, -# the underlying ERC-20 is deposited into a yield protocol (e.g. Aave, Spark, ERC4626 vaults). -# Surplus yield (balance exceeding totalSupply) can be withdrawn by the admin. - -enableYieldBackend: - # Enable a yield backend and deposit all underlying token balance into it. - # Requires no existing yield backend to be set. - notes: - - "Gotcha: Reverts if a yield backend is already enabled — must call disableYieldBackend first to switch backends." - - "The yield backend contract is invoked via delegatecall — it executes in the SuperToken's context." - mutability: nonpayable - access: admin - inputs: - - newYieldBackend: address # must implement IYieldBackend - emits: [YieldBackendEnabled] - -disableYieldBackend: - # Withdraw all assets from the yield backend and disable it. - notes: - - "Calls withdrawMax() then disable() on the backend via delegatecall." - mutability: nonpayable - access: admin - inputs: [] - emits: [YieldBackendDisabled] - -getYieldBackend: - # Returns the current yield backend address, or address(0) if none is set. - mutability: view - inputs: [] - outputs: - - yieldBackend: address - -withdrawSurplusFromYieldBackend: - # Withdraw yield surplus (deposited amount exceeding totalSupply) from the backend. - # The surplus is sent to a receiver defined by the yield backend implementation. - mutability: nonpayable - access: admin - inputs: [] - -# == Self Operations == -# Can only be called by the token contract itself (address(this)). -# Used by custom super token proxies (SETH, Pure) to mint/burn/approve/transfer -# tokens through their own proxy logic. - -selfMint: - mutability: nonpayable - access: self - inputs: - - account: address - - amount: uint256 - - userData: bytes - emits: [Minted, Transfer] - errors: [SUPER_TOKEN_ONLY_SELF, SUPER_TOKEN_MINT_TO_ZERO_ADDRESS] - -selfBurn: - mutability: nonpayable - access: self - inputs: - - account: address - - amount: uint256 - - userData: bytes - emits: [Burned, Transfer] - errors: [SUPER_TOKEN_ONLY_SELF, SUPER_TOKEN_BURN_FROM_ZERO_ADDRESS, SF_TOKEN_BURN_INSUFFICIENT_BALANCE] - -selfApproveFor: - mutability: nonpayable - access: self - inputs: - - account: address - - spender: address - - amount: uint256 - emits: [Approval] - errors: [SUPER_TOKEN_ONLY_SELF, SUPER_TOKEN_APPROVE_FROM_ZERO_ADDRESS, SUPER_TOKEN_APPROVE_TO_ZERO_ADDRESS] - -selfTransferFrom: - mutability: nonpayable - access: self - inputs: - - holder: address - - spender: address - - recipient: address - - amount: uint256 - emits: [Sent, Transfer] - errors: [SUPER_TOKEN_ONLY_SELF, SUPER_TOKEN_TRANSFER_FROM_ZERO_ADDRESS, SUPER_TOKEN_TRANSFER_TO_ZERO_ADDRESS, SF_TOKEN_MOVE_INSUFFICIENT_BALANCE] - -# == Host Batch Operations == -# Called by the Host contract on behalf of a user within batchCall / -# forwardBatchCall. Each mirrors a user-facing function but takes the -# account address explicitly. - -operationApprove: - mutability: nonpayable - access: host - inputs: - - account: address - - spender: address - - amount: uint256 - emits: [Approval] - errors: [SF_TOKEN_ONLY_HOST, SUPER_TOKEN_APPROVE_FROM_ZERO_ADDRESS, SUPER_TOKEN_APPROVE_TO_ZERO_ADDRESS] - -operationIncreaseAllowance: - mutability: nonpayable - access: host - inputs: - - account: address - - spender: address - - addedValue: uint256 - emits: [Approval] - errors: [SF_TOKEN_ONLY_HOST, SUPER_TOKEN_APPROVE_FROM_ZERO_ADDRESS, SUPER_TOKEN_APPROVE_TO_ZERO_ADDRESS] - -operationDecreaseAllowance: - mutability: nonpayable - access: host - inputs: - - account: address - - spender: address - - subtractedValue: uint256 - emits: [Approval] - errors: [SF_TOKEN_ONLY_HOST, SUPER_TOKEN_APPROVE_FROM_ZERO_ADDRESS, SUPER_TOKEN_APPROVE_TO_ZERO_ADDRESS] - -operationTransferFrom: - mutability: nonpayable - access: host - inputs: - - account: address - - spender: address - - recipient: address - - amount: uint256 - emits: [Sent, Transfer] - errors: [SF_TOKEN_ONLY_HOST, SUPER_TOKEN_TRANSFER_FROM_ZERO_ADDRESS, SUPER_TOKEN_TRANSFER_TO_ZERO_ADDRESS, SF_TOKEN_MOVE_INSUFFICIENT_BALANCE] - -operationSend: - mutability: nonpayable - access: host - inputs: - - spender: address - - recipient: address - - amount: uint256 - - userData: bytes - emits: [Sent, Transfer] - errors: [SF_TOKEN_ONLY_HOST, SUPER_TOKEN_TRANSFER_FROM_ZERO_ADDRESS, SUPER_TOKEN_TRANSFER_TO_ZERO_ADDRESS, SF_TOKEN_MOVE_INSUFFICIENT_BALANCE, SUPER_TOKEN_NOT_ERC777_TOKENS_RECIPIENT] - -operationUpgrade: - mutability: nonpayable - access: host - inputs: - - account: address - - amount: uint256 - emits: [Minted, Transfer, TokenUpgraded] - errors: [SF_TOKEN_ONLY_HOST, SUPER_TOKEN_NO_UNDERLYING_TOKEN, SUPER_TOKEN_INFLATIONARY_DEFLATIONARY_NOT_SUPPORTED, SUPER_TOKEN_MINT_TO_ZERO_ADDRESS, SafeERC20FailedOperation, SafeCastOverflowedUintToInt] - -operationDowngrade: - mutability: nonpayable - access: host - inputs: - - account: address - - amount: uint256 - emits: [Burned, Transfer, TokenDowngraded] - errors: [SF_TOKEN_ONLY_HOST, SUPER_TOKEN_NO_UNDERLYING_TOKEN, SUPER_TOKEN_BURN_FROM_ZERO_ADDRESS, SF_TOKEN_BURN_INSUFFICIENT_BALANCE, SUPER_TOKEN_INFLATIONARY_DEFLATIONARY_NOT_SUPPORTED, SafeERC20FailedOperation] - -operationUpgradeTo: - mutability: nonpayable - access: host - inputs: - - account: address - - to: address - - amount: uint256 - emits: [Minted, Transfer, TokenUpgraded] - errors: [SF_TOKEN_ONLY_HOST, SUPER_TOKEN_NO_UNDERLYING_TOKEN, SUPER_TOKEN_INFLATIONARY_DEFLATIONARY_NOT_SUPPORTED, SUPER_TOKEN_MINT_TO_ZERO_ADDRESS, SafeERC20FailedOperation, SafeCastOverflowedUintToInt] - -operationDowngradeTo: - mutability: nonpayable - access: host - inputs: - - account: address - - to: address - - amount: uint256 - emits: [Burned, Transfer, TokenDowngraded] - errors: [SF_TOKEN_ONLY_HOST, SUPER_TOKEN_NO_UNDERLYING_TOKEN, SUPER_TOKEN_BURN_FROM_ZERO_ADDRESS, SF_TOKEN_BURN_INSUFFICIENT_BALANCE, SUPER_TOKEN_INFLATIONARY_DEFLATIONARY_NOT_SUPPORTED, SafeERC20FailedOperation] - -# == Agreement Hosting == -# The token acts as storage host for agreement data. These functions are -# called by registered agreement contracts (CFA, GDA, IDA) through the Host. - -createAgreement: - mutability: nonpayable - access: agreement - inputs: - - id: bytes32 - - "data: bytes32[]" - emits: [AgreementCreated] - errors: [SF_TOKEN_AGREEMENT_ALREADY_EXISTS] - -getAgreementData: - mutability: view - inputs: - - agreementClass: address - - id: bytes32 - - dataLength: uint256 - outputs: - - "data: bytes32[]" - -updateAgreementData: - mutability: nonpayable - access: agreement - inputs: - - id: bytes32 - - "data: bytes32[]" - emits: [AgreementUpdated] - -terminateAgreement: - mutability: nonpayable - access: agreement - inputs: - - id: bytes32 - - dataLength: uint256 - emits: [AgreementTerminated] - errors: [SF_TOKEN_AGREEMENT_DOES_NOT_EXIST] - -updateAgreementStateSlot: - mutability: nonpayable - access: agreement - inputs: - - account: address - - slotId: uint256 - - "slotData: bytes32[]" - emits: [AgreementStateUpdated] - -getAgreementStateSlot: - mutability: view - inputs: - - agreementClass: address - - account: address - - slotId: uint256 - - dataLength: uint256 - outputs: - - "slotData: bytes32[]" - -settleBalance: - # Adjust an account's settled balance. Only listed agreements can call this. - mutability: nonpayable - access: agreement - inputs: - - account: address - - delta: int256 - errors: [SF_TOKEN_ONLY_LISTED_AGREEMENT] - -makeLiquidationPayoutsV2: - # Execute liquidation payouts. Transfers reward to liquidator or reward account, - # and adjusts the target account's balance. Only listed agreements can call this. - mutability: nonpayable - access: agreement - inputs: - - id: bytes32 - - liquidationTypeData: bytes - - liquidatorAccount: address - - useDefaultRewardAccount: bool - - targetAccount: address - - rewardAmount: uint256 - - targetAccountBalanceDelta: int256 - emits: [Transfer, AgreementLiquidatedV2] - errors: [SF_TOKEN_ONLY_LISTED_AGREEMENT] - -getAccountActiveAgreements: - mutability: view - inputs: - - account: address - outputs: - - "ISuperAgreement[]" - -# == Protocol Info == - -getHost: - mutability: view - inputs: [] - outputs: - - host: address - -POOL_ADMIN_NFT: - # Immutable address of the canonical PoolAdminNFT proxy. - mutability: view - inputs: [] - outputs: - - address - -POOL_MEMBER_NFT: - # Immutable address of the (deprecated) PoolMemberNFT proxy. - mutability: view - inputs: [] - outputs: - - address - -VERSION: - # Returns the version string of the SuperToken logic contract (e.g. "1.0.0"). - mutability: view - inputs: [] - outputs: - - string - -# == Events == - -events: - - # -- ERC-20 -- - - Transfer: - indexed: - - from: address - - to: address - data: - - value: uint256 - - Approval: - indexed: - - owner: address - - spender: address - data: - - value: uint256 - - # -- ERC-777 -- - - Sent: - indexed: - - operator: address - - from: address - - to: address - data: - - amount: uint256 - - data: bytes - - operatorData: bytes - - Minted: - indexed: - - operator: address - - to: address - data: - - amount: uint256 - - data: bytes - - operatorData: bytes - - Burned: - indexed: - - operator: address - - from: address - data: - - amount: uint256 - - data: bytes - - operatorData: bytes - - AuthorizedOperator: - indexed: - - operator: address - - tokenHolder: address - - RevokedOperator: - indexed: - - operator: address - - tokenHolder: address - - # -- EIP-5267 -- - - EIP712DomainChanged: - # Signalled when the EIP-712 domain changes. Not explicitly emitted by - # SuperToken, but declared in the EIP-5267 interface for indexing support. - - # -- Wrapping -- - - TokenUpgraded: - indexed: - - account: address - data: - - amount: uint256 - - TokenDowngraded: - indexed: - - account: address - data: - - amount: uint256 - - # -- Admin -- - - AdminChanged: - indexed: [] - data: - - oldAdmin: address - - newAdmin: address - - # -- Yield Backend -- - - YieldBackendEnabled: - indexed: - - yieldBackend: address - data: - - depositAmount: uint256 - - YieldBackendDisabled: - indexed: - - yieldBackend: address - - PoolAdminNFTCreated: - # Emitted once during logic contract constructor deployment. - indexed: [] - data: - - poolAdminNFT: address - - # -- Agreement Hosting -- - - AgreementCreated: - indexed: - - agreementClass: address - - id: bytes32 - data: - - "data: bytes32[]" - - AgreementUpdated: - indexed: - - agreementClass: address - - id: bytes32 - data: - - "data: bytes32[]" - - AgreementTerminated: - indexed: - - agreementClass: address - - id: bytes32 - - AgreementStateUpdated: - indexed: - - agreementClass: address - - account: address - data: - - slotId: uint256 - - AgreementLiquidatedV2: - indexed: - - agreementClass: address - - id: bytes32 - data: - - liquidatorAccount: address - - targetAccount: address - - rewardAmountReceiver: address - - rewardAmount: uint256 - - targetAccountBalanceDelta: int256 - - liquidationTypeData: bytes - - # -- Deprecated events (from ISuperfluidToken, no longer emitted) -- - - AgreementLiquidated: - deprecated: true - note: "Use AgreementLiquidatedV2" - indexed: - - agreementClass: address - - id: bytes32 - data: - - penaltyAccount: address - - rewardAccount: address - - rewardAmount: uint256 - - AgreementLiquidatedBy: - deprecated: true - note: "Use AgreementLiquidatedV2" - indexed: - - liquidatorAccount: address - - agreementClass: address - - id: bytes32 - data: - - penaltyAccount: address - - bondAccount: address - - rewardAmount: uint256 - - bailoutAmount: uint256 - - Bailout: - deprecated: true - note: "Use AgreementLiquidatedV2" - indexed: - - bailoutAccount: address - - bailoutAmount: uint256 - -# == Errors == - -errors: - - # -- Super Token access -- - - SUPER_TOKEN_ONLY_SELF - - SUPER_TOKEN_ONLY_ADMIN - - SUPER_TOKEN_ONLY_GOV_OWNER - - # -- SuperfluidToken access -- - - SF_TOKEN_ONLY_HOST - - SF_TOKEN_ONLY_LISTED_AGREEMENT - - # -- Wrapping -- - - SUPER_TOKEN_NO_UNDERLYING_TOKEN - - SUPER_TOKEN_INFLATIONARY_DEFLATIONARY_NOT_SUPPORTED - - # -- ERC-20 / ERC-777 transfer -- - - SUPER_TOKEN_TRANSFER_FROM_ZERO_ADDRESS - - SUPER_TOKEN_TRANSFER_TO_ZERO_ADDRESS - - SF_TOKEN_MOVE_INSUFFICIENT_BALANCE - - # -- Approve -- - - SUPER_TOKEN_APPROVE_FROM_ZERO_ADDRESS - - SUPER_TOKEN_APPROVE_TO_ZERO_ADDRESS - - # -- Mint / Burn -- - - SUPER_TOKEN_MINT_TO_ZERO_ADDRESS - - SUPER_TOKEN_BURN_FROM_ZERO_ADDRESS - - SF_TOKEN_BURN_INSUFFICIENT_BALANCE - - # -- ERC-777 operator -- - - SUPER_TOKEN_CALLER_IS_NOT_OPERATOR_FOR_HOLDER - - SUPER_TOKEN_NOT_ERC777_TOKENS_RECIPIENT - - # -- ERC-2612 permit -- - - SUPER_TOKEN_PERMIT_EXPIRED_SIGNATURE: - inputs: - - deadline: uint256 - - SUPER_TOKEN_PERMIT_INVALID_SIGNER: - inputs: - - signer: address - - owner: address - - # -- NFT proxy -- - - SUPER_TOKEN_NFT_PROXY_ADDRESS_CHANGED - - # -- Agreement hosting -- - - SF_TOKEN_AGREEMENT_ALREADY_EXISTS - - SF_TOKEN_AGREEMENT_DOES_NOT_EXIST - - # -- OpenZeppelin ECDSA (from permit) -- - - ECDSAInvalidSignature - - ECDSAInvalidSignatureLength: - inputs: - - length: uint256 - - ECDSAInvalidSignatureS: - inputs: - - s: bytes32 - - # -- OpenZeppelin SafeCast -- - - SafeCastOverflowedUintToInt: - inputs: - - value: uint256 - - # -- OpenZeppelin SafeERC20 -- - - SafeERC20FailedOperation: - inputs: - - token: address diff --git a/.agents/skills/gooddollar/references/contracts/SuperToken.selectors.yaml b/.agents/skills/gooddollar/references/contracts/SuperToken.selectors.yaml deleted file mode 100644 index f9bb474..0000000 --- a/.agents/skills/gooddollar/references/contracts/SuperToken.selectors.yaml +++ /dev/null @@ -1,99 +0,0 @@ -# Generated by scripts/selectors.mjs -functions: - name(): 0x06fdde03 - symbol(): 0x95d89b41 - decimals(): 0x313ce567 - totalSupply(): 0x18160ddd - balanceOf(address): 0x70a08231 - allowance(address,address): 0xdd62ed3e - approve(address,uint256): 0x095ea7b3 - increaseAllowance(address,uint256): 0x39509351 - decreaseAllowance(address,uint256): 0xa457c2d7 - transfer(address,uint256): 0xa9059cbb - transferFrom(address,address,uint256): 0x23b872dd - transferAll(address): 0xa3a7e7f3 - granularity(): 0x556f0dc7 - send(address,uint256,bytes): 0x9bd9bbc6 - burn(uint256,bytes): 0xfe9d9303 - authorizeOperator(address): 0x959b8c3f - revokeOperator(address): 0xfad8b32a - isOperatorFor(address,address): 0xd95b6371 - defaultOperators(): 0x06e48538 - operatorSend(address,address,uint256,bytes,bytes): 0x62ad1b83 - operatorBurn(address,uint256,bytes,bytes): 0xfc673c4f - permit(address,address,uint256,uint256,uint8,bytes32,bytes32): 0xd505accf - nonces(address): 0x7ecebe00 - DOMAIN_SEPARATOR(): 0x3644e515 - eip712Domain(): 0x84b0196e - upgrade(): 0xd55ec697 - upgradeTo(address,uint256,bytes): 0x5b9d09cc - downgrade(uint256): 0x11bcc81e - downgradeTo(address,uint256): 0x83ba2525 - getUnderlyingToken(): 0xee719bc8 - getUnderlyingDecimals(): 0x92081a47 - toUnderlyingAmount(uint256): 0x282a050b - upgradeByETH(): 0xcf81464b - upgradeByETHTo(address): 0x7687d19b - downgradeToETH(uint256): 0x160e8be3 - realtimeBalanceOf(address,uint256): 0xeb3537cc - realtimeBalanceOfNow(address): 0x2ec8eec7 - isAccountCritical(address,uint256): 0xd9d078d6 - isAccountCriticalNow(address): 0x79359f6f - isAccountSolvent(address,uint256): 0xb84cdd4a - isAccountSolventNow(address): 0xbb0d196e - changeAdmin(address): 0x8f283970 - getAdmin(): 0x6e9960c3 - enableYieldBackend(): 0x5127b621 - disableYieldBackend(): 0x370a190f - getYieldBackend(): 0xe729804b - withdrawSurplusFromYieldBackend(): 0x4a3acda0 - selfMint(address,uint256,bytes): 0xc68d4283 - selfBurn(address,uint256,bytes): 0x9d876741 - selfApproveFor(address,address,uint256): 0x66a12fb6 - selfTransferFrom(address,address,address,uint256): 0x41b706be - operationApprove(address,address,uint256): 0x62aa5287 - operationIncreaseAllowance(address,address,uint256): 0x4b2763b3 - operationDecreaseAllowance(address,address,uint256): 0xc780fd82 - operationTransferFrom(address,address,address,uint256): 0x16d055d6 - operationSend(address,address,uint256,bytes): 0xca0c1e7f - operationUpgrade(address,uint256): 0xca789464 - operationDowngrade(address,uint256): 0x245887fc - operationUpgradeTo(address,address,uint256): 0x1ae88ffc - operationDowngradeTo(address,address,uint256): 0x47ba7ad1 - createAgreement(bytes32,bytes32[]"): 0x816e2dc5 - getAgreementData(address,bytes32,uint256): 0x6c2d9f2f - updateAgreementData(bytes32,bytes32[]"): 0x1bced9c7 - terminateAgreement(bytes32,uint256): 0x27048397 - updateAgreementStateSlot(address,uint256,bytes32[]"): 0x003af740 - getAgreementStateSlot(address,address,uint256,uint256): 0x4b61cc33 - settleBalance(address,int256): 0xcf97256d - makeLiquidationPayoutsV2(bytes32,bytes,address,bool,address,uint256,int256): 0x1863e809 - getAccountActiveAgreements(address): 0x386fa221 - getHost(): 0x20bc4425 - POOL_ADMIN_NFT(): 0xb20db1ac - POOL_MEMBER_NFT(): 0xf5a8b4dd - VERSION(): 0xffa1ad74 -events: - Transfer(address,address,uint256): 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef - Approval(address,address,uint256): 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925 - Sent(address,address,address,uint256,bytes,bytes): 0x06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc82614677987 - Minted(address,address,uint256,bytes,bytes): 0x2fe5be0146f74c5bce36c0b80911af6c7d86ff27e89d5cfa61fc681327954e5d - Burned(address,address,uint256,bytes,bytes): 0xa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a4098 - AuthorizedOperator(address,address): 0xf4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f9 - RevokedOperator(address,address): 0x50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa1 - EIP712DomainChanged(): 0x0a6387c9ea3628b88a633bb4f3b151770f70085117a15f9bf3787cda53f13d31 - TokenUpgraded(address,uint256): 0x25ca84076773b0455db53621c459ddc84fe40840e4932a62706a032566f399df - TokenDowngraded(address,uint256): 0x3bc27981aebbb57f9247dc00fde9d6cd91e4b230083fec3238fedbcba1f9ab3d - AdminChanged(address,address): 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f - YieldBackendEnabled(address,uint256): 0x8d15dd569157df615aedb4b16273001ae8980ce2aac93e39adc48481dfaefbb5 - YieldBackendDisabled(address): 0x2486b5241145ce1b97a13655ecd4e8e51094ac93259a0589d24524304d6d70d4 - PoolAdminNFTCreated(address): 0xeb87fb34067547f3dc0b85096c3da73c99d4fbb08ff41212b8d7c0b5008b42e6 - AgreementCreated(address,bytes32,bytes32[]"): 0x9a5caaf4460c6dff81ed3dc58f3aef40fe511737a163340e06a4abc1bfe21a73 - AgreementUpdated(address,bytes32,bytes32[]"): 0xc00aaaf56818c1a9d6c54e14c6f93965eb34c9729232fdafa62f90a10600e70a - AgreementTerminated(address,bytes32): 0x71a63dc095de07aa5512ad57a7596a39516317e316981a1cd71000057be1537b - AgreementStateUpdated(address,address,uint256): 0x30f416fa68fca014a0f334464c64b000ba53e99b6d2afdea9d5ca756372d5985 - AgreementLiquidatedV2(address,bytes32,address,address,address,uint256,int256,bytes): 0xb8381a3ce157650e06186e3e8f4dd4dc29236f2688b6eed1893d0a60d7c6386f - AgreementLiquidated(address,bytes32,address,address,uint256): 0x8505c3d8f1f184f032cf0bc4cd80ee61c8b9d94f8907c3281bf0101a2610fe80 - AgreementLiquidatedBy(address,address,bytes32,address,address,uint256,uint256): 0x5f22b60e58b1d6de858bc27c48d5a4653e052da99e083c1d88bb8c58e1abc8ef - Bailout(address,uint256): 0xd6c9a04afc81e8c614310bbee6c9e84f5abe15b82038bf8347014ce0852e6ffd -errors: {} diff --git a/.agents/skills/gooddollar/references/contracts/Superfluid.abi.yaml b/.agents/skills/gooddollar/references/contracts/Superfluid.abi.yaml deleted file mode 100644 index 33ac5a9..0000000 --- a/.agents/skills/gooddollar/references/contracts/Superfluid.abi.yaml +++ /dev/null @@ -1,757 +0,0 @@ -# Superfluid Host — the central protocol router -# All agreement calls (CFA, IDA, GDA) are routed through the Host, which manages -# the Superfluid call context, Super App callbacks, app credit, and governance. -# The Host is also the entry point for batch calls and meta-transactions. -# -# NOTE: emits/errors mappings are traced from source code — verify against implementation. -# Proxy/upgradability functions (castrate, updateCode, getCodeAddress, proxiableUUID, initialize) -# are omitted — they belong to the UUPSProxiable layer. - -meta: - name: Superfluid - version: v1 - source: - - https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/refs/heads/dev/packages/ethereum-contracts/contracts/superfluid/Superfluid.sol - - https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/refs/heads/dev/packages/ethereum-contracts/contracts/interfaces/superfluid/ISuperfluid.sol - implements: [ISuperfluid] - inherits: [UUPSProxiable, BaseRelayRecipient] - deployments: - mainnet: - eth-mainnet: "0x4E583d9390082B65Bef884b629DFA426114CED6d" - polygon-mainnet: "0x3E14dC1b13c488a8d5D310918780c983bD5982E7" - xdai-mainnet: "0x2dFe937cD98Ab92e59cF3139138f18c823a4efE7" - base-mainnet: "0x4C073B3baB6d8826b8C5b229f3cfdC1eC6E47E74" - optimism-mainnet: "0x567c4B141ED61923967cA25Ef4906C8781069a10" - arbitrum-one: "0xCf8Acb4eF033efF16E8080aed4c7D5B9285D2192" - bsc-mainnet: "0xd1e2cFb6441680002Eb7A44223160aB9B67d7E6E" - avalanche-c: "0x60377C7016E4cdB03C87EF474896C11cB560752C" - celo-mainnet: "0xA4Ff07cF81C02CFD356184879D953970cA957585" - scroll-mainnet: "0x0F86a21F6216c061B222c224e315d9FC34520bb7" - degenchain: "0xc1314EdcD7e478C831a7a24169F7dEADB2646eD2" - testnet: - avalanche-fuji: "0x85Fe79b998509B77BF10A8BD4001D58475D29386" - base-sepolia: "0x109412E3C84f0539b43d39dB691B08c90f58dC7c" - eth-sepolia: "0x109412E3C84f0539b43d39dB691B08c90f58dC7c" - optimism-sepolia: "0xd399e2Fb5f4cf3722a11F65b88FAB6B2B8621005" - scroll-sepolia: "0x42b05a6016B9eED232E13fd56a8F0725693DBF8e" - deploymentCreationBlocks: - mainnet: - celo-mainnet: 16393469 - -# == Abbreviations == -# ctx — context (Superfluid call context bytes) -# ACL — Access Control List -# ERC — Ethereum Request for Comments - -# == Glossary == -# Host — central Superfluid contract routing agreement/app calls -# agreement class — a registered agreement contract (CFA, IDA, GDA) -# Super App — a smart contract registered with the Host that receives callbacks -# callback — beforeAgreement* / afterAgreement* hooks called on Super Apps -# context (ctx) — encoded call metadata: msgSender, timestamp, userData, app credit -# app credit — temporary token allowance granted to a Super App during a callback -# jailed — a Super App that violated protocol rules; its callbacks are bypassed -# configWord — bitmask encoding a Super App's app level and callback noop flags. -# App level: APP_LEVEL_FINAL (1 << 1) or APP_LEVEL_SECOND (1 << 0). -# Noop flags disable specific before/after callbacks per agreement type. -# batch operation — a single step in a batchCall array (see BatchOperation in Definitions.sol) -# trusted forwarder — a contract allowed to call forwardBatchCall for meta-transactions - -# == Batch Call == -# Primary entry point for interacting with the protocol. Users compose arrays of -# typed operations (ERC-20 approvals, SuperToken wrapping, agreement calls, etc.). -# -# == Batch Operation Types == -# Used in the operationType field of batchCall/forwardBatchCall operations. -# Data encoding varies by category — see notes on each type. -# -# Category 1–5: ERC-20/ERC-777 token ops -# target: must be a SuperToken (routes through SuperToken.operation* methods, -# NOT arbitrary ERC-20 contracts — use a separate tx for underlying approvals) -# data: abi-encoded parameters only (strip the 4-byte function selector) -# -# Category 101–102: SuperToken wrap/unwrap -# target: the SuperToken -# data: abi-encoded parameters only (strip the 4-byte function selector) -# -# Category 201: agreement call -# target: the agreement contract (e.g. CFA, GDA) -# data: abi.encode(callData, userData) where callData is full -# encodeFunctionData (selector included, with empty ctx placeholder "0x") -# -# Category 202: app action -# target: the Super App -# data: abi.encode(callData) where callData is full encodeFunctionData -# (selector included, with empty ctx placeholder "0x") -# -# Category 301: simple forward -# target: any contract -# data: full encodeFunctionData (selector included), or "0x" for pure value transfers -# -# Category 302: ERC-2771 forward -# target: any contract (must be an ERC-2771 recipient to extract the real sender) -# data: full encodeFunctionData (selector included) -# The ERC2771Forwarder appends the original msg.sender to calldata per ERC-2771. -# Use when the target contract needs to know who initiated the batch. - -batch_operation_types: - ERC20_APPROVE: 1 - ERC20_TRANSFER_FROM: 2 - ERC777_SEND: 3 # deprecated — ERC-777 is being phased out - ERC20_INCREASE_ALLOWANCE: 4 - ERC20_DECREASE_ALLOWANCE: 5 - SUPERTOKEN_UPGRADE: 101 - SUPERTOKEN_DOWNGRADE: 102 - SUPERFLUID_CALL_AGREEMENT: 201 - CALL_APP_ACTION: 202 - SIMPLE_FORWARD_CALL: 301 - ERC2771_FORWARD_CALL: 302 - -batchCall: - # Execute an array of operations in a single transaction as msg.sender. - notes: - - "Gotcha: For SIMPLE_FORWARD_CALL (type 301), target sees msg.sender as the SimpleForwarder contract, NOT the original caller. Use only when the target doesn't need to identify the sender." - - "Gotcha: ERC-20 ops (types 1-5) route through SuperToken.operation* methods, NOT arbitrary ERC-20 contracts. The target must be a SuperToken address. To approve an underlying ERC-20 (e.g. for wrapping), use a separate transaction." - - "Gotcha: If msg.value > 0, the entire amount is forwarded to the first CALL_APP_ACTION, SIMPLE_FORWARD, or ERC2771_FORWARD operation. If none exist, the native tokens are returned to the sender." - mutability: payable - access: anyone - inputs: - - operations: tuple[] - components: - - operationType: uint32 # see batch_operation_types above - - target: address - - data: bytes # encoding varies by operationType — see above - errors: [HOST_UNKNOWN_BATCH_CALL_OPERATION_TYPE] - -forwardBatchCall: - # Same as batchCall but uses EIP-2771 to extract msgSender from calldata. - # Can only be called by contracts registered as trusted forwarders in governance. - # If native tokens are left over, they are refunded to the EIP-2771 sender. - mutability: payable - access: trusted-forwarder - inputs: - - operations: tuple[] - components: - - operationType: uint32 # see batch_operation_types above - - target: address - - data: bytes # encoding varies by operationType — see above - errors: [HOST_UNKNOWN_BATCH_CALL_OPERATION_TYPE] - -# == Contextless Call Proxies == -# Entry points for EOAs and non-app contracts to interact with agreements or apps. -# These create a fresh Superfluid context with msg.sender, inject it into the call, -# and route through to the target agreement/app. - -callAgreement: - # Call an agreement function. The Host creates a context with msg.sender and replaces - # the placeholder ctx bytes in callData. This is how EOAs interact with CFA/IDA/GDA. - mutability: nonpayable - access: anyone # context set to msg.sender - inputs: - - agreementClass: address # must be a registered agreement - - callData: bytes # abi-encoded agreement call with placeholder ctx - - userData: bytes # extra data forwarded to Super App callbacks - outputs: - - returnedData: bytes - errors: [APP_RULE, HOST_ONLY_LISTED_AGREEMENT] - -callAppAction: - # Call an app action function on a Super App. The Host creates a context and routes - # the call. The action must not be an agreement callback selector. - mutability: nonpayable - access: anyone # context set to msg.sender - inputs: - - app: address # must be a registered, non-jailed Super App - - callData: bytes # abi-encoded app action call with placeholder ctx - outputs: - - returnedData: bytes - errors: [APP_RULE, HOST_NOT_A_SUPER_APP, HOST_SUPER_APP_IS_JAILED, HOST_AGREEMENT_CALLBACK_IS_NOT_ACTION] - -# == Contextual Call Proxies == -# For Super Apps to chain calls during callbacks. The app must pass the ctx it received. -# Only callable by the app currently executing a callback (ctx.appAddress == msg.sender). - -callAgreementWithContext: - # Chain an agreement call from within a Super App callback. - # The ctx must be valid and msg.sender must be the current callback app. - mutability: nonpayable - access: super-app - inputs: - - agreementClass: address - - callData: bytes - - userData: bytes - - ctx: bytes - outputs: - - newCtx: bytes - - returnedData: bytes - errors: [APP_RULE, HOST_ONLY_LISTED_AGREEMENT, HOST_CALL_AGREEMENT_WITH_CTX_FROM_WRONG_ADDRESS] - -callAppActionWithContext: - # Chain an app action call from within a Super App callback. - mutability: nonpayable - access: super-app - inputs: - - app: address - - callData: bytes - - ctx: bytes - outputs: - - newCtx: bytes - errors: [APP_RULE, HOST_NOT_A_SUPER_APP, HOST_SUPER_APP_IS_JAILED, HOST_AGREEMENT_CALLBACK_IS_NOT_ACTION, HOST_CALL_APP_ACTION_WITH_CTX_FROM_WRONG_ADDRESS] - -# == Context Utilities == - -decodeCtx: - # Decode a raw context bytes blob into the structured Context fields. - mutability: pure - inputs: - - ctx: bytes - outputs: - - context: - type: tuple - components: - - appCallbackLevel: uint8 - - callType: uint8 - - timestamp: uint256 - - msgSender: address - - agreementSelector: bytes4 - - userData: bytes - - appCreditGranted: uint256 - - appCreditWantedDeprecated: uint256 - - appCreditUsed: int256 - - appAddress: address - - appCreditToken: address - -isCtxValid: - # Check if a context blob matches the current transaction's context stamp. - mutability: view - inputs: - - ctx: bytes - outputs: - - bool - -# == App Registry == -# Super App registration. On some deployments, governance permission (via SimpleACL -# or legacy governance config) is required before an app can register. - -registerApp: - # Register msg.sender as a Super App with the given config word. - # On whitelisting-enabled deployments, tx.origin must have the - # ACL_SUPERAPP_REGISTRATION_ROLE or a valid legacy governance key. - mutability: nonpayable - access: self - inputs: - - configWord: uint256 # Super App manifest flags (see SuperAppDefinitions) - emits: [AppRegistered] - errors: [HOST_NO_APP_REGISTRATION_PERMISSION, HOST_INVALID_CONFIG_WORD, HOST_SUPER_APP_ALREADY_REGISTERED] - -registerApp(address,uint256): - # Register an external contract as a Super App. - # Useful for factory patterns where the deployer registers the app. - mutability: nonpayable - access: anyone - inputs: - - app: address # must be a contract - - configWord: uint256 - emits: [AppRegistered] - errors: [HOST_MUST_BE_CONTRACT, HOST_NO_APP_REGISTRATION_PERMISSION, HOST_INVALID_CONFIG_WORD, HOST_SUPER_APP_ALREADY_REGISTERED] - -registerAppWithKey: - # DEPRECATED — use registerApp(uint256) instead. - # Legacy registration using a governance-provided registration key string. - mutability: nonpayable - access: self - inputs: - - configWord: uint256 - - registrationKey: string - emits: [AppRegistered] - errors: [HOST_NO_APP_REGISTRATION_PERMISSION, HOST_INVALID_CONFIG_WORD, HOST_SUPER_APP_ALREADY_REGISTERED] - -registerAppByFactory: - # DEPRECATED — use registerApp(address, uint256) instead. - # Legacy factory-based registration using governance-authorized factory addresses. - mutability: nonpayable - access: factory - inputs: - - app: address - - configWord: uint256 - emits: [AppRegistered] - errors: [HOST_MUST_BE_CONTRACT, HOST_NO_APP_REGISTRATION_PERMISSION, HOST_INVALID_CONFIG_WORD, HOST_SUPER_APP_ALREADY_REGISTERED] - -# == App Queries == - -isApp: - mutability: view - inputs: - - app: address - outputs: - - bool - -getAppCallbackLevel: - mutability: view - inputs: - - appAddr: address - outputs: - - uint8 - -getAppManifest: - # Returns the full manifest of a Super App. - # isSuperApp is false if the address was never registered. - mutability: view - inputs: - - app: address - outputs: - - isSuperApp: bool - - isJailed: bool - - noopMask: uint256 # bitmask of noop'd agreement callback selectors - -isAppJailed: - mutability: view - inputs: - - app: address - outputs: - - isJail: bool - -# == App Composition == -# Source apps can whitelist target apps for composability (calling downstream). -# Currently limited to MAX_APP_CALLBACK_LEVEL = 1 (one level of nesting). - -allowCompositeApp: - # Whitelist a target Super App for composition. msg.sender must be a Super App - # with a higher callback level than the target. - mutability: nonpayable - access: super-app - inputs: - - targetApp: address - errors: [HOST_SENDER_IS_NOT_SUPER_APP, HOST_RECEIVER_IS_NOT_SUPER_APP, HOST_SOURCE_APP_NEEDS_HIGHER_APP_LEVEL] - -isCompositeAppAllowed: - mutability: view - inputs: - - app: address - - targetApp: address - outputs: - - isAppAllowed: bool - -# == Agreement Framework == -# Internal protocol functions called by registered agreement contracts (CFA, IDA, GDA) -# to manage Super App callbacks and app credit. Only callable by agreements. -# -# Callback lifecycle (called by agreement during flow operations): -# 1. appCallbackPush — set up credit, push callback frame -# 2. callAppBeforeCallback — staticcall app's before hook (read-only) -# 3. (agreement executes core logic) -# 4. callAppAfterCallback — call app's after hook (state changes OK) -# 5. appCallbackPop — finalize credit accounting, pop frame - -callAppBeforeCallback: - # StaticCall a Super App's before-callback. Returns the callback data. - # If the callback reverts during a termination, the app is jailed instead of reverting. - mutability: nonpayable - access: agreement - inputs: - - app: address - - callData: bytes - - isTermination: bool - - ctx: bytes - outputs: - - cbdata: bytes - errors: [HOST_ONLY_LISTED_AGREEMENT, HOST_NEED_MORE_GAS, APP_RULE] - -callAppAfterCallback: - # Call a Super App's after-callback. Returns the (potentially modified) context. - # If the app returns an invalid ctx, it is jailed on termination or reverts otherwise. - mutability: nonpayable - access: agreement - inputs: - - app: address - - callData: bytes - - isTermination: bool - - ctx: bytes - outputs: - - newCtx: bytes - errors: [HOST_ONLY_LISTED_AGREEMENT, HOST_NEED_MORE_GAS, APP_RULE] - -appCallbackPush: - # Push a new callback frame onto the context stack before invoking a Super App. - # Sets up app credit and tracks the callback nesting level. - notes: - - "Gotcha: The appCreditGranted is backed by the flow sender's deposit as \"owed deposit\". If the Super App opens outgoing streams using this credit, the sender's total locked capital increases accordingly (roughly doubles for 1:1 relay, more for fan-out patterns)." - mutability: nonpayable - access: agreement - inputs: - - ctx: bytes - - app: address - - appCreditGranted: uint256 - - appCreditUsed: int256 - - appCreditToken: address - outputs: - - appCtx: bytes - errors: [HOST_ONLY_LISTED_AGREEMENT, APP_RULE] - -appCallbackPop: - # Pop the callback frame after a Super App callback completes. - # Adjusts appCreditUsed by the delta from the callback. - mutability: nonpayable - access: agreement - inputs: - - ctx: bytes - - appCreditUsedDelta: int256 - outputs: - - newCtx: bytes - errors: [HOST_ONLY_LISTED_AGREEMENT] - -ctxUseCredit: - # Record additional app credit usage during an agreement operation. - mutability: nonpayable - access: agreement - inputs: - - ctx: bytes - - appCreditUsedMore: int256 - outputs: - - newCtx: bytes - errors: [HOST_ONLY_LISTED_AGREEMENT] - -jailApp: - # Jail a Super App from within an agreement. Jailed apps have their callbacks bypassed. - mutability: nonpayable - access: agreement - inputs: - - ctx: bytes - - app: address - - reason: uint256 # see SuperAppDefinitions for jail reason codes - outputs: - - newCtx: bytes - emits: [Jail] - errors: [HOST_ONLY_LISTED_AGREEMENT] - -# == Governance == - -getGovernance: - mutability: view - outputs: - - governance: address - -replaceGovernance: - mutability: nonpayable - access: governance - inputs: - - newGov: address - emits: [GovernanceReplaced] - errors: [HOST_ONLY_GOVERNANCE] - -# == Agreement Whitelisting == -# Governance registers and upgrades agreement classes (CFA, IDA, GDA). - -registerAgreementClass: - # Register a new agreement class. Creates a UUPS proxy in upgradable deployments. - mutability: nonpayable - access: governance - inputs: - - agreementClassLogic: address - emits: [AgreementClassRegistered] - errors: [HOST_ONLY_GOVERNANCE, HOST_AGREEMENT_ALREADY_REGISTERED, HOST_MAX_256_AGREEMENTS] - -updateAgreementClass: - # Upgrade an existing agreement class to a new implementation. - mutability: nonpayable - access: governance - inputs: - - agreementClassLogic: address - emits: [AgreementClassUpdated] - errors: [HOST_ONLY_GOVERNANCE, HOST_NON_UPGRADEABLE, HOST_AGREEMENT_IS_NOT_REGISTERED] - -isAgreementTypeListed: - mutability: view - inputs: - - agreementType: bytes32 # keccak256 of agreement name string - outputs: - - yes: bool - -isAgreementClassListed: - mutability: view - inputs: - - agreementClass: address - outputs: - - yes: bool - -getAgreementClass: - mutability: view - inputs: - - agreementType: bytes32 - outputs: - - agreementClass: address - errors: [HOST_AGREEMENT_IS_NOT_REGISTERED] - -mapAgreementClasses: - # Decode a bitmap into an array of agreement class addresses. - mutability: view - inputs: - - bitmap: uint256 - outputs: - - agreementClasses: address[] - -addToAgreementClassesBitmap: - mutability: view - inputs: - - bitmap: uint256 - - agreementType: bytes32 - outputs: - - newBitmap: uint256 - errors: [HOST_AGREEMENT_IS_NOT_REGISTERED] - -removeFromAgreementClassesBitmap: - mutability: view - inputs: - - bitmap: uint256 - - agreementType: bytes32 - outputs: - - newBitmap: uint256 - errors: [HOST_AGREEMENT_IS_NOT_REGISTERED] - -# == Super Token Factory == - -getSuperTokenFactory: - mutability: view - outputs: - - factory: address - -getSuperTokenFactoryLogic: - # Returns the logic address behind the factory proxy. For non-upgradable - # deployments, returns the factory address itself. - mutability: view - outputs: - - logic: address - -updateSuperTokenFactory: - # Deploy or upgrade the SuperTokenFactory. On first call, creates a UUPS proxy. - mutability: nonpayable - access: governance - inputs: - - newFactory: address - emits: [SuperTokenFactoryUpdated] - errors: [HOST_ONLY_GOVERNANCE, HOST_NON_UPGRADEABLE] - -updateSuperTokenLogic: - # Upgrade a SuperToken proxy to new logic. If newLogicOverride is address(0), - # uses the canonical logic from the SuperTokenFactory. - mutability: nonpayable - access: governance - inputs: - - token: address - - newLogicOverride: address # address(0) means use canonical logic - emits: [SuperTokenLogicUpdated] - errors: [HOST_ONLY_GOVERNANCE] - -changeSuperTokenAdmin: - # Change the admin of a SuperToken. The admin is the only account allowed to - # upgrade the token logic. Default admin is the Host itself. - mutability: nonpayable - access: governance - inputs: - - token: address - - newAdmin: address - errors: [HOST_ONLY_GOVERNANCE] - -# == Pool Beacon == - -updatePoolBeaconLogic: - # Upgrade the SuperfluidPool beacon to new logic. Affects all GDA pool proxies. - mutability: nonpayable - access: governance - inputs: - - newLogic: address - emits: [PoolBeaconLogicUpdated] - errors: [HOST_ONLY_GOVERNANCE] - -# == ERC2771 / Forwarder == - -isTrustedForwarder: - # Check if an address is a governance-approved trusted forwarder for meta-transactions. - mutability: view - inputs: - - forwarder: address - outputs: - - bool - -versionRecipient: - # ERC2771 relay recipient version string. Returns "v1". - mutability: pure - outputs: - - string - -getERC2771Forwarder: - # Returns the ERC2771Forwarder contract used for ERC2771_FORWARD_CALL batch operations. - mutability: view - outputs: - - address - -getSimpleACL: - # Returns the SimpleACL contract used for Super App registration permissioning. - mutability: view - outputs: - - address - -# == Time == - -getNow: - # Returns block.timestamp. Useful for off-chain tooling and testing. - mutability: view - outputs: - - uint256 - -# == Protocol Constants == - -NON_UPGRADABLE_DEPLOYMENT: - # True if the Host was deployed in non-upgradable mode. - mutability: view - outputs: - - bool - -APP_WHITE_LISTING_ENABLED: - # True if Super App registration requires governance permission. - mutability: view - outputs: - - bool - -CALLBACK_GAS_LIMIT: - # Maximum gas forwarded to Super App callbacks. - mutability: view - outputs: - - uint64 - -MAX_APP_CALLBACK_LEVEL: - # Maximum callback nesting depth for composed Super Apps. Currently 1. - mutability: view - outputs: - - uint256 - -MAX_NUM_AGREEMENTS: - # Maximum number of agreement classes that can be registered. 256. - mutability: view - outputs: - - uint32 - -ACL_SUPERAPP_REGISTRATION_ROLE: - # keccak256("ACL_SUPERAPP_REGISTRATION_ROLE") — the SimpleACL role for app registration. - mutability: view - outputs: - - bytes32 - -SIMPLE_FORWARDER: - # Address of the SimpleForwarder used for SIMPLE_FORWARD_CALL batch operations. - mutability: view - outputs: - - address - -# == Events == - -events: - GovernanceReplaced: - data: - - oldGov: address - - newGov: address - - AgreementClassRegistered: - # agreementType is keccak256("org.superfluid-finance.agreements..") - data: - - agreementType: bytes32 - - code: address - - AgreementClassUpdated: - data: - - agreementType: bytes32 - - code: address - - SuperTokenFactoryUpdated: - data: - - newFactory: address - - SuperTokenLogicUpdated: - indexed: - - token: address - data: - - code: address - - PoolBeaconLogicUpdated: - indexed: - - beaconProxy: address - data: - - newBeaconLogic: address - - AppRegistered: - indexed: - - app: address - - Jail: - # Emitted when a Super App is jailed for violating protocol rules. - # See APP_RULE error below for reason code values. - indexed: - - app: address - data: - - reason: uint256 - - # Inherited events (from UUPSProxiable): - # CodeUpdated — emitted on proxy upgrade (uuid, codeAddress) - # Initialized — emitted on proxy initialization (version) - -# == Errors == - -errors: - # Governance - - HOST_ONLY_GOVERNANCE # caller is not the governance contract - - # Agreement whitelisting - - HOST_AGREEMENT_ALREADY_REGISTERED - - HOST_AGREEMENT_IS_NOT_REGISTERED - - HOST_MAX_256_AGREEMENTS # maximum agreement slots exhausted - - HOST_ONLY_LISTED_AGREEMENT # caller is not a registered agreement - - # Upgradability - - HOST_NON_UPGRADEABLE # deployment is non-upgradable - - HOST_CANNOT_DOWNGRADE_TO_NON_UPGRADEABLE - - # App registration - - HOST_MUST_BE_CONTRACT # app address has no code - - HOST_NO_APP_REGISTRATION_PERMISSION - - HOST_INVALID_CONFIG_WORD # invalid Super App manifest flags - - HOST_SUPER_APP_ALREADY_REGISTERED - - HOST_NOT_A_SUPER_APP # target is not a registered Super App - - HOST_SUPER_APP_IS_JAILED - - # App composition - - HOST_SENDER_IS_NOT_SUPER_APP - - HOST_RECEIVER_IS_NOT_SUPER_APP - - HOST_SOURCE_APP_NEEDS_HIGHER_APP_LEVEL - - # Context & call proxies - - HOST_NON_ZERO_LENGTH_PLACEHOLDER_CTX # placeholder ctx must be empty - - HOST_CALL_AGREEMENT_WITH_CTX_FROM_WRONG_ADDRESS # msg.sender != ctx.appAddress - - HOST_CALL_APP_ACTION_WITH_CTX_FROM_WRONG_ADDRESS # msg.sender != ctx.appAddress - - HOST_AGREEMENT_CALLBACK_IS_NOT_ACTION # app action selector matches a callback - - # Batch call - - HOST_UNKNOWN_BATCH_CALL_OPERATION_TYPE - - # Callback execution - - HOST_NEED_MORE_GAS # insufficient gas for Super App callback - - # Super App rule violations (generic, carries a reason code) - # Reason codes (from SuperAppDefinitions.sol): - # 10 — NO_REVERT_ON_TERMINATION_CALLBACK (delete callback reverted) - # 11 — NO_CRITICAL_SENDER_ACCOUNT (callback made sender critical) - # 12 — NO_CRITICAL_RECEIVER_ACCOUNT (callback made receiver critical) - # 20 — CTX_IS_READONLY (state change in before-callback staticcall) - # 21 — CTX_IS_NOT_CLEAN (context not properly returned) - # 22 — CTX_IS_MALFORMATED (context bytes corrupted/fabricated) - # 30 — COMPOSITE_APP_IS_NOT_WHITELISTED (no allowCompositeApp) - # 31 — COMPOSITE_APP_IS_JAILED (downstream app is jailed) - # 40 — MAX_APP_LEVEL_REACHED (callback nesting exceeded limit) - - APP_RULE: - inputs: - - _code: uint256 - - # SafeCast (inherited from OpenZeppelin) - - SafeCastOverflowedUintDowncast: - inputs: - - bits: uint8 - - value: uint256 diff --git a/.agents/skills/gooddollar/references/contracts/Superfluid.selectors.yaml b/.agents/skills/gooddollar/references/contracts/Superfluid.selectors.yaml deleted file mode 100644 index 18edf9b..0000000 --- a/.agents/skills/gooddollar/references/contracts/Superfluid.selectors.yaml +++ /dev/null @@ -1,51 +0,0 @@ -# Generated by scripts/selectors.mjs -functions: - batchCall(tuple[]): 0x31131761 - forwardBatchCall(tuple[]): 0xbc5a2101 - callAgreement(): 0xb7a9d0f0 - callAppAction(): 0x40df3d29 - callAgreementWithContext(address,bytes,bytes,bytes): 0x4329d293 - callAppActionWithContext(address,bytes,bytes): 0xba48b5f8 - decodeCtx(bytes): 0x3f6c923a - isCtxValid(bytes): 0xbf428734 - registerApp(): 0x6d6c85c3 - registerAppWithKey(uint256,string): 0xbd1c448b - registerAppByFactory(address,uint256): 0xf3733052 - isApp(address): 0x3ca3ad4e - getAppCallbackLevel(address): 0x9378fa13 - getAppManifest(address): 0xf9f522f4 - isAppJailed(address): 0x6b4f3335 - allowCompositeApp(address): 0x57121e0c - isCompositeAppAllowed(address,address): 0xbb84cfa1 - callAppBeforeCallback(address,bytes,bool,bytes): 0x74041e02 - callAppAfterCallback(address,bytes,bool,bytes): 0x1e6d0a84 - appCallbackPush(bytes,address,uint256,int256,address): 0x768fabb0 - appCallbackPop(bytes,int256): 0x989b0c3e - ctxUseCredit(bytes,int256): 0x59a29141 - jailApp(bytes,address): 0x5578431e - replaceGovernance(address): 0x7283100c - registerAgreementClass(address): 0x15a024e1 - updateAgreementClass(address): 0x06cecba8 - isAgreementTypeListed(): 0xf8dba358 - isAgreementClassListed(address): 0x8ca48484 - getAgreementClass(bytes32): 0xb6d200de - mapAgreementClasses(uint256): 0xc56a069d - addToAgreementClassesBitmap(uint256,bytes32): 0xbced3ddc - removeFromAgreementClassesBitmap(uint256,bytes32): 0xa5dbbbcd - updateSuperTokenFactory(address): 0x54fbc493 - updateSuperTokenLogic(address): 0x787afde7 - changeSuperTokenAdmin(address,address): 0x0c565075 - updatePoolBeaconLogic(address): 0x2f89bf89 - isTrustedForwarder(address): 0x572b6c05 - SIMPLE_FORWARDER(): 0xf85263b9 -events: - GovernanceReplaced(address,address): 0x13abda02e63c790d0e2818b251282cfe5cbe0a8abd69c54bf5d2260c0907bd2e - AgreementClassRegistered(bytes32,address): 0x878135063a6cfb3bc333e534b1fdc83f4f12221cad6705c31c0567048a8bd3d1 - AgreementClassUpdated(bytes32,address): 0x9279aa773f2b588996032d8de89911555039f28b13a11a7c17074330bc082d9a - SuperTokenFactoryUpdated(address): 0xce13a9895a1719ad4493b2ac1a9bfb36070566161abab408e7ecbe586da8d499 - SuperTokenLogicUpdated(address,address): 0x840acbd291b38534819f47f875839277e502f40e1c7bfea2c5fc2c8017442cd3 - PoolBeaconLogicUpdated(address,address): 0x052cea8931962dd445ef48b0b998d3056bd0705f437087d60fe3c46a3fa09e1f - AppRegistered(address): 0x0d540ad8f39e07d19909687352b9fa017405d93c91a6760981fbae9cf28bfef7 - Jail(address,uint256): 0xbe3aa33bd245135e4e26b223d79d14ea479a47bff09f2b03c53838af1edbb14b - # Inherited events (from UUPSProxiable)(): 0x3a1d0f622cf5be33dc2558b359f025fbeca1d6fb271fb70452a02b0ec2666ce8 -errors: {} diff --git a/.agents/skills/gooddollar/references/contracts/UBISchemeV2.abi.yaml b/.agents/skills/gooddollar/references/contracts/UBISchemeV2.abi.yaml deleted file mode 100644 index 75e5e43..0000000 --- a/.agents/skills/gooddollar/references/contracts/UBISchemeV2.abi.yaml +++ /dev/null @@ -1,305 +0,0 @@ -# UBISchemeV2 — dynamic daily UBI pool with per-root claiming and cycle accounting -# Claim uses Identity getWhitelistedRoot(msg.sender); transfers use the root as claim key. - -meta: - name: UBISchemeV2 - version: v2 - source: - - https://raw.githubusercontent.com/GoodDollar/GoodProtocol/master/contracts/ubi/UBISchemeV2.sol - inherits: [DAOUpgradeableContract] - note: > - Pool sizing uses cycleLength, reserveFactor, minActiveUsers, and on-chain G$ - balance. claim() reverts if Identity root is zero. Internal accounting keys - claims by whitelisted root, payouts go to msg.sender. - deployments: - mainnet: - production: - UBIScheme: - networkId: 122 - address: "0xd253A5203817225e9768C05E5996d642fb96bA86" - creationBlock: 15747401 - production-celo: - UBIScheme: - networkId: 42220 - address: "0x43d72Ff17701B2DA814620735C39C620Ce0ea4A1" - creationBlock: 18006679 - production-xdc: - UBIScheme: - networkId: 50 - address: "0x22867567E2D80f2049200E25C6F31CB6Ec2F0faf" - creationBlock: 95249624 - related: - - https://docs.gooddollar.org/for-developers/core-contracts/ubischeme - - references/guides/claim.md - -getClaimerCount: - mutability: view - inputs: - - day: uint256 - outputs: - - count: uint256 - -getClaimAmount: - notes: - - "Returns aggregate amount claimed for the provided day index." - mutability: view - inputs: - - day: uint256 - outputs: - - amount: uint256 - -getDailyStats: - notes: - - "Returns (claimer count, total claimed amount) for the calendar day derived from periodStart." - mutability: view - inputs: [] - outputs: - - claimerCount: uint256 - - claimAmount: uint256 - -setCycleLength: - mutability: nonpayable - access: avatar - inputs: - - _newLength: uint256 - outputs: [] - emits: [CycleLengthSet] - errors: [CYCLE_TOO_SHORT, ONLY_AVATAR] - -setDay: - notes: - - "Anyone may advance currentDay when wall-clock day crosses the next boundary." - mutability: nonpayable - inputs: [] - outputs: [] - emits: [DaySet] - -hasClaimed: - mutability: view - inputs: - - account: address - outputs: - - claimed: bool - -isNotNewUser: - mutability: view - inputs: - - _account: address - outputs: - - isReturning: bool - -estimateNextDailyUBI: - notes: - - "View-only projection when dailyUbi not yet fixed for the current wall day." - mutability: view - inputs: [] - outputs: - - projected: uint256 - -"checkEntitlement()": - notes: - - "Uses msg.sender as member; resolves Identity root before hasClaimed check." - mutability: view - inputs: [] - outputs: - - amount: uint256 - -"checkEntitlement(address)": - notes: - - "Checks claimable amount for the provided member using that account's whitelisted root." - mutability: view - inputs: - - _member: address - outputs: - - amount: uint256 - -claim: - notes: - - "Resolves whitelistedRoot = Identity.getWhitelistedRoot(msg.sender); reverts if zero." - - "_claim keys bookkeeping by root but pays msg.sender." - - "May notify ClaimersDistribution at GDAO_CLAIMERS if configured." - - "On success emits UBIClaimed; distributionFormula may emit UBICalculated, UBICycleCalculated, DaySet, WithdrawFromDao." - mutability: nonpayable - access: anyone - inputs: [] - outputs: - - didClaim: bool - errors: - - NOT_IN_PERIOD_OR_PAUSED - - NOT_WHITELISTED - - CLAIM_TRANSFER_FAILED - - DAO_TRANSFER_FAILED - -setShouldWithdrawFromDAO: - mutability: nonpayable - access: avatar - inputs: - - _shouldWithdraw: bool - outputs: [] - emits: [ShouldWithdrawFromDAOSet] - errors: [ONLY_AVATAR] - -pause: - mutability: nonpayable - access: avatar - inputs: - - _pause: bool - outputs: [] - errors: [ONLY_AVATAR] - -setNewClaimersReserveFactor: - notes: - - "Adjusts reserveFactor used by distribution formula to reserve part of pool for new claimers." - mutability: nonpayable - access: avatar - inputs: - - _reserveFactor: uint32 - outputs: [] - errors: [ONLY_AVATAR] - -withdraw: - notes: - - "Avatar-controlled treasury action transferring G$ from scheme balance to recipient." - mutability: nonpayable - access: avatar - inputs: - - _amount: uint256 - - _recipient: address - outputs: [] - errors: - - ONLY_AVATAR - - WITHDRAW_FAILED - -lastClaimed: - notes: - - "Returns last claim timestamp keyed by account root logic used by hasClaimed checks." - mutability: view - inputs: - - account: address - outputs: - - ts: uint256 - -currentDay: - mutability: view - inputs: [] - outputs: - - day: uint256 - -periodStart: - mutability: view - inputs: [] - outputs: - - ts: uint256 - -dailyUbi: - mutability: view - inputs: [] - outputs: - - amount: uint256 - -lastWithdrawDay: - mutability: view - inputs: [] - outputs: - - day: uint256 - -shouldWithdrawFromDAO: - mutability: view - inputs: [] - outputs: - - flag: bool - -cycleLength: - mutability: view - inputs: [] - outputs: - - days: uint256 - -dailyCyclePool: - mutability: view - inputs: [] - outputs: - - pool: uint256 - -startOfCycle: - mutability: view - inputs: [] - outputs: - - ts: uint256 - -currentCycleLength: - mutability: view - inputs: [] - outputs: - - length: uint256 - -minActiveUsers: - mutability: view - inputs: [] - outputs: - - n: uint256 - -totalClaimsPerUser: - mutability: view - inputs: - - account: address - outputs: - - count: uint256 - -reserveFactor: - mutability: view - inputs: [] - outputs: - - bps: uint32 - -paused: - mutability: view - inputs: [] - outputs: - - isPaused: bool - -events: - WithdrawFromDao: - indexed: [] - data: - - prevBalance: uint256 - - newBalance: uint256 - UBICalculated: - indexed: [] - data: - - day: uint256 - - dailyUbi: uint256 - - blockNumber: uint256 - UBICycleCalculated: - indexed: [] - data: - - day: uint256 - - pool: uint256 - - cycleLength: uint256 - - dailyUBIPool: uint256 - UBIClaimed: - indexed: - - claimer: address - data: - - amount: uint256 - CycleLengthSet: - indexed: [] - data: - - newCycleLength: uint256 - DaySet: - indexed: [] - data: - - newDay: uint256 - ShouldWithdrawFromDAOSet: - indexed: [] - data: - - ShouldWithdrawFromDAO: bool - -errors: - NOT_IN_PERIOD_OR_PAUSED: "not in periodStarted or paused — requireStarted modifier." - CYCLE_TOO_SHORT: "cycle must be at least 1 day long" - DAO_TRANSFER_FAILED: "DAO transfer has failed — _withdrawFromDao balance check." - NOT_WHITELISTED: "UBIScheme: not whitelisted — claim()" - CLAIM_TRANSFER_FAILED: "claim transfer failed — G$ transfer in _transferTokens." - WITHDRAW_FAILED: "withdraw failed — avatar withdraw." - ONLY_AVATAR: "Inherited avatar-only guard on DAOUpgradeable paths." diff --git a/.agents/skills/gooddollar/references/contracts/UBISchemeV2.selectors.yaml b/.agents/skills/gooddollar/references/contracts/UBISchemeV2.selectors.yaml deleted file mode 100644 index 666b89d..0000000 --- a/.agents/skills/gooddollar/references/contracts/UBISchemeV2.selectors.yaml +++ /dev/null @@ -1,40 +0,0 @@ -# Generated by scripts/selectors.mjs -functions: - getClaimerCount(uint256): 0xc7a76adf - getClaimAmount(uint256): 0xcef63600 - getDailyStats(): 0x069786ea - setCycleLength(uint256): 0x3d84ceca - setDay(): 0xdddc3616 - hasClaimed(address): 0x73b2e80e - isNotNewUser(address): 0xa21f698a - estimateNextDailyUBI(): 0xc7713870 - checkEntitlement(): 0x98d6621b - checkEntitlement(address): 0x1a787f2e - claim(): 0x4e71d92d - setShouldWithdrawFromDAO(bool): 0xde1de3a0 - pause(bool): 0x02329a29 - setNewClaimersReserveFactor(uint32): 0x414089be - withdraw(uint256,address): 0x00f714ce - lastClaimed(address): 0x013eba92 - currentDay(): 0x5c9302c9 - periodStart(): 0xeda4e6d6 - dailyUbi(): 0x1d8f5ea9 - lastWithdrawDay(): 0xd7c4cbb8 - shouldWithdrawFromDAO(): 0x456ac1c2 - cycleLength(): 0xeac471a0 - dailyCyclePool(): 0x9dc2c033 - startOfCycle(): 0xba075410 - currentCycleLength(): 0x741470ac - minActiveUsers(): 0x37658574 - totalClaimsPerUser(address): 0xcc054dfc - reserveFactor(): 0x4322b714 - paused(): 0x5c975abb -events: - WithdrawFromDao(uint256,uint256): 0x3107ec7eaa50b775d2486c7a394472235804b6fe1c0d4b7bd1d79b09df60f2ba - UBICalculated(uint256,uint256,uint256): 0x836fa39995340265746dfe9587d9fe5c5de35b7bce778afd9b124ce1cfeafdc4 - UBICycleCalculated(uint256,uint256,uint256,uint256): 0x83e0d535b9e84324e0a25922406398d6ff5f96d0c686204ee490e16d7670566f - UBIClaimed(address,uint256): 0x89ed24731df6b066e4c5186901fffdba18cd9a10f07494aff900bdee260d1304 - CycleLengthSet(uint256): 0xa61e6cca2c12e2a0a493683acfe95b034f0f50d793434f4dfe3ba06ea201f344 - DaySet(uint256): 0x67eb03bd555181f9dd23f546e4331ddfb8b4a7d0c8d261ba44e037f30ce894ea - ShouldWithdrawFromDAOSet(bool): 0x6cd9a0fd2e006be39a9918bf56c85cae1d4f4599474483ff18cb93355ebaaf8e -errors: {} diff --git a/.agents/skills/gooddollar/references/contracts/_rich-abi-yaml-format.md b/.agents/skills/gooddollar/references/contracts/_rich-abi-yaml-format.md deleted file mode 100644 index 41e2bae..0000000 --- a/.agents/skills/gooddollar/references/contracts/_rich-abi-yaml-format.md +++ /dev/null @@ -1,93 +0,0 @@ -# Reading the Rich ABI YAMLs - -Each YAML is a self-contained contract reference. Here's how to parse them. - -## Root structure - -``` -# Header comment — contract name, description, key notes -meta: # name, version, source, implements, inherits, deployments, - # deploymentCreationBlocks (optional), notes -# == Section == # Grouped functions (these are the core content) -events: # All events the contract emits -errors: # Complete error index -``` - -Three root keys are reserved: `meta`, `events`, `errors`. Every other -root-level key is a **function**. - -## Function entries - -```yaml -createFlow: - # Description of what the function does. - notes: - - "Gotcha: Non-obvious behavior or edge cases listed here as structured data." - mutability: nonpayable # view | pure | nonpayable | payable - access: sender | operator # who can call (omitted for view/pure) - inputs: - - token: address - - receiver: address - - flowRate: int96 # inline comments for non-obvious params - - ctx: bytes - outputs: - - newCtx: bytes - emits: [FlowUpdated, FlowUpdatedExtension] # ordered by emission sequence - errors: [CFA_FLOW_ALREADY_EXISTS, CFA_INVALID_FLOW_RATE] # ordered by check sequence -``` - -Fields appear in this order: description comment, `notes`, `mutability`, -`access`, `inputs`, `outputs`, `emits`, `errors`. All are omitted when not -applicable. - -## Key conventions - -- **`ctx: bytes` parameter** = function is called through the Host - (`callAgreement` / `batchCall`), never directly. -- **`access` labels**: `anyone`, `host`, `self`, `admin`, `governance`, - `sender`, `receiver`, `operator`, `manager`, `pic`, `agreement`, - `trusted-forwarder`, `factory`, `super-app`. Combine with `|`. Conditional: - `anyone(if-critical-or-jailed)`. -- **`emits` and `errors` ordering** carries meaning: matches execution flow, - not alphabetical. First errors in the list are the most likely causes. -- **`notes:` field** on functions (and `meta.notes:` at contract level) - lists non-obvious behavior, common mistakes, or edge cases. Always read - these carefully. -- **`meta.source`** is an array of raw GitHub URLs to the Solidity source files - (implementation, interface, base — filenames are self-documenting). -- **`meta.deployments`** has per-network addresses split into `mainnet` and - `testnet` subgroups. -- **`creationBlock`**: decimal block where that **`address`** first has code; - put it on the same object as **`networkId`** / **`address`**, immediately after **`address`**. -- **`meta.deploymentCreationBlocks`**: same shape as **`meta.deployments`**, for - deployments stored as plain address strings; leaves are decimal block numbers. - -## Events section - -```yaml -events: - FlowUpdated: - indexed: # log topics (filterable) - - token: address - - sender: address - data: # log payload - - flowRate: int96 -``` - -## Errors section - -```yaml -errors: - # -- Category -- - - SIMPLE_ERROR # description - - PARAMETERIZED_ERROR: # errors with diagnostic data - inputs: - - value: uint256 -``` - -## Selector sidecar files - -Every `Foo.abi.yaml` has a companion `Foo.selectors.yaml` in the same -directory. These contain computed hex selectors (function 4-byte, error -4-byte, event 32-byte topic0) with full Solidity signatures for -verification. Generated by `scripts/selectors.mjs`. diff --git a/.agents/skills/gooddollar/references/deep-researches/faucet-flows.md b/.agents/skills/gooddollar/references/deep-researches/faucet-flows.md deleted file mode 100644 index 12b1899..0000000 --- a/.agents/skills/gooddollar/references/deep-researches/faucet-flows.md +++ /dev/null @@ -1,42 +0,0 @@ -# Faucet flows (user-facing explanation) - -This note explains the Faucet in plain language: what it does for users, why a top-up can fail, and what limits exist. - -The on-chain Faucet contract is used to add a small amount of native gas token to a wallet so the user can pay transaction fees. -Reference implementation: [`contracts/fuseFaucet/Faucet.sol`](https://github.com/GoodDollar/GoodProtocol/blob/master/contracts/fuseFaucet/Faucet.sol). -Addresses per chain: [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) only (for example `Faucet` under `production`, `production-celo`, `production-xdc`). - -## What this means for users - -- If your wallet is eligible, Faucet can send a small gas top-up. -- Eligibility usually depends on identity status and anti-abuse limits. -- This is a support mechanism for transaction fees, not a general transfer or swap service. - -## Main actions (in user language) - -- **Top up wallet** (`topWallet`) - Attempts to send gas to the target wallet after checks pass. - -- **Check eligibility first** (`canTop`) - Fast pre-check to see if top-up is currently allowed. - -- **Estimate top-up amount** (`getToppingAmount`) - Shows the amount Faucet would try to send right now. - -## Why a top-up may fail - -- You are not currently authorized by identity rules. -- Daily limit reached. -- Weekly limit reached. -- Wallet is temporarily banned. -- Wallet is too new for current policy. -- Calculated top-up is below minimum threshold. - -## Important safety note - -- The `onTokenTransfer` path includes a swap-like mechanism and is not meant as a normal user swap route. -- It does not enforce slippage protection in the same way users expect from a dedicated swap UI. - -## For developers and agents - -Use `references/guides/faucet.md` for step-by-step execution flow and deterministic preflight calls. diff --git a/.agents/skills/gooddollar/references/deep-researches/fuse-to-celo-staking-migration.md b/.agents/skills/gooddollar/references/deep-researches/fuse-to-celo-staking-migration.md deleted file mode 100644 index 261c2d7..0000000 --- a/.agents/skills/gooddollar/references/deep-researches/fuse-to-celo-staking-migration.md +++ /dev/null @@ -1,38 +0,0 @@ -# Why Fuse to CELO staking migration uses a staged backend flow - -This explains why the migration is split into allowance detection, unstake, bridge, and destination re-stake instead of a single transaction. In this context, Fuse `GovernanceStakingV2` is the old/source staking contract and Celo **`GooddollarSavingsStream`** is the destination staking contract ([source](https://github.com/Ubeswap/gooddollar-contracts/blob/main/contracts/GooddollarSavingsStream.sol), [0x059ee811414230d1Fb157878D2b491240F4D8d3B](https://celoscan.io/address/0x059ee811414230d1Fb157878D2b491240F4D8d3B)). - -## Why this cannot be one-chain atomic - -Fuse governance staking and CELO destination savings live on different chains, so the system cannot atomically close and reopen stake in one EVM transaction. Cross-chain migration is asynchronous by design and must tolerate timing gaps between source completion and destination finalization. - -## Why user allowance is first - -The migration flow assumes a backend-operated execution wallet. If that wallet needs to pull or operate on user funds in the source path, user approval must exist first. Without allowance, all downstream steps fail, so approval state is the earliest hard gate. - -## Why unstake is separated from bridge - -The source staking position is the canonical balance record on Fuse. The migration must first materialize transferable G$ by closing or reducing stake, then bridge only the confirmed unlocked amount. Bridging before final unstake confirmation introduces mismatch risk. - -## Why bridge finalization must be explicit - -Bridge transfers are eventually consistent across chains. The destination stake step must only run after the bridged G$ is confirmed on CELO. This avoids phantom staking attempts and preserves deterministic accounting. - -## Why destination uses `stakeFor` - -Ubeswap `GooddollarSavingsStream` on Celo supports `stakeFor(amount, recipient)`, which allows the backend execution wallet to stake on behalf of the user after bridge finalization. This fits migration operations where custody is temporary during the transfer window. - -## Main operational risks - -- partial migration from source unstake or bridge limit constraints -- stuck-in-transit bridge messages delaying destination staking -- stale assumptions about contract addresses across networks -- reward expectation mismatch when moving from Fuse governance staking mechanics to CELO savings mechanics - -## Contract/source map - -- Fuse staking family (GoodProtocol): [`GovernanceStaking.sol`](https://github.com/GoodDollar/GoodProtocol/blob/master/contracts/governance/GovernanceStaking.sol) -- Fuse deployment mapping: [`deployment.json`](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) (`production.GovernanceStakingV2`) -- Celo savings (Ubeswap): [`GooddollarSavingsStream.sol`](https://github.com/Ubeswap/gooddollar-contracts/blob/main/contracts/GooddollarSavingsStream.sol) -- Ubeswap contracts repository: [Ubeswap/gooddollar-contracts](https://github.com/Ubeswap/gooddollar-contracts) -- Bridge normalization for LZ quotes: [`BridgeHelperLibrary.normalizeFromTokenTo18Decimals`](https://github.com/GoodDollar/GoodBridge/blob/master/packages/bridge-contracts/contracts/messagePassingBridge/BridgeHelperLibrary.sol) (off-chain LayerZero fee estimation must match this; `canBridge` and `bridgeToWithLz` use the raw burn amount on the source chain) diff --git a/.agents/skills/gooddollar/references/deep-researches/gooddao-daostack-surface.md b/.agents/skills/gooddollar/references/deep-researches/gooddao-daostack-surface.md deleted file mode 100644 index 754a3a0..0000000 --- a/.agents/skills/gooddollar/references/deep-researches/gooddao-daostack-surface.md +++ /dev/null @@ -1,37 +0,0 @@ -# GoodDAO and DAOStack surface - -GoodProtocol’s on-chain **governance shell** is largely **DAOStack-shaped**: an **Avatar** holds protocol assets and reputation context; a **Controller** registers **schemes** and routes privileged calls. GoodDocs summarizes DAO-facing roles; **Avatar**, **Controller**, and other DAO contract addresses live only in [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json). Implementation follows [DAOStack Arc](https://github.com/daostack/arc) patterns. - -## Core interfaces (GoodProtocol) - -[`DAOStackInterfaces.sol`](https://github.com/GoodDollar/GoodProtocol/blob/master/contracts/DAOStackInterfaces.sol) defines the pieces most integrations touch: - -### Avatar - -- **`nativeToken()`** — often the G$ token address for the deployment. -- **`nativeReputation()`** — **`GReputation`** token for voting weight (see `GReputation` in `deployment.json`). -- **`owner()`** — owner of the Avatar, typically the **`Controller`** contract. - -### Controller - -- **`avatar()`** — address of the Avatar contract. -- **`registerScheme` / `unregisterScheme` / `unregisterSelf` / `isSchemeRegistered` / `getSchemePermissions`** — scheme lifecycle and permission bitmask per scheme+avatar. -- **`genericCall(contract, data, avatar, value)`** — executes arbitrary calls **as the avatar** (used heavily by DAO-backed contracts to move tokens or call NameService). -- **`mintTokens`**, **`externalTokenTransfer`**, **`sendEther`** — treasury-style operations through the controller/avatar. - -## How GoodProtocol contracts use it - -- **`DAOUpgradeableContract`** / **`DAOContract`** descendants resolve **`dao`** (Controller) and **`avatar`** from **NameService** keys such as **`CONTROLLER`** and **`AVATAR`** (also written during **NameService.initialize**). -- **Avatar-gated writes** (for example **NameService.setAddress**, **UBISchemeV2** admin functions, **IdentityV3** after `initDAO`) require **`msg.sender == dao.avatar()`** (or equivalent role), not EOAs. -- Schemes that upgrade themselves (for example staking **`upgrade()`**) use **`dao.genericCall`** and **`unregisterSelf`** against the avatar. - -## What agents should do - -1. Treat **DAO calls** as **governance-only** unless the user explicitly controls the avatar or a registered scheme. -2. For **read-only** work, use **NameService** and per-contract **view** functions; use **Controller.isSchemeRegistered** when validating that a target contract is an approved scheme (for example staking migrations). -3. Never fabricate **Avatar** or **Controller** addresses — use [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) or NameService. - -## References - -- [Core contracts — DAO contracts](https://docs.gooddollar.org/for-developers/core-contracts) (narrative only; addresses from [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) only) -- DAOStack Arc controller and avatar concepts in the upstream repo linked from GoodDocs. diff --git a/.agents/skills/gooddollar/references/deep-researches/how-ubi-is-minted.md b/.agents/skills/gooddollar/references/deep-researches/how-ubi-is-minted.md deleted file mode 100644 index 96d321a..0000000 --- a/.agents/skills/gooddollar/references/deep-researches/how-ubi-is-minted.md +++ /dev/null @@ -1,68 +0,0 @@ -# How UBI is minted - -This document aligns agent explanations with [How GoodDollar works](https://docs.gooddollar.org/how-gooddollar-works) and GoodDocs component pages; **contract addresses** come only from [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json). - -## Monetary creation (protocol level) - -- New G$ is created in connection with reserve mechanics: purchases into the reserve and reserve-side parameters (including reserve ratio) influence how much G$ can be issued while maintaining backing (see sustainability and issuance sections in GoodDocs). -- Selling G$ back to the reserve burns supply in that model. -- G$ that the protocol creates is allocated across UBI, savings incentives, treasury, and ecosystem uses per the distribution section of GoodDocs. - -## Where G$ is actually created - -Creation happens at the G$ token `mint(...)` call site, not inside `UBIScheme.claim()`. - -Current implementation uses the Mento-core expansion path: - -- `GoodDollarExpansionController` mints and routes to distribution helper. - -**DistributionHelper recipients** decide how much eventually lands in the UBI pool. - -## Claim vs reserve minting (important distinction) - -- **Reserve path:** Buying G$ through the reserve-backed AMM (or related Mento rails) is where mint and burn tied to the reserve model most directly apply at the token level. -- **Daily UBI `claim()`:** On `UBISchemeV2`, a successful claim typically **transfers G$ from the scheme contract’s balance** to the user (`token.transfer` in `_transferTokens`). The scheme may be **refilled** from the DAO avatar via internal `_withdrawFromDao` when configured, not necessarily minting in the same transaction as `claim()`. So describe user-facing UBI as **receipt from the UBI scheme balance**; reserve **minting** is the macro story, **transfer** is the usual claim-time mechanism. - -## Mento-core expansion flow (detailed) - -This is the detailed path for modern reserve-ratio-aware expansion. - -1. A caller triggers `mintUBIFromExpansion(exchangeId)` on `GoodDollarExpansionController`. -2. Expansion is time-gated by config (`expansionFrequency`, `lastExpansion`), so it does not run every block. -3. Controller computes a reserve-ratio scalar (effectively compounding `(1 - expansionRate)` for elapsed periods). -4. Controller calls `GoodDollarExchangeProvider.mintFromExpansion(exchangeId, reserveRatioScalar)`. -5. Exchange provider updates exchange state (including reserve-ratio math) and returns `amountToMint`. -6. Controller mints G$ to `distributionHelper`. -7. Controller triggers distribution (`onDistribution`) so recipients (including UBIScheme when configured) receive allocation. - -Also in `GoodDollarExpansionController`: - -- `mintUBIFromInterest(exchangeId, reserveInterest)` -- `mintUBIFromReserveBalance(exchangeId)` - -These are additional funding paths that mint to distribution helper as part of reserve-driven policy. - -## Reserve ratio, expansion, and risk - -- Practical reserve-ratio intuition: collateral backing strength per unit of G$ supply. -- Lower reserve ratio means weaker backing and higher risk when adding new supply. -- Expansion uses reserve-ratio-aware math instead of blind fixed minting, but aggressive params can still increase sell pressure. -- Key policy levers are expansion rate and expansion frequency (plus caller cadence/automation quality). - -## What claimers experience - -- Verified users receive daily UBI from a pool split among those who claim in each period (GoodDocs). -- The user-facing transaction is a UBIScheme-style `claim` on chains where it is deployed; ABI and version follow your deployment. - -## On-chain components (typical) - -- Identity system for verification and whitelist roots. -- UBIScheme (or successor) for entitlement and claim execution. -- G$ token: value reaches users via **transfer** from scheme balance and/or broader minting economics from the reserve side depending on which action you analyze. -- DistributionHelper: bridge layer between mint source and recipient buckets (UBI, others). - -## Agent guidance - -- Use GoodDocs for macro issuance and allocation; use UBIScheme + token transfer behavior for **claim** explanations. -- Use [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) for contract addresses instead of guessing. -- When users ask "why no UBI funding today", check whether mint functions were executed, then verify DistributionHelper recipient config and UBIScheme balance. diff --git a/.agents/skills/gooddollar/references/deep-researches/inviter-invitee-reward-model.md b/.agents/skills/gooddollar/references/deep-researches/inviter-invitee-reward-model.md deleted file mode 100644 index 267fa74..0000000 --- a/.agents/skills/gooddollar/references/deep-researches/inviter-invitee-reward-model.md +++ /dev/null @@ -1,58 +0,0 @@ -# Inviter and invitee reward model - -This explains why invite rewards sometimes work and sometimes fail, in user-facing terms. - -Invite rewards are handled by `InvitesV2`, but eligibility depends heavily on the identity system (`Identity`, often `IdentityV4`). In practice, most confusing cases are caused by whitelist or reverification state, not by the invite contract itself. - -## How the reward model works - -There are two separate moments: - -- `join`: the invitee registers with an invite code. -- bounty payout: the contract later checks if this invitee is eligible and pays inviter and invitee when rules pass. - -So joining does not guarantee immediate payout. Payout depends on current eligibility at claim time. - -## Why whitelist status is the main gate - -For bounty eligibility, `InvitesV2` checks whitelist state through Identity. - -The important behavior is: - -- A user can still have status `1` in identity storage but fail `isWhitelisted(...)` if reverification is due. -- When reverification is due, bounty checks fail until an admin refreshes authentication(Face Verification). -- Connected-wallet setups can still fail if the specific address used in invite flow does not pass the whitelist check expected by the contract path. - -## Why reverification blocks rewards - -Reverification cadence is defined in `IdentityV4` with day-based options (`reverifyDaysOptions`) and per-user progression (`authCount`). - -When too many days pass since the last authentication for that user’s current step: - -- `shouldReverify(...)` becomes true -- `isWhitelisted(...)` becomes false for bounty gating -- `canCollectBountyFor(...)` fails until authentication is refreshed - -This is why teams may see users who were once valid but are currently not eligible for invite rewards. - -## Common reasons a bounty is not paid - -- Invitee or inviter is not currently whitelisted. -- Reverification is due for invitee or inviter. -- `minimumClaims` or `minimumDays` thresholds are not met yet. -- Bounty was already paid or was zero at join time. -- Contract is inactive, or identity-chain checks do not match the active chain. -- Invite code or join state is invalid (duplicate code, self-invite, already joined). - -## What to measure for analytics - -- Historical pass: account was authenticated at least once (`lastAuthenticated > 0`). -- Current eligibility: account is currently whitelist-valid (`isWhitelisted`/non-zero root, depending on query design). - -Do not treat these as the same metric. Historical pass explains past onboarding success; current eligibility explains current payout success. - -## Contract sources - -- Invite contract: [`InvitesV2.sol`](https://github.com/GoodDollar/GoodProtocol/blob/master/contracts/invite/InvitesV2.sol) -- Identity contract: [`IdentityV4.sol`](https://github.com/GoodDollar/GoodProtocol/blob/master/contracts/identity/IdentityV4.sol) -- Deployment addresses: [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) diff --git a/.agents/skills/gooddollar/references/deep-researches/mento-reserve-economics.md b/.agents/skills/gooddollar/references/deep-researches/mento-reserve-economics.md deleted file mode 100644 index e46db2a..0000000 --- a/.agents/skills/gooddollar/references/deep-researches/mento-reserve-economics.md +++ /dev/null @@ -1,27 +0,0 @@ -# Mento and reserve economics - -This note ties **macro G$ economics** (GoodDocs) to **Mento trading surfaces** (broker, reserve, expansion) that agents integrate on-chain. - -## Protocol-level story (GoodDocs) - -- G$ is **reserve-backed**; issuance and price discovery follow an **augmented bonding curve** (Bancor-style dynamics) described in [How GoodDollar works](https://docs.gooddollar.org/how-gooddollar-works). -- **Buying** from the reserve side increases reserve assets and can support **new G$ supply** within reserve rules; **selling back** burns G$ and returns collateral, with parameters governed by **GoodDAO**. -- Distribution of newly created G$ spans UBI, savings incentives, treasury, and ecosystem allocations (same doc), but execution timing depends on the mint path and distribution trigger used by the deployment flow. - -## User-facing buy and sell (historical vs current) - -- [Buy and Sell G$](https://docs.gooddollar.org/user-guides) describes reserve interaction, fees (including exit contribution on some paths), and older explorer flows (GoodMarketMaker / exchangeHelper on Ethereum testnets). Treat that page as **product narrative**; **live contract addresses** must come only from [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json). - -## Mento stack (agent integration) - -On networks where GoodDollar uses Mento (see `MentoBroker` and related keys in [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) for your environment): - -- **`IBroker`** (implementation in [mento-core `Broker.sol`](https://github.com/mento-org/mento-core)) is the usual **swap entrypoint**: `getAmountIn` / `getAmountOut`, `swapIn` (exact in), `swapOut` (exact out), plus **trading limits** state per exchange id and token. -- **Reserve** holds collateral; **exchange provider** contracts price trades against the reserve; **GoodDollarExpansionController** and related interfaces in GoodProtocol’s [`MentoInterfaces.sol`](https://github.com/GoodDollar/GoodProtocol/blob/master/contracts/MentoInterfaces.sol) describe expansion and avatar wiring for governance-facing changes. -- Agents should not hardcode **exchangeId** or provider addresses: read them from [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) or discover via `getExchangeProviders()` after confirming the broker address for the chain from that file. - -## Agent guidance - -1. Explain **macro** supply and reserve behavior with GoodDocs language. -2. Execute **swaps** with broker quotes, slippage bounds, and allowances per `references/guides/swap.md`. -3. On revert, distinguish **slippage / limit** failures (broker) from **reserve liquidity** messages (see `MentoBroker.abi.yaml` error map and mento-core source). diff --git a/.agents/skills/gooddollar/references/deep-researches/on-off-ramp-service.md b/.agents/skills/gooddollar/references/deep-researches/on-off-ramp-service.md deleted file mode 100644 index b59e5c9..0000000 --- a/.agents/skills/gooddollar/references/deep-researches/on-off-ramp-service.md +++ /dev/null @@ -1,69 +0,0 @@ -# On- and off-ramp service via stable token swap - -Use this note for the service pattern where ramp providers do not list G$ directly. The practical path is: ramp in/out with a listed stable token (for example cUSD), then swap between stable and G$ on-chain. - -## Why this is required - -- Most on-/off-ramp providers list mainstream stable tokens, not G$. -- Service needs a bridge asset for fiat rails. -- Stable token becomes the integration point with ramp providers, while G$ remains the in-app asset. - -## On-chain source of truth - -- Solidity: [`contracts/utils/BuyGDClone.sol`](https://github.com/GoodDollar/GoodProtocol/blob/master/contracts/utils/BuyGDClone.sol) -- Components: - - `BuyGDCloneFactory` - - `BuyGDCloneV2` - - `DonateGDClone` -- Deployments: [releases/deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) - -## Service architecture - -The factory deploys EIP-1167 minimal clones and wires swap infrastructure (router, oracle, quoter, optional Mento broker configuration, G$ token, stable token). - -Swap execution is **dual-path**: - -- **Uniswap-style route** (router/quoter path) -- **Mento-based route** (broker/exchange-provider path) - -For each swap request, the service compares quoted outputs and selects the route with the **larger `amountOut`** (best execution for the same input amount), then enforces `minAmount` guard on the selected path. - -Each user gets a deterministic clone address from owner-based salt: - -- `predict(owner)` for buy clone -- `predictDonation(owner, donor)` for donation clone - -This is why clone-per-user design is used: - -- predictable per-user addresses for audit and routing -- isolated execution context -- cheaper deployment than full contract instances - -## Execution surface (conceptual) - -The operational surface is intentionally small and deterministic: - -- `create(owner)` -- `createAndSwap(owner, minAmount)` -- `predict(owner)` -- `createDonation`, `createDonationAndSwap`, `predictDonation` - -This keeps on-/off-ramp architecture auditable and predictable across users. - -## Risks - -- Wrong factory or wrong chain causes permanent fund loss risk. -- Stale router/oracle/mento config can fail swap or produce bad execution. -- Missing `minAmount` protection increases slippage risk. -- Quote source mismatch or stale quotes across Uniswap/Mento can pick a suboptimal route if not refreshed just before execution. - -## Boundary note - -This file explains **why** this architecture exists for ramp services and why per-user clones matter. -For step-by-step service execution flow, use `references/guides/on-off-ramp.md`. - -## Cross-reference - -- User narrative: [Buy and Sell G$](https://docs.gooddollar.org/user-guides) -- Token integration details: [How to integrate the G$ token](https://docs.gooddollar.org/for-developers/developer-guides/how-to-integrate-the-gusd-token) -- Broker ABI: `references/contracts/MentoBroker.abi.yaml` diff --git a/.agents/skills/gooddollar/references/guides/bridge.md b/.agents/skills/gooddollar/references/guides/bridge.md deleted file mode 100644 index 71fd6e8..0000000 --- a/.agents/skills/gooddollar/references/guides/bridge.md +++ /dev/null @@ -1,187 +0,0 @@ -# Bridge guide - -Use for moving G$ across supported networks with deployment-specific bridge contracts. - -Primary local ABI reference for MessagePassingBridge flow: - -- `references/contracts/MessagePassingBridge.abi.yaml` - -## GoodDocs alignment - -- User flow and high-level behavior: [Bridge GoodDollars](https://docs.gooddollar.org/user-guides/bridge-gooddollars). -- Resolve supported bridge contract addresses per chain from [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) only (for example `MpbBridge` under `production`, `production-celo`, `production-xdc`). Use [Bridge GoodDollars](https://docs.gooddollar.org/user-guides/bridge-gooddollars) for user-facing flow and troubleshooting, not for addresses. - -## Goal - -Bridge with deterministic pre-checks: bridge support, allowance, amount, cross-chain transport fee, and delivered G$ after destination **amount** limits and protocol fee. - -## Required inputs - -- source and destination chain metadata -- bridge contract address for source chain -- source G$ token address -- amount in source token decimals -- signer and rpc url - -## Execution flow - -1. Resolve source bridge and token addresses for the network pair. -2. Run bridge eligibility checks for sender and amount via `canBridge(from, amount)` on the **source** bridge (same contract you call for `bridgeToWithLz` / `bridgeToWithAxelar`). Outbound burn does not invoke `canBridge` inside `_bridgeTo`; destination mint still enforces **amount** limits (see **Bridge amount limit context**). -3. Read allowance and approve bridge spender when required. -4. Resolve transport mode (`LZ` or `AXELAR`) and estimate required native fee. -5. Send bridge transaction with nonzero `msg.value` and explicit transport method. -6. Return tx hash and normalized bridge parameters. - -## Bridge fee context - -Two different costs show up on `MessagePassingBridge`; do not conflate them. - -**1. Cross-chain transport fee (native gas token on the source chain)** -Paid as **`msg.value`** on the outbound call. The contract reverts with **`MISSING_FEE`** if `msg.value` is zero. On the **LayerZero** path the contract compares your `msg.value` to **`estimateSendFee`** and reverts **`LZ_FEE(required, sent)`** if it is too low. Use the same **normalized** amount for `estimateSendFee` as the contract uses internally (see the next section). On the **Axelar** path you still attach native value for Gas Service / execution; there is no single `estimateSendFee` analogue in the snippet—follow Envio/Axelar docs or simulate the exact call for production amounts. - -**2. Protocol fee on minted G$ (destination chain, basis points)** -When the message is executed on the **destination** chain, the bridge applies **`bridgeFees`** (min / max / fee bps via `setBridgeFees`) and mints the recipient **minus** that fee; the fee portion is minted to **`feeRecipient`** when it is non-zero (see `bridgeFees()`, `feeRecipient`, and `_takeFee` / `ExecutedTransfer` in `references/contracts/MessagePassingBridge.abi.yaml`). This is **not** the LayerZero relayer fee; it is a separate cut on the **token amount** delivered on arrival. - -**3. Optional OFT / LayerZero token-adapter path** -If the flow uses the GoodDollar OFT-style adapter instead of `MessagePassingBridge`, fee quoting follows **`quoteSend`** / **`MessagingFee`** on that contract; see `references/contracts/GoodDollarOFTAdapter.abi.yaml`. - -## Bridge amount limit context - -**Bridge limit** means **bridge amount limit**: policy on **how much G$** (token volume) may move—**`minAmount`**, per-transfer cap, per-account daily cap, and aggregate daily cap—plus **`onlyWhitelisted`**. It does **not** mean the cross-chain **native** transport fee (`msg.value`, **`LZ_FEE`**), and it does **not** mean the **destination mint fee** in **`bridgeFees`** (bps); those are covered under **Bridge fee context**. - -Amount caps and counters are **per bridge deployment**: read the **source** contract for outbound **amount** policy and usage meters tied to the burn, and the **destination** contract for **`_enforceLimits`** at inbound mint completion; do not assume identical **`bridgeLimits`** across chains. - -**1. Amount caps and usage meters** -**`bridgeLimits()`** exposes **`dailyLimit`**, **`txLimit`**, **`accountDailyLimit`**, **`minAmount`**, and **`onlyWhitelisted`**. Compare those caps to **`bridgeDailyLimit()`** (aggregate **`bridged24Hours`** and **`lastTransferReset`**) and **`accountsDailyLimit(account)`** (same fields per sender). Updates use **`setBridgeLimits`** (access per the ABI). Field-level notes and accessors live in `references/contracts/MessagePassingBridge.abi.yaml`. - -**2. Source preflight vs destination enforcement** -**`canBridge(from, amount)`** on the **source** is a view-only diagnostic for **that amount**: same policy family as amount limit checks, evaluated on the **raw** burn size (not the LayerZero fee normalization). Outbound **`_bridgeTo`** does **not** call **`canBridge`**; call it from the client if you want **`(false, reason)`** before signing instead of learning only from a revert after burn setup. When the message is executed on the **destination**, **`_enforceLimits`** is the hard gate for **amount** throttles and whitelist behavior at mint time. - -## Outbound pause, approved requests, and inbound source bridges - -These controls are separate from numeric **amount** caps; they still block or relax bridging and can surface as **`BRIDGE_LIMITS`** or inbound skips. - -**`pauseBridge`** sets **`isClosed`**; when closed, outbound flow reverts with **`BRIDGE_LIMITS('closed')`**. **`approvedRequests(requestId)`** on the destination lets **`_bridgeFrom`** skip standard **amount** limit enforcement for that completion when set. **`setDisabledBridges`** toggles **`disabledSourceBridges`** entries keyed by **`keccak256(abi.encode(sourceChainId, BridgeService))`**, controlling whether an inbound relay from that source is accepted before the rest of destination handling. See `references/contracts/MessagePassingBridge.abi.yaml`. - -## Axelar vs LayerZero on GoodDollar deployments - -LayerZero mappings are initialized for Ethereum, Celo, Fuse, and XDC in `initialize` / `upgrade` on `MessagePassingBridge`. The **Axelar** path is only usable where `toAxelarChainId(targetChainId)` returns a non-empty string; the on-chain pure function currently maps **1**, **5**, **42220**, and **44787** only. For **Fuse (122)** or **XDC (50)** targets, use **LZ** (`bridgeToWithLz`) unless governance ships a broader Axelar mapping. - -## LayerZero fee and `estimateSendFee` - -`bridgeToWithLz` burns the G$ **raw** amount in the source token’s `decimals()`. Inside the contract, LayerZero payload and `estimateSendFee` use a value normalized to **18 decimals** the same way as [GoodBridge `BridgeHelperLibrary.normalizeFromTokenTo18Decimals`](https://github.com/GoodDollar/GoodBridge/blob/master/packages/bridge-contracts/contracts/messagePassingBridge/BridgeHelperLibrary.sol): if `decimals < 18`, multiply by `10^(18 - decimals)`; if `decimals > 18`, divide by `10^(decimals - 18)`; otherwise use the raw amount. - -`canBridge(from, amount)` is evaluated on the **raw** burn amount, not the normalized value. - -Read `decimals()` from the source G$ contract when building off-chain fee quotes so you stay aligned if a deployment differs. - -## Deterministic snippet - -```js -import { ethers } from "ethers"; - -function normalizedForLzFee(raw, tokenDecimals) { - if (tokenDecimals < 18) return raw * 10n ** BigInt(18 - tokenDecimals); - if (tokenDecimals > 18) return raw / 10n ** BigInt(tokenDecimals - 18); - return raw; -} - -const provider = new ethers.JsonRpcProvider(process.env.RPC_URL); -const signer = new ethers.Wallet(process.env.PRIVATE_KEY, provider); - -const token = new ethers.Contract( - process.env.GOODDOLLAR_ADDRESS, - [ - "function decimals() view returns (uint8)", - "function allowance(address,address) view returns (uint256)", - "function approve(address,uint256) returns (bool)", - ], - signer, -); - -const bridge = new ethers.Contract( - process.env.BRIDGE_ADDRESS, - [ - "function canBridge(address,uint256) view returns (bool,string)", - "function toLzChainId(uint256) view returns (uint16)", - "function estimateSendFee(uint16,address,address,uint256,bool,bytes) view returns (uint256,uint256)", - "function bridgeToWithLz(address,uint256,uint256,bytes) payable", - "function bridgeToWithAxelar(address,uint256,uint256,address) payable", - ], - signer, -); - -const owner = await signer.getAddress(); -const targetChainId = Number(process.env.TARGET_CHAIN_ID); -const recipient = process.env.RECIPIENT; -const amount = ethers.parseUnits(process.env.AMOUNT, Number(process.env.DECIMALS)); -const transport = (process.env.BRIDGE_TRANSPORT || "LZ").toUpperCase(); -const tokenDecimals = await token.decimals(); -const normalizedForLzEstimate = normalizedForLzFee(amount, Number(tokenDecimals)); - -const [canBridge, reason] = await bridge.canBridge(owner, amount); -if (!canBridge) throw new Error(`Bridge blocked: ${reason}`); - -const allowance = await token.allowance(owner, process.env.BRIDGE_ADDRESS); -if (allowance < amount) { - const approveTx = await token.approve(process.env.BRIDGE_ADDRESS, amount); - await approveTx.wait(); -} - -let tx; - -if (transport === "LZ") { - const dstEid = await bridge.toLzChainId(targetChainId); - if (dstEid === 0) throw new Error("Unsupported target chain for LayerZero"); - - const adapterParams = process.env.LZ_ADAPTER_PARAMS || "0x"; - const [nativeFee] = await bridge.estimateSendFee( - dstEid, - owner, - recipient, - normalizedForLzEstimate, - false, - adapterParams, - ); - if (nativeFee <= 0n) throw new Error("Estimated LayerZero fee is zero"); - - tx = await bridge.bridgeToWithLz(recipient, targetChainId, amount, adapterParams, { - value: nativeFee, - }); -} else if (transport === "AXELAR") { - const nativeFee = ethers.parseEther(process.env.AXELAR_FEE_ETH || "0.01"); - tx = await bridge.bridgeToWithAxelar(recipient, targetChainId, amount, owner, { - value: nativeFee, - }); -} else { - throw new Error("Unsupported BRIDGE_TRANSPORT. Use LZ or AXELAR"); -} - -const receipt = await tx.wait(); -console.log( - JSON.stringify( - { - txHash: receipt.hash, - sourceBridge: process.env.BRIDGE_ADDRESS, - targetChainId, - transport, - recipient, - rawAmount: amount.toString(), - tokenDecimals: Number(tokenDecimals), - normalizedAmountForLz: normalizedForLzEstimate.toString(), - }, - null, - 2, - ), -); -``` - -## Failure handling - -- unsupported destination: return targetChainId, bridge address, and transport mode -- fee too low (`LZ_FEE` or underpriced Axelar fee): re-estimate and retry with user confirmation -- approval or balance issue: return required delta -- credited G$ on destination is reduced by **`bridgeFees`** (bps / min / max); that is independent of the source **`msg.value`** transport fee -- **`canBridge`** false on source: return the **`reason`** string from the view call -- **`BRIDGE_LIMITS(reason)`** custom error (see `references/contracts/MessagePassingBridge.abi.yaml` **errors**): **`reason`** labels the failing check (numeric **amount** limit, whitelist, **`closed`**, or other policy string from the implementation) -- source preflight passed but destination still reverts: re-read **`bridgeLimits`** and daily counters for **amount** caps and **`onlyWhitelisted`**; check **`isClosed`**, **`approvedRequests`**, and **`disabledSourceBridges`** per **Outbound pause, approved requests, and inbound source bridges**; message delivery can cross a reset boundary or policy change diff --git a/.agents/skills/gooddollar/references/guides/check-identity.md b/.agents/skills/gooddollar/references/guides/check-identity.md deleted file mode 100644 index adc0165..0000000 --- a/.agents/skills/gooddollar/references/guides/check-identity.md +++ /dev/null @@ -1,87 +0,0 @@ -# Check identity guide - -Use when the user asks whether an address is eligible for UBI or how identity links wallets. - -## GoodDocs alignment - -- [Connect another wallet address to identity](https://docs.gooddollar.org/user-guides/connect-another-wallet-address-to-identity): associated addresses resolve to a verified root in the Identity contract; `connectAccount` links wallets. -- One claim per day applies across all connected addresses for the same verified identity (see the hint on that page). - -## Goal - -Determine whitelist or authentication status with deterministic on-chain reads. - -## Metric semantics - -- **Passed whitelisting (historical):** use `lastAuthenticated(account) > 0`. -- **Still whitelisted (current):** use `getWhitelistedRoot(account) != 0x0` or `isWhitelisted(account) == true`. -- `getWhitelistedRoot(account) != 0x0` is a current-state signal, not an "ever passed" signal. - -## Required inputs - -- `nameServiceAddress` or explicit Identity address -- `account` to check -- `rpcUrl` and chain configuration - -## Execution flow - -1. Resolve `IDENTITY` from NameService when used on the deployment. -2. Read `getWhitelistedRoot(account)` or equivalent for the deployed Identity version. -3. Treat non-zero root as tied to a whitelisted identity tree when that is the protocol rule for the deployment. -4. Read `lastAuthenticated(account)` for historical pass status and `getWhitelistedRoot(account)` or `isWhitelisted(account)` for current status. - -## Deterministic snippet - -```js -import { ethers } from "ethers"; - -const provider = new ethers.JsonRpcProvider(process.env.RPC_URL); - -const nameService = new ethers.Contract( - process.env.NAMESERVICE_ADDRESS, - ["function getAddress(string) view returns (address)"], - provider, -); - -const identityAddress = await nameService.getAddress("IDENTITY"); -const identity = new ethers.Contract( - identityAddress, - [ - "function getWhitelistedRoot(address) view returns (address)", - "function isWhitelisted(address) view returns (bool)", - "function lastAuthenticated(address) view returns (uint256)", - ], - provider, -); - -const account = process.env.ACCOUNT; -const root = await identity.getWhitelistedRoot(account); -const isWhitelisted = await identity.isWhitelisted(account); -const lastAuthenticated = await identity.lastAuthenticated(account); - -console.log( - JSON.stringify( - { - account, - identityAddress, - whitelistedRoot: root, - isWhitelisted, - lastAuthenticated: lastAuthenticated.toString(), - }, - null, - 2, - ), -); -``` - -## Return shape - -- `isWhitelisted` or equivalent boolean summary -- `whitelistedRoot` or equivalent -- `lastAuthenticated` for historical-pass classification -- optional metadata fields when available - -## Failure handling - -- NameService cannot resolve `IDENTITY`: stop and fix inputs using [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) (`Identity` / `NameService` for the target environment)—not GoodDocs tables. -- Read failures: return the failing call and next step. diff --git a/.agents/skills/gooddollar/references/guides/claim.md b/.agents/skills/gooddollar/references/guides/claim.md deleted file mode 100644 index bd51abd..0000000 --- a/.agents/skills/gooddollar/references/guides/claim.md +++ /dev/null @@ -1,83 +0,0 @@ -# Claim guide - -Use when the user wants to claim daily UBI. Protocol context: [How GoodDollar works](https://docs.gooddollar.org/how-gooddollar-works) and [UBIScheme (GoodDocs behavior)](https://docs.gooddollar.org/for-developers/core-contracts/ubischeme)—contract addresses only from [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json). - -## Goal - -Execute a safe `claim()` with identity pre-checks and clear outputs. - -## GoodDocs alignment - -- UBI is distributed daily to verified users; the active pool is split among claimers in each period (see [How GoodDollar works](https://docs.gooddollar.org/how-gooddollar-works)). -- UBIScheme deployments vary by chain (Fuse, Celo, XDC); resolve live contract addresses only from [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) (`UBIScheme` under `production`, `production-celo`, or `production-xdc`). Use [Core contracts / UBIScheme](https://docs.gooddollar.org/for-developers/core-contracts/ubischeme) for documented behavior, not for addresses. - -## Required inputs - -- `nameServiceAddress` or explicit UBIScheme and Identity addresses from [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) -- `rpcUrl` and chain configuration -- signer context - -## Execution flow - -1. Resolve `IDENTITY` and `UBISCHEME` from NameService when NameService is the source of truth for the deployment. -2. Confirm whitelist status for the claiming account. -3. Optionally read entitlement or claimable state before sending `claim()`. -4. Call `claim()` on the resolved UBIScheme (contract generation may differ by deployment; align ABI with your target). -5. Return tx hash and claimed amount when derivable from events or balance delta. - -## Deterministic snippet - -```js -import { ethers } from "ethers"; - -const provider = new ethers.JsonRpcProvider(process.env.RPC_URL); -const signer = new ethers.Wallet(process.env.PRIVATE_KEY, provider); - -const nameService = new ethers.Contract( - process.env.NAMESERVICE_ADDRESS, - ["function getAddress(string) view returns (address)"], - provider, -); - -const identityAddress = await nameService.getAddress("IDENTITY"); -const ubiAddress = await nameService.getAddress("UBISCHEME"); - -const identity = new ethers.Contract( - identityAddress, - [ - "function isWhitelisted(address) view returns (bool)", - "function getWhitelistedRoot(address) view returns (address)", - ], - provider, -); - -const account = await signer.getAddress(); -const isWhitelisted = await identity.isWhitelisted(account); -if (!isWhitelisted) throw new Error("Account is not whitelisted"); - -const root = await identity.getWhitelistedRoot(account); -if (root === ethers.ZeroAddress) throw new Error("No whitelisted root"); - -const ubi = new ethers.Contract( - ubiAddress, - ["function claim()", "event UBICalculated(address,uint256,uint256,uint256)"], - signer, -); - -const tx = await ubi.claim(); -const receipt = await tx.wait(); -console.log(JSON.stringify({ txHash: receipt.hash, account, root }, null, 2)); -``` - -## Pre-check failures - -- Not whitelisted: stop and point the user to identity verification flows in GoodDocs. -- Missing contract address: stop; use [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) only. -- Zero entitlement: communicate that nothing is claimable in the current period without guessing amounts. - -## Output contract - -- network -- resolved contract addresses -- tx hash -- claim outcome details when available diff --git a/.agents/skills/gooddollar/references/guides/faucet.md b/.agents/skills/gooddollar/references/guides/faucet.md deleted file mode 100644 index d224e85..0000000 --- a/.agents/skills/gooddollar/references/guides/faucet.md +++ /dev/null @@ -1,76 +0,0 @@ -# Faucet top-up guide - -Use when the user needs native gas top-up via GoodProtocol Faucet. - -## Goal - -Run deterministic pre-checks and call `topWallet` only when eligibility and limits pass. - -## Required inputs - -- `rpcUrl`, chain configuration, signer -- Faucet address for the chain (from [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) `Faucet` under the matching environment, or `NameService.getAddress` when the deployment documents the key) -- target user address - -## Execution flow - -1. Resolve Faucet contract address for the active chain from [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json). -2. Run `canTop(user)` as preflight. -3. Read `getToppingAmount(user)` and communicate expected top-up. -4. If eligible, call `topWallet(user)`. -5. Return tx hash and resulting top-up context. - -## Deterministic snippet - -```js -import { ethers } from "ethers"; - -const provider = new ethers.JsonRpcProvider(process.env.RPC_URL); -const signer = new ethers.Wallet(process.env.PRIVATE_KEY, provider); - -const faucet = new ethers.Contract( - process.env.FAUCET_ADDRESS, - [ - "function canTop(address) view returns (bool)", - "function getToppingAmount(address) view returns (uint256)", - "function topWallet(address payable)", - ], - signer, -); - -const user = process.env.USER; -const canTop = await faucet.canTop(user); -if (!canTop) throw new Error("Faucet canTop returned false"); - -const amount = await faucet.getToppingAmount(user); -const tx = await faucet.topWallet(user); -const receipt = await tx.wait(); - -console.log( - JSON.stringify( - { - txHash: receipt.hash, - user, - toppingAmount: amount.toString(), - }, - null, - 2, - ), -); -``` - -## Common rejection reasons - -- `not authorized` -- daily or weekly cap reached -- banned address -- low effective `toTop` vs minimum threshold -- faucet inactive or wrong chain/address - -## Output contract - -- network -- faucet address -- `canTop` preflight result -- top-up amount estimate -- tx hash (when executed) diff --git a/.agents/skills/gooddollar/references/guides/gooddocs.md b/.agents/skills/gooddollar/references/guides/gooddocs.md deleted file mode 100644 index 5e5b4b3..0000000 --- a/.agents/skills/gooddollar/references/guides/gooddocs.md +++ /dev/null @@ -1,37 +0,0 @@ -# GoodDocs hub - -Canonical protocol documentation lives at [GoodDocs](https://docs.gooddollar.org/). - -This is a **routing guide** (quick link map), not a deep protocol analysis note. - -## Start here - -- [Welcome](https://docs.gooddollar.org/) -- [How GoodDollar works](https://docs.gooddollar.org/how-gooddollar-works) - -## User guides - -- [Buy and Sell G$](https://docs.gooddollar.org/user-guides) (reserve-backed buy/sell; includes historical Ethereum/Kovan explorer workflows in the doc) -- [Bridge GoodDollars](https://docs.gooddollar.org/user-guides/bridge-gooddollars) (MessagePassingBridge, fees, limits, troubleshooting) -- [Connect another wallet address to identity](https://docs.gooddollar.org/user-guides/connect-another-wallet-address-to-identity) - -## Developers - -- [Core contracts](https://docs.gooddollar.org/for-developers/core-contracts) (module overview; **do not** read contract addresses from GoodDocs—use [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) only) -- [Developer guides index](https://docs.gooddollar.org/for-developers/developer-guides) -- [Integrate the G$ token](https://docs.gooddollar.org/for-developers/developer-guides/how-to-integrate-the-gusd-token) (ERC-677, ERC-777, decimals by chain, `transferAndCall`, fees) -- [Use G$ streaming](https://docs.gooddollar.org/for-developers/developer-guides/use-gusd-streaming) (Superfluid on Celo, CFAv1Forwarder) - -## Chain IDs (bridge doc) - -| Network | Chain ID | -| -------- | -------- | -| Ethereum | 1 | -| Fuse | 122 | -| Celo | 42220 | -| XDC | 50 | - -## This repo - -- Action playbooks: `references/guides/*.md`. -- Rich ABIs: `references/contracts/*.abi.yaml`. diff --git a/.agents/skills/gooddollar/references/guides/goodsdks.md b/.agents/skills/gooddollar/references/guides/goodsdks.md deleted file mode 100644 index 8092e40..0000000 --- a/.agents/skills/gooddollar/references/guides/goodsdks.md +++ /dev/null @@ -1,110 +0,0 @@ -# GoodSDKs integration guide - -Use this guide when the task is SDK-first (app integration), not raw contract-first. - -## Scope - -GoodSDKs is the app integration layer for GoodDollar: - -- `@goodsdks/citizen-sdk` for identity and claim flows. -- `@goodsdks/react-hooks` for Wagmi React hooks. -- `@goodsdks/good-reserve` for reserve buy or sell flows. -- `@goodsdks/engagement-sdk` for engagement rewards flows. -- `@goodsdks/ui-components` and `@goodsdks/savings-widget` for web components. - -## Routing map - -- Check whitelist, identity root, FV link -> `@goodsdks/citizen-sdk` (`IdentitySDK`) -- Claim UBI with entitlement checks and fallback chains -> `@goodsdks/citizen-sdk` (`ClaimSDK`) -- React app with Wagmi and minimal glue code -> `@goodsdks/react-hooks` -- Buy or sell via reserve rails (Celo or XDC support rules) -> `@goodsdks/good-reserve` -- Reward app registration, claims, reward history -> `@goodsdks/engagement-sdk` -- Embeddable UI in non-React or mixed stacks -> `@goodsdks/ui-components` or `@goodsdks/savings-widget` - -## Deterministic setup - -Monorepo prerequisites: - -```bash -cd ~/Projects/GoodSDKs -corepack enable -yarn install --immutable -yarn build -``` - -Target one workspace: - -```bash -yarn workspace @goodsdks/citizen-sdk build -yarn workspace @goodsdks/react-hooks build -``` - -## Deterministic usage snippets - -Identity SDK: - -```ts -import { createPublicClient, createWalletClient, custom, http } from "viem"; -import { IdentitySDK } from "@goodsdks/citizen-sdk"; - -const publicClient = createPublicClient({ transport: http("https://forno.celo.org") }); -const walletClient = createWalletClient({ transport: custom(window.ethereum) }); - -const identitySDK = await IdentitySDK.init({ - publicClient, - walletClient, - env: "production", -}); - -const { isWhitelisted, root } = await identitySDK.getWhitelistedRoot("0xYourAccount"); -console.log({ isWhitelisted, root }); -``` - -Claim SDK: - -```ts -import { ClaimSDK, IdentitySDK } from "@goodsdks/citizen-sdk"; - -const identitySDK = await IdentitySDK.init({ publicClient, walletClient, env: "production" }); -const claimSDK = await ClaimSDK.init({ - publicClient, - walletClient, - identitySDK, - env: "production", -}); - -const entitlement = await claimSDK.checkEntitlement(); -if (entitlement.amount > 0n) { - const receipt = await claimSDK.claim(); - console.log(receipt.transactionHash); -} -``` - -React hooks: - -```tsx -import { useIdentitySDK, useClaimSDK, useGoodReserve } from "@goodsdks/react-hooks"; - -const identity = useIdentitySDK("production"); -const claim = useClaimSDK("production"); -const reserve = useGoodReserve("production"); -``` - -Reserve SDK: - -```ts -import { GoodReserveSDK } from "@goodsdks/good-reserve"; - -const sdk = new GoodReserveSDK(publicClient, walletClient, "production"); -const quote = await sdk.getBuyQuote(CUSD_ADDRESS, amountIn); -const tx = await sdk.buy(CUSD_ADDRESS, amountIn, (quote * 95n) / 100n); -console.log(tx.hash); -``` - -## Agent rules - -1. Prefer SDK methods first for app tasks. -2. Use contract-level guides only when SDK does not expose required behavior. -3. Do not invent SDK method names; align with package READMEs and exported types. -4. For chain support errors, report chain and env explicitly (do not silently fallback). -5. For UI tasks, prefer hooks or components over bespoke wallet and viem plumbing. diff --git a/.agents/skills/gooddollar/references/guides/hypersync-hyperrpc.md b/.agents/skills/gooddollar/references/guides/hypersync-hyperrpc.md deleted file mode 100644 index e7b6f28..0000000 --- a/.agents/skills/gooddollar/references/guides/hypersync-hyperrpc.md +++ /dev/null @@ -1,110 +0,0 @@ -# Envio HyperSync and HyperRPC - -Use this guide when the task is high-volume historical blockchain data fetch (events, blocks, txs), especially analytics and indexing workflows. - -## Official docs - -- HyperSync overview: [docs.envio.dev/docs/HyperSync/overview](https://docs.envio.dev/docs/HyperSync/overview) -- HyperRPC overview: [docs.envio.dev/docs/HyperRPC/overview-hyperrpc](https://docs.envio.dev/docs/HyperRPC/overview-hyperrpc) -- HyperRPC supported networks: [docs.envio.dev/docs/HyperRPC/hyperrpc-supported-networks](https://docs.envio.dev/docs/HyperRPC/hyperrpc-supported-networks) - -## What to use - -- **HyperSync**: preferred for new data pipelines and heavy historical scans. -- **HyperRPC**: read-only JSON-RPC drop-in for existing RPC code paths. - -## HyperRPC vs HyperSync (avoid mixing them up) - -- **HyperRPC** is a **hosted JSON-RPC URL** (same methods as `eth_getLogs`, `eth_blockNumber`, and so on). Any HTTP client or existing RPC stack can call it; put the API token in the URL path as Envio documents. -- **HyperSync** is a **separate high-throughput query API** used through **Envio client libraries** (for example `@envio-dev/hypersync-client` in Node). It is **not** “just another RPC endpoint” with the same ergonomics as a one-line `fetch` to `eth_getLogs` at large scale. - -## Decision rule - -1. For GoodDollar protocol history that exists on subgraphs, query the subgraph first and validate fields in `references/subgraphs/*-guide.md`. -2. If subgraph schema or freshness cannot satisfy the request, use **HyperSync** for large scans and pipelines, or **HyperRPC** when you must stay inside standard JSON-RPC. -3. For write operations (sending tx), use normal RPC providers; HyperRPC is read-only. - -## GoodDollar-relevant network coverage - -- Celo and XDC are supported on HyperRPC. -- Fuse is not currently listed; treat this as non-blocking and use existing providers for Fuse. - -## Access and auth - -- HyperRPC/HyperSync usage is account-based. -- HyperRPC requires an API key for reliable production use. -- Requests without API token are rate-limited and should be treated as non-production fallback only. -- Add API key in endpoint URL as documented by Envio. -- HyperRPC token pattern example from docs: `https://.rpc.hypersync.xyz/` - -## Agents: Envio API token when HyperSync is the best option - -After you decide **HyperSync** is the right tool for the user query (for example large historical scans or pipeline-scale log pulls where subgraphs are insufficient), check for a usable Envio credential in the execution environment (`ENVIO_API_TOKEN` for `@envio-dev/hypersync-client`, or the token Envio documents for your chosen URL pattern). - -If **no** Envio API token is available and you cannot complete the HyperSync path without it, **stop and explicitly ask the user** to provide an Envio API token (name the env var you need, typically `ENVIO_API_TOKEN`). Do not silently rely on anonymous or heavily rate-limited access as a substitute when HyperSync was already identified as the best approach. - -## Practical use in this repo - -- Keep subgraphs as first option for indexed protocol entities. -- Use HyperSync/HyperRPC when subgraph coverage is missing, stale, or insufficient for bulk historical pulls. -- When an agent chooses **HyperSync** as the best path and no Envio API token is available, follow **Agents: Envio API token when HyperSync is the best option** in this file and ask the user for `ENVIO_API_TOKEN` before proceeding. -- Keep contract addresses from [GoodProtocol/deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) only; use GoodDocs for product context, not for resolving contract addresses. -- For implementation details (client setup, query structure, supported methods), follow the Envio docs links above directly. - -## From block for historical fetches - -For **`eth_getLogs`**, HyperRPC, and HyperSync range queries, the lower bound is **`fromBlock`** (or the client’s equivalent). Prefer the deployment’s **`creationBlock`** from the matching row in `references/contracts/*.abi.yaml` (or **`meta.deploymentCreationBlocks`** where deployments are plain address strings) so scans do not start at genesis when you only need post-deploy history. Field placement for **`creationBlock`** is defined in `references/contracts/_rich-abi-yaml-format.md`. If you cannot determine the creation block, **`fromBlock` 0** is valid. - -## Prebuilt scripts (developers and local agents) - -These scripts avoid rediscovering HyperRPC wiring on every task. They require **Node.js 18 or newer** (global `fetch`). Paths like `scripts/...` are relative to the **GoodSkills repository root** (the directory that contains both `skills/` and `scripts/`), not relative to `skills/gooddollar/` alone. - -### Last N Identity `WhitelistedAdded` logs via HyperRPC - -- Script: `scripts/fetch-whitelist-events-hyperrpc.mjs` -- Default `EVENT_TOPIC0` matches `WhitelistedAdded(address)` on `IdentityV4`; override `EVENT_TOPIC0` for other events. -- Production Celo defaults: `CONTRACT_ADDRESS` defaults to `Identity` from `production-celo` in [GoodProtocol deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) (`0xC361A6E67822a0EDc17D899227dd9FC50BD62F42`). If `HYPERRPC_URL` is unset, the script builds `https://celo.rpc.hypersync.xyz/` from `HYPERRPC_API_TOKEN` or `ENVIO_API_TOKEN`. -- Optional env: `HYPERRPC_URL` (overrides token-based default), `CONTRACT_ADDRESS`, `LIMIT` (default `500`), `STEP` (default `2000`), `FROM_BLOCK` (decimal; omit to read **`creationBlock`** for `CONTRACT_ADDRESS` from `ABI_PATH` or the default `skills/gooddollar/references/contracts/IdentityV4.abi.yaml`), `ABI_PATH`, `TO_BLOCK` (default `latest`). **`fromBlock`** behavior is described in **From block for historical fetches** above. - -```bash -cd /path/to/GoodSkills -export HYPERRPC_API_TOKEN='' -node scripts/fetch-whitelist-events-hyperrpc.mjs -``` - -Web-only assistants without a shell cannot run the file; they should return the same env keys and command text so the user runs it locally. - -## HyperSync client minimal path (install required) - -HyperSync uses the official client. Install and query pattern (Celo example URLs from [Envio Celo docs](https://docs.envio.dev/docs/HyperIndex/celo)): - -```bash -npm install @envio-dev/hypersync-client -export ENVIO_API_TOKEN='' -``` - -Save as a `.mjs` file (or use `"type": "module"` in a local `package.json`) and run with `node`: - -```javascript -import { HypersyncClient, presetQueryLogsOfEvent } from "@envio-dev/hypersync-client"; - -const client = new HypersyncClient({ - url: "https://celo.hypersync.xyz", - apiToken: process.env.ENVIO_API_TOKEN, -}); - -const identity = "0x..."; -const whitelistedAddedTopic0 = - "0xee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f"; - -const fromBlock = 17237952; -const toBlock = await client.getHeight(); - -const query = presetQueryLogsOfEvent(identity, whitelistedAddedTopic0, fromBlock, toBlock); -const res = await client.get(query); -console.log(res.data.logs.length); -``` - -The example **`fromBlock`** matches **`creationBlock`** for production Celo Identity in `skills/gooddollar/references/contracts/IdentityV4.abi.yaml`; see **From block for historical fetches** above. - -Full API and streaming patterns: [HyperSync clients](https://docs.envio.dev/docs/HyperSync/hypersync-clients) and the package README for `@envio-dev/hypersync-client`. diff --git a/.agents/skills/gooddollar/references/guides/invite-bounties.md b/.agents/skills/gooddollar/references/guides/invite-bounties.md deleted file mode 100644 index d60aafd..0000000 --- a/.agents/skills/gooddollar/references/guides/invite-bounties.md +++ /dev/null @@ -1,115 +0,0 @@ -# Invite bounties guide - -Use when the task is to verify or execute inviter-invitee bounty payout flow and explain why payout is blocked. - -## Goal - -Check eligibility deterministically, execute payout only when eligible, and return exact failure reason when not eligible. - -## Required inputs - -- target chain -- `InvitesV2` address -- `Identity` address -- optional `UBISchemeV2` address when claims threshold is active -- invitee address -- inviter address -- rpc url and signer - -## Execution flow - -1. Resolve contract addresses from `deployment.json`. -2. Read invitee state from `users(invitee)` and global thresholds (`minimumClaims`, `minimumDays`, `active`). -3. Check current eligibility with `canCollectBountyFor(invitee)`. -4. If not eligible, read identity whitelist for invitee and inviter and return concrete blocker. -5. If eligible, execute `bountyFor(invitee)` or `collectBounties()` and return tx hash plus payout values from events. - -## Deterministic snippet - -```js -import { ethers } from "ethers"; - -const provider = new ethers.JsonRpcProvider(process.env.RPC_URL); -const signer = new ethers.Wallet(process.env.PRIVATE_KEY, provider); - -const invites = new ethers.Contract( - process.env.INVITES_ADDRESS, - [ - "function canCollectBountyFor(address) view returns (bool)", - "function bountyFor(address)", - "function users(address) view returns (bytes32,address,uint40,uint24,bool,uint256)", - "function minimumClaims() view returns (uint256)", - "function minimumDays() view returns (uint256)", - "function active() view returns (bool)", - "event InviterBounty(address indexed inviter,address indexed invitee,uint256 bountyPaid,uint256 inviterLevel,bool earnedLevel)" - ], - signer, -); - -const identity = new ethers.Contract( - process.env.IDENTITY_ADDRESS, - [ - "function isWhitelisted(address) view returns (bool)" - ], - provider, -); - -const invitee = process.env.INVITEE_ADDRESS; -const inviter = process.env.INVITER_ADDRESS; - -const [isActive, eligible, inviteeWhitelisted, inviterWhitelisted, minClaims, minDays] = await Promise.all([ - invites.active(), - invites.canCollectBountyFor(invitee), - identity.isWhitelisted(invitee), - identity.isWhitelisted(inviter), - invites.minimumClaims(), - invites.minimumDays(), -]); - -if (!isActive) throw new Error("Invites contract is inactive"); -if (!eligible) { - throw new Error( - `Not eligible. inviteeWhitelisted=${inviteeWhitelisted} inviterWhitelisted=${inviterWhitelisted} minimumClaims=${minClaims} minimumDays=${minDays}`, - ); -} - -const tx = await invites.bountyFor(invitee); -const receipt = await tx.wait(); -const bountyEvent = receipt.logs - .map((log) => { - try { - return invites.interface.parseLog(log); - } catch { - return null; - } - }) - .find((e) => e && e.name === "InviterBounty"); - -console.log( - JSON.stringify( - { - txHash: receipt.hash, - invitee, - inviter, - bountyPaid: bountyEvent?.args?.bountyPaid?.toString() ?? null, - }, - null, - 2, - ), -); -``` - -## Failure handling - -- invitee or inviter is not currently whitelisted -- reverification is due and whitelist check fails until re-authentication -- minimum claims or minimum days is not met -- bounty already paid or bounty-at-join is zero -- contract inactive or wrong deployment addresses - -## Output contract - -- network and addresses used -- eligibility status and blockers -- tx hash when sent -- payout values when available from logs diff --git a/.agents/skills/gooddollar/references/guides/migrate-fuse-staking-to-celo-savings.md b/.agents/skills/gooddollar/references/guides/migrate-fuse-staking-to-celo-savings.md deleted file mode 100644 index 4ad9fd2..0000000 --- a/.agents/skills/gooddollar/references/guides/migrate-fuse-staking-to-celo-savings.md +++ /dev/null @@ -1,116 +0,0 @@ -# Fuse to CELO staking migration guide - -Use when the user wants to migrate an existing Fuse governance stake into a CELO destination savings flow. In this flow, Fuse `GovernanceStakingV2` is the old staking contract (source) and **`GooddollarSavingsStream`** on Celo is the destination savings contract ([`GooddollarSavingsStream.sol`](https://github.com/Ubeswap/gooddollar-contracts/blob/main/contracts/GooddollarSavingsStream.sol), [CeloScan](https://celoscan.io/address/0x059ee811414230d1Fb157878D2b491240F4D8d3B)). - -## Goal - -Close a user stake on Fuse, bridge the resulting G$ to CELO, and stake on CELO for that user in a controlled backend flow. - -## Required inputs - -- user address on Fuse and corresponding destination address on CELO -- Fuse `GovernanceStakingV2` address (`production.GovernanceStakingV2` in [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json)) -- Fuse G$ token address and bridge contract address (from [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json): `GoodDollar`, `MpbBridge` under `production`) -- CELO G$ token address (from `production-celo` in the same file) and destination savings contract address -- backend signer or service wallet with required execution permissions -- chain RPC URLs for Fuse and CELO - -## Address resolution quick table - -| Purpose | Network | Source key/path | Value | -|---|---|---|---| -| Governance staking (source close) | Fuse (`production`, `networkId: 122`) | `deployment.json` -> `production.GovernanceStakingV2` | `0xB7C3e738224625289C573c54d402E9Be46205546` | -| Governance staking (previous) | Fuse (`production`, `networkId: 122`) | `deployment.json` -> `production.GovernanceStaking` | `0xFAF457Fb4A978Be059506F6CD41f9B30fCa753b0` | -| Fuse G$ token | Fuse (`production`, `networkId: 122`) | `deployment.json` -> `production.GoodDollar` | `0x495d133B938596C9984d462F007B676bDc57eCEC` | -| Fuse bridge | Fuse (`production`, `networkId: 122`) | `deployment.json` -> `production.MpbBridge` | `0xa3247276DbCC76Dd7705273f766eB3E8a5ecF4a5` | -| Destination savings | CELO (`networkId: 42220`) | [CeloScan](https://celoscan.io/address/0x059ee811414230d1Fb157878D2b491240F4D8d3B) / `GooddollarSavingsStream` | `0x059ee811414230d1Fb157878D2b491240F4D8d3B` (`process.env.CELO_SAVINGS`) | - -Canonical sources: - -- [GoodProtocol deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) -- [Fuse explorer contract (GovernanceStakingV2 address)](https://explorer.fuse.io/address/0xB7C3e738224625289C573c54d402E9Be46205546?tab=contract) -- [Ubeswap gooddollar-contracts](https://github.com/Ubeswap/gooddollar-contracts) -- [GoodBridge bridge helper normalization](https://github.com/GoodDollar/GoodBridge/blob/master/packages/bridge-contracts/contracts/messagePassingBridge/BridgeHelperLibrary.sol) - -## Token decimals and `MessagePassingBridge` LZ fees - -Production deployments checked on-chain: Fuse `GoodDollar` uses **2** decimals and Celo `GoodDollar` uses **18**. Fuse `GovernanceStakingV2` (sG$) uses **2** decimals. Resolve `decimals()` from each live token in your runner so you stay correct if deployments change. - -On the Fuse `MpbBridge` (`MessagePassingBridge`), `canBridge(from, amount)` and `bridgeToWithLz(..., amount, ...)` use the **raw G$ burn amount** in source token decimals. Off-chain **`estimateSendFee`’s `_normalizedAmount` argument** must match what the contract builds internally: **`normalizeFromTokenTo18Decimals(amount, IERC20(nativeToken()).decimals())`** ([`BridgeHelperLibrary`](https://github.com/GoodDollar/GoodBridge/blob/master/packages/bridge-contracts/contracts/messagePassingBridge/BridgeHelperLibrary.sol)). Format displayed amounts per chain (`formatUnits`/UI) using each chain’s G$ decimals. - -## Execution flow - -1. Confirm allowance for whichever asset your flow spends first (for example sG$ allowance to the backend on Fuse `GovernanceStakingV2`, or Fuse G$ allowance if you pull G$ directly), before any transfers or bridges. -2. Verify current stake state on Fuse before closing: - - stake token balance - - withdrawable stake amount - - pending rewards if any -3. Execute Fuse unstake or close flow on governance staking (`withdrawStake` or equivalent full-close path). -4. Compute net G$ available for migration after unstake completion and any reward claim behavior. -5. Bridge G$ from Fuse to CELO using the configured bridge path and track the transfer id or tx hash pair. -6. Wait for destination finalization on CELO and verify credited G$ balance at the backend execution wallet. -7. Approve destination savings contract to spend migrated G$ amount. -8. Stake for the user on CELO with `stakeFor(amount, recipient)` on `GooddollarSavingsStream` (G$ native Super Token; approve the savings contract, not only ERC20 GoodDollar from `deployment.json` if your wallet holds the Super Token). -9. Return a migration result with both chain tx hashes and final CELO staked amount. - -## Deterministic snippet - -```js -import { ethers } from "ethers"; - -const fuse = new ethers.JsonRpcProvider(process.env.FUSE_RPC_URL); -const celo = new ethers.JsonRpcProvider(process.env.CELO_RPC_URL); -const signerFuse = new ethers.Wallet(process.env.BACKEND_PK, fuse); -const signerCelo = new ethers.Wallet(process.env.BACKEND_PK, celo); - -const user = process.env.USER_ADDRESS; -const migrateAmount = BigInt(process.env.MIGRATE_AMOUNT); - -const celoGd = new ethers.Contract( - process.env.CELO_GD_TOKEN, - [ - "function approve(address spender,uint256 amount) returns (bool)", - "function balanceOf(address) view returns (uint256)", - ], - signerCelo, -); - -const savings = new ethers.Contract( - process.env.CELO_SAVINGS, - ["function stakeFor(uint256 amount,address recipient)"], - signerCelo, -); - -const approveTx = await celoGd.approve(process.env.CELO_SAVINGS, migrateAmount); -await approveTx.wait(); - -const stakeTx = await savings.stakeFor(migrateAmount, user); -const receipt = await stakeTx.wait(); - -console.log( - JSON.stringify( - { - user, - celoStakeTx: receipt.hash, - migratedAmount: migrateAmount.toString(), - }, - null, - 2, - ), -); -``` - -## Pre-check failures - -- User allowance missing on Fuse: stop and request allowance tx from user. -- Stake close fails on Fuse: stop and return exact revert reason before bridge. -- Bridge transfer not finalized on CELO: do not call `stakeFor` until destination balance is confirmed. -- CELO savings approval missing or too low: re-approve exact amount before staking. - -## Output contract - -- user address -- Fuse unstake tx hash -- bridge tx hash or transfer identifier -- CELO stake tx hash -- final staked amount on CELO diff --git a/.agents/skills/gooddollar/references/guides/on-off-ramp.md b/.agents/skills/gooddollar/references/guides/on-off-ramp.md deleted file mode 100644 index d212705..0000000 --- a/.agents/skills/gooddollar/references/guides/on-off-ramp.md +++ /dev/null @@ -1,77 +0,0 @@ -# On- and off-ramp service guide - -Use when implementing service flow where fiat ramps support a listed stable token (for example cUSD), and the app needs stable <-> G$ swap on-chain. - -## Goal - -Operate deterministic clone-based swap routing with explicit chain/factory verification and slippage guard. - -## Required inputs - -- target chain and factory address -- owner address used for clone derivation -- stable token and G$ token addresses -- direction: on-ramp or off-ramp -- `minAmount` guard -- signer and rpc url - -## Execution flow - -1. Resolve factory for target chain from [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) (`BuyGDFactory` / `BuyGDFactoryV2` under `production-celo`, or the key your deployment uses). -2. Compute expected clone via `predict(owner)`. -3. If clone not yet deployed for flow, call `create(owner)` or `createAndSwap(owner, minAmount)`. -4. Execute stable -> G$ (on-ramp) or G$ -> stable (off-ramp) through clone path. -5. Return chain id, factory, predicted clone, effective clone, tx hashes. - -## Deterministic snippet - -```js -import { ethers } from "ethers"; - -const provider = new ethers.JsonRpcProvider(process.env.RPC_URL); -const signer = new ethers.Wallet(process.env.PRIVATE_KEY, provider); - -const factory = new ethers.Contract( - process.env.BUY_GD_CLONE_FACTORY, - [ - "function predict(address) view returns (address)", - "function create(address) returns (address)", - "function createAndSwap(address,uint256) returns (address)", - ], - signer, -); - -const owner = process.env.OWNER; -const minAmount = ethers.parseUnits(process.env.MIN_AMOUNT, Number(process.env.DECIMALS_OUT)); -const predicted = await factory.predict(owner); - -const tx = await factory.createAndSwap(owner, minAmount); -const receipt = await tx.wait(); - -console.log( - JSON.stringify( - { - txHash: receipt.hash, - owner, - predictedClone: predicted, - chainId: (await provider.getNetwork()).chainId.toString(), - }, - null, - 2, - ), -); -``` - -## Failure handling - -- predicted clone mismatch with trusted expectation -- wrong chain or wrong factory address -- swap output below `minAmount` -- stale router/oracle or exchange configuration - -## Output contract - -- network and chain id -- factory address -- predicted and actual clone addresses -- tx hashes diff --git a/.agents/skills/gooddollar/references/guides/save.md b/.agents/skills/gooddollar/references/guides/save.md deleted file mode 100644 index d0e716c..0000000 --- a/.agents/skills/gooddollar/references/guides/save.md +++ /dev/null @@ -1,93 +0,0 @@ -# Save and stake guide - -Use when the user wants to stake G$, withdraw rewards, or exit stake. Staking economics sit alongside other protocol allocations described in [How GoodDollar works](https://docs.gooddollar.org/how-gooddollar-works). - -## GoodDocs alignment - -- Token integration and fee awareness: [How to integrate the G$ token](https://docs.gooddollar.org/for-developers/developer-guides/how-to-integrate-the-gusd-token) (`_processFees`, decimals per chain). -- Contract addresses: [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) only (for example staking and G$ token keys under `production` / `production-celo`). GoodDocs covers behavior and decimals patterns, not canonical deployment addresses. - -## Goal - -Run staking actions with balance and allowance safety checks. - -## Required inputs - -- `nameServiceAddress` or explicit staking and token addresses -- `amount` or `shares` depending on the action -- `rpcUrl`, chain configuration, signer - -## Execution flow - -1. Resolve staking and G$ token addresses from [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) or, when the deployment documents the key, from `NameService.getAddress` on chain. -2. Read token balance and allowance. -3. Approve the staking contract when `stake` uses `transferFrom`. -4. Execute `stake`, `withdrawRewards`, or `withdrawStake` as requested. -5. Return tx hash and key resulting balances or events. - -## Deterministic snippets - -```js -import { ethers } from "ethers"; - -const provider = new ethers.JsonRpcProvider(process.env.RPC_URL); -const signer = new ethers.Wallet(process.env.PRIVATE_KEY, provider); - -const token = new ethers.Contract( - process.env.GOODDOLLAR_ADDRESS, - [ - "function balanceOf(address) view returns (uint256)", - "function allowance(address,address) view returns (uint256)", - "function approve(address,uint256) returns (bool)", - ], - signer, -); - -const staking = new ethers.Contract( - process.env.STAKING_ADDRESS, - [ - "function stake(uint256)", - "function withdrawRewards()", - "function withdrawStake(uint256)", - ], - signer, -); -``` - -Stake: - -```js -const amount = ethers.parseUnits(process.env.AMOUNT, Number(process.env.DECIMALS)); -const owner = await signer.getAddress(); -const allowance = await token.allowance(owner, process.env.STAKING_ADDRESS); -if (allowance < amount) { - const approveTx = await token.approve(process.env.STAKING_ADDRESS, amount); - await approveTx.wait(); -} -const tx = await staking.stake(amount); -const receipt = await tx.wait(); -console.log(JSON.stringify({ txHash: receipt.hash, action: "stake" }, null, 2)); -``` - -Withdraw rewards: - -```js -const tx = await staking.withdrawRewards(); -const receipt = await tx.wait(); -console.log(JSON.stringify({ txHash: receipt.hash, action: "withdrawRewards" }, null, 2)); -``` - -Withdraw stake: - -```js -const shares = ethers.parseUnits(process.env.SHARES, Number(process.env.DECIMALS)); -const tx = await staking.withdrawStake(shares); -const receipt = await tx.wait(); -console.log(JSON.stringify({ txHash: receipt.hash, action: "withdrawStake" }, null, 2)); -``` - -## Failure handling - -- Insufficient balance: report shortfall. -- Approval issues: report token, spender, and required allowance. -- Reverts: return attempted function and parameters without guessing custom errors. diff --git a/.agents/skills/gooddollar/references/guides/stream.md b/.agents/skills/gooddollar/references/guides/stream.md deleted file mode 100644 index 6cbf7a4..0000000 --- a/.agents/skills/gooddollar/references/guides/stream.md +++ /dev/null @@ -1,135 +0,0 @@ -# Stream guide - -Primary references for stream execution are local ABI assets in this repo: - -- `references/contracts/CFAv1Forwarder.abi.yaml` -- `references/contracts/ConstantFlowAgreementV1.abi.yaml` -- `references/contracts/Superfluid.abi.yaml` -- `references/contracts/SuperToken.abi.yaml` - -## Goal - -Create, update, or delete Superfluid constant flows using deterministic contract calls and local ABI references. - -## Protocol facts used by this guide - -- Forwarder path uses `CFAv1Forwarder.createFlow`, `updateFlow`, `deleteFlow`. -- Host path uses `Superfluid.callAgreement` with CFA calldata for `createFlow`, `updateFlow`, `deleteFlow`. -- Stream token is a SuperToken; flow rates are `int96` in token-wei per second. -- `getBufferAmountByFlowrate(token, flowRate)` is the canonical pre-check for required buffer. - -## Two implementation styles in this repo - -1. **Forwarder (matches GoodDocs):** call CFAv1Forwarder with token, sender, receiver, flowRate, userData. -2. **Host callAgreement:** encode CFA `createFlow` / `updateFlow` / `deleteFlow` and call `Superfluid.callAgreement`. - -## Minimal method map - -- Forwarder: - - `createFlow(address token, address receiver, int96 flowrate, bytes userData)` - - `updateFlow(address token, address receiver, int96 flowrate, bytes userData)` - - `deleteFlow(address token, address sender, address receiver, bytes userData)` - - `getBufferAmountByFlowrate(address token, int96 flowrate)` -- Host: - - `callAgreement(address agreementClass, bytes callData, bytes userData)` -- CFA: - - `createFlow(address token, address receiver, int96 flowRate, bytes ctx)` - - `updateFlow(address token, address receiver, int96 flowRate, bytes ctx)` - - `deleteFlow(address token, address sender, address receiver, bytes ctx)` - -## Required inputs - -- G$ Super Token address for the environment -- CFA forwarder address, or Superfluid host address plus CFA agreement address -- `action`: create, update, delete -- `receiver`, `flowRate` where applicable -- `rpcUrl`, chain configuration, signer - -## Deterministic snippet - -```js -import { ethers } from "ethers"; - -const provider = new ethers.JsonRpcProvider(process.env.RPC_URL); -const signer = new ethers.Wallet(process.env.PRIVATE_KEY, provider); - -const forwarder = new ethers.Contract( - process.env.CFA_FORWARDER, - [ - "function createFlow(address,address,int96,bytes)", - "function updateFlow(address,address,int96,bytes)", - "function deleteFlow(address,address,address,bytes)", - ], - signer, -); - -const token = process.env.SUPER_TOKEN; -const sender = await signer.getAddress(); -const receiver = process.env.RECEIVER; -const flowRate = BigInt(process.env.FLOW_RATE); - -if (process.env.ACTION === "create") { - const tx = await forwarder.createFlow(token, receiver, flowRate, "0x"); - const receipt = await tx.wait(); - console.log(JSON.stringify({ txHash: receipt.hash, action: "create" }, null, 2)); -} - -if (process.env.ACTION === "update") { - const tx = await forwarder.updateFlow(token, receiver, flowRate, "0x"); - const receipt = await tx.wait(); - console.log(JSON.stringify({ txHash: receipt.hash, action: "update" }, null, 2)); -} - -if (process.env.ACTION === "delete") { - const tx = await forwarder.deleteFlow(token, sender, receiver, "0x"); - const receipt = await tx.wait(); - console.log(JSON.stringify({ txHash: receipt.hash, action: "delete" }, null, 2)); -} -``` - -Host callAgreement example: - -```js -import { ethers } from "ethers"; - -const provider = new ethers.JsonRpcProvider(process.env.RPC_URL); -const signer = new ethers.Wallet(process.env.PRIVATE_KEY, provider); - -const cfa = new ethers.Interface([ - "function createFlow(address,address,int96,bytes)", - "function updateFlow(address,address,int96,bytes)", - "function deleteFlow(address,address,address,bytes)", -]); - -const host = new ethers.Contract( - process.env.SUPERFLUID_HOST, - ["function callAgreement(address,bytes,bytes) returns (bytes)"], - signer, -); - -const token = process.env.SUPER_TOKEN; -const sender = await signer.getAddress(); -const receiver = process.env.RECEIVER; -const flowRate = BigInt(process.env.FLOW_RATE); - -let callData = "0x"; -if (process.env.ACTION === "create") { - callData = cfa.encodeFunctionData("createFlow", [token, receiver, flowRate, "0x"]); -} -if (process.env.ACTION === "update") { - callData = cfa.encodeFunctionData("updateFlow", [token, receiver, flowRate, "0x"]); -} -if (process.env.ACTION === "delete") { - callData = cfa.encodeFunctionData("deleteFlow", [token, sender, receiver, "0x"]); -} - -const tx = await host.callAgreement(process.env.CFA_ADDRESS, callData, "0x"); -const receipt = await tx.wait(); -console.log(JSON.stringify({ txHash: receipt.hash, action: process.env.ACTION }, null, 2)); -``` - -## Failure handling - -- Wrong network or missing addresses: stop and return missing host or forwarder or token addresses. -- Insufficient buffer: use `getBufferAmountByFlowrate` and reduce flow rate or top up balance. -- Revert on create or update: verify token is a SuperToken and flowRate is positive. diff --git a/.agents/skills/gooddollar/references/guides/swap.md b/.agents/skills/gooddollar/references/guides/swap.md deleted file mode 100644 index 3db8c2d..0000000 --- a/.agents/skills/gooddollar/references/guides/swap.md +++ /dev/null @@ -1,83 +0,0 @@ -# Swap guide - -Use for buying or selling G$ through Mento-connected contracts on networks where they appear in [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) (for example `MentoBroker`, `MentoReserve`, `MentoExchangeProvider`, `MentoExpansionController` keys under `production-celo` or `production-xdc`). GoodDocs describes Mento product behavior, not deployment addresses. - -## GoodDocs alignment - -- Reserve and buy or sell mechanics at the protocol level: [How GoodDollar works](https://docs.gooddollar.org/how-gooddollar-works) and [Buy and Sell G$ user guide](https://docs.gooddollar.org/user-guides) (includes reserve AMM narrative; older explorer step-by-step for Ethereum testnets remains in that page for reference). -- Integration patterns and decimals: [How to integrate the G$ token](https://docs.gooddollar.org/for-developers/developer-guides/how-to-integrate-the-gusd-token). - -## Goal - -Execute bounded swaps using broker quotes and correct allowances. - -## Required inputs - -- `direction` as buy or sell -- broker and exchange identifiers for the deployment -- amounts in correct token decimals for the chain -- `rpcUrl`, chain configuration, signer - -## Execution flow - -1. Confirm Mento Broker (and related) addresses for the chain from [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) only. -2. Fetch quote (`getAmountOut` or `getAmountIn` depending on direction and ABI). -3. Apply slippage bounds. -4. Approve the spent token for the broker when required. -5. Call `swapIn` or `swapOut` per your integration. -6. Return tx hash and effective amounts. - -## Deterministic snippet - -```js -import { ethers } from "ethers"; - -const provider = new ethers.JsonRpcProvider(process.env.RPC_URL); -const signer = new ethers.Wallet(process.env.PRIVATE_KEY, provider); - -const broker = new ethers.Contract( - process.env.BROKER_ADDRESS, - [ - "function getAmountOut(address,address,uint256) view returns (uint256)", - "function swapIn(address,address,uint256,uint256) returns (uint256)", - ], - signer, -); - -const tokenIn = new ethers.Contract( - process.env.TOKEN_IN, - [ - "function allowance(address,address) view returns (uint256)", - "function approve(address,uint256) returns (bool)", - ], - signer, -); - -const amountIn = ethers.parseUnits(process.env.AMOUNT_IN, Number(process.env.DECIMALS_IN)); -const quotedOut = await broker.getAmountOut(process.env.TOKEN_IN, process.env.TOKEN_OUT, amountIn); -const slippageBps = BigInt(process.env.SLIPPAGE_BPS); -const minOut = quotedOut * (10000n - slippageBps) / 10000n; - -const owner = await signer.getAddress(); -const allowance = await tokenIn.allowance(owner, process.env.BROKER_ADDRESS); -if (allowance < amountIn) { - const approveTx = await tokenIn.approve(process.env.BROKER_ADDRESS, amountIn); - await approveTx.wait(); -} - -const tx = await broker.swapIn(process.env.TOKEN_IN, process.env.TOKEN_OUT, amountIn, minOut); -const receipt = await tx.wait(); -console.log( - JSON.stringify( - { txHash: receipt.hash, amountIn: amountIn.toString(), minOut: minOut.toString() }, - null, - 2, - ), -); -``` - -## Failure handling - -- No deployment on chain: direct the user to an environment that defines the needed keys in [deployment.json](https://github.com/GoodDollar/GoodProtocol/blob/master/releases/deployment.json) (for example `production-celo` with `MentoBroker`). -- Stale quote or tight slippage: refresh quote or relax bounds with user consent. -- Allowance or balance shortfall: report exact delta. diff --git a/.agents/skills/gooddollar/references/subgraphs/_query-patterns.md b/.agents/skills/gooddollar/references/subgraphs/_query-patterns.md deleted file mode 100644 index 36af639..0000000 --- a/.agents/skills/gooddollar/references/subgraphs/_query-patterns.md +++ /dev/null @@ -1,35 +0,0 @@ -# Subgraph query discipline (GoodDollar) - -## Subgraph vs RPC - -- **Subgraph:** historical events, lists, aggregates, time ranges, analytics. Data lags chain head. -- **RPC / SDK:** current balances, live `claim` eligibility, exact view calls. Prefer for user-facing “what is true right now”. - -## Generic GraphQL mechanics - -Graph-node generates `entity`, `entities`, `Entity_filter`, `Entity_orderBy`, pagination, and `_meta` from each deployment’s `schema.graphql`. For scalar rules, filters, `_meta`, and common pitfalls, see [The Graph — Querying a subgraph](https://thegraph.com/docs/en/querying/graphql-api/). - -## GoodDollar-specific - -- **Addresses in `where` clauses:** normalize to **lowercase** hex strings; subgraphs store addresses lowercased. -- **BigInt fields:** query as **string** literals in GraphQL JSON (e.g. `"1000000000000000000"`). -- **Schema truth:** entity names differ per deployment. Run introspection or read the deployment’s `schema.graphql` under the relevant package in [GoodDollar/GoodSubGraphs](https://github.com/GoodDollar/GoodSubGraphs) before assuming field names. - -## Meta block - -Use `_meta { block { number } }` to detect how far behind indexing is when debugging stale data. - -```graphql -{ - _meta { - block { - number - } - hasIndexingErrors - } -} -``` - -## When subgraphs are not enough - -If the subgraph cannot answer the question (missing entities or fields, or stale indexing per `_meta`), switch to the decision rules in `references/guides/hypersync-hyperrpc.md`. When **HyperSync** is the best fit and no Envio API token is available in the environment, **ask the user directly** for `ENVIO_API_TOKEN` (or the token your HyperSync client expects) before running large scans; do not silently use anonymous quota as a stand-in. diff --git a/.agents/skills/gooddollar/references/subgraphs/goodcollective-guide.md b/.agents/skills/gooddollar/references/subgraphs/goodcollective-guide.md deleted file mode 100644 index a266cea..0000000 --- a/.agents/skills/gooddollar/references/subgraphs/goodcollective-guide.md +++ /dev/null @@ -1,54 +0,0 @@ -# GoodCollective — Subgraph Usage Guide - -Companion to `goodcollective.graphql`. - -## Endpoint - -- Explorer: [GoodCollective](https://thegraph.com/explorer/subgraphs/3LbJh9DXhJVvuVDdm5i6StNboJmL9oMNNkBaKyzc4Y8Y?view=Query&chain=arbitrum-one) -- Gateway form: `https://gateway.thegraph.com/api/subgraphs/id/3LbJh9DXhJVvuVDdm5i6StNboJmL9oMNNkBaKyzc4Y8Y` - ---- - -## Terminology: “claim” here is not daily UBI - -In this subgraph, **Claim** and **ClaimEvent** refer to **GoodCollective reward or pool claim flows**, not the protocol’s **daily UBI claim** from `UBIScheme` / `UBISchemeV2`. - -When a user says **“claim”** in normal GoodDollar product language, they almost always mean **claim daily UBI**. For that, use the GoodDollar Celo subgraph (`walletStats` / claim-related aggregates) and on-chain `claim` per `references/guides/claim.md` — do not answer “last N UBI claims” from GoodCollective **Claim** alone. - ---- - -## Entity Overview - -### Core collective graph - -**Collective** — pool identity, limits/settings links, totals, and claim/payment counters. -**Donor** / **Steward** — participant-level donation/support state. -**DonorCollective** / **StewardCollective** — join entities tying participants to a collective. - -### Claim and support flow - -**Claim** and **ClaimEvent** — GoodCollective **reward** claim lifecycle and per-claim reward events (not daily UBI from UBIScheme). -**SupportEvent** — support/donation change events across donor/collective links. - -### Metadata and policy entities - -**IpfsCollective** — IPFS metadata projection. -**PoolSettings**, **UBILimits**, **SafetyLimits** — pool policy and operational bounds. -**ProvableNFT** — NFT linkage used in claim/reward flows. - ---- - -## Typical Questions This Subgraph Answers - -- Which donors/stewards are attached to a collective? -- How much was donated/rewarded per collective and per participant? -- Which claim events occurred and what reward quantities were emitted? -- What limits and settings govern a specific collective pool? - ---- - -## Query Discipline - -- Use authenticated gateway access for programmatic queries. -- Lowercase address-like identifiers where applicable. -- Validate `_meta` before operational dashboards or reporting exports. diff --git a/.agents/skills/gooddollar/references/subgraphs/goodcollective.graphql b/.agents/skills/gooddollar/references/subgraphs/goodcollective.graphql deleted file mode 100644 index e503db9..0000000 --- a/.agents/skills/gooddollar/references/subgraphs/goodcollective.graphql +++ /dev/null @@ -1,200 +0,0 @@ -scalar BigDecimal - -scalar BigInt - -scalar Boolean - -scalar Bytes - -type Claim { - id: String! - collective: Collective! - txHash: String! - networkFee: BigInt! - totalRewards: BigInt! - events: [ClaimEvent!]! - timestamp: Int! -} - -type ClaimEvent { - id: String! - eventType: Int! - timestamp: Int! - quantity: BigInt! - rewardPerContributor: BigInt! - contributors: [Steward!]! - nft: ProvableNFT - claim: Claim! -} - -type Collective { - id: String! - pooltype: PoolType! - ipfs: IpfsCollective - settings: PoolSettings! - ubiLimits: UBILimits - limits: SafetyLimits - donors: [DonorCollective!] - stewards: [StewardCollective!] - projectId: String! - isVerified: Boolean! - poolFactory: String! - timestamp: Int! - paymentsMade: Int! - totalDonations: BigInt! - totalRewards: BigInt! - claims: [Claim!]! -} - -type Donor { - id: String! - timestamp: Int! - totalDonated: BigInt! - collectives: [DonorCollective!]! -} - -""" -Represents the relationship between a Donor and a Collective - -""" - -type DonorCollective { - id: String! - donor: Donor! - collective: Collective! - contribution: BigInt! - flowRate: BigInt! - timestamp: Int! - events: [SupportEvent!]! -} - -scalar Float - -scalar ID - -""" -4 bytes signed integer - -""" - -scalar Int - -""" -8 bytes signed integer - -""" - -scalar Int8 - -type IpfsCollective { - id: String! - name: String! - description: String! - rewardDescription: String - goodidDescription: String - email: String - website: String - twitter: String - instagram: String - threads: String - infoLabel: String - headerImage: String! - logo: String! - images: [String!] -} - -type PoolSettings { - id: String! - nftType: BigInt! - manager: Bytes! - membersValidator: Bytes! - uniquenessValidator: Bytes! - rewardToken: Bytes! -} - -enum PoolType { - DirectPayments - UBI -} - -type ProvableNFT { - id: String! - owner: String! - hash: String! - stewards: [Steward!]! - collective: Collective -} - -type SafetyLimits { - id: String! - maxTotalPerMonth: BigInt! - maxMemberPerMonth: BigInt! - maxMemberPerDay: BigInt! -} - -type Steward { - """ - { user address} - - """ - id: String! - """ - Number of actions performed - - """ - actions: Int! - totalEarned: BigInt! - totalUBIEarned: BigInt! - """ - NFT's minted to steward - - """ - nfts: [ProvableNFT!]! - """ - Collectives the steward is apart of - - """ - collectives: [StewardCollective!]! -} - -""" -Represents the relationship between a Steward and a Collective - -""" - -type StewardCollective { - id: String! - steward: Steward! - collective: Collective! - actions: Int! - totalEarned: BigInt! -} - -scalar String - -type SupportEvent { - id: String! - networkFee: BigInt! - donor: Donor! - collective: Collective! - donorCollective: DonorCollective! - contribution: BigInt! - previousContribution: BigInt! - isFlowUpdate: Boolean! - flowRate: BigInt! - previousFlowRate: BigInt! - timestamp: Int! -} - -scalar Timestamp - -type UBILimits { - id: String! - cycleLengthDays: BigInt! - claimPeriodDays: BigInt! - minActiveUsers: BigInt! - claimForEnabled: Boolean! - maxClaimAmount: BigInt! - maxClaimers: BigInt! - onlyMembers: Boolean! -} diff --git a/.agents/skills/gooddollar/references/subgraphs/gooddollar-celo-guide.md b/.agents/skills/gooddollar/references/subgraphs/gooddollar-celo-guide.md deleted file mode 100644 index 347951f..0000000 --- a/.agents/skills/gooddollar/references/subgraphs/gooddollar-celo-guide.md +++ /dev/null @@ -1,104 +0,0 @@ -# GoodDollar Celo — Subgraph Usage Guide - -Companion to `gooddollar-celo.graphql`. - -## Endpoint - -- Explorer: [GoodDollarCelo](https://thegraph.com/explorer/subgraphs/F7314rxGdcpKPC1nN5KCoFW84EGRoUyzseY2sAT9PEkw?view=Query&chain=arbitrum-one) -- Gateway form: `https://gateway.thegraph.com/api/subgraphs/id/F7314rxGdcpKPC1nN5KCoFW84EGRoUyzseY2sAT9PEkw` - ---- - -## Entity Overview - -### UBI and usage statistics - -**DailyUBI** — day-level UBI pool/quota activity and cycle fields. -**WalletStat** — wallet behavior aggregates: tx counts/values, claim stats, active/whitelist indicators. -**TransactionStat** — day-level transaction totals and circulation view. -**GlobalStatistics** — global claim and distribution rollups. - -### Additional UBI history entities - -**UBICollected** — collected UBI/community-pool values by block event. -**UBIHistory** — timeline totals for daily UBI/community-pool. - ---- - -## Field Availability Reference (use before drafting queries) - -Use this section to validate what the subgraph already provides before switching data sources. - -### DailyUBI - -- `id` — day index key (`unix / 86400`) -- `pool` — UBI cycle pool for that day -- `quota` — daily UBI amount per eligible claimer -- `activeUsers` — active users count in scheme context -- `totalUBIDistributed` — amount actually claimed/distributed that day -- `totalClaims` — claim tx count for that day -- `newClaimers` — newly whitelisted users for that day -- `timestamp` — last update timestamp for the record -- `ubiSchemeAddress` — UBIScheme address used for the record -- `balance` — G$ balance held by UBIScheme -- `cycleLength` — current cycle length -- `dayInCycle` — current day position inside cycle - -### WalletStat - -- `id` — wallet address -- `dateAppeared` — first indexed wallet activity timestamp -- `balance` — running token balance from transfers -- `inTransactionsCount`, `inTransactionsValue` — incoming tx count and value -- `outTransactionsCount`, `outTransactionsValue` — outgoing tx count and value -- `totalTransactionsCount`, `totalTransactionsValue` — total tx count and value -- `inTransactionsCountClean`, `inTransactionsValueClean` — incoming metrics excluding contract-address flows -- `outTransactionsCountClean`, `outTransactionsValueClean` — outgoing metrics excluding contract-address flows -- `totalTransactionsCountClean`, `totalTransactionsValueClean` — total clean traffic metrics -- `lastClaimed` — timestamp of latest UBI claim -- `totalClaimedCount`, `totalClaimedValue` — total claims and cumulative claimed value -- `claimStreak`, `longestClaimStreak` — current and best historical streaks -- `isWhitelisted` — current whitelist status -- `isActiveUser` — current active-user status -- `dateJoined` — first-whitelist timestamp -- `lastTransactionFrom`, `lastTransactionTo` — latest outgoing and incoming tx timestamps - -### TransactionStat - -- `id` — bucket key (day key or `"aggregated"`) -- `dayStartBlockNumber` — first block in bucket -- `transactionsCount`, `transactionsValue` — all transfer tx count and value -- `transactionsCountClean`, `transactionsValueClean` — transfer metrics excluding contract-address flows -- `totalInCirculation` — inferred circulating supply from mint or burn behavior - -### GlobalStatistics - -- `id` — fixed key (`"statistics"`) -- `TransactionStat` — link to aggregated transaction stats -- `totalUBIDistributed` — lifetime distributed UBI -- `uniqueClaimers` — tracked unique claimers via whitelist add or remove -- `totalClaims` — lifetime UBI claim events - -### Explorer naming - -- Singular names (`dailyUBI`, `walletStat`) fetch by `id` -- Plural names (`dailyUBIs`, `walletStats`) query lists with filters and pagination - ---- - -## Typical Questions This Subgraph Answers - -- How much UBI was distributed on a day/cycle? -- Which wallets are active or recently claiming? -- What are aggregate tx/circulation trends? -- How did collected UBI/community-pool values evolve over time? - ---- - -## Query Discipline - -- Use lowercase address strings in filters. -- Use string-safe handling for large integer values. -- Use `_meta` to validate freshness before cross-day analytics. -- Use authenticated gateway access for programmatic queries. -- Before claiming a field or entity is missing, verify availability from this guide and schema first. diff --git a/.agents/skills/gooddollar/references/subgraphs/gooddollar-celo.graphql b/.agents/skills/gooddollar/references/subgraphs/gooddollar-celo.graphql deleted file mode 100644 index e544a0d..0000000 --- a/.agents/skills/gooddollar/references/subgraphs/gooddollar-celo.graphql +++ /dev/null @@ -1,113 +0,0 @@ -scalar BigDecimal - -scalar BigInt - -scalar Boolean - -scalar Bytes - -type DailyUBI { - id: ID! - pool: BigInt! - quota: BigInt! - activeUsers: BigInt! - totalUBIDistributed: BigInt! - totalClaims: BigInt! - newClaimers: BigInt! - timestamp: BigInt! - ubiSchemeAddress: Bytes - balance: BigInt! - cycleLength: BigInt! - dayInCycle: BigInt! -} - -scalar Float - -type GlobalStatistics { - id: ID! - TransactionStat: TransactionStat - totalUBIDistributed: BigInt! - uniqueClaimers: BigInt! - totalClaims: BigInt! -} - -scalar ID - -""" -4 bytes signed integer -""" - -scalar Int - -""" -8 bytes signed integer -""" - -scalar Int8 - -""" -Defines the order direction, either ascending or descending -""" - -scalar String - -""" -A string representation of microseconds UNIX timestamp (16 digits) -""" - -scalar Timestamp - -type TransactionStat { - id: ID! - dayStartBlockNumber: BigInt! - transactionsCount: BigInt! - transactionsCountClean: BigInt! - transactionsValue: BigInt! - transactionsValueClean: BigInt! - totalInCirculation: BigInt! -} - -type UBICollected { - id: ID! - contract: Bytes - block: BigInt! - blockTimestamp: BigInt! - ubi: BigDecimal! - communityPool: BigDecimal! -} - -type UBIHistory { - id: ID! - block: BigInt! - blockTimestamp: BigInt! - totalDailyUBI: BigDecimal! - totalDailyCommunityPool: BigDecimal! -} - -type WalletStat { - id: ID! - dateAppeared: BigInt! - balance: BigInt! - inTransactionsCount: BigInt! - inTransactionsCountClean: BigInt! - inTransactionsValue: BigInt! - inTransactionsValueClean: BigInt! - outTransactionsCount: BigInt! - outTransactionsCountClean: BigInt! - outTransactionsValue: BigInt! - outTransactionsValueClean: BigInt! - totalTransactionsCount: BigInt! - totalTransactionsCountClean: BigInt! - totalTransactionsValue: BigInt! - totalTransactionsValueClean: BigInt! - lastClaimed: BigInt! - totalClaimedCount: BigInt! - totalClaimedValue: BigInt! - claimStreak: BigInt! - longestClaimStreak: BigInt! - isWhitelisted: Boolean! - isActiveUser: Boolean! - dateJoined: BigInt! - lastTransactionFrom: BigInt! - lastTransactionTo: BigInt! -} diff --git a/.agents/skills/gooddollar/references/subgraphs/reserve-celo-guide.md b/.agents/skills/gooddollar/references/subgraphs/reserve-celo-guide.md deleted file mode 100644 index 9f55b73..0000000 --- a/.agents/skills/gooddollar/references/subgraphs/reserve-celo-guide.md +++ /dev/null @@ -1,41 +0,0 @@ -# Reserve Celo — Subgraph Usage Guide - -Companion to `reserve-celo.graphql`. This guide is for reserve pricing and broker swap indexing on Celo. - -## Endpoint - -- Goldsky: `https://api.goldsky.com/api/public/project_cmizuamdtfouu01x4csuk5dk1/subgraphs/reserve_celo/1.0/gn` - ---- - -## Entity Overview - -### Core entity - -**ReservePrice** — one indexed reserve pricing point produced from broker swap flow plus exchange-provider price read. -Key fields: `exchangeId`, `exchangeProvider`, `price`, `timestamp`, `day`, `tokenIn`, `tokenOut`, `amountIn`, `amountOut`, `user`, `blockNumber`, `transactionHash`. - ---- - -## Typical Questions This Subgraph Answers - -- What are the most recent reserve prices? -- What was the reserve price on a specific day window? -- Which token pair and user triggered a pricing point? -- Which tx hash/block produced a given price point? - ---- - -## Query Discipline - -- Lowercase all address values in filters. -- Use string values for large integer variables. -- Use `_meta` before analytics queries when stale indexing is suspected. - ---- - -## Practical Start - -1. Check `_meta` block height and `hasIndexingErrors`. -2. Pull latest `ReservePrice` records sorted by `timestamp desc`. -3. Add `day`-based narrowing for historical windows. diff --git a/.agents/skills/gooddollar/references/subgraphs/reserve-celo.graphql b/.agents/skills/gooddollar/references/subgraphs/reserve-celo.graphql deleted file mode 100644 index 56cac37..0000000 --- a/.agents/skills/gooddollar/references/subgraphs/reserve-celo.graphql +++ /dev/null @@ -1,90 +0,0 @@ -scalar BigDecimal - -scalar BigInt - -scalar Boolean - -scalar Bytes - -scalar Float - -scalar ID - -""" -4 bytes signed integer -""" - -scalar Int - -""" -8 bytes signed integer -""" - -scalar Int8 - -""" -Defines the order direction, either ascending or descending -""" - -type ReservePrice { - """ - Exchange ID combined with timestamp - """ - id: ID! - """ - The exchange ID from the Swap event - """ - exchangeId: Bytes! - """ - The exchange provider address - """ - exchangeProvider: Bytes! - """ - The current price from IBancorExchangeProvider.currentPrice() - """ - price: BigInt! - """ - Transaction timestamp - """ - timestamp: BigInt! - """ - Day ID (timestamp / 86400) - """ - day: BigInt! - """ - Token in address from the swap - """ - tokenIn: Bytes! - """ - Token out address from the swap - """ - tokenOut: Bytes! - """ - Amount in from the swap - """ - amountIn: BigInt! - """ - Amount out from the swap - """ - amountOut: BigInt! - """ - User who initiated the swap - """ - user: Bytes! - """ - Block number - """ - blockNumber: BigInt! - """ - Transaction hash - """ - transactionHash: Bytes! -} - -scalar String - -""" -A string representation of microseconds UNIX timestamp (16 digits) -""" - -scalar Timestamp From c3c6b091ebd1b1880f9bdfd9176376664ca71ba6 Mon Sep 17 00:00:00 2001 From: HushLuxe Date: Wed, 17 Jun 2026 18:16:36 +0100 Subject: [PATCH 07/13] refactor(governance-widget): split onboarding widget into focused files The widget entry had grown to 870 lines mixing layout, validation, copy, and step rendering. Move the per-step views and helpers under src/onboarding/ and leave only PageWizardProvider wiring in GovernanceOnboardingWidget. GovernanceWizardData moves to types.ts so the provider and the flow cannot drift on the data shape. --- .../src/GovernanceOnboardingWidget.tsx | 819 +----------------- packages/governance-widget/src/index.ts | 1 + .../onboarding/GovernanceOnboardingFlow.tsx | 193 +++++ .../src/onboarding/HouseSelectionCard.tsx | 82 ++ .../src/onboarding/OnboardingNotice.tsx | 56 ++ .../src/onboarding/ProfileField.tsx | 36 + .../src/onboarding/ProfileTextAreaField.tsx | 58 ++ .../src/onboarding/constants.ts | 46 + .../governance-widget/src/onboarding/copy.ts | 20 + .../src/onboarding/resolveStakeSummary.ts | 52 ++ .../src/onboarding/steps/HouseStepContent.tsx | 42 + .../onboarding/steps/ProfileStepContent.tsx | 118 +++ .../src/onboarding/steps/StakeStepContent.tsx | 44 + .../onboarding/steps/SuccessStepContent.tsx | 53 ++ .../onboarding/steps/WelcomeStepContent.tsx | 34 + .../src/onboarding/validation.ts | 49 ++ packages/governance-widget/src/types.ts | 5 + 17 files changed, 894 insertions(+), 814 deletions(-) create mode 100644 packages/governance-widget/src/onboarding/GovernanceOnboardingFlow.tsx create mode 100644 packages/governance-widget/src/onboarding/HouseSelectionCard.tsx create mode 100644 packages/governance-widget/src/onboarding/OnboardingNotice.tsx create mode 100644 packages/governance-widget/src/onboarding/ProfileField.tsx create mode 100644 packages/governance-widget/src/onboarding/ProfileTextAreaField.tsx create mode 100644 packages/governance-widget/src/onboarding/constants.ts create mode 100644 packages/governance-widget/src/onboarding/copy.ts create mode 100644 packages/governance-widget/src/onboarding/resolveStakeSummary.ts create mode 100644 packages/governance-widget/src/onboarding/steps/HouseStepContent.tsx create mode 100644 packages/governance-widget/src/onboarding/steps/ProfileStepContent.tsx create mode 100644 packages/governance-widget/src/onboarding/steps/StakeStepContent.tsx create mode 100644 packages/governance-widget/src/onboarding/steps/SuccessStepContent.tsx create mode 100644 packages/governance-widget/src/onboarding/steps/WelcomeStepContent.tsx create mode 100644 packages/governance-widget/src/onboarding/validation.ts diff --git a/packages/governance-widget/src/GovernanceOnboardingWidget.tsx b/packages/governance-widget/src/GovernanceOnboardingWidget.tsx index 27cdb78..69ccdaa 100644 --- a/packages/governance-widget/src/GovernanceOnboardingWidget.tsx +++ b/packages/governance-widget/src/GovernanceOnboardingWidget.tsx @@ -1,822 +1,13 @@ -import React, { useMemo, useState } from 'react' -import { Stack, styled } from 'tamagui' -import { - Badge, - BadgeText, - Button, - ButtonText, - Card, - createComponent, - Heading, - Icon, - InputError, - InputFrame, - InputLabel, - PageWizardProvider, - PageWizardShell, - Stepper, - Text, - XStack, - YStack, - usePageWizard, - type PageWizardStep, - type StepperStepItem, -} from '@goodwidget/ui' +import React, { useMemo } from 'react' +import { PageWizardProvider } from '@goodwidget/ui' +import { GovernanceOnboardingFlow } from './onboarding/GovernanceOnboardingFlow' +import { DEFAULT_FINAL_ACTIONS, DEFAULT_TRANSACTION_STEPS, ONBOARDING_STEPS } from './onboarding/constants' import type { - GovernanceHouse, - GovernanceIdentityStatus, - GovernanceOnboardingAction, GovernanceOnboardingStepId, GovernanceOnboardingWidgetProps, - GovernanceProfileDraft, - GovernanceProfileFieldErrors, - GovernanceProfileFieldKey, + GovernanceWizardData, } from './types' -const ONBOARDING_STEPS: PageWizardStep[] = [ - { id: 'welcome', title: 'Welcome' }, - { id: 'house', title: 'House' }, - { id: 'profile', title: 'Profile' }, - { id: 'stake', title: 'Stake' }, - { id: 'success', title: 'Complete' }, -] - -const REQUIRED_PROFILE_FIELDS: Record = { - citizenship: ['name', 'socialLinks'], - alignment: ['name', 'projectWebpage', 'missionStatement', 'distributionStrategy'], -} - -const DEFAULT_TRANSACTION_STEPS: StepperStepItem[] = [ - { - id: 'prepare', - title: 'Prepare wallet balance', - description: 'Keep the required G$ amount available before the staking transaction starts.', - status: 'completed', - }, - { - id: 'approve', - title: 'Approve governance stake', - description: 'Waiting for the wallet confirmation that authorizes the G$ stake amount.', - status: 'active', - }, - { - id: 'stake', - title: 'Lock the membership stake', - status: 'pending', - }, - { - id: 'finalize', - title: 'Finalize governance access', - status: 'pending', - }, -] - -const DEFAULT_FINAL_ACTIONS: GovernanceOnboardingAction[] = [ - { id: 'dashboard', label: 'Open governance dashboard', variant: 'primary' }, - { id: 'members', label: 'View member guide', variant: 'secondary' }, -] - -const HOUSE_COPY: Record< - GovernanceHouse, - { - title: string - summary: string - helper: string - } -> = { - citizenship: { - title: 'House of Citizenship', - summary: 'Represent verified community members and highlight your public governance identity.', - helper: 'Collect the profile details that describe the member behind the wallet.', - }, - alignment: { - title: 'House of Alignment', - summary: 'Coordinate aligned projects and explain how your mission creates value for the network.', - helper: 'Collect project-facing metadata that can later map to the onchain registration shape.', - }, -} - -const HouseOptionButton = createComponent(Stack, { - name: 'GovernanceHouseOptionButton', - tag: 'button', - alignItems: 'flex-start', - justifyContent: 'flex-start', - width: '100%', - borderRadius: '$4', - borderWidth: 1, - borderColor: '$borderColor', - backgroundColor: '$background', - padding: '$4', - gap: '$3', - cursor: 'pointer', - hoverStyle: { - borderColor: '$borderColorFocus', - backgroundColor: '$backgroundHover', - }, - pressStyle: { - borderColor: '$borderColorFocus', - backgroundColor: '$backgroundPress', - }, - variants: { - selected: { - true: { - borderColor: '$borderColorFocus', - backgroundColor: '$backgroundHover', - }, - }, - disabled: { - true: { - opacity: 0.5, - cursor: 'not-allowed', - pointerEvents: 'none', - }, - }, - } as const, -}) - -const ProfileTextArea = createComponent(Stack, { - name: 'GovernanceOnboardingTextArea', - tag: 'textarea', - backgroundColor: '$background', - borderRadius: '$2', - borderWidth: 1, - borderColor: '$borderColor', - paddingHorizontal: '$3', - paddingVertical: '$3', - minHeight: 112, - color: '$color', - fontFamily: '$body', - fontSize: '$3', - lineHeight: '$4', - outlineWidth: 0, - resize: 'vertical' as const, - hoverStyle: { - borderColor: '$borderColorHover', - }, - focusStyle: { - borderColor: '$borderColorFocus', - shadowColor: '$shadowColorFocus', - shadowRadius: 4, - shadowOpacity: 1, - }, - variants: { - error: { - true: { - borderColor: '$error', - }, - }, - } as const, -}) - -const SuccessGlyph = styled(YStack, { - name: 'GovernanceOnboardingSuccessGlyph', - width: 64, - height: 64, - borderRadius: '$full', - alignItems: 'center', - justifyContent: 'center', - backgroundColor: '$successMuted', -}) - -interface GovernanceWizardData extends Record { - selectedHouse?: GovernanceHouse - profileDraft: GovernanceProfileDraft -} - -function createRequiredFieldLabel(fieldKey: GovernanceProfileFieldKey): string { - switch (fieldKey) { - case 'name': - return 'Name is required' - case 'socialLinks': - return 'Social links are required' - case 'projectWebpage': - return 'Project webpage is required' - case 'missionStatement': - return 'Mission statement is required' - case 'distributionStrategy': - return 'Distribution strategy is required' - default: - return 'This field is required' - } -} - -function validateProfileDraft( - selectedHouse: GovernanceHouse, - profileDraft: GovernanceProfileDraft, -): GovernanceProfileFieldErrors { - return REQUIRED_PROFILE_FIELDS[selectedHouse].reduce((errors, fieldKey) => { - const fieldValue = profileDraft[fieldKey]?.trim() - if (!fieldValue) { - errors[fieldKey] = createRequiredFieldLabel(fieldKey) - } - return errors - }, {}) -} - -function isProfileDraftComplete( - selectedHouse: GovernanceHouse, - profileDraft: GovernanceProfileDraft, - fieldErrors: GovernanceProfileFieldErrors, -): boolean { - const validationErrors = validateProfileDraft(selectedHouse, profileDraft) - return Object.keys(validationErrors).length === 0 && Object.keys(fieldErrors).length === 0 -} - -function resolveStakeSummary(transactionSteps: StepperStepItem[]): { - title: string - badgeType: 'info' | 'warning' | 'success' - description: string -} { - const failedStep = transactionSteps.find((step) => step.status === 'failed' || step.status === 'attention') - if (failedStep) { - return { - title: 'Action required', - badgeType: 'warning', - description: failedStep.description ?? 'A stake transaction needs attention before governance onboarding can finish.', - } - } - - const activeStep = transactionSteps.find((step) => step.status === 'active') - if (activeStep) { - return { - title: 'Transaction in progress', - badgeType: 'info', - description: activeStep.description ?? 'The next governance transaction is currently waiting for confirmation.', - } - } - - return { - title: 'Stake confirmed', - badgeType: 'success', - description: 'All presentational transaction states are completed and the member can move to the final success state.', - } -} - -function renderButtonLabel(label: string) { - return {label} -} - -function OnboardingNotice({ - badgeLabel, - badgeType, - title, - description, - iconName, -}: { - badgeLabel: string - badgeType: 'info' | 'warning' | 'success' - title: string - description: string - iconName: 'info' | 'check' | 'alert-triangle' -}) { - return ( - - - - - - - - {badgeLabel} - - - {title} - {description} - - - - - ) -} - -function HouseSelectionCard({ - house, - isSelected, - isDisabled, - onPress, -}: { - house: GovernanceHouse - isSelected: boolean - isDisabled: boolean - onPress: () => void -}) { - const houseCopy = HOUSE_COPY[house] - - return ( - - - - {isSelected ? 'Selected' : 'Choose house'} - - - - - {houseCopy.title} - {houseCopy.summary} - - {houseCopy.helper} - - ) -} - -function ProfileField({ - label, - placeholder, - value, - helperText, - errorMessage, - onChangeText, -}: { - label: string - placeholder: string - value?: string - helperText?: string - errorMessage?: string - onChangeText: (nextValue: string) => void -}) { - return ( - - {label} - ) => { - onChangeText(event.currentTarget.value) - }} - /> - {errorMessage ? {errorMessage} : null} - {helperText ? {helperText} : null} - - ) -} - -function ProfileTextAreaField({ - label, - placeholder, - value, - helperText, - errorMessage, - onChangeText, -}: { - label: string - placeholder: string - value?: string - helperText?: string - errorMessage?: string - onChangeText: (nextValue: string) => void -}) { - return ( - - {label} - ) => { - onChangeText(event.currentTarget.value) - }} - /> - {helperText ? {helperText} : null} - {errorMessage ? {errorMessage} : null} - - ) -} - -function WelcomeStepContent({ - identityStatus, -}: { - identityStatus: GovernanceIdentityStatus -}) { - const isVerified = identityStatus === 'verified' - - return ( - - - - This onboarding flow stays UI-only for now, so it mirrors the future governance membership journey without sending any transactions. - - - - - ) -} - -function HouseStepContent({ - selectedHouse, - disabledHouseOptions, - onHouseSelect, -}: { - selectedHouse?: GovernanceHouse - disabledHouseOptions: GovernanceHouse[] - onHouseSelect: (nextHouse: GovernanceHouse) => void -}) { - return ( - - - - Select the governance house that should receive your onboarding profile and stake commitment. - - - onHouseSelect('citizenship')} - /> - onHouseSelect('alignment')} - /> - - - - ) -} - -function ProfileStepContent({ - selectedHouse, - profileDraft, - fieldErrors, - stakeAmountLabel, - onProfileFieldChange, -}: { - selectedHouse: GovernanceHouse - profileDraft: GovernanceProfileDraft - fieldErrors: GovernanceProfileFieldErrors - stakeAmountLabel: string - onProfileFieldChange: (fieldKey: GovernanceProfileFieldKey, nextValue: string) => void -}) { - const isReadyToContinue = isProfileDraftComplete(selectedHouse, profileDraft, fieldErrors) - const isPristine = Object.values(profileDraft).every((fieldValue) => !fieldValue) - const statusBadgeLabel = isReadyToContinue - ? 'Ready to continue' - : Object.keys(fieldErrors).length > 0 - ? 'Validation needed' - : isPristine - ? 'Profile empty' - : 'Editing profile' - - return ( - - - - 0 ? 'warning' : 'info'}> - {statusBadgeLabel} - - - {stakeAmountLabel} stake required - - - - - {HOUSE_COPY[selectedHouse].title} profile - {HOUSE_COPY[selectedHouse].helper} - - - - - - onProfileFieldChange('name', nextValue)} - /> - - {selectedHouse === 'citizenship' ? ( - onProfileFieldChange('socialLinks', nextValue)} - /> - ) : ( - <> - onProfileFieldChange('projectWebpage', nextValue)} - /> - onProfileFieldChange('missionStatement', nextValue)} - /> - onProfileFieldChange('distributionStrategy', nextValue)} - /> - - )} - - - - ) -} - -function StakeStepContent({ - stakeAmountLabel, - transactionSteps, -}: { - stakeAmountLabel: string - transactionSteps: StepperStepItem[] -}) { - const stakeSummary = resolveStakeSummary(transactionSteps) - - return ( - - - - - {stakeAmountLabel} locked stake - - - {stakeSummary.title} - - - - - This screen stays presentational today, but the step statuses already match the future runtime states for pending, active, completed, and failed stake transitions. - - - - Stake progress tracker - {stakeSummary.description} - - } - maxHeight={320} - /> - - - ) -} - -function SuccessStepContent({ - finalActions, - onFinalActionPress, -}: { - finalActions: GovernanceOnboardingAction[] - onFinalActionPress?: (actionId: string) => void -}) { - return ( - - - - - - - - Governance onboarding complete - - The final success state keeps the celebratory confirmation compact while still leaving room for one or more post-onboarding redirects. - - - - {finalActions.map((action) => ( - - ))} - - - - - ) -} - -function GovernanceOnboardingFlow({ - identityStatus, - disabledHouseOptions, - initialFieldErrors, - stakeAmountLabel, - transactionSteps, - finalActions, - onVerifyIdentity, - onFinalActionPress, - dataTestId, -}: { - identityStatus: GovernanceIdentityStatus - disabledHouseOptions: GovernanceHouse[] - initialFieldErrors: GovernanceProfileFieldErrors - stakeAmountLabel: string - transactionSteps: StepperStepItem[] - finalActions: GovernanceOnboardingAction[] - onVerifyIdentity?: () => void - onFinalActionPress?: (actionId: string) => void - dataTestId?: string -}) { - const { currentStep, data, setData, next, back, isFirst, currentIndex } = usePageWizard() - const [fieldErrors, setFieldErrors] = useState(initialFieldErrors) - - const wizardData = data as GovernanceWizardData - const selectedHouse = wizardData.selectedHouse - const profileDraft = wizardData.profileDraft ?? {} - const resolvedHouse = selectedHouse ?? 'citizenship' - const isIdentityVerified = identityStatus === 'verified' - const isProfileReady = isProfileDraftComplete(resolvedHouse, profileDraft, fieldErrors) - - const updateProfileField = (fieldKey: GovernanceProfileFieldKey, nextValue: string) => { - setData({ - profileDraft: { - ...profileDraft, - [fieldKey]: nextValue, - }, - }) - - setFieldErrors((previousErrors) => { - const nextErrors = { ...previousErrors } - delete nextErrors[fieldKey] - return nextErrors - }) - } - - const handleProfileContinue = () => { - const nextFieldErrors = validateProfileDraft(resolvedHouse, profileDraft) - setFieldErrors(nextFieldErrors) - - if (Object.keys(nextFieldErrors).length === 0) { - next() - } - } - - const handleHouseSelect = (nextHouse: GovernanceHouse) => { - setData({ selectedHouse: nextHouse }) - } - - let shellTitle = 'Governance onboarding' - let shellDescription = 'Move through the five-step UI flow before the runtime integration is wired.' - let shellContent: React.ReactNode = null - let shellFooter: React.ReactNode = null - - switch (currentStep?.id as GovernanceOnboardingStepId | undefined) { - case 'welcome': - default: - shellTitle = 'Join GoodDollar governance' - shellDescription = 'Start with identity status, then move through house selection, profile setup, staking progress, and success.' - shellContent = - shellFooter = ( - - - - - ) - break - - case 'house': - shellTitle = 'Select your governance house' - shellDescription = 'Choose the house that should own the profile and membership stake shown in later steps.' - shellContent = ( - - ) - shellFooter = ( - - - - - ) - break - - case 'profile': - shellTitle = `Complete the ${HOUSE_COPY[resolvedHouse].title} profile` - shellDescription = 'Keep the form readable in light and dark themes while collecting the stake-aware metadata required by the selected house.' - shellContent = ( - - ) - shellFooter = ( - - - - - ) - break - - case 'stake': - shellTitle = 'Track the membership stake journey' - shellDescription = 'Present the transaction tracker so a future runtime can drive its step statuses without changing the screen structure.' - shellContent = ( - - ) - shellFooter = ( - - - - - ) - break - - case 'success': - shellTitle = 'Membership onboarding completed' - shellDescription = 'Leave the screen ready for one or more redirect actions after a successful governance onboarding flow.' - shellContent = ( - - ) - shellFooter = ( - - Step {currentIndex + 1} of {ONBOARDING_STEPS.length} - - ) - break - } - - return ( - - {shellContent} - - ) -} - /** * GovernanceOnboardingWidget keeps the five onboarding pages UI-only for now. * The component owns light/dark-safe visuals, simple local navigation, and a diff --git a/packages/governance-widget/src/index.ts b/packages/governance-widget/src/index.ts index 128f4f1..c09acd0 100644 --- a/packages/governance-widget/src/index.ts +++ b/packages/governance-widget/src/index.ts @@ -8,6 +8,7 @@ export type { GovernanceProfileDraft, GovernanceProfileFieldErrors, GovernanceProfileFieldKey, + GovernanceWizardData, } from './types' export { ImpactCard, diff --git a/packages/governance-widget/src/onboarding/GovernanceOnboardingFlow.tsx b/packages/governance-widget/src/onboarding/GovernanceOnboardingFlow.tsx new file mode 100644 index 0000000..52bf90f --- /dev/null +++ b/packages/governance-widget/src/onboarding/GovernanceOnboardingFlow.tsx @@ -0,0 +1,193 @@ +import React, { useState } from 'react' +import { Button, ButtonText, PageWizardShell, XStack, usePageWizard } from '@goodwidget/ui' +import { HOUSE_COPY } from './copy' +import { DEFAULT_TRANSACTION_STEPS, DEFAULT_FINAL_ACTIONS } from './constants' +import { isProfileDraftComplete, validateProfileDraft } from './validation' +import { WelcomeStepContent } from './steps/WelcomeStepContent' +import { HouseStepContent } from './steps/HouseStepContent' +import { ProfileStepContent } from './steps/ProfileStepContent' +import { StakeStepContent } from './steps/StakeStepContent' +import { SuccessStepContent } from './steps/SuccessStepContent' +import type { + GovernanceHouse, + GovernanceIdentityStatus, + GovernanceOnboardingAction, + GovernanceOnboardingStepId, + GovernanceProfileFieldErrors, + GovernanceProfileFieldKey, + GovernanceWizardData, +} from '../types' +import type { StepperStepItem } from '@goodwidget/ui' + +interface GovernanceOnboardingFlowProps { + identityStatus: GovernanceIdentityStatus + disabledHouseOptions: GovernanceHouse[] + initialFieldErrors: GovernanceProfileFieldErrors + stakeAmountLabel: string + transactionSteps: StepperStepItem[] + finalActions: GovernanceOnboardingAction[] + onVerifyIdentity?: () => void + onFinalActionPress?: (actionId: string) => void + dataTestId?: string +} + +export function GovernanceOnboardingFlow({ + identityStatus, + disabledHouseOptions, + initialFieldErrors, + stakeAmountLabel, + transactionSteps = DEFAULT_TRANSACTION_STEPS, + finalActions = DEFAULT_FINAL_ACTIONS, + onVerifyIdentity, + onFinalActionPress, + dataTestId, +}: GovernanceOnboardingFlowProps) { + const { currentStep, data, setData, next, back, isFirst } = usePageWizard() + const [fieldErrors, setFieldErrors] = useState(initialFieldErrors) + + const wizardData = data as GovernanceWizardData + const selectedHouse = wizardData.selectedHouse + const profileDraft = wizardData.profileDraft ?? {} + const resolvedHouse: GovernanceHouse = selectedHouse ?? 'citizenship' + const isIdentityVerified = identityStatus === 'verified' + const isProfileReady = isProfileDraftComplete(resolvedHouse, profileDraft, fieldErrors) + + const updateProfileField = (fieldKey: GovernanceProfileFieldKey, nextValue: string) => { + setData((previousData) => { + const previousDraft = + (previousData as GovernanceWizardData).profileDraft ?? {} + return { + profileDraft: { + ...previousDraft, + [fieldKey]: nextValue, + }, + } + }) + + setFieldErrors((previousErrors) => { + const nextErrors = { ...previousErrors } + delete nextErrors[fieldKey] + return nextErrors + }) + } + + const handleProfileContinue = () => { + const nextFieldErrors = validateProfileDraft(resolvedHouse, profileDraft) + setFieldErrors(nextFieldErrors) + + if (Object.keys(nextFieldErrors).length === 0) { + next() + } + } + + const handleHouseSelect = (nextHouse: GovernanceHouse) => { + setData({ selectedHouse: nextHouse }) + } + + let shellTitle = 'Governance onboarding' + let shellDescription = 'Move through the five-step UI flow before the runtime integration is wired.' + let shellContent: React.ReactNode = null + let shellFooter: React.ReactNode = null + + switch (currentStep?.id as GovernanceOnboardingStepId | undefined) { + case 'welcome': + default: + shellTitle = 'Join GoodDollar governance' + shellDescription = + 'Start with identity status, then move through house selection, profile setup, staking progress, and success.' + shellContent = + shellFooter = ( + + + + + ) + break + + case 'house': + shellTitle = 'Select your governance house' + shellDescription = 'Choose the house that should own the profile and membership stake shown in later steps.' + shellContent = ( + + ) + shellFooter = ( + + + + + ) + break + + case 'profile': + shellTitle = `Complete the ${HOUSE_COPY[resolvedHouse].title} profile` + shellDescription = + 'Keep the form readable in light and dark themes while collecting the stake-aware metadata required by the selected house.' + shellContent = ( + + ) + shellFooter = ( + + + + + ) + break + + case 'stake': + shellTitle = 'Track the membership stake journey' + shellDescription = + 'Present the transaction tracker so a future runtime can drive its step statuses without changing the screen structure.' + shellContent = ( + + ) + shellFooter = ( + + + + + ) + break + + case 'success': + shellTitle = 'Membership onboarding completed' + shellDescription = + 'Leave the screen ready for one or more redirect actions after a successful governance onboarding flow.' + shellContent = ( + + ) + shellFooter = null + break + } + + return ( + + {shellContent} + + ) +} diff --git a/packages/governance-widget/src/onboarding/HouseSelectionCard.tsx b/packages/governance-widget/src/onboarding/HouseSelectionCard.tsx new file mode 100644 index 0000000..6eb5b7c --- /dev/null +++ b/packages/governance-widget/src/onboarding/HouseSelectionCard.tsx @@ -0,0 +1,82 @@ +import React from 'react' +import { Stack, styled } from 'tamagui' +import { Badge, BadgeText, Heading, Icon, Text, XStack, YStack } from '@goodwidget/ui' +import { HOUSE_COPY } from './copy' +import type { GovernanceHouse } from '../types' + +/** + * Internal house-selection button. Uses Tamagui's `styled()` directly (not + * `createComponent`) because this is governance-specific UI, not a reusable + * design-system primitive. Registering a `name` here would pollute the public + * `@goodwidget/ui` manifest namespace with widget-internal components. + */ +const HouseOptionButton = styled(Stack, { + tag: 'button', + alignItems: 'flex-start', + justifyContent: 'flex-start', + width: '100%', + borderRadius: '$4', + borderWidth: 1, + borderColor: '$borderColor', + backgroundColor: '$background', + padding: '$4', + gap: '$3', + cursor: 'pointer', + hoverStyle: { + borderColor: '$borderColorFocus', + backgroundColor: '$backgroundHover', + }, + pressStyle: { + borderColor: '$borderColorFocus', + backgroundColor: '$backgroundPress', + }, + variants: { + selected: { + true: { + borderColor: '$borderColorFocus', + backgroundColor: '$backgroundHover', + }, + }, + disabled: { + true: { + opacity: 0.5, + cursor: 'not-allowed', + pointerEvents: 'none', + }, + }, + } as const, +}) + +interface HouseSelectionCardProps { + house: GovernanceHouse + isSelected: boolean + isDisabled: boolean + onPress: () => void +} + +export function HouseSelectionCard({ house, isSelected, isDisabled, onPress }: HouseSelectionCardProps) { + const houseCopy = HOUSE_COPY[house] + + return ( + + + + {isSelected ? 'Selected' : 'Choose house'} + + + + + {houseCopy.title} + {houseCopy.summary} + + {houseCopy.helper} + + ) +} diff --git a/packages/governance-widget/src/onboarding/OnboardingNotice.tsx b/packages/governance-widget/src/onboarding/OnboardingNotice.tsx new file mode 100644 index 0000000..1dc5275 --- /dev/null +++ b/packages/governance-widget/src/onboarding/OnboardingNotice.tsx @@ -0,0 +1,56 @@ +import React from 'react' +import { Badge, BadgeText, Card, Heading, Icon, Text, XStack, YStack } from '@goodwidget/ui' + +export type OnboardingNoticeBadgeType = 'info' | 'warning' | 'success' +export type OnboardingNoticeIconName = 'info' | 'check' | 'alert-triangle' + +interface OnboardingNoticeProps { + badgeLabel: string + badgeType: OnboardingNoticeBadgeType + title: string + description: string + iconName: OnboardingNoticeIconName +} + +export function OnboardingNotice({ + badgeLabel, + badgeType, + title, + description, + iconName, +}: OnboardingNoticeProps) { + return ( + + + + + + + + {badgeLabel} + + + {title} + {description} + + + + + ) +} diff --git a/packages/governance-widget/src/onboarding/ProfileField.tsx b/packages/governance-widget/src/onboarding/ProfileField.tsx new file mode 100644 index 0000000..8131b2c --- /dev/null +++ b/packages/governance-widget/src/onboarding/ProfileField.tsx @@ -0,0 +1,36 @@ +import React from 'react' +import { InputError, InputFrame, InputLabel, Text, YStack } from '@goodwidget/ui' + +interface ProfileFieldProps { + label: string + placeholder: string + value?: string + helperText?: string + errorMessage?: string + onChangeText: (nextValue: string) => void +} + +export function ProfileField({ + label, + placeholder, + value, + helperText, + errorMessage, + onChangeText, +}: ProfileFieldProps) { + return ( + + {label} + ) => { + onChangeText(event.currentTarget.value) + }} + /> + {errorMessage ? {errorMessage} : null} + {helperText ? {helperText} : null} + + ) +} diff --git a/packages/governance-widget/src/onboarding/ProfileTextAreaField.tsx b/packages/governance-widget/src/onboarding/ProfileTextAreaField.tsx new file mode 100644 index 0000000..5a7a1f4 --- /dev/null +++ b/packages/governance-widget/src/onboarding/ProfileTextAreaField.tsx @@ -0,0 +1,58 @@ +import React from 'react' +import { TextArea } from 'tamagui' +import { InputError, InputLabel, Text, YStack } from '@goodwidget/ui' + +interface ProfileTextAreaFieldProps { + label: string + placeholder: string + value?: string + helperText?: string + errorMessage?: string + onChangeText: (nextValue: string) => void +} + +export function ProfileTextAreaField({ + label, + placeholder, + value, + helperText, + errorMessage, + onChangeText, +}: ProfileTextAreaFieldProps) { + return ( + + {label} +

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