diff --git a/bun.lockb b/bun.lockb index 9b65fab..ccfc084 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/context/Web3Modal.tsx b/context/Web3Modal.tsx index dc4b8bb..a0176c1 100644 --- a/context/Web3Modal.tsx +++ b/context/Web3Modal.tsx @@ -1,6 +1,6 @@ import { http, createConfig } from "wagmi"; import { injected } from "wagmi/connectors"; -import { walletConnect } from "wagmi/connectors"; +import { walletConnect, coinbaseWallet } from "wagmi/connectors"; import { PUB_APP_DESCRIPTION, PUB_APP_NAME, @@ -10,6 +10,7 @@ import { PUB_WALLET_ICON, PUB_WEB3_ENDPOINT, } from "@/constants"; +import { mainnet } from "viem/chains"; // wagmi config const metadata = { @@ -20,10 +21,11 @@ const metadata = { }; export const config = createConfig({ - chains: [PUB_CHAIN], + chains: [PUB_CHAIN, mainnet], ssr: true, transports: { [PUB_CHAIN.id]: http(PUB_WEB3_ENDPOINT, { batch: true }), + [mainnet.id]: http(PUB_WEB3_ENDPOINT, { batch: true }), }, connectors: [ walletConnect({ @@ -31,7 +33,6 @@ export const config = createConfig({ metadata, showQrModal: false, }), - injected({ shimDisconnect: true }), - // coinbaseWallet({ appName: metadata.name, appLogoUrl: metadata.icons[0] }), + coinbaseWallet({ appName: metadata.name, appLogoUrl: metadata.icons[0] }), ], }); diff --git a/context/index.tsx b/context/index.tsx index 2f7268a..5219515 100644 --- a/context/index.tsx +++ b/context/index.tsx @@ -28,6 +28,15 @@ createWeb3Modal({ wagmiConfig: config, projectId: PUB_WALLET_CONNECT_PROJECT_ID, enableAnalytics: false, // Optional - defaults to your Cloud configuration + enableOnramp: true, // Optional + themeMode: "light", + allWallets: "SHOW", + featuredWalletIds: [ + "c57ca95b47569778a828d19178114f4db188b89b763c899ba0be274e97267d96", + "1ae92b26df02f0abca6304df07debccd18262fdf5fe82daa81593582dac9a369", + "18388be9ac2d02726dbac9777c96efaac06d744b2f6d580fccdd4127a6d01fd1", + "4622a2b2d6af1c9844944291e5e7351a6aa24cd7b23099efac1b2fd875da31a0", + ], }); export function RootContextProvider({ children, initialState }: { children: ReactNode; initialState?: State }) { diff --git a/package.json b/package.json index 24453f7..d1c9d11 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "@tanstack/react-query": "^5.28.8", "@tanstack/react-query-persist-client": "^5.28.8", "@typescript-eslint/eslint-plugin": "latest", - "@web3modal/wagmi": "^4.1.1", + "@web3modal/wagmi": "^4.1.9", "classnames": "^2.5.1", "dayjs": "^1.11.10", "dompurify": "^3.0.11", @@ -38,7 +38,7 @@ "react-dom": "^18.2.0", "tailwindcss-fluid-type": "^2.0.6", "viem": "^2.9.2", - "wagmi": "^2.5.12" + "wagmi": "^2.5.20" }, "devDependencies": { "@aragon/osx-commons-configs": "^0.2.0", diff --git a/plugins/dualGovernance/artifacts/OptimisticLzVotingPlugin.sol.tsx b/plugins/dualGovernance/artifacts/OptimisticLzVotingPlugin.sol.tsx new file mode 100644 index 0000000..3ada4cf --- /dev/null +++ b/plugins/dualGovernance/artifacts/OptimisticLzVotingPlugin.sol.tsx @@ -0,0 +1,688 @@ +import { Abi } from "viem"; +export const OptimisticLzVotingPluginAbi: Abi = [ + { + type: "function", + name: "DEFAULT_PAYLOAD_SIZE_LIMIT", + inputs: [], + outputs: [{ name: "", type: "uint256", internalType: "uint256" }], + stateMutability: "view", + }, + { + type: "function", + name: "OPTIMISTIC_GOVERNANCE_INTERFACE_ID", + inputs: [], + outputs: [{ name: "", type: "bytes4", internalType: "bytes4" }], + stateMutability: "view", + }, + { + type: "function", + name: "PROPOSER_PERMISSION_ID", + inputs: [], + outputs: [{ name: "", type: "bytes32", internalType: "bytes32" }], + stateMutability: "view", + }, + { + type: "function", + name: "UPDATE_BRIDGE_SETTINGS_PERMISSION_ID", + inputs: [], + outputs: [{ name: "", type: "bytes32", internalType: "bytes32" }], + stateMutability: "view", + }, + { + type: "function", + name: "UPDATE_OPTIMISTIC_GOVERNANCE_SETTINGS_PERMISSION_ID", + inputs: [], + outputs: [{ name: "", type: "bytes32", internalType: "bytes32" }], + stateMutability: "view", + }, + { + type: "function", + name: "UPGRADE_PLUGIN_PERMISSION_ID", + inputs: [], + outputs: [{ name: "", type: "bytes32", internalType: "bytes32" }], + stateMutability: "view", + }, + { + type: "function", + name: "bridgeSettings", + inputs: [], + outputs: [ + { name: "chainId", type: "uint16", internalType: "uint16" }, + { name: "bridge", type: "address", internalType: "address" }, + { name: "l2VotingAggregator", type: "address", internalType: "address" }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "canExecute", + inputs: [{ name: "_proposalId", type: "uint256", internalType: "uint256" }], + outputs: [{ name: "", type: "bool", internalType: "bool" }], + stateMutability: "view", + }, + { + type: "function", + name: "canVeto", + inputs: [ + { name: "_proposalId", type: "uint256", internalType: "uint256" }, + { name: "_voter", type: "address", internalType: "address" }, + ], + outputs: [{ name: "", type: "bool", internalType: "bool" }], + stateMutability: "view", + }, + { + type: "function", + name: "createProposal", + inputs: [ + { name: "_metadata", type: "bytes", internalType: "bytes" }, + { + name: "_actions", + type: "tuple[]", + internalType: "struct IDAO.Action[]", + components: [ + { name: "to", type: "address", internalType: "address" }, + { name: "value", type: "uint256", internalType: "uint256" }, + { name: "data", type: "bytes", internalType: "bytes" }, + ], + }, + { name: "_allowFailureMap", type: "uint256", internalType: "uint256" }, + { name: "_startDate", type: "uint64", internalType: "uint64" }, + { name: "_endDate", type: "uint64", internalType: "uint64" }, + ], + outputs: [{ name: "proposalId", type: "uint256", internalType: "uint256" }], + stateMutability: "payable", + }, + { + type: "function", + name: "dao", + inputs: [], + outputs: [{ name: "", type: "address", internalType: "contract IDAO" }], + stateMutability: "view", + }, + { + type: "function", + name: "execute", + inputs: [{ name: "_proposalId", type: "uint256", internalType: "uint256" }], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "failedMessages", + inputs: [ + { name: "", type: "uint16", internalType: "uint16" }, + { name: "", type: "bytes", internalType: "bytes" }, + { name: "", type: "uint64", internalType: "uint64" }, + ], + outputs: [{ name: "", type: "bytes32", internalType: "bytes32" }], + stateMutability: "view", + }, + { + type: "function", + name: "forceResumeReceive", + inputs: [ + { name: "_srcChainId", type: "uint16", internalType: "uint16" }, + { name: "_srcAddress", type: "bytes", internalType: "bytes" }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "getConfig", + inputs: [ + { name: "_version", type: "uint16", internalType: "uint16" }, + { name: "_chainId", type: "uint16", internalType: "uint16" }, + { name: "", type: "address", internalType: "address" }, + { name: "_configType", type: "uint256", internalType: "uint256" }, + ], + outputs: [{ name: "", type: "bytes", internalType: "bytes" }], + stateMutability: "view", + }, + { + type: "function", + name: "getProposal", + inputs: [{ name: "_proposalId", type: "uint256", internalType: "uint256" }], + outputs: [ + { name: "open", type: "bool", internalType: "bool" }, + { name: "executed", type: "bool", internalType: "bool" }, + { + name: "parameters", + type: "tuple", + internalType: "struct OptimisticLzVotingPlugin.ProposalParameters", + components: [ + { name: "startDate", type: "uint64", internalType: "uint64" }, + { name: "endDate", type: "uint64", internalType: "uint64" }, + { name: "snapshotBlock", type: "uint64", internalType: "uint64" }, + { name: "minVetoVotingPower", type: "uint256", internalType: "uint256" }, + ], + }, + { name: "vetoTally", type: "uint256", internalType: "uint256" }, + { + name: "actions", + type: "tuple[]", + internalType: "struct IDAO.Action[]", + components: [ + { name: "to", type: "address", internalType: "address" }, + { name: "value", type: "uint256", internalType: "uint256" }, + { name: "data", type: "bytes", internalType: "bytes" }, + ], + }, + { name: "allowFailureMap", type: "uint256", internalType: "uint256" }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "getTrustedRemoteAddress", + inputs: [{ name: "_remoteChainId", type: "uint16", internalType: "uint16" }], + outputs: [{ name: "", type: "bytes", internalType: "bytes" }], + stateMutability: "view", + }, + { + type: "function", + name: "getVotingToken", + inputs: [], + outputs: [{ name: "", type: "address", internalType: "contract IVotesUpgradeable" }], + stateMutability: "view", + }, + { + type: "function", + name: "hasVetoed", + inputs: [ + { name: "_proposalId", type: "uint256", internalType: "uint256" }, + { name: "_voter", type: "address", internalType: "address" }, + ], + outputs: [{ name: "", type: "bool", internalType: "bool" }], + stateMutability: "view", + }, + { + type: "function", + name: "implementation", + inputs: [], + outputs: [{ name: "", type: "address", internalType: "address" }], + stateMutability: "view", + }, + { + type: "function", + name: "initialize", + inputs: [ + { name: "_dao", type: "address", internalType: "contract IDAO" }, + { + name: "_governanceSettings", + type: "tuple", + internalType: "struct OptimisticLzVotingPlugin.OptimisticGovernanceSettings", + components: [ + { name: "minVetoRatio", type: "uint32", internalType: "uint32" }, + { name: "minDuration", type: "uint64", internalType: "uint64" }, + { name: "minProposerVotingPower", type: "uint256", internalType: "uint256" }, + ], + }, + { name: "_token", type: "address", internalType: "contract IVotesUpgradeable" }, + { + name: "_bridgeSettings", + type: "tuple", + internalType: "struct OptimisticLzVotingPlugin.BridgeSettings", + components: [ + { name: "chainId", type: "uint16", internalType: "uint16" }, + { name: "bridge", type: "address", internalType: "address" }, + { name: "l2VotingAggregator", type: "address", internalType: "address" }, + ], + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "isMinVetoRatioReached", + inputs: [{ name: "_proposalId", type: "uint256", internalType: "uint256" }], + outputs: [{ name: "", type: "bool", internalType: "bool" }], + stateMutability: "view", + }, + { + type: "function", + name: "isTrustedRemote", + inputs: [ + { name: "_srcChainId", type: "uint16", internalType: "uint16" }, + { name: "_srcAddress", type: "bytes", internalType: "bytes" }, + ], + outputs: [{ name: "", type: "bool", internalType: "bool" }], + stateMutability: "view", + }, + { + type: "function", + name: "lzEndpoint", + inputs: [], + outputs: [{ name: "", type: "address", internalType: "contract ILayerZeroEndpoint" }], + stateMutability: "view", + }, + { + type: "function", + name: "lzReceive", + inputs: [ + { name: "_srcChainId", type: "uint16", internalType: "uint16" }, + { name: "_srcAddress", type: "bytes", internalType: "bytes" }, + { name: "_nonce", type: "uint64", internalType: "uint64" }, + { name: "_payload", type: "bytes", internalType: "bytes" }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "minDstGasLookup", + inputs: [ + { name: "", type: "uint16", internalType: "uint16" }, + { name: "", type: "uint16", internalType: "uint16" }, + ], + outputs: [{ name: "", type: "uint256", internalType: "uint256" }], + stateMutability: "view", + }, + { + type: "function", + name: "nonblockingLzReceive", + inputs: [ + { name: "_srcChainId", type: "uint16", internalType: "uint16" }, + { name: "_srcAddress", type: "bytes", internalType: "bytes" }, + { name: "_nonce", type: "uint64", internalType: "uint64" }, + { name: "_payload", type: "bytes", internalType: "bytes" }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "owner", + inputs: [], + outputs: [{ name: "", type: "address", internalType: "address" }], + stateMutability: "view", + }, + { + type: "function", + name: "payloadSizeLimitLookup", + inputs: [{ name: "", type: "uint16", internalType: "uint16" }], + outputs: [{ name: "", type: "uint256", internalType: "uint256" }], + stateMutability: "view", + }, + { + type: "function", + name: "pluginType", + inputs: [], + outputs: [{ name: "", type: "uint8", internalType: "enum IPlugin.PluginType" }], + stateMutability: "pure", + }, + { + type: "function", + name: "precrime", + inputs: [], + outputs: [{ name: "", type: "address", internalType: "address" }], + stateMutability: "view", + }, + { + type: "function", + name: "proposalCount", + inputs: [], + outputs: [{ name: "", type: "uint256", internalType: "uint256" }], + stateMutability: "view", + }, + { + type: "function", + name: "proxiableUUID", + inputs: [], + outputs: [{ name: "", type: "bytes32", internalType: "bytes32" }], + stateMutability: "view", + }, + { type: "function", name: "renounceOwnership", inputs: [], outputs: [], stateMutability: "nonpayable" }, + { + type: "function", + name: "retryMessage", + inputs: [ + { name: "_srcChainId", type: "uint16", internalType: "uint16" }, + { name: "_srcAddress", type: "bytes", internalType: "bytes" }, + { name: "_nonce", type: "uint64", internalType: "uint64" }, + { name: "_payload", type: "bytes", internalType: "bytes" }, + ], + outputs: [], + stateMutability: "payable", + }, + { + type: "function", + name: "setConfig", + inputs: [ + { name: "_version", type: "uint16", internalType: "uint16" }, + { name: "_chainId", type: "uint16", internalType: "uint16" }, + { name: "_configType", type: "uint256", internalType: "uint256" }, + { name: "_config", type: "bytes", internalType: "bytes" }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "setMinDstGas", + inputs: [ + { name: "_dstChainId", type: "uint16", internalType: "uint16" }, + { name: "_packetType", type: "uint16", internalType: "uint16" }, + { name: "_minGas", type: "uint256", internalType: "uint256" }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "setPayloadSizeLimit", + inputs: [ + { name: "_dstChainId", type: "uint16", internalType: "uint16" }, + { name: "_size", type: "uint256", internalType: "uint256" }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "setPrecrime", + inputs: [{ name: "_precrime", type: "address", internalType: "address" }], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "setReceiveVersion", + inputs: [{ name: "_version", type: "uint16", internalType: "uint16" }], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "setSendVersion", + inputs: [{ name: "_version", type: "uint16", internalType: "uint16" }], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "supportsInterface", + inputs: [{ name: "_interfaceId", type: "bytes4", internalType: "bytes4" }], + outputs: [{ name: "", type: "bool", internalType: "bool" }], + stateMutability: "view", + }, + { + type: "function", + name: "transferOwnership", + inputs: [{ name: "newOwner", type: "address", internalType: "address" }], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "trustedRemoteLookup", + inputs: [{ name: "", type: "uint16", internalType: "uint16" }], + outputs: [{ name: "", type: "bytes", internalType: "bytes" }], + stateMutability: "view", + }, + { + type: "function", + name: "updateBridgeSettings", + inputs: [ + { + name: "_bridgeSettings", + type: "tuple", + internalType: "struct OptimisticLzVotingPlugin.BridgeSettings", + components: [ + { name: "chainId", type: "uint16", internalType: "uint16" }, + { name: "bridge", type: "address", internalType: "address" }, + { name: "l2VotingAggregator", type: "address", internalType: "address" }, + ], + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "updateOptimisticGovernanceSettings", + inputs: [ + { + name: "_governanceSettings", + type: "tuple", + internalType: "struct OptimisticLzVotingPlugin.OptimisticGovernanceSettings", + components: [ + { name: "minVetoRatio", type: "uint32", internalType: "uint32" }, + { name: "minDuration", type: "uint64", internalType: "uint64" }, + { name: "minProposerVotingPower", type: "uint256", internalType: "uint256" }, + ], + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "upgradeTo", + inputs: [{ name: "newImplementation", type: "address", internalType: "address" }], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "upgradeToAndCall", + inputs: [ + { name: "newImplementation", type: "address", internalType: "address" }, + { name: "data", type: "bytes", internalType: "bytes" }, + ], + outputs: [], + stateMutability: "payable", + }, + { + type: "function", + name: "veto", + inputs: [{ name: "_proposalId", type: "uint256", internalType: "uint256" }], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "event", + name: "AdminChanged", + inputs: [ + { name: "previousAdmin", type: "address", indexed: false, internalType: "address" }, + { name: "newAdmin", type: "address", indexed: false, internalType: "address" }, + ], + anonymous: false, + }, + { + type: "event", + name: "BeaconUpgraded", + inputs: [{ name: "beacon", type: "address", indexed: true, internalType: "address" }], + anonymous: false, + }, + { + type: "event", + name: "Initialized", + inputs: [{ name: "version", type: "uint8", indexed: false, internalType: "uint8" }], + anonymous: false, + }, + { + type: "event", + name: "MessageFailed", + inputs: [ + { name: "_srcChainId", type: "uint16", indexed: false, internalType: "uint16" }, + { name: "_srcAddress", type: "bytes", indexed: false, internalType: "bytes" }, + { name: "_nonce", type: "uint64", indexed: false, internalType: "uint64" }, + { name: "_payload", type: "bytes", indexed: false, internalType: "bytes" }, + { name: "_reason", type: "bytes", indexed: false, internalType: "bytes" }, + ], + anonymous: false, + }, + { + type: "event", + name: "OptimisticGovernanceSettingsUpdated", + inputs: [ + { name: "minVetoRatio", type: "uint32", indexed: false, internalType: "uint32" }, + { name: "minDuration", type: "uint64", indexed: false, internalType: "uint64" }, + { name: "minProposerVotingPower", type: "uint256", indexed: false, internalType: "uint256" }, + ], + anonymous: false, + }, + { + type: "event", + name: "OwnershipTransferred", + inputs: [ + { name: "previousOwner", type: "address", indexed: true, internalType: "address" }, + { name: "newOwner", type: "address", indexed: true, internalType: "address" }, + ], + anonymous: false, + }, + { + type: "event", + name: "ProposalCreated", + inputs: [ + { name: "proposalId", type: "uint256", indexed: true, internalType: "uint256" }, + { name: "creator", type: "address", indexed: true, internalType: "address" }, + { name: "startDate", type: "uint64", indexed: false, internalType: "uint64" }, + { name: "endDate", type: "uint64", indexed: false, internalType: "uint64" }, + { name: "metadata", type: "bytes", indexed: false, internalType: "bytes" }, + { + name: "actions", + type: "tuple[]", + indexed: false, + internalType: "struct IDAO.Action[]", + components: [ + { name: "to", type: "address", internalType: "address" }, + { name: "value", type: "uint256", internalType: "uint256" }, + { name: "data", type: "bytes", internalType: "bytes" }, + ], + }, + { name: "allowFailureMap", type: "uint256", indexed: false, internalType: "uint256" }, + ], + anonymous: false, + }, + { + type: "event", + name: "ProposalExecuted", + inputs: [{ name: "proposalId", type: "uint256", indexed: true, internalType: "uint256" }], + anonymous: false, + }, + { + type: "event", + name: "RetryMessageSuccess", + inputs: [ + { name: "_srcChainId", type: "uint16", indexed: false, internalType: "uint16" }, + { name: "_srcAddress", type: "bytes", indexed: false, internalType: "bytes" }, + { name: "_nonce", type: "uint64", indexed: false, internalType: "uint64" }, + { name: "_payloadHash", type: "bytes32", indexed: false, internalType: "bytes32" }, + ], + anonymous: false, + }, + { + type: "event", + name: "SetMinDstGas", + inputs: [ + { name: "_dstChainId", type: "uint16", indexed: false, internalType: "uint16" }, + { name: "_type", type: "uint16", indexed: false, internalType: "uint16" }, + { name: "_minDstGas", type: "uint256", indexed: false, internalType: "uint256" }, + ], + anonymous: false, + }, + { + type: "event", + name: "SetPrecrime", + inputs: [{ name: "precrime", type: "address", indexed: false, internalType: "address" }], + anonymous: false, + }, + { + type: "event", + name: "SetTrustedRemote", + inputs: [ + { name: "_remoteChainId", type: "uint16", indexed: false, internalType: "uint16" }, + { name: "_path", type: "bytes", indexed: false, internalType: "bytes" }, + ], + anonymous: false, + }, + { + type: "event", + name: "SetTrustedRemoteAddress", + inputs: [ + { name: "_remoteChainId", type: "uint16", indexed: false, internalType: "uint16" }, + { name: "_remoteAddress", type: "bytes", indexed: false, internalType: "bytes" }, + ], + anonymous: false, + }, + { + type: "event", + name: "Upgraded", + inputs: [{ name: "implementation", type: "address", indexed: true, internalType: "address" }], + anonymous: false, + }, + { + type: "event", + name: "VetoCast", + inputs: [ + { name: "proposalId", type: "uint256", indexed: true, internalType: "uint256" }, + { name: "voter", type: "address", indexed: true, internalType: "address" }, + { name: "votingPower", type: "uint256", indexed: false, internalType: "uint256" }, + ], + anonymous: false, + }, + { + type: "error", + name: "DaoUnauthorized", + inputs: [ + { name: "dao", type: "address", internalType: "address" }, + { name: "where", type: "address", internalType: "address" }, + { name: "who", type: "address", internalType: "address" }, + { name: "permissionId", type: "bytes32", internalType: "bytes32" }, + ], + }, + { + type: "error", + name: "DateOutOfBounds", + inputs: [ + { name: "limit", type: "uint64", internalType: "uint64" }, + { name: "actual", type: "uint64", internalType: "uint64" }, + ], + }, + { + type: "error", + name: "MinDurationOutOfBounds", + inputs: [ + { name: "limit", type: "uint64", internalType: "uint64" }, + { name: "actual", type: "uint64", internalType: "uint64" }, + ], + }, + { + type: "error", + name: "MinProposerVotingPowerOutOfBounds", + inputs: [ + { name: "limit", type: "uint256", internalType: "uint256" }, + { name: "actual", type: "uint256", internalType: "uint256" }, + ], + }, + { type: "error", name: "NoVotingPower", inputs: [] }, + { + type: "error", + name: "ProposalCreationForbidden", + inputs: [{ name: "sender", type: "address", internalType: "address" }], + }, + { + type: "error", + name: "ProposalExecutionForbidden", + inputs: [{ name: "proposalId", type: "uint256", internalType: "uint256" }], + }, + { + type: "error", + name: "ProposalVetoingForbidden", + inputs: [ + { name: "proposalId", type: "uint256", internalType: "uint256" }, + { name: "account", type: "address", internalType: "address" }, + ], + }, + { + type: "error", + name: "RatioOutOfBounds", + inputs: [ + { name: "limit", type: "uint256", internalType: "uint256" }, + { name: "actual", type: "uint256", internalType: "uint256" }, + ], + }, +] as const;