From 26d24e9cd63f6e6c8a073b6757ac5b85a04c6ed1 Mon Sep 17 00:00:00 2001 From: tohrxyz Date: Thu, 1 May 2025 15:31:18 +0200 Subject: [PATCH 01/19] feat: implement types, classes and so on for univ3lpset --- .../factories/create-chain-link-proposal.ts | 1 - packages/v1-core/src/generated.ts | 802 ++++++++++++++++++ .../src/models/proposals/proposal-base.ts | 24 + .../proposals/uniswap-v3-lp-set-proposal.ts | 134 +++ .../v1-core/src/models/strategies/types.ts | 3 +- packages/v1-core/src/structs.ts | 9 + 6 files changed, 971 insertions(+), 2 deletions(-) create mode 100644 packages/v1-core/src/models/proposals/uniswap-v3-lp-set-proposal.ts diff --git a/packages/v1-core/src/factories/create-chain-link-proposal.ts b/packages/v1-core/src/factories/create-chain-link-proposal.ts index a94b1fbc..135bd870 100644 --- a/packages/v1-core/src/factories/create-chain-link-proposal.ts +++ b/packages/v1-core/src/factories/create-chain-link-proposal.ts @@ -38,7 +38,6 @@ import { calculateDurationInSeconds, calculateExpirationTimestamp, calculateMinCreditAmount, - formatLtvForContract, getLtvValue, } from "../utils/proposal-calculations.js"; import { createUtilizedCreditId } from "../utils/shared-credit.js"; diff --git a/packages/v1-core/src/generated.ts b/packages/v1-core/src/generated.ts index e8c18a49..791e7635 100644 --- a/packages/v1-core/src/generated.ts +++ b/packages/v1-core/src/generated.ts @@ -6142,6 +6142,808 @@ export const pwnSimpleLoanDutchAuctionProposalAbi = [ }, ] as const; +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// PWNSimpleLoanUniswapV3LPSetProposal +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const pwnSimpleLoanUniswapV3LPSetProposalAbi = [ + [ + { + type: "constructor", + inputs: [ + { name: "_hub", internalType: "address", type: "address" }, + { name: "_revokedNonce", internalType: "address", type: "address" }, + { name: "_config", internalType: "address", type: "address" }, + { name: "_utilizedCredit", internalType: "address", type: "address" }, + { name: "_uniswapV3Factory", internalType: "address", type: "address" }, + { + name: "_uniswapNFTPositionManager", + internalType: "address", + type: "address", + }, + { + name: "_chainlinkFeedRegistry", + internalType: "address", + type: "address", + }, + { + name: "_chainlinkL2SequencerUptimeFeed", + internalType: "address", + type: "address", + }, + { name: "_weth", internalType: "address", type: "address" }, + ], + stateMutability: "nonpayable", + }, + { + type: "error", + inputs: [{ name: "addr", internalType: "address", type: "address" }], + name: "AcceptorIsProposer", + }, + { + type: "error", + inputs: [ + { name: "addr", internalType: "address", type: "address" }, + { name: "tag", internalType: "bytes32", type: "bytes32" }, + ], + name: "AddressMissingHubTag", + }, + { + type: "error", + inputs: [{ name: "addr", internalType: "address", type: "address" }], + name: "CallerIsNotStatedProposer", + }, + { + type: "error", + inputs: [ + { name: "caller", internalType: "address", type: "address" }, + { name: "loanContract", internalType: "address", type: "address" }, + ], + name: "CallerNotLoanContract", + }, + { + type: "error", + inputs: [ + { name: "feed", internalType: "address", type: "address" }, + { name: "updatedAt", internalType: "uint256", type: "uint256" }, + ], + name: "ChainlinkFeedPriceTooOld", + }, + { + type: "error", + inputs: [ + { name: "feed", internalType: "address", type: "address" }, + { name: "price", internalType: "int256", type: "int256" }, + { name: "updatedAt", internalType: "uint256", type: "uint256" }, + ], + name: "ChainlinkFeedReturnedNegativePrice", + }, + { type: "error", inputs: [], name: "ChainlinkInvalidInputLenghts" }, + { + type: "error", + inputs: [ + { name: "defaultDate", internalType: "uint32", type: "uint32" }, + { name: "current", internalType: "uint32", type: "uint32" }, + ], + name: "DefaultDateInPast", + }, + { + type: "error", + inputs: [ + { name: "current", internalType: "uint256", type: "uint256" }, + { name: "expiration", internalType: "uint256", type: "uint256" }, + ], + name: "Expired", + }, + { + type: "error", + inputs: [ + { name: "timeSinceUp", internalType: "uint256", type: "uint256" }, + { name: "gracePeriod", internalType: "uint256", type: "uint256" }, + ], + name: "GracePeriodNotOver", + }, + { + type: "error", + inputs: [ + { name: "current", internalType: "uint256", type: "uint256" }, + { name: "limit", internalType: "uint256", type: "uint256" }, + ], + name: "InsufficientCreditAmount", + }, + { + type: "error", + inputs: [ + { name: "current", internalType: "uint256", type: "uint256" }, + { name: "limit", internalType: "uint256", type: "uint256" }, + ], + name: "IntermediaryDenominationsOutOfBounds", + }, + { + type: "error", + inputs: [ + { + name: "acceptorController", + internalType: "address", + type: "address", + }, + ], + name: "InvalidAcceptorController", + }, + { + type: "error", + inputs: [ + { name: "current", internalType: "bytes32", type: "bytes32" }, + { name: "proposed", internalType: "bytes32", type: "bytes32" }, + ], + name: "InvalidCollateralStateFingerprint", + }, + { type: "error", inputs: [], name: "InvalidLPTokenPair" }, + { + type: "error", + inputs: [ + { name: "refinancingLoanId", internalType: "uint256", type: "uint256" }, + ], + name: "InvalidRefinancingLoanId", + }, + { + type: "error", + inputs: [ + { name: "signer", internalType: "address", type: "address" }, + { name: "digest", internalType: "bytes32", type: "bytes32" }, + ], + name: "InvalidSignature", + }, + { + type: "error", + inputs: [{ name: "length", internalType: "uint256", type: "uint256" }], + name: "InvalidSignatureLength", + }, + { type: "error", inputs: [], name: "L2SequencerDown" }, + { type: "error", inputs: [], name: "MinCreditAmountNotSet" }, + { type: "error", inputs: [], name: "MissingStateFingerprintComputer" }, + { + type: "error", + inputs: [ + { name: "addr", internalType: "address", type: "address" }, + { name: "nonceSpace", internalType: "uint256", type: "uint256" }, + { name: "nonce", internalType: "uint256", type: "uint256" }, + ], + name: "NonceNotUsable", + }, + { type: "error", inputs: [], name: "T" }, + { + type: "event", + anonymous: false, + inputs: [ + { + name: "proposalHash", + internalType: "bytes32", + type: "bytes32", + indexed: true, + }, + { + name: "proposer", + internalType: "address", + type: "address", + indexed: true, + }, + { + name: "proposal", + internalType: "struct PWNSimpleLoanUniswapV3LPSetProposal.Proposal", + type: "tuple", + components: [ + { name: "tokenAAllowlist", internalType: "address[]", type: "address[]" }, + { name: "tokenBAllowlist", internalType: "address[]", type: "address[]" }, + { name: "creditAddress", internalType: "address", type: "address" }, + { + name: "feedIntermediaryDenominations", + internalType: "address[]", + type: "address[]", + }, + { name: "feedInvertFlags", internalType: "bool[]", type: "bool[]" }, + { name: "loanToValue", internalType: "uint256", type: "uint256" }, + { name: "minCreditAmount", internalType: "uint256", type: "uint256" }, + { + name: "availableCreditLimit", + internalType: "uint256", + type: "uint256", + }, + { name: "utilizedCreditId", internalType: "bytes32", type: "bytes32" }, + { + name: "fixedInterestAmount", + internalType: "uint256", + type: "uint256", + }, + { + name: "accruingInterestAPR", + internalType: "uint24", + type: "uint24", + }, + { name: "durationOrDate", internalType: "uint32", type: "uint32" }, + { name: "expiration", internalType: "uint40", type: "uint40" }, + { + name: "acceptorController", + internalType: "address", + type: "address", + }, + { + name: "acceptorControllerData", + internalType: "bytes", + type: "bytes", + }, + { name: "proposer", internalType: "address", type: "address" }, + { name: "proposerSpecHash", internalType: "bytes32", type: "bytes32" }, + { name: "isOffer", internalType: "bool", type: "bool" }, + { + name: "refinancingLoanId", + internalType: "uint256", + type: "uint256", + }, + { name: "nonceSpace", internalType: "uint256", type: "uint256" }, + { name: "nonce", internalType: "uint256", type: "uint256" }, + { name: "loanContract", internalType: "address", type: "address" }, + ], + indexed: false, + }, + ], + name: "ProposalMade", + }, + { + type: "function", + inputs: [], + name: "DOMAIN_SEPARATOR", + outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], + stateMutability: "view", + }, + { + type: "function", + inputs: [], + name: "LOAN_TO_VALUE_DENOMINATOR", + outputs: [{ name: "", internalType: "uint256", type: "uint256" }], + stateMutability: "view", + }, + { + type: "function", + inputs: [], + name: "MAX_INTERMEDIARY_DENOMINATIONS", + outputs: [{ name: "", internalType: "uint256", type: "uint256" }], + stateMutability: "view", + }, + { + type: "function", + inputs: [], + name: "MULTIPROPOSAL_DOMAIN_SEPARATOR", + outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], + stateMutability: "view", + }, + { + type: "function", + inputs: [], + name: "MULTIPROPOSAL_TYPEHASH", + outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], + stateMutability: "view", + }, + { + type: "function", + inputs: [], + name: "PROPOSAL_TYPEHASH", + outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], + stateMutability: "view", + }, + { + type: "function", + inputs: [], + name: "VERSION", + outputs: [{ name: "", internalType: "string", type: "string" }], + stateMutability: "view", + }, + { + type: "function", + inputs: [], + name: "WETH", + outputs: [{ name: "", internalType: "address", type: "address" }], + stateMutability: "view", + }, + { + type: "function", + inputs: [ + { name: "acceptor", internalType: "address", type: "address" }, + { name: "refinancingLoanId", internalType: "uint256", type: "uint256" }, + { name: "proposalData", internalType: "bytes", type: "bytes" }, + { + name: "proposalInclusionProof", + internalType: "bytes32[]", + type: "bytes32[]", + }, + { name: "signature", internalType: "bytes", type: "bytes" }, + ], + name: "acceptProposal", + outputs: [ + { name: "proposalHash", internalType: "bytes32", type: "bytes32" }, + { + name: "loanTerms", + internalType: "struct PWNSimpleLoan.Terms", + type: "tuple", + components: [ + { name: "lender", internalType: "address", type: "address" }, + { name: "borrower", internalType: "address", type: "address" }, + { name: "duration", internalType: "uint32", type: "uint32" }, + { + name: "collateral", + internalType: "struct MultiToken.Asset", + type: "tuple", + components: [ + { + name: "category", + internalType: "enum MultiToken.Category", + type: "uint8", + }, + { name: "assetAddress", internalType: "address", type: "address" }, + { name: "id", internalType: "uint256", type: "uint256" }, + { name: "amount", internalType: "uint256", type: "uint256" }, + ], + }, + { + name: "credit", + internalType: "struct MultiToken.Asset", + type: "tuple", + components: [ + { + name: "category", + internalType: "enum MultiToken.Category", + type: "uint8", + }, + { name: "assetAddress", internalType: "address", type: "address" }, + { name: "id", internalType: "uint256", type: "uint256" }, + { name: "amount", internalType: "uint256", type: "uint256" }, + ], + }, + { + name: "fixedInterestAmount", + internalType: "uint256", + type: "uint256", + }, + { + name: "accruingInterestAPR", + internalType: "uint24", + type: "uint24", + }, + { name: "lenderSpecHash", internalType: "bytes32", type: "bytes32" }, + { name: "borrowerSpecHash", internalType: "bytes32", type: "bytes32" }, + ], + }, + ], + stateMutability: "nonpayable", + }, + { + type: "function", + inputs: [], + name: "chainlinkFeedRegistry", + outputs: [ + { + name: "", + internalType: "contract IChainlinkFeedRegistryLike", + type: "address", + }, + ], + stateMutability: "view", + }, + { + type: "function", + inputs: [], + name: "chainlinkL2SequencerUptimeFeed", + outputs: [ + { + name: "", + internalType: "contract IChainlinkAggregatorLike", + type: "address", + }, + ], + stateMutability: "view", + }, + { + type: "function", + inputs: [], + name: "config", + outputs: [{ name: "", internalType: "contract PWNConfig", type: "address" }], + stateMutability: "view", + }, + { + type: "function", + inputs: [{ name: "proposalData", internalType: "bytes", type: "bytes" }], + name: "decodeProposalData", + outputs: [ + { + name: "", + internalType: "struct PWNSimpleLoanUniswapV3LPSetProposal.Proposal", + type: "tuple", + components: [ + { name: "tokenAAllowlist", internalType: "address[]", type: "address[]" }, + { name: "tokenBAllowlist", internalType: "address[]", type: "address[]" }, + { name: "creditAddress", internalType: "address", type: "address" }, + { + name: "feedIntermediaryDenominations", + internalType: "address[]", + type: "address[]", + }, + { name: "feedInvertFlags", internalType: "bool[]", type: "bool[]" }, + { name: "loanToValue", internalType: "uint256", type: "uint256" }, + { name: "minCreditAmount", internalType: "uint256", type: "uint256" }, + { + name: "availableCreditLimit", + internalType: "uint256", + type: "uint256", + }, + { name: "utilizedCreditId", internalType: "bytes32", type: "bytes32" }, + { + name: "fixedInterestAmount", + internalType: "uint256", + type: "uint256", + }, + { + name: "accruingInterestAPR", + internalType: "uint24", + type: "uint24", + }, + { name: "durationOrDate", internalType: "uint32", type: "uint32" }, + { name: "expiration", internalType: "uint40", type: "uint40" }, + { + name: "acceptorController", + internalType: "address", + type: "address", + }, + { + name: "acceptorControllerData", + internalType: "bytes", + type: "bytes", + }, + { name: "proposer", internalType: "address", type: "address" }, + { name: "proposerSpecHash", internalType: "bytes32", type: "bytes32" }, + { name: "isOffer", internalType: "bool", type: "bool" }, + { + name: "refinancingLoanId", + internalType: "uint256", + type: "uint256", + }, + { name: "nonceSpace", internalType: "uint256", type: "uint256" }, + { name: "nonce", internalType: "uint256", type: "uint256" }, + { name: "loanContract", internalType: "address", type: "address" }, + ], + }, + { + name: "", + internalType: + "struct PWNSimpleLoanUniswapV3LPSetProposal.ProposalValues", + type: "tuple", + components: [ + { name: "collateralId", internalType: "uint256", type: "uint256" }, + { name: "tokenAIndex", internalType: "uint256", type: "uint256" }, + { name: "tokenBIndex", internalType: "uint256", type: "uint256" }, + { + name: "acceptorControllerData", + internalType: "bytes", + type: "bytes", + }, + ], + }, + ], + stateMutability: "pure", + }, + { + type: "function", + inputs: [ + { + name: "proposal", + internalType: "struct PWNSimpleLoanUniswapV3LPSetProposal.Proposal", + type: "tuple", + components: [ + { name: "tokenAAllowlist", internalType: "address[]", type: "address[]" }, + { name: "tokenBAllowlist", internalType: "address[]", type: "address[]" }, + { name: "creditAddress", internalType: "address", type: "address" }, + { + name: "feedIntermediaryDenominations", + internalType: "address[]", + type: "address[]", + }, + { name: "feedInvertFlags", internalType: "bool[]", type: "bool[]" }, + { name: "loanToValue", internalType: "uint256", type: "uint256" }, + { name: "minCreditAmount", internalType: "uint256", type: "uint256" }, + { + name: "availableCreditLimit", + internalType: "uint256", + type: "uint256", + }, + { name: "utilizedCreditId", internalType: "bytes32", type: "bytes32" }, + { + name: "fixedInterestAmount", + internalType: "uint256", + type: "uint256", + }, + { + name: "accruingInterestAPR", + internalType: "uint24", + type: "uint24", + }, + { name: "durationOrDate", internalType: "uint32", type: "uint32" }, + { name: "expiration", internalType: "uint40", type: "uint40" }, + { + name: "acceptorController", + internalType: "address", + type: "address", + }, + { + name: "acceptorControllerData", + internalType: "bytes", + type: "bytes", + }, + { name: "proposer", internalType: "address", type: "address" }, + { name: "proposerSpecHash", internalType: "bytes32", type: "bytes32" }, + { name: "isOffer", internalType: "bool", type: "bool" }, + { + name: "refinancingLoanId", + internalType: "uint256", + type: "uint256", + }, + { name: "nonceSpace", internalType: "uint256", type: "uint256" }, + { name: "nonce", internalType: "uint256", type: "uint256" }, + { name: "loanContract", internalType: "address", type: "address" }, + ], + }, + { + name: "proposalValues", + internalType: + "struct PWNSimpleLoanUniswapV3LPSetProposal.ProposalValues", + type: "tuple", + components: [ + { name: "collateralId", internalType: "uint256", type: "uint256" }, + { name: "tokenAIndex", internalType: "uint256", type: "uint256" }, + { name: "tokenBIndex", internalType: "uint256", type: "uint256" }, + { + name: "acceptorControllerData", + internalType: "bytes", + type: "bytes", + }, + ], + }, + ], + name: "encodeProposalData", + outputs: [{ name: "", internalType: "bytes", type: "bytes" }], + stateMutability: "pure", + }, + { + type: "function", + inputs: [ + { name: "creditAddress", internalType: "address", type: "address" }, + { name: "collateralId", internalType: "uint256", type: "uint256" }, + { name: "token0Denominator", internalType: "bool", type: "bool" }, + { + name: "feedIntermediaryDenominations", + internalType: "address[]", + type: "address[]", + }, + { name: "feedInvertFlags", internalType: "bool[]", type: "bool[]" }, + { name: "loanToValue", internalType: "uint256", type: "uint256" }, + ], + name: "getCreditAmount", + outputs: [{ name: "", internalType: "uint256", type: "uint256" }], + stateMutability: "view", + }, + { + type: "function", + inputs: [ + { + name: "multiproposal", + internalType: "struct PWNSimpleLoanProposal.Multiproposal", + type: "tuple", + components: [ + { + name: "multiproposalMerkleRoot", + internalType: "bytes32", + type: "bytes32", + }, + ], + }, + ], + name: "getMultiproposalHash", + outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], + stateMutability: "view", + }, + { + type: "function", + inputs: [ + { + name: "proposal", + internalType: "struct PWNSimpleLoanUniswapV3LPSetProposal.Proposal", + type: "tuple", + components: [ + { name: "tokenAAllowlist", internalType: "address[]", type: "address[]" }, + { name: "tokenBAllowlist", internalType: "address[]", type: "address[]" }, + { name: "creditAddress", internalType: "address", type: "address" }, + { + name: "feedIntermediaryDenominations", + internalType: "address[]", + type: "address[]", + }, + { name: "feedInvertFlags", internalType: "bool[]", type: "bool[]" }, + { name: "loanToValue", internalType: "uint256", type: "uint256" }, + { name: "minCreditAmount", internalType: "uint256", type: "uint256" }, + { + name: "availableCreditLimit", + internalType: "uint256", + type: "uint256", + }, + { name: "utilizedCreditId", internalType: "bytes32", type: "bytes32" }, + { + name: "fixedInterestAmount", + internalType: "uint256", + type: "uint256", + }, + { + name: "accruingInterestAPR", + internalType: "uint24", + type: "uint24", + }, + { name: "durationOrDate", internalType: "uint32", type: "uint32" }, + { name: "expiration", internalType: "uint40", type: "uint40" }, + { + name: "acceptorController", + internalType: "address", + type: "address", + }, + { + name: "acceptorControllerData", + internalType: "bytes", + type: "bytes", + }, + { name: "proposer", internalType: "address", type: "address" }, + { name: "proposerSpecHash", internalType: "bytes32", type: "bytes32" }, + { name: "isOffer", internalType: "bool", type: "bool" }, + { + name: "refinancingLoanId", + internalType: "uint256", + type: "uint256", + }, + { name: "nonceSpace", internalType: "uint256", type: "uint256" }, + { name: "nonce", internalType: "uint256", type: "uint256" }, + { name: "loanContract", internalType: "address", type: "address" }, + ], + }, + ], + name: "getProposalHash", + outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], + stateMutability: "view", + }, + { + type: "function", + inputs: [], + name: "hub", + outputs: [{ name: "", internalType: "contract PWNHub", type: "address" }], + stateMutability: "view", + }, + { + type: "function", + inputs: [ + { + name: "proposal", + internalType: "struct PWNSimpleLoanUniswapV3LPSetProposal.Proposal", + type: "tuple", + components: [ + { name: "tokenAAllowlist", internalType: "address[]", type: "address[]" }, + { name: "tokenBAllowlist", internalType: "address[]", type: "address[]" }, + { name: "creditAddress", internalType: "address", type: "address" }, + { + name: "feedIntermediaryDenominations", + internalType: "address[]", + type: "address[]", + }, + { name: "feedInvertFlags", internalType: "bool[]", type: "bool[]" }, + { name: "loanToValue", internalType: "uint256", type: "uint256" }, + { name: "minCreditAmount", internalType: "uint256", type: "uint256" }, + { + name: "availableCreditLimit", + internalType: "uint256", + type: "uint256", + }, + { name: "utilizedCreditId", internalType: "bytes32", type: "bytes32" }, + { + name: "fixedInterestAmount", + internalType: "uint256", + type: "uint256", + }, + { + name: "accruingInterestAPR", + internalType: "uint24", + type: "uint24", + }, + { name: "durationOrDate", internalType: "uint32", type: "uint32" }, + { name: "expiration", internalType: "uint40", type: "uint40" }, + { + name: "acceptorController", + internalType: "address", + type: "address", + }, + { + name: "acceptorControllerData", + internalType: "bytes", + type: "bytes", + }, + { name: "proposer", internalType: "address", type: "address" }, + { name: "proposerSpecHash", internalType: "bytes32", type: "bytes32" }, + { name: "isOffer", internalType: "bool", type: "bool" }, + { + name: "refinancingLoanId", + internalType: "uint256", + type: "uint256", + }, + { name: "nonceSpace", internalType: "uint256", type: "uint256" }, + { name: "nonce", internalType: "uint256", type: "uint256" }, + { name: "loanContract", internalType: "address", type: "address" }, + ], + }, + ], + name: "makeProposal", + outputs: [{ name: "proposalHash", internalType: "bytes32", type: "bytes32" }], + stateMutability: "nonpayable", + }, + { + type: "function", + inputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], + name: "proposalsMade", + outputs: [{ name: "", internalType: "bool", type: "bool" }], + stateMutability: "view", + }, + { + type: "function", + inputs: [ + { name: "nonceSpace", internalType: "uint256", type: "uint256" }, + { name: "nonce", internalType: "uint256", type: "uint256" }, + ], + name: "revokeNonce", + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + inputs: [], + name: "revokedNonce", + outputs: [ + { name: "", internalType: "contract PWNRevokedNonce", type: "address" }, + ], + stateMutability: "view", + }, + { + type: "function", + inputs: [], + name: "uniswapNFTPositionManager", + outputs: [ + { + name: "", + internalType: "contract INonfungiblePositionManager", + type: "address", + }, + ], + stateMutability: "view", + }, + { + type: "function", + inputs: [], + name: "uniswapV3Factory", + outputs: [{ name: "", internalType: "address", type: "address" }], + stateMutability: "view", + }, + { + type: "function", + inputs: [], + name: "utilizedCredit", + outputs: [ + { name: "", internalType: "contract PWNUtilizedCredit", type: "address" }, + ], + stateMutability: "view", + }, + ] +] as const; + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // PWNSimpleLoanElasticChainlinkProposal ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/packages/v1-core/src/models/proposals/proposal-base.ts b/packages/v1-core/src/models/proposals/proposal-base.ts index efd86f7c..ba64e1b1 100644 --- a/packages/v1-core/src/models/proposals/proposal-base.ts +++ b/packages/v1-core/src/models/proposals/proposal-base.ts @@ -16,6 +16,7 @@ export enum ProposalType { DutchAuction = "pwn_contracts.v1_3simpleloandutchauctionproposal", Simple = "pwn_contracts.v1_3simpleloansimpleproposal", ChainLink = "pwn_contracts.v1_3simpleloanelasticchainlinkproposal", + UniswapV3LpSet = "pwn_contracts.v1_4simpleloanuniswapv3lpsetproposal", // TODO: check if this is correct } export interface IProposalMisc { @@ -182,6 +183,29 @@ export interface IOracleProposalBase type: ProposalType.ChainLink; } +export interface IUniswapV3LpSetProposalBase extends Omit { + type: ProposalType.UniswapV3LpSet; + + /** + * List of assets that can be used in LP pair as a tokenA + */ + tokenAAllowlist: AddressString[]; + + /** + * List of assets that can be used in LP pair as a tokenB + */ + tokenBAllowlist: AddressString[]; + + /** + * UniswapV3LpSetProposal is always lending offer + */ + isOffer: true; + + // TODO: remove this after V1.4 is implemented + acceptorController: AddressString; + acceptorControllerData: Hex; +} + interface IBaseFixedProposal { /** * Amount of tokens used as a collateral, in case of ERC721 should be 0. diff --git a/packages/v1-core/src/models/proposals/uniswap-v3-lp-set-proposal.ts b/packages/v1-core/src/models/proposals/uniswap-v3-lp-set-proposal.ts new file mode 100644 index 00000000..72b53577 --- /dev/null +++ b/packages/v1-core/src/models/proposals/uniswap-v3-lp-set-proposal.ts @@ -0,0 +1,134 @@ +import { AddressString, Hex, MultiTokenCategory, SupportedChain } from "@pwndao/sdk-core"; +import { ProposalType, type IUniswapV3LpSetProposalBase } from "./proposal-base.js"; + +export class UniswapV3LpSetProposal implements IUniswapV3LpSetProposalBase { + type = ProposalType.UniswapV3LpSet as const; + + static ERC712_TYPES = { + Proposal: [ + { name: "tokenAAllowlist", type: "address[]" }, + { name: "tokenBAllowlist", type: "address[]" }, + { name: "creditAddress", type: "address" }, + { name: "feedIntermediaryDenominations", type: "address[]" }, + { name: "feedInvertFlags", type: "bool[]" }, + { name: "loanToValue", type: "uint256" }, + { name: "minCreditAmount", type: "uint256" }, + { name: "availableCreditLimit", type: "uint256" }, + { name: "utilizedCreditId", type: "bytes32" }, + { name: "fixedInterestAmount", type: "uint256" }, + { name: "accruingInterestAPR", type: "uint24" }, + { name: "durationOrDate", type: "uint32" }, + { name: "expiration", type: "uint40" }, + { name: "acceptorController", type: "address" }, + { name: "acceptorControllerData", type: "bytes" }, + { name: "proposer", type: "address" }, + { name: "proposerSpecHash", type: "bytes32" }, + { name: "isOffer", type: "bool" }, + { name: "refinancingLoanId", type: "uint256" }, + { name: "nonceSpace", type: "uint256" }, + { name: "nonce", type: "uint256" }, + { name: "loanContract", type: "address" }, + ], + }; + + constructor( + proposal: Omit, + chainId: SupportedChain, + ) { + this.chainId = chainId; + this.collateralId = proposal.collateralId; + this.collateralAddress = proposal.collateralAddress; + this.checkCollateralStateFingerprint = proposal.checkCollateralStateFingerprint; + this.collateralStateFingerprint = proposal.collateralStateFingerprint; + this.collateralCategory = proposal.collateralCategory; + this.sourceOfFunds = proposal.sourceOfFunds; + this.allowedAcceptor = proposal.allowedAcceptor; + this.tokenAAllowlist = proposal.tokenAAllowlist; + this.tokenBAllowlist = proposal.tokenBAllowlist; + this.creditAddress = proposal.creditAddress; + this.feedIntermediaryDenominations = proposal.feedIntermediaryDenominations; + this.feedInvertFlags = proposal.feedInvertFlags; + this.loanToValue = proposal.loanToValue; + this.minCreditAmount = proposal.minCreditAmount; + this.availableCreditLimit = proposal.availableCreditLimit; + this.utilizedCreditId = proposal.utilizedCreditId; + this.fixedInterestAmount = proposal.fixedInterestAmount; + this.accruingInterestAPR = proposal.accruingInterestAPR; + this.durationOrDate = proposal.durationOrDate; + this.expiration = proposal.expiration; + this.acceptorController = proposal.acceptorController; + this.acceptorControllerData = proposal.acceptorControllerData; + this.proposer = proposal.proposer; + this.proposerSpecHash = proposal.proposerSpecHash; + this.isOffer = proposal.isOffer; + this.refinancingLoanId = proposal.refinancingLoanId; + this.nonceSpace = proposal.nonceSpace; + this.nonce = proposal.nonce; + this.loanContract = proposal.loanContract; + } + + createProposalStruct(): any { + return { + collateralCategory: this.collateralCategory, + collateralAddress: this.collateralAddress, + collateralId: this.collateralId, + checkCollateralStateFingerprint: this.checkCollateralStateFingerprint, + collateralStateFingerprint: this.collateralStateFingerprint, + + tokenAAllowlist: this.tokenAAllowlist, + tokenBAllowlist: this.tokenBAllowlist, + creditAddress: this.creditAddress, + feedIntermediaryDenominations: this.feedIntermediaryDenominations, + feedInvertFlags: this.feedInvertFlags, + loanToValue: this.loanToValue, + minCreditAmount: this.minCreditAmount, + availableCreditLimit: this.availableCreditLimit, + utilizedCreditId: this.utilizedCreditId, + fixedInterestAmount: this.fixedInterestAmount, + accruingInterestAPR: Number(this.accruingInterestAPR), + durationOrDate: Number(this.durationOrDate), + expiration: this.expiration, + acceptorController: this.acceptorController, + acceptorControllerData: this.acceptorControllerData, + proposer: this.proposer, + proposerSpecHash: this.proposerSpecHash, + isOffer: true, + refinancingLoanId: 0n, + nonceSpace: this.nonceSpace, + nonce: this.nonce, + loanContract: this.loanContract + } + } + + collateralId: bigint; + collateralAddress: AddressString; + checkCollateralStateFingerprint: boolean; + collateralStateFingerprint: Hex; + collateralCategory: MultiTokenCategory; + sourceOfFunds: AddressString | null; + allowedAcceptor: AddressString; + chainId: SupportedChain; + + tokenAAllowlist: AddressString[]; + tokenBAllowlist: AddressString[]; + creditAddress: AddressString; + feedIntermediaryDenominations: AddressString[]; + feedInvertFlags: boolean[]; + loanToValue: bigint; + minCreditAmount: bigint; + availableCreditLimit: bigint; + utilizedCreditId: Hex; + fixedInterestAmount: bigint; + accruingInterestAPR: number; + durationOrDate: number; + expiration: number; + acceptorController: AddressString; + acceptorControllerData: Hex; + proposer: AddressString; + proposerSpecHash: Hex; + isOffer: true; + refinancingLoanId: bigint; + nonceSpace: bigint; + nonce: bigint; + loanContract: AddressString; +} \ No newline at end of file diff --git a/packages/v1-core/src/models/strategies/types.ts b/packages/v1-core/src/models/strategies/types.ts index 60df271f..41ab9b4f 100644 --- a/packages/v1-core/src/models/strategies/types.ts +++ b/packages/v1-core/src/models/strategies/types.ts @@ -9,6 +9,7 @@ import type { import type { CreateElasticProposalParams } from "../../factories/create-elastic-proposal.js"; import type { ChainLinkProposal } from "../proposals/chainlink-proposal.js"; import type { ElasticProposal } from "../proposals/elastic-proposal.js"; +import type { UniswapV3LpSetProposal } from "../proposals/uniswap-v3-lp-set-proposal.js"; import type { IElasticProposalBase, IOracleProposalBase, @@ -78,7 +79,7 @@ export type Strategy = { }; }; -export type Proposal = ElasticProposal | ChainLinkProposal; +export type Proposal = ElasticProposal | ChainLinkProposal | UniswapV3LpSetProposal; export type ProposalWithHash = Proposal & { hash: Hex; diff --git a/packages/v1-core/src/structs.ts b/packages/v1-core/src/structs.ts index b76b277a..385945db 100644 --- a/packages/v1-core/src/structs.ts +++ b/packages/v1-core/src/structs.ts @@ -6,6 +6,7 @@ import type { pwnSimpleLoanElasticProposalAbi, pwnSimpleLoanListProposalAbi, pwnSimpleLoanSimpleProposalAbi, + pwnSimpleLoanUniswapV3LPSetProposalAbi, } from "./generated.js"; // V1.3 @@ -50,3 +51,11 @@ export type V1_3SimpleLoanElasticChainlinkProposalStruct = AbiParameterToPrimitiveType< _V1_3SimpleLoanElasticChainlinkProposalEncodeFn["inputs"][0] >; + +type _V1_4SimpleLoanUniswapV3LpSetProposalEncodeFn = ExtractAbiFunction< + typeof pwnSimpleLoanUniswapV3LPSetProposalAbi[0], + "encodeProposalData" +>; +export type V1_4SimpleLoanUniswapV3LpSetProposalStruct = AbiParameterToPrimitiveType< + _V1_4SimpleLoanUniswapV3LpSetProposalEncodeFn["inputs"][0] +>; \ No newline at end of file From 0c0bb1d7654ae543f3a6154b77920b3d92f8b335 Mon Sep 17 00:00:00 2001 From: tohrxyz Date: Thu, 1 May 2025 15:32:09 +0200 Subject: [PATCH 02/19] wip: dummy versions of univ3lpset contract and factory --- packages/v1-core/src/actions/types.ts | 3 + .../uniswap-v3-lp-set-proposal-contract.ts | 81 +++++++++++++++++++ .../create-uniswap-v3-lp-set-proposal.ts | 8 ++ 3 files changed, 92 insertions(+) create mode 100644 packages/v1-core/src/contracts/uniswap-v3-lp-set-proposal-contract.ts create mode 100644 packages/v1-core/src/factories/create-uniswap-v3-lp-set-proposal.ts diff --git a/packages/v1-core/src/actions/types.ts b/packages/v1-core/src/actions/types.ts index b01f1820..8d9180ec 100644 --- a/packages/v1-core/src/actions/types.ts +++ b/packages/v1-core/src/actions/types.ts @@ -11,6 +11,9 @@ export const proposalTypes = { [ProposalType.Simple]: () => { throw new Error("Not implemented"); }, + [ProposalType.UniswapV3LpSet]: () => { + throw new Error("Not implemented"); + }, }; export type ImplementedProposalTypes = { diff --git a/packages/v1-core/src/contracts/uniswap-v3-lp-set-proposal-contract.ts b/packages/v1-core/src/contracts/uniswap-v3-lp-set-proposal-contract.ts new file mode 100644 index 00000000..a00fc74b --- /dev/null +++ b/packages/v1-core/src/contracts/uniswap-v3-lp-set-proposal-contract.ts @@ -0,0 +1,81 @@ +import { UniswapV3LpSetProposal } from 'src/models/proposals/uniswap-v3-lp-set-proposal.js' +import { + BaseProposalContract, + IServerAPI, + ProposalWithHash, + ProposalWithSignature, + type IProposalContract +} from '../index.js' +import { Hex } from '@pwndao/sdk-core'; + +export interface IProposalUniswapV3LpSetContract + extends IProposalContract { + // TODO: something? maybe getLPPoolValue ? +} + +export class UniswapV3LpSetProposalContract + extends BaseProposalContract + implements IProposalUniswapV3LpSetContract { + // TODO: something? maybe getLPPoolValue ? + + + async getProposalHash(proposal: UniswapV3LpSetProposal): Promise { + console.warn( + "UniswapV3LpSetProposalContract.getProposalHash is not implemented", + proposal, + ); + // TODO: Implement actual hash calculation using EIP-712 logic + // This will likely involve calling a read method on the corresponding proposal contract + // or using viem's hashTypedData locally. See ChainLinkProposalContract.getProposalHash. + throw new Error( + "Method UniswapV3LpSetProposalContract.getProposalHash not implemented.", + ); + } + + async createProposal( + proposal: UniswapV3LpSetProposal, + deps: { persistProposal: IServerAPI["post"]["persistProposal"] }, + ): Promise { + console.warn( + "UniswapV3LpSetProposalContract.createProposal is not implemented", + proposal, + deps, + ); + // TODO: Implement actual proposal creation logic. + // This involves signing the proposal (using getProposalHash and signProposal) + // and potentially persisting it via the provided deps.persistProposal. + // See ChainLinkProposalContract for an example implementation. + throw new Error( + "Method UniswapV3LpSetProposalContract.createProposal not implemented.", + ); + } + + async createOnChainProposal( + proposal: UniswapV3LpSetProposal, + ): Promise { + console.warn( + "UniswapV3LpSetProposalContract.createOnChainProposal is not implemented", + proposal, + ); + // TODO: Implement actual on-chain proposal creation. + // This involves sending a transaction to the proposal contract's `makeProposal` function. + // See ChainLinkProposalContract for an example implementation. + throw new Error( + "Method UniswapV3LpSetProposalContract.createOnChainProposal not implemented.", + ); + } + + async createMultiProposal( + proposals: ProposalWithHash[], + ): Promise { + console.warn( + "UniswapV3LpSetProposalContract.createMultiProposal is not implemented", + proposals, + ); + // TODO: Implement actual multi-proposal creation using Merkle tree logic + // See ChainLinkProposalContract for an example implementation. + throw new Error( + "Method UniswapV3LpSetProposalContract.createMultiProposal not implemented.", + ); + } +} \ No newline at end of file diff --git a/packages/v1-core/src/factories/create-uniswap-v3-lp-set-proposal.ts b/packages/v1-core/src/factories/create-uniswap-v3-lp-set-proposal.ts new file mode 100644 index 00000000..a52904ea --- /dev/null +++ b/packages/v1-core/src/factories/create-uniswap-v3-lp-set-proposal.ts @@ -0,0 +1,8 @@ +import type { IServerAPI } from "./types.js"; + +export interface IProposalChainLinkAPIDeps { + persistProposal: IServerAPI["post"]["persistProposal"]; + persistProposals: IServerAPI["post"]["persistProposals"]; + updateNonces: IServerAPI["post"]["updateNonce"]; +} + From db0f4ed98aa66af9389688fa535300c4f0f0a3b1 Mon Sep 17 00:00:00 2001 From: tohrxyz Date: Thu, 1 May 2025 17:34:40 +0200 Subject: [PATCH 03/19] feat: types, contract methods, fix abi, address mapping etc. --- apps/local | 1 - contracts/solidity | 2 +- packages/core/src/addresses.ts | 20 +- packages/core/src/chains.ts | 2 + packages/core/src/utils.ts | 10 + .../uniswap-v3-lp-set-proposal-contract.ts | 88 +- packages/v1-core/src/generated.ts | 46846 ++++++++++------ packages/v1-core/src/structs.ts | 4 +- packages/v1-core/wagmi.config.ts | 4 +- 9 files changed, 30212 insertions(+), 16765 deletions(-) delete mode 160000 apps/local diff --git a/apps/local b/apps/local deleted file mode 160000 index a4b70ab8..00000000 --- a/apps/local +++ /dev/null @@ -1 +0,0 @@ -Subproject commit a4b70ab823dc305df2fcf928d9155f923e13056f diff --git a/contracts/solidity b/contracts/solidity index 318e5f19..38d94911 160000 --- a/contracts/solidity +++ b/contracts/solidity @@ -1 +1 @@ -Subproject commit 318e5f19eda4e9d1616a9c3d975a84c5dfd768cf +Subproject commit 38d9491121b8f512da5578b80ef34e6b543b0470 diff --git a/packages/core/src/addresses.ts b/packages/core/src/addresses.ts index 84b41dbc..c7aca0b6 100644 --- a/packages/core/src/addresses.ts +++ b/packages/core/src/addresses.ts @@ -1,5 +1,5 @@ import { SupportedChain } from "./chains.js"; -import type { V1_2_SUPPORTED_CHAINS, V1_3_SUPPORTED_CHAINS } from "./chains.js"; +import type { V1_2_SUPPORTED_CHAINS, V1_3_SUPPORTED_CHAINS, V1_4_SUPPORTED_CHAINS } from "./chains.js"; import { ZERO_ADDRESS } from "./constants.js"; import type { AddressString } from "./types.js"; @@ -23,6 +23,10 @@ type V1_3_Contracts = ContractAddresses & { utilizedCredit: AddressString; }; +type V1_4_Contracts = Omit & { + pwnSimpleLoanUniswapV3LpSetProposal: AddressString; +}; + // starknet has no tokenBundlerContract by now type V1_2_StarknetContracts = Omit< ContractAddresses, @@ -67,6 +71,12 @@ export const PWN_V1_3_CONTRACTS: Omit = { + ...PWN_V1_3_CONTRACTS, + pwnSimpleLoanUniswapV3LpSetProposal: "0x4D067c921AC90cC4b1e962ea0e743Ef8d85Fb0E9", + pwnSimpleLoanElasticChainlinkProposal: "0x39fd308D651F5add5A4826D12Bf92d9D91E732AC", +}; + // Mainnet contracts const MAINNET_CONTRACTS: V1_3_Contracts = { ...PWN_V1_3_CONTRACTS, @@ -205,7 +215,15 @@ export const V1_3_CHAIN_TO_ADDRESSES_MAP: Record< [SupportedChain.UnichainSepolia]: UNICHAIN_SEPOLIA_CONTRACTS, }; +export const V1_4_CHAIN_TO_ADDRESSES_MAP: Record< + V1_4_SUPPORTED_CHAINS, + V1_4_Contracts +> = { + [SupportedChain.Sepolia]: PWN_V1_4_CONTRACTS, +}; + export const CHAIN_TO_ADDRESSES_MAP = { ...V1_2_CHAIN_TO_ADDRESSES_MAP, ...V1_3_CHAIN_TO_ADDRESSES_MAP, + ...V1_4_CHAIN_TO_ADDRESSES_MAP, }; diff --git a/packages/core/src/chains.ts b/packages/core/src/chains.ts index 6352bf22..e4029162 100644 --- a/packages/core/src/chains.ts +++ b/packages/core/src/chains.ts @@ -39,3 +39,5 @@ export type V1_3_SUPPORTED_CHAINS = Exclude< SupportedChain, V1_2_SUPPORTED_CHAINS >; + +export type V1_4_SUPPORTED_CHAINS = SupportedChain.Sepolia; diff --git a/packages/core/src/utils.ts b/packages/core/src/utils.ts index f0537f1c..5612bcbd 100644 --- a/packages/core/src/utils.ts +++ b/packages/core/src/utils.ts @@ -42,6 +42,16 @@ export const getChainLinkProposalContractAddress = ( return CHAIN_TO_ADDRESSES_MAP[chainId].pwnSimpleLoanElasticChainlinkProposal; }; +export const getUniswapV3LpSetProposalContractAddress = ( + chainId: SupportedChain, +) => { + if (chainId === SupportedChain.Sepolia) { + return CHAIN_TO_ADDRESSES_MAP[chainId].pwnSimpleLoanUniswapV3LpSetProposal; + } + + throw new Error(`UniswapV3LpSetProposalContractAddress not deployed on chain ${chainId}`); +}; + export const typeSafeObjectKeys = (obj: T) => { return Object.keys(obj) as Array } diff --git a/packages/v1-core/src/contracts/uniswap-v3-lp-set-proposal-contract.ts b/packages/v1-core/src/contracts/uniswap-v3-lp-set-proposal-contract.ts index a00fc74b..a7f42bfe 100644 --- a/packages/v1-core/src/contracts/uniswap-v3-lp-set-proposal-contract.ts +++ b/packages/v1-core/src/contracts/uniswap-v3-lp-set-proposal-contract.ts @@ -4,9 +4,13 @@ import { IServerAPI, ProposalWithHash, ProposalWithSignature, + readPwnSimpleLoanUniswapV3LpSetProposalGetProposalHash, + writePwnSimpleLoanUniswapV3LpSetProposalMakeProposal, type IProposalContract } from '../index.js' -import { Hex } from '@pwndao/sdk-core'; +import { getUniswapV3LpSetProposalContractAddress, Hex } from '@pwndao/sdk-core'; +import { Address } from 'viem'; +import { getAccount } from '@wagmi/core'; export interface IProposalUniswapV3LpSetContract extends IProposalContract { @@ -16,22 +20,47 @@ export interface IProposalUniswapV3LpSetContract export class UniswapV3LpSetProposalContract extends BaseProposalContract implements IProposalUniswapV3LpSetContract { - // TODO: something? maybe getLPPoolValue ? async getProposalHash(proposal: UniswapV3LpSetProposal): Promise { - console.warn( - "UniswapV3LpSetProposalContract.getProposalHash is not implemented", - proposal, - ); - // TODO: Implement actual hash calculation using EIP-712 logic - // This will likely involve calling a read method on the corresponding proposal contract - // or using viem's hashTypedData locally. See ChainLinkProposalContract.getProposalHash. - throw new Error( - "Method UniswapV3LpSetProposalContract.getProposalHash not implemented.", - ); + const data = await readPwnSimpleLoanUniswapV3LpSetProposalGetProposalHash( + this.config, + { + address: getUniswapV3LpSetProposalContractAddress(proposal.chainId), + chainId: proposal.chainId, + args: [proposal.createProposalStruct()], + } + ) + + return data; } + async signProposal( + proposal: UniswapV3LpSetProposal, + ): Promise { + const hash = await this.getProposalHash(proposal); + + const domain = { + name: "PWNSimpleLoanUniswapV3LpSetProposal", + version: "1.0", + chainId: proposal.chainId, + verifyingContract: getUniswapV3LpSetProposalContractAddress(proposal.chainId), + } + + const signature = await this.signWithSafeWalletSupport( + domain, + UniswapV3LpSetProposal.ERC712_TYPES, + "Proposal", + proposal.createProposalStruct(), + ) + + return Object.assign(proposal, { + signature, + hash, + isOnChain: true, + }) as ProposalWithSignature; + } + async createProposal( proposal: UniswapV3LpSetProposal, deps: { persistProposal: IServerAPI["post"]["persistProposal"] }, @@ -53,19 +82,32 @@ export class UniswapV3LpSetProposalContract async createOnChainProposal( proposal: UniswapV3LpSetProposal, ): Promise { - console.warn( - "UniswapV3LpSetProposalContract.createOnChainProposal is not implemented", - proposal, - ); - // TODO: Implement actual on-chain proposal creation. - // This involves sending a transaction to the proposal contract's `makeProposal` function. - // See ChainLinkProposalContract for an example implementation. - throw new Error( - "Method UniswapV3LpSetProposalContract.createOnChainProposal not implemented.", - ); + const account = getAccount(this.config); + const isSafe = account?.address + ? await this.safeService.isSafeAddress(account.address as Address) + : false; + + const proposalHash = await writePwnSimpleLoanUniswapV3LpSetProposalMakeProposal( + this.config, + { + address: getUniswapV3LpSetProposalContractAddress(proposal.chainId), + chainId: proposal.chainId, + args: [proposal.createProposalStruct()], + } + ) + + if (isSafe) { + await this.safeService.waitForTransaction(proposalHash); + } + + return Object.assign(proposal, { + signature: null, + hash: proposalHash, + isOnChain: true, + }) as ProposalWithSignature; } - async createMultiProposal( + async createMultiProposal( proposals: ProposalWithHash[], ): Promise { console.warn( diff --git a/packages/v1-core/src/generated.ts b/packages/v1-core/src/generated.ts index 791e7635..2a6d3d55 100644 --- a/packages/v1-core/src/generated.ts +++ b/packages/v1-core/src/generated.ts @@ -1,12961 +1,22336 @@ import { - createReadContract, - createSimulateContract, - createWatchContractEvent, - createWriteContract, -} from "@wagmi/core/codegen"; + createReadContract, + createWriteContract, + createSimulateContract, + createWatchContractEvent, +} from 'wagmi/codegen' ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // AccessControl ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const accessControlAbi = [ - { - type: "function", - inputs: [], - name: "DEFAULT_ADMIN_ROLE", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "role", internalType: "bytes32", type: "bytes32" }], - name: "getRoleAdmin", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "role", internalType: "bytes32", type: "bytes32" }, - { name: "account", internalType: "address", type: "address" }, - ], - name: "grantRole", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "role", internalType: "bytes32", type: "bytes32" }, - { name: "account", internalType: "address", type: "address" }, - ], - name: "hasRole", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "role", internalType: "bytes32", type: "bytes32" }, - { name: "account", internalType: "address", type: "address" }, - ], - name: "renounceRole", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "role", internalType: "bytes32", type: "bytes32" }, - { name: "account", internalType: "address", type: "address" }, - ], - name: "revokeRole", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "interfaceId", internalType: "bytes4", type: "bytes4" }], - name: "supportsInterface", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "role", internalType: "bytes32", type: "bytes32", indexed: true }, - { - name: "previousAdminRole", - internalType: "bytes32", - type: "bytes32", - indexed: true, - }, - { - name: "newAdminRole", - internalType: "bytes32", - type: "bytes32", - indexed: true, - }, - ], - name: "RoleAdminChanged", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "role", internalType: "bytes32", type: "bytes32", indexed: true }, - { - name: "account", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "sender", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "RoleGranted", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "role", internalType: "bytes32", type: "bytes32", indexed: true }, - { - name: "account", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "sender", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "RoleRevoked", - }, -] as const; + { + type: 'function', + inputs: [], + name: 'DEFAULT_ADMIN_ROLE', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'role', internalType: 'bytes32', type: 'bytes32' }], + name: 'getRoleAdmin', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'role', internalType: 'bytes32', type: 'bytes32' }, + { name: 'account', internalType: 'address', type: 'address' }, + ], + name: 'grantRole', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'role', internalType: 'bytes32', type: 'bytes32' }, + { name: 'account', internalType: 'address', type: 'address' }, + ], + name: 'hasRole', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'role', internalType: 'bytes32', type: 'bytes32' }, + { name: 'account', internalType: 'address', type: 'address' }, + ], + name: 'renounceRole', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'role', internalType: 'bytes32', type: 'bytes32' }, + { name: 'account', internalType: 'address', type: 'address' }, + ], + name: 'revokeRole', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'interfaceId', internalType: 'bytes4', type: 'bytes4' }], + name: 'supportsInterface', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'role', internalType: 'bytes32', type: 'bytes32', indexed: true }, + { + name: 'previousAdminRole', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + { + name: 'newAdminRole', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + ], + name: 'RoleAdminChanged', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'role', internalType: 'bytes32', type: 'bytes32', indexed: true }, + { + name: 'account', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'sender', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'RoleGranted', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'role', internalType: 'bytes32', type: 'bytes32', indexed: true }, + { + name: 'account', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'sender', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'RoleRevoked', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Chainlink ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const chainlinkAbi = [ - { - type: "function", - inputs: [], - name: "ETH", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "L2_GRACE_PERIOD", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "MAX_CHAINLINK_FEED_PRICE_AGE", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "error", - inputs: [ - { name: "feed", internalType: "address", type: "address" }, - { name: "updatedAt", internalType: "uint256", type: "uint256" }, - ], - name: "ChainlinkFeedPriceTooOld", - }, - { - type: "error", - inputs: [ - { name: "feed", internalType: "address", type: "address" }, - { name: "price", internalType: "int256", type: "int256" }, - { name: "updatedAt", internalType: "uint256", type: "uint256" }, - ], - name: "ChainlinkFeedReturnedNegativePrice", - }, - { type: "error", inputs: [], name: "ChainlinkInvalidInputLenghts" }, - { - type: "error", - inputs: [ - { name: "timeSinceUp", internalType: "uint256", type: "uint256" }, - { name: "gracePeriod", internalType: "uint256", type: "uint256" }, - ], - name: "GracePeriodNotOver", - }, - { type: "error", inputs: [], name: "L2SequencerDown" }, -] as const; + { + type: 'function', + inputs: [], + name: 'ETH', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'L2_GRACE_PERIOD', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MAX_CHAINLINK_FEED_PRICE_AGE', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'error', + inputs: [ + { name: 'feed', internalType: 'address', type: 'address' }, + { name: 'updatedAt', internalType: 'uint256', type: 'uint256' }, + ], + name: 'ChainlinkFeedPriceTooOld', + }, + { + type: 'error', + inputs: [ + { name: 'feed', internalType: 'address', type: 'address' }, + { name: 'price', internalType: 'int256', type: 'int256' }, + { name: 'updatedAt', internalType: 'uint256', type: 'uint256' }, + ], + name: 'ChainlinkFeedReturnedNegativePrice', + }, + { type: 'error', inputs: [], name: 'ChainlinkInvalidInputLenghts' }, + { + type: 'error', + inputs: [ + { name: 'timeSinceUp', internalType: 'uint256', type: 'uint256' }, + { name: 'gracePeriod', internalType: 'uint256', type: 'uint256' }, + ], + name: 'GracePeriodNotOver', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'uint256', type: 'uint256' }, + { name: 'limit', internalType: 'uint256', type: 'uint256' }, + ], + name: 'IntermediaryDenominationsOutOfBounds', + }, + { type: 'error', inputs: [], name: 'L2SequencerDown' }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // ChainlinkDenominations ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const chainlinkDenominationsAbi = [ - { - type: "function", - inputs: [], - name: "BTC", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "ETH", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "USD", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, -] as const; + { + type: 'function', + inputs: [], + name: 'BTC', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'ETH', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'USD', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // ChainlinkHarness ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const chainlinkHarnessAbi = [ - { - type: "function", - inputs: [ - { - name: "l2SequencerUptimeFeed", - internalType: "contract IChainlinkAggregatorLike", - type: "address", - }, - ], - name: "checkSequencerUptime", - outputs: [], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "feedRegistry", - internalType: "contract IChainlinkFeedRegistryLike", - type: "address", - }, - { name: "currentPrice", internalType: "uint256", type: "uint256" }, - { name: "currentDecimals", internalType: "uint8", type: "uint8" }, - { name: "currentDenomination", internalType: "address", type: "address" }, - { name: "nextDenomination", internalType: "address", type: "address" }, - { name: "nextInvert", internalType: "bool", type: "bool" }, - ], - name: "convertPriceDenomination", - outputs: [ - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint8", type: "uint8" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "feedRegistry", - internalType: "contract IChainlinkFeedRegistryLike", - type: "address", - }, - { name: "creditAsset", internalType: "address", type: "address" }, - { name: "collateralAsset", internalType: "address", type: "address" }, - { - name: "feedIntermediaryDenominations", - internalType: "address[]", - type: "address[]", - }, - { name: "feedInvertFlags", internalType: "bool[]", type: "bool[]" }, - ], - name: "fetchCreditPriceWithCollateralDenomination", - outputs: [ - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint8", type: "uint8" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "feedRegistry", - internalType: "contract IChainlinkFeedRegistryLike", - type: "address", - }, - { name: "asset", internalType: "address", type: "address" }, - { name: "denomination", internalType: "address", type: "address" }, - ], - name: "fetchPrice", - outputs: [ - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint8", type: "uint8" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "price1", internalType: "uint256", type: "uint256" }, - { name: "decimals1", internalType: "uint8", type: "uint8" }, - { name: "price2", internalType: "uint256", type: "uint256" }, - { name: "decimals2", internalType: "uint8", type: "uint8" }, - ], - name: "syncDecimalsUp", - outputs: [ - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint8", type: "uint8" }, - ], - stateMutability: "pure", - }, - { - type: "error", - inputs: [ - { name: "feed", internalType: "address", type: "address" }, - { name: "updatedAt", internalType: "uint256", type: "uint256" }, - ], - name: "ChainlinkFeedPriceTooOld", - }, - { - type: "error", - inputs: [ - { name: "feed", internalType: "address", type: "address" }, - { name: "price", internalType: "int256", type: "int256" }, - { name: "updatedAt", internalType: "uint256", type: "uint256" }, - ], - name: "ChainlinkFeedReturnedNegativePrice", - }, - { type: "error", inputs: [], name: "ChainlinkInvalidInputLenghts" }, - { - type: "error", - inputs: [ - { name: "timeSinceUp", internalType: "uint256", type: "uint256" }, - { name: "gracePeriod", internalType: "uint256", type: "uint256" }, - ], - name: "GracePeriodNotOver", - }, - { type: "error", inputs: [], name: "L2SequencerDown" }, -] as const; + { + type: 'function', + inputs: [ + { + name: 'feedRegistry', + internalType: 'contract IChainlinkFeedRegistryLike', + type: 'address', + }, + { name: 'baseAsset', internalType: 'address', type: 'address' }, + { name: 'quoteAsset', internalType: 'address', type: 'address' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + ], + name: 'calculatePrice', + outputs: [ + { name: '', internalType: 'uint256', type: 'uint256' }, + { name: '', internalType: 'uint8', type: 'uint8' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'l2SequencerUptimeFeed', + internalType: 'contract IChainlinkAggregatorLike', + type: 'address', + }, + ], + name: 'checkSequencerUptime', + outputs: [], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'config', + internalType: 'struct Chainlink.Config', + type: 'tuple', + components: [ + { + name: 'l2SequencerUptimeFeed', + internalType: 'contract IChainlinkAggregatorLike', + type: 'address', + }, + { + name: 'feedRegistry', + internalType: 'contract IChainlinkFeedRegistryLike', + type: 'address', + }, + { + name: 'maxIntermediaryDenominations', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'weth', internalType: 'address', type: 'address' }, + ], + }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + { name: 'oldDenomination', internalType: 'address', type: 'address' }, + { name: 'newDenomination', internalType: 'address', type: 'address' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + ], + name: 'convertDenomination', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'feedRegistry', + internalType: 'contract IChainlinkFeedRegistryLike', + type: 'address', + }, + { name: 'currentPrice', internalType: 'uint256', type: 'uint256' }, + { name: 'currentDecimals', internalType: 'uint8', type: 'uint8' }, + { name: 'currentDenomination', internalType: 'address', type: 'address' }, + { name: 'nextDenomination', internalType: 'address', type: 'address' }, + { name: 'nextInvert', internalType: 'bool', type: 'bool' }, + ], + name: 'convertPriceDenomination', + outputs: [ + { name: '', internalType: 'uint256', type: 'uint256' }, + { name: '', internalType: 'uint8', type: 'uint8' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'feedRegistry', + internalType: 'contract IChainlinkFeedRegistryLike', + type: 'address', + }, + { name: 'asset', internalType: 'address', type: 'address' }, + { name: 'denomination', internalType: 'address', type: 'address' }, + ], + name: 'fetchPrice', + outputs: [ + { name: '', internalType: 'uint256', type: 'uint256' }, + { name: '', internalType: 'uint8', type: 'uint8' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'price1', internalType: 'uint256', type: 'uint256' }, + { name: 'decimals1', internalType: 'uint8', type: 'uint8' }, + { name: 'price2', internalType: 'uint256', type: 'uint256' }, + { name: 'decimals2', internalType: 'uint8', type: 'uint8' }, + ], + name: 'syncDecimalsUp', + outputs: [ + { name: '', internalType: 'uint256', type: 'uint256' }, + { name: '', internalType: 'uint256', type: 'uint256' }, + { name: '', internalType: 'uint8', type: 'uint8' }, + ], + stateMutability: 'pure', + }, + { + type: 'error', + inputs: [ + { name: 'feed', internalType: 'address', type: 'address' }, + { name: 'updatedAt', internalType: 'uint256', type: 'uint256' }, + ], + name: 'ChainlinkFeedPriceTooOld', + }, + { + type: 'error', + inputs: [ + { name: 'feed', internalType: 'address', type: 'address' }, + { name: 'price', internalType: 'int256', type: 'int256' }, + { name: 'updatedAt', internalType: 'uint256', type: 'uint256' }, + ], + name: 'ChainlinkFeedReturnedNegativePrice', + }, + { type: 'error', inputs: [], name: 'ChainlinkInvalidInputLenghts' }, + { + type: 'error', + inputs: [ + { name: 'timeSinceUp', internalType: 'uint256', type: 'uint256' }, + { name: 'gracePeriod', internalType: 'uint256', type: 'uint256' }, + ], + name: 'GracePeriodNotOver', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'uint256', type: 'uint256' }, + { name: 'limit', internalType: 'uint256', type: 'uint256' }, + ], + name: 'IntermediaryDenominationsOutOfBounds', + }, + { type: 'error', inputs: [], name: 'L2SequencerDown' }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // ContextUpgradeable ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const contextUpgradeableAbi = [ - { - type: "event", - anonymous: false, - inputs: [ - { name: "version", internalType: "uint8", type: "uint8", indexed: false }, - ], - name: "Initialized", - }, -] as const; + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'version', internalType: 'uint8', type: 'uint8', indexed: false }, + ], + name: 'Initialized', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // DSTest ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const dsTestAbi = [ - { - type: "function", - inputs: [], - name: "IS_TEST", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "failed", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "", internalType: "string", type: "string", indexed: false }, - ], - name: "log", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "", internalType: "address", type: "address", indexed: false }, - ], - name: "log_address", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "", internalType: "bytes", type: "bytes", indexed: false }, - ], - name: "log_bytes", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "", internalType: "bytes32", type: "bytes32", indexed: false }, - ], - name: "log_bytes32", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "", internalType: "int256", type: "int256", indexed: false }, - ], - name: "log_int", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "key", internalType: "string", type: "string", indexed: false }, - { name: "val", internalType: "address", type: "address", indexed: false }, - ], - name: "log_named_address", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "key", internalType: "string", type: "string", indexed: false }, - { name: "val", internalType: "bytes", type: "bytes", indexed: false }, - ], - name: "log_named_bytes", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "key", internalType: "string", type: "string", indexed: false }, - { name: "val", internalType: "bytes32", type: "bytes32", indexed: false }, - ], - name: "log_named_bytes32", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "key", internalType: "string", type: "string", indexed: false }, - { name: "val", internalType: "int256", type: "int256", indexed: false }, - { - name: "decimals", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "log_named_decimal_int", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "key", internalType: "string", type: "string", indexed: false }, - { name: "val", internalType: "uint256", type: "uint256", indexed: false }, - { - name: "decimals", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "log_named_decimal_uint", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "key", internalType: "string", type: "string", indexed: false }, - { name: "val", internalType: "int256", type: "int256", indexed: false }, - ], - name: "log_named_int", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "key", internalType: "string", type: "string", indexed: false }, - { name: "val", internalType: "string", type: "string", indexed: false }, - ], - name: "log_named_string", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "key", internalType: "string", type: "string", indexed: false }, - { name: "val", internalType: "uint256", type: "uint256", indexed: false }, - ], - name: "log_named_uint", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "", internalType: "string", type: "string", indexed: false }, - ], - name: "log_string", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "", internalType: "uint256", type: "uint256", indexed: false }, - ], - name: "log_uint", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "", internalType: "bytes", type: "bytes", indexed: false }, - ], - name: "logs", - }, -] as const; + { + type: 'function', + inputs: [], + name: 'IS_TEST', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'failed', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'nonpayable', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: '', internalType: 'string', type: 'string', indexed: false }, + ], + name: 'log', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: '', internalType: 'address', type: 'address', indexed: false }, + ], + name: 'log_address', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: '', internalType: 'bytes', type: 'bytes', indexed: false }, + ], + name: 'log_bytes', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: '', internalType: 'bytes32', type: 'bytes32', indexed: false }, + ], + name: 'log_bytes32', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: '', internalType: 'int256', type: 'int256', indexed: false }, + ], + name: 'log_int', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'key', internalType: 'string', type: 'string', indexed: false }, + { name: 'val', internalType: 'address', type: 'address', indexed: false }, + ], + name: 'log_named_address', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'key', internalType: 'string', type: 'string', indexed: false }, + { name: 'val', internalType: 'bytes', type: 'bytes', indexed: false }, + ], + name: 'log_named_bytes', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'key', internalType: 'string', type: 'string', indexed: false }, + { name: 'val', internalType: 'bytes32', type: 'bytes32', indexed: false }, + ], + name: 'log_named_bytes32', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'key', internalType: 'string', type: 'string', indexed: false }, + { name: 'val', internalType: 'int256', type: 'int256', indexed: false }, + { + name: 'decimals', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'log_named_decimal_int', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'key', internalType: 'string', type: 'string', indexed: false }, + { name: 'val', internalType: 'uint256', type: 'uint256', indexed: false }, + { + name: 'decimals', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'log_named_decimal_uint', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'key', internalType: 'string', type: 'string', indexed: false }, + { name: 'val', internalType: 'int256', type: 'int256', indexed: false }, + ], + name: 'log_named_int', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'key', internalType: 'string', type: 'string', indexed: false }, + { name: 'val', internalType: 'string', type: 'string', indexed: false }, + ], + name: 'log_named_string', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'key', internalType: 'string', type: 'string', indexed: false }, + { name: 'val', internalType: 'uint256', type: 'uint256', indexed: false }, + ], + name: 'log_named_uint', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: '', internalType: 'string', type: 'string', indexed: false }, + ], + name: 'log_string', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: '', internalType: 'uint256', type: 'uint256', indexed: false }, + ], + name: 'log_uint', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: '', internalType: 'bytes', type: 'bytes', indexed: false }, + ], + name: 'logs', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Deployments ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const deploymentsAbi = [ - { - type: "function", - inputs: [], - name: "deploymentsSubpath", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, -] as const; + { + type: 'function', + inputs: [], + name: 'deploymentsSubpath', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // DummyPoolAdapter ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const dummyPoolAdapterAbi = [ - { - type: "function", - inputs: [ - { name: "pool", internalType: "address", type: "address" }, - { name: "", internalType: "address", type: "address" }, - { name: "asset", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "supply", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "pool", internalType: "address", type: "address" }, - { name: "owner", internalType: "address", type: "address" }, - { name: "asset", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "withdraw", - outputs: [], - stateMutability: "nonpayable", - }, -] as const; + { + type: 'function', + inputs: [ + { name: 'pool', internalType: 'address', type: 'address' }, + { name: '', internalType: 'address', type: 'address' }, + { name: 'asset', internalType: 'address', type: 'address' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'supply', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'pool', internalType: 'address', type: 'address' }, + { name: 'owner', internalType: 'address', type: 'address' }, + { name: 'asset', internalType: 'address', type: 'address' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'withdraw', + outputs: [], + stateMutability: 'nonpayable', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // ERC1155 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const erc1155Abi = [ - { - type: "constructor", - inputs: [{ name: "uri_", internalType: "string", type: "string" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "id", internalType: "uint256", type: "uint256" }, - ], - name: "balanceOf", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "accounts", internalType: "address[]", type: "address[]" }, - { name: "ids", internalType: "uint256[]", type: "uint256[]" }, - ], - name: "balanceOfBatch", - outputs: [{ name: "", internalType: "uint256[]", type: "uint256[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "operator", internalType: "address", type: "address" }, - ], - name: "isApprovedForAll", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "ids", internalType: "uint256[]", type: "uint256[]" }, - { name: "amounts", internalType: "uint256[]", type: "uint256[]" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "safeBatchTransferFrom", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "safeTransferFrom", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "operator", internalType: "address", type: "address" }, - { name: "approved", internalType: "bool", type: "bool" }, - ], - name: "setApprovalForAll", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "interfaceId", internalType: "bytes4", type: "bytes4" }], - name: "supportsInterface", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "uri", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "account", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "operator", - internalType: "address", - type: "address", - indexed: true, - }, - { name: "approved", internalType: "bool", type: "bool", indexed: false }, - ], - name: "ApprovalForAll", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "operator", - internalType: "address", - type: "address", - indexed: true, - }, - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - { - name: "ids", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "values", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - ], - name: "TransferBatch", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "operator", - internalType: "address", - type: "address", - indexed: true, - }, - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - { name: "id", internalType: "uint256", type: "uint256", indexed: false }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "TransferSingle", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "value", internalType: "string", type: "string", indexed: false }, - { name: "id", internalType: "uint256", type: "uint256", indexed: true }, - ], - name: "URI", - }, -] as const; + { + type: 'constructor', + inputs: [{ name: 'uri_', internalType: 'string', type: 'string' }], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'account', internalType: 'address', type: 'address' }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + ], + name: 'balanceOf', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'accounts', internalType: 'address[]', type: 'address[]' }, + { name: 'ids', internalType: 'uint256[]', type: 'uint256[]' }, + ], + name: 'balanceOfBatch', + outputs: [{ name: '', internalType: 'uint256[]', type: 'uint256[]' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'account', internalType: 'address', type: 'address' }, + { name: 'operator', internalType: 'address', type: 'address' }, + ], + name: 'isApprovedForAll', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'from', internalType: 'address', type: 'address' }, + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'ids', internalType: 'uint256[]', type: 'uint256[]' }, + { name: 'amounts', internalType: 'uint256[]', type: 'uint256[]' }, + { name: 'data', internalType: 'bytes', type: 'bytes' }, + ], + name: 'safeBatchTransferFrom', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'from', internalType: 'address', type: 'address' }, + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + { name: 'data', internalType: 'bytes', type: 'bytes' }, + ], + name: 'safeTransferFrom', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'operator', internalType: 'address', type: 'address' }, + { name: 'approved', internalType: 'bool', type: 'bool' }, + ], + name: 'setApprovalForAll', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'interfaceId', internalType: 'bytes4', type: 'bytes4' }], + name: 'supportsInterface', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + name: 'uri', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'account', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'operator', + internalType: 'address', + type: 'address', + indexed: true, + }, + { name: 'approved', internalType: 'bool', type: 'bool', indexed: false }, + ], + name: 'ApprovalForAll', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'operator', + internalType: 'address', + type: 'address', + indexed: true, + }, + { name: 'from', internalType: 'address', type: 'address', indexed: true }, + { name: 'to', internalType: 'address', type: 'address', indexed: true }, + { + name: 'ids', + internalType: 'uint256[]', + type: 'uint256[]', + indexed: false, + }, + { + name: 'values', + internalType: 'uint256[]', + type: 'uint256[]', + indexed: false, + }, + ], + name: 'TransferBatch', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'operator', + internalType: 'address', + type: 'address', + indexed: true, + }, + { name: 'from', internalType: 'address', type: 'address', indexed: true }, + { name: 'to', internalType: 'address', type: 'address', indexed: true }, + { name: 'id', internalType: 'uint256', type: 'uint256', indexed: false }, + { + name: 'value', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'TransferSingle', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'value', internalType: 'string', type: 'string', indexed: false }, + { name: 'id', internalType: 'uint256', type: 'uint256', indexed: true }, + ], + name: 'URI', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // ERC165 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const erc165Abi = [ - { - type: "function", - inputs: [{ name: "interfaceId", internalType: "bytes4", type: "bytes4" }], - name: "supportsInterface", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, -] as const; + { + type: 'function', + inputs: [{ name: 'interfaceId', internalType: 'bytes4', type: 'bytes4' }], + name: 'supportsInterface', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // ERC1967Proxy ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const erc1967ProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_logic", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "payable", - }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "previousAdmin", - internalType: "address", - type: "address", - indexed: false, - }, - { - name: "newAdmin", - internalType: "address", - type: "address", - indexed: false, - }, - ], - name: "AdminChanged", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "beacon", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "BeaconUpgraded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "implementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, -] as const; + { + type: 'constructor', + inputs: [ + { name: '_logic', internalType: 'address', type: 'address' }, + { name: '_data', internalType: 'bytes', type: 'bytes' }, + ], + stateMutability: 'payable', + }, + { type: 'fallback', stateMutability: 'payable' }, + { type: 'receive', stateMutability: 'payable' }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'previousAdmin', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'newAdmin', + internalType: 'address', + type: 'address', + indexed: false, + }, + ], + name: 'AdminChanged', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'beacon', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'BeaconUpgraded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'implementation', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'Upgraded', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // ERC1967Upgrade ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const erc1967UpgradeAbi = [ - { - type: "event", - anonymous: false, - inputs: [ - { - name: "previousAdmin", - internalType: "address", - type: "address", - indexed: false, - }, - { - name: "newAdmin", - internalType: "address", - type: "address", - indexed: false, - }, - ], - name: "AdminChanged", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "beacon", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "BeaconUpgraded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "implementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, -] as const; + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'previousAdmin', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'newAdmin', + internalType: 'address', + type: 'address', + indexed: false, + }, + ], + name: 'AdminChanged', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'beacon', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'BeaconUpgraded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'implementation', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'Upgraded', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // ERC20 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const erc20Abi = [ - { - type: "constructor", - inputs: [ - { name: "name_", internalType: "string", type: "string" }, - { name: "symbol_", internalType: "string", type: "string" }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "owner", internalType: "address", type: "address" }, - { name: "spender", internalType: "address", type: "address" }, - ], - name: "allowance", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "approve", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "account", internalType: "address", type: "address" }], - name: "balanceOf", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "decimals", - outputs: [{ name: "", internalType: "uint8", type: "uint8" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "subtractedValue", internalType: "uint256", type: "uint256" }, - ], - name: "decreaseAllowance", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "addedValue", internalType: "uint256", type: "uint256" }, - ], - name: "increaseAllowance", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "name", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "symbol", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "totalSupply", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "to", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "transfer", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "transferFrom", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "owner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "spender", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Approval", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Transfer", - }, -] as const; + { + type: 'constructor', + inputs: [ + { name: 'name_', internalType: 'string', type: 'string' }, + { name: 'symbol_', internalType: 'string', type: 'string' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'owner', internalType: 'address', type: 'address' }, + { name: 'spender', internalType: 'address', type: 'address' }, + ], + name: 'allowance', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'spender', internalType: 'address', type: 'address' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'approve', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'account', internalType: 'address', type: 'address' }], + name: 'balanceOf', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'decimals', + outputs: [{ name: '', internalType: 'uint8', type: 'uint8' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'spender', internalType: 'address', type: 'address' }, + { name: 'subtractedValue', internalType: 'uint256', type: 'uint256' }, + ], + name: 'decreaseAllowance', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'spender', internalType: 'address', type: 'address' }, + { name: 'addedValue', internalType: 'uint256', type: 'uint256' }, + ], + name: 'increaseAllowance', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'name', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'symbol', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'totalSupply', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'transfer', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'from', internalType: 'address', type: 'address' }, + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'transferFrom', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'nonpayable', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'spender', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'value', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'Approval', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'from', internalType: 'address', type: 'address', indexed: true }, + { name: 'to', internalType: 'address', type: 'address', indexed: true }, + { + name: 'value', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'Transfer', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // ERC721 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const erc721Abi = [ - { - type: "constructor", - inputs: [ - { name: "name_", internalType: "string", type: "string" }, - { name: "symbol_", internalType: "string", type: "string" }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "to", internalType: "address", type: "address" }, - { name: "tokenId", internalType: "uint256", type: "uint256" }, - ], - name: "approve", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "owner", internalType: "address", type: "address" }], - name: "balanceOf", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "tokenId", internalType: "uint256", type: "uint256" }], - name: "getApproved", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "owner", internalType: "address", type: "address" }, - { name: "operator", internalType: "address", type: "address" }, - ], - name: "isApprovedForAll", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "name", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "tokenId", internalType: "uint256", type: "uint256" }], - name: "ownerOf", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "tokenId", internalType: "uint256", type: "uint256" }, - ], - name: "safeTransferFrom", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "tokenId", internalType: "uint256", type: "uint256" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "safeTransferFrom", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "operator", internalType: "address", type: "address" }, - { name: "approved", internalType: "bool", type: "bool" }, - ], - name: "setApprovalForAll", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "interfaceId", internalType: "bytes4", type: "bytes4" }], - name: "supportsInterface", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "symbol", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "tokenId", internalType: "uint256", type: "uint256" }], - name: "tokenURI", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "tokenId", internalType: "uint256", type: "uint256" }, - ], - name: "transferFrom", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "owner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "approved", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "tokenId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "Approval", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "owner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "operator", - internalType: "address", - type: "address", - indexed: true, - }, - { name: "approved", internalType: "bool", type: "bool", indexed: false }, - ], - name: "ApprovalForAll", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - { - name: "tokenId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "Transfer", - }, -] as const; + { + type: 'constructor', + inputs: [ + { name: 'name_', internalType: 'string', type: 'string' }, + { name: 'symbol_', internalType: 'string', type: 'string' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'approve', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'owner', internalType: 'address', type: 'address' }], + name: 'balanceOf', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'tokenId', internalType: 'uint256', type: 'uint256' }], + name: 'getApproved', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'owner', internalType: 'address', type: 'address' }, + { name: 'operator', internalType: 'address', type: 'address' }, + ], + name: 'isApprovedForAll', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'name', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'tokenId', internalType: 'uint256', type: 'uint256' }], + name: 'ownerOf', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'from', internalType: 'address', type: 'address' }, + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'safeTransferFrom', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'from', internalType: 'address', type: 'address' }, + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + { name: 'data', internalType: 'bytes', type: 'bytes' }, + ], + name: 'safeTransferFrom', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'operator', internalType: 'address', type: 'address' }, + { name: 'approved', internalType: 'bool', type: 'bool' }, + ], + name: 'setApprovalForAll', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'interfaceId', internalType: 'bytes4', type: 'bytes4' }], + name: 'supportsInterface', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'symbol', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'tokenId', internalType: 'uint256', type: 'uint256' }], + name: 'tokenURI', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'from', internalType: 'address', type: 'address' }, + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'transferFrom', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'approved', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'tokenId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'Approval', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'operator', + internalType: 'address', + type: 'address', + indexed: true, + }, + { name: 'approved', internalType: 'bool', type: 'bool', indexed: false }, + ], + name: 'ApprovalForAll', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'from', internalType: 'address', type: 'address', indexed: true }, + { name: 'to', internalType: 'address', type: 'address', indexed: true }, + { + name: 'tokenId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'Transfer', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // GnosisSafeLike ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const gnosisSafeLikeAbi = [ - { - type: "function", - inputs: [ - { name: "to", internalType: "address", type: "address" }, - { name: "value", internalType: "uint256", type: "uint256" }, - { name: "data", internalType: "bytes", type: "bytes" }, - { name: "operation", internalType: "uint8", type: "uint8" }, - { name: "safeTxGas", internalType: "uint256", type: "uint256" }, - { name: "baseGas", internalType: "uint256", type: "uint256" }, - { name: "gasPrice", internalType: "uint256", type: "uint256" }, - { name: "gasToken", internalType: "address", type: "address" }, - { - name: "refundReceiver", - internalType: "address payable", - type: "address", - }, - { name: "signatures", internalType: "bytes", type: "bytes" }, - ], - name: "execTransaction", - outputs: [{ name: "success", internalType: "bool", type: "bool" }], - stateMutability: "payable", - }, -] as const; + { + type: 'function', + inputs: [ + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'value', internalType: 'uint256', type: 'uint256' }, + { name: 'data', internalType: 'bytes', type: 'bytes' }, + { name: 'operation', internalType: 'uint8', type: 'uint8' }, + { name: 'safeTxGas', internalType: 'uint256', type: 'uint256' }, + { name: 'baseGas', internalType: 'uint256', type: 'uint256' }, + { name: 'gasPrice', internalType: 'uint256', type: 'uint256' }, + { name: 'gasToken', internalType: 'address', type: 'address' }, + { + name: 'refundReceiver', + internalType: 'address payable', + type: 'address', + }, + { name: 'signatures', internalType: 'bytes', type: 'bytes' }, + ], + name: 'execTransaction', + outputs: [{ name: 'success', internalType: 'bool', type: 'bool' }], + stateMutability: 'payable', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // IAccessControl ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const iAccessControlAbi = [ - { - type: "function", - inputs: [{ name: "role", internalType: "bytes32", type: "bytes32" }], - name: "getRoleAdmin", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "role", internalType: "bytes32", type: "bytes32" }, - { name: "account", internalType: "address", type: "address" }, - ], - name: "grantRole", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "role", internalType: "bytes32", type: "bytes32" }, - { name: "account", internalType: "address", type: "address" }, - ], - name: "hasRole", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "role", internalType: "bytes32", type: "bytes32" }, - { name: "account", internalType: "address", type: "address" }, - ], - name: "renounceRole", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "role", internalType: "bytes32", type: "bytes32" }, - { name: "account", internalType: "address", type: "address" }, - ], - name: "revokeRole", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "role", internalType: "bytes32", type: "bytes32", indexed: true }, - { - name: "previousAdminRole", - internalType: "bytes32", - type: "bytes32", - indexed: true, - }, - { - name: "newAdminRole", - internalType: "bytes32", - type: "bytes32", - indexed: true, - }, - ], - name: "RoleAdminChanged", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "role", internalType: "bytes32", type: "bytes32", indexed: true }, - { - name: "account", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "sender", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "RoleGranted", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "role", internalType: "bytes32", type: "bytes32", indexed: true }, - { - name: "account", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "sender", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "RoleRevoked", - }, -] as const; + { + type: 'function', + inputs: [{ name: 'role', internalType: 'bytes32', type: 'bytes32' }], + name: 'getRoleAdmin', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'role', internalType: 'bytes32', type: 'bytes32' }, + { name: 'account', internalType: 'address', type: 'address' }, + ], + name: 'grantRole', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'role', internalType: 'bytes32', type: 'bytes32' }, + { name: 'account', internalType: 'address', type: 'address' }, + ], + name: 'hasRole', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'role', internalType: 'bytes32', type: 'bytes32' }, + { name: 'account', internalType: 'address', type: 'address' }, + ], + name: 'renounceRole', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'role', internalType: 'bytes32', type: 'bytes32' }, + { name: 'account', internalType: 'address', type: 'address' }, + ], + name: 'revokeRole', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'role', internalType: 'bytes32', type: 'bytes32', indexed: true }, + { + name: 'previousAdminRole', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + { + name: 'newAdminRole', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + ], + name: 'RoleAdminChanged', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'role', internalType: 'bytes32', type: 'bytes32', indexed: true }, + { + name: 'account', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'sender', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'RoleGranted', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'role', internalType: 'bytes32', type: 'bytes32', indexed: true }, + { + name: 'account', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'sender', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'RoleRevoked', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // IBeacon ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const iBeaconAbi = [ - { - type: "function", - inputs: [], - name: "implementation", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, -] as const; + { + type: 'function', + inputs: [], + name: 'implementation', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // IChainlinkAggregatorLike ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const iChainlinkAggregatorLikeAbi = [ - { - type: "function", - inputs: [], - name: "decimals", - outputs: [{ name: "", internalType: "uint8", type: "uint8" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "description", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "latestRoundData", - outputs: [ - { name: "roundId", internalType: "uint80", type: "uint80" }, - { name: "answer", internalType: "int256", type: "int256" }, - { name: "startedAt", internalType: "uint256", type: "uint256" }, - { name: "updatedAt", internalType: "uint256", type: "uint256" }, - { name: "answeredInRound", internalType: "uint80", type: "uint80" }, - ], - stateMutability: "view", - }, -] as const; + { + type: 'function', + inputs: [], + name: 'decimals', + outputs: [{ name: '', internalType: 'uint8', type: 'uint8' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'description', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'latestRoundData', + outputs: [ + { name: 'roundId', internalType: 'uint80', type: 'uint80' }, + { name: 'answer', internalType: 'int256', type: 'int256' }, + { name: 'startedAt', internalType: 'uint256', type: 'uint256' }, + { name: 'updatedAt', internalType: 'uint256', type: 'uint256' }, + { name: 'answeredInRound', internalType: 'uint80', type: 'uint80' }, + ], + stateMutability: 'view', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // IChainlinkFeedRegistryLike ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const iChainlinkFeedRegistryLikeAbi = [ - { - type: "function", - inputs: [], - name: "acceptOwnership", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "base", internalType: "address", type: "address" }, - { name: "quote", internalType: "address", type: "address" }, - { name: "aggregator", internalType: "address", type: "address" }, - ], - name: "confirmFeed", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "base", internalType: "address", type: "address" }, - { name: "quote", internalType: "address", type: "address" }, - ], - name: "getFeed", - outputs: [ - { - name: "aggregator", - internalType: "contract IChainlinkAggregatorLike", - type: "address", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "base", internalType: "address", type: "address" }, - { name: "quote", internalType: "address", type: "address" }, - { name: "aggregator", internalType: "address", type: "address" }, - ], - name: "proposeFeed", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "to", internalType: "address", type: "address" }], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - }, -] as const; + { + type: 'function', + inputs: [], + name: 'acceptOwnership', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'base', internalType: 'address', type: 'address' }, + { name: 'quote', internalType: 'address', type: 'address' }, + { name: 'aggregator', internalType: 'address', type: 'address' }, + ], + name: 'confirmFeed', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'base', internalType: 'address', type: 'address' }, + { name: 'quote', internalType: 'address', type: 'address' }, + ], + name: 'getFeed', + outputs: [ + { + name: 'aggregator', + internalType: 'contract IChainlinkAggregatorLike', + type: 'address', + }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'base', internalType: 'address', type: 'address' }, + { name: 'quote', internalType: 'address', type: 'address' }, + { name: 'aggregator', internalType: 'address', type: 'address' }, + ], + name: 'proposeFeed', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'to', internalType: 'address', type: 'address' }], + name: 'transferOwnership', + outputs: [], + stateMutability: 'nonpayable', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // ICryptoKitties ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const iCryptoKittiesAbi = [ - { - type: "function", - inputs: [ - { name: "_to", internalType: "address", type: "address" }, - { name: "_tokenId", internalType: "uint256", type: "uint256" }, - ], - name: "approve", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_owner", internalType: "address", type: "address" }], - name: "balanceOf", - outputs: [{ name: "balance", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "name", - outputs: [{ name: "name", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_tokenId", internalType: "uint256", type: "uint256" }], - name: "ownerOf", - outputs: [{ name: "owner", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_interfaceID", internalType: "bytes4", type: "bytes4" }], - name: "supportsInterface", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "symbol", - outputs: [{ name: "symbol", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_tokenId", internalType: "uint256", type: "uint256" }, - { name: "_preferredTransport", internalType: "string", type: "string" }, - ], - name: "tokenMetadata", - outputs: [{ name: "infoUrl", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_owner", internalType: "address", type: "address" }], - name: "tokensOfOwner", - outputs: [ - { name: "tokenIds", internalType: "uint256[]", type: "uint256[]" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "totalSupply", - outputs: [{ name: "total", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_to", internalType: "address", type: "address" }, - { name: "_tokenId", internalType: "uint256", type: "uint256" }, - ], - name: "transfer", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_from", internalType: "address", type: "address" }, - { name: "_to", internalType: "address", type: "address" }, - { name: "_tokenId", internalType: "uint256", type: "uint256" }, - ], - name: "transferFrom", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "owner", - internalType: "address", - type: "address", - indexed: false, - }, - { - name: "approved", - internalType: "address", - type: "address", - indexed: false, - }, - { - name: "tokenId", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Approval", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "from", - internalType: "address", - type: "address", - indexed: false, - }, - { name: "to", internalType: "address", type: "address", indexed: false }, - { - name: "tokenId", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Transfer", - }, -] as const; + { + type: 'function', + inputs: [ + { name: '_to', internalType: 'address', type: 'address' }, + { name: '_tokenId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'approve', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: '_owner', internalType: 'address', type: 'address' }], + name: 'balanceOf', + outputs: [{ name: 'balance', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'name', + outputs: [{ name: 'name', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: '_tokenId', internalType: 'uint256', type: 'uint256' }], + name: 'ownerOf', + outputs: [{ name: 'owner', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: '_interfaceID', internalType: 'bytes4', type: 'bytes4' }], + name: 'supportsInterface', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'symbol', + outputs: [{ name: 'symbol', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_tokenId', internalType: 'uint256', type: 'uint256' }, + { name: '_preferredTransport', internalType: 'string', type: 'string' }, + ], + name: 'tokenMetadata', + outputs: [{ name: 'infoUrl', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: '_owner', internalType: 'address', type: 'address' }], + name: 'tokensOfOwner', + outputs: [ + { name: 'tokenIds', internalType: 'uint256[]', type: 'uint256[]' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'totalSupply', + outputs: [{ name: 'total', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_to', internalType: 'address', type: 'address' }, + { name: '_tokenId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'transfer', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_from', internalType: 'address', type: 'address' }, + { name: '_to', internalType: 'address', type: 'address' }, + { name: '_tokenId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'transferFrom', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'approved', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'tokenId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'Approval', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'from', + internalType: 'address', + type: 'address', + indexed: false, + }, + { name: 'to', internalType: 'address', type: 'address', indexed: false }, + { + name: 'tokenId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'Transfer', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // IERC1155 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const ierc1155Abi = [ - { - type: "function", - inputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "id", internalType: "uint256", type: "uint256" }, - ], - name: "balanceOf", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "accounts", internalType: "address[]", type: "address[]" }, - { name: "ids", internalType: "uint256[]", type: "uint256[]" }, - ], - name: "balanceOfBatch", - outputs: [{ name: "", internalType: "uint256[]", type: "uint256[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "operator", internalType: "address", type: "address" }, - ], - name: "isApprovedForAll", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "ids", internalType: "uint256[]", type: "uint256[]" }, - { name: "amounts", internalType: "uint256[]", type: "uint256[]" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "safeBatchTransferFrom", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "safeTransferFrom", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "operator", internalType: "address", type: "address" }, - { name: "approved", internalType: "bool", type: "bool" }, - ], - name: "setApprovalForAll", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "interfaceId", internalType: "bytes4", type: "bytes4" }], - name: "supportsInterface", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "account", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "operator", - internalType: "address", - type: "address", - indexed: true, - }, - { name: "approved", internalType: "bool", type: "bool", indexed: false }, - ], - name: "ApprovalForAll", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "operator", - internalType: "address", - type: "address", - indexed: true, - }, - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - { - name: "ids", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "values", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - ], - name: "TransferBatch", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "operator", - internalType: "address", - type: "address", - indexed: true, - }, - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - { name: "id", internalType: "uint256", type: "uint256", indexed: false }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "TransferSingle", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "value", internalType: "string", type: "string", indexed: false }, - { name: "id", internalType: "uint256", type: "uint256", indexed: true }, - ], - name: "URI", - }, -] as const; + { + type: 'function', + inputs: [ + { name: 'account', internalType: 'address', type: 'address' }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + ], + name: 'balanceOf', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'accounts', internalType: 'address[]', type: 'address[]' }, + { name: 'ids', internalType: 'uint256[]', type: 'uint256[]' }, + ], + name: 'balanceOfBatch', + outputs: [{ name: '', internalType: 'uint256[]', type: 'uint256[]' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'account', internalType: 'address', type: 'address' }, + { name: 'operator', internalType: 'address', type: 'address' }, + ], + name: 'isApprovedForAll', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'from', internalType: 'address', type: 'address' }, + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'ids', internalType: 'uint256[]', type: 'uint256[]' }, + { name: 'amounts', internalType: 'uint256[]', type: 'uint256[]' }, + { name: 'data', internalType: 'bytes', type: 'bytes' }, + ], + name: 'safeBatchTransferFrom', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'from', internalType: 'address', type: 'address' }, + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + { name: 'data', internalType: 'bytes', type: 'bytes' }, + ], + name: 'safeTransferFrom', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'operator', internalType: 'address', type: 'address' }, + { name: 'approved', internalType: 'bool', type: 'bool' }, + ], + name: 'setApprovalForAll', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'interfaceId', internalType: 'bytes4', type: 'bytes4' }], + name: 'supportsInterface', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'account', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'operator', + internalType: 'address', + type: 'address', + indexed: true, + }, + { name: 'approved', internalType: 'bool', type: 'bool', indexed: false }, + ], + name: 'ApprovalForAll', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'operator', + internalType: 'address', + type: 'address', + indexed: true, + }, + { name: 'from', internalType: 'address', type: 'address', indexed: true }, + { name: 'to', internalType: 'address', type: 'address', indexed: true }, + { + name: 'ids', + internalType: 'uint256[]', + type: 'uint256[]', + indexed: false, + }, + { + name: 'values', + internalType: 'uint256[]', + type: 'uint256[]', + indexed: false, + }, + ], + name: 'TransferBatch', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'operator', + internalType: 'address', + type: 'address', + indexed: true, + }, + { name: 'from', internalType: 'address', type: 'address', indexed: true }, + { name: 'to', internalType: 'address', type: 'address', indexed: true }, + { name: 'id', internalType: 'uint256', type: 'uint256', indexed: false }, + { + name: 'value', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'TransferSingle', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'value', internalType: 'string', type: 'string', indexed: false }, + { name: 'id', internalType: 'uint256', type: 'uint256', indexed: true }, + ], + name: 'URI', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // IERC1155MetadataURI ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const ierc1155MetadataUriAbi = [ - { - type: "function", - inputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "id", internalType: "uint256", type: "uint256" }, - ], - name: "balanceOf", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "accounts", internalType: "address[]", type: "address[]" }, - { name: "ids", internalType: "uint256[]", type: "uint256[]" }, - ], - name: "balanceOfBatch", - outputs: [{ name: "", internalType: "uint256[]", type: "uint256[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "operator", internalType: "address", type: "address" }, - ], - name: "isApprovedForAll", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "ids", internalType: "uint256[]", type: "uint256[]" }, - { name: "amounts", internalType: "uint256[]", type: "uint256[]" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "safeBatchTransferFrom", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "safeTransferFrom", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "operator", internalType: "address", type: "address" }, - { name: "approved", internalType: "bool", type: "bool" }, - ], - name: "setApprovalForAll", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "interfaceId", internalType: "bytes4", type: "bytes4" }], - name: "supportsInterface", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "id", internalType: "uint256", type: "uint256" }], - name: "uri", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "account", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "operator", - internalType: "address", - type: "address", - indexed: true, - }, - { name: "approved", internalType: "bool", type: "bool", indexed: false }, - ], - name: "ApprovalForAll", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "operator", - internalType: "address", - type: "address", - indexed: true, - }, - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - { - name: "ids", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "values", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - ], - name: "TransferBatch", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "operator", - internalType: "address", - type: "address", - indexed: true, - }, - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - { name: "id", internalType: "uint256", type: "uint256", indexed: false }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "TransferSingle", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "value", internalType: "string", type: "string", indexed: false }, - { name: "id", internalType: "uint256", type: "uint256", indexed: true }, - ], - name: "URI", - }, -] as const; + { + type: 'function', + inputs: [ + { name: 'account', internalType: 'address', type: 'address' }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + ], + name: 'balanceOf', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'accounts', internalType: 'address[]', type: 'address[]' }, + { name: 'ids', internalType: 'uint256[]', type: 'uint256[]' }, + ], + name: 'balanceOfBatch', + outputs: [{ name: '', internalType: 'uint256[]', type: 'uint256[]' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'account', internalType: 'address', type: 'address' }, + { name: 'operator', internalType: 'address', type: 'address' }, + ], + name: 'isApprovedForAll', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'from', internalType: 'address', type: 'address' }, + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'ids', internalType: 'uint256[]', type: 'uint256[]' }, + { name: 'amounts', internalType: 'uint256[]', type: 'uint256[]' }, + { name: 'data', internalType: 'bytes', type: 'bytes' }, + ], + name: 'safeBatchTransferFrom', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'from', internalType: 'address', type: 'address' }, + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + { name: 'data', internalType: 'bytes', type: 'bytes' }, + ], + name: 'safeTransferFrom', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'operator', internalType: 'address', type: 'address' }, + { name: 'approved', internalType: 'bool', type: 'bool' }, + ], + name: 'setApprovalForAll', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'interfaceId', internalType: 'bytes4', type: 'bytes4' }], + name: 'supportsInterface', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'id', internalType: 'uint256', type: 'uint256' }], + name: 'uri', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'account', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'operator', + internalType: 'address', + type: 'address', + indexed: true, + }, + { name: 'approved', internalType: 'bool', type: 'bool', indexed: false }, + ], + name: 'ApprovalForAll', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'operator', + internalType: 'address', + type: 'address', + indexed: true, + }, + { name: 'from', internalType: 'address', type: 'address', indexed: true }, + { name: 'to', internalType: 'address', type: 'address', indexed: true }, + { + name: 'ids', + internalType: 'uint256[]', + type: 'uint256[]', + indexed: false, + }, + { + name: 'values', + internalType: 'uint256[]', + type: 'uint256[]', + indexed: false, + }, + ], + name: 'TransferBatch', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'operator', + internalType: 'address', + type: 'address', + indexed: true, + }, + { name: 'from', internalType: 'address', type: 'address', indexed: true }, + { name: 'to', internalType: 'address', type: 'address', indexed: true }, + { name: 'id', internalType: 'uint256', type: 'uint256', indexed: false }, + { + name: 'value', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'TransferSingle', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'value', internalType: 'string', type: 'string', indexed: false }, + { name: 'id', internalType: 'uint256', type: 'uint256', indexed: true }, + ], + name: 'URI', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // IERC1155Receiver ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const ierc1155ReceiverAbi = [ - { - type: "function", - inputs: [ - { name: "operator", internalType: "address", type: "address" }, - { name: "from", internalType: "address", type: "address" }, - { name: "ids", internalType: "uint256[]", type: "uint256[]" }, - { name: "values", internalType: "uint256[]", type: "uint256[]" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "onERC1155BatchReceived", - outputs: [{ name: "", internalType: "bytes4", type: "bytes4" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "operator", internalType: "address", type: "address" }, - { name: "from", internalType: "address", type: "address" }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "value", internalType: "uint256", type: "uint256" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "onERC1155Received", - outputs: [{ name: "", internalType: "bytes4", type: "bytes4" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "interfaceId", internalType: "bytes4", type: "bytes4" }], - name: "supportsInterface", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, -] as const; + { + type: 'function', + inputs: [ + { name: 'operator', internalType: 'address', type: 'address' }, + { name: 'from', internalType: 'address', type: 'address' }, + { name: 'ids', internalType: 'uint256[]', type: 'uint256[]' }, + { name: 'values', internalType: 'uint256[]', type: 'uint256[]' }, + { name: 'data', internalType: 'bytes', type: 'bytes' }, + ], + name: 'onERC1155BatchReceived', + outputs: [{ name: '', internalType: 'bytes4', type: 'bytes4' }], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'operator', internalType: 'address', type: 'address' }, + { name: 'from', internalType: 'address', type: 'address' }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'value', internalType: 'uint256', type: 'uint256' }, + { name: 'data', internalType: 'bytes', type: 'bytes' }, + ], + name: 'onERC1155Received', + outputs: [{ name: '', internalType: 'bytes4', type: 'bytes4' }], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'interfaceId', internalType: 'bytes4', type: 'bytes4' }], + name: 'supportsInterface', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // IERC1271 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const ierc1271Abi = [ - { - type: "function", - inputs: [ - { name: "hash", internalType: "bytes32", type: "bytes32" }, - { name: "signature", internalType: "bytes", type: "bytes" }, - ], - name: "isValidSignature", - outputs: [{ name: "magicValue", internalType: "bytes4", type: "bytes4" }], - stateMutability: "view", - }, -] as const; + { + type: 'function', + inputs: [ + { name: 'hash', internalType: 'bytes32', type: 'bytes32' }, + { name: 'signature', internalType: 'bytes', type: 'bytes' }, + ], + name: 'isValidSignature', + outputs: [{ name: 'magicValue', internalType: 'bytes4', type: 'bytes4' }], + stateMutability: 'view', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // IERC1822Proxiable ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const ierc1822ProxiableAbi = [ - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, -] as const; + { + type: 'function', + inputs: [], + name: 'proxiableUUID', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // IERC1967 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const ierc1967Abi = [ - { - type: "event", - anonymous: false, - inputs: [ - { - name: "previousAdmin", - internalType: "address", - type: "address", - indexed: false, - }, - { - name: "newAdmin", - internalType: "address", - type: "address", - indexed: false, - }, - ], - name: "AdminChanged", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "beacon", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "BeaconUpgraded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "implementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, -] as const; + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'previousAdmin', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'newAdmin', + internalType: 'address', + type: 'address', + indexed: false, + }, + ], + name: 'AdminChanged', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'beacon', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'BeaconUpgraded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'implementation', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'Upgraded', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // IERC20Metadata ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const ierc20MetadataAbi = [ - { - type: "function", - inputs: [ - { name: "owner", internalType: "address", type: "address" }, - { name: "spender", internalType: "address", type: "address" }, - ], - name: "allowance", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "approve", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "account", internalType: "address", type: "address" }], - name: "balanceOf", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "decimals", - outputs: [{ name: "", internalType: "uint8", type: "uint8" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "name", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "symbol", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "totalSupply", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "to", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "transfer", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "transferFrom", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "owner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "spender", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Approval", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Transfer", - }, -] as const; + { + type: 'function', + inputs: [ + { name: 'owner', internalType: 'address', type: 'address' }, + { name: 'spender', internalType: 'address', type: 'address' }, + ], + name: 'allowance', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'spender', internalType: 'address', type: 'address' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'approve', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'account', internalType: 'address', type: 'address' }], + name: 'balanceOf', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'decimals', + outputs: [{ name: '', internalType: 'uint8', type: 'uint8' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'name', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'symbol', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'totalSupply', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'transfer', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'from', internalType: 'address', type: 'address' }, + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'transferFrom', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'nonpayable', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'spender', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'value', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'Approval', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'from', internalType: 'address', type: 'address', indexed: true }, + { name: 'to', internalType: 'address', type: 'address', indexed: true }, + { + name: 'value', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'Transfer', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // IERC20Permit ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const ierc20PermitAbi = [ - { - type: "function", - inputs: [], - name: "DOMAIN_SEPARATOR", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "owner", internalType: "address", type: "address" }], - name: "nonces", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "owner", internalType: "address", type: "address" }, - { name: "spender", internalType: "address", type: "address" }, - { name: "value", internalType: "uint256", type: "uint256" }, - { name: "deadline", internalType: "uint256", type: "uint256" }, - { name: "v", internalType: "uint8", type: "uint8" }, - { name: "r", internalType: "bytes32", type: "bytes32" }, - { name: "s", internalType: "bytes32", type: "bytes32" }, - ], - name: "permit", - outputs: [], - stateMutability: "nonpayable", - }, -] as const; + { + type: 'function', + inputs: [], + name: 'DOMAIN_SEPARATOR', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'owner', internalType: 'address', type: 'address' }], + name: 'nonces', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'owner', internalType: 'address', type: 'address' }, + { name: 'spender', internalType: 'address', type: 'address' }, + { name: 'value', internalType: 'uint256', type: 'uint256' }, + { name: 'deadline', internalType: 'uint256', type: 'uint256' }, + { name: 'v', internalType: 'uint8', type: 'uint8' }, + { name: 'r', internalType: 'bytes32', type: 'bytes32' }, + { name: 's', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'permit', + outputs: [], + stateMutability: 'nonpayable', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // IERC5646 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const ierc5646Abi = [ - { - type: "function", - inputs: [{ name: "tokenId", internalType: "uint256", type: "uint256" }], - name: "getStateFingerprint", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, -] as const; + { + type: 'function', + inputs: [{ name: 'tokenId', internalType: 'uint256', type: 'uint256' }], + name: 'getStateFingerprint', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, +] as const + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// IERC721Enumerable +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const ierc721EnumerableAbi = [ + { + type: 'function', + inputs: [ + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'approve', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'owner', internalType: 'address', type: 'address' }], + name: 'balanceOf', + outputs: [{ name: 'balance', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'tokenId', internalType: 'uint256', type: 'uint256' }], + name: 'getApproved', + outputs: [{ name: 'operator', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'owner', internalType: 'address', type: 'address' }, + { name: 'operator', internalType: 'address', type: 'address' }, + ], + name: 'isApprovedForAll', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'tokenId', internalType: 'uint256', type: 'uint256' }], + name: 'ownerOf', + outputs: [{ name: 'owner', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'from', internalType: 'address', type: 'address' }, + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'safeTransferFrom', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'from', internalType: 'address', type: 'address' }, + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + { name: 'data', internalType: 'bytes', type: 'bytes' }, + ], + name: 'safeTransferFrom', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'operator', internalType: 'address', type: 'address' }, + { name: 'approved', internalType: 'bool', type: 'bool' }, + ], + name: 'setApprovalForAll', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'interfaceId', internalType: 'bytes4', type: 'bytes4' }], + name: 'supportsInterface', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'index', internalType: 'uint256', type: 'uint256' }], + name: 'tokenByIndex', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'owner', internalType: 'address', type: 'address' }, + { name: 'index', internalType: 'uint256', type: 'uint256' }, + ], + name: 'tokenOfOwnerByIndex', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'totalSupply', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'from', internalType: 'address', type: 'address' }, + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'transferFrom', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'approved', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'tokenId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'Approval', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'operator', + internalType: 'address', + type: 'address', + indexed: true, + }, + { name: 'approved', internalType: 'bool', type: 'bool', indexed: false }, + ], + name: 'ApprovalForAll', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'from', internalType: 'address', type: 'address', indexed: true }, + { name: 'to', internalType: 'address', type: 'address', indexed: true }, + { + name: 'tokenId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'Transfer', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // IERC721Metadata ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const ierc721MetadataAbi = [ - { - type: "function", - inputs: [ - { name: "to", internalType: "address", type: "address" }, - { name: "tokenId", internalType: "uint256", type: "uint256" }, - ], - name: "approve", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "owner", internalType: "address", type: "address" }], - name: "balanceOf", - outputs: [{ name: "balance", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "tokenId", internalType: "uint256", type: "uint256" }], - name: "getApproved", - outputs: [{ name: "operator", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "owner", internalType: "address", type: "address" }, - { name: "operator", internalType: "address", type: "address" }, - ], - name: "isApprovedForAll", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "name", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "tokenId", internalType: "uint256", type: "uint256" }], - name: "ownerOf", - outputs: [{ name: "owner", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "tokenId", internalType: "uint256", type: "uint256" }, - ], - name: "safeTransferFrom", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "tokenId", internalType: "uint256", type: "uint256" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "safeTransferFrom", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "operator", internalType: "address", type: "address" }, - { name: "approved", internalType: "bool", type: "bool" }, - ], - name: "setApprovalForAll", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "interfaceId", internalType: "bytes4", type: "bytes4" }], - name: "supportsInterface", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "symbol", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "tokenId", internalType: "uint256", type: "uint256" }], - name: "tokenURI", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "tokenId", internalType: "uint256", type: "uint256" }, - ], - name: "transferFrom", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "owner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "approved", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "tokenId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "Approval", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "owner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "operator", - internalType: "address", - type: "address", - indexed: true, - }, - { name: "approved", internalType: "bool", type: "bool", indexed: false }, - ], - name: "ApprovalForAll", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - { - name: "tokenId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "Transfer", - }, -] as const; + { + type: 'function', + inputs: [ + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'approve', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'owner', internalType: 'address', type: 'address' }], + name: 'balanceOf', + outputs: [{ name: 'balance', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'tokenId', internalType: 'uint256', type: 'uint256' }], + name: 'getApproved', + outputs: [{ name: 'operator', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'owner', internalType: 'address', type: 'address' }, + { name: 'operator', internalType: 'address', type: 'address' }, + ], + name: 'isApprovedForAll', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'name', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'tokenId', internalType: 'uint256', type: 'uint256' }], + name: 'ownerOf', + outputs: [{ name: 'owner', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'from', internalType: 'address', type: 'address' }, + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'safeTransferFrom', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'from', internalType: 'address', type: 'address' }, + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + { name: 'data', internalType: 'bytes', type: 'bytes' }, + ], + name: 'safeTransferFrom', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'operator', internalType: 'address', type: 'address' }, + { name: 'approved', internalType: 'bool', type: 'bool' }, + ], + name: 'setApprovalForAll', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'interfaceId', internalType: 'bytes4', type: 'bytes4' }], + name: 'supportsInterface', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'symbol', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'tokenId', internalType: 'uint256', type: 'uint256' }], + name: 'tokenURI', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'from', internalType: 'address', type: 'address' }, + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'transferFrom', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'approved', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'tokenId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'Approval', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'operator', + internalType: 'address', + type: 'address', + indexed: true, + }, + { name: 'approved', internalType: 'bool', type: 'bool', indexed: false }, + ], + name: 'ApprovalForAll', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'from', internalType: 'address', type: 'address', indexed: true }, + { name: 'to', internalType: 'address', type: 'address', indexed: true }, + { + name: 'tokenId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'Transfer', + }, +] as const + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// IERC721Permit +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const ierc721PermitAbi = [ + { + type: 'function', + inputs: [], + name: 'DOMAIN_SEPARATOR', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'PERMIT_TYPEHASH', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'approve', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'owner', internalType: 'address', type: 'address' }], + name: 'balanceOf', + outputs: [{ name: 'balance', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'tokenId', internalType: 'uint256', type: 'uint256' }], + name: 'getApproved', + outputs: [{ name: 'operator', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'owner', internalType: 'address', type: 'address' }, + { name: 'operator', internalType: 'address', type: 'address' }, + ], + name: 'isApprovedForAll', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'tokenId', internalType: 'uint256', type: 'uint256' }], + name: 'ownerOf', + outputs: [{ name: 'owner', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'spender', internalType: 'address', type: 'address' }, + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + { name: 'deadline', internalType: 'uint256', type: 'uint256' }, + { name: 'v', internalType: 'uint8', type: 'uint8' }, + { name: 'r', internalType: 'bytes32', type: 'bytes32' }, + { name: 's', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'permit', + outputs: [], + stateMutability: 'payable', + }, + { + type: 'function', + inputs: [ + { name: 'from', internalType: 'address', type: 'address' }, + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'safeTransferFrom', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'from', internalType: 'address', type: 'address' }, + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + { name: 'data', internalType: 'bytes', type: 'bytes' }, + ], + name: 'safeTransferFrom', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'operator', internalType: 'address', type: 'address' }, + { name: 'approved', internalType: 'bool', type: 'bool' }, + ], + name: 'setApprovalForAll', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'interfaceId', internalType: 'bytes4', type: 'bytes4' }], + name: 'supportsInterface', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'from', internalType: 'address', type: 'address' }, + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'transferFrom', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'approved', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'tokenId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'Approval', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'operator', + internalType: 'address', + type: 'address', + indexed: true, + }, + { name: 'approved', internalType: 'bool', type: 'bool', indexed: false }, + ], + name: 'ApprovalForAll', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'from', internalType: 'address', type: 'address', indexed: true }, + { name: 'to', internalType: 'address', type: 'address', indexed: true }, + { + name: 'tokenId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'Transfer', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // IERC721Receiver ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const ierc721ReceiverAbi = [ - { - type: "function", - inputs: [ - { name: "operator", internalType: "address", type: "address" }, - { name: "from", internalType: "address", type: "address" }, - { name: "tokenId", internalType: "uint256", type: "uint256" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "onERC721Received", - outputs: [{ name: "", internalType: "bytes4", type: "bytes4" }], - stateMutability: "nonpayable", - }, -] as const; + { + type: 'function', + inputs: [ + { name: 'operator', internalType: 'address', type: 'address' }, + { name: 'from', internalType: 'address', type: 'address' }, + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + { name: 'data', internalType: 'bytes', type: 'bytes' }, + ], + name: 'onERC721Received', + outputs: [{ name: '', internalType: 'bytes4', type: 'bytes4' }], + stateMutability: 'nonpayable', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // IMultiTokenCategoryRegistry ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const iMultiTokenCategoryRegistryAbi = [ - { - type: "function", - inputs: [ - { name: "assetAddress", internalType: "address", type: "address" }, - { name: "category", internalType: "uint8", type: "uint8" }, - ], - name: "registerCategoryValue", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "assetAddress", internalType: "address", type: "address" }, - ], - name: "registeredCategoryValue", - outputs: [{ name: "", internalType: "uint8", type: "uint8" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "assetAddress", internalType: "address", type: "address" }, - ], - name: "unregisterCategoryValue", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "assetAddress", - internalType: "address", - type: "address", - indexed: true, - }, - { name: "category", internalType: "uint8", type: "uint8", indexed: true }, - ], - name: "CategoryRegistered", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "assetAddress", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "CategoryUnregistered", - }, -] as const; + { + type: 'function', + inputs: [ + { name: 'assetAddress', internalType: 'address', type: 'address' }, + { name: 'category', internalType: 'uint8', type: 'uint8' }, + ], + name: 'registerCategoryValue', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'assetAddress', internalType: 'address', type: 'address' }, + ], + name: 'registeredCategoryValue', + outputs: [{ name: '', internalType: 'uint8', type: 'uint8' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'assetAddress', internalType: 'address', type: 'address' }, + ], + name: 'unregisterCategoryValue', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'assetAddress', + internalType: 'address', + type: 'address', + indexed: true, + }, + { name: 'category', internalType: 'uint8', type: 'uint8', indexed: true }, + ], + name: 'CategoryRegistered', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'assetAddress', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'CategoryUnregistered', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // IMulticall3 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const iMulticall3Abi = [ - { - type: "function", - inputs: [ - { - name: "calls", - internalType: "struct IMulticall3.Call[]", - type: "tuple[]", - components: [ - { name: "target", internalType: "address", type: "address" }, - { name: "callData", internalType: "bytes", type: "bytes" }, - ], - }, - ], - name: "aggregate", - outputs: [ - { name: "blockNumber", internalType: "uint256", type: "uint256" }, - { name: "returnData", internalType: "bytes[]", type: "bytes[]" }, - ], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { - name: "calls", - internalType: "struct IMulticall3.Call3[]", - type: "tuple[]", - components: [ - { name: "target", internalType: "address", type: "address" }, - { name: "allowFailure", internalType: "bool", type: "bool" }, - { name: "callData", internalType: "bytes", type: "bytes" }, - ], - }, - ], - name: "aggregate3", - outputs: [ - { - name: "returnData", - internalType: "struct IMulticall3.Result[]", - type: "tuple[]", - components: [ - { name: "success", internalType: "bool", type: "bool" }, - { name: "returnData", internalType: "bytes", type: "bytes" }, - ], - }, - ], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { - name: "calls", - internalType: "struct IMulticall3.Call3Value[]", - type: "tuple[]", - components: [ - { name: "target", internalType: "address", type: "address" }, - { name: "allowFailure", internalType: "bool", type: "bool" }, - { name: "value", internalType: "uint256", type: "uint256" }, - { name: "callData", internalType: "bytes", type: "bytes" }, - ], - }, - ], - name: "aggregate3Value", - outputs: [ - { - name: "returnData", - internalType: "struct IMulticall3.Result[]", - type: "tuple[]", - components: [ - { name: "success", internalType: "bool", type: "bool" }, - { name: "returnData", internalType: "bytes", type: "bytes" }, - ], - }, - ], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { - name: "calls", - internalType: "struct IMulticall3.Call[]", - type: "tuple[]", - components: [ - { name: "target", internalType: "address", type: "address" }, - { name: "callData", internalType: "bytes", type: "bytes" }, - ], - }, - ], - name: "blockAndAggregate", - outputs: [ - { name: "blockNumber", internalType: "uint256", type: "uint256" }, - { name: "blockHash", internalType: "bytes32", type: "bytes32" }, - { - name: "returnData", - internalType: "struct IMulticall3.Result[]", - type: "tuple[]", - components: [ - { name: "success", internalType: "bool", type: "bool" }, - { name: "returnData", internalType: "bytes", type: "bytes" }, - ], - }, - ], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "getBasefee", - outputs: [{ name: "basefee", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "blockNumber", internalType: "uint256", type: "uint256" }], - name: "getBlockHash", - outputs: [{ name: "blockHash", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "getBlockNumber", - outputs: [ - { name: "blockNumber", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "getChainId", - outputs: [{ name: "chainid", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "getCurrentBlockCoinbase", - outputs: [{ name: "coinbase", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "getCurrentBlockDifficulty", - outputs: [{ name: "difficulty", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "getCurrentBlockGasLimit", - outputs: [{ name: "gaslimit", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "getCurrentBlockTimestamp", - outputs: [{ name: "timestamp", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "addr", internalType: "address", type: "address" }], - name: "getEthBalance", - outputs: [{ name: "balance", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "getLastBlockHash", - outputs: [{ name: "blockHash", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "requireSuccess", internalType: "bool", type: "bool" }, - { - name: "calls", - internalType: "struct IMulticall3.Call[]", - type: "tuple[]", - components: [ - { name: "target", internalType: "address", type: "address" }, - { name: "callData", internalType: "bytes", type: "bytes" }, - ], - }, - ], - name: "tryAggregate", - outputs: [ - { - name: "returnData", - internalType: "struct IMulticall3.Result[]", - type: "tuple[]", - components: [ - { name: "success", internalType: "bool", type: "bool" }, - { name: "returnData", internalType: "bytes", type: "bytes" }, - ], - }, - ], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "requireSuccess", internalType: "bool", type: "bool" }, - { - name: "calls", - internalType: "struct IMulticall3.Call[]", - type: "tuple[]", - components: [ - { name: "target", internalType: "address", type: "address" }, - { name: "callData", internalType: "bytes", type: "bytes" }, - ], - }, - ], - name: "tryBlockAndAggregate", - outputs: [ - { name: "blockNumber", internalType: "uint256", type: "uint256" }, - { name: "blockHash", internalType: "bytes32", type: "bytes32" }, - { - name: "returnData", - internalType: "struct IMulticall3.Result[]", - type: "tuple[]", - components: [ - { name: "success", internalType: "bool", type: "bool" }, - { name: "returnData", internalType: "bytes", type: "bytes" }, - ], - }, - ], - stateMutability: "payable", - }, -] as const; + { + type: 'function', + inputs: [ + { + name: 'calls', + internalType: 'struct IMulticall3.Call[]', + type: 'tuple[]', + components: [ + { name: 'target', internalType: 'address', type: 'address' }, + { name: 'callData', internalType: 'bytes', type: 'bytes' }, + ], + }, + ], + name: 'aggregate', + outputs: [ + { name: 'blockNumber', internalType: 'uint256', type: 'uint256' }, + { name: 'returnData', internalType: 'bytes[]', type: 'bytes[]' }, + ], + stateMutability: 'payable', + }, + { + type: 'function', + inputs: [ + { + name: 'calls', + internalType: 'struct IMulticall3.Call3[]', + type: 'tuple[]', + components: [ + { name: 'target', internalType: 'address', type: 'address' }, + { name: 'allowFailure', internalType: 'bool', type: 'bool' }, + { name: 'callData', internalType: 'bytes', type: 'bytes' }, + ], + }, + ], + name: 'aggregate3', + outputs: [ + { + name: 'returnData', + internalType: 'struct IMulticall3.Result[]', + type: 'tuple[]', + components: [ + { name: 'success', internalType: 'bool', type: 'bool' }, + { name: 'returnData', internalType: 'bytes', type: 'bytes' }, + ], + }, + ], + stateMutability: 'payable', + }, + { + type: 'function', + inputs: [ + { + name: 'calls', + internalType: 'struct IMulticall3.Call3Value[]', + type: 'tuple[]', + components: [ + { name: 'target', internalType: 'address', type: 'address' }, + { name: 'allowFailure', internalType: 'bool', type: 'bool' }, + { name: 'value', internalType: 'uint256', type: 'uint256' }, + { name: 'callData', internalType: 'bytes', type: 'bytes' }, + ], + }, + ], + name: 'aggregate3Value', + outputs: [ + { + name: 'returnData', + internalType: 'struct IMulticall3.Result[]', + type: 'tuple[]', + components: [ + { name: 'success', internalType: 'bool', type: 'bool' }, + { name: 'returnData', internalType: 'bytes', type: 'bytes' }, + ], + }, + ], + stateMutability: 'payable', + }, + { + type: 'function', + inputs: [ + { + name: 'calls', + internalType: 'struct IMulticall3.Call[]', + type: 'tuple[]', + components: [ + { name: 'target', internalType: 'address', type: 'address' }, + { name: 'callData', internalType: 'bytes', type: 'bytes' }, + ], + }, + ], + name: 'blockAndAggregate', + outputs: [ + { name: 'blockNumber', internalType: 'uint256', type: 'uint256' }, + { name: 'blockHash', internalType: 'bytes32', type: 'bytes32' }, + { + name: 'returnData', + internalType: 'struct IMulticall3.Result[]', + type: 'tuple[]', + components: [ + { name: 'success', internalType: 'bool', type: 'bool' }, + { name: 'returnData', internalType: 'bytes', type: 'bytes' }, + ], + }, + ], + stateMutability: 'payable', + }, + { + type: 'function', + inputs: [], + name: 'getBasefee', + outputs: [{ name: 'basefee', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'blockNumber', internalType: 'uint256', type: 'uint256' }], + name: 'getBlockHash', + outputs: [{ name: 'blockHash', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'getBlockNumber', + outputs: [ + { name: 'blockNumber', internalType: 'uint256', type: 'uint256' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'getChainId', + outputs: [{ name: 'chainid', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'getCurrentBlockCoinbase', + outputs: [{ name: 'coinbase', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'getCurrentBlockDifficulty', + outputs: [{ name: 'difficulty', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'getCurrentBlockGasLimit', + outputs: [{ name: 'gaslimit', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'getCurrentBlockTimestamp', + outputs: [{ name: 'timestamp', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'addr', internalType: 'address', type: 'address' }], + name: 'getEthBalance', + outputs: [{ name: 'balance', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'getLastBlockHash', + outputs: [{ name: 'blockHash', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'requireSuccess', internalType: 'bool', type: 'bool' }, + { + name: 'calls', + internalType: 'struct IMulticall3.Call[]', + type: 'tuple[]', + components: [ + { name: 'target', internalType: 'address', type: 'address' }, + { name: 'callData', internalType: 'bytes', type: 'bytes' }, + ], + }, + ], + name: 'tryAggregate', + outputs: [ + { + name: 'returnData', + internalType: 'struct IMulticall3.Result[]', + type: 'tuple[]', + components: [ + { name: 'success', internalType: 'bool', type: 'bool' }, + { name: 'returnData', internalType: 'bytes', type: 'bytes' }, + ], + }, + ], + stateMutability: 'payable', + }, + { + type: 'function', + inputs: [ + { name: 'requireSuccess', internalType: 'bool', type: 'bool' }, + { + name: 'calls', + internalType: 'struct IMulticall3.Call[]', + type: 'tuple[]', + components: [ + { name: 'target', internalType: 'address', type: 'address' }, + { name: 'callData', internalType: 'bytes', type: 'bytes' }, + ], + }, + ], + name: 'tryBlockAndAggregate', + outputs: [ + { name: 'blockNumber', internalType: 'uint256', type: 'uint256' }, + { name: 'blockHash', internalType: 'bytes32', type: 'bytes32' }, + { + name: 'returnData', + internalType: 'struct IMulticall3.Result[]', + type: 'tuple[]', + components: [ + { name: 'success', internalType: 'bool', type: 'bool' }, + { name: 'returnData', internalType: 'bytes', type: 'bytes' }, + ], + }, + ], + stateMutability: 'payable', + }, +] as const + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// INonfungiblePositionManager +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const iNonfungiblePositionManagerAbi = [ + { + type: 'function', + inputs: [], + name: 'DOMAIN_SEPARATOR', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'PERMIT_TYPEHASH', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [], + name: 'WETH9', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'approve', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'owner', internalType: 'address', type: 'address' }], + name: 'balanceOf', + outputs: [{ name: 'balance', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'tokenId', internalType: 'uint256', type: 'uint256' }], + name: 'burn', + outputs: [], + stateMutability: 'payable', + }, + { + type: 'function', + inputs: [ + { + name: 'params', + internalType: 'struct INonfungiblePositionManager.CollectParams', + type: 'tuple', + components: [ + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + { name: 'recipient', internalType: 'address', type: 'address' }, + { name: 'amount0Max', internalType: 'uint128', type: 'uint128' }, + { name: 'amount1Max', internalType: 'uint128', type: 'uint128' }, + ], + }, + ], + name: 'collect', + outputs: [ + { name: 'amount0', internalType: 'uint256', type: 'uint256' }, + { name: 'amount1', internalType: 'uint256', type: 'uint256' }, + ], + stateMutability: 'payable', + }, + { + type: 'function', + inputs: [ + { name: 'token0', internalType: 'address', type: 'address' }, + { name: 'token1', internalType: 'address', type: 'address' }, + { name: 'fee', internalType: 'uint24', type: 'uint24' }, + { name: 'sqrtPriceX96', internalType: 'uint160', type: 'uint160' }, + ], + name: 'createAndInitializePoolIfNecessary', + outputs: [{ name: 'pool', internalType: 'address', type: 'address' }], + stateMutability: 'payable', + }, + { + type: 'function', + inputs: [ + { + name: 'params', + internalType: + 'struct INonfungiblePositionManager.DecreaseLiquidityParams', + type: 'tuple', + components: [ + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + { name: 'liquidity', internalType: 'uint128', type: 'uint128' }, + { name: 'amount0Min', internalType: 'uint256', type: 'uint256' }, + { name: 'amount1Min', internalType: 'uint256', type: 'uint256' }, + { name: 'deadline', internalType: 'uint256', type: 'uint256' }, + ], + }, + ], + name: 'decreaseLiquidity', + outputs: [ + { name: 'amount0', internalType: 'uint256', type: 'uint256' }, + { name: 'amount1', internalType: 'uint256', type: 'uint256' }, + ], + stateMutability: 'payable', + }, + { + type: 'function', + inputs: [], + name: 'factory', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'tokenId', internalType: 'uint256', type: 'uint256' }], + name: 'getApproved', + outputs: [{ name: 'operator', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'params', + internalType: + 'struct INonfungiblePositionManager.IncreaseLiquidityParams', + type: 'tuple', + components: [ + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + { name: 'amount0Desired', internalType: 'uint256', type: 'uint256' }, + { name: 'amount1Desired', internalType: 'uint256', type: 'uint256' }, + { name: 'amount0Min', internalType: 'uint256', type: 'uint256' }, + { name: 'amount1Min', internalType: 'uint256', type: 'uint256' }, + { name: 'deadline', internalType: 'uint256', type: 'uint256' }, + ], + }, + ], + name: 'increaseLiquidity', + outputs: [ + { name: 'liquidity', internalType: 'uint128', type: 'uint128' }, + { name: 'amount0', internalType: 'uint256', type: 'uint256' }, + { name: 'amount1', internalType: 'uint256', type: 'uint256' }, + ], + stateMutability: 'payable', + }, + { + type: 'function', + inputs: [ + { name: 'owner', internalType: 'address', type: 'address' }, + { name: 'operator', internalType: 'address', type: 'address' }, + ], + name: 'isApprovedForAll', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'params', + internalType: 'struct INonfungiblePositionManager.MintParams', + type: 'tuple', + components: [ + { name: 'token0', internalType: 'address', type: 'address' }, + { name: 'token1', internalType: 'address', type: 'address' }, + { name: 'fee', internalType: 'uint24', type: 'uint24' }, + { name: 'tickLower', internalType: 'int24', type: 'int24' }, + { name: 'tickUpper', internalType: 'int24', type: 'int24' }, + { name: 'amount0Desired', internalType: 'uint256', type: 'uint256' }, + { name: 'amount1Desired', internalType: 'uint256', type: 'uint256' }, + { name: 'amount0Min', internalType: 'uint256', type: 'uint256' }, + { name: 'amount1Min', internalType: 'uint256', type: 'uint256' }, + { name: 'recipient', internalType: 'address', type: 'address' }, + { name: 'deadline', internalType: 'uint256', type: 'uint256' }, + ], + }, + ], + name: 'mint', + outputs: [ + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + { name: 'liquidity', internalType: 'uint128', type: 'uint128' }, + { name: 'amount0', internalType: 'uint256', type: 'uint256' }, + { name: 'amount1', internalType: 'uint256', type: 'uint256' }, + ], + stateMutability: 'payable', + }, + { + type: 'function', + inputs: [], + name: 'name', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'tokenId', internalType: 'uint256', type: 'uint256' }], + name: 'ownerOf', + outputs: [{ name: 'owner', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'spender', internalType: 'address', type: 'address' }, + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + { name: 'deadline', internalType: 'uint256', type: 'uint256' }, + { name: 'v', internalType: 'uint8', type: 'uint8' }, + { name: 'r', internalType: 'bytes32', type: 'bytes32' }, + { name: 's', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'permit', + outputs: [], + stateMutability: 'payable', + }, + { + type: 'function', + inputs: [{ name: 'tokenId', internalType: 'uint256', type: 'uint256' }], + name: 'positions', + outputs: [ + { name: 'nonce', internalType: 'uint96', type: 'uint96' }, + { name: 'operator', internalType: 'address', type: 'address' }, + { name: 'token0', internalType: 'address', type: 'address' }, + { name: 'token1', internalType: 'address', type: 'address' }, + { name: 'fee', internalType: 'uint24', type: 'uint24' }, + { name: 'tickLower', internalType: 'int24', type: 'int24' }, + { name: 'tickUpper', internalType: 'int24', type: 'int24' }, + { name: 'liquidity', internalType: 'uint128', type: 'uint128' }, + { + name: 'feeGrowthInside0LastX128', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'feeGrowthInside1LastX128', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'tokensOwed0', internalType: 'uint128', type: 'uint128' }, + { name: 'tokensOwed1', internalType: 'uint128', type: 'uint128' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'refundETH', + outputs: [], + stateMutability: 'payable', + }, + { + type: 'function', + inputs: [ + { name: 'from', internalType: 'address', type: 'address' }, + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'safeTransferFrom', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'from', internalType: 'address', type: 'address' }, + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + { name: 'data', internalType: 'bytes', type: 'bytes' }, + ], + name: 'safeTransferFrom', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'operator', internalType: 'address', type: 'address' }, + { name: 'approved', internalType: 'bool', type: 'bool' }, + ], + name: 'setApprovalForAll', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'interfaceId', internalType: 'bytes4', type: 'bytes4' }], + name: 'supportsInterface', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'token', internalType: 'address', type: 'address' }, + { name: 'amountMinimum', internalType: 'uint256', type: 'uint256' }, + { name: 'recipient', internalType: 'address', type: 'address' }, + ], + name: 'sweepToken', + outputs: [], + stateMutability: 'payable', + }, + { + type: 'function', + inputs: [], + name: 'symbol', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'index', internalType: 'uint256', type: 'uint256' }], + name: 'tokenByIndex', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'owner', internalType: 'address', type: 'address' }, + { name: 'index', internalType: 'uint256', type: 'uint256' }, + ], + name: 'tokenOfOwnerByIndex', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'tokenId', internalType: 'uint256', type: 'uint256' }], + name: 'tokenURI', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'totalSupply', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'from', internalType: 'address', type: 'address' }, + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'transferFrom', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'amountMinimum', internalType: 'uint256', type: 'uint256' }, + { name: 'recipient', internalType: 'address', type: 'address' }, + ], + name: 'unwrapWETH9', + outputs: [], + stateMutability: 'payable', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'approved', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'tokenId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'Approval', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'operator', + internalType: 'address', + type: 'address', + indexed: true, + }, + { name: 'approved', internalType: 'bool', type: 'bool', indexed: false }, + ], + name: 'ApprovalForAll', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'tokenId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'recipient', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'amount0', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'amount1', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'Collect', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'tokenId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'liquidity', + internalType: 'uint128', + type: 'uint128', + indexed: false, + }, + { + name: 'amount0', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'amount1', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'DecreaseLiquidity', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'tokenId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'liquidity', + internalType: 'uint128', + type: 'uint128', + indexed: false, + }, + { + name: 'amount0', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'amount1', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'IncreaseLiquidity', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'from', internalType: 'address', type: 'address', indexed: true }, + { name: 'to', internalType: 'address', type: 'address', indexed: true }, + { + name: 'tokenId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'Transfer', + }, +] as const + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// IPWNAcceptorController +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const ipwnAcceptorControllerAbi = [ + { + type: 'function', + inputs: [ + { name: 'acceptor', internalType: 'address', type: 'address' }, + { name: 'proposerData', internalType: 'bytes', type: 'bytes' }, + { name: 'acceptorData', internalType: 'bytes', type: 'bytes' }, + ], + name: 'checkAcceptor', + outputs: [{ name: '', internalType: 'bytes4', type: 'bytes4' }], + stateMutability: 'view', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // IPWNDeployer ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const ipwnDeployerAbi = [ - { - type: "function", - inputs: [ - { name: "salt", internalType: "bytes32", type: "bytes32" }, - { name: "bytecodeHash", internalType: "bytes32", type: "bytes32" }, - ], - name: "computeAddress", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "salt", internalType: "bytes32", type: "bytes32" }, - { name: "bytecode", internalType: "bytes", type: "bytes" }, - ], - name: "deploy", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "salt", internalType: "bytes32", type: "bytes32" }, - { name: "owner", internalType: "address", type: "address" }, - { name: "bytecode", internalType: "bytes", type: "bytes" }, - ], - name: "deployAndTransferOwnership", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "owner", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, -] as const; + { + type: 'function', + inputs: [ + { name: 'salt', internalType: 'bytes32', type: 'bytes32' }, + { name: 'bytecodeHash', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'computeAddress', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'salt', internalType: 'bytes32', type: 'bytes32' }, + { name: 'bytecode', internalType: 'bytes', type: 'bytes' }, + ], + name: 'deploy', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'salt', internalType: 'bytes32', type: 'bytes32' }, + { name: 'owner', internalType: 'address', type: 'address' }, + { name: 'bytecode', internalType: 'bytes', type: 'bytes' }, + ], + name: 'deployAndTransferOwnership', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'owner', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'nonpayable', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // IPWNLoanMetadataProvider ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const ipwnLoanMetadataProviderAbi = [ - { - type: "function", - inputs: [], - name: "loanMetadataUri", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, -] as const; + { + type: 'function', + inputs: [], + name: 'loanMetadataUri', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, +] as const + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// IPeripheryImmutableState +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const iPeripheryImmutableStateAbi = [ + { + type: 'function', + inputs: [], + name: 'WETH9', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'factory', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, +] as const + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// IPeripheryPayments +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const iPeripheryPaymentsAbi = [ + { + type: 'function', + inputs: [], + name: 'refundETH', + outputs: [], + stateMutability: 'payable', + }, + { + type: 'function', + inputs: [ + { name: 'token', internalType: 'address', type: 'address' }, + { name: 'amountMinimum', internalType: 'uint256', type: 'uint256' }, + { name: 'recipient', internalType: 'address', type: 'address' }, + ], + name: 'sweepToken', + outputs: [], + stateMutability: 'payable', + }, + { + type: 'function', + inputs: [ + { name: 'amountMinimum', internalType: 'uint256', type: 'uint256' }, + { name: 'recipient', internalType: 'address', type: 'address' }, + ], + name: 'unwrapWETH9', + outputs: [], + stateMutability: 'payable', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // IPoolAdapter ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const iPoolAdapterAbi = [ - { - type: "function", - inputs: [ - { name: "pool", internalType: "address", type: "address" }, - { name: "owner", internalType: "address", type: "address" }, - { name: "asset", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "supply", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "pool", internalType: "address", type: "address" }, - { name: "owner", internalType: "address", type: "address" }, - { name: "asset", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "withdraw", - outputs: [], - stateMutability: "nonpayable", - }, -] as const; + { + type: 'function', + inputs: [ + { name: 'pool', internalType: 'address', type: 'address' }, + { name: 'owner', internalType: 'address', type: 'address' }, + { name: 'asset', internalType: 'address', type: 'address' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'supply', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'pool', internalType: 'address', type: 'address' }, + { name: 'owner', internalType: 'address', type: 'address' }, + { name: 'asset', internalType: 'address', type: 'address' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'withdraw', + outputs: [], + stateMutability: 'nonpayable', + }, +] as const + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// IPoolInitializer +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const iPoolInitializerAbi = [ + { + type: 'function', + inputs: [ + { name: 'token0', internalType: 'address', type: 'address' }, + { name: 'token1', internalType: 'address', type: 'address' }, + { name: 'fee', internalType: 'uint24', type: 'uint24' }, + { name: 'sqrtPriceX96', internalType: 'uint160', type: 'uint160' }, + ], + name: 'createAndInitializePoolIfNecessary', + outputs: [{ name: 'pool', internalType: 'address', type: 'address' }], + stateMutability: 'payable', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // IStateFingerpringComputer ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const iStateFingerpringComputerAbi = [ - { - type: "function", - inputs: [ - { name: "token", internalType: "address", type: "address" }, - { name: "tokenId", internalType: "uint256", type: "uint256" }, - ], - name: "computeStateFingerprint", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "token", internalType: "address", type: "address" }], - name: "supportsToken", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, -] as const; + { + type: 'function', + inputs: [ + { name: 'token', internalType: 'address', type: 'address' }, + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'computeStateFingerprint', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'token', internalType: 'address', type: 'address' }], + name: 'supportsToken', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // ITransparentUpgradeableProxy ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const iTransparentUpgradeableProxyAbi = [ - { - type: "function", - inputs: [], - name: "admin", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "address", type: "address" }], - name: "changeAdmin", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "implementation", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "address", type: "address" }], - name: "upgradeTo", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "", internalType: "address", type: "address" }, - { name: "", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "previousAdmin", - internalType: "address", - type: "address", - indexed: false, - }, - { - name: "newAdmin", - internalType: "address", - type: "address", - indexed: false, - }, - ], - name: "AdminChanged", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "beacon", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "BeaconUpgraded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "implementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, -] as const; + { + type: 'function', + inputs: [], + name: 'admin', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: '', internalType: 'address', type: 'address' }], + name: 'changeAdmin', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'implementation', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: '', internalType: 'address', type: 'address' }], + name: 'upgradeTo', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '', internalType: 'address', type: 'address' }, + { name: '', internalType: 'bytes', type: 'bytes' }, + ], + name: 'upgradeToAndCall', + outputs: [], + stateMutability: 'payable', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'previousAdmin', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'newAdmin', + internalType: 'address', + type: 'address', + indexed: false, + }, + ], + name: 'AdminChanged', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'beacon', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'BeaconUpgraded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'implementation', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'Upgraded', + }, +] as const + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// IUniswapV3Pool +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const iUniswapV3PoolAbi = [ + { + type: 'function', + inputs: [ + { name: 'tickLower', internalType: 'int24', type: 'int24' }, + { name: 'tickUpper', internalType: 'int24', type: 'int24' }, + { name: 'amount', internalType: 'uint128', type: 'uint128' }, + ], + name: 'burn', + outputs: [ + { name: 'amount0', internalType: 'uint256', type: 'uint256' }, + { name: 'amount1', internalType: 'uint256', type: 'uint256' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'recipient', internalType: 'address', type: 'address' }, + { name: 'tickLower', internalType: 'int24', type: 'int24' }, + { name: 'tickUpper', internalType: 'int24', type: 'int24' }, + { name: 'amount0Requested', internalType: 'uint128', type: 'uint128' }, + { name: 'amount1Requested', internalType: 'uint128', type: 'uint128' }, + ], + name: 'collect', + outputs: [ + { name: 'amount0', internalType: 'uint128', type: 'uint128' }, + { name: 'amount1', internalType: 'uint128', type: 'uint128' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'recipient', internalType: 'address', type: 'address' }, + { name: 'amount0Requested', internalType: 'uint128', type: 'uint128' }, + { name: 'amount1Requested', internalType: 'uint128', type: 'uint128' }, + ], + name: 'collectProtocol', + outputs: [ + { name: 'amount0', internalType: 'uint128', type: 'uint128' }, + { name: 'amount1', internalType: 'uint128', type: 'uint128' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'factory', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'fee', + outputs: [{ name: '', internalType: 'uint24', type: 'uint24' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'feeGrowthGlobal0X128', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'feeGrowthGlobal1X128', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'recipient', internalType: 'address', type: 'address' }, + { name: 'amount0', internalType: 'uint256', type: 'uint256' }, + { name: 'amount1', internalType: 'uint256', type: 'uint256' }, + { name: 'data', internalType: 'bytes', type: 'bytes' }, + ], + name: 'flash', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { + name: 'observationCardinalityNext', + internalType: 'uint16', + type: 'uint16', + }, + ], + name: 'increaseObservationCardinalityNext', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'sqrtPriceX96', internalType: 'uint160', type: 'uint160' }, + ], + name: 'initialize', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'liquidity', + outputs: [{ name: '', internalType: 'uint128', type: 'uint128' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'maxLiquidityPerTick', + outputs: [{ name: '', internalType: 'uint128', type: 'uint128' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'recipient', internalType: 'address', type: 'address' }, + { name: 'tickLower', internalType: 'int24', type: 'int24' }, + { name: 'tickUpper', internalType: 'int24', type: 'int24' }, + { name: 'amount', internalType: 'uint128', type: 'uint128' }, + { name: 'data', internalType: 'bytes', type: 'bytes' }, + ], + name: 'mint', + outputs: [ + { name: 'amount0', internalType: 'uint256', type: 'uint256' }, + { name: 'amount1', internalType: 'uint256', type: 'uint256' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'index', internalType: 'uint256', type: 'uint256' }], + name: 'observations', + outputs: [ + { name: 'blockTimestamp', internalType: 'uint32', type: 'uint32' }, + { name: 'tickCumulative', internalType: 'int56', type: 'int56' }, + { + name: 'secondsPerLiquidityCumulativeX128', + internalType: 'uint160', + type: 'uint160', + }, + { name: 'initialized', internalType: 'bool', type: 'bool' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'secondsAgos', internalType: 'uint32[]', type: 'uint32[]' }, + ], + name: 'observe', + outputs: [ + { name: 'tickCumulatives', internalType: 'int56[]', type: 'int56[]' }, + { + name: 'secondsPerLiquidityCumulativeX128s', + internalType: 'uint160[]', + type: 'uint160[]', + }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'key', internalType: 'bytes32', type: 'bytes32' }], + name: 'positions', + outputs: [ + { name: 'liquidity', internalType: 'uint128', type: 'uint128' }, + { + name: 'feeGrowthInside0LastX128', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'feeGrowthInside1LastX128', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'tokensOwed0', internalType: 'uint128', type: 'uint128' }, + { name: 'tokensOwed1', internalType: 'uint128', type: 'uint128' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'protocolFees', + outputs: [ + { name: 'token0', internalType: 'uint128', type: 'uint128' }, + { name: 'token1', internalType: 'uint128', type: 'uint128' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'feeProtocol0', internalType: 'uint8', type: 'uint8' }, + { name: 'feeProtocol1', internalType: 'uint8', type: 'uint8' }, + ], + name: 'setFeeProtocol', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'slot0', + outputs: [ + { name: 'sqrtPriceX96', internalType: 'uint160', type: 'uint160' }, + { name: 'tick', internalType: 'int24', type: 'int24' }, + { name: 'observationIndex', internalType: 'uint16', type: 'uint16' }, + { + name: 'observationCardinality', + internalType: 'uint16', + type: 'uint16', + }, + { + name: 'observationCardinalityNext', + internalType: 'uint16', + type: 'uint16', + }, + { name: 'feeProtocol', internalType: 'uint8', type: 'uint8' }, + { name: 'unlocked', internalType: 'bool', type: 'bool' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'tickLower', internalType: 'int24', type: 'int24' }, + { name: 'tickUpper', internalType: 'int24', type: 'int24' }, + ], + name: 'snapshotCumulativesInside', + outputs: [ + { name: 'tickCumulativeInside', internalType: 'int56', type: 'int56' }, + { + name: 'secondsPerLiquidityInsideX128', + internalType: 'uint160', + type: 'uint160', + }, + { name: 'secondsInside', internalType: 'uint32', type: 'uint32' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'recipient', internalType: 'address', type: 'address' }, + { name: 'zeroForOne', internalType: 'bool', type: 'bool' }, + { name: 'amountSpecified', internalType: 'int256', type: 'int256' }, + { name: 'sqrtPriceLimitX96', internalType: 'uint160', type: 'uint160' }, + { name: 'data', internalType: 'bytes', type: 'bytes' }, + ], + name: 'swap', + outputs: [ + { name: 'amount0', internalType: 'int256', type: 'int256' }, + { name: 'amount1', internalType: 'int256', type: 'int256' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'wordPosition', internalType: 'int16', type: 'int16' }], + name: 'tickBitmap', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'tickSpacing', + outputs: [{ name: '', internalType: 'int24', type: 'int24' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'tick', internalType: 'int24', type: 'int24' }], + name: 'ticks', + outputs: [ + { name: 'liquidityGross', internalType: 'uint128', type: 'uint128' }, + { name: 'liquidityNet', internalType: 'int128', type: 'int128' }, + { + name: 'feeGrowthOutside0X128', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'feeGrowthOutside1X128', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'tickCumulativeOutside', internalType: 'int56', type: 'int56' }, + { + name: 'secondsPerLiquidityOutsideX128', + internalType: 'uint160', + type: 'uint160', + }, + { name: 'secondsOutside', internalType: 'uint32', type: 'uint32' }, + { name: 'initialized', internalType: 'bool', type: 'bool' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'token0', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'token1', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'tickLower', + internalType: 'int24', + type: 'int24', + indexed: true, + }, + { + name: 'tickUpper', + internalType: 'int24', + type: 'int24', + indexed: true, + }, + { + name: 'amount', + internalType: 'uint128', + type: 'uint128', + indexed: false, + }, + { + name: 'amount0', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'amount1', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'Burn', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'recipient', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'tickLower', + internalType: 'int24', + type: 'int24', + indexed: true, + }, + { + name: 'tickUpper', + internalType: 'int24', + type: 'int24', + indexed: true, + }, + { + name: 'amount0', + internalType: 'uint128', + type: 'uint128', + indexed: false, + }, + { + name: 'amount1', + internalType: 'uint128', + type: 'uint128', + indexed: false, + }, + ], + name: 'Collect', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'sender', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'recipient', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'amount0', + internalType: 'uint128', + type: 'uint128', + indexed: false, + }, + { + name: 'amount1', + internalType: 'uint128', + type: 'uint128', + indexed: false, + }, + ], + name: 'CollectProtocol', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'sender', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'recipient', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'amount0', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'amount1', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'paid0', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'paid1', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'Flash', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'observationCardinalityNextOld', + internalType: 'uint16', + type: 'uint16', + indexed: false, + }, + { + name: 'observationCardinalityNextNew', + internalType: 'uint16', + type: 'uint16', + indexed: false, + }, + ], + name: 'IncreaseObservationCardinalityNext', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'sqrtPriceX96', + internalType: 'uint160', + type: 'uint160', + indexed: false, + }, + { name: 'tick', internalType: 'int24', type: 'int24', indexed: false }, + ], + name: 'Initialize', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'sender', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'tickLower', + internalType: 'int24', + type: 'int24', + indexed: true, + }, + { + name: 'tickUpper', + internalType: 'int24', + type: 'int24', + indexed: true, + }, + { + name: 'amount', + internalType: 'uint128', + type: 'uint128', + indexed: false, + }, + { + name: 'amount0', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'amount1', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'Mint', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'feeProtocol0Old', + internalType: 'uint8', + type: 'uint8', + indexed: false, + }, + { + name: 'feeProtocol1Old', + internalType: 'uint8', + type: 'uint8', + indexed: false, + }, + { + name: 'feeProtocol0New', + internalType: 'uint8', + type: 'uint8', + indexed: false, + }, + { + name: 'feeProtocol1New', + internalType: 'uint8', + type: 'uint8', + indexed: false, + }, + ], + name: 'SetFeeProtocol', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'sender', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'recipient', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'amount0', + internalType: 'int256', + type: 'int256', + indexed: false, + }, + { + name: 'amount1', + internalType: 'int256', + type: 'int256', + indexed: false, + }, + { + name: 'sqrtPriceX96', + internalType: 'uint160', + type: 'uint160', + indexed: false, + }, + { + name: 'liquidity', + internalType: 'uint128', + type: 'uint128', + indexed: false, + }, + { name: 'tick', internalType: 'int24', type: 'int24', indexed: false }, + ], + name: 'Swap', + }, + { type: 'error', inputs: [], name: 'AI' }, + { type: 'error', inputs: [], name: 'AS' }, + { type: 'error', inputs: [], name: 'F0' }, + { type: 'error', inputs: [], name: 'F1' }, + { type: 'error', inputs: [], name: 'IIA' }, + { type: 'error', inputs: [], name: 'L' }, + { type: 'error', inputs: [], name: 'LOK' }, + { type: 'error', inputs: [], name: 'M0' }, + { type: 'error', inputs: [], name: 'M1' }, + { type: 'error', inputs: [], name: 'TLM' }, + { type: 'error', inputs: [], name: 'TLU' }, + { type: 'error', inputs: [], name: 'TUM' }, +] as const + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// IUniswapV3PoolActions +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const iUniswapV3PoolActionsAbi = [ + { + type: 'function', + inputs: [ + { name: 'tickLower', internalType: 'int24', type: 'int24' }, + { name: 'tickUpper', internalType: 'int24', type: 'int24' }, + { name: 'amount', internalType: 'uint128', type: 'uint128' }, + ], + name: 'burn', + outputs: [ + { name: 'amount0', internalType: 'uint256', type: 'uint256' }, + { name: 'amount1', internalType: 'uint256', type: 'uint256' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'recipient', internalType: 'address', type: 'address' }, + { name: 'tickLower', internalType: 'int24', type: 'int24' }, + { name: 'tickUpper', internalType: 'int24', type: 'int24' }, + { name: 'amount0Requested', internalType: 'uint128', type: 'uint128' }, + { name: 'amount1Requested', internalType: 'uint128', type: 'uint128' }, + ], + name: 'collect', + outputs: [ + { name: 'amount0', internalType: 'uint128', type: 'uint128' }, + { name: 'amount1', internalType: 'uint128', type: 'uint128' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'recipient', internalType: 'address', type: 'address' }, + { name: 'amount0', internalType: 'uint256', type: 'uint256' }, + { name: 'amount1', internalType: 'uint256', type: 'uint256' }, + { name: 'data', internalType: 'bytes', type: 'bytes' }, + ], + name: 'flash', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { + name: 'observationCardinalityNext', + internalType: 'uint16', + type: 'uint16', + }, + ], + name: 'increaseObservationCardinalityNext', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'sqrtPriceX96', internalType: 'uint160', type: 'uint160' }, + ], + name: 'initialize', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'recipient', internalType: 'address', type: 'address' }, + { name: 'tickLower', internalType: 'int24', type: 'int24' }, + { name: 'tickUpper', internalType: 'int24', type: 'int24' }, + { name: 'amount', internalType: 'uint128', type: 'uint128' }, + { name: 'data', internalType: 'bytes', type: 'bytes' }, + ], + name: 'mint', + outputs: [ + { name: 'amount0', internalType: 'uint256', type: 'uint256' }, + { name: 'amount1', internalType: 'uint256', type: 'uint256' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'recipient', internalType: 'address', type: 'address' }, + { name: 'zeroForOne', internalType: 'bool', type: 'bool' }, + { name: 'amountSpecified', internalType: 'int256', type: 'int256' }, + { name: 'sqrtPriceLimitX96', internalType: 'uint160', type: 'uint160' }, + { name: 'data', internalType: 'bytes', type: 'bytes' }, + ], + name: 'swap', + outputs: [ + { name: 'amount0', internalType: 'int256', type: 'int256' }, + { name: 'amount1', internalType: 'int256', type: 'int256' }, + ], + stateMutability: 'nonpayable', + }, +] as const + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// IUniswapV3PoolDerivedState +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const iUniswapV3PoolDerivedStateAbi = [ + { + type: 'function', + inputs: [ + { name: 'secondsAgos', internalType: 'uint32[]', type: 'uint32[]' }, + ], + name: 'observe', + outputs: [ + { name: 'tickCumulatives', internalType: 'int56[]', type: 'int56[]' }, + { + name: 'secondsPerLiquidityCumulativeX128s', + internalType: 'uint160[]', + type: 'uint160[]', + }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'tickLower', internalType: 'int24', type: 'int24' }, + { name: 'tickUpper', internalType: 'int24', type: 'int24' }, + ], + name: 'snapshotCumulativesInside', + outputs: [ + { name: 'tickCumulativeInside', internalType: 'int56', type: 'int56' }, + { + name: 'secondsPerLiquidityInsideX128', + internalType: 'uint160', + type: 'uint160', + }, + { name: 'secondsInside', internalType: 'uint32', type: 'uint32' }, + ], + stateMutability: 'view', + }, +] as const + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// IUniswapV3PoolErrors +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const iUniswapV3PoolErrorsAbi = [ + { type: 'error', inputs: [], name: 'AI' }, + { type: 'error', inputs: [], name: 'AS' }, + { type: 'error', inputs: [], name: 'F0' }, + { type: 'error', inputs: [], name: 'F1' }, + { type: 'error', inputs: [], name: 'IIA' }, + { type: 'error', inputs: [], name: 'L' }, + { type: 'error', inputs: [], name: 'LOK' }, + { type: 'error', inputs: [], name: 'M0' }, + { type: 'error', inputs: [], name: 'M1' }, + { type: 'error', inputs: [], name: 'TLM' }, + { type: 'error', inputs: [], name: 'TLU' }, + { type: 'error', inputs: [], name: 'TUM' }, +] as const + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// IUniswapV3PoolEvents +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const iUniswapV3PoolEventsAbi = [ + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'tickLower', + internalType: 'int24', + type: 'int24', + indexed: true, + }, + { + name: 'tickUpper', + internalType: 'int24', + type: 'int24', + indexed: true, + }, + { + name: 'amount', + internalType: 'uint128', + type: 'uint128', + indexed: false, + }, + { + name: 'amount0', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'amount1', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'Burn', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'recipient', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'tickLower', + internalType: 'int24', + type: 'int24', + indexed: true, + }, + { + name: 'tickUpper', + internalType: 'int24', + type: 'int24', + indexed: true, + }, + { + name: 'amount0', + internalType: 'uint128', + type: 'uint128', + indexed: false, + }, + { + name: 'amount1', + internalType: 'uint128', + type: 'uint128', + indexed: false, + }, + ], + name: 'Collect', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'sender', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'recipient', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'amount0', + internalType: 'uint128', + type: 'uint128', + indexed: false, + }, + { + name: 'amount1', + internalType: 'uint128', + type: 'uint128', + indexed: false, + }, + ], + name: 'CollectProtocol', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'sender', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'recipient', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'amount0', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'amount1', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'paid0', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'paid1', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'Flash', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'observationCardinalityNextOld', + internalType: 'uint16', + type: 'uint16', + indexed: false, + }, + { + name: 'observationCardinalityNextNew', + internalType: 'uint16', + type: 'uint16', + indexed: false, + }, + ], + name: 'IncreaseObservationCardinalityNext', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'sqrtPriceX96', + internalType: 'uint160', + type: 'uint160', + indexed: false, + }, + { name: 'tick', internalType: 'int24', type: 'int24', indexed: false }, + ], + name: 'Initialize', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'sender', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'tickLower', + internalType: 'int24', + type: 'int24', + indexed: true, + }, + { + name: 'tickUpper', + internalType: 'int24', + type: 'int24', + indexed: true, + }, + { + name: 'amount', + internalType: 'uint128', + type: 'uint128', + indexed: false, + }, + { + name: 'amount0', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'amount1', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'Mint', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'feeProtocol0Old', + internalType: 'uint8', + type: 'uint8', + indexed: false, + }, + { + name: 'feeProtocol1Old', + internalType: 'uint8', + type: 'uint8', + indexed: false, + }, + { + name: 'feeProtocol0New', + internalType: 'uint8', + type: 'uint8', + indexed: false, + }, + { + name: 'feeProtocol1New', + internalType: 'uint8', + type: 'uint8', + indexed: false, + }, + ], + name: 'SetFeeProtocol', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'sender', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'recipient', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'amount0', + internalType: 'int256', + type: 'int256', + indexed: false, + }, + { + name: 'amount1', + internalType: 'int256', + type: 'int256', + indexed: false, + }, + { + name: 'sqrtPriceX96', + internalType: 'uint160', + type: 'uint160', + indexed: false, + }, + { + name: 'liquidity', + internalType: 'uint128', + type: 'uint128', + indexed: false, + }, + { name: 'tick', internalType: 'int24', type: 'int24', indexed: false }, + ], + name: 'Swap', + }, +] as const + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// IUniswapV3PoolImmutables +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const iUniswapV3PoolImmutablesAbi = [ + { + type: 'function', + inputs: [], + name: 'factory', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'fee', + outputs: [{ name: '', internalType: 'uint24', type: 'uint24' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'maxLiquidityPerTick', + outputs: [{ name: '', internalType: 'uint128', type: 'uint128' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'tickSpacing', + outputs: [{ name: '', internalType: 'int24', type: 'int24' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'token0', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'token1', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, +] as const + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// IUniswapV3PoolOwnerActions +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const iUniswapV3PoolOwnerActionsAbi = [ + { + type: 'function', + inputs: [ + { name: 'recipient', internalType: 'address', type: 'address' }, + { name: 'amount0Requested', internalType: 'uint128', type: 'uint128' }, + { name: 'amount1Requested', internalType: 'uint128', type: 'uint128' }, + ], + name: 'collectProtocol', + outputs: [ + { name: 'amount0', internalType: 'uint128', type: 'uint128' }, + { name: 'amount1', internalType: 'uint128', type: 'uint128' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'feeProtocol0', internalType: 'uint8', type: 'uint8' }, + { name: 'feeProtocol1', internalType: 'uint8', type: 'uint8' }, + ], + name: 'setFeeProtocol', + outputs: [], + stateMutability: 'nonpayable', + }, +] as const + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// IUniswapV3PoolState +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const iUniswapV3PoolStateAbi = [ + { + type: 'function', + inputs: [], + name: 'feeGrowthGlobal0X128', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'feeGrowthGlobal1X128', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'liquidity', + outputs: [{ name: '', internalType: 'uint128', type: 'uint128' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'index', internalType: 'uint256', type: 'uint256' }], + name: 'observations', + outputs: [ + { name: 'blockTimestamp', internalType: 'uint32', type: 'uint32' }, + { name: 'tickCumulative', internalType: 'int56', type: 'int56' }, + { + name: 'secondsPerLiquidityCumulativeX128', + internalType: 'uint160', + type: 'uint160', + }, + { name: 'initialized', internalType: 'bool', type: 'bool' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'key', internalType: 'bytes32', type: 'bytes32' }], + name: 'positions', + outputs: [ + { name: 'liquidity', internalType: 'uint128', type: 'uint128' }, + { + name: 'feeGrowthInside0LastX128', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'feeGrowthInside1LastX128', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'tokensOwed0', internalType: 'uint128', type: 'uint128' }, + { name: 'tokensOwed1', internalType: 'uint128', type: 'uint128' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'protocolFees', + outputs: [ + { name: 'token0', internalType: 'uint128', type: 'uint128' }, + { name: 'token1', internalType: 'uint128', type: 'uint128' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'slot0', + outputs: [ + { name: 'sqrtPriceX96', internalType: 'uint160', type: 'uint160' }, + { name: 'tick', internalType: 'int24', type: 'int24' }, + { name: 'observationIndex', internalType: 'uint16', type: 'uint16' }, + { + name: 'observationCardinality', + internalType: 'uint16', + type: 'uint16', + }, + { + name: 'observationCardinalityNext', + internalType: 'uint16', + type: 'uint16', + }, + { name: 'feeProtocol', internalType: 'uint8', type: 'uint8' }, + { name: 'unlocked', internalType: 'bool', type: 'bool' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'wordPosition', internalType: 'int16', type: 'int16' }], + name: 'tickBitmap', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'tick', internalType: 'int24', type: 'int24' }], + name: 'ticks', + outputs: [ + { name: 'liquidityGross', internalType: 'uint128', type: 'uint128' }, + { name: 'liquidityNet', internalType: 'int128', type: 'int128' }, + { + name: 'feeGrowthOutside0X128', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'feeGrowthOutside1X128', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'tickCumulativeOutside', internalType: 'int56', type: 'int56' }, + { + name: 'secondsPerLiquidityOutsideX128', + internalType: 'uint160', + type: 'uint160', + }, + { name: 'secondsOutside', internalType: 'uint32', type: 'uint32' }, + { name: 'initialized', internalType: 'bool', type: 'bool' }, + ], + stateMutability: 'view', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Initializable ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const initializableAbi = [ - { - type: "event", - anonymous: false, - inputs: [ - { name: "version", internalType: "uint8", type: "uint8", indexed: false }, - ], - name: "Initialized", - }, -] as const; + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'version', internalType: 'uint8', type: 'uint8', indexed: false }, + ], + name: 'Initialized', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // MultiToken ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const multiTokenAbi = [ - { - type: "function", - inputs: [], - name: "CATEGORY_NOT_REGISTERED", - outputs: [{ name: "", internalType: "uint8", type: "uint8" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "CRYPTO_KITTIES_INTERFACE_ID", - outputs: [{ name: "", internalType: "bytes4", type: "bytes4" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "ERC1155_INTERFACE_ID", - outputs: [{ name: "", internalType: "bytes4", type: "bytes4" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "ERC20_INTERFACE_ID", - outputs: [{ name: "", internalType: "bytes4", type: "bytes4" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "ERC721_INTERFACE_ID", - outputs: [{ name: "", internalType: "bytes4", type: "bytes4" }], - stateMutability: "view", - }, - { - type: "error", - inputs: [{ name: "categoryValue", internalType: "uint8", type: "uint8" }], - name: "UnsupportedCategory", - }, -] as const; + { + type: 'function', + inputs: [], + name: 'CATEGORY_NOT_REGISTERED', + outputs: [{ name: '', internalType: 'uint8', type: 'uint8' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'CRYPTO_KITTIES_INTERFACE_ID', + outputs: [{ name: '', internalType: 'bytes4', type: 'bytes4' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'ERC1155_INTERFACE_ID', + outputs: [{ name: '', internalType: 'bytes4', type: 'bytes4' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'ERC20_INTERFACE_ID', + outputs: [{ name: '', internalType: 'bytes4', type: 'bytes4' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'ERC721_INTERFACE_ID', + outputs: [{ name: '', internalType: 'bytes4', type: 'bytes4' }], + stateMutability: 'view', + }, + { + type: 'error', + inputs: [{ name: 'categoryValue', internalType: 'uint8', type: 'uint8' }], + name: 'UnsupportedCategory', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // MultiTokenCategoryRegistry ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const multiTokenCategoryRegistryAbi = [ - { - type: "function", - inputs: [], - name: "CATEGORY_NOT_REGISTERED", - outputs: [{ name: "", internalType: "uint8", type: "uint8" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "acceptOwnership", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "owner", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "pendingOwner", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "assetAddress", internalType: "address", type: "address" }, - { name: "category", internalType: "uint8", type: "uint8" }, - ], - name: "registerCategoryValue", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "assetAddress", internalType: "address", type: "address" }, - ], - name: "registeredCategoryValue", - outputs: [{ name: "", internalType: "uint8", type: "uint8" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "interfaceId", internalType: "bytes4", type: "bytes4" }], - name: "supportsInterface", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "newOwner", internalType: "address", type: "address" }], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "assetAddress", internalType: "address", type: "address" }, - ], - name: "unregisterCategoryValue", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "assetAddress", - internalType: "address", - type: "address", - indexed: true, - }, - { name: "category", internalType: "uint8", type: "uint8", indexed: true }, - ], - name: "CategoryRegistered", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "assetAddress", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "CategoryUnregistered", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "previousOwner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "newOwner", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "OwnershipTransferStarted", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "previousOwner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "newOwner", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "OwnershipTransferred", - }, - { type: "error", inputs: [], name: "ReservedCategoryValue" }, -] as const; + { + type: 'function', + inputs: [], + name: 'CATEGORY_NOT_REGISTERED', + outputs: [{ name: '', internalType: 'uint8', type: 'uint8' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'acceptOwnership', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'owner', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'pendingOwner', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'assetAddress', internalType: 'address', type: 'address' }, + { name: 'category', internalType: 'uint8', type: 'uint8' }, + ], + name: 'registerCategoryValue', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'assetAddress', internalType: 'address', type: 'address' }, + ], + name: 'registeredCategoryValue', + outputs: [{ name: '', internalType: 'uint8', type: 'uint8' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'renounceOwnership', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'interfaceId', internalType: 'bytes4', type: 'bytes4' }], + name: 'supportsInterface', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'newOwner', internalType: 'address', type: 'address' }], + name: 'transferOwnership', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'assetAddress', internalType: 'address', type: 'address' }, + ], + name: 'unregisterCategoryValue', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'assetAddress', + internalType: 'address', + type: 'address', + indexed: true, + }, + { name: 'category', internalType: 'uint8', type: 'uint8', indexed: true }, + ], + name: 'CategoryRegistered', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'assetAddress', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'CategoryUnregistered', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'previousOwner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'newOwner', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'OwnershipTransferStarted', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'previousOwner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'newOwner', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'OwnershipTransferred', + }, + { type: 'error', inputs: [], name: 'ReservedCategoryValue' }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Ownable ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const ownableAbi = [ - { - type: "function", - inputs: [], - name: "owner", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "newOwner", internalType: "address", type: "address" }], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "previousOwner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "newOwner", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "OwnershipTransferred", - }, -] as const; + { + type: 'function', + inputs: [], + name: 'owner', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'renounceOwnership', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'newOwner', internalType: 'address', type: 'address' }], + name: 'transferOwnership', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'previousOwner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'newOwner', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'OwnershipTransferred', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Ownable2Step ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const ownable2StepAbi = [ - { - type: "function", - inputs: [], - name: "acceptOwnership", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "owner", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "pendingOwner", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "newOwner", internalType: "address", type: "address" }], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "previousOwner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "newOwner", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "OwnershipTransferStarted", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "previousOwner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "newOwner", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "OwnershipTransferred", - }, -] as const; + { + type: 'function', + inputs: [], + name: 'acceptOwnership', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'owner', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'pendingOwner', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'renounceOwnership', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'newOwner', internalType: 'address', type: 'address' }], + name: 'transferOwnership', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'previousOwner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'newOwner', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'OwnershipTransferStarted', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'previousOwner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'newOwner', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'OwnershipTransferred', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Ownable2StepUpgradeable ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const ownable2StepUpgradeableAbi = [ - { - type: "function", - inputs: [], - name: "acceptOwnership", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "owner", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "pendingOwner", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "newOwner", internalType: "address", type: "address" }], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "version", internalType: "uint8", type: "uint8", indexed: false }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "previousOwner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "newOwner", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "OwnershipTransferStarted", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "previousOwner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "newOwner", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "OwnershipTransferred", - }, -] as const; + { + type: 'function', + inputs: [], + name: 'acceptOwnership', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'owner', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'pendingOwner', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'renounceOwnership', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'newOwner', internalType: 'address', type: 'address' }], + name: 'transferOwnership', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'version', internalType: 'uint8', type: 'uint8', indexed: false }, + ], + name: 'Initialized', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'previousOwner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'newOwner', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'OwnershipTransferStarted', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'previousOwner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'newOwner', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'OwnershipTransferred', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // OwnableUpgradeable ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const ownableUpgradeableAbi = [ - { - type: "function", - inputs: [], - name: "owner", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "newOwner", internalType: "address", type: "address" }], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "version", internalType: "uint8", type: "uint8", indexed: false }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "previousOwner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "newOwner", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "OwnershipTransferred", - }, -] as const; + { + type: 'function', + inputs: [], + name: 'owner', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'renounceOwnership', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'newOwner', internalType: 'address', type: 'address' }], + name: 'transferOwnership', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'version', internalType: 'uint8', type: 'uint8', indexed: false }, + ], + name: 'Initialized', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'previousOwner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'newOwner', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'OwnershipTransferred', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // PWNConfig ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const pwnConfigAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { - type: "function", - inputs: [], - name: "MAX_FEE", - outputs: [{ name: "", internalType: "uint16", type: "uint16" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "acceptOwnership", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "fee", - outputs: [{ name: "", internalType: "uint16", type: "uint16" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "feeCollector", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "pool", internalType: "address", type: "address" }], - name: "getPoolAdapter", - outputs: [ - { name: "", internalType: "contract IPoolAdapter", type: "address" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "asset", internalType: "address", type: "address" }], - name: "getStateFingerprintComputer", - outputs: [ - { - name: "", - internalType: "contract IStateFingerpringComputer", - type: "address", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_owner", internalType: "address", type: "address" }, - { name: "_fee", internalType: "uint16", type: "uint16" }, - { name: "_feeCollector", internalType: "address", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "loanContract", internalType: "address", type: "address" }, - ], - name: "loanMetadataUri", - outputs: [{ name: "uri", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "owner", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "pendingOwner", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "pool", internalType: "address", type: "address" }, - { name: "adapter", internalType: "address", type: "address" }, - ], - name: "registerPoolAdapter", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "asset", internalType: "address", type: "address" }, - { name: "computer", internalType: "address", type: "address" }, - ], - name: "registerStateFingerprintComputer", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "metadataUri", internalType: "string", type: "string" }], - name: "setDefaultLOANMetadataUri", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_fee", internalType: "uint16", type: "uint16" }], - name: "setFee", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_feeCollector", internalType: "address", type: "address" }, - ], - name: "setFeeCollector", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "loanContract", internalType: "address", type: "address" }, - { name: "metadataUri", internalType: "string", type: "string" }, - ], - name: "setLOANMetadataUri", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "newOwner", internalType: "address", type: "address" }], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newUri", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "DefaultLOANMetadataUriUpdated", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "oldFeeCollector", - internalType: "address", - type: "address", - indexed: false, - }, - { - name: "newFeeCollector", - internalType: "address", - type: "address", - indexed: false, - }, - ], - name: "FeeCollectorUpdated", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "oldFee", - internalType: "uint16", - type: "uint16", - indexed: false, - }, - { - name: "newFee", - internalType: "uint16", - type: "uint16", - indexed: false, - }, - ], - name: "FeeUpdated", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "version", internalType: "uint8", type: "uint8", indexed: false }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "loanContract", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "newUri", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "LOANMetadataUriUpdated", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "previousOwner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "newOwner", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "OwnershipTransferStarted", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "previousOwner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "newOwner", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "OwnershipTransferred", - }, - { - type: "error", - inputs: [ - { name: "computer", internalType: "address", type: "address" }, - { name: "asset", internalType: "address", type: "address" }, - ], - name: "InvalidComputerContract", - }, - { - type: "error", - inputs: [ - { name: "fee", internalType: "uint256", type: "uint256" }, - { name: "limit", internalType: "uint256", type: "uint256" }, - ], - name: "InvalidFeeValue", - }, - { type: "error", inputs: [], name: "ZeroFeeCollector" }, - { type: "error", inputs: [], name: "ZeroLoanContract" }, -] as const; + { type: 'constructor', inputs: [], stateMutability: 'nonpayable' }, + { + type: 'function', + inputs: [], + name: 'MAX_FEE', + outputs: [{ name: '', internalType: 'uint16', type: 'uint16' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'acceptOwnership', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'fee', + outputs: [{ name: '', internalType: 'uint16', type: 'uint16' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'feeCollector', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'pool', internalType: 'address', type: 'address' }], + name: 'getPoolAdapter', + outputs: [ + { name: '', internalType: 'contract IPoolAdapter', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'asset', internalType: 'address', type: 'address' }], + name: 'getStateFingerprintComputer', + outputs: [ + { + name: '', + internalType: 'contract IStateFingerpringComputer', + type: 'address', + }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_owner', internalType: 'address', type: 'address' }, + { name: '_fee', internalType: 'uint16', type: 'uint16' }, + { name: '_feeCollector', internalType: 'address', type: 'address' }, + ], + name: 'initialize', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + name: 'loanMetadataUri', + outputs: [{ name: 'uri', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'owner', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'pendingOwner', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'pool', internalType: 'address', type: 'address' }, + { name: 'adapter', internalType: 'address', type: 'address' }, + ], + name: 'registerPoolAdapter', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'asset', internalType: 'address', type: 'address' }, + { name: 'computer', internalType: 'address', type: 'address' }, + ], + name: 'registerStateFingerprintComputer', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'renounceOwnership', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'metadataUri', internalType: 'string', type: 'string' }], + name: 'setDefaultLOANMetadataUri', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: '_fee', internalType: 'uint16', type: 'uint16' }], + name: 'setFee', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_feeCollector', internalType: 'address', type: 'address' }, + ], + name: 'setFeeCollector', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'loanContract', internalType: 'address', type: 'address' }, + { name: 'metadataUri', internalType: 'string', type: 'string' }, + ], + name: 'setLOANMetadataUri', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'newOwner', internalType: 'address', type: 'address' }], + name: 'transferOwnership', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'newUri', + internalType: 'string', + type: 'string', + indexed: false, + }, + ], + name: 'DefaultLOANMetadataUriUpdated', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'oldFeeCollector', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'newFeeCollector', + internalType: 'address', + type: 'address', + indexed: false, + }, + ], + name: 'FeeCollectorUpdated', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'oldFee', + internalType: 'uint16', + type: 'uint16', + indexed: false, + }, + { + name: 'newFee', + internalType: 'uint16', + type: 'uint16', + indexed: false, + }, + ], + name: 'FeeUpdated', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'version', internalType: 'uint8', type: 'uint8', indexed: false }, + ], + name: 'Initialized', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'loanContract', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'newUri', + internalType: 'string', + type: 'string', + indexed: false, + }, + ], + name: 'LOANMetadataUriUpdated', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'previousOwner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'newOwner', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'OwnershipTransferStarted', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'previousOwner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'newOwner', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'OwnershipTransferred', + }, + { + type: 'error', + inputs: [ + { name: 'computer', internalType: 'address', type: 'address' }, + { name: 'asset', internalType: 'address', type: 'address' }, + ], + name: 'InvalidComputerContract', + }, + { + type: 'error', + inputs: [ + { name: 'fee', internalType: 'uint256', type: 'uint256' }, + { name: 'limit', internalType: 'uint256', type: 'uint256' }, + ], + name: 'InvalidFeeValue', + }, + { type: 'error', inputs: [], name: 'ZeroFeeCollector' }, + { type: 'error', inputs: [], name: 'ZeroLoanContract' }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // PWNHub ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const pwnHubAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { - type: "function", - inputs: [], - name: "acceptOwnership", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_address", internalType: "address", type: "address" }, - { name: "tag", internalType: "bytes32", type: "bytes32" }, - ], - name: "hasTag", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "owner", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "pendingOwner", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_address", internalType: "address", type: "address" }, - { name: "tag", internalType: "bytes32", type: "bytes32" }, - { name: "_hasTag", internalType: "bool", type: "bool" }, - ], - name: "setTag", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_addresses", internalType: "address[]", type: "address[]" }, - { name: "_tags", internalType: "bytes32[]", type: "bytes32[]" }, - { name: "_hasTag", internalType: "bool", type: "bool" }, - ], - name: "setTags", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "newOwner", internalType: "address", type: "address" }], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "previousOwner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "newOwner", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "OwnershipTransferStarted", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "previousOwner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "newOwner", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "OwnershipTransferred", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_address", - internalType: "address", - type: "address", - indexed: true, - }, - { name: "tag", internalType: "bytes32", type: "bytes32", indexed: true }, - { name: "hasTag", internalType: "bool", type: "bool", indexed: false }, - ], - name: "TagSet", - }, - { type: "error", inputs: [], name: "InvalidInputData" }, -] as const; + { type: 'constructor', inputs: [], stateMutability: 'nonpayable' }, + { + type: 'function', + inputs: [], + name: 'acceptOwnership', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_address', internalType: 'address', type: 'address' }, + { name: 'tag', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'hasTag', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'owner', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'pendingOwner', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'renounceOwnership', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_address', internalType: 'address', type: 'address' }, + { name: 'tag', internalType: 'bytes32', type: 'bytes32' }, + { name: '_hasTag', internalType: 'bool', type: 'bool' }, + ], + name: 'setTag', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_addresses', internalType: 'address[]', type: 'address[]' }, + { name: '_tags', internalType: 'bytes32[]', type: 'bytes32[]' }, + { name: '_hasTag', internalType: 'bool', type: 'bool' }, + ], + name: 'setTags', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'newOwner', internalType: 'address', type: 'address' }], + name: 'transferOwnership', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'previousOwner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'newOwner', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'OwnershipTransferStarted', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'previousOwner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'newOwner', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'OwnershipTransferred', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: '_address', + internalType: 'address', + type: 'address', + indexed: true, + }, + { name: 'tag', internalType: 'bytes32', type: 'bytes32', indexed: true }, + { name: 'hasTag', internalType: 'bool', type: 'bool', indexed: false }, + ], + name: 'TagSet', + }, + { type: 'error', inputs: [], name: 'InvalidInputData' }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // PWNLOAN ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const pwnloanAbi = [ - { - type: "constructor", - inputs: [{ name: "_hub", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "to", internalType: "address", type: "address" }, - { name: "tokenId", internalType: "uint256", type: "uint256" }, - ], - name: "approve", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "owner", internalType: "address", type: "address" }], - name: "balanceOf", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "loanId", internalType: "uint256", type: "uint256" }], - name: "burn", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "tokenId", internalType: "uint256", type: "uint256" }], - name: "getApproved", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "tokenId", internalType: "uint256", type: "uint256" }], - name: "getStateFingerprint", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "hub", - outputs: [{ name: "", internalType: "contract PWNHub", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "owner", internalType: "address", type: "address" }, - { name: "operator", internalType: "address", type: "address" }, - ], - name: "isApprovedForAll", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "lastLoanId", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "loanContract", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "owner", internalType: "address", type: "address" }], - name: "mint", - outputs: [{ name: "loanId", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "name", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "tokenId", internalType: "uint256", type: "uint256" }], - name: "ownerOf", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "tokenId", internalType: "uint256", type: "uint256" }, - ], - name: "safeTransferFrom", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "tokenId", internalType: "uint256", type: "uint256" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "safeTransferFrom", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "operator", internalType: "address", type: "address" }, - { name: "approved", internalType: "bool", type: "bool" }, - ], - name: "setApprovalForAll", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "interfaceId", internalType: "bytes4", type: "bytes4" }], - name: "supportsInterface", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "symbol", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "tokenId", internalType: "uint256", type: "uint256" }], - name: "tokenURI", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "tokenId", internalType: "uint256", type: "uint256" }, - ], - name: "transferFrom", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "owner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "approved", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "tokenId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "Approval", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "owner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "operator", - internalType: "address", - type: "address", - indexed: true, - }, - { name: "approved", internalType: "bool", type: "bool", indexed: false }, - ], - name: "ApprovalForAll", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "loanId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "LOANBurned", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "loanId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "loanContract", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "owner", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "LOANMinted", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - { - name: "tokenId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "Transfer", - }, - { - type: "error", - inputs: [{ name: "tag", internalType: "bytes32", type: "bytes32" }], - name: "CallerMissingHubTag", - }, - { type: "error", inputs: [], name: "InvalidLoanContractCaller" }, -] as const; + { + type: 'constructor', + inputs: [{ name: '_hub', internalType: 'address', type: 'address' }], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'approve', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'owner', internalType: 'address', type: 'address' }], + name: 'balanceOf', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'loanId', internalType: 'uint256', type: 'uint256' }], + name: 'burn', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'tokenId', internalType: 'uint256', type: 'uint256' }], + name: 'getApproved', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'tokenId', internalType: 'uint256', type: 'uint256' }], + name: 'getStateFingerprint', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'hub', + outputs: [{ name: '', internalType: 'contract PWNHub', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'owner', internalType: 'address', type: 'address' }, + { name: 'operator', internalType: 'address', type: 'address' }, + ], + name: 'isApprovedForAll', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'lastLoanId', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + name: 'loanContract', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'owner', internalType: 'address', type: 'address' }], + name: 'mint', + outputs: [{ name: 'loanId', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'name', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'tokenId', internalType: 'uint256', type: 'uint256' }], + name: 'ownerOf', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'from', internalType: 'address', type: 'address' }, + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'safeTransferFrom', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'from', internalType: 'address', type: 'address' }, + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + { name: 'data', internalType: 'bytes', type: 'bytes' }, + ], + name: 'safeTransferFrom', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'operator', internalType: 'address', type: 'address' }, + { name: 'approved', internalType: 'bool', type: 'bool' }, + ], + name: 'setApprovalForAll', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'interfaceId', internalType: 'bytes4', type: 'bytes4' }], + name: 'supportsInterface', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'symbol', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'tokenId', internalType: 'uint256', type: 'uint256' }], + name: 'tokenURI', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'from', internalType: 'address', type: 'address' }, + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'transferFrom', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'approved', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'tokenId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'Approval', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'operator', + internalType: 'address', + type: 'address', + indexed: true, + }, + { name: 'approved', internalType: 'bool', type: 'bool', indexed: false }, + ], + name: 'ApprovalForAll', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'loanId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'LOANBurned', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'loanId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'loanContract', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'LOANMinted', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'from', internalType: 'address', type: 'address', indexed: true }, + { name: 'to', internalType: 'address', type: 'address', indexed: true }, + { + name: 'tokenId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'Transfer', + }, + { + type: 'error', + inputs: [{ name: 'tag', internalType: 'bytes32', type: 'bytes32' }], + name: 'CallerMissingHubTag', + }, + { type: 'error', inputs: [], name: 'InvalidLoanContractCaller' }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // PWNRevokedNonce ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const pwnRevokedNonceAbi = [ - { - type: "constructor", - inputs: [ - { name: "_hub", internalType: "address", type: "address" }, - { name: "_accessTag", internalType: "bytes32", type: "bytes32" }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "accessTag", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "owner", internalType: "address", type: "address" }], - name: "currentNonceSpace", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "hub", - outputs: [{ name: "", internalType: "contract PWNHub", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "owner", internalType: "address", type: "address" }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - ], - name: "isNonceRevoked", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "owner", internalType: "address", type: "address" }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - ], - name: "isNonceUsable", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "nonce", internalType: "uint256", type: "uint256" }], - name: "revokeNonce", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "owner", internalType: "address", type: "address" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - ], - name: "revokeNonce", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - ], - name: "revokeNonce", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "owner", internalType: "address", type: "address" }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - ], - name: "revokeNonce", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "revokeNonceSpace", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "nonces", internalType: "uint256[]", type: "uint256[]" }], - name: "revokeNonces", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "owner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "nonceSpace", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "nonce", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "NonceRevoked", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "owner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "nonceSpace", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "NonceSpaceRevoked", - }, - { - type: "error", - inputs: [ - { name: "addr", internalType: "address", type: "address" }, - { name: "tag", internalType: "bytes32", type: "bytes32" }, - ], - name: "AddressMissingHubTag", - }, - { - type: "error", - inputs: [ - { name: "addr", internalType: "address", type: "address" }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - ], - name: "NonceAlreadyRevoked", - }, - { - type: "error", - inputs: [ - { name: "addr", internalType: "address", type: "address" }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - ], - name: "NonceNotUsable", - }, -] as const; + { + type: 'constructor', + inputs: [ + { name: '_hub', internalType: 'address', type: 'address' }, + { name: '_accessTag', internalType: 'bytes32', type: 'bytes32' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'accessTag', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'owner', internalType: 'address', type: 'address' }], + name: 'currentNonceSpace', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'hub', + outputs: [{ name: '', internalType: 'contract PWNHub', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'owner', internalType: 'address', type: 'address' }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + name: 'isNonceRevoked', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'owner', internalType: 'address', type: 'address' }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + name: 'isNonceUsable', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'nonce', internalType: 'uint256', type: 'uint256' }], + name: 'revokeNonce', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'owner', internalType: 'address', type: 'address' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + name: 'revokeNonce', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + name: 'revokeNonce', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'owner', internalType: 'address', type: 'address' }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + name: 'revokeNonce', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'revokeNonceSpace', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'nonces', internalType: 'uint256[]', type: 'uint256[]' }], + name: 'revokeNonces', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'nonceSpace', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'nonce', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'NonceRevoked', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'nonceSpace', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'NonceSpaceRevoked', + }, + { + type: 'error', + inputs: [ + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'tag', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'AddressMissingHubTag', + }, + { + type: 'error', + inputs: [ + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + name: 'NonceAlreadyRevoked', + }, + { + type: 'error', + inputs: [ + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + name: 'NonceNotUsable', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // PWNSignatureChecker ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const pwnSignatureCheckerAbi = [ - { - type: "error", - inputs: [ - { name: "signer", internalType: "address", type: "address" }, - { name: "digest", internalType: "bytes32", type: "bytes32" }, - ], - name: "InvalidSignature", - }, - { - type: "error", - inputs: [{ name: "length", internalType: "uint256", type: "uint256" }], - name: "InvalidSignatureLength", - }, -] as const; + { + type: 'error', + inputs: [ + { name: 'signer', internalType: 'address', type: 'address' }, + { name: 'digest', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'InvalidSignature', + }, + { + type: 'error', + inputs: [{ name: 'length', internalType: 'uint256', type: 'uint256' }], + name: 'InvalidSignatureLength', + }, +] as const + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// PWNSignatureCheckerHarness +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const pwnSignatureCheckerHarnessAbi = [ + { + type: 'function', + inputs: [ + { name: 'signer', internalType: 'address', type: 'address' }, + { name: 'hash', internalType: 'bytes32', type: 'bytes32' }, + { name: 'signature', internalType: 'bytes', type: 'bytes' }, + ], + name: 'exposed_isValidSignatureNow', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'error', + inputs: [{ name: 'length', internalType: 'uint256', type: 'uint256' }], + name: 'InvalidSignatureLength', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // PWNSimpleLoan ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const pwnSimpleLoanAbi = [ - { - type: "constructor", - inputs: [ - { name: "_hub", internalType: "address", type: "address" }, - { name: "_loanToken", internalType: "address", type: "address" }, - { name: "_config", internalType: "address", type: "address" }, - { name: "_revokedNonce", internalType: "address", type: "address" }, - { name: "_categoryRegistry", internalType: "address", type: "address" }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "ACCRUING_INTEREST_APR_DECIMALS", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "ACCRUING_INTEREST_APR_DENOMINATOR", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "DOMAIN_SEPARATOR", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "EXTENSION_PROPOSAL_TYPEHASH", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "MAX_ACCRUING_INTEREST_APR", - outputs: [{ name: "", internalType: "uint40", type: "uint40" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "MAX_EXTENSION_DURATION", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "MINUTES_IN_YEAR", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "MIN_EXTENSION_DURATION", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "MIN_LOAN_DURATION", - outputs: [{ name: "", internalType: "uint32", type: "uint32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "VERSION", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "categoryRegistry", - outputs: [ - { - name: "", - internalType: "contract IMultiTokenCategoryRegistry", - type: "address", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "loanId", internalType: "uint256", type: "uint256" }], - name: "claimLOAN", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "config", - outputs: [ - { name: "", internalType: "contract PWNConfig", type: "address" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "proposalSpec", - internalType: "struct PWNSimpleLoan.ProposalSpec", - type: "tuple", - components: [ - { - name: "proposalContract", - internalType: "address", - type: "address", - }, - { name: "proposalData", internalType: "bytes", type: "bytes" }, - { - name: "proposalInclusionProof", - internalType: "bytes32[]", - type: "bytes32[]", - }, - { name: "signature", internalType: "bytes", type: "bytes" }, - ], - }, - { - name: "lenderSpec", - internalType: "struct PWNSimpleLoan.LenderSpec", - type: "tuple", - components: [ - { name: "sourceOfFunds", internalType: "address", type: "address" }, - ], - }, - { - name: "callerSpec", - internalType: "struct PWNSimpleLoan.CallerSpec", - type: "tuple", - components: [ - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "revokeNonce", internalType: "bool", type: "bool" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - ], - }, - { name: "extra", internalType: "bytes", type: "bytes" }, - ], - name: "createLOAN", - outputs: [{ name: "loanId", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "extension", - internalType: "struct PWNSimpleLoan.ExtensionProposal", - type: "tuple", - components: [ - { name: "loanId", internalType: "uint256", type: "uint256" }, - { - name: "compensationAddress", - internalType: "address", - type: "address", - }, - { - name: "compensationAmount", - internalType: "uint256", - type: "uint256", - }, - { name: "duration", internalType: "uint40", type: "uint40" }, - { name: "expiration", internalType: "uint40", type: "uint40" }, - { name: "proposer", internalType: "address", type: "address" }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - ], - }, - { name: "signature", internalType: "bytes", type: "bytes" }, - ], - name: "extendLOAN", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - name: "extensionProposalsMade", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "extension", - internalType: "struct PWNSimpleLoan.ExtensionProposal", - type: "tuple", - components: [ - { name: "loanId", internalType: "uint256", type: "uint256" }, - { - name: "compensationAddress", - internalType: "address", - type: "address", - }, - { - name: "compensationAmount", - internalType: "uint256", - type: "uint256", - }, - { name: "duration", internalType: "uint40", type: "uint40" }, - { name: "expiration", internalType: "uint40", type: "uint40" }, - { name: "proposer", internalType: "address", type: "address" }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - ], - }, - ], - name: "getExtensionHash", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "loanId", internalType: "uint256", type: "uint256" }], - name: "getLOAN", - outputs: [ - { name: "status", internalType: "uint8", type: "uint8" }, - { name: "startTimestamp", internalType: "uint40", type: "uint40" }, - { name: "defaultTimestamp", internalType: "uint40", type: "uint40" }, - { name: "borrower", internalType: "address", type: "address" }, - { name: "originalLender", internalType: "address", type: "address" }, - { name: "loanOwner", internalType: "address", type: "address" }, - { name: "accruingInterestAPR", internalType: "uint24", type: "uint24" }, - { name: "fixedInterestAmount", internalType: "uint256", type: "uint256" }, - { - name: "credit", - internalType: "struct MultiToken.Asset", - type: "tuple", - components: [ - { - name: "category", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { name: "assetAddress", internalType: "address", type: "address" }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - }, - { - name: "collateral", - internalType: "struct MultiToken.Asset", - type: "tuple", - components: [ - { - name: "category", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { name: "assetAddress", internalType: "address", type: "address" }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - }, - { - name: "originalSourceOfFunds", - internalType: "address", - type: "address", - }, - { name: "repaymentAmount", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "lenderSpec", - internalType: "struct PWNSimpleLoan.LenderSpec", - type: "tuple", - components: [ - { name: "sourceOfFunds", internalType: "address", type: "address" }, - ], - }, - ], - name: "getLenderSpecHash", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [{ name: "tokenId", internalType: "uint256", type: "uint256" }], - name: "getStateFingerprint", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "hub", - outputs: [{ name: "", internalType: "contract PWNHub", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "asset", - internalType: "struct MultiToken.Asset", - type: "tuple", - components: [ - { - name: "category", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { name: "assetAddress", internalType: "address", type: "address" }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - }, - ], - name: "isValidAsset", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "loanMetadataUri", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "loanId", internalType: "uint256", type: "uint256" }], - name: "loanRepaymentAmount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "loanToken", - outputs: [{ name: "", internalType: "contract PWNLOAN", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "extension", - internalType: "struct PWNSimpleLoan.ExtensionProposal", - type: "tuple", - components: [ - { name: "loanId", internalType: "uint256", type: "uint256" }, - { - name: "compensationAddress", - internalType: "address", - type: "address", - }, - { - name: "compensationAmount", - internalType: "uint256", - type: "uint256", - }, - { name: "duration", internalType: "uint40", type: "uint40" }, - { name: "expiration", internalType: "uint40", type: "uint40" }, - { name: "proposer", internalType: "address", type: "address" }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - ], - }, - ], - name: "makeExtensionProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "", internalType: "address", type: "address" }, - { name: "", internalType: "address", type: "address" }, - { name: "", internalType: "uint256[]", type: "uint256[]" }, - { name: "", internalType: "uint256[]", type: "uint256[]" }, - { name: "", internalType: "bytes", type: "bytes" }, - ], - name: "onERC1155BatchReceived", - outputs: [{ name: "", internalType: "bytes4", type: "bytes4" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "operator", internalType: "address", type: "address" }, - { name: "", internalType: "address", type: "address" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "bytes", type: "bytes" }, - ], - name: "onERC1155Received", - outputs: [{ name: "", internalType: "bytes4", type: "bytes4" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "operator", internalType: "address", type: "address" }, - { name: "", internalType: "address", type: "address" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "bytes", type: "bytes" }, - ], - name: "onERC721Received", - outputs: [{ name: "", internalType: "bytes4", type: "bytes4" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "loanId", internalType: "uint256", type: "uint256" }], - name: "repayLOAN", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "revokedNonce", - outputs: [ - { name: "", internalType: "contract PWNRevokedNonce", type: "address" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "interfaceId", internalType: "bytes4", type: "bytes4" }], - name: "supportsInterface", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "loanId", internalType: "uint256", type: "uint256" }, - { name: "creditAmount", internalType: "uint256", type: "uint256" }, - { name: "loanOwner", internalType: "address", type: "address" }, - ], - name: "tryClaimRepaidLOAN", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "extensionHash", - internalType: "bytes32", - type: "bytes32", - indexed: true, - }, - { - name: "proposer", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "proposal", - internalType: "struct PWNSimpleLoan.ExtensionProposal", - type: "tuple", - components: [ - { name: "loanId", internalType: "uint256", type: "uint256" }, - { - name: "compensationAddress", - internalType: "address", - type: "address", - }, - { - name: "compensationAmount", - internalType: "uint256", - type: "uint256", - }, - { name: "duration", internalType: "uint40", type: "uint40" }, - { name: "expiration", internalType: "uint40", type: "uint40" }, - { name: "proposer", internalType: "address", type: "address" }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - ], - indexed: false, - }, - ], - name: "ExtensionProposalMade", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "loanId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { name: "defaulted", internalType: "bool", type: "bool", indexed: true }, - ], - name: "LOANClaimed", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "loanId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "proposalHash", - internalType: "bytes32", - type: "bytes32", - indexed: true, - }, - { - name: "proposalContract", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "terms", - internalType: "struct PWNSimpleLoan.Terms", - type: "tuple", - components: [ - { name: "lender", internalType: "address", type: "address" }, - { name: "borrower", internalType: "address", type: "address" }, - { name: "duration", internalType: "uint32", type: "uint32" }, - { - name: "collateral", - internalType: "struct MultiToken.Asset", - type: "tuple", - components: [ - { - name: "category", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "assetAddress", - internalType: "address", - type: "address", - }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - }, - { - name: "credit", - internalType: "struct MultiToken.Asset", - type: "tuple", - components: [ - { - name: "category", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "assetAddress", - internalType: "address", - type: "address", - }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "lenderSpecHash", internalType: "bytes32", type: "bytes32" }, - { - name: "borrowerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - ], - indexed: false, - }, - { - name: "lenderSpec", - internalType: "struct PWNSimpleLoan.LenderSpec", - type: "tuple", - components: [ - { name: "sourceOfFunds", internalType: "address", type: "address" }, - ], - indexed: false, - }, - { name: "extra", internalType: "bytes", type: "bytes", indexed: false }, - ], - name: "LOANCreated", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "loanId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "originalDefaultTimestamp", - internalType: "uint40", - type: "uint40", - indexed: false, - }, - { - name: "extendedDefaultTimestamp", - internalType: "uint40", - type: "uint40", - indexed: false, - }, - ], - name: "LOANExtended", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "loanId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "LOANPaidBack", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "asset", - internalType: "struct MultiToken.Asset", - type: "tuple", - components: [ - { - name: "category", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { name: "assetAddress", internalType: "address", type: "address" }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - indexed: false, - }, - { - name: "poolAdapter", - internalType: "address", - type: "address", - indexed: true, - }, - { name: "pool", internalType: "address", type: "address", indexed: true }, - { - name: "owner", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "PoolSupply", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "asset", - internalType: "struct MultiToken.Asset", - type: "tuple", - components: [ - { - name: "category", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { name: "assetAddress", internalType: "address", type: "address" }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - indexed: false, - }, - { - name: "poolAdapter", - internalType: "address", - type: "address", - indexed: true, - }, - { name: "pool", internalType: "address", type: "address", indexed: true }, - { - name: "owner", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "PoolWithdraw", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "asset", - internalType: "struct MultiToken.Asset", - type: "tuple", - components: [ - { - name: "category", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { name: "assetAddress", internalType: "address", type: "address" }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - indexed: false, - }, - { - name: "origin", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "VaultPull", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "asset", - internalType: "struct MultiToken.Asset", - type: "tuple", - components: [ - { - name: "category", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { name: "assetAddress", internalType: "address", type: "address" }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - indexed: false, - }, - { - name: "beneficiary", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "VaultPush", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "asset", - internalType: "struct MultiToken.Asset", - type: "tuple", - components: [ - { - name: "category", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { name: "assetAddress", internalType: "address", type: "address" }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - indexed: false, - }, - { - name: "origin", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "beneficiary", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "VaultPushFrom", - }, - { - type: "error", - inputs: [ - { name: "addr", internalType: "address", type: "address" }, - { name: "tag", internalType: "bytes32", type: "bytes32" }, - ], - name: "AddressMissingHubTag", - }, - { type: "error", inputs: [], name: "CallerNotLOANTokenHolder" }, - { type: "error", inputs: [], name: "CallerNotVault" }, - { - type: "error", - inputs: [ - { name: "current", internalType: "uint256", type: "uint256" }, - { name: "expiration", internalType: "uint256", type: "uint256" }, - ], - name: "Expired", - }, - { type: "error", inputs: [], name: "IncompleteTransfer" }, - { - type: "error", - inputs: [ - { name: "current", internalType: "uint256", type: "uint256" }, - { name: "limit", internalType: "uint256", type: "uint256" }, - ], - name: "InterestAPROutOfBounds", - }, - { - type: "error", - inputs: [ - { name: "current", internalType: "uint256", type: "uint256" }, - { name: "limit", internalType: "uint256", type: "uint256" }, - ], - name: "InvalidDuration", - }, - { type: "error", inputs: [], name: "InvalidExtensionCaller" }, - { - type: "error", - inputs: [ - { name: "duration", internalType: "uint256", type: "uint256" }, - { name: "limit", internalType: "uint256", type: "uint256" }, - ], - name: "InvalidExtensionDuration", - }, - { - type: "error", - inputs: [ - { name: "allowed", internalType: "address", type: "address" }, - { name: "current", internalType: "address", type: "address" }, - ], - name: "InvalidExtensionSigner", - }, - { - type: "error", - inputs: [ - { name: "current", internalType: "bytes32", type: "bytes32" }, - { name: "expected", internalType: "bytes32", type: "bytes32" }, - ], - name: "InvalidLenderSpecHash", - }, - { - type: "error", - inputs: [ - { name: "category", internalType: "uint8", type: "uint8" }, - { name: "addr", internalType: "address", type: "address" }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "InvalidMultiTokenAsset", - }, - { - type: "error", - inputs: [ - { name: "signer", internalType: "address", type: "address" }, - { name: "digest", internalType: "bytes32", type: "bytes32" }, - ], - name: "InvalidSignature", - }, - { - type: "error", - inputs: [{ name: "length", internalType: "uint256", type: "uint256" }], - name: "InvalidSignatureLength", - }, - { - type: "error", - inputs: [ - { name: "sourceOfFunds", internalType: "address", type: "address" }, - ], - name: "InvalidSourceOfFunds", - }, - { - type: "error", - inputs: [{ name: "timestap", internalType: "uint40", type: "uint40" }], - name: "LoanDefaulted", - }, - { type: "error", inputs: [], name: "LoanNotAutoclaimable" }, - { type: "error", inputs: [], name: "LoanNotRepaid" }, - { type: "error", inputs: [], name: "LoanNotRunning" }, - { type: "error", inputs: [], name: "LoanRepaid" }, - { type: "error", inputs: [], name: "LoanRunning" }, - { type: "error", inputs: [], name: "NonExistingLoan" }, - { - type: "error", - inputs: [ - { name: "addr", internalType: "address", type: "address" }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - ], - name: "NonceNotUsable", - }, - { - type: "error", - inputs: [ - { name: "currentBorrower", internalType: "address", type: "address" }, - { name: "newBorrower", internalType: "address", type: "address" }, - ], - name: "RefinanceBorrowerMismatch", - }, - { type: "error", inputs: [], name: "RefinanceCollateralMismatch" }, - { type: "error", inputs: [], name: "RefinanceCreditMismatch" }, - { - type: "error", - inputs: [{ name: "categoryValue", internalType: "uint8", type: "uint8" }], - name: "UnsupportedCategory", - }, - { type: "error", inputs: [], name: "UnsupportedTransferFunction" }, - { - type: "error", - inputs: [{ name: "addr", internalType: "address", type: "address" }], - name: "VaultTransferSameSourceAndDestination", - }, -] as const; + { + type: 'constructor', + inputs: [ + { name: '_hub', internalType: 'address', type: 'address' }, + { name: '_loanToken', internalType: 'address', type: 'address' }, + { name: '_config', internalType: 'address', type: 'address' }, + { name: '_revokedNonce', internalType: 'address', type: 'address' }, + { name: '_categoryRegistry', internalType: 'address', type: 'address' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'ACCRUING_INTEREST_APR_DECIMALS', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'ACCRUING_INTEREST_APR_DENOMINATOR', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'DOMAIN_SEPARATOR', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'EXTENSION_PROPOSAL_TYPEHASH', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MAX_ACCRUING_INTEREST_APR', + outputs: [{ name: '', internalType: 'uint40', type: 'uint40' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MAX_EXTENSION_DURATION', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MINUTES_IN_YEAR', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MIN_EXTENSION_DURATION', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MIN_LOAN_DURATION', + outputs: [{ name: '', internalType: 'uint32', type: 'uint32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'VERSION', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'categoryRegistry', + outputs: [ + { + name: '', + internalType: 'contract IMultiTokenCategoryRegistry', + type: 'address', + }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'loanId', internalType: 'uint256', type: 'uint256' }], + name: 'claimLOAN', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'config', + outputs: [ + { name: '', internalType: 'contract PWNConfig', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'proposalSpec', + internalType: 'struct PWNSimpleLoan.ProposalSpec', + type: 'tuple', + components: [ + { + name: 'proposalContract', + internalType: 'address', + type: 'address', + }, + { name: 'proposalData', internalType: 'bytes', type: 'bytes' }, + { + name: 'proposalInclusionProof', + internalType: 'bytes32[]', + type: 'bytes32[]', + }, + { name: 'signature', internalType: 'bytes', type: 'bytes' }, + ], + }, + { + name: 'lenderSpec', + internalType: 'struct PWNSimpleLoan.LenderSpec', + type: 'tuple', + components: [ + { name: 'sourceOfFunds', internalType: 'address', type: 'address' }, + ], + }, + { + name: 'callerSpec', + internalType: 'struct PWNSimpleLoan.CallerSpec', + type: 'tuple', + components: [ + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'revokeNonce', internalType: 'bool', type: 'bool' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + }, + { name: 'extra', internalType: 'bytes', type: 'bytes' }, + ], + name: 'createLOAN', + outputs: [{ name: 'loanId', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { + name: 'extension', + internalType: 'struct PWNSimpleLoan.ExtensionProposal', + type: 'tuple', + components: [ + { name: 'loanId', internalType: 'uint256', type: 'uint256' }, + { + name: 'compensationAddress', + internalType: 'address', + type: 'address', + }, + { + name: 'compensationAmount', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'duration', internalType: 'uint40', type: 'uint40' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + }, + { name: 'signature', internalType: 'bytes', type: 'bytes' }, + ], + name: 'extendLOAN', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + name: 'extensionProposalsMade', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'extension', + internalType: 'struct PWNSimpleLoan.ExtensionProposal', + type: 'tuple', + components: [ + { name: 'loanId', internalType: 'uint256', type: 'uint256' }, + { + name: 'compensationAddress', + internalType: 'address', + type: 'address', + }, + { + name: 'compensationAmount', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'duration', internalType: 'uint40', type: 'uint40' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + }, + ], + name: 'getExtensionHash', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'loanId', internalType: 'uint256', type: 'uint256' }], + name: 'getLOAN', + outputs: [ + { name: 'status', internalType: 'uint8', type: 'uint8' }, + { name: 'startTimestamp', internalType: 'uint40', type: 'uint40' }, + { name: 'defaultTimestamp', internalType: 'uint40', type: 'uint40' }, + { name: 'borrower', internalType: 'address', type: 'address' }, + { name: 'originalLender', internalType: 'address', type: 'address' }, + { name: 'loanOwner', internalType: 'address', type: 'address' }, + { name: 'accruingInterestAPR', internalType: 'uint24', type: 'uint24' }, + { name: 'fixedInterestAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'credit', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { name: 'assetAddress', internalType: 'address', type: 'address' }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + }, + { + name: 'collateral', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { name: 'assetAddress', internalType: 'address', type: 'address' }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + }, + { + name: 'originalSourceOfFunds', + internalType: 'address', + type: 'address', + }, + { name: 'repaymentAmount', internalType: 'uint256', type: 'uint256' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'lenderSpec', + internalType: 'struct PWNSimpleLoan.LenderSpec', + type: 'tuple', + components: [ + { name: 'sourceOfFunds', internalType: 'address', type: 'address' }, + ], + }, + ], + name: 'getLenderSpecHash', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [{ name: 'tokenId', internalType: 'uint256', type: 'uint256' }], + name: 'getStateFingerprint', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'hub', + outputs: [{ name: '', internalType: 'contract PWNHub', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'asset', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { name: 'assetAddress', internalType: 'address', type: 'address' }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + }, + ], + name: 'isValidAsset', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'loanMetadataUri', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'loanId', internalType: 'uint256', type: 'uint256' }], + name: 'loanRepaymentAmount', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'loanToken', + outputs: [{ name: '', internalType: 'contract PWNLOAN', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'extension', + internalType: 'struct PWNSimpleLoan.ExtensionProposal', + type: 'tuple', + components: [ + { name: 'loanId', internalType: 'uint256', type: 'uint256' }, + { + name: 'compensationAddress', + internalType: 'address', + type: 'address', + }, + { + name: 'compensationAmount', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'duration', internalType: 'uint40', type: 'uint40' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + }, + ], + name: 'makeExtensionProposal', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '', internalType: 'address', type: 'address' }, + { name: '', internalType: 'address', type: 'address' }, + { name: '', internalType: 'uint256[]', type: 'uint256[]' }, + { name: '', internalType: 'uint256[]', type: 'uint256[]' }, + { name: '', internalType: 'bytes', type: 'bytes' }, + ], + name: 'onERC1155BatchReceived', + outputs: [{ name: '', internalType: 'bytes4', type: 'bytes4' }], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { name: 'operator', internalType: 'address', type: 'address' }, + { name: '', internalType: 'address', type: 'address' }, + { name: '', internalType: 'uint256', type: 'uint256' }, + { name: '', internalType: 'uint256', type: 'uint256' }, + { name: '', internalType: 'bytes', type: 'bytes' }, + ], + name: 'onERC1155Received', + outputs: [{ name: '', internalType: 'bytes4', type: 'bytes4' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'operator', internalType: 'address', type: 'address' }, + { name: '', internalType: 'address', type: 'address' }, + { name: '', internalType: 'uint256', type: 'uint256' }, + { name: '', internalType: 'bytes', type: 'bytes' }, + ], + name: 'onERC721Received', + outputs: [{ name: '', internalType: 'bytes4', type: 'bytes4' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'loanId', internalType: 'uint256', type: 'uint256' }], + name: 'repayLOAN', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'revokedNonce', + outputs: [ + { name: '', internalType: 'contract PWNRevokedNonce', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'interfaceId', internalType: 'bytes4', type: 'bytes4' }], + name: 'supportsInterface', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { name: 'loanId', internalType: 'uint256', type: 'uint256' }, + { name: 'creditAmount', internalType: 'uint256', type: 'uint256' }, + { name: 'loanOwner', internalType: 'address', type: 'address' }, + ], + name: 'tryClaimRepaidLOAN', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'extensionHash', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + { + name: 'proposer', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'proposal', + internalType: 'struct PWNSimpleLoan.ExtensionProposal', + type: 'tuple', + components: [ + { name: 'loanId', internalType: 'uint256', type: 'uint256' }, + { + name: 'compensationAddress', + internalType: 'address', + type: 'address', + }, + { + name: 'compensationAmount', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'duration', internalType: 'uint40', type: 'uint40' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + indexed: false, + }, + ], + name: 'ExtensionProposalMade', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'loanId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { name: 'defaulted', internalType: 'bool', type: 'bool', indexed: true }, + ], + name: 'LOANClaimed', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'loanId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'proposalHash', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + { + name: 'proposalContract', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'terms', + internalType: 'struct PWNSimpleLoan.Terms', + type: 'tuple', + components: [ + { name: 'lender', internalType: 'address', type: 'address' }, + { name: 'borrower', internalType: 'address', type: 'address' }, + { name: 'duration', internalType: 'uint32', type: 'uint32' }, + { + name: 'collateral', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'assetAddress', + internalType: 'address', + type: 'address', + }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + }, + { + name: 'credit', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'assetAddress', + internalType: 'address', + type: 'address', + }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'lenderSpecHash', internalType: 'bytes32', type: 'bytes32' }, + { + name: 'borrowerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + ], + indexed: false, + }, + { + name: 'lenderSpec', + internalType: 'struct PWNSimpleLoan.LenderSpec', + type: 'tuple', + components: [ + { name: 'sourceOfFunds', internalType: 'address', type: 'address' }, + ], + indexed: false, + }, + { name: 'extra', internalType: 'bytes', type: 'bytes', indexed: false }, + ], + name: 'LOANCreated', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'loanId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'originalDefaultTimestamp', + internalType: 'uint40', + type: 'uint40', + indexed: false, + }, + { + name: 'extendedDefaultTimestamp', + internalType: 'uint40', + type: 'uint40', + indexed: false, + }, + ], + name: 'LOANExtended', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'loanId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'LOANPaidBack', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'asset', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { name: 'assetAddress', internalType: 'address', type: 'address' }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + indexed: false, + }, + { + name: 'poolAdapter', + internalType: 'address', + type: 'address', + indexed: true, + }, + { name: 'pool', internalType: 'address', type: 'address', indexed: true }, + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'PoolSupply', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'asset', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { name: 'assetAddress', internalType: 'address', type: 'address' }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + indexed: false, + }, + { + name: 'poolAdapter', + internalType: 'address', + type: 'address', + indexed: true, + }, + { name: 'pool', internalType: 'address', type: 'address', indexed: true }, + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'PoolWithdraw', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'asset', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { name: 'assetAddress', internalType: 'address', type: 'address' }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + indexed: false, + }, + { + name: 'origin', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'VaultPull', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'asset', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { name: 'assetAddress', internalType: 'address', type: 'address' }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + indexed: false, + }, + { + name: 'beneficiary', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'VaultPush', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'asset', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { name: 'assetAddress', internalType: 'address', type: 'address' }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + indexed: false, + }, + { + name: 'origin', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'beneficiary', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'VaultPushFrom', + }, + { + type: 'error', + inputs: [ + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'tag', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'AddressMissingHubTag', + }, + { type: 'error', inputs: [], name: 'CallerNotLOANTokenHolder' }, + { type: 'error', inputs: [], name: 'CallerNotVault' }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'uint256', type: 'uint256' }, + { name: 'expiration', internalType: 'uint256', type: 'uint256' }, + ], + name: 'Expired', + }, + { type: 'error', inputs: [], name: 'IncompleteTransfer' }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'uint256', type: 'uint256' }, + { name: 'limit', internalType: 'uint256', type: 'uint256' }, + ], + name: 'InterestAPROutOfBounds', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'uint256', type: 'uint256' }, + { name: 'limit', internalType: 'uint256', type: 'uint256' }, + ], + name: 'InvalidDuration', + }, + { type: 'error', inputs: [], name: 'InvalidExtensionCaller' }, + { + type: 'error', + inputs: [ + { name: 'duration', internalType: 'uint256', type: 'uint256' }, + { name: 'limit', internalType: 'uint256', type: 'uint256' }, + ], + name: 'InvalidExtensionDuration', + }, + { + type: 'error', + inputs: [ + { name: 'allowed', internalType: 'address', type: 'address' }, + { name: 'current', internalType: 'address', type: 'address' }, + ], + name: 'InvalidExtensionSigner', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'bytes32', type: 'bytes32' }, + { name: 'expected', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'InvalidLenderSpecHash', + }, + { + type: 'error', + inputs: [ + { name: 'category', internalType: 'uint8', type: 'uint8' }, + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'InvalidMultiTokenAsset', + }, + { + type: 'error', + inputs: [ + { name: 'signer', internalType: 'address', type: 'address' }, + { name: 'digest', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'InvalidSignature', + }, + { + type: 'error', + inputs: [{ name: 'length', internalType: 'uint256', type: 'uint256' }], + name: 'InvalidSignatureLength', + }, + { + type: 'error', + inputs: [ + { name: 'sourceOfFunds', internalType: 'address', type: 'address' }, + ], + name: 'InvalidSourceOfFunds', + }, + { + type: 'error', + inputs: [{ name: 'timestap', internalType: 'uint40', type: 'uint40' }], + name: 'LoanDefaulted', + }, + { type: 'error', inputs: [], name: 'LoanNotAutoclaimable' }, + { type: 'error', inputs: [], name: 'LoanNotRepaid' }, + { type: 'error', inputs: [], name: 'LoanNotRunning' }, + { type: 'error', inputs: [], name: 'LoanRepaid' }, + { type: 'error', inputs: [], name: 'LoanRunning' }, + { type: 'error', inputs: [], name: 'NonExistingLoan' }, + { + type: 'error', + inputs: [ + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + name: 'NonceNotUsable', + }, + { + type: 'error', + inputs: [ + { name: 'currentBorrower', internalType: 'address', type: 'address' }, + { name: 'newBorrower', internalType: 'address', type: 'address' }, + ], + name: 'RefinanceBorrowerMismatch', + }, + { type: 'error', inputs: [], name: 'RefinanceCollateralMismatch' }, + { type: 'error', inputs: [], name: 'RefinanceCreditMismatch' }, + { + type: 'error', + inputs: [{ name: 'categoryValue', internalType: 'uint8', type: 'uint8' }], + name: 'UnsupportedCategory', + }, + { type: 'error', inputs: [], name: 'UnsupportedTransferFunction' }, + { + type: 'error', + inputs: [{ name: 'addr', internalType: 'address', type: 'address' }], + name: 'VaultTransferSameSourceAndDestination', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // PWNSimpleLoanDutchAuctionProposal ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const pwnSimpleLoanDutchAuctionProposalAbi = [ - { - type: "constructor", - inputs: [ - { name: "_hub", internalType: "address", type: "address" }, - { name: "_revokedNonce", internalType: "address", type: "address" }, - { name: "_config", internalType: "address", type: "address" }, - { name: "_utilizedCredit", internalType: "address", type: "address" }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "DOMAIN_SEPARATOR", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "MULTIPROPOSAL_DOMAIN_SEPARATOR", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "MULTIPROPOSAL_TYPEHASH", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "PROPOSAL_TYPEHASH", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "VERSION", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "acceptor", internalType: "address", type: "address" }, - { name: "refinancingLoanId", internalType: "uint256", type: "uint256" }, - { name: "proposalData", internalType: "bytes", type: "bytes" }, - { - name: "proposalInclusionProof", - internalType: "bytes32[]", - type: "bytes32[]", - }, - { name: "signature", internalType: "bytes", type: "bytes" }, - ], - name: "acceptProposal", - outputs: [ - { name: "proposalHash", internalType: "bytes32", type: "bytes32" }, - { - name: "loanTerms", - internalType: "struct PWNSimpleLoan.Terms", - type: "tuple", - components: [ - { name: "lender", internalType: "address", type: "address" }, - { name: "borrower", internalType: "address", type: "address" }, - { name: "duration", internalType: "uint32", type: "uint32" }, - { - name: "collateral", - internalType: "struct MultiToken.Asset", - type: "tuple", - components: [ - { - name: "category", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "assetAddress", - internalType: "address", - type: "address", - }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - }, - { - name: "credit", - internalType: "struct MultiToken.Asset", - type: "tuple", - components: [ - { - name: "category", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "assetAddress", - internalType: "address", - type: "address", - }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "lenderSpecHash", internalType: "bytes32", type: "bytes32" }, - { - name: "borrowerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - ], - }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "config", - outputs: [ - { name: "", internalType: "contract PWNConfig", type: "address" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "proposalData", internalType: "bytes", type: "bytes" }], - name: "decodeProposalData", - outputs: [ - { - name: "", - internalType: "struct PWNSimpleLoanDutchAuctionProposal.Proposal", - type: "tuple", - components: [ - { - name: "collateralCategory", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "collateralAddress", - internalType: "address", - type: "address", - }, - { name: "collateralId", internalType: "uint256", type: "uint256" }, - { - name: "collateralAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "checkCollateralStateFingerprint", - internalType: "bool", - type: "bool", - }, - { - name: "collateralStateFingerprint", - internalType: "bytes32", - type: "bytes32", - }, - { name: "creditAddress", internalType: "address", type: "address" }, - { name: "minCreditAmount", internalType: "uint256", type: "uint256" }, - { name: "maxCreditAmount", internalType: "uint256", type: "uint256" }, - { - name: "availableCreditLimit", - internalType: "uint256", - type: "uint256", - }, - { - name: "utilizedCreditId", - internalType: "bytes32", - type: "bytes32", - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "durationOrDate", internalType: "uint32", type: "uint32" }, - { name: "auctionStart", internalType: "uint40", type: "uint40" }, - { name: "auctionDuration", internalType: "uint40", type: "uint40" }, - { name: "allowedAcceptor", internalType: "address", type: "address" }, - { name: "proposer", internalType: "address", type: "address" }, - { - name: "proposerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "isOffer", internalType: "bool", type: "bool" }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - }, - { - name: "", - internalType: "struct PWNSimpleLoanDutchAuctionProposal.ProposalValues", - type: "tuple", - components: [ - { - name: "intendedCreditAmount", - internalType: "uint256", - type: "uint256", - }, - { name: "slippage", internalType: "uint256", type: "uint256" }, - ], - }, - ], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { - name: "proposal", - internalType: "struct PWNSimpleLoanDutchAuctionProposal.Proposal", - type: "tuple", - components: [ - { - name: "collateralCategory", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "collateralAddress", - internalType: "address", - type: "address", - }, - { name: "collateralId", internalType: "uint256", type: "uint256" }, - { - name: "collateralAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "checkCollateralStateFingerprint", - internalType: "bool", - type: "bool", - }, - { - name: "collateralStateFingerprint", - internalType: "bytes32", - type: "bytes32", - }, - { name: "creditAddress", internalType: "address", type: "address" }, - { name: "minCreditAmount", internalType: "uint256", type: "uint256" }, - { name: "maxCreditAmount", internalType: "uint256", type: "uint256" }, - { - name: "availableCreditLimit", - internalType: "uint256", - type: "uint256", - }, - { - name: "utilizedCreditId", - internalType: "bytes32", - type: "bytes32", - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "durationOrDate", internalType: "uint32", type: "uint32" }, - { name: "auctionStart", internalType: "uint40", type: "uint40" }, - { name: "auctionDuration", internalType: "uint40", type: "uint40" }, - { name: "allowedAcceptor", internalType: "address", type: "address" }, - { name: "proposer", internalType: "address", type: "address" }, - { - name: "proposerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "isOffer", internalType: "bool", type: "bool" }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - }, - { - name: "proposalValues", - internalType: "struct PWNSimpleLoanDutchAuctionProposal.ProposalValues", - type: "tuple", - components: [ - { - name: "intendedCreditAmount", - internalType: "uint256", - type: "uint256", - }, - { name: "slippage", internalType: "uint256", type: "uint256" }, - ], - }, - ], - name: "encodeProposalData", - outputs: [{ name: "", internalType: "bytes", type: "bytes" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { - name: "proposal", - internalType: "struct PWNSimpleLoanDutchAuctionProposal.Proposal", - type: "tuple", - components: [ - { - name: "collateralCategory", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "collateralAddress", - internalType: "address", - type: "address", - }, - { name: "collateralId", internalType: "uint256", type: "uint256" }, - { - name: "collateralAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "checkCollateralStateFingerprint", - internalType: "bool", - type: "bool", - }, - { - name: "collateralStateFingerprint", - internalType: "bytes32", - type: "bytes32", - }, - { name: "creditAddress", internalType: "address", type: "address" }, - { name: "minCreditAmount", internalType: "uint256", type: "uint256" }, - { name: "maxCreditAmount", internalType: "uint256", type: "uint256" }, - { - name: "availableCreditLimit", - internalType: "uint256", - type: "uint256", - }, - { - name: "utilizedCreditId", - internalType: "bytes32", - type: "bytes32", - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "durationOrDate", internalType: "uint32", type: "uint32" }, - { name: "auctionStart", internalType: "uint40", type: "uint40" }, - { name: "auctionDuration", internalType: "uint40", type: "uint40" }, - { name: "allowedAcceptor", internalType: "address", type: "address" }, - { name: "proposer", internalType: "address", type: "address" }, - { - name: "proposerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "isOffer", internalType: "bool", type: "bool" }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - }, - { name: "timestamp", internalType: "uint256", type: "uint256" }, - ], - name: "getCreditAmount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { - name: "multiproposal", - internalType: "struct PWNSimpleLoanProposal.Multiproposal", - type: "tuple", - components: [ - { - name: "multiproposalMerkleRoot", - internalType: "bytes32", - type: "bytes32", - }, - ], - }, - ], - name: "getMultiproposalHash", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "proposal", - internalType: "struct PWNSimpleLoanDutchAuctionProposal.Proposal", - type: "tuple", - components: [ - { - name: "collateralCategory", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "collateralAddress", - internalType: "address", - type: "address", - }, - { name: "collateralId", internalType: "uint256", type: "uint256" }, - { - name: "collateralAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "checkCollateralStateFingerprint", - internalType: "bool", - type: "bool", - }, - { - name: "collateralStateFingerprint", - internalType: "bytes32", - type: "bytes32", - }, - { name: "creditAddress", internalType: "address", type: "address" }, - { name: "minCreditAmount", internalType: "uint256", type: "uint256" }, - { name: "maxCreditAmount", internalType: "uint256", type: "uint256" }, - { - name: "availableCreditLimit", - internalType: "uint256", - type: "uint256", - }, - { - name: "utilizedCreditId", - internalType: "bytes32", - type: "bytes32", - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "durationOrDate", internalType: "uint32", type: "uint32" }, - { name: "auctionStart", internalType: "uint40", type: "uint40" }, - { name: "auctionDuration", internalType: "uint40", type: "uint40" }, - { name: "allowedAcceptor", internalType: "address", type: "address" }, - { name: "proposer", internalType: "address", type: "address" }, - { - name: "proposerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "isOffer", internalType: "bool", type: "bool" }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - }, - ], - name: "getProposalHash", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "hub", - outputs: [{ name: "", internalType: "contract PWNHub", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "proposal", - internalType: "struct PWNSimpleLoanDutchAuctionProposal.Proposal", - type: "tuple", - components: [ - { - name: "collateralCategory", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "collateralAddress", - internalType: "address", - type: "address", - }, - { name: "collateralId", internalType: "uint256", type: "uint256" }, - { - name: "collateralAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "checkCollateralStateFingerprint", - internalType: "bool", - type: "bool", - }, - { - name: "collateralStateFingerprint", - internalType: "bytes32", - type: "bytes32", - }, - { name: "creditAddress", internalType: "address", type: "address" }, - { name: "minCreditAmount", internalType: "uint256", type: "uint256" }, - { name: "maxCreditAmount", internalType: "uint256", type: "uint256" }, - { - name: "availableCreditLimit", - internalType: "uint256", - type: "uint256", - }, - { - name: "utilizedCreditId", - internalType: "bytes32", - type: "bytes32", - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "durationOrDate", internalType: "uint32", type: "uint32" }, - { name: "auctionStart", internalType: "uint40", type: "uint40" }, - { name: "auctionDuration", internalType: "uint40", type: "uint40" }, - { name: "allowedAcceptor", internalType: "address", type: "address" }, - { name: "proposer", internalType: "address", type: "address" }, - { - name: "proposerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "isOffer", internalType: "bool", type: "bool" }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - }, - ], - name: "makeProposal", - outputs: [ - { name: "proposalHash", internalType: "bytes32", type: "bytes32" }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - name: "proposalsMade", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - ], - name: "revokeNonce", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "revokedNonce", - outputs: [ - { name: "", internalType: "contract PWNRevokedNonce", type: "address" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "utilizedCredit", - outputs: [ - { name: "", internalType: "contract PWNUtilizedCredit", type: "address" }, - ], - stateMutability: "view", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "proposalHash", - internalType: "bytes32", - type: "bytes32", - indexed: true, - }, - { - name: "proposer", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "proposal", - internalType: "struct PWNSimpleLoanDutchAuctionProposal.Proposal", - type: "tuple", - components: [ - { - name: "collateralCategory", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "collateralAddress", - internalType: "address", - type: "address", - }, - { name: "collateralId", internalType: "uint256", type: "uint256" }, - { - name: "collateralAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "checkCollateralStateFingerprint", - internalType: "bool", - type: "bool", - }, - { - name: "collateralStateFingerprint", - internalType: "bytes32", - type: "bytes32", - }, - { name: "creditAddress", internalType: "address", type: "address" }, - { name: "minCreditAmount", internalType: "uint256", type: "uint256" }, - { name: "maxCreditAmount", internalType: "uint256", type: "uint256" }, - { - name: "availableCreditLimit", - internalType: "uint256", - type: "uint256", - }, - { - name: "utilizedCreditId", - internalType: "bytes32", - type: "bytes32", - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "durationOrDate", internalType: "uint32", type: "uint32" }, - { name: "auctionStart", internalType: "uint40", type: "uint40" }, - { name: "auctionDuration", internalType: "uint40", type: "uint40" }, - { name: "allowedAcceptor", internalType: "address", type: "address" }, - { name: "proposer", internalType: "address", type: "address" }, - { - name: "proposerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "isOffer", internalType: "bool", type: "bool" }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - indexed: false, - }, - ], - name: "ProposalMade", - }, - { - type: "error", - inputs: [{ name: "addr", internalType: "address", type: "address" }], - name: "AcceptorIsProposer", - }, - { - type: "error", - inputs: [ - { name: "addr", internalType: "address", type: "address" }, - { name: "tag", internalType: "bytes32", type: "bytes32" }, - ], - name: "AddressMissingHubTag", - }, - { - type: "error", - inputs: [{ name: "current", internalType: "uint256", type: "uint256" }], - name: "AuctionDurationNotInFullMinutes", - }, - { - type: "error", - inputs: [ - { name: "currentTimestamp", internalType: "uint256", type: "uint256" }, - { name: "auctionStart", internalType: "uint256", type: "uint256" }, - ], - name: "AuctionNotInProgress", - }, - { - type: "error", - inputs: [{ name: "addr", internalType: "address", type: "address" }], - name: "CallerIsNotStatedProposer", - }, - { - type: "error", - inputs: [ - { name: "current", internalType: "address", type: "address" }, - { name: "allowed", internalType: "address", type: "address" }, - ], - name: "CallerNotAllowedAcceptor", - }, - { - type: "error", - inputs: [ - { name: "caller", internalType: "address", type: "address" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - name: "CallerNotLoanContract", - }, - { - type: "error", - inputs: [ - { name: "defaultDate", internalType: "uint32", type: "uint32" }, - { name: "current", internalType: "uint32", type: "uint32" }, - ], - name: "DefaultDateInPast", - }, - { - type: "error", - inputs: [ - { name: "current", internalType: "uint256", type: "uint256" }, - { name: "expiration", internalType: "uint256", type: "uint256" }, - ], - name: "Expired", - }, - { - type: "error", - inputs: [ - { name: "current", internalType: "uint256", type: "uint256" }, - { name: "limit", internalType: "uint256", type: "uint256" }, - ], - name: "InvalidAuctionDuration", - }, - { - type: "error", - inputs: [ - { name: "current", internalType: "bytes32", type: "bytes32" }, - { name: "proposed", internalType: "bytes32", type: "bytes32" }, - ], - name: "InvalidCollateralStateFingerprint", - }, - { - type: "error", - inputs: [ - { name: "auctionCreditAmount", internalType: "uint256", type: "uint256" }, - { - name: "intendedCreditAmount", - internalType: "uint256", - type: "uint256", - }, - { name: "slippage", internalType: "uint256", type: "uint256" }, - ], - name: "InvalidCreditAmount", - }, - { - type: "error", - inputs: [ - { name: "minCreditAmount", internalType: "uint256", type: "uint256" }, - { name: "maxCreditAmount", internalType: "uint256", type: "uint256" }, - ], - name: "InvalidCreditAmountRange", - }, - { - type: "error", - inputs: [ - { name: "refinancingLoanId", internalType: "uint256", type: "uint256" }, - ], - name: "InvalidRefinancingLoanId", - }, - { - type: "error", - inputs: [ - { name: "signer", internalType: "address", type: "address" }, - { name: "digest", internalType: "bytes32", type: "bytes32" }, - ], - name: "InvalidSignature", - }, - { - type: "error", - inputs: [{ name: "length", internalType: "uint256", type: "uint256" }], - name: "InvalidSignatureLength", - }, - { type: "error", inputs: [], name: "MissingStateFingerprintComputer" }, - { - type: "error", - inputs: [ - { name: "addr", internalType: "address", type: "address" }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - ], - name: "NonceNotUsable", - }, -] as const; + { + type: 'constructor', + inputs: [ + { name: '_hub', internalType: 'address', type: 'address' }, + { name: '_revokedNonce', internalType: 'address', type: 'address' }, + { name: '_config', internalType: 'address', type: 'address' }, + { name: '_utilizedCredit', internalType: 'address', type: 'address' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'DOMAIN_SEPARATOR', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MULTIPROPOSAL_DOMAIN_SEPARATOR', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MULTIPROPOSAL_TYPEHASH', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'PROPOSAL_TYPEHASH', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'VERSION', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'acceptor', internalType: 'address', type: 'address' }, + { name: 'refinancingLoanId', internalType: 'uint256', type: 'uint256' }, + { name: 'proposalData', internalType: 'bytes', type: 'bytes' }, + { + name: 'proposalInclusionProof', + internalType: 'bytes32[]', + type: 'bytes32[]', + }, + { name: 'signature', internalType: 'bytes', type: 'bytes' }, + ], + name: 'acceptProposal', + outputs: [ + { name: 'proposalHash', internalType: 'bytes32', type: 'bytes32' }, + { + name: 'loanTerms', + internalType: 'struct PWNSimpleLoan.Terms', + type: 'tuple', + components: [ + { name: 'lender', internalType: 'address', type: 'address' }, + { name: 'borrower', internalType: 'address', type: 'address' }, + { name: 'duration', internalType: 'uint32', type: 'uint32' }, + { + name: 'collateral', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'assetAddress', + internalType: 'address', + type: 'address', + }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + }, + { + name: 'credit', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'assetAddress', + internalType: 'address', + type: 'address', + }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'lenderSpecHash', internalType: 'bytes32', type: 'bytes32' }, + { + name: 'borrowerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + ], + }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'config', + outputs: [ + { name: '', internalType: 'contract PWNConfig', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'proposalData', internalType: 'bytes', type: 'bytes' }], + name: 'decodeProposalData', + outputs: [ + { + name: '', + internalType: 'struct PWNSimpleLoanDutchAuctionProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'collateralAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { name: 'maxCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'auctionStart', internalType: 'uint40', type: 'uint40' }, + { name: 'auctionDuration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + { + name: '', + internalType: 'struct PWNSimpleLoanDutchAuctionProposal.ProposalValues', + type: 'tuple', + components: [ + { + name: 'intendedCreditAmount', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'slippage', internalType: 'uint256', type: 'uint256' }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + ], + }, + ], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanDutchAuctionProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'collateralAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { name: 'maxCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'auctionStart', internalType: 'uint40', type: 'uint40' }, + { name: 'auctionDuration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + { + name: 'proposalValues', + internalType: 'struct PWNSimpleLoanDutchAuctionProposal.ProposalValues', + type: 'tuple', + components: [ + { + name: 'intendedCreditAmount', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'slippage', internalType: 'uint256', type: 'uint256' }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + ], + }, + ], + name: 'encodeProposalData', + outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanDutchAuctionProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'collateralAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { name: 'maxCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'auctionStart', internalType: 'uint40', type: 'uint40' }, + { name: 'auctionDuration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + { name: 'timestamp', internalType: 'uint256', type: 'uint256' }, + ], + name: 'getCreditAmount', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { + name: 'multiproposal', + internalType: 'struct PWNSimpleLoanProposal.Multiproposal', + type: 'tuple', + components: [ + { + name: 'multiproposalMerkleRoot', + internalType: 'bytes32', + type: 'bytes32', + }, + ], + }, + ], + name: 'getMultiproposalHash', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanDutchAuctionProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'collateralAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { name: 'maxCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'auctionStart', internalType: 'uint40', type: 'uint40' }, + { name: 'auctionDuration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + ], + name: 'getProposalHash', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'hub', + outputs: [{ name: '', internalType: 'contract PWNHub', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanDutchAuctionProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'collateralAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { name: 'maxCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'auctionStart', internalType: 'uint40', type: 'uint40' }, + { name: 'auctionDuration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + ], + name: 'makeProposal', + outputs: [ + { name: 'proposalHash', internalType: 'bytes32', type: 'bytes32' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + name: 'proposalsMade', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + name: 'revokeNonce', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'revokedNonce', + outputs: [ + { name: '', internalType: 'contract PWNRevokedNonce', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'utilizedCredit', + outputs: [ + { name: '', internalType: 'contract PWNUtilizedCredit', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'proposalHash', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + { + name: 'proposer', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanDutchAuctionProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'collateralAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { name: 'maxCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'auctionStart', internalType: 'uint40', type: 'uint40' }, + { name: 'auctionDuration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + indexed: false, + }, + ], + name: 'ProposalMade', + }, + { + type: 'error', + inputs: [{ name: 'addr', internalType: 'address', type: 'address' }], + name: 'AcceptorIsProposer', + }, + { + type: 'error', + inputs: [ + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'tag', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'AddressMissingHubTag', + }, + { + type: 'error', + inputs: [{ name: 'current', internalType: 'uint256', type: 'uint256' }], + name: 'AuctionDurationNotInFullMinutes', + }, + { + type: 'error', + inputs: [ + { name: 'currentTimestamp', internalType: 'uint256', type: 'uint256' }, + { name: 'auctionStart', internalType: 'uint256', type: 'uint256' }, + ], + name: 'AuctionNotInProgress', + }, + { + type: 'error', + inputs: [{ name: 'addr', internalType: 'address', type: 'address' }], + name: 'CallerIsNotStatedProposer', + }, + { + type: 'error', + inputs: [ + { name: 'caller', internalType: 'address', type: 'address' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + name: 'CallerNotLoanContract', + }, + { + type: 'error', + inputs: [ + { name: 'defaultDate', internalType: 'uint32', type: 'uint32' }, + { name: 'current', internalType: 'uint32', type: 'uint32' }, + ], + name: 'DefaultDateInPast', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'uint256', type: 'uint256' }, + { name: 'expiration', internalType: 'uint256', type: 'uint256' }, + ], + name: 'Expired', + }, + { + type: 'error', + inputs: [ + { name: 'acceptorController', internalType: 'address', type: 'address' }, + ], + name: 'InvalidAcceptorController', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'uint256', type: 'uint256' }, + { name: 'limit', internalType: 'uint256', type: 'uint256' }, + ], + name: 'InvalidAuctionDuration', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'bytes32', type: 'bytes32' }, + { name: 'proposed', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'InvalidCollateralStateFingerprint', + }, + { + type: 'error', + inputs: [ + { name: 'auctionCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'intendedCreditAmount', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'slippage', internalType: 'uint256', type: 'uint256' }, + ], + name: 'InvalidCreditAmount', + }, + { + type: 'error', + inputs: [ + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { name: 'maxCreditAmount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'InvalidCreditAmountRange', + }, + { + type: 'error', + inputs: [ + { name: 'refinancingLoanId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'InvalidRefinancingLoanId', + }, + { + type: 'error', + inputs: [ + { name: 'signer', internalType: 'address', type: 'address' }, + { name: 'digest', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'InvalidSignature', + }, + { + type: 'error', + inputs: [{ name: 'length', internalType: 'uint256', type: 'uint256' }], + name: 'InvalidSignatureLength', + }, + { type: 'error', inputs: [], name: 'MissingStateFingerprintComputer' }, + { + type: 'error', + inputs: [ + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + name: 'NonceNotUsable', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// PWNSimpleLoanUniswapV3LPSetProposal +// PWNSimpleLoanDutchAuctionProposalHarness ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -export const pwnSimpleLoanUniswapV3LPSetProposalAbi = [ - [ - { - type: "constructor", - inputs: [ - { name: "_hub", internalType: "address", type: "address" }, - { name: "_revokedNonce", internalType: "address", type: "address" }, - { name: "_config", internalType: "address", type: "address" }, - { name: "_utilizedCredit", internalType: "address", type: "address" }, - { name: "_uniswapV3Factory", internalType: "address", type: "address" }, - { - name: "_uniswapNFTPositionManager", - internalType: "address", - type: "address", - }, - { - name: "_chainlinkFeedRegistry", - internalType: "address", - type: "address", - }, - { - name: "_chainlinkL2SequencerUptimeFeed", - internalType: "address", - type: "address", - }, - { name: "_weth", internalType: "address", type: "address" }, - ], - stateMutability: "nonpayable", - }, - { - type: "error", - inputs: [{ name: "addr", internalType: "address", type: "address" }], - name: "AcceptorIsProposer", - }, - { - type: "error", - inputs: [ - { name: "addr", internalType: "address", type: "address" }, - { name: "tag", internalType: "bytes32", type: "bytes32" }, - ], - name: "AddressMissingHubTag", - }, - { - type: "error", - inputs: [{ name: "addr", internalType: "address", type: "address" }], - name: "CallerIsNotStatedProposer", - }, - { - type: "error", - inputs: [ - { name: "caller", internalType: "address", type: "address" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - name: "CallerNotLoanContract", - }, - { - type: "error", - inputs: [ - { name: "feed", internalType: "address", type: "address" }, - { name: "updatedAt", internalType: "uint256", type: "uint256" }, - ], - name: "ChainlinkFeedPriceTooOld", - }, - { - type: "error", - inputs: [ - { name: "feed", internalType: "address", type: "address" }, - { name: "price", internalType: "int256", type: "int256" }, - { name: "updatedAt", internalType: "uint256", type: "uint256" }, - ], - name: "ChainlinkFeedReturnedNegativePrice", - }, - { type: "error", inputs: [], name: "ChainlinkInvalidInputLenghts" }, - { - type: "error", - inputs: [ - { name: "defaultDate", internalType: "uint32", type: "uint32" }, - { name: "current", internalType: "uint32", type: "uint32" }, - ], - name: "DefaultDateInPast", - }, - { - type: "error", - inputs: [ - { name: "current", internalType: "uint256", type: "uint256" }, - { name: "expiration", internalType: "uint256", type: "uint256" }, - ], - name: "Expired", - }, - { - type: "error", - inputs: [ - { name: "timeSinceUp", internalType: "uint256", type: "uint256" }, - { name: "gracePeriod", internalType: "uint256", type: "uint256" }, - ], - name: "GracePeriodNotOver", - }, - { - type: "error", - inputs: [ - { name: "current", internalType: "uint256", type: "uint256" }, - { name: "limit", internalType: "uint256", type: "uint256" }, - ], - name: "InsufficientCreditAmount", - }, - { - type: "error", - inputs: [ - { name: "current", internalType: "uint256", type: "uint256" }, - { name: "limit", internalType: "uint256", type: "uint256" }, - ], - name: "IntermediaryDenominationsOutOfBounds", - }, - { - type: "error", - inputs: [ - { - name: "acceptorController", - internalType: "address", - type: "address", - }, - ], - name: "InvalidAcceptorController", - }, - { - type: "error", - inputs: [ - { name: "current", internalType: "bytes32", type: "bytes32" }, - { name: "proposed", internalType: "bytes32", type: "bytes32" }, - ], - name: "InvalidCollateralStateFingerprint", - }, - { type: "error", inputs: [], name: "InvalidLPTokenPair" }, - { - type: "error", - inputs: [ - { name: "refinancingLoanId", internalType: "uint256", type: "uint256" }, - ], - name: "InvalidRefinancingLoanId", - }, - { - type: "error", - inputs: [ - { name: "signer", internalType: "address", type: "address" }, - { name: "digest", internalType: "bytes32", type: "bytes32" }, - ], - name: "InvalidSignature", - }, - { - type: "error", - inputs: [{ name: "length", internalType: "uint256", type: "uint256" }], - name: "InvalidSignatureLength", - }, - { type: "error", inputs: [], name: "L2SequencerDown" }, - { type: "error", inputs: [], name: "MinCreditAmountNotSet" }, - { type: "error", inputs: [], name: "MissingStateFingerprintComputer" }, - { - type: "error", - inputs: [ - { name: "addr", internalType: "address", type: "address" }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - ], - name: "NonceNotUsable", - }, - { type: "error", inputs: [], name: "T" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "proposalHash", - internalType: "bytes32", - type: "bytes32", - indexed: true, - }, - { - name: "proposer", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "proposal", - internalType: "struct PWNSimpleLoanUniswapV3LPSetProposal.Proposal", - type: "tuple", - components: [ - { name: "tokenAAllowlist", internalType: "address[]", type: "address[]" }, - { name: "tokenBAllowlist", internalType: "address[]", type: "address[]" }, - { name: "creditAddress", internalType: "address", type: "address" }, - { - name: "feedIntermediaryDenominations", - internalType: "address[]", - type: "address[]", - }, - { name: "feedInvertFlags", internalType: "bool[]", type: "bool[]" }, - { name: "loanToValue", internalType: "uint256", type: "uint256" }, - { name: "minCreditAmount", internalType: "uint256", type: "uint256" }, - { - name: "availableCreditLimit", - internalType: "uint256", - type: "uint256", - }, - { name: "utilizedCreditId", internalType: "bytes32", type: "bytes32" }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "durationOrDate", internalType: "uint32", type: "uint32" }, - { name: "expiration", internalType: "uint40", type: "uint40" }, - { - name: "acceptorController", - internalType: "address", - type: "address", - }, - { - name: "acceptorControllerData", - internalType: "bytes", - type: "bytes", - }, - { name: "proposer", internalType: "address", type: "address" }, - { name: "proposerSpecHash", internalType: "bytes32", type: "bytes32" }, - { name: "isOffer", internalType: "bool", type: "bool" }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - indexed: false, - }, - ], - name: "ProposalMade", - }, - { - type: "function", - inputs: [], - name: "DOMAIN_SEPARATOR", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "LOAN_TO_VALUE_DENOMINATOR", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "MAX_INTERMEDIARY_DENOMINATIONS", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "MULTIPROPOSAL_DOMAIN_SEPARATOR", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "MULTIPROPOSAL_TYPEHASH", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "PROPOSAL_TYPEHASH", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "VERSION", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "WETH", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "acceptor", internalType: "address", type: "address" }, - { name: "refinancingLoanId", internalType: "uint256", type: "uint256" }, - { name: "proposalData", internalType: "bytes", type: "bytes" }, - { - name: "proposalInclusionProof", - internalType: "bytes32[]", - type: "bytes32[]", - }, - { name: "signature", internalType: "bytes", type: "bytes" }, - ], - name: "acceptProposal", - outputs: [ - { name: "proposalHash", internalType: "bytes32", type: "bytes32" }, - { - name: "loanTerms", - internalType: "struct PWNSimpleLoan.Terms", - type: "tuple", - components: [ - { name: "lender", internalType: "address", type: "address" }, - { name: "borrower", internalType: "address", type: "address" }, - { name: "duration", internalType: "uint32", type: "uint32" }, - { - name: "collateral", - internalType: "struct MultiToken.Asset", - type: "tuple", - components: [ - { - name: "category", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { name: "assetAddress", internalType: "address", type: "address" }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - }, - { - name: "credit", - internalType: "struct MultiToken.Asset", - type: "tuple", - components: [ - { - name: "category", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { name: "assetAddress", internalType: "address", type: "address" }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "lenderSpecHash", internalType: "bytes32", type: "bytes32" }, - { name: "borrowerSpecHash", internalType: "bytes32", type: "bytes32" }, - ], - }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "chainlinkFeedRegistry", - outputs: [ - { - name: "", - internalType: "contract IChainlinkFeedRegistryLike", - type: "address", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "chainlinkL2SequencerUptimeFeed", - outputs: [ - { - name: "", - internalType: "contract IChainlinkAggregatorLike", - type: "address", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "config", - outputs: [{ name: "", internalType: "contract PWNConfig", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "proposalData", internalType: "bytes", type: "bytes" }], - name: "decodeProposalData", - outputs: [ - { - name: "", - internalType: "struct PWNSimpleLoanUniswapV3LPSetProposal.Proposal", - type: "tuple", - components: [ - { name: "tokenAAllowlist", internalType: "address[]", type: "address[]" }, - { name: "tokenBAllowlist", internalType: "address[]", type: "address[]" }, - { name: "creditAddress", internalType: "address", type: "address" }, - { - name: "feedIntermediaryDenominations", - internalType: "address[]", - type: "address[]", - }, - { name: "feedInvertFlags", internalType: "bool[]", type: "bool[]" }, - { name: "loanToValue", internalType: "uint256", type: "uint256" }, - { name: "minCreditAmount", internalType: "uint256", type: "uint256" }, - { - name: "availableCreditLimit", - internalType: "uint256", - type: "uint256", - }, - { name: "utilizedCreditId", internalType: "bytes32", type: "bytes32" }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "durationOrDate", internalType: "uint32", type: "uint32" }, - { name: "expiration", internalType: "uint40", type: "uint40" }, - { - name: "acceptorController", - internalType: "address", - type: "address", - }, - { - name: "acceptorControllerData", - internalType: "bytes", - type: "bytes", - }, - { name: "proposer", internalType: "address", type: "address" }, - { name: "proposerSpecHash", internalType: "bytes32", type: "bytes32" }, - { name: "isOffer", internalType: "bool", type: "bool" }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - }, - { - name: "", - internalType: - "struct PWNSimpleLoanUniswapV3LPSetProposal.ProposalValues", - type: "tuple", - components: [ - { name: "collateralId", internalType: "uint256", type: "uint256" }, - { name: "tokenAIndex", internalType: "uint256", type: "uint256" }, - { name: "tokenBIndex", internalType: "uint256", type: "uint256" }, - { - name: "acceptorControllerData", - internalType: "bytes", - type: "bytes", - }, - ], - }, - ], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { - name: "proposal", - internalType: "struct PWNSimpleLoanUniswapV3LPSetProposal.Proposal", - type: "tuple", - components: [ - { name: "tokenAAllowlist", internalType: "address[]", type: "address[]" }, - { name: "tokenBAllowlist", internalType: "address[]", type: "address[]" }, - { name: "creditAddress", internalType: "address", type: "address" }, - { - name: "feedIntermediaryDenominations", - internalType: "address[]", - type: "address[]", - }, - { name: "feedInvertFlags", internalType: "bool[]", type: "bool[]" }, - { name: "loanToValue", internalType: "uint256", type: "uint256" }, - { name: "minCreditAmount", internalType: "uint256", type: "uint256" }, - { - name: "availableCreditLimit", - internalType: "uint256", - type: "uint256", - }, - { name: "utilizedCreditId", internalType: "bytes32", type: "bytes32" }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "durationOrDate", internalType: "uint32", type: "uint32" }, - { name: "expiration", internalType: "uint40", type: "uint40" }, - { - name: "acceptorController", - internalType: "address", - type: "address", - }, - { - name: "acceptorControllerData", - internalType: "bytes", - type: "bytes", - }, - { name: "proposer", internalType: "address", type: "address" }, - { name: "proposerSpecHash", internalType: "bytes32", type: "bytes32" }, - { name: "isOffer", internalType: "bool", type: "bool" }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - }, - { - name: "proposalValues", - internalType: - "struct PWNSimpleLoanUniswapV3LPSetProposal.ProposalValues", - type: "tuple", - components: [ - { name: "collateralId", internalType: "uint256", type: "uint256" }, - { name: "tokenAIndex", internalType: "uint256", type: "uint256" }, - { name: "tokenBIndex", internalType: "uint256", type: "uint256" }, - { - name: "acceptorControllerData", - internalType: "bytes", - type: "bytes", - }, - ], - }, - ], - name: "encodeProposalData", - outputs: [{ name: "", internalType: "bytes", type: "bytes" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "creditAddress", internalType: "address", type: "address" }, - { name: "collateralId", internalType: "uint256", type: "uint256" }, - { name: "token0Denominator", internalType: "bool", type: "bool" }, - { - name: "feedIntermediaryDenominations", - internalType: "address[]", - type: "address[]", - }, - { name: "feedInvertFlags", internalType: "bool[]", type: "bool[]" }, - { name: "loanToValue", internalType: "uint256", type: "uint256" }, - ], - name: "getCreditAmount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "multiproposal", - internalType: "struct PWNSimpleLoanProposal.Multiproposal", - type: "tuple", - components: [ - { - name: "multiproposalMerkleRoot", - internalType: "bytes32", - type: "bytes32", - }, - ], - }, - ], - name: "getMultiproposalHash", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "proposal", - internalType: "struct PWNSimpleLoanUniswapV3LPSetProposal.Proposal", - type: "tuple", - components: [ - { name: "tokenAAllowlist", internalType: "address[]", type: "address[]" }, - { name: "tokenBAllowlist", internalType: "address[]", type: "address[]" }, - { name: "creditAddress", internalType: "address", type: "address" }, - { - name: "feedIntermediaryDenominations", - internalType: "address[]", - type: "address[]", - }, - { name: "feedInvertFlags", internalType: "bool[]", type: "bool[]" }, - { name: "loanToValue", internalType: "uint256", type: "uint256" }, - { name: "minCreditAmount", internalType: "uint256", type: "uint256" }, - { - name: "availableCreditLimit", - internalType: "uint256", - type: "uint256", - }, - { name: "utilizedCreditId", internalType: "bytes32", type: "bytes32" }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "durationOrDate", internalType: "uint32", type: "uint32" }, - { name: "expiration", internalType: "uint40", type: "uint40" }, - { - name: "acceptorController", - internalType: "address", - type: "address", - }, - { - name: "acceptorControllerData", - internalType: "bytes", - type: "bytes", - }, - { name: "proposer", internalType: "address", type: "address" }, - { name: "proposerSpecHash", internalType: "bytes32", type: "bytes32" }, - { name: "isOffer", internalType: "bool", type: "bool" }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - }, - ], - name: "getProposalHash", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "hub", - outputs: [{ name: "", internalType: "contract PWNHub", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "proposal", - internalType: "struct PWNSimpleLoanUniswapV3LPSetProposal.Proposal", - type: "tuple", - components: [ - { name: "tokenAAllowlist", internalType: "address[]", type: "address[]" }, - { name: "tokenBAllowlist", internalType: "address[]", type: "address[]" }, - { name: "creditAddress", internalType: "address", type: "address" }, - { - name: "feedIntermediaryDenominations", - internalType: "address[]", - type: "address[]", - }, - { name: "feedInvertFlags", internalType: "bool[]", type: "bool[]" }, - { name: "loanToValue", internalType: "uint256", type: "uint256" }, - { name: "minCreditAmount", internalType: "uint256", type: "uint256" }, - { - name: "availableCreditLimit", - internalType: "uint256", - type: "uint256", - }, - { name: "utilizedCreditId", internalType: "bytes32", type: "bytes32" }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "durationOrDate", internalType: "uint32", type: "uint32" }, - { name: "expiration", internalType: "uint40", type: "uint40" }, - { - name: "acceptorController", - internalType: "address", - type: "address", - }, - { - name: "acceptorControllerData", - internalType: "bytes", - type: "bytes", - }, - { name: "proposer", internalType: "address", type: "address" }, - { name: "proposerSpecHash", internalType: "bytes32", type: "bytes32" }, - { name: "isOffer", internalType: "bool", type: "bool" }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - }, - ], - name: "makeProposal", - outputs: [{ name: "proposalHash", internalType: "bytes32", type: "bytes32" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - name: "proposalsMade", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - ], - name: "revokeNonce", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "revokedNonce", - outputs: [ - { name: "", internalType: "contract PWNRevokedNonce", type: "address" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "uniswapNFTPositionManager", - outputs: [ - { - name: "", - internalType: "contract INonfungiblePositionManager", - type: "address", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "uniswapV3Factory", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "utilizedCredit", - outputs: [ - { name: "", internalType: "contract PWNUtilizedCredit", type: "address" }, - ], - stateMutability: "view", - }, - ] -] as const; +export const pwnSimpleLoanDutchAuctionProposalHarnessAbi = [ + { + type: 'constructor', + inputs: [ + { name: '_hub', internalType: 'address', type: 'address' }, + { name: '_revokedNonce', internalType: 'address', type: 'address' }, + { name: '_config', internalType: 'address', type: 'address' }, + { name: '_utilizedCredit', internalType: 'address', type: 'address' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'DOMAIN_SEPARATOR', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MULTIPROPOSAL_DOMAIN_SEPARATOR', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MULTIPROPOSAL_TYPEHASH', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'PROPOSAL_TYPEHASH', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'VERSION', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'acceptor', internalType: 'address', type: 'address' }, + { name: 'refinancingLoanId', internalType: 'uint256', type: 'uint256' }, + { name: 'proposalData', internalType: 'bytes', type: 'bytes' }, + { + name: 'proposalInclusionProof', + internalType: 'bytes32[]', + type: 'bytes32[]', + }, + { name: 'signature', internalType: 'bytes', type: 'bytes' }, + ], + name: 'acceptProposal', + outputs: [ + { name: 'proposalHash', internalType: 'bytes32', type: 'bytes32' }, + { + name: 'loanTerms', + internalType: 'struct PWNSimpleLoan.Terms', + type: 'tuple', + components: [ + { name: 'lender', internalType: 'address', type: 'address' }, + { name: 'borrower', internalType: 'address', type: 'address' }, + { name: 'duration', internalType: 'uint32', type: 'uint32' }, + { + name: 'collateral', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'assetAddress', + internalType: 'address', + type: 'address', + }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + }, + { + name: 'credit', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'assetAddress', + internalType: 'address', + type: 'address', + }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'lenderSpecHash', internalType: 'bytes32', type: 'bytes32' }, + { + name: 'borrowerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + ], + }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'config', + outputs: [ + { name: '', internalType: 'contract PWNConfig', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'proposalData', internalType: 'bytes', type: 'bytes' }], + name: 'decodeProposalData', + outputs: [ + { + name: '', + internalType: 'struct PWNSimpleLoanDutchAuctionProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'collateralAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { name: 'maxCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'auctionStart', internalType: 'uint40', type: 'uint40' }, + { name: 'auctionDuration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + { + name: '', + internalType: 'struct PWNSimpleLoanDutchAuctionProposal.ProposalValues', + type: 'tuple', + components: [ + { + name: 'intendedCreditAmount', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'slippage', internalType: 'uint256', type: 'uint256' }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + ], + }, + ], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanDutchAuctionProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'collateralAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { name: 'maxCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'auctionStart', internalType: 'uint40', type: 'uint40' }, + { name: 'auctionDuration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + { + name: 'proposalValues', + internalType: 'struct PWNSimpleLoanDutchAuctionProposal.ProposalValues', + type: 'tuple', + components: [ + { + name: 'intendedCreditAmount', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'slippage', internalType: 'uint256', type: 'uint256' }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + ], + }, + ], + name: 'encodeProposalData', + outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanDutchAuctionProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'collateralAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { name: 'maxCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'auctionStart', internalType: 'uint40', type: 'uint40' }, + { name: 'auctionDuration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + ], + name: 'exposed_erc712EncodeProposal', + outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanDutchAuctionProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'collateralAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { name: 'maxCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'auctionStart', internalType: 'uint40', type: 'uint40' }, + { name: 'auctionDuration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + { name: 'timestamp', internalType: 'uint256', type: 'uint256' }, + ], + name: 'getCreditAmount', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { + name: 'multiproposal', + internalType: 'struct PWNSimpleLoanProposal.Multiproposal', + type: 'tuple', + components: [ + { + name: 'multiproposalMerkleRoot', + internalType: 'bytes32', + type: 'bytes32', + }, + ], + }, + ], + name: 'getMultiproposalHash', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanDutchAuctionProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'collateralAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { name: 'maxCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'auctionStart', internalType: 'uint40', type: 'uint40' }, + { name: 'auctionDuration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + ], + name: 'getProposalHash', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'hub', + outputs: [{ name: '', internalType: 'contract PWNHub', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanDutchAuctionProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'collateralAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { name: 'maxCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'auctionStart', internalType: 'uint40', type: 'uint40' }, + { name: 'auctionDuration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + ], + name: 'makeProposal', + outputs: [ + { name: 'proposalHash', internalType: 'bytes32', type: 'bytes32' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + name: 'proposalsMade', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + name: 'revokeNonce', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'revokedNonce', + outputs: [ + { name: '', internalType: 'contract PWNRevokedNonce', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'utilizedCredit', + outputs: [ + { name: '', internalType: 'contract PWNUtilizedCredit', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'proposalHash', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + { + name: 'proposer', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanDutchAuctionProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'collateralAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { name: 'maxCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'auctionStart', internalType: 'uint40', type: 'uint40' }, + { name: 'auctionDuration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + indexed: false, + }, + ], + name: 'ProposalMade', + }, + { + type: 'error', + inputs: [{ name: 'addr', internalType: 'address', type: 'address' }], + name: 'AcceptorIsProposer', + }, + { + type: 'error', + inputs: [ + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'tag', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'AddressMissingHubTag', + }, + { + type: 'error', + inputs: [{ name: 'current', internalType: 'uint256', type: 'uint256' }], + name: 'AuctionDurationNotInFullMinutes', + }, + { + type: 'error', + inputs: [ + { name: 'currentTimestamp', internalType: 'uint256', type: 'uint256' }, + { name: 'auctionStart', internalType: 'uint256', type: 'uint256' }, + ], + name: 'AuctionNotInProgress', + }, + { + type: 'error', + inputs: [{ name: 'addr', internalType: 'address', type: 'address' }], + name: 'CallerIsNotStatedProposer', + }, + { + type: 'error', + inputs: [ + { name: 'caller', internalType: 'address', type: 'address' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + name: 'CallerNotLoanContract', + }, + { + type: 'error', + inputs: [ + { name: 'defaultDate', internalType: 'uint32', type: 'uint32' }, + { name: 'current', internalType: 'uint32', type: 'uint32' }, + ], + name: 'DefaultDateInPast', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'uint256', type: 'uint256' }, + { name: 'expiration', internalType: 'uint256', type: 'uint256' }, + ], + name: 'Expired', + }, + { + type: 'error', + inputs: [ + { name: 'acceptorController', internalType: 'address', type: 'address' }, + ], + name: 'InvalidAcceptorController', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'uint256', type: 'uint256' }, + { name: 'limit', internalType: 'uint256', type: 'uint256' }, + ], + name: 'InvalidAuctionDuration', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'bytes32', type: 'bytes32' }, + { name: 'proposed', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'InvalidCollateralStateFingerprint', + }, + { + type: 'error', + inputs: [ + { name: 'auctionCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'intendedCreditAmount', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'slippage', internalType: 'uint256', type: 'uint256' }, + ], + name: 'InvalidCreditAmount', + }, + { + type: 'error', + inputs: [ + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { name: 'maxCreditAmount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'InvalidCreditAmountRange', + }, + { + type: 'error', + inputs: [ + { name: 'refinancingLoanId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'InvalidRefinancingLoanId', + }, + { + type: 'error', + inputs: [ + { name: 'signer', internalType: 'address', type: 'address' }, + { name: 'digest', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'InvalidSignature', + }, + { + type: 'error', + inputs: [{ name: 'length', internalType: 'uint256', type: 'uint256' }], + name: 'InvalidSignatureLength', + }, + { type: 'error', inputs: [], name: 'MissingStateFingerprintComputer' }, + { + type: 'error', + inputs: [ + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + name: 'NonceNotUsable', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // PWNSimpleLoanElasticChainlinkProposal ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const pwnSimpleLoanElasticChainlinkProposalAbi = [ - { - type: "constructor", - inputs: [ - { name: "_hub", internalType: "address", type: "address" }, - { name: "_revokedNonce", internalType: "address", type: "address" }, - { name: "_config", internalType: "address", type: "address" }, - { name: "_utilizedCredit", internalType: "address", type: "address" }, - { - name: "_chainlinkFeedRegistry", - internalType: "address", - type: "address", - }, - { - name: "_l2SequencerUptimeFeed", - internalType: "address", - type: "address", - }, - { name: "_weth", internalType: "address", type: "address" }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "DOMAIN_SEPARATOR", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "LOAN_TO_VALUE_DENOMINATOR", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "MAX_INTERMEDIARY_DENOMINATIONS", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "MULTIPROPOSAL_DOMAIN_SEPARATOR", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "MULTIPROPOSAL_TYPEHASH", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "PROPOSAL_TYPEHASH", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "VERSION", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "WETH", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "acceptor", internalType: "address", type: "address" }, - { name: "refinancingLoanId", internalType: "uint256", type: "uint256" }, - { name: "proposalData", internalType: "bytes", type: "bytes" }, - { - name: "proposalInclusionProof", - internalType: "bytes32[]", - type: "bytes32[]", - }, - { name: "signature", internalType: "bytes", type: "bytes" }, - ], - name: "acceptProposal", - outputs: [ - { name: "proposalHash", internalType: "bytes32", type: "bytes32" }, - { - name: "loanTerms", - internalType: "struct PWNSimpleLoan.Terms", - type: "tuple", - components: [ - { name: "lender", internalType: "address", type: "address" }, - { name: "borrower", internalType: "address", type: "address" }, - { name: "duration", internalType: "uint32", type: "uint32" }, - { - name: "collateral", - internalType: "struct MultiToken.Asset", - type: "tuple", - components: [ - { - name: "category", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "assetAddress", - internalType: "address", - type: "address", - }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - }, - { - name: "credit", - internalType: "struct MultiToken.Asset", - type: "tuple", - components: [ - { - name: "category", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "assetAddress", - internalType: "address", - type: "address", - }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "lenderSpecHash", internalType: "bytes32", type: "bytes32" }, - { - name: "borrowerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - ], - }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "chainlinkFeedRegistry", - outputs: [ - { - name: "", - internalType: "contract IChainlinkFeedRegistryLike", - type: "address", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "config", - outputs: [ - { name: "", internalType: "contract PWNConfig", type: "address" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "proposalData", internalType: "bytes", type: "bytes" }], - name: "decodeProposalData", - outputs: [ - { - name: "", - internalType: "struct PWNSimpleLoanElasticChainlinkProposal.Proposal", - type: "tuple", - components: [ - { - name: "collateralCategory", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "collateralAddress", - internalType: "address", - type: "address", - }, - { name: "collateralId", internalType: "uint256", type: "uint256" }, - { - name: "checkCollateralStateFingerprint", - internalType: "bool", - type: "bool", - }, - { - name: "collateralStateFingerprint", - internalType: "bytes32", - type: "bytes32", - }, - { name: "creditAddress", internalType: "address", type: "address" }, - { - name: "feedIntermediaryDenominations", - internalType: "address[]", - type: "address[]", - }, - { name: "feedInvertFlags", internalType: "bool[]", type: "bool[]" }, - { name: "loanToValue", internalType: "uint256", type: "uint256" }, - { name: "minCreditAmount", internalType: "uint256", type: "uint256" }, - { - name: "availableCreditLimit", - internalType: "uint256", - type: "uint256", - }, - { - name: "utilizedCreditId", - internalType: "bytes32", - type: "bytes32", - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "durationOrDate", internalType: "uint32", type: "uint32" }, - { name: "expiration", internalType: "uint40", type: "uint40" }, - { name: "allowedAcceptor", internalType: "address", type: "address" }, - { name: "proposer", internalType: "address", type: "address" }, - { - name: "proposerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "isOffer", internalType: "bool", type: "bool" }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - }, - { - name: "", - internalType: - "struct PWNSimpleLoanElasticChainlinkProposal.ProposalValues", - type: "tuple", - components: [ - { name: "creditAmount", internalType: "uint256", type: "uint256" }, - ], - }, - ], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { - name: "proposal", - internalType: "struct PWNSimpleLoanElasticChainlinkProposal.Proposal", - type: "tuple", - components: [ - { - name: "collateralCategory", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "collateralAddress", - internalType: "address", - type: "address", - }, - { name: "collateralId", internalType: "uint256", type: "uint256" }, - { - name: "checkCollateralStateFingerprint", - internalType: "bool", - type: "bool", - }, - { - name: "collateralStateFingerprint", - internalType: "bytes32", - type: "bytes32", - }, - { name: "creditAddress", internalType: "address", type: "address" }, - { - name: "feedIntermediaryDenominations", - internalType: "address[]", - type: "address[]", - }, - { name: "feedInvertFlags", internalType: "bool[]", type: "bool[]" }, - { name: "loanToValue", internalType: "uint256", type: "uint256" }, - { name: "minCreditAmount", internalType: "uint256", type: "uint256" }, - { - name: "availableCreditLimit", - internalType: "uint256", - type: "uint256", - }, - { - name: "utilizedCreditId", - internalType: "bytes32", - type: "bytes32", - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "durationOrDate", internalType: "uint32", type: "uint32" }, - { name: "expiration", internalType: "uint40", type: "uint40" }, - { name: "allowedAcceptor", internalType: "address", type: "address" }, - { name: "proposer", internalType: "address", type: "address" }, - { - name: "proposerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "isOffer", internalType: "bool", type: "bool" }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - }, - { - name: "proposalValues", - internalType: - "struct PWNSimpleLoanElasticChainlinkProposal.ProposalValues", - type: "tuple", - components: [ - { name: "creditAmount", internalType: "uint256", type: "uint256" }, - ], - }, - ], - name: "encodeProposalData", - outputs: [{ name: "", internalType: "bytes", type: "bytes" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "creditAddress", internalType: "address", type: "address" }, - { name: "creditAmount", internalType: "uint256", type: "uint256" }, - { name: "collateralAddress", internalType: "address", type: "address" }, - { - name: "feedIntermediaryDenominations", - internalType: "address[]", - type: "address[]", - }, - { name: "feedInvertFlags", internalType: "bool[]", type: "bool[]" }, - { name: "loanToValue", internalType: "uint256", type: "uint256" }, - ], - name: "getCollateralAmount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "multiproposal", - internalType: "struct PWNSimpleLoanProposal.Multiproposal", - type: "tuple", - components: [ - { - name: "multiproposalMerkleRoot", - internalType: "bytes32", - type: "bytes32", - }, - ], - }, - ], - name: "getMultiproposalHash", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "proposal", - internalType: "struct PWNSimpleLoanElasticChainlinkProposal.Proposal", - type: "tuple", - components: [ - { - name: "collateralCategory", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "collateralAddress", - internalType: "address", - type: "address", - }, - { name: "collateralId", internalType: "uint256", type: "uint256" }, - { - name: "checkCollateralStateFingerprint", - internalType: "bool", - type: "bool", - }, - { - name: "collateralStateFingerprint", - internalType: "bytes32", - type: "bytes32", - }, - { name: "creditAddress", internalType: "address", type: "address" }, - { - name: "feedIntermediaryDenominations", - internalType: "address[]", - type: "address[]", - }, - { name: "feedInvertFlags", internalType: "bool[]", type: "bool[]" }, - { name: "loanToValue", internalType: "uint256", type: "uint256" }, - { name: "minCreditAmount", internalType: "uint256", type: "uint256" }, - { - name: "availableCreditLimit", - internalType: "uint256", - type: "uint256", - }, - { - name: "utilizedCreditId", - internalType: "bytes32", - type: "bytes32", - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "durationOrDate", internalType: "uint32", type: "uint32" }, - { name: "expiration", internalType: "uint40", type: "uint40" }, - { name: "allowedAcceptor", internalType: "address", type: "address" }, - { name: "proposer", internalType: "address", type: "address" }, - { - name: "proposerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "isOffer", internalType: "bool", type: "bool" }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - }, - ], - name: "getProposalHash", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "hub", - outputs: [{ name: "", internalType: "contract PWNHub", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "l2SequencerUptimeFeed", - outputs: [ - { - name: "", - internalType: "contract IChainlinkAggregatorLike", - type: "address", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "proposal", - internalType: "struct PWNSimpleLoanElasticChainlinkProposal.Proposal", - type: "tuple", - components: [ - { - name: "collateralCategory", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "collateralAddress", - internalType: "address", - type: "address", - }, - { name: "collateralId", internalType: "uint256", type: "uint256" }, - { - name: "checkCollateralStateFingerprint", - internalType: "bool", - type: "bool", - }, - { - name: "collateralStateFingerprint", - internalType: "bytes32", - type: "bytes32", - }, - { name: "creditAddress", internalType: "address", type: "address" }, - { - name: "feedIntermediaryDenominations", - internalType: "address[]", - type: "address[]", - }, - { name: "feedInvertFlags", internalType: "bool[]", type: "bool[]" }, - { name: "loanToValue", internalType: "uint256", type: "uint256" }, - { name: "minCreditAmount", internalType: "uint256", type: "uint256" }, - { - name: "availableCreditLimit", - internalType: "uint256", - type: "uint256", - }, - { - name: "utilizedCreditId", - internalType: "bytes32", - type: "bytes32", - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "durationOrDate", internalType: "uint32", type: "uint32" }, - { name: "expiration", internalType: "uint40", type: "uint40" }, - { name: "allowedAcceptor", internalType: "address", type: "address" }, - { name: "proposer", internalType: "address", type: "address" }, - { - name: "proposerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "isOffer", internalType: "bool", type: "bool" }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - }, - ], - name: "makeProposal", - outputs: [ - { name: "proposalHash", internalType: "bytes32", type: "bytes32" }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - name: "proposalsMade", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - ], - name: "revokeNonce", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "revokedNonce", - outputs: [ - { name: "", internalType: "contract PWNRevokedNonce", type: "address" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "utilizedCredit", - outputs: [ - { name: "", internalType: "contract PWNUtilizedCredit", type: "address" }, - ], - stateMutability: "view", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "proposalHash", - internalType: "bytes32", - type: "bytes32", - indexed: true, - }, - { - name: "proposer", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "proposal", - internalType: "struct PWNSimpleLoanElasticChainlinkProposal.Proposal", - type: "tuple", - components: [ - { - name: "collateralCategory", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "collateralAddress", - internalType: "address", - type: "address", - }, - { name: "collateralId", internalType: "uint256", type: "uint256" }, - { - name: "checkCollateralStateFingerprint", - internalType: "bool", - type: "bool", - }, - { - name: "collateralStateFingerprint", - internalType: "bytes32", - type: "bytes32", - }, - { name: "creditAddress", internalType: "address", type: "address" }, - { - name: "feedIntermediaryDenominations", - internalType: "address[]", - type: "address[]", - }, - { name: "feedInvertFlags", internalType: "bool[]", type: "bool[]" }, - { name: "loanToValue", internalType: "uint256", type: "uint256" }, - { name: "minCreditAmount", internalType: "uint256", type: "uint256" }, - { - name: "availableCreditLimit", - internalType: "uint256", - type: "uint256", - }, - { - name: "utilizedCreditId", - internalType: "bytes32", - type: "bytes32", - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "durationOrDate", internalType: "uint32", type: "uint32" }, - { name: "expiration", internalType: "uint40", type: "uint40" }, - { name: "allowedAcceptor", internalType: "address", type: "address" }, - { name: "proposer", internalType: "address", type: "address" }, - { - name: "proposerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "isOffer", internalType: "bool", type: "bool" }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - indexed: false, - }, - ], - name: "ProposalMade", - }, - { - type: "error", - inputs: [{ name: "addr", internalType: "address", type: "address" }], - name: "AcceptorIsProposer", - }, - { - type: "error", - inputs: [ - { name: "addr", internalType: "address", type: "address" }, - { name: "tag", internalType: "bytes32", type: "bytes32" }, - ], - name: "AddressMissingHubTag", - }, - { - type: "error", - inputs: [{ name: "addr", internalType: "address", type: "address" }], - name: "CallerIsNotStatedProposer", - }, - { - type: "error", - inputs: [ - { name: "current", internalType: "address", type: "address" }, - { name: "allowed", internalType: "address", type: "address" }, - ], - name: "CallerNotAllowedAcceptor", - }, - { - type: "error", - inputs: [ - { name: "caller", internalType: "address", type: "address" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - name: "CallerNotLoanContract", - }, - { - type: "error", - inputs: [ - { name: "feed", internalType: "address", type: "address" }, - { name: "updatedAt", internalType: "uint256", type: "uint256" }, - ], - name: "ChainlinkFeedPriceTooOld", - }, - { - type: "error", - inputs: [ - { name: "feed", internalType: "address", type: "address" }, - { name: "price", internalType: "int256", type: "int256" }, - { name: "updatedAt", internalType: "uint256", type: "uint256" }, - ], - name: "ChainlinkFeedReturnedNegativePrice", - }, - { type: "error", inputs: [], name: "ChainlinkInvalidInputLenghts" }, - { - type: "error", - inputs: [ - { name: "defaultDate", internalType: "uint32", type: "uint32" }, - { name: "current", internalType: "uint32", type: "uint32" }, - ], - name: "DefaultDateInPast", - }, - { - type: "error", - inputs: [ - { name: "current", internalType: "uint256", type: "uint256" }, - { name: "expiration", internalType: "uint256", type: "uint256" }, - ], - name: "Expired", - }, - { - type: "error", - inputs: [ - { name: "timeSinceUp", internalType: "uint256", type: "uint256" }, - { name: "gracePeriod", internalType: "uint256", type: "uint256" }, - ], - name: "GracePeriodNotOver", - }, - { - type: "error", - inputs: [ - { name: "current", internalType: "uint256", type: "uint256" }, - { name: "limit", internalType: "uint256", type: "uint256" }, - ], - name: "InsufficientCreditAmount", - }, - { - type: "error", - inputs: [ - { name: "current", internalType: "uint256", type: "uint256" }, - { name: "limit", internalType: "uint256", type: "uint256" }, - ], - name: "IntermediaryDenominationsOutOfBounds", - }, - { - type: "error", - inputs: [ - { name: "current", internalType: "bytes32", type: "bytes32" }, - { name: "proposed", internalType: "bytes32", type: "bytes32" }, - ], - name: "InvalidCollateralStateFingerprint", - }, - { - type: "error", - inputs: [ - { name: "refinancingLoanId", internalType: "uint256", type: "uint256" }, - ], - name: "InvalidRefinancingLoanId", - }, - { - type: "error", - inputs: [ - { name: "signer", internalType: "address", type: "address" }, - { name: "digest", internalType: "bytes32", type: "bytes32" }, - ], - name: "InvalidSignature", - }, - { - type: "error", - inputs: [{ name: "length", internalType: "uint256", type: "uint256" }], - name: "InvalidSignatureLength", - }, - { type: "error", inputs: [], name: "L2SequencerDown" }, - { type: "error", inputs: [], name: "MinCreditAmountNotSet" }, - { type: "error", inputs: [], name: "MissingStateFingerprintComputer" }, - { - type: "error", - inputs: [ - { name: "addr", internalType: "address", type: "address" }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - ], - name: "NonceNotUsable", - }, -] as const; + { + type: 'constructor', + inputs: [ + { name: '_hub', internalType: 'address', type: 'address' }, + { name: '_revokedNonce', internalType: 'address', type: 'address' }, + { name: '_config', internalType: 'address', type: 'address' }, + { name: '_utilizedCredit', internalType: 'address', type: 'address' }, + { + name: '_chainlinkFeedRegistry', + internalType: 'address', + type: 'address', + }, + { + name: '_chainlinkL2SequencerUptimeFeed', + internalType: 'address', + type: 'address', + }, + { name: '_weth', internalType: 'address', type: 'address' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'DOMAIN_SEPARATOR', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'LOAN_TO_VALUE_DENOMINATOR', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MAX_INTERMEDIARY_DENOMINATIONS', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MULTIPROPOSAL_DOMAIN_SEPARATOR', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MULTIPROPOSAL_TYPEHASH', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'PROPOSAL_TYPEHASH', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'VERSION', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'WETH', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'acceptor', internalType: 'address', type: 'address' }, + { name: 'refinancingLoanId', internalType: 'uint256', type: 'uint256' }, + { name: 'proposalData', internalType: 'bytes', type: 'bytes' }, + { + name: 'proposalInclusionProof', + internalType: 'bytes32[]', + type: 'bytes32[]', + }, + { name: 'signature', internalType: 'bytes', type: 'bytes' }, + ], + name: 'acceptProposal', + outputs: [ + { name: 'proposalHash', internalType: 'bytes32', type: 'bytes32' }, + { + name: 'loanTerms', + internalType: 'struct PWNSimpleLoan.Terms', + type: 'tuple', + components: [ + { name: 'lender', internalType: 'address', type: 'address' }, + { name: 'borrower', internalType: 'address', type: 'address' }, + { name: 'duration', internalType: 'uint32', type: 'uint32' }, + { + name: 'collateral', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'assetAddress', + internalType: 'address', + type: 'address', + }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + }, + { + name: 'credit', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'assetAddress', + internalType: 'address', + type: 'address', + }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'lenderSpecHash', internalType: 'bytes32', type: 'bytes32' }, + { + name: 'borrowerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + ], + }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'chainlinkFeedRegistry', + outputs: [ + { + name: '', + internalType: 'contract IChainlinkFeedRegistryLike', + type: 'address', + }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'chainlinkL2SequencerUptimeFeed', + outputs: [ + { + name: '', + internalType: 'contract IChainlinkAggregatorLike', + type: 'address', + }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'config', + outputs: [ + { name: '', internalType: 'contract PWNConfig', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'proposalData', internalType: 'bytes', type: 'bytes' }], + name: 'decodeProposalData', + outputs: [ + { + name: '', + internalType: 'struct PWNSimpleLoanElasticChainlinkProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + { + name: '', + internalType: + 'struct PWNSimpleLoanElasticChainlinkProposal.ProposalValues', + type: 'tuple', + components: [ + { name: 'creditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + ], + }, + ], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanElasticChainlinkProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + { + name: 'proposalValues', + internalType: + 'struct PWNSimpleLoanElasticChainlinkProposal.ProposalValues', + type: 'tuple', + components: [ + { name: 'creditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + ], + }, + ], + name: 'encodeProposalData', + outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'creditAmount', internalType: 'uint256', type: 'uint256' }, + { name: 'collateralAddress', internalType: 'address', type: 'address' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + ], + name: 'getCollateralAmount', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'multiproposal', + internalType: 'struct PWNSimpleLoanProposal.Multiproposal', + type: 'tuple', + components: [ + { + name: 'multiproposalMerkleRoot', + internalType: 'bytes32', + type: 'bytes32', + }, + ], + }, + ], + name: 'getMultiproposalHash', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanElasticChainlinkProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + ], + name: 'getProposalHash', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'hub', + outputs: [{ name: '', internalType: 'contract PWNHub', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanElasticChainlinkProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + ], + name: 'makeProposal', + outputs: [ + { name: 'proposalHash', internalType: 'bytes32', type: 'bytes32' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + name: 'proposalsMade', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + name: 'revokeNonce', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'revokedNonce', + outputs: [ + { name: '', internalType: 'contract PWNRevokedNonce', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'utilizedCredit', + outputs: [ + { name: '', internalType: 'contract PWNUtilizedCredit', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'proposalHash', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + { + name: 'proposer', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanElasticChainlinkProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + indexed: false, + }, + ], + name: 'ProposalMade', + }, + { + type: 'error', + inputs: [{ name: 'addr', internalType: 'address', type: 'address' }], + name: 'AcceptorIsProposer', + }, + { + type: 'error', + inputs: [ + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'tag', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'AddressMissingHubTag', + }, + { + type: 'error', + inputs: [{ name: 'addr', internalType: 'address', type: 'address' }], + name: 'CallerIsNotStatedProposer', + }, + { + type: 'error', + inputs: [ + { name: 'caller', internalType: 'address', type: 'address' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + name: 'CallerNotLoanContract', + }, + { + type: 'error', + inputs: [ + { name: 'feed', internalType: 'address', type: 'address' }, + { name: 'updatedAt', internalType: 'uint256', type: 'uint256' }, + ], + name: 'ChainlinkFeedPriceTooOld', + }, + { + type: 'error', + inputs: [ + { name: 'feed', internalType: 'address', type: 'address' }, + { name: 'price', internalType: 'int256', type: 'int256' }, + { name: 'updatedAt', internalType: 'uint256', type: 'uint256' }, + ], + name: 'ChainlinkFeedReturnedNegativePrice', + }, + { type: 'error', inputs: [], name: 'ChainlinkInvalidInputLenghts' }, + { + type: 'error', + inputs: [ + { name: 'defaultDate', internalType: 'uint32', type: 'uint32' }, + { name: 'current', internalType: 'uint32', type: 'uint32' }, + ], + name: 'DefaultDateInPast', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'uint256', type: 'uint256' }, + { name: 'expiration', internalType: 'uint256', type: 'uint256' }, + ], + name: 'Expired', + }, + { + type: 'error', + inputs: [ + { name: 'timeSinceUp', internalType: 'uint256', type: 'uint256' }, + { name: 'gracePeriod', internalType: 'uint256', type: 'uint256' }, + ], + name: 'GracePeriodNotOver', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'uint256', type: 'uint256' }, + { name: 'limit', internalType: 'uint256', type: 'uint256' }, + ], + name: 'InsufficientCreditAmount', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'uint256', type: 'uint256' }, + { name: 'limit', internalType: 'uint256', type: 'uint256' }, + ], + name: 'IntermediaryDenominationsOutOfBounds', + }, + { + type: 'error', + inputs: [ + { name: 'acceptorController', internalType: 'address', type: 'address' }, + ], + name: 'InvalidAcceptorController', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'bytes32', type: 'bytes32' }, + { name: 'proposed', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'InvalidCollateralStateFingerprint', + }, + { + type: 'error', + inputs: [ + { name: 'refinancingLoanId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'InvalidRefinancingLoanId', + }, + { + type: 'error', + inputs: [ + { name: 'signer', internalType: 'address', type: 'address' }, + { name: 'digest', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'InvalidSignature', + }, + { + type: 'error', + inputs: [{ name: 'length', internalType: 'uint256', type: 'uint256' }], + name: 'InvalidSignatureLength', + }, + { type: 'error', inputs: [], name: 'L2SequencerDown' }, + { type: 'error', inputs: [], name: 'MinCreditAmountNotSet' }, + { type: 'error', inputs: [], name: 'MissingStateFingerprintComputer' }, + { + type: 'error', + inputs: [ + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + name: 'NonceNotUsable', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // PWNSimpleLoanElasticChainlinkProposalHarness ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const pwnSimpleLoanElasticChainlinkProposalHarnessAbi = [ - { - type: "constructor", - inputs: [ - { name: "_hub", internalType: "address", type: "address" }, - { name: "_revokedNonce", internalType: "address", type: "address" }, - { name: "_config", internalType: "address", type: "address" }, - { name: "_utilizedCredit", internalType: "address", type: "address" }, - { - name: "_chainlinkFeedRegistry", - internalType: "address", - type: "address", - }, - { - name: "_l2SequencerUptimeFeed", - internalType: "address", - type: "address", - }, - { name: "_weth", internalType: "address", type: "address" }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "DOMAIN_SEPARATOR", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "LOAN_TO_VALUE_DENOMINATOR", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "MAX_INTERMEDIARY_DENOMINATIONS", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "MULTIPROPOSAL_DOMAIN_SEPARATOR", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "MULTIPROPOSAL_TYPEHASH", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "PROPOSAL_TYPEHASH", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "VERSION", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "WETH", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "acceptor", internalType: "address", type: "address" }, - { name: "refinancingLoanId", internalType: "uint256", type: "uint256" }, - { name: "proposalData", internalType: "bytes", type: "bytes" }, - { - name: "proposalInclusionProof", - internalType: "bytes32[]", - type: "bytes32[]", - }, - { name: "signature", internalType: "bytes", type: "bytes" }, - ], - name: "acceptProposal", - outputs: [ - { name: "proposalHash", internalType: "bytes32", type: "bytes32" }, - { - name: "loanTerms", - internalType: "struct PWNSimpleLoan.Terms", - type: "tuple", - components: [ - { name: "lender", internalType: "address", type: "address" }, - { name: "borrower", internalType: "address", type: "address" }, - { name: "duration", internalType: "uint32", type: "uint32" }, - { - name: "collateral", - internalType: "struct MultiToken.Asset", - type: "tuple", - components: [ - { - name: "category", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "assetAddress", - internalType: "address", - type: "address", - }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - }, - { - name: "credit", - internalType: "struct MultiToken.Asset", - type: "tuple", - components: [ - { - name: "category", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "assetAddress", - internalType: "address", - type: "address", - }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "lenderSpecHash", internalType: "bytes32", type: "bytes32" }, - { - name: "borrowerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - ], - }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "chainlinkFeedRegistry", - outputs: [ - { - name: "", - internalType: "contract IChainlinkFeedRegistryLike", - type: "address", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "config", - outputs: [ - { name: "", internalType: "contract PWNConfig", type: "address" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "proposalData", internalType: "bytes", type: "bytes" }], - name: "decodeProposalData", - outputs: [ - { - name: "", - internalType: "struct PWNSimpleLoanElasticChainlinkProposal.Proposal", - type: "tuple", - components: [ - { - name: "collateralCategory", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "collateralAddress", - internalType: "address", - type: "address", - }, - { name: "collateralId", internalType: "uint256", type: "uint256" }, - { - name: "checkCollateralStateFingerprint", - internalType: "bool", - type: "bool", - }, - { - name: "collateralStateFingerprint", - internalType: "bytes32", - type: "bytes32", - }, - { name: "creditAddress", internalType: "address", type: "address" }, - { - name: "feedIntermediaryDenominations", - internalType: "address[]", - type: "address[]", - }, - { name: "feedInvertFlags", internalType: "bool[]", type: "bool[]" }, - { name: "loanToValue", internalType: "uint256", type: "uint256" }, - { name: "minCreditAmount", internalType: "uint256", type: "uint256" }, - { - name: "availableCreditLimit", - internalType: "uint256", - type: "uint256", - }, - { - name: "utilizedCreditId", - internalType: "bytes32", - type: "bytes32", - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "durationOrDate", internalType: "uint32", type: "uint32" }, - { name: "expiration", internalType: "uint40", type: "uint40" }, - { name: "allowedAcceptor", internalType: "address", type: "address" }, - { name: "proposer", internalType: "address", type: "address" }, - { - name: "proposerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "isOffer", internalType: "bool", type: "bool" }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - }, - { - name: "", - internalType: - "struct PWNSimpleLoanElasticChainlinkProposal.ProposalValues", - type: "tuple", - components: [ - { name: "creditAmount", internalType: "uint256", type: "uint256" }, - ], - }, - ], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { - name: "proposal", - internalType: "struct PWNSimpleLoanElasticChainlinkProposal.Proposal", - type: "tuple", - components: [ - { - name: "collateralCategory", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "collateralAddress", - internalType: "address", - type: "address", - }, - { name: "collateralId", internalType: "uint256", type: "uint256" }, - { - name: "checkCollateralStateFingerprint", - internalType: "bool", - type: "bool", - }, - { - name: "collateralStateFingerprint", - internalType: "bytes32", - type: "bytes32", - }, - { name: "creditAddress", internalType: "address", type: "address" }, - { - name: "feedIntermediaryDenominations", - internalType: "address[]", - type: "address[]", - }, - { name: "feedInvertFlags", internalType: "bool[]", type: "bool[]" }, - { name: "loanToValue", internalType: "uint256", type: "uint256" }, - { name: "minCreditAmount", internalType: "uint256", type: "uint256" }, - { - name: "availableCreditLimit", - internalType: "uint256", - type: "uint256", - }, - { - name: "utilizedCreditId", - internalType: "bytes32", - type: "bytes32", - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "durationOrDate", internalType: "uint32", type: "uint32" }, - { name: "expiration", internalType: "uint40", type: "uint40" }, - { name: "allowedAcceptor", internalType: "address", type: "address" }, - { name: "proposer", internalType: "address", type: "address" }, - { - name: "proposerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "isOffer", internalType: "bool", type: "bool" }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - }, - { - name: "proposalValues", - internalType: - "struct PWNSimpleLoanElasticChainlinkProposal.ProposalValues", - type: "tuple", - components: [ - { name: "creditAmount", internalType: "uint256", type: "uint256" }, - ], - }, - ], - name: "encodeProposalData", - outputs: [{ name: "", internalType: "bytes", type: "bytes" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { - name: "proposal", - internalType: "struct PWNSimpleLoanElasticChainlinkProposal.Proposal", - type: "tuple", - components: [ - { - name: "collateralCategory", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "collateralAddress", - internalType: "address", - type: "address", - }, - { name: "collateralId", internalType: "uint256", type: "uint256" }, - { - name: "checkCollateralStateFingerprint", - internalType: "bool", - type: "bool", - }, - { - name: "collateralStateFingerprint", - internalType: "bytes32", - type: "bytes32", - }, - { name: "creditAddress", internalType: "address", type: "address" }, - { - name: "feedIntermediaryDenominations", - internalType: "address[]", - type: "address[]", - }, - { name: "feedInvertFlags", internalType: "bool[]", type: "bool[]" }, - { name: "loanToValue", internalType: "uint256", type: "uint256" }, - { name: "minCreditAmount", internalType: "uint256", type: "uint256" }, - { - name: "availableCreditLimit", - internalType: "uint256", - type: "uint256", - }, - { - name: "utilizedCreditId", - internalType: "bytes32", - type: "bytes32", - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "durationOrDate", internalType: "uint32", type: "uint32" }, - { name: "expiration", internalType: "uint40", type: "uint40" }, - { name: "allowedAcceptor", internalType: "address", type: "address" }, - { name: "proposer", internalType: "address", type: "address" }, - { - name: "proposerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "isOffer", internalType: "bool", type: "bool" }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - }, - ], - name: "exposed_erc712EncodeProposal", - outputs: [{ name: "", internalType: "bytes", type: "bytes" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "creditAddress", internalType: "address", type: "address" }, - { name: "creditAmount", internalType: "uint256", type: "uint256" }, - { name: "collateralAddress", internalType: "address", type: "address" }, - { - name: "feedIntermediaryDenominations", - internalType: "address[]", - type: "address[]", - }, - { name: "feedInvertFlags", internalType: "bool[]", type: "bool[]" }, - { name: "loanToValue", internalType: "uint256", type: "uint256" }, - ], - name: "getCollateralAmount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "multiproposal", - internalType: "struct PWNSimpleLoanProposal.Multiproposal", - type: "tuple", - components: [ - { - name: "multiproposalMerkleRoot", - internalType: "bytes32", - type: "bytes32", - }, - ], - }, - ], - name: "getMultiproposalHash", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "proposal", - internalType: "struct PWNSimpleLoanElasticChainlinkProposal.Proposal", - type: "tuple", - components: [ - { - name: "collateralCategory", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "collateralAddress", - internalType: "address", - type: "address", - }, - { name: "collateralId", internalType: "uint256", type: "uint256" }, - { - name: "checkCollateralStateFingerprint", - internalType: "bool", - type: "bool", - }, - { - name: "collateralStateFingerprint", - internalType: "bytes32", - type: "bytes32", - }, - { name: "creditAddress", internalType: "address", type: "address" }, - { - name: "feedIntermediaryDenominations", - internalType: "address[]", - type: "address[]", - }, - { name: "feedInvertFlags", internalType: "bool[]", type: "bool[]" }, - { name: "loanToValue", internalType: "uint256", type: "uint256" }, - { name: "minCreditAmount", internalType: "uint256", type: "uint256" }, - { - name: "availableCreditLimit", - internalType: "uint256", - type: "uint256", - }, - { - name: "utilizedCreditId", - internalType: "bytes32", - type: "bytes32", - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "durationOrDate", internalType: "uint32", type: "uint32" }, - { name: "expiration", internalType: "uint40", type: "uint40" }, - { name: "allowedAcceptor", internalType: "address", type: "address" }, - { name: "proposer", internalType: "address", type: "address" }, - { - name: "proposerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "isOffer", internalType: "bool", type: "bool" }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - }, - ], - name: "getProposalHash", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "hub", - outputs: [{ name: "", internalType: "contract PWNHub", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "l2SequencerUptimeFeed", - outputs: [ - { - name: "", - internalType: "contract IChainlinkAggregatorLike", - type: "address", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "proposal", - internalType: "struct PWNSimpleLoanElasticChainlinkProposal.Proposal", - type: "tuple", - components: [ - { - name: "collateralCategory", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "collateralAddress", - internalType: "address", - type: "address", - }, - { name: "collateralId", internalType: "uint256", type: "uint256" }, - { - name: "checkCollateralStateFingerprint", - internalType: "bool", - type: "bool", - }, - { - name: "collateralStateFingerprint", - internalType: "bytes32", - type: "bytes32", - }, - { name: "creditAddress", internalType: "address", type: "address" }, - { - name: "feedIntermediaryDenominations", - internalType: "address[]", - type: "address[]", - }, - { name: "feedInvertFlags", internalType: "bool[]", type: "bool[]" }, - { name: "loanToValue", internalType: "uint256", type: "uint256" }, - { name: "minCreditAmount", internalType: "uint256", type: "uint256" }, - { - name: "availableCreditLimit", - internalType: "uint256", - type: "uint256", - }, - { - name: "utilizedCreditId", - internalType: "bytes32", - type: "bytes32", - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "durationOrDate", internalType: "uint32", type: "uint32" }, - { name: "expiration", internalType: "uint40", type: "uint40" }, - { name: "allowedAcceptor", internalType: "address", type: "address" }, - { name: "proposer", internalType: "address", type: "address" }, - { - name: "proposerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "isOffer", internalType: "bool", type: "bool" }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - }, - ], - name: "makeProposal", - outputs: [ - { name: "proposalHash", internalType: "bytes32", type: "bytes32" }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - name: "proposalsMade", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - ], - name: "revokeNonce", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "revokedNonce", - outputs: [ - { name: "", internalType: "contract PWNRevokedNonce", type: "address" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "utilizedCredit", - outputs: [ - { name: "", internalType: "contract PWNUtilizedCredit", type: "address" }, - ], - stateMutability: "view", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "proposalHash", - internalType: "bytes32", - type: "bytes32", - indexed: true, - }, - { - name: "proposer", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "proposal", - internalType: "struct PWNSimpleLoanElasticChainlinkProposal.Proposal", - type: "tuple", - components: [ - { - name: "collateralCategory", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "collateralAddress", - internalType: "address", - type: "address", - }, - { name: "collateralId", internalType: "uint256", type: "uint256" }, - { - name: "checkCollateralStateFingerprint", - internalType: "bool", - type: "bool", - }, - { - name: "collateralStateFingerprint", - internalType: "bytes32", - type: "bytes32", - }, - { name: "creditAddress", internalType: "address", type: "address" }, - { - name: "feedIntermediaryDenominations", - internalType: "address[]", - type: "address[]", - }, - { name: "feedInvertFlags", internalType: "bool[]", type: "bool[]" }, - { name: "loanToValue", internalType: "uint256", type: "uint256" }, - { name: "minCreditAmount", internalType: "uint256", type: "uint256" }, - { - name: "availableCreditLimit", - internalType: "uint256", - type: "uint256", - }, - { - name: "utilizedCreditId", - internalType: "bytes32", - type: "bytes32", - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "durationOrDate", internalType: "uint32", type: "uint32" }, - { name: "expiration", internalType: "uint40", type: "uint40" }, - { name: "allowedAcceptor", internalType: "address", type: "address" }, - { name: "proposer", internalType: "address", type: "address" }, - { - name: "proposerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "isOffer", internalType: "bool", type: "bool" }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - indexed: false, - }, - ], - name: "ProposalMade", - }, - { - type: "error", - inputs: [{ name: "addr", internalType: "address", type: "address" }], - name: "AcceptorIsProposer", - }, - { - type: "error", - inputs: [ - { name: "addr", internalType: "address", type: "address" }, - { name: "tag", internalType: "bytes32", type: "bytes32" }, - ], - name: "AddressMissingHubTag", - }, - { - type: "error", - inputs: [{ name: "addr", internalType: "address", type: "address" }], - name: "CallerIsNotStatedProposer", - }, - { - type: "error", - inputs: [ - { name: "current", internalType: "address", type: "address" }, - { name: "allowed", internalType: "address", type: "address" }, - ], - name: "CallerNotAllowedAcceptor", - }, - { - type: "error", - inputs: [ - { name: "caller", internalType: "address", type: "address" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - name: "CallerNotLoanContract", - }, - { - type: "error", - inputs: [ - { name: "feed", internalType: "address", type: "address" }, - { name: "updatedAt", internalType: "uint256", type: "uint256" }, - ], - name: "ChainlinkFeedPriceTooOld", - }, - { - type: "error", - inputs: [ - { name: "feed", internalType: "address", type: "address" }, - { name: "price", internalType: "int256", type: "int256" }, - { name: "updatedAt", internalType: "uint256", type: "uint256" }, - ], - name: "ChainlinkFeedReturnedNegativePrice", - }, - { type: "error", inputs: [], name: "ChainlinkInvalidInputLenghts" }, - { - type: "error", - inputs: [ - { name: "defaultDate", internalType: "uint32", type: "uint32" }, - { name: "current", internalType: "uint32", type: "uint32" }, - ], - name: "DefaultDateInPast", - }, - { - type: "error", - inputs: [ - { name: "current", internalType: "uint256", type: "uint256" }, - { name: "expiration", internalType: "uint256", type: "uint256" }, - ], - name: "Expired", - }, - { - type: "error", - inputs: [ - { name: "timeSinceUp", internalType: "uint256", type: "uint256" }, - { name: "gracePeriod", internalType: "uint256", type: "uint256" }, - ], - name: "GracePeriodNotOver", - }, - { - type: "error", - inputs: [ - { name: "current", internalType: "uint256", type: "uint256" }, - { name: "limit", internalType: "uint256", type: "uint256" }, - ], - name: "InsufficientCreditAmount", - }, - { - type: "error", - inputs: [ - { name: "current", internalType: "uint256", type: "uint256" }, - { name: "limit", internalType: "uint256", type: "uint256" }, - ], - name: "IntermediaryDenominationsOutOfBounds", - }, - { - type: "error", - inputs: [ - { name: "current", internalType: "bytes32", type: "bytes32" }, - { name: "proposed", internalType: "bytes32", type: "bytes32" }, - ], - name: "InvalidCollateralStateFingerprint", - }, - { - type: "error", - inputs: [ - { name: "refinancingLoanId", internalType: "uint256", type: "uint256" }, - ], - name: "InvalidRefinancingLoanId", - }, - { - type: "error", - inputs: [ - { name: "signer", internalType: "address", type: "address" }, - { name: "digest", internalType: "bytes32", type: "bytes32" }, - ], - name: "InvalidSignature", - }, - { - type: "error", - inputs: [{ name: "length", internalType: "uint256", type: "uint256" }], - name: "InvalidSignatureLength", - }, - { type: "error", inputs: [], name: "L2SequencerDown" }, - { type: "error", inputs: [], name: "MinCreditAmountNotSet" }, - { type: "error", inputs: [], name: "MissingStateFingerprintComputer" }, - { - type: "error", - inputs: [ - { name: "addr", internalType: "address", type: "address" }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - ], - name: "NonceNotUsable", - }, -] as const; + { + type: 'constructor', + inputs: [ + { name: '_hub', internalType: 'address', type: 'address' }, + { name: '_revokedNonce', internalType: 'address', type: 'address' }, + { name: '_config', internalType: 'address', type: 'address' }, + { name: '_utilizedCredit', internalType: 'address', type: 'address' }, + { + name: '_chainlinkFeedRegistry', + internalType: 'address', + type: 'address', + }, + { + name: '_l2SequencerUptimeFeed', + internalType: 'address', + type: 'address', + }, + { name: '_weth', internalType: 'address', type: 'address' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'DOMAIN_SEPARATOR', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'LOAN_TO_VALUE_DENOMINATOR', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MAX_INTERMEDIARY_DENOMINATIONS', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MULTIPROPOSAL_DOMAIN_SEPARATOR', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MULTIPROPOSAL_TYPEHASH', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'PROPOSAL_TYPEHASH', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'VERSION', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'WETH', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'acceptor', internalType: 'address', type: 'address' }, + { name: 'refinancingLoanId', internalType: 'uint256', type: 'uint256' }, + { name: 'proposalData', internalType: 'bytes', type: 'bytes' }, + { + name: 'proposalInclusionProof', + internalType: 'bytes32[]', + type: 'bytes32[]', + }, + { name: 'signature', internalType: 'bytes', type: 'bytes' }, + ], + name: 'acceptProposal', + outputs: [ + { name: 'proposalHash', internalType: 'bytes32', type: 'bytes32' }, + { + name: 'loanTerms', + internalType: 'struct PWNSimpleLoan.Terms', + type: 'tuple', + components: [ + { name: 'lender', internalType: 'address', type: 'address' }, + { name: 'borrower', internalType: 'address', type: 'address' }, + { name: 'duration', internalType: 'uint32', type: 'uint32' }, + { + name: 'collateral', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'assetAddress', + internalType: 'address', + type: 'address', + }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + }, + { + name: 'credit', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'assetAddress', + internalType: 'address', + type: 'address', + }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'lenderSpecHash', internalType: 'bytes32', type: 'bytes32' }, + { + name: 'borrowerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + ], + }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'chainlinkFeedRegistry', + outputs: [ + { + name: '', + internalType: 'contract IChainlinkFeedRegistryLike', + type: 'address', + }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'chainlinkL2SequencerUptimeFeed', + outputs: [ + { + name: '', + internalType: 'contract IChainlinkAggregatorLike', + type: 'address', + }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'config', + outputs: [ + { name: '', internalType: 'contract PWNConfig', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'proposalData', internalType: 'bytes', type: 'bytes' }], + name: 'decodeProposalData', + outputs: [ + { + name: '', + internalType: 'struct PWNSimpleLoanElasticChainlinkProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + { + name: '', + internalType: + 'struct PWNSimpleLoanElasticChainlinkProposal.ProposalValues', + type: 'tuple', + components: [ + { name: 'creditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + ], + }, + ], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanElasticChainlinkProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + { + name: 'proposalValues', + internalType: + 'struct PWNSimpleLoanElasticChainlinkProposal.ProposalValues', + type: 'tuple', + components: [ + { name: 'creditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + ], + }, + ], + name: 'encodeProposalData', + outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanElasticChainlinkProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + ], + name: 'exposed_erc712EncodeProposal', + outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'creditAmount', internalType: 'uint256', type: 'uint256' }, + { name: 'collateralAddress', internalType: 'address', type: 'address' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + ], + name: 'getCollateralAmount', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'multiproposal', + internalType: 'struct PWNSimpleLoanProposal.Multiproposal', + type: 'tuple', + components: [ + { + name: 'multiproposalMerkleRoot', + internalType: 'bytes32', + type: 'bytes32', + }, + ], + }, + ], + name: 'getMultiproposalHash', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanElasticChainlinkProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + ], + name: 'getProposalHash', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'hub', + outputs: [{ name: '', internalType: 'contract PWNHub', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanElasticChainlinkProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + ], + name: 'makeProposal', + outputs: [ + { name: 'proposalHash', internalType: 'bytes32', type: 'bytes32' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + name: 'proposalsMade', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + name: 'revokeNonce', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'revokedNonce', + outputs: [ + { name: '', internalType: 'contract PWNRevokedNonce', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'utilizedCredit', + outputs: [ + { name: '', internalType: 'contract PWNUtilizedCredit', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'proposalHash', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + { + name: 'proposer', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanElasticChainlinkProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + indexed: false, + }, + ], + name: 'ProposalMade', + }, + { + type: 'error', + inputs: [{ name: 'addr', internalType: 'address', type: 'address' }], + name: 'AcceptorIsProposer', + }, + { + type: 'error', + inputs: [ + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'tag', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'AddressMissingHubTag', + }, + { + type: 'error', + inputs: [{ name: 'addr', internalType: 'address', type: 'address' }], + name: 'CallerIsNotStatedProposer', + }, + { + type: 'error', + inputs: [ + { name: 'caller', internalType: 'address', type: 'address' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + name: 'CallerNotLoanContract', + }, + { + type: 'error', + inputs: [ + { name: 'feed', internalType: 'address', type: 'address' }, + { name: 'updatedAt', internalType: 'uint256', type: 'uint256' }, + ], + name: 'ChainlinkFeedPriceTooOld', + }, + { + type: 'error', + inputs: [ + { name: 'feed', internalType: 'address', type: 'address' }, + { name: 'price', internalType: 'int256', type: 'int256' }, + { name: 'updatedAt', internalType: 'uint256', type: 'uint256' }, + ], + name: 'ChainlinkFeedReturnedNegativePrice', + }, + { type: 'error', inputs: [], name: 'ChainlinkInvalidInputLenghts' }, + { + type: 'error', + inputs: [ + { name: 'defaultDate', internalType: 'uint32', type: 'uint32' }, + { name: 'current', internalType: 'uint32', type: 'uint32' }, + ], + name: 'DefaultDateInPast', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'uint256', type: 'uint256' }, + { name: 'expiration', internalType: 'uint256', type: 'uint256' }, + ], + name: 'Expired', + }, + { + type: 'error', + inputs: [ + { name: 'timeSinceUp', internalType: 'uint256', type: 'uint256' }, + { name: 'gracePeriod', internalType: 'uint256', type: 'uint256' }, + ], + name: 'GracePeriodNotOver', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'uint256', type: 'uint256' }, + { name: 'limit', internalType: 'uint256', type: 'uint256' }, + ], + name: 'InsufficientCreditAmount', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'uint256', type: 'uint256' }, + { name: 'limit', internalType: 'uint256', type: 'uint256' }, + ], + name: 'IntermediaryDenominationsOutOfBounds', + }, + { + type: 'error', + inputs: [ + { name: 'acceptorController', internalType: 'address', type: 'address' }, + ], + name: 'InvalidAcceptorController', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'bytes32', type: 'bytes32' }, + { name: 'proposed', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'InvalidCollateralStateFingerprint', + }, + { + type: 'error', + inputs: [ + { name: 'refinancingLoanId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'InvalidRefinancingLoanId', + }, + { + type: 'error', + inputs: [ + { name: 'signer', internalType: 'address', type: 'address' }, + { name: 'digest', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'InvalidSignature', + }, + { + type: 'error', + inputs: [{ name: 'length', internalType: 'uint256', type: 'uint256' }], + name: 'InvalidSignatureLength', + }, + { type: 'error', inputs: [], name: 'L2SequencerDown' }, + { type: 'error', inputs: [], name: 'MinCreditAmountNotSet' }, + { type: 'error', inputs: [], name: 'MissingStateFingerprintComputer' }, + { + type: 'error', + inputs: [ + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + name: 'NonceNotUsable', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // PWNSimpleLoanElasticProposal ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const pwnSimpleLoanElasticProposalAbi = [ - { - type: "constructor", - inputs: [ - { name: "_hub", internalType: "address", type: "address" }, - { name: "_revokedNonce", internalType: "address", type: "address" }, - { name: "_config", internalType: "address", type: "address" }, - { name: "_utilizedCredit", internalType: "address", type: "address" }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "CREDIT_PER_COLLATERAL_UNIT_DENOMINATOR", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "DOMAIN_SEPARATOR", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "MULTIPROPOSAL_DOMAIN_SEPARATOR", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "MULTIPROPOSAL_TYPEHASH", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "PROPOSAL_TYPEHASH", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "VERSION", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "acceptor", internalType: "address", type: "address" }, - { name: "refinancingLoanId", internalType: "uint256", type: "uint256" }, - { name: "proposalData", internalType: "bytes", type: "bytes" }, - { - name: "proposalInclusionProof", - internalType: "bytes32[]", - type: "bytes32[]", - }, - { name: "signature", internalType: "bytes", type: "bytes" }, - ], - name: "acceptProposal", - outputs: [ - { name: "proposalHash", internalType: "bytes32", type: "bytes32" }, - { - name: "loanTerms", - internalType: "struct PWNSimpleLoan.Terms", - type: "tuple", - components: [ - { name: "lender", internalType: "address", type: "address" }, - { name: "borrower", internalType: "address", type: "address" }, - { name: "duration", internalType: "uint32", type: "uint32" }, - { - name: "collateral", - internalType: "struct MultiToken.Asset", - type: "tuple", - components: [ - { - name: "category", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "assetAddress", - internalType: "address", - type: "address", - }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - }, - { - name: "credit", - internalType: "struct MultiToken.Asset", - type: "tuple", - components: [ - { - name: "category", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "assetAddress", - internalType: "address", - type: "address", - }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "lenderSpecHash", internalType: "bytes32", type: "bytes32" }, - { - name: "borrowerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - ], - }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "config", - outputs: [ - { name: "", internalType: "contract PWNConfig", type: "address" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "proposalData", internalType: "bytes", type: "bytes" }], - name: "decodeProposalData", - outputs: [ - { - name: "", - internalType: "struct PWNSimpleLoanElasticProposal.Proposal", - type: "tuple", - components: [ - { - name: "collateralCategory", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "collateralAddress", - internalType: "address", - type: "address", - }, - { name: "collateralId", internalType: "uint256", type: "uint256" }, - { - name: "checkCollateralStateFingerprint", - internalType: "bool", - type: "bool", - }, - { - name: "collateralStateFingerprint", - internalType: "bytes32", - type: "bytes32", - }, - { name: "creditAddress", internalType: "address", type: "address" }, - { - name: "creditPerCollateralUnit", - internalType: "uint256", - type: "uint256", - }, - { name: "minCreditAmount", internalType: "uint256", type: "uint256" }, - { - name: "availableCreditLimit", - internalType: "uint256", - type: "uint256", - }, - { - name: "utilizedCreditId", - internalType: "bytes32", - type: "bytes32", - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "durationOrDate", internalType: "uint32", type: "uint32" }, - { name: "expiration", internalType: "uint40", type: "uint40" }, - { name: "allowedAcceptor", internalType: "address", type: "address" }, - { name: "proposer", internalType: "address", type: "address" }, - { - name: "proposerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "isOffer", internalType: "bool", type: "bool" }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - }, - { - name: "", - internalType: "struct PWNSimpleLoanElasticProposal.ProposalValues", - type: "tuple", - components: [ - { name: "creditAmount", internalType: "uint256", type: "uint256" }, - ], - }, - ], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { - name: "proposal", - internalType: "struct PWNSimpleLoanElasticProposal.Proposal", - type: "tuple", - components: [ - { - name: "collateralCategory", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "collateralAddress", - internalType: "address", - type: "address", - }, - { name: "collateralId", internalType: "uint256", type: "uint256" }, - { - name: "checkCollateralStateFingerprint", - internalType: "bool", - type: "bool", - }, - { - name: "collateralStateFingerprint", - internalType: "bytes32", - type: "bytes32", - }, - { name: "creditAddress", internalType: "address", type: "address" }, - { - name: "creditPerCollateralUnit", - internalType: "uint256", - type: "uint256", - }, - { name: "minCreditAmount", internalType: "uint256", type: "uint256" }, - { - name: "availableCreditLimit", - internalType: "uint256", - type: "uint256", - }, - { - name: "utilizedCreditId", - internalType: "bytes32", - type: "bytes32", - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "durationOrDate", internalType: "uint32", type: "uint32" }, - { name: "expiration", internalType: "uint40", type: "uint40" }, - { name: "allowedAcceptor", internalType: "address", type: "address" }, - { name: "proposer", internalType: "address", type: "address" }, - { - name: "proposerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "isOffer", internalType: "bool", type: "bool" }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - }, - { - name: "proposalValues", - internalType: "struct PWNSimpleLoanElasticProposal.ProposalValues", - type: "tuple", - components: [ - { name: "creditAmount", internalType: "uint256", type: "uint256" }, - ], - }, - ], - name: "encodeProposalData", - outputs: [{ name: "", internalType: "bytes", type: "bytes" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "creditAmount", internalType: "uint256", type: "uint256" }, - { - name: "creditPerCollateralUnit", - internalType: "uint256", - type: "uint256", - }, - ], - name: "getCollateralAmount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { - name: "multiproposal", - internalType: "struct PWNSimpleLoanProposal.Multiproposal", - type: "tuple", - components: [ - { - name: "multiproposalMerkleRoot", - internalType: "bytes32", - type: "bytes32", - }, - ], - }, - ], - name: "getMultiproposalHash", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "proposal", - internalType: "struct PWNSimpleLoanElasticProposal.Proposal", - type: "tuple", - components: [ - { - name: "collateralCategory", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "collateralAddress", - internalType: "address", - type: "address", - }, - { name: "collateralId", internalType: "uint256", type: "uint256" }, - { - name: "checkCollateralStateFingerprint", - internalType: "bool", - type: "bool", - }, - { - name: "collateralStateFingerprint", - internalType: "bytes32", - type: "bytes32", - }, - { name: "creditAddress", internalType: "address", type: "address" }, - { - name: "creditPerCollateralUnit", - internalType: "uint256", - type: "uint256", - }, - { name: "minCreditAmount", internalType: "uint256", type: "uint256" }, - { - name: "availableCreditLimit", - internalType: "uint256", - type: "uint256", - }, - { - name: "utilizedCreditId", - internalType: "bytes32", - type: "bytes32", - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "durationOrDate", internalType: "uint32", type: "uint32" }, - { name: "expiration", internalType: "uint40", type: "uint40" }, - { name: "allowedAcceptor", internalType: "address", type: "address" }, - { name: "proposer", internalType: "address", type: "address" }, - { - name: "proposerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "isOffer", internalType: "bool", type: "bool" }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - }, - ], - name: "getProposalHash", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "hub", - outputs: [{ name: "", internalType: "contract PWNHub", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "proposal", - internalType: "struct PWNSimpleLoanElasticProposal.Proposal", - type: "tuple", - components: [ - { - name: "collateralCategory", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "collateralAddress", - internalType: "address", - type: "address", - }, - { name: "collateralId", internalType: "uint256", type: "uint256" }, - { - name: "checkCollateralStateFingerprint", - internalType: "bool", - type: "bool", - }, - { - name: "collateralStateFingerprint", - internalType: "bytes32", - type: "bytes32", - }, - { name: "creditAddress", internalType: "address", type: "address" }, - { - name: "creditPerCollateralUnit", - internalType: "uint256", - type: "uint256", - }, - { name: "minCreditAmount", internalType: "uint256", type: "uint256" }, - { - name: "availableCreditLimit", - internalType: "uint256", - type: "uint256", - }, - { - name: "utilizedCreditId", - internalType: "bytes32", - type: "bytes32", - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "durationOrDate", internalType: "uint32", type: "uint32" }, - { name: "expiration", internalType: "uint40", type: "uint40" }, - { name: "allowedAcceptor", internalType: "address", type: "address" }, - { name: "proposer", internalType: "address", type: "address" }, - { - name: "proposerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "isOffer", internalType: "bool", type: "bool" }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - }, - ], - name: "makeProposal", - outputs: [ - { name: "proposalHash", internalType: "bytes32", type: "bytes32" }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - name: "proposalsMade", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - ], - name: "revokeNonce", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "revokedNonce", - outputs: [ - { name: "", internalType: "contract PWNRevokedNonce", type: "address" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "utilizedCredit", - outputs: [ - { name: "", internalType: "contract PWNUtilizedCredit", type: "address" }, - ], - stateMutability: "view", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "proposalHash", - internalType: "bytes32", - type: "bytes32", - indexed: true, - }, - { - name: "proposer", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "proposal", - internalType: "struct PWNSimpleLoanElasticProposal.Proposal", - type: "tuple", - components: [ - { - name: "collateralCategory", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "collateralAddress", - internalType: "address", - type: "address", - }, - { name: "collateralId", internalType: "uint256", type: "uint256" }, - { - name: "checkCollateralStateFingerprint", - internalType: "bool", - type: "bool", - }, - { - name: "collateralStateFingerprint", - internalType: "bytes32", - type: "bytes32", - }, - { name: "creditAddress", internalType: "address", type: "address" }, - { - name: "creditPerCollateralUnit", - internalType: "uint256", - type: "uint256", - }, - { name: "minCreditAmount", internalType: "uint256", type: "uint256" }, - { - name: "availableCreditLimit", - internalType: "uint256", - type: "uint256", - }, - { - name: "utilizedCreditId", - internalType: "bytes32", - type: "bytes32", - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "durationOrDate", internalType: "uint32", type: "uint32" }, - { name: "expiration", internalType: "uint40", type: "uint40" }, - { name: "allowedAcceptor", internalType: "address", type: "address" }, - { name: "proposer", internalType: "address", type: "address" }, - { - name: "proposerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "isOffer", internalType: "bool", type: "bool" }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - indexed: false, - }, - ], - name: "ProposalMade", - }, - { - type: "error", - inputs: [{ name: "addr", internalType: "address", type: "address" }], - name: "AcceptorIsProposer", - }, - { - type: "error", - inputs: [ - { name: "addr", internalType: "address", type: "address" }, - { name: "tag", internalType: "bytes32", type: "bytes32" }, - ], - name: "AddressMissingHubTag", - }, - { - type: "error", - inputs: [{ name: "addr", internalType: "address", type: "address" }], - name: "CallerIsNotStatedProposer", - }, - { - type: "error", - inputs: [ - { name: "current", internalType: "address", type: "address" }, - { name: "allowed", internalType: "address", type: "address" }, - ], - name: "CallerNotAllowedAcceptor", - }, - { - type: "error", - inputs: [ - { name: "caller", internalType: "address", type: "address" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - name: "CallerNotLoanContract", - }, - { - type: "error", - inputs: [ - { name: "defaultDate", internalType: "uint32", type: "uint32" }, - { name: "current", internalType: "uint32", type: "uint32" }, - ], - name: "DefaultDateInPast", - }, - { - type: "error", - inputs: [ - { name: "current", internalType: "uint256", type: "uint256" }, - { name: "expiration", internalType: "uint256", type: "uint256" }, - ], - name: "Expired", - }, - { - type: "error", - inputs: [ - { name: "current", internalType: "uint256", type: "uint256" }, - { name: "limit", internalType: "uint256", type: "uint256" }, - ], - name: "InsufficientCreditAmount", - }, - { - type: "error", - inputs: [ - { name: "current", internalType: "bytes32", type: "bytes32" }, - { name: "proposed", internalType: "bytes32", type: "bytes32" }, - ], - name: "InvalidCollateralStateFingerprint", - }, - { - type: "error", - inputs: [ - { name: "refinancingLoanId", internalType: "uint256", type: "uint256" }, - ], - name: "InvalidRefinancingLoanId", - }, - { - type: "error", - inputs: [ - { name: "signer", internalType: "address", type: "address" }, - { name: "digest", internalType: "bytes32", type: "bytes32" }, - ], - name: "InvalidSignature", - }, - { - type: "error", - inputs: [{ name: "length", internalType: "uint256", type: "uint256" }], - name: "InvalidSignatureLength", - }, - { type: "error", inputs: [], name: "MinCreditAmountNotSet" }, - { type: "error", inputs: [], name: "MissingStateFingerprintComputer" }, - { - type: "error", - inputs: [ - { name: "addr", internalType: "address", type: "address" }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - ], - name: "NonceNotUsable", - }, - { type: "error", inputs: [], name: "ZeroCreditPerCollateralUnit" }, -] as const; + { + type: 'constructor', + inputs: [ + { name: '_hub', internalType: 'address', type: 'address' }, + { name: '_revokedNonce', internalType: 'address', type: 'address' }, + { name: '_config', internalType: 'address', type: 'address' }, + { name: '_utilizedCredit', internalType: 'address', type: 'address' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'CREDIT_PER_COLLATERAL_UNIT_DENOMINATOR', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'DOMAIN_SEPARATOR', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MULTIPROPOSAL_DOMAIN_SEPARATOR', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MULTIPROPOSAL_TYPEHASH', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'PROPOSAL_TYPEHASH', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'VERSION', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'acceptor', internalType: 'address', type: 'address' }, + { name: 'refinancingLoanId', internalType: 'uint256', type: 'uint256' }, + { name: 'proposalData', internalType: 'bytes', type: 'bytes' }, + { + name: 'proposalInclusionProof', + internalType: 'bytes32[]', + type: 'bytes32[]', + }, + { name: 'signature', internalType: 'bytes', type: 'bytes' }, + ], + name: 'acceptProposal', + outputs: [ + { name: 'proposalHash', internalType: 'bytes32', type: 'bytes32' }, + { + name: 'loanTerms', + internalType: 'struct PWNSimpleLoan.Terms', + type: 'tuple', + components: [ + { name: 'lender', internalType: 'address', type: 'address' }, + { name: 'borrower', internalType: 'address', type: 'address' }, + { name: 'duration', internalType: 'uint32', type: 'uint32' }, + { + name: 'collateral', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'assetAddress', + internalType: 'address', + type: 'address', + }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + }, + { + name: 'credit', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'assetAddress', + internalType: 'address', + type: 'address', + }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'lenderSpecHash', internalType: 'bytes32', type: 'bytes32' }, + { + name: 'borrowerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + ], + }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'config', + outputs: [ + { name: '', internalType: 'contract PWNConfig', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'proposalData', internalType: 'bytes', type: 'bytes' }], + name: 'decodeProposalData', + outputs: [ + { + name: '', + internalType: 'struct PWNSimpleLoanElasticProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'creditPerCollateralUnit', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + { + name: '', + internalType: 'struct PWNSimpleLoanElasticProposal.ProposalValues', + type: 'tuple', + components: [ + { name: 'creditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + ], + }, + ], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanElasticProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'creditPerCollateralUnit', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + { + name: 'proposalValues', + internalType: 'struct PWNSimpleLoanElasticProposal.ProposalValues', + type: 'tuple', + components: [ + { name: 'creditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + ], + }, + ], + name: 'encodeProposalData', + outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { name: 'creditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'creditPerCollateralUnit', + internalType: 'uint256', + type: 'uint256', + }, + ], + name: 'getCollateralAmount', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { + name: 'multiproposal', + internalType: 'struct PWNSimpleLoanProposal.Multiproposal', + type: 'tuple', + components: [ + { + name: 'multiproposalMerkleRoot', + internalType: 'bytes32', + type: 'bytes32', + }, + ], + }, + ], + name: 'getMultiproposalHash', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanElasticProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'creditPerCollateralUnit', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + ], + name: 'getProposalHash', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'hub', + outputs: [{ name: '', internalType: 'contract PWNHub', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanElasticProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'creditPerCollateralUnit', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + ], + name: 'makeProposal', + outputs: [ + { name: 'proposalHash', internalType: 'bytes32', type: 'bytes32' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + name: 'proposalsMade', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + name: 'revokeNonce', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'revokedNonce', + outputs: [ + { name: '', internalType: 'contract PWNRevokedNonce', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'utilizedCredit', + outputs: [ + { name: '', internalType: 'contract PWNUtilizedCredit', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'proposalHash', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + { + name: 'proposer', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanElasticProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'creditPerCollateralUnit', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + indexed: false, + }, + ], + name: 'ProposalMade', + }, + { + type: 'error', + inputs: [{ name: 'addr', internalType: 'address', type: 'address' }], + name: 'AcceptorIsProposer', + }, + { + type: 'error', + inputs: [ + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'tag', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'AddressMissingHubTag', + }, + { + type: 'error', + inputs: [{ name: 'addr', internalType: 'address', type: 'address' }], + name: 'CallerIsNotStatedProposer', + }, + { + type: 'error', + inputs: [ + { name: 'caller', internalType: 'address', type: 'address' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + name: 'CallerNotLoanContract', + }, + { + type: 'error', + inputs: [ + { name: 'defaultDate', internalType: 'uint32', type: 'uint32' }, + { name: 'current', internalType: 'uint32', type: 'uint32' }, + ], + name: 'DefaultDateInPast', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'uint256', type: 'uint256' }, + { name: 'expiration', internalType: 'uint256', type: 'uint256' }, + ], + name: 'Expired', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'uint256', type: 'uint256' }, + { name: 'limit', internalType: 'uint256', type: 'uint256' }, + ], + name: 'InsufficientCreditAmount', + }, + { + type: 'error', + inputs: [ + { name: 'acceptorController', internalType: 'address', type: 'address' }, + ], + name: 'InvalidAcceptorController', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'bytes32', type: 'bytes32' }, + { name: 'proposed', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'InvalidCollateralStateFingerprint', + }, + { + type: 'error', + inputs: [ + { name: 'refinancingLoanId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'InvalidRefinancingLoanId', + }, + { + type: 'error', + inputs: [ + { name: 'signer', internalType: 'address', type: 'address' }, + { name: 'digest', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'InvalidSignature', + }, + { + type: 'error', + inputs: [{ name: 'length', internalType: 'uint256', type: 'uint256' }], + name: 'InvalidSignatureLength', + }, + { type: 'error', inputs: [], name: 'MinCreditAmountNotSet' }, + { type: 'error', inputs: [], name: 'MissingStateFingerprintComputer' }, + { + type: 'error', + inputs: [ + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + name: 'NonceNotUsable', + }, + { type: 'error', inputs: [], name: 'ZeroCreditPerCollateralUnit' }, +] as const + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// PWNSimpleLoanElasticProposalHarness +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const pwnSimpleLoanElasticProposalHarnessAbi = [ + { + type: 'constructor', + inputs: [ + { name: '_hub', internalType: 'address', type: 'address' }, + { name: '_revokedNonce', internalType: 'address', type: 'address' }, + { name: '_config', internalType: 'address', type: 'address' }, + { name: '_utilizedCredit', internalType: 'address', type: 'address' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'CREDIT_PER_COLLATERAL_UNIT_DENOMINATOR', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'DOMAIN_SEPARATOR', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MULTIPROPOSAL_DOMAIN_SEPARATOR', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MULTIPROPOSAL_TYPEHASH', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'PROPOSAL_TYPEHASH', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'VERSION', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'acceptor', internalType: 'address', type: 'address' }, + { name: 'refinancingLoanId', internalType: 'uint256', type: 'uint256' }, + { name: 'proposalData', internalType: 'bytes', type: 'bytes' }, + { + name: 'proposalInclusionProof', + internalType: 'bytes32[]', + type: 'bytes32[]', + }, + { name: 'signature', internalType: 'bytes', type: 'bytes' }, + ], + name: 'acceptProposal', + outputs: [ + { name: 'proposalHash', internalType: 'bytes32', type: 'bytes32' }, + { + name: 'loanTerms', + internalType: 'struct PWNSimpleLoan.Terms', + type: 'tuple', + components: [ + { name: 'lender', internalType: 'address', type: 'address' }, + { name: 'borrower', internalType: 'address', type: 'address' }, + { name: 'duration', internalType: 'uint32', type: 'uint32' }, + { + name: 'collateral', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'assetAddress', + internalType: 'address', + type: 'address', + }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + }, + { + name: 'credit', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'assetAddress', + internalType: 'address', + type: 'address', + }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'lenderSpecHash', internalType: 'bytes32', type: 'bytes32' }, + { + name: 'borrowerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + ], + }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'config', + outputs: [ + { name: '', internalType: 'contract PWNConfig', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'proposalData', internalType: 'bytes', type: 'bytes' }], + name: 'decodeProposalData', + outputs: [ + { + name: '', + internalType: 'struct PWNSimpleLoanElasticProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'creditPerCollateralUnit', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + { + name: '', + internalType: 'struct PWNSimpleLoanElasticProposal.ProposalValues', + type: 'tuple', + components: [ + { name: 'creditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + ], + }, + ], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanElasticProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'creditPerCollateralUnit', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + { + name: 'proposalValues', + internalType: 'struct PWNSimpleLoanElasticProposal.ProposalValues', + type: 'tuple', + components: [ + { name: 'creditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + ], + }, + ], + name: 'encodeProposalData', + outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanElasticProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'creditPerCollateralUnit', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + ], + name: 'exposed_erc712EncodeProposal', + outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { name: 'creditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'creditPerCollateralUnit', + internalType: 'uint256', + type: 'uint256', + }, + ], + name: 'getCollateralAmount', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { + name: 'multiproposal', + internalType: 'struct PWNSimpleLoanProposal.Multiproposal', + type: 'tuple', + components: [ + { + name: 'multiproposalMerkleRoot', + internalType: 'bytes32', + type: 'bytes32', + }, + ], + }, + ], + name: 'getMultiproposalHash', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanElasticProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'creditPerCollateralUnit', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + ], + name: 'getProposalHash', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'hub', + outputs: [{ name: '', internalType: 'contract PWNHub', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanElasticProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'creditPerCollateralUnit', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + ], + name: 'makeProposal', + outputs: [ + { name: 'proposalHash', internalType: 'bytes32', type: 'bytes32' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + name: 'proposalsMade', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + name: 'revokeNonce', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'revokedNonce', + outputs: [ + { name: '', internalType: 'contract PWNRevokedNonce', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'utilizedCredit', + outputs: [ + { name: '', internalType: 'contract PWNUtilizedCredit', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'proposalHash', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + { + name: 'proposer', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanElasticProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'creditPerCollateralUnit', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + indexed: false, + }, + ], + name: 'ProposalMade', + }, + { + type: 'error', + inputs: [{ name: 'addr', internalType: 'address', type: 'address' }], + name: 'AcceptorIsProposer', + }, + { + type: 'error', + inputs: [ + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'tag', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'AddressMissingHubTag', + }, + { + type: 'error', + inputs: [{ name: 'addr', internalType: 'address', type: 'address' }], + name: 'CallerIsNotStatedProposer', + }, + { + type: 'error', + inputs: [ + { name: 'caller', internalType: 'address', type: 'address' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + name: 'CallerNotLoanContract', + }, + { + type: 'error', + inputs: [ + { name: 'defaultDate', internalType: 'uint32', type: 'uint32' }, + { name: 'current', internalType: 'uint32', type: 'uint32' }, + ], + name: 'DefaultDateInPast', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'uint256', type: 'uint256' }, + { name: 'expiration', internalType: 'uint256', type: 'uint256' }, + ], + name: 'Expired', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'uint256', type: 'uint256' }, + { name: 'limit', internalType: 'uint256', type: 'uint256' }, + ], + name: 'InsufficientCreditAmount', + }, + { + type: 'error', + inputs: [ + { name: 'acceptorController', internalType: 'address', type: 'address' }, + ], + name: 'InvalidAcceptorController', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'bytes32', type: 'bytes32' }, + { name: 'proposed', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'InvalidCollateralStateFingerprint', + }, + { + type: 'error', + inputs: [ + { name: 'refinancingLoanId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'InvalidRefinancingLoanId', + }, + { + type: 'error', + inputs: [ + { name: 'signer', internalType: 'address', type: 'address' }, + { name: 'digest', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'InvalidSignature', + }, + { + type: 'error', + inputs: [{ name: 'length', internalType: 'uint256', type: 'uint256' }], + name: 'InvalidSignatureLength', + }, + { type: 'error', inputs: [], name: 'MinCreditAmountNotSet' }, + { type: 'error', inputs: [], name: 'MissingStateFingerprintComputer' }, + { + type: 'error', + inputs: [ + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + name: 'NonceNotUsable', + }, + { type: 'error', inputs: [], name: 'ZeroCreditPerCollateralUnit' }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // PWNSimpleLoanListProposal ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const pwnSimpleLoanListProposalAbi = [ - { - type: "constructor", - inputs: [ - { name: "_hub", internalType: "address", type: "address" }, - { name: "_revokedNonce", internalType: "address", type: "address" }, - { name: "_config", internalType: "address", type: "address" }, - { name: "_utilizedCredit", internalType: "address", type: "address" }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "DOMAIN_SEPARATOR", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "MULTIPROPOSAL_DOMAIN_SEPARATOR", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "MULTIPROPOSAL_TYPEHASH", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "PROPOSAL_TYPEHASH", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "VERSION", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "acceptor", internalType: "address", type: "address" }, - { name: "refinancingLoanId", internalType: "uint256", type: "uint256" }, - { name: "proposalData", internalType: "bytes", type: "bytes" }, - { - name: "proposalInclusionProof", - internalType: "bytes32[]", - type: "bytes32[]", - }, - { name: "signature", internalType: "bytes", type: "bytes" }, - ], - name: "acceptProposal", - outputs: [ - { name: "proposalHash", internalType: "bytes32", type: "bytes32" }, - { - name: "loanTerms", - internalType: "struct PWNSimpleLoan.Terms", - type: "tuple", - components: [ - { name: "lender", internalType: "address", type: "address" }, - { name: "borrower", internalType: "address", type: "address" }, - { name: "duration", internalType: "uint32", type: "uint32" }, - { - name: "collateral", - internalType: "struct MultiToken.Asset", - type: "tuple", - components: [ - { - name: "category", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "assetAddress", - internalType: "address", - type: "address", - }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - }, - { - name: "credit", - internalType: "struct MultiToken.Asset", - type: "tuple", - components: [ - { - name: "category", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "assetAddress", - internalType: "address", - type: "address", - }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "lenderSpecHash", internalType: "bytes32", type: "bytes32" }, - { - name: "borrowerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - ], - }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "config", - outputs: [ - { name: "", internalType: "contract PWNConfig", type: "address" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "proposalData", internalType: "bytes", type: "bytes" }], - name: "decodeProposalData", - outputs: [ - { - name: "", - internalType: "struct PWNSimpleLoanListProposal.Proposal", - type: "tuple", - components: [ - { - name: "collateralCategory", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "collateralAddress", - internalType: "address", - type: "address", - }, - { - name: "collateralIdsWhitelistMerkleRoot", - internalType: "bytes32", - type: "bytes32", - }, - { - name: "collateralAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "checkCollateralStateFingerprint", - internalType: "bool", - type: "bool", - }, - { - name: "collateralStateFingerprint", - internalType: "bytes32", - type: "bytes32", - }, - { name: "creditAddress", internalType: "address", type: "address" }, - { name: "creditAmount", internalType: "uint256", type: "uint256" }, - { - name: "availableCreditLimit", - internalType: "uint256", - type: "uint256", - }, - { - name: "utilizedCreditId", - internalType: "bytes32", - type: "bytes32", - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "durationOrDate", internalType: "uint32", type: "uint32" }, - { name: "expiration", internalType: "uint40", type: "uint40" }, - { name: "allowedAcceptor", internalType: "address", type: "address" }, - { name: "proposer", internalType: "address", type: "address" }, - { - name: "proposerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "isOffer", internalType: "bool", type: "bool" }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - }, - { - name: "", - internalType: "struct PWNSimpleLoanListProposal.ProposalValues", - type: "tuple", - components: [ - { name: "collateralId", internalType: "uint256", type: "uint256" }, - { - name: "merkleInclusionProof", - internalType: "bytes32[]", - type: "bytes32[]", - }, - ], - }, - ], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { - name: "proposal", - internalType: "struct PWNSimpleLoanListProposal.Proposal", - type: "tuple", - components: [ - { - name: "collateralCategory", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "collateralAddress", - internalType: "address", - type: "address", - }, - { - name: "collateralIdsWhitelistMerkleRoot", - internalType: "bytes32", - type: "bytes32", - }, - { - name: "collateralAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "checkCollateralStateFingerprint", - internalType: "bool", - type: "bool", - }, - { - name: "collateralStateFingerprint", - internalType: "bytes32", - type: "bytes32", - }, - { name: "creditAddress", internalType: "address", type: "address" }, - { name: "creditAmount", internalType: "uint256", type: "uint256" }, - { - name: "availableCreditLimit", - internalType: "uint256", - type: "uint256", - }, - { - name: "utilizedCreditId", - internalType: "bytes32", - type: "bytes32", - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "durationOrDate", internalType: "uint32", type: "uint32" }, - { name: "expiration", internalType: "uint40", type: "uint40" }, - { name: "allowedAcceptor", internalType: "address", type: "address" }, - { name: "proposer", internalType: "address", type: "address" }, - { - name: "proposerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "isOffer", internalType: "bool", type: "bool" }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - }, - { - name: "proposalValues", - internalType: "struct PWNSimpleLoanListProposal.ProposalValues", - type: "tuple", - components: [ - { name: "collateralId", internalType: "uint256", type: "uint256" }, - { - name: "merkleInclusionProof", - internalType: "bytes32[]", - type: "bytes32[]", - }, - ], - }, - ], - name: "encodeProposalData", - outputs: [{ name: "", internalType: "bytes", type: "bytes" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { - name: "multiproposal", - internalType: "struct PWNSimpleLoanProposal.Multiproposal", - type: "tuple", - components: [ - { - name: "multiproposalMerkleRoot", - internalType: "bytes32", - type: "bytes32", - }, - ], - }, - ], - name: "getMultiproposalHash", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "proposal", - internalType: "struct PWNSimpleLoanListProposal.Proposal", - type: "tuple", - components: [ - { - name: "collateralCategory", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "collateralAddress", - internalType: "address", - type: "address", - }, - { - name: "collateralIdsWhitelistMerkleRoot", - internalType: "bytes32", - type: "bytes32", - }, - { - name: "collateralAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "checkCollateralStateFingerprint", - internalType: "bool", - type: "bool", - }, - { - name: "collateralStateFingerprint", - internalType: "bytes32", - type: "bytes32", - }, - { name: "creditAddress", internalType: "address", type: "address" }, - { name: "creditAmount", internalType: "uint256", type: "uint256" }, - { - name: "availableCreditLimit", - internalType: "uint256", - type: "uint256", - }, - { - name: "utilizedCreditId", - internalType: "bytes32", - type: "bytes32", - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "durationOrDate", internalType: "uint32", type: "uint32" }, - { name: "expiration", internalType: "uint40", type: "uint40" }, - { name: "allowedAcceptor", internalType: "address", type: "address" }, - { name: "proposer", internalType: "address", type: "address" }, - { - name: "proposerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "isOffer", internalType: "bool", type: "bool" }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - }, - ], - name: "getProposalHash", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "hub", - outputs: [{ name: "", internalType: "contract PWNHub", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "proposal", - internalType: "struct PWNSimpleLoanListProposal.Proposal", - type: "tuple", - components: [ - { - name: "collateralCategory", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "collateralAddress", - internalType: "address", - type: "address", - }, - { - name: "collateralIdsWhitelistMerkleRoot", - internalType: "bytes32", - type: "bytes32", - }, - { - name: "collateralAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "checkCollateralStateFingerprint", - internalType: "bool", - type: "bool", - }, - { - name: "collateralStateFingerprint", - internalType: "bytes32", - type: "bytes32", - }, - { name: "creditAddress", internalType: "address", type: "address" }, - { name: "creditAmount", internalType: "uint256", type: "uint256" }, - { - name: "availableCreditLimit", - internalType: "uint256", - type: "uint256", - }, - { - name: "utilizedCreditId", - internalType: "bytes32", - type: "bytes32", - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "durationOrDate", internalType: "uint32", type: "uint32" }, - { name: "expiration", internalType: "uint40", type: "uint40" }, - { name: "allowedAcceptor", internalType: "address", type: "address" }, - { name: "proposer", internalType: "address", type: "address" }, - { - name: "proposerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "isOffer", internalType: "bool", type: "bool" }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - }, - ], - name: "makeProposal", - outputs: [ - { name: "proposalHash", internalType: "bytes32", type: "bytes32" }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - name: "proposalsMade", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - ], - name: "revokeNonce", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "revokedNonce", - outputs: [ - { name: "", internalType: "contract PWNRevokedNonce", type: "address" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "utilizedCredit", - outputs: [ - { name: "", internalType: "contract PWNUtilizedCredit", type: "address" }, - ], - stateMutability: "view", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "proposalHash", - internalType: "bytes32", - type: "bytes32", - indexed: true, - }, - { - name: "proposer", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "proposal", - internalType: "struct PWNSimpleLoanListProposal.Proposal", - type: "tuple", - components: [ - { - name: "collateralCategory", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "collateralAddress", - internalType: "address", - type: "address", - }, - { - name: "collateralIdsWhitelistMerkleRoot", - internalType: "bytes32", - type: "bytes32", - }, - { - name: "collateralAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "checkCollateralStateFingerprint", - internalType: "bool", - type: "bool", - }, - { - name: "collateralStateFingerprint", - internalType: "bytes32", - type: "bytes32", - }, - { name: "creditAddress", internalType: "address", type: "address" }, - { name: "creditAmount", internalType: "uint256", type: "uint256" }, - { - name: "availableCreditLimit", - internalType: "uint256", - type: "uint256", - }, - { - name: "utilizedCreditId", - internalType: "bytes32", - type: "bytes32", - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "durationOrDate", internalType: "uint32", type: "uint32" }, - { name: "expiration", internalType: "uint40", type: "uint40" }, - { name: "allowedAcceptor", internalType: "address", type: "address" }, - { name: "proposer", internalType: "address", type: "address" }, - { - name: "proposerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "isOffer", internalType: "bool", type: "bool" }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - indexed: false, - }, - ], - name: "ProposalMade", - }, - { - type: "error", - inputs: [{ name: "addr", internalType: "address", type: "address" }], - name: "AcceptorIsProposer", - }, - { - type: "error", - inputs: [ - { name: "addr", internalType: "address", type: "address" }, - { name: "tag", internalType: "bytes32", type: "bytes32" }, - ], - name: "AddressMissingHubTag", - }, - { - type: "error", - inputs: [{ name: "addr", internalType: "address", type: "address" }], - name: "CallerIsNotStatedProposer", - }, - { - type: "error", - inputs: [ - { name: "current", internalType: "address", type: "address" }, - { name: "allowed", internalType: "address", type: "address" }, - ], - name: "CallerNotAllowedAcceptor", - }, - { - type: "error", - inputs: [ - { name: "caller", internalType: "address", type: "address" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - name: "CallerNotLoanContract", - }, - { - type: "error", - inputs: [{ name: "id", internalType: "uint256", type: "uint256" }], - name: "CollateralIdNotWhitelisted", - }, - { - type: "error", - inputs: [ - { name: "defaultDate", internalType: "uint32", type: "uint32" }, - { name: "current", internalType: "uint32", type: "uint32" }, - ], - name: "DefaultDateInPast", - }, - { - type: "error", - inputs: [ - { name: "current", internalType: "uint256", type: "uint256" }, - { name: "expiration", internalType: "uint256", type: "uint256" }, - ], - name: "Expired", - }, - { - type: "error", - inputs: [ - { name: "current", internalType: "bytes32", type: "bytes32" }, - { name: "proposed", internalType: "bytes32", type: "bytes32" }, - ], - name: "InvalidCollateralStateFingerprint", - }, - { - type: "error", - inputs: [ - { name: "refinancingLoanId", internalType: "uint256", type: "uint256" }, - ], - name: "InvalidRefinancingLoanId", - }, - { - type: "error", - inputs: [ - { name: "signer", internalType: "address", type: "address" }, - { name: "digest", internalType: "bytes32", type: "bytes32" }, - ], - name: "InvalidSignature", - }, - { - type: "error", - inputs: [{ name: "length", internalType: "uint256", type: "uint256" }], - name: "InvalidSignatureLength", - }, - { type: "error", inputs: [], name: "MissingStateFingerprintComputer" }, - { - type: "error", - inputs: [ - { name: "addr", internalType: "address", type: "address" }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - ], - name: "NonceNotUsable", - }, -] as const; + { + type: 'constructor', + inputs: [ + { name: '_hub', internalType: 'address', type: 'address' }, + { name: '_revokedNonce', internalType: 'address', type: 'address' }, + { name: '_config', internalType: 'address', type: 'address' }, + { name: '_utilizedCredit', internalType: 'address', type: 'address' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'DOMAIN_SEPARATOR', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MULTIPROPOSAL_DOMAIN_SEPARATOR', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MULTIPROPOSAL_TYPEHASH', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'PROPOSAL_TYPEHASH', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'VERSION', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'acceptor', internalType: 'address', type: 'address' }, + { name: 'refinancingLoanId', internalType: 'uint256', type: 'uint256' }, + { name: 'proposalData', internalType: 'bytes', type: 'bytes' }, + { + name: 'proposalInclusionProof', + internalType: 'bytes32[]', + type: 'bytes32[]', + }, + { name: 'signature', internalType: 'bytes', type: 'bytes' }, + ], + name: 'acceptProposal', + outputs: [ + { name: 'proposalHash', internalType: 'bytes32', type: 'bytes32' }, + { + name: 'loanTerms', + internalType: 'struct PWNSimpleLoan.Terms', + type: 'tuple', + components: [ + { name: 'lender', internalType: 'address', type: 'address' }, + { name: 'borrower', internalType: 'address', type: 'address' }, + { name: 'duration', internalType: 'uint32', type: 'uint32' }, + { + name: 'collateral', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'assetAddress', + internalType: 'address', + type: 'address', + }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + }, + { + name: 'credit', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'assetAddress', + internalType: 'address', + type: 'address', + }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'lenderSpecHash', internalType: 'bytes32', type: 'bytes32' }, + { + name: 'borrowerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + ], + }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'config', + outputs: [ + { name: '', internalType: 'contract PWNConfig', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'proposalData', internalType: 'bytes', type: 'bytes' }], + name: 'decodeProposalData', + outputs: [ + { + name: '', + internalType: 'struct PWNSimpleLoanListProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { + name: 'collateralIdsWhitelistMerkleRoot', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'collateralAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'creditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + { + name: '', + internalType: 'struct PWNSimpleLoanListProposal.ProposalValues', + type: 'tuple', + components: [ + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'merkleInclusionProof', + internalType: 'bytes32[]', + type: 'bytes32[]', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + ], + }, + ], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanListProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { + name: 'collateralIdsWhitelistMerkleRoot', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'collateralAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'creditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + { + name: 'proposalValues', + internalType: 'struct PWNSimpleLoanListProposal.ProposalValues', + type: 'tuple', + components: [ + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'merkleInclusionProof', + internalType: 'bytes32[]', + type: 'bytes32[]', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + ], + }, + ], + name: 'encodeProposalData', + outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { + name: 'multiproposal', + internalType: 'struct PWNSimpleLoanProposal.Multiproposal', + type: 'tuple', + components: [ + { + name: 'multiproposalMerkleRoot', + internalType: 'bytes32', + type: 'bytes32', + }, + ], + }, + ], + name: 'getMultiproposalHash', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanListProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { + name: 'collateralIdsWhitelistMerkleRoot', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'collateralAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'creditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + ], + name: 'getProposalHash', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'hub', + outputs: [{ name: '', internalType: 'contract PWNHub', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanListProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { + name: 'collateralIdsWhitelistMerkleRoot', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'collateralAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'creditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + ], + name: 'makeProposal', + outputs: [ + { name: 'proposalHash', internalType: 'bytes32', type: 'bytes32' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + name: 'proposalsMade', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + name: 'revokeNonce', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'revokedNonce', + outputs: [ + { name: '', internalType: 'contract PWNRevokedNonce', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'utilizedCredit', + outputs: [ + { name: '', internalType: 'contract PWNUtilizedCredit', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'proposalHash', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + { + name: 'proposer', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanListProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { + name: 'collateralIdsWhitelistMerkleRoot', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'collateralAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'creditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + indexed: false, + }, + ], + name: 'ProposalMade', + }, + { + type: 'error', + inputs: [{ name: 'addr', internalType: 'address', type: 'address' }], + name: 'AcceptorIsProposer', + }, + { + type: 'error', + inputs: [ + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'tag', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'AddressMissingHubTag', + }, + { + type: 'error', + inputs: [{ name: 'addr', internalType: 'address', type: 'address' }], + name: 'CallerIsNotStatedProposer', + }, + { + type: 'error', + inputs: [ + { name: 'caller', internalType: 'address', type: 'address' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + name: 'CallerNotLoanContract', + }, + { + type: 'error', + inputs: [{ name: 'id', internalType: 'uint256', type: 'uint256' }], + name: 'CollateralIdNotWhitelisted', + }, + { + type: 'error', + inputs: [ + { name: 'defaultDate', internalType: 'uint32', type: 'uint32' }, + { name: 'current', internalType: 'uint32', type: 'uint32' }, + ], + name: 'DefaultDateInPast', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'uint256', type: 'uint256' }, + { name: 'expiration', internalType: 'uint256', type: 'uint256' }, + ], + name: 'Expired', + }, + { + type: 'error', + inputs: [ + { name: 'acceptorController', internalType: 'address', type: 'address' }, + ], + name: 'InvalidAcceptorController', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'bytes32', type: 'bytes32' }, + { name: 'proposed', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'InvalidCollateralStateFingerprint', + }, + { + type: 'error', + inputs: [ + { name: 'refinancingLoanId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'InvalidRefinancingLoanId', + }, + { + type: 'error', + inputs: [ + { name: 'signer', internalType: 'address', type: 'address' }, + { name: 'digest', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'InvalidSignature', + }, + { + type: 'error', + inputs: [{ name: 'length', internalType: 'uint256', type: 'uint256' }], + name: 'InvalidSignatureLength', + }, + { type: 'error', inputs: [], name: 'MissingStateFingerprintComputer' }, + { + type: 'error', + inputs: [ + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + name: 'NonceNotUsable', + }, +] as const + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// PWNSimpleLoanListProposalHarness +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const pwnSimpleLoanListProposalHarnessAbi = [ + { + type: 'constructor', + inputs: [ + { name: '_hub', internalType: 'address', type: 'address' }, + { name: '_revokedNonce', internalType: 'address', type: 'address' }, + { name: '_config', internalType: 'address', type: 'address' }, + { name: '_utilizedCredit', internalType: 'address', type: 'address' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'DOMAIN_SEPARATOR', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MULTIPROPOSAL_DOMAIN_SEPARATOR', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MULTIPROPOSAL_TYPEHASH', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'PROPOSAL_TYPEHASH', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'VERSION', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'acceptor', internalType: 'address', type: 'address' }, + { name: 'refinancingLoanId', internalType: 'uint256', type: 'uint256' }, + { name: 'proposalData', internalType: 'bytes', type: 'bytes' }, + { + name: 'proposalInclusionProof', + internalType: 'bytes32[]', + type: 'bytes32[]', + }, + { name: 'signature', internalType: 'bytes', type: 'bytes' }, + ], + name: 'acceptProposal', + outputs: [ + { name: 'proposalHash', internalType: 'bytes32', type: 'bytes32' }, + { + name: 'loanTerms', + internalType: 'struct PWNSimpleLoan.Terms', + type: 'tuple', + components: [ + { name: 'lender', internalType: 'address', type: 'address' }, + { name: 'borrower', internalType: 'address', type: 'address' }, + { name: 'duration', internalType: 'uint32', type: 'uint32' }, + { + name: 'collateral', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'assetAddress', + internalType: 'address', + type: 'address', + }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + }, + { + name: 'credit', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'assetAddress', + internalType: 'address', + type: 'address', + }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'lenderSpecHash', internalType: 'bytes32', type: 'bytes32' }, + { + name: 'borrowerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + ], + }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'config', + outputs: [ + { name: '', internalType: 'contract PWNConfig', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'proposalData', internalType: 'bytes', type: 'bytes' }], + name: 'decodeProposalData', + outputs: [ + { + name: '', + internalType: 'struct PWNSimpleLoanListProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { + name: 'collateralIdsWhitelistMerkleRoot', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'collateralAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'creditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + { + name: '', + internalType: 'struct PWNSimpleLoanListProposal.ProposalValues', + type: 'tuple', + components: [ + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'merkleInclusionProof', + internalType: 'bytes32[]', + type: 'bytes32[]', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + ], + }, + ], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanListProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { + name: 'collateralIdsWhitelistMerkleRoot', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'collateralAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'creditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + { + name: 'proposalValues', + internalType: 'struct PWNSimpleLoanListProposal.ProposalValues', + type: 'tuple', + components: [ + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'merkleInclusionProof', + internalType: 'bytes32[]', + type: 'bytes32[]', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + ], + }, + ], + name: 'encodeProposalData', + outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanListProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { + name: 'collateralIdsWhitelistMerkleRoot', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'collateralAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'creditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + ], + name: 'exposed_erc712EncodeProposal', + outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { + name: 'multiproposal', + internalType: 'struct PWNSimpleLoanProposal.Multiproposal', + type: 'tuple', + components: [ + { + name: 'multiproposalMerkleRoot', + internalType: 'bytes32', + type: 'bytes32', + }, + ], + }, + ], + name: 'getMultiproposalHash', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanListProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { + name: 'collateralIdsWhitelistMerkleRoot', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'collateralAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'creditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + ], + name: 'getProposalHash', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'hub', + outputs: [{ name: '', internalType: 'contract PWNHub', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanListProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { + name: 'collateralIdsWhitelistMerkleRoot', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'collateralAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'creditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + ], + name: 'makeProposal', + outputs: [ + { name: 'proposalHash', internalType: 'bytes32', type: 'bytes32' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + name: 'proposalsMade', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + name: 'revokeNonce', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'revokedNonce', + outputs: [ + { name: '', internalType: 'contract PWNRevokedNonce', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'utilizedCredit', + outputs: [ + { name: '', internalType: 'contract PWNUtilizedCredit', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'proposalHash', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + { + name: 'proposer', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanListProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { + name: 'collateralIdsWhitelistMerkleRoot', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'collateralAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'creditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + indexed: false, + }, + ], + name: 'ProposalMade', + }, + { + type: 'error', + inputs: [{ name: 'addr', internalType: 'address', type: 'address' }], + name: 'AcceptorIsProposer', + }, + { + type: 'error', + inputs: [ + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'tag', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'AddressMissingHubTag', + }, + { + type: 'error', + inputs: [{ name: 'addr', internalType: 'address', type: 'address' }], + name: 'CallerIsNotStatedProposer', + }, + { + type: 'error', + inputs: [ + { name: 'caller', internalType: 'address', type: 'address' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + name: 'CallerNotLoanContract', + }, + { + type: 'error', + inputs: [{ name: 'id', internalType: 'uint256', type: 'uint256' }], + name: 'CollateralIdNotWhitelisted', + }, + { + type: 'error', + inputs: [ + { name: 'defaultDate', internalType: 'uint32', type: 'uint32' }, + { name: 'current', internalType: 'uint32', type: 'uint32' }, + ], + name: 'DefaultDateInPast', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'uint256', type: 'uint256' }, + { name: 'expiration', internalType: 'uint256', type: 'uint256' }, + ], + name: 'Expired', + }, + { + type: 'error', + inputs: [ + { name: 'acceptorController', internalType: 'address', type: 'address' }, + ], + name: 'InvalidAcceptorController', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'bytes32', type: 'bytes32' }, + { name: 'proposed', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'InvalidCollateralStateFingerprint', + }, + { + type: 'error', + inputs: [ + { name: 'refinancingLoanId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'InvalidRefinancingLoanId', + }, + { + type: 'error', + inputs: [ + { name: 'signer', internalType: 'address', type: 'address' }, + { name: 'digest', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'InvalidSignature', + }, + { + type: 'error', + inputs: [{ name: 'length', internalType: 'uint256', type: 'uint256' }], + name: 'InvalidSignatureLength', + }, + { type: 'error', inputs: [], name: 'MissingStateFingerprintComputer' }, + { + type: 'error', + inputs: [ + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + name: 'NonceNotUsable', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // PWNSimpleLoanProposal ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const pwnSimpleLoanProposalAbi = [ - { - type: "function", - inputs: [], - name: "DOMAIN_SEPARATOR", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "MULTIPROPOSAL_DOMAIN_SEPARATOR", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "MULTIPROPOSAL_TYPEHASH", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "acceptor", internalType: "address", type: "address" }, - { name: "refinancingLoanId", internalType: "uint256", type: "uint256" }, - { name: "proposalData", internalType: "bytes", type: "bytes" }, - { - name: "proposalInclusionProof", - internalType: "bytes32[]", - type: "bytes32[]", - }, - { name: "signature", internalType: "bytes", type: "bytes" }, - ], - name: "acceptProposal", - outputs: [ - { name: "proposalHash", internalType: "bytes32", type: "bytes32" }, - { - name: "loanTerms", - internalType: "struct PWNSimpleLoan.Terms", - type: "tuple", - components: [ - { name: "lender", internalType: "address", type: "address" }, - { name: "borrower", internalType: "address", type: "address" }, - { name: "duration", internalType: "uint32", type: "uint32" }, - { - name: "collateral", - internalType: "struct MultiToken.Asset", - type: "tuple", - components: [ - { - name: "category", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "assetAddress", - internalType: "address", - type: "address", - }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - }, - { - name: "credit", - internalType: "struct MultiToken.Asset", - type: "tuple", - components: [ - { - name: "category", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "assetAddress", - internalType: "address", - type: "address", - }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "lenderSpecHash", internalType: "bytes32", type: "bytes32" }, - { - name: "borrowerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - ], - }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "config", - outputs: [ - { name: "", internalType: "contract PWNConfig", type: "address" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "multiproposal", - internalType: "struct PWNSimpleLoanProposal.Multiproposal", - type: "tuple", - components: [ - { - name: "multiproposalMerkleRoot", - internalType: "bytes32", - type: "bytes32", - }, - ], - }, - ], - name: "getMultiproposalHash", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "hub", - outputs: [{ name: "", internalType: "contract PWNHub", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - name: "proposalsMade", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - ], - name: "revokeNonce", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "revokedNonce", - outputs: [ - { name: "", internalType: "contract PWNRevokedNonce", type: "address" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "utilizedCredit", - outputs: [ - { name: "", internalType: "contract PWNUtilizedCredit", type: "address" }, - ], - stateMutability: "view", - }, - { - type: "error", - inputs: [{ name: "addr", internalType: "address", type: "address" }], - name: "AcceptorIsProposer", - }, - { - type: "error", - inputs: [{ name: "addr", internalType: "address", type: "address" }], - name: "CallerIsNotStatedProposer", - }, - { - type: "error", - inputs: [ - { name: "current", internalType: "address", type: "address" }, - { name: "allowed", internalType: "address", type: "address" }, - ], - name: "CallerNotAllowedAcceptor", - }, - { - type: "error", - inputs: [ - { name: "caller", internalType: "address", type: "address" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - name: "CallerNotLoanContract", - }, - { - type: "error", - inputs: [ - { name: "defaultDate", internalType: "uint32", type: "uint32" }, - { name: "current", internalType: "uint32", type: "uint32" }, - ], - name: "DefaultDateInPast", - }, - { - type: "error", - inputs: [ - { name: "current", internalType: "bytes32", type: "bytes32" }, - { name: "proposed", internalType: "bytes32", type: "bytes32" }, - ], - name: "InvalidCollateralStateFingerprint", - }, - { - type: "error", - inputs: [ - { name: "refinancingLoanId", internalType: "uint256", type: "uint256" }, - ], - name: "InvalidRefinancingLoanId", - }, - { type: "error", inputs: [], name: "MissingStateFingerprintComputer" }, -] as const; + { + type: 'function', + inputs: [], + name: 'DOMAIN_SEPARATOR', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MULTIPROPOSAL_DOMAIN_SEPARATOR', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MULTIPROPOSAL_TYPEHASH', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'acceptor', internalType: 'address', type: 'address' }, + { name: 'refinancingLoanId', internalType: 'uint256', type: 'uint256' }, + { name: 'proposalData', internalType: 'bytes', type: 'bytes' }, + { + name: 'proposalInclusionProof', + internalType: 'bytes32[]', + type: 'bytes32[]', + }, + { name: 'signature', internalType: 'bytes', type: 'bytes' }, + ], + name: 'acceptProposal', + outputs: [ + { name: 'proposalHash', internalType: 'bytes32', type: 'bytes32' }, + { + name: 'loanTerms', + internalType: 'struct PWNSimpleLoan.Terms', + type: 'tuple', + components: [ + { name: 'lender', internalType: 'address', type: 'address' }, + { name: 'borrower', internalType: 'address', type: 'address' }, + { name: 'duration', internalType: 'uint32', type: 'uint32' }, + { + name: 'collateral', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'assetAddress', + internalType: 'address', + type: 'address', + }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + }, + { + name: 'credit', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'assetAddress', + internalType: 'address', + type: 'address', + }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'lenderSpecHash', internalType: 'bytes32', type: 'bytes32' }, + { + name: 'borrowerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + ], + }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'config', + outputs: [ + { name: '', internalType: 'contract PWNConfig', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'multiproposal', + internalType: 'struct PWNSimpleLoanProposal.Multiproposal', + type: 'tuple', + components: [ + { + name: 'multiproposalMerkleRoot', + internalType: 'bytes32', + type: 'bytes32', + }, + ], + }, + ], + name: 'getMultiproposalHash', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'hub', + outputs: [{ name: '', internalType: 'contract PWNHub', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + name: 'proposalsMade', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + name: 'revokeNonce', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'revokedNonce', + outputs: [ + { name: '', internalType: 'contract PWNRevokedNonce', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'utilizedCredit', + outputs: [ + { name: '', internalType: 'contract PWNUtilizedCredit', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'error', + inputs: [{ name: 'addr', internalType: 'address', type: 'address' }], + name: 'AcceptorIsProposer', + }, + { + type: 'error', + inputs: [{ name: 'addr', internalType: 'address', type: 'address' }], + name: 'CallerIsNotStatedProposer', + }, + { + type: 'error', + inputs: [ + { name: 'caller', internalType: 'address', type: 'address' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + name: 'CallerNotLoanContract', + }, + { + type: 'error', + inputs: [ + { name: 'defaultDate', internalType: 'uint32', type: 'uint32' }, + { name: 'current', internalType: 'uint32', type: 'uint32' }, + ], + name: 'DefaultDateInPast', + }, + { + type: 'error', + inputs: [ + { name: 'acceptorController', internalType: 'address', type: 'address' }, + ], + name: 'InvalidAcceptorController', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'bytes32', type: 'bytes32' }, + { name: 'proposed', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'InvalidCollateralStateFingerprint', + }, + { + type: 'error', + inputs: [ + { name: 'refinancingLoanId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'InvalidRefinancingLoanId', + }, + { type: 'error', inputs: [], name: 'MissingStateFingerprintComputer' }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // PWNSimpleLoanSimpleProposal ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const pwnSimpleLoanSimpleProposalAbi = [ - { - type: "constructor", - inputs: [ - { name: "_hub", internalType: "address", type: "address" }, - { name: "_revokedNonce", internalType: "address", type: "address" }, - { name: "_config", internalType: "address", type: "address" }, - { name: "_utilizedCredit", internalType: "address", type: "address" }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "DOMAIN_SEPARATOR", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "MULTIPROPOSAL_DOMAIN_SEPARATOR", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "MULTIPROPOSAL_TYPEHASH", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "PROPOSAL_TYPEHASH", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "VERSION", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "acceptor", internalType: "address", type: "address" }, - { name: "refinancingLoanId", internalType: "uint256", type: "uint256" }, - { name: "proposalData", internalType: "bytes", type: "bytes" }, - { - name: "proposalInclusionProof", - internalType: "bytes32[]", - type: "bytes32[]", - }, - { name: "signature", internalType: "bytes", type: "bytes" }, - ], - name: "acceptProposal", - outputs: [ - { name: "proposalHash", internalType: "bytes32", type: "bytes32" }, - { - name: "loanTerms", - internalType: "struct PWNSimpleLoan.Terms", - type: "tuple", - components: [ - { name: "lender", internalType: "address", type: "address" }, - { name: "borrower", internalType: "address", type: "address" }, - { name: "duration", internalType: "uint32", type: "uint32" }, - { - name: "collateral", - internalType: "struct MultiToken.Asset", - type: "tuple", - components: [ - { - name: "category", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "assetAddress", - internalType: "address", - type: "address", - }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - }, - { - name: "credit", - internalType: "struct MultiToken.Asset", - type: "tuple", - components: [ - { - name: "category", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "assetAddress", - internalType: "address", - type: "address", - }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "lenderSpecHash", internalType: "bytes32", type: "bytes32" }, - { - name: "borrowerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - ], - }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "config", - outputs: [ - { name: "", internalType: "contract PWNConfig", type: "address" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "proposalData", internalType: "bytes", type: "bytes" }], - name: "decodeProposalData", - outputs: [ - { - name: "", - internalType: "struct PWNSimpleLoanSimpleProposal.Proposal", - type: "tuple", - components: [ - { - name: "collateralCategory", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "collateralAddress", - internalType: "address", - type: "address", - }, - { name: "collateralId", internalType: "uint256", type: "uint256" }, - { - name: "collateralAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "checkCollateralStateFingerprint", - internalType: "bool", - type: "bool", - }, - { - name: "collateralStateFingerprint", - internalType: "bytes32", - type: "bytes32", - }, - { name: "creditAddress", internalType: "address", type: "address" }, - { name: "creditAmount", internalType: "uint256", type: "uint256" }, - { - name: "availableCreditLimit", - internalType: "uint256", - type: "uint256", - }, - { - name: "utilizedCreditId", - internalType: "bytes32", - type: "bytes32", - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "durationOrDate", internalType: "uint32", type: "uint32" }, - { name: "expiration", internalType: "uint40", type: "uint40" }, - { name: "allowedAcceptor", internalType: "address", type: "address" }, - { name: "proposer", internalType: "address", type: "address" }, - { - name: "proposerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "isOffer", internalType: "bool", type: "bool" }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - }, - ], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { - name: "proposal", - internalType: "struct PWNSimpleLoanSimpleProposal.Proposal", - type: "tuple", - components: [ - { - name: "collateralCategory", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "collateralAddress", - internalType: "address", - type: "address", - }, - { name: "collateralId", internalType: "uint256", type: "uint256" }, - { - name: "collateralAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "checkCollateralStateFingerprint", - internalType: "bool", - type: "bool", - }, - { - name: "collateralStateFingerprint", - internalType: "bytes32", - type: "bytes32", - }, - { name: "creditAddress", internalType: "address", type: "address" }, - { name: "creditAmount", internalType: "uint256", type: "uint256" }, - { - name: "availableCreditLimit", - internalType: "uint256", - type: "uint256", - }, - { - name: "utilizedCreditId", - internalType: "bytes32", - type: "bytes32", - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "durationOrDate", internalType: "uint32", type: "uint32" }, - { name: "expiration", internalType: "uint40", type: "uint40" }, - { name: "allowedAcceptor", internalType: "address", type: "address" }, - { name: "proposer", internalType: "address", type: "address" }, - { - name: "proposerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "isOffer", internalType: "bool", type: "bool" }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - }, - ], - name: "encodeProposalData", - outputs: [{ name: "", internalType: "bytes", type: "bytes" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { - name: "multiproposal", - internalType: "struct PWNSimpleLoanProposal.Multiproposal", - type: "tuple", - components: [ - { - name: "multiproposalMerkleRoot", - internalType: "bytes32", - type: "bytes32", - }, - ], - }, - ], - name: "getMultiproposalHash", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "proposal", - internalType: "struct PWNSimpleLoanSimpleProposal.Proposal", - type: "tuple", - components: [ - { - name: "collateralCategory", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "collateralAddress", - internalType: "address", - type: "address", - }, - { name: "collateralId", internalType: "uint256", type: "uint256" }, - { - name: "collateralAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "checkCollateralStateFingerprint", - internalType: "bool", - type: "bool", - }, - { - name: "collateralStateFingerprint", - internalType: "bytes32", - type: "bytes32", - }, - { name: "creditAddress", internalType: "address", type: "address" }, - { name: "creditAmount", internalType: "uint256", type: "uint256" }, - { - name: "availableCreditLimit", - internalType: "uint256", - type: "uint256", - }, - { - name: "utilizedCreditId", - internalType: "bytes32", - type: "bytes32", - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "durationOrDate", internalType: "uint32", type: "uint32" }, - { name: "expiration", internalType: "uint40", type: "uint40" }, - { name: "allowedAcceptor", internalType: "address", type: "address" }, - { name: "proposer", internalType: "address", type: "address" }, - { - name: "proposerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "isOffer", internalType: "bool", type: "bool" }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - }, - ], - name: "getProposalHash", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "hub", - outputs: [{ name: "", internalType: "contract PWNHub", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "proposal", - internalType: "struct PWNSimpleLoanSimpleProposal.Proposal", - type: "tuple", - components: [ - { - name: "collateralCategory", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "collateralAddress", - internalType: "address", - type: "address", - }, - { name: "collateralId", internalType: "uint256", type: "uint256" }, - { - name: "collateralAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "checkCollateralStateFingerprint", - internalType: "bool", - type: "bool", - }, - { - name: "collateralStateFingerprint", - internalType: "bytes32", - type: "bytes32", - }, - { name: "creditAddress", internalType: "address", type: "address" }, - { name: "creditAmount", internalType: "uint256", type: "uint256" }, - { - name: "availableCreditLimit", - internalType: "uint256", - type: "uint256", - }, - { - name: "utilizedCreditId", - internalType: "bytes32", - type: "bytes32", - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "durationOrDate", internalType: "uint32", type: "uint32" }, - { name: "expiration", internalType: "uint40", type: "uint40" }, - { name: "allowedAcceptor", internalType: "address", type: "address" }, - { name: "proposer", internalType: "address", type: "address" }, - { - name: "proposerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "isOffer", internalType: "bool", type: "bool" }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - }, - ], - name: "makeProposal", - outputs: [ - { name: "proposalHash", internalType: "bytes32", type: "bytes32" }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - name: "proposalsMade", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - ], - name: "revokeNonce", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "revokedNonce", - outputs: [ - { name: "", internalType: "contract PWNRevokedNonce", type: "address" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "utilizedCredit", - outputs: [ - { name: "", internalType: "contract PWNUtilizedCredit", type: "address" }, - ], - stateMutability: "view", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "proposalHash", - internalType: "bytes32", - type: "bytes32", - indexed: true, - }, - { - name: "proposer", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "proposal", - internalType: "struct PWNSimpleLoanSimpleProposal.Proposal", - type: "tuple", - components: [ - { - name: "collateralCategory", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { - name: "collateralAddress", - internalType: "address", - type: "address", - }, - { name: "collateralId", internalType: "uint256", type: "uint256" }, - { - name: "collateralAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "checkCollateralStateFingerprint", - internalType: "bool", - type: "bool", - }, - { - name: "collateralStateFingerprint", - internalType: "bytes32", - type: "bytes32", - }, - { name: "creditAddress", internalType: "address", type: "address" }, - { name: "creditAmount", internalType: "uint256", type: "uint256" }, - { - name: "availableCreditLimit", - internalType: "uint256", - type: "uint256", - }, - { - name: "utilizedCreditId", - internalType: "bytes32", - type: "bytes32", - }, - { - name: "fixedInterestAmount", - internalType: "uint256", - type: "uint256", - }, - { - name: "accruingInterestAPR", - internalType: "uint24", - type: "uint24", - }, - { name: "durationOrDate", internalType: "uint32", type: "uint32" }, - { name: "expiration", internalType: "uint40", type: "uint40" }, - { name: "allowedAcceptor", internalType: "address", type: "address" }, - { name: "proposer", internalType: "address", type: "address" }, - { - name: "proposerSpecHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "isOffer", internalType: "bool", type: "bool" }, - { - name: "refinancingLoanId", - internalType: "uint256", - type: "uint256", - }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - indexed: false, - }, - ], - name: "ProposalMade", - }, - { - type: "error", - inputs: [{ name: "addr", internalType: "address", type: "address" }], - name: "AcceptorIsProposer", - }, - { - type: "error", - inputs: [ - { name: "addr", internalType: "address", type: "address" }, - { name: "tag", internalType: "bytes32", type: "bytes32" }, - ], - name: "AddressMissingHubTag", - }, - { - type: "error", - inputs: [{ name: "addr", internalType: "address", type: "address" }], - name: "CallerIsNotStatedProposer", - }, - { - type: "error", - inputs: [ - { name: "current", internalType: "address", type: "address" }, - { name: "allowed", internalType: "address", type: "address" }, - ], - name: "CallerNotAllowedAcceptor", - }, - { - type: "error", - inputs: [ - { name: "caller", internalType: "address", type: "address" }, - { name: "loanContract", internalType: "address", type: "address" }, - ], - name: "CallerNotLoanContract", - }, - { - type: "error", - inputs: [ - { name: "defaultDate", internalType: "uint32", type: "uint32" }, - { name: "current", internalType: "uint32", type: "uint32" }, - ], - name: "DefaultDateInPast", - }, - { - type: "error", - inputs: [ - { name: "current", internalType: "uint256", type: "uint256" }, - { name: "expiration", internalType: "uint256", type: "uint256" }, - ], - name: "Expired", - }, - { - type: "error", - inputs: [ - { name: "current", internalType: "bytes32", type: "bytes32" }, - { name: "proposed", internalType: "bytes32", type: "bytes32" }, - ], - name: "InvalidCollateralStateFingerprint", - }, - { - type: "error", - inputs: [ - { name: "refinancingLoanId", internalType: "uint256", type: "uint256" }, - ], - name: "InvalidRefinancingLoanId", - }, - { - type: "error", - inputs: [ - { name: "signer", internalType: "address", type: "address" }, - { name: "digest", internalType: "bytes32", type: "bytes32" }, - ], - name: "InvalidSignature", - }, - { - type: "error", - inputs: [{ name: "length", internalType: "uint256", type: "uint256" }], - name: "InvalidSignatureLength", - }, - { type: "error", inputs: [], name: "MissingStateFingerprintComputer" }, - { - type: "error", - inputs: [ - { name: "addr", internalType: "address", type: "address" }, - { name: "nonceSpace", internalType: "uint256", type: "uint256" }, - { name: "nonce", internalType: "uint256", type: "uint256" }, - ], - name: "NonceNotUsable", - }, -] as const; + { + type: 'constructor', + inputs: [ + { name: '_hub', internalType: 'address', type: 'address' }, + { name: '_revokedNonce', internalType: 'address', type: 'address' }, + { name: '_config', internalType: 'address', type: 'address' }, + { name: '_utilizedCredit', internalType: 'address', type: 'address' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'DOMAIN_SEPARATOR', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MULTIPROPOSAL_DOMAIN_SEPARATOR', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MULTIPROPOSAL_TYPEHASH', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'PROPOSAL_TYPEHASH', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'VERSION', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'acceptor', internalType: 'address', type: 'address' }, + { name: 'refinancingLoanId', internalType: 'uint256', type: 'uint256' }, + { name: 'proposalData', internalType: 'bytes', type: 'bytes' }, + { + name: 'proposalInclusionProof', + internalType: 'bytes32[]', + type: 'bytes32[]', + }, + { name: 'signature', internalType: 'bytes', type: 'bytes' }, + ], + name: 'acceptProposal', + outputs: [ + { name: 'proposalHash', internalType: 'bytes32', type: 'bytes32' }, + { + name: 'loanTerms', + internalType: 'struct PWNSimpleLoan.Terms', + type: 'tuple', + components: [ + { name: 'lender', internalType: 'address', type: 'address' }, + { name: 'borrower', internalType: 'address', type: 'address' }, + { name: 'duration', internalType: 'uint32', type: 'uint32' }, + { + name: 'collateral', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'assetAddress', + internalType: 'address', + type: 'address', + }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + }, + { + name: 'credit', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'assetAddress', + internalType: 'address', + type: 'address', + }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'lenderSpecHash', internalType: 'bytes32', type: 'bytes32' }, + { + name: 'borrowerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + ], + }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'config', + outputs: [ + { name: '', internalType: 'contract PWNConfig', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'proposalData', internalType: 'bytes', type: 'bytes' }], + name: 'decodeProposalData', + outputs: [ + { + name: '', + internalType: 'struct PWNSimpleLoanSimpleProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'collateralAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'creditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + { + name: '', + internalType: 'struct PWNSimpleLoanSimpleProposal.ProposalValues', + type: 'tuple', + components: [ + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + ], + }, + ], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanSimpleProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'collateralAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'creditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + { + name: 'proposalValues', + internalType: 'struct PWNSimpleLoanSimpleProposal.ProposalValues', + type: 'tuple', + components: [ + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + ], + }, + ], + name: 'encodeProposalData', + outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { + name: 'multiproposal', + internalType: 'struct PWNSimpleLoanProposal.Multiproposal', + type: 'tuple', + components: [ + { + name: 'multiproposalMerkleRoot', + internalType: 'bytes32', + type: 'bytes32', + }, + ], + }, + ], + name: 'getMultiproposalHash', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanSimpleProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'collateralAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'creditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + ], + name: 'getProposalHash', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'hub', + outputs: [{ name: '', internalType: 'contract PWNHub', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanSimpleProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'collateralAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'creditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + ], + name: 'makeProposal', + outputs: [ + { name: 'proposalHash', internalType: 'bytes32', type: 'bytes32' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + name: 'proposalsMade', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + name: 'revokeNonce', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'revokedNonce', + outputs: [ + { name: '', internalType: 'contract PWNRevokedNonce', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'utilizedCredit', + outputs: [ + { name: '', internalType: 'contract PWNUtilizedCredit', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'proposalHash', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + { + name: 'proposer', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanSimpleProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'collateralAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'creditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + indexed: false, + }, + ], + name: 'ProposalMade', + }, + { + type: 'error', + inputs: [{ name: 'addr', internalType: 'address', type: 'address' }], + name: 'AcceptorIsProposer', + }, + { + type: 'error', + inputs: [ + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'tag', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'AddressMissingHubTag', + }, + { + type: 'error', + inputs: [{ name: 'addr', internalType: 'address', type: 'address' }], + name: 'CallerIsNotStatedProposer', + }, + { + type: 'error', + inputs: [ + { name: 'caller', internalType: 'address', type: 'address' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + name: 'CallerNotLoanContract', + }, + { + type: 'error', + inputs: [ + { name: 'defaultDate', internalType: 'uint32', type: 'uint32' }, + { name: 'current', internalType: 'uint32', type: 'uint32' }, + ], + name: 'DefaultDateInPast', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'uint256', type: 'uint256' }, + { name: 'expiration', internalType: 'uint256', type: 'uint256' }, + ], + name: 'Expired', + }, + { + type: 'error', + inputs: [ + { name: 'acceptorController', internalType: 'address', type: 'address' }, + ], + name: 'InvalidAcceptorController', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'bytes32', type: 'bytes32' }, + { name: 'proposed', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'InvalidCollateralStateFingerprint', + }, + { + type: 'error', + inputs: [ + { name: 'refinancingLoanId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'InvalidRefinancingLoanId', + }, + { + type: 'error', + inputs: [ + { name: 'signer', internalType: 'address', type: 'address' }, + { name: 'digest', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'InvalidSignature', + }, + { + type: 'error', + inputs: [{ name: 'length', internalType: 'uint256', type: 'uint256' }], + name: 'InvalidSignatureLength', + }, + { type: 'error', inputs: [], name: 'MissingStateFingerprintComputer' }, + { + type: 'error', + inputs: [ + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + name: 'NonceNotUsable', + }, +] as const + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// PWNSimpleLoanSimpleProposalHarness +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const pwnSimpleLoanSimpleProposalHarnessAbi = [ + { + type: 'constructor', + inputs: [ + { name: '_hub', internalType: 'address', type: 'address' }, + { name: '_revokedNonce', internalType: 'address', type: 'address' }, + { name: '_config', internalType: 'address', type: 'address' }, + { name: '_utilizedCredit', internalType: 'address', type: 'address' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'DOMAIN_SEPARATOR', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MULTIPROPOSAL_DOMAIN_SEPARATOR', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MULTIPROPOSAL_TYPEHASH', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'PROPOSAL_TYPEHASH', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'VERSION', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'acceptor', internalType: 'address', type: 'address' }, + { name: 'refinancingLoanId', internalType: 'uint256', type: 'uint256' }, + { name: 'proposalData', internalType: 'bytes', type: 'bytes' }, + { + name: 'proposalInclusionProof', + internalType: 'bytes32[]', + type: 'bytes32[]', + }, + { name: 'signature', internalType: 'bytes', type: 'bytes' }, + ], + name: 'acceptProposal', + outputs: [ + { name: 'proposalHash', internalType: 'bytes32', type: 'bytes32' }, + { + name: 'loanTerms', + internalType: 'struct PWNSimpleLoan.Terms', + type: 'tuple', + components: [ + { name: 'lender', internalType: 'address', type: 'address' }, + { name: 'borrower', internalType: 'address', type: 'address' }, + { name: 'duration', internalType: 'uint32', type: 'uint32' }, + { + name: 'collateral', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'assetAddress', + internalType: 'address', + type: 'address', + }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + }, + { + name: 'credit', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'assetAddress', + internalType: 'address', + type: 'address', + }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'lenderSpecHash', internalType: 'bytes32', type: 'bytes32' }, + { + name: 'borrowerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + ], + }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'config', + outputs: [ + { name: '', internalType: 'contract PWNConfig', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'proposalData', internalType: 'bytes', type: 'bytes' }], + name: 'decodeProposalData', + outputs: [ + { + name: '', + internalType: 'struct PWNSimpleLoanSimpleProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'collateralAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'creditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + { + name: '', + internalType: 'struct PWNSimpleLoanSimpleProposal.ProposalValues', + type: 'tuple', + components: [ + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + ], + }, + ], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanSimpleProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'collateralAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'creditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + { + name: 'proposalValues', + internalType: 'struct PWNSimpleLoanSimpleProposal.ProposalValues', + type: 'tuple', + components: [ + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + ], + }, + ], + name: 'encodeProposalData', + outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanSimpleProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'collateralAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'creditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + ], + name: 'exposed_erc712EncodeProposal', + outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { + name: 'multiproposal', + internalType: 'struct PWNSimpleLoanProposal.Multiproposal', + type: 'tuple', + components: [ + { + name: 'multiproposalMerkleRoot', + internalType: 'bytes32', + type: 'bytes32', + }, + ], + }, + ], + name: 'getMultiproposalHash', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanSimpleProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'collateralAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'creditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + ], + name: 'getProposalHash', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'hub', + outputs: [{ name: '', internalType: 'contract PWNHub', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanSimpleProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'collateralAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'creditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + ], + name: 'makeProposal', + outputs: [ + { name: 'proposalHash', internalType: 'bytes32', type: 'bytes32' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + name: 'proposalsMade', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + name: 'revokeNonce', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'revokedNonce', + outputs: [ + { name: '', internalType: 'contract PWNRevokedNonce', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'utilizedCredit', + outputs: [ + { name: '', internalType: 'contract PWNUtilizedCredit', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'proposalHash', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + { + name: 'proposer', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanSimpleProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'collateralCategory', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'collateralAddress', + internalType: 'address', + type: 'address', + }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { + name: 'collateralAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'checkCollateralStateFingerprint', + internalType: 'bool', + type: 'bool', + }, + { + name: 'collateralStateFingerprint', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'creditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + indexed: false, + }, + ], + name: 'ProposalMade', + }, + { + type: 'error', + inputs: [{ name: 'addr', internalType: 'address', type: 'address' }], + name: 'AcceptorIsProposer', + }, + { + type: 'error', + inputs: [ + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'tag', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'AddressMissingHubTag', + }, + { + type: 'error', + inputs: [{ name: 'addr', internalType: 'address', type: 'address' }], + name: 'CallerIsNotStatedProposer', + }, + { + type: 'error', + inputs: [ + { name: 'caller', internalType: 'address', type: 'address' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + name: 'CallerNotLoanContract', + }, + { + type: 'error', + inputs: [ + { name: 'defaultDate', internalType: 'uint32', type: 'uint32' }, + { name: 'current', internalType: 'uint32', type: 'uint32' }, + ], + name: 'DefaultDateInPast', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'uint256', type: 'uint256' }, + { name: 'expiration', internalType: 'uint256', type: 'uint256' }, + ], + name: 'Expired', + }, + { + type: 'error', + inputs: [ + { name: 'acceptorController', internalType: 'address', type: 'address' }, + ], + name: 'InvalidAcceptorController', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'bytes32', type: 'bytes32' }, + { name: 'proposed', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'InvalidCollateralStateFingerprint', + }, + { + type: 'error', + inputs: [ + { name: 'refinancingLoanId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'InvalidRefinancingLoanId', + }, + { + type: 'error', + inputs: [ + { name: 'signer', internalType: 'address', type: 'address' }, + { name: 'digest', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'InvalidSignature', + }, + { + type: 'error', + inputs: [{ name: 'length', internalType: 'uint256', type: 'uint256' }], + name: 'InvalidSignatureLength', + }, + { type: 'error', inputs: [], name: 'MissingStateFingerprintComputer' }, + { + type: 'error', + inputs: [ + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + name: 'NonceNotUsable', + }, +] as const + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// PWNSimpleLoanUniswapV3LPIndividualProposal +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const pwnSimpleLoanUniswapV3LpIndividualProposalAbi = [ + { + type: 'constructor', + inputs: [ + { name: '_hub', internalType: 'address', type: 'address' }, + { name: '_revokedNonce', internalType: 'address', type: 'address' }, + { name: '_config', internalType: 'address', type: 'address' }, + { name: '_utilizedCredit', internalType: 'address', type: 'address' }, + { name: '_uniswapV3Factory', internalType: 'address', type: 'address' }, + { + name: '_uniswapNFTPositionManager', + internalType: 'address', + type: 'address', + }, + { + name: '_chainlinkFeedRegistry', + internalType: 'address', + type: 'address', + }, + { + name: '_chainlinkL2SequencerUptimeFeed', + internalType: 'address', + type: 'address', + }, + { name: '_weth', internalType: 'address', type: 'address' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'DOMAIN_SEPARATOR', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'LOAN_TO_VALUE_DENOMINATOR', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MAX_INTERMEDIARY_DENOMINATIONS', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MULTIPROPOSAL_DOMAIN_SEPARATOR', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MULTIPROPOSAL_TYPEHASH', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'PROPOSAL_TYPEHASH', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'VERSION', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'WETH', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'acceptor', internalType: 'address', type: 'address' }, + { name: 'refinancingLoanId', internalType: 'uint256', type: 'uint256' }, + { name: 'proposalData', internalType: 'bytes', type: 'bytes' }, + { + name: 'proposalInclusionProof', + internalType: 'bytes32[]', + type: 'bytes32[]', + }, + { name: 'signature', internalType: 'bytes', type: 'bytes' }, + ], + name: 'acceptProposal', + outputs: [ + { name: 'proposalHash', internalType: 'bytes32', type: 'bytes32' }, + { + name: 'loanTerms', + internalType: 'struct PWNSimpleLoan.Terms', + type: 'tuple', + components: [ + { name: 'lender', internalType: 'address', type: 'address' }, + { name: 'borrower', internalType: 'address', type: 'address' }, + { name: 'duration', internalType: 'uint32', type: 'uint32' }, + { + name: 'collateral', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'assetAddress', + internalType: 'address', + type: 'address', + }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + }, + { + name: 'credit', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'assetAddress', + internalType: 'address', + type: 'address', + }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'lenderSpecHash', internalType: 'bytes32', type: 'bytes32' }, + { + name: 'borrowerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + ], + }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'chainlinkFeedRegistry', + outputs: [ + { + name: '', + internalType: 'contract IChainlinkFeedRegistryLike', + type: 'address', + }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'chainlinkL2SequencerUptimeFeed', + outputs: [ + { + name: '', + internalType: 'contract IChainlinkAggregatorLike', + type: 'address', + }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'config', + outputs: [ + { name: '', internalType: 'contract PWNConfig', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'proposalData', internalType: 'bytes', type: 'bytes' }], + name: 'decodeProposalData', + outputs: [ + { + name: '', + internalType: + 'struct PWNSimpleLoanUniswapV3LPIndividualProposal.Proposal', + type: 'tuple', + components: [ + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { name: 'token0Denominator', internalType: 'bool', type: 'bool' }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + { + name: '', + internalType: + 'struct PWNSimpleLoanUniswapV3LPIndividualProposal.ProposalValues', + type: 'tuple', + components: [ + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + ], + }, + ], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: + 'struct PWNSimpleLoanUniswapV3LPIndividualProposal.Proposal', + type: 'tuple', + components: [ + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { name: 'token0Denominator', internalType: 'bool', type: 'bool' }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + { + name: 'proposalValues', + internalType: + 'struct PWNSimpleLoanUniswapV3LPIndividualProposal.ProposalValues', + type: 'tuple', + components: [ + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + ], + }, + ], + name: 'encodeProposalData', + outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { name: 'token0Denominator', internalType: 'bool', type: 'bool' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + ], + name: 'getCreditAmount', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'multiproposal', + internalType: 'struct PWNSimpleLoanProposal.Multiproposal', + type: 'tuple', + components: [ + { + name: 'multiproposalMerkleRoot', + internalType: 'bytes32', + type: 'bytes32', + }, + ], + }, + ], + name: 'getMultiproposalHash', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: + 'struct PWNSimpleLoanUniswapV3LPIndividualProposal.Proposal', + type: 'tuple', + components: [ + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { name: 'token0Denominator', internalType: 'bool', type: 'bool' }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + ], + name: 'getProposalHash', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'hub', + outputs: [{ name: '', internalType: 'contract PWNHub', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: + 'struct PWNSimpleLoanUniswapV3LPIndividualProposal.Proposal', + type: 'tuple', + components: [ + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { name: 'token0Denominator', internalType: 'bool', type: 'bool' }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + ], + name: 'makeProposal', + outputs: [ + { name: 'proposalHash', internalType: 'bytes32', type: 'bytes32' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + name: 'proposalsMade', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + name: 'revokeNonce', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'revokedNonce', + outputs: [ + { name: '', internalType: 'contract PWNRevokedNonce', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'uniswapNFTPositionManager', + outputs: [ + { + name: '', + internalType: 'contract INonfungiblePositionManager', + type: 'address', + }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'uniswapV3Factory', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'utilizedCredit', + outputs: [ + { name: '', internalType: 'contract PWNUtilizedCredit', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'proposalHash', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + { + name: 'proposer', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'proposal', + internalType: + 'struct PWNSimpleLoanUniswapV3LPIndividualProposal.Proposal', + type: 'tuple', + components: [ + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { name: 'token0Denominator', internalType: 'bool', type: 'bool' }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + indexed: false, + }, + ], + name: 'ProposalMade', + }, + { + type: 'error', + inputs: [{ name: 'addr', internalType: 'address', type: 'address' }], + name: 'AcceptorIsProposer', + }, + { + type: 'error', + inputs: [ + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'tag', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'AddressMissingHubTag', + }, + { + type: 'error', + inputs: [{ name: 'addr', internalType: 'address', type: 'address' }], + name: 'CallerIsNotStatedProposer', + }, + { + type: 'error', + inputs: [ + { name: 'caller', internalType: 'address', type: 'address' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + name: 'CallerNotLoanContract', + }, + { + type: 'error', + inputs: [ + { name: 'feed', internalType: 'address', type: 'address' }, + { name: 'updatedAt', internalType: 'uint256', type: 'uint256' }, + ], + name: 'ChainlinkFeedPriceTooOld', + }, + { + type: 'error', + inputs: [ + { name: 'feed', internalType: 'address', type: 'address' }, + { name: 'price', internalType: 'int256', type: 'int256' }, + { name: 'updatedAt', internalType: 'uint256', type: 'uint256' }, + ], + name: 'ChainlinkFeedReturnedNegativePrice', + }, + { type: 'error', inputs: [], name: 'ChainlinkInvalidInputLenghts' }, + { + type: 'error', + inputs: [ + { name: 'defaultDate', internalType: 'uint32', type: 'uint32' }, + { name: 'current', internalType: 'uint32', type: 'uint32' }, + ], + name: 'DefaultDateInPast', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'uint256', type: 'uint256' }, + { name: 'expiration', internalType: 'uint256', type: 'uint256' }, + ], + name: 'Expired', + }, + { + type: 'error', + inputs: [ + { name: 'timeSinceUp', internalType: 'uint256', type: 'uint256' }, + { name: 'gracePeriod', internalType: 'uint256', type: 'uint256' }, + ], + name: 'GracePeriodNotOver', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'uint256', type: 'uint256' }, + { name: 'limit', internalType: 'uint256', type: 'uint256' }, + ], + name: 'InsufficientCreditAmount', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'uint256', type: 'uint256' }, + { name: 'limit', internalType: 'uint256', type: 'uint256' }, + ], + name: 'IntermediaryDenominationsOutOfBounds', + }, + { + type: 'error', + inputs: [ + { name: 'acceptorController', internalType: 'address', type: 'address' }, + ], + name: 'InvalidAcceptorController', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'bytes32', type: 'bytes32' }, + { name: 'proposed', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'InvalidCollateralStateFingerprint', + }, + { + type: 'error', + inputs: [ + { name: 'refinancingLoanId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'InvalidRefinancingLoanId', + }, + { + type: 'error', + inputs: [ + { name: 'signer', internalType: 'address', type: 'address' }, + { name: 'digest', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'InvalidSignature', + }, + { + type: 'error', + inputs: [{ name: 'length', internalType: 'uint256', type: 'uint256' }], + name: 'InvalidSignatureLength', + }, + { type: 'error', inputs: [], name: 'L2SequencerDown' }, + { type: 'error', inputs: [], name: 'MinCreditAmountNotSet' }, + { type: 'error', inputs: [], name: 'MissingStateFingerprintComputer' }, + { + type: 'error', + inputs: [ + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + name: 'NonceNotUsable', + }, + { type: 'error', inputs: [], name: 'T' }, +] as const + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// PWNSimpleLoanUniswapV3LPIndividualProposalHarness +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi = [ + { + type: 'constructor', + inputs: [ + { name: '_hub', internalType: 'address', type: 'address' }, + { name: '_revokedNonce', internalType: 'address', type: 'address' }, + { name: '_config', internalType: 'address', type: 'address' }, + { name: '_utilizedCredit', internalType: 'address', type: 'address' }, + { name: '_uniswapV3Factory', internalType: 'address', type: 'address' }, + { + name: '_uniswapNFTPositionManager', + internalType: 'address', + type: 'address', + }, + { + name: '_chainlinkFeedRegistry', + internalType: 'address', + type: 'address', + }, + { + name: '_chainlinkL2SequencerUptimeFeed', + internalType: 'address', + type: 'address', + }, + { name: '_weth', internalType: 'address', type: 'address' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'DOMAIN_SEPARATOR', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'LOAN_TO_VALUE_DENOMINATOR', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MAX_INTERMEDIARY_DENOMINATIONS', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MULTIPROPOSAL_DOMAIN_SEPARATOR', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MULTIPROPOSAL_TYPEHASH', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'PROPOSAL_TYPEHASH', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'VERSION', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'WETH', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'acceptor', internalType: 'address', type: 'address' }, + { name: 'refinancingLoanId', internalType: 'uint256', type: 'uint256' }, + { name: 'proposalData', internalType: 'bytes', type: 'bytes' }, + { + name: 'proposalInclusionProof', + internalType: 'bytes32[]', + type: 'bytes32[]', + }, + { name: 'signature', internalType: 'bytes', type: 'bytes' }, + ], + name: 'acceptProposal', + outputs: [ + { name: 'proposalHash', internalType: 'bytes32', type: 'bytes32' }, + { + name: 'loanTerms', + internalType: 'struct PWNSimpleLoan.Terms', + type: 'tuple', + components: [ + { name: 'lender', internalType: 'address', type: 'address' }, + { name: 'borrower', internalType: 'address', type: 'address' }, + { name: 'duration', internalType: 'uint32', type: 'uint32' }, + { + name: 'collateral', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'assetAddress', + internalType: 'address', + type: 'address', + }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + }, + { + name: 'credit', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'assetAddress', + internalType: 'address', + type: 'address', + }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'lenderSpecHash', internalType: 'bytes32', type: 'bytes32' }, + { + name: 'borrowerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + ], + }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'chainlinkFeedRegistry', + outputs: [ + { + name: '', + internalType: 'contract IChainlinkFeedRegistryLike', + type: 'address', + }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'chainlinkL2SequencerUptimeFeed', + outputs: [ + { + name: '', + internalType: 'contract IChainlinkAggregatorLike', + type: 'address', + }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'config', + outputs: [ + { name: '', internalType: 'contract PWNConfig', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'proposalData', internalType: 'bytes', type: 'bytes' }], + name: 'decodeProposalData', + outputs: [ + { + name: '', + internalType: + 'struct PWNSimpleLoanUniswapV3LPIndividualProposal.Proposal', + type: 'tuple', + components: [ + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { name: 'token0Denominator', internalType: 'bool', type: 'bool' }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + { + name: '', + internalType: + 'struct PWNSimpleLoanUniswapV3LPIndividualProposal.ProposalValues', + type: 'tuple', + components: [ + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + ], + }, + ], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: + 'struct PWNSimpleLoanUniswapV3LPIndividualProposal.Proposal', + type: 'tuple', + components: [ + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { name: 'token0Denominator', internalType: 'bool', type: 'bool' }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + { + name: 'proposalValues', + internalType: + 'struct PWNSimpleLoanUniswapV3LPIndividualProposal.ProposalValues', + type: 'tuple', + components: [ + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + ], + }, + ], + name: 'encodeProposalData', + outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: + 'struct PWNSimpleLoanUniswapV3LPIndividualProposal.Proposal', + type: 'tuple', + components: [ + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { name: 'token0Denominator', internalType: 'bool', type: 'bool' }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + ], + name: 'exposed_erc712EncodeProposal', + outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { name: 'token0Denominator', internalType: 'bool', type: 'bool' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + ], + name: 'getCreditAmount', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'multiproposal', + internalType: 'struct PWNSimpleLoanProposal.Multiproposal', + type: 'tuple', + components: [ + { + name: 'multiproposalMerkleRoot', + internalType: 'bytes32', + type: 'bytes32', + }, + ], + }, + ], + name: 'getMultiproposalHash', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: + 'struct PWNSimpleLoanUniswapV3LPIndividualProposal.Proposal', + type: 'tuple', + components: [ + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { name: 'token0Denominator', internalType: 'bool', type: 'bool' }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + ], + name: 'getProposalHash', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'hub', + outputs: [{ name: '', internalType: 'contract PWNHub', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: + 'struct PWNSimpleLoanUniswapV3LPIndividualProposal.Proposal', + type: 'tuple', + components: [ + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { name: 'token0Denominator', internalType: 'bool', type: 'bool' }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + ], + name: 'makeProposal', + outputs: [ + { name: 'proposalHash', internalType: 'bytes32', type: 'bytes32' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + name: 'proposalsMade', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + name: 'revokeNonce', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'revokedNonce', + outputs: [ + { name: '', internalType: 'contract PWNRevokedNonce', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'uniswapNFTPositionManager', + outputs: [ + { + name: '', + internalType: 'contract INonfungiblePositionManager', + type: 'address', + }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'uniswapV3Factory', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'utilizedCredit', + outputs: [ + { name: '', internalType: 'contract PWNUtilizedCredit', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'proposalHash', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + { + name: 'proposer', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'proposal', + internalType: + 'struct PWNSimpleLoanUniswapV3LPIndividualProposal.Proposal', + type: 'tuple', + components: [ + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { name: 'token0Denominator', internalType: 'bool', type: 'bool' }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + indexed: false, + }, + ], + name: 'ProposalMade', + }, + { + type: 'error', + inputs: [{ name: 'addr', internalType: 'address', type: 'address' }], + name: 'AcceptorIsProposer', + }, + { + type: 'error', + inputs: [ + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'tag', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'AddressMissingHubTag', + }, + { + type: 'error', + inputs: [{ name: 'addr', internalType: 'address', type: 'address' }], + name: 'CallerIsNotStatedProposer', + }, + { + type: 'error', + inputs: [ + { name: 'caller', internalType: 'address', type: 'address' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + name: 'CallerNotLoanContract', + }, + { + type: 'error', + inputs: [ + { name: 'feed', internalType: 'address', type: 'address' }, + { name: 'updatedAt', internalType: 'uint256', type: 'uint256' }, + ], + name: 'ChainlinkFeedPriceTooOld', + }, + { + type: 'error', + inputs: [ + { name: 'feed', internalType: 'address', type: 'address' }, + { name: 'price', internalType: 'int256', type: 'int256' }, + { name: 'updatedAt', internalType: 'uint256', type: 'uint256' }, + ], + name: 'ChainlinkFeedReturnedNegativePrice', + }, + { type: 'error', inputs: [], name: 'ChainlinkInvalidInputLenghts' }, + { + type: 'error', + inputs: [ + { name: 'defaultDate', internalType: 'uint32', type: 'uint32' }, + { name: 'current', internalType: 'uint32', type: 'uint32' }, + ], + name: 'DefaultDateInPast', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'uint256', type: 'uint256' }, + { name: 'expiration', internalType: 'uint256', type: 'uint256' }, + ], + name: 'Expired', + }, + { + type: 'error', + inputs: [ + { name: 'timeSinceUp', internalType: 'uint256', type: 'uint256' }, + { name: 'gracePeriod', internalType: 'uint256', type: 'uint256' }, + ], + name: 'GracePeriodNotOver', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'uint256', type: 'uint256' }, + { name: 'limit', internalType: 'uint256', type: 'uint256' }, + ], + name: 'InsufficientCreditAmount', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'uint256', type: 'uint256' }, + { name: 'limit', internalType: 'uint256', type: 'uint256' }, + ], + name: 'IntermediaryDenominationsOutOfBounds', + }, + { + type: 'error', + inputs: [ + { name: 'acceptorController', internalType: 'address', type: 'address' }, + ], + name: 'InvalidAcceptorController', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'bytes32', type: 'bytes32' }, + { name: 'proposed', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'InvalidCollateralStateFingerprint', + }, + { + type: 'error', + inputs: [ + { name: 'refinancingLoanId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'InvalidRefinancingLoanId', + }, + { + type: 'error', + inputs: [ + { name: 'signer', internalType: 'address', type: 'address' }, + { name: 'digest', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'InvalidSignature', + }, + { + type: 'error', + inputs: [{ name: 'length', internalType: 'uint256', type: 'uint256' }], + name: 'InvalidSignatureLength', + }, + { type: 'error', inputs: [], name: 'L2SequencerDown' }, + { type: 'error', inputs: [], name: 'MinCreditAmountNotSet' }, + { type: 'error', inputs: [], name: 'MissingStateFingerprintComputer' }, + { + type: 'error', + inputs: [ + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + name: 'NonceNotUsable', + }, + { type: 'error', inputs: [], name: 'T' }, +] as const + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// PWNSimpleLoanUniswapV3LPSetProposal +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const pwnSimpleLoanUniswapV3LpSetProposalAbi = [ + { + type: 'constructor', + inputs: [ + { name: '_hub', internalType: 'address', type: 'address' }, + { name: '_revokedNonce', internalType: 'address', type: 'address' }, + { name: '_config', internalType: 'address', type: 'address' }, + { name: '_utilizedCredit', internalType: 'address', type: 'address' }, + { name: '_uniswapV3Factory', internalType: 'address', type: 'address' }, + { + name: '_uniswapNFTPositionManager', + internalType: 'address', + type: 'address', + }, + { + name: '_chainlinkFeedRegistry', + internalType: 'address', + type: 'address', + }, + { + name: '_chainlinkL2SequencerUptimeFeed', + internalType: 'address', + type: 'address', + }, + { name: '_weth', internalType: 'address', type: 'address' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'DOMAIN_SEPARATOR', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'LOAN_TO_VALUE_DENOMINATOR', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MAX_INTERMEDIARY_DENOMINATIONS', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MULTIPROPOSAL_DOMAIN_SEPARATOR', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MULTIPROPOSAL_TYPEHASH', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'PROPOSAL_TYPEHASH', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'VERSION', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'WETH', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'acceptor', internalType: 'address', type: 'address' }, + { name: 'refinancingLoanId', internalType: 'uint256', type: 'uint256' }, + { name: 'proposalData', internalType: 'bytes', type: 'bytes' }, + { + name: 'proposalInclusionProof', + internalType: 'bytes32[]', + type: 'bytes32[]', + }, + { name: 'signature', internalType: 'bytes', type: 'bytes' }, + ], + name: 'acceptProposal', + outputs: [ + { name: 'proposalHash', internalType: 'bytes32', type: 'bytes32' }, + { + name: 'loanTerms', + internalType: 'struct PWNSimpleLoan.Terms', + type: 'tuple', + components: [ + { name: 'lender', internalType: 'address', type: 'address' }, + { name: 'borrower', internalType: 'address', type: 'address' }, + { name: 'duration', internalType: 'uint32', type: 'uint32' }, + { + name: 'collateral', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'assetAddress', + internalType: 'address', + type: 'address', + }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + }, + { + name: 'credit', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'assetAddress', + internalType: 'address', + type: 'address', + }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'lenderSpecHash', internalType: 'bytes32', type: 'bytes32' }, + { + name: 'borrowerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + ], + }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'chainlinkFeedRegistry', + outputs: [ + { + name: '', + internalType: 'contract IChainlinkFeedRegistryLike', + type: 'address', + }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'chainlinkL2SequencerUptimeFeed', + outputs: [ + { + name: '', + internalType: 'contract IChainlinkAggregatorLike', + type: 'address', + }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'config', + outputs: [ + { name: '', internalType: 'contract PWNConfig', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'proposalData', internalType: 'bytes', type: 'bytes' }], + name: 'decodeProposalData', + outputs: [ + { + name: '', + internalType: 'struct PWNSimpleLoanUniswapV3LPSetProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'tokenAAllowlist', + internalType: 'address[]', + type: 'address[]', + }, + { + name: 'tokenBAllowlist', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + { + name: '', + internalType: + 'struct PWNSimpleLoanUniswapV3LPSetProposal.ProposalValues', + type: 'tuple', + components: [ + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { name: 'tokenAIndex', internalType: 'uint256', type: 'uint256' }, + { name: 'tokenBIndex', internalType: 'uint256', type: 'uint256' }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + ], + }, + ], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanUniswapV3LPSetProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'tokenAAllowlist', + internalType: 'address[]', + type: 'address[]', + }, + { + name: 'tokenBAllowlist', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + { + name: 'proposalValues', + internalType: + 'struct PWNSimpleLoanUniswapV3LPSetProposal.ProposalValues', + type: 'tuple', + components: [ + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { name: 'tokenAIndex', internalType: 'uint256', type: 'uint256' }, + { name: 'tokenBIndex', internalType: 'uint256', type: 'uint256' }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + ], + }, + ], + name: 'encodeProposalData', + outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { name: 'token0Denominator', internalType: 'bool', type: 'bool' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + ], + name: 'getCreditAmount', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'multiproposal', + internalType: 'struct PWNSimpleLoanProposal.Multiproposal', + type: 'tuple', + components: [ + { + name: 'multiproposalMerkleRoot', + internalType: 'bytes32', + type: 'bytes32', + }, + ], + }, + ], + name: 'getMultiproposalHash', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanUniswapV3LPSetProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'tokenAAllowlist', + internalType: 'address[]', + type: 'address[]', + }, + { + name: 'tokenBAllowlist', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + ], + name: 'getProposalHash', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'hub', + outputs: [{ name: '', internalType: 'contract PWNHub', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanUniswapV3LPSetProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'tokenAAllowlist', + internalType: 'address[]', + type: 'address[]', + }, + { + name: 'tokenBAllowlist', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + ], + name: 'makeProposal', + outputs: [ + { name: 'proposalHash', internalType: 'bytes32', type: 'bytes32' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + name: 'proposalsMade', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + name: 'revokeNonce', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'revokedNonce', + outputs: [ + { name: '', internalType: 'contract PWNRevokedNonce', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'uniswapNFTPositionManager', + outputs: [ + { + name: '', + internalType: 'contract INonfungiblePositionManager', + type: 'address', + }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'uniswapV3Factory', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'utilizedCredit', + outputs: [ + { name: '', internalType: 'contract PWNUtilizedCredit', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'proposalHash', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + { + name: 'proposer', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanUniswapV3LPSetProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'tokenAAllowlist', + internalType: 'address[]', + type: 'address[]', + }, + { + name: 'tokenBAllowlist', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + indexed: false, + }, + ], + name: 'ProposalMade', + }, + { + type: 'error', + inputs: [{ name: 'addr', internalType: 'address', type: 'address' }], + name: 'AcceptorIsProposer', + }, + { + type: 'error', + inputs: [ + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'tag', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'AddressMissingHubTag', + }, + { + type: 'error', + inputs: [{ name: 'addr', internalType: 'address', type: 'address' }], + name: 'CallerIsNotStatedProposer', + }, + { + type: 'error', + inputs: [ + { name: 'caller', internalType: 'address', type: 'address' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + name: 'CallerNotLoanContract', + }, + { + type: 'error', + inputs: [ + { name: 'feed', internalType: 'address', type: 'address' }, + { name: 'updatedAt', internalType: 'uint256', type: 'uint256' }, + ], + name: 'ChainlinkFeedPriceTooOld', + }, + { + type: 'error', + inputs: [ + { name: 'feed', internalType: 'address', type: 'address' }, + { name: 'price', internalType: 'int256', type: 'int256' }, + { name: 'updatedAt', internalType: 'uint256', type: 'uint256' }, + ], + name: 'ChainlinkFeedReturnedNegativePrice', + }, + { type: 'error', inputs: [], name: 'ChainlinkInvalidInputLenghts' }, + { + type: 'error', + inputs: [ + { name: 'defaultDate', internalType: 'uint32', type: 'uint32' }, + { name: 'current', internalType: 'uint32', type: 'uint32' }, + ], + name: 'DefaultDateInPast', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'uint256', type: 'uint256' }, + { name: 'expiration', internalType: 'uint256', type: 'uint256' }, + ], + name: 'Expired', + }, + { + type: 'error', + inputs: [ + { name: 'timeSinceUp', internalType: 'uint256', type: 'uint256' }, + { name: 'gracePeriod', internalType: 'uint256', type: 'uint256' }, + ], + name: 'GracePeriodNotOver', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'uint256', type: 'uint256' }, + { name: 'limit', internalType: 'uint256', type: 'uint256' }, + ], + name: 'InsufficientCreditAmount', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'uint256', type: 'uint256' }, + { name: 'limit', internalType: 'uint256', type: 'uint256' }, + ], + name: 'IntermediaryDenominationsOutOfBounds', + }, + { + type: 'error', + inputs: [ + { name: 'acceptorController', internalType: 'address', type: 'address' }, + ], + name: 'InvalidAcceptorController', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'bytes32', type: 'bytes32' }, + { name: 'proposed', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'InvalidCollateralStateFingerprint', + }, + { type: 'error', inputs: [], name: 'InvalidLPTokenPair' }, + { + type: 'error', + inputs: [ + { name: 'refinancingLoanId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'InvalidRefinancingLoanId', + }, + { + type: 'error', + inputs: [ + { name: 'signer', internalType: 'address', type: 'address' }, + { name: 'digest', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'InvalidSignature', + }, + { + type: 'error', + inputs: [{ name: 'length', internalType: 'uint256', type: 'uint256' }], + name: 'InvalidSignatureLength', + }, + { type: 'error', inputs: [], name: 'L2SequencerDown' }, + { type: 'error', inputs: [], name: 'MinCreditAmountNotSet' }, + { type: 'error', inputs: [], name: 'MissingStateFingerprintComputer' }, + { + type: 'error', + inputs: [ + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + name: 'NonceNotUsable', + }, + { type: 'error', inputs: [], name: 'T' }, +] as const + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// PWNSimpleLoanUniswapV3LPSetProposalHarness +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi = [ + { + type: 'constructor', + inputs: [ + { name: '_hub', internalType: 'address', type: 'address' }, + { name: '_revokedNonce', internalType: 'address', type: 'address' }, + { name: '_config', internalType: 'address', type: 'address' }, + { name: '_utilizedCredit', internalType: 'address', type: 'address' }, + { name: '_uniswapV3Factory', internalType: 'address', type: 'address' }, + { + name: '_uniswapNFTPositionManager', + internalType: 'address', + type: 'address', + }, + { + name: '_chainlinkFeedRegistry', + internalType: 'address', + type: 'address', + }, + { + name: '_chainlinkL2SequencerUptimeFeed', + internalType: 'address', + type: 'address', + }, + { name: '_weth', internalType: 'address', type: 'address' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'DOMAIN_SEPARATOR', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'LOAN_TO_VALUE_DENOMINATOR', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MAX_INTERMEDIARY_DENOMINATIONS', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MULTIPROPOSAL_DOMAIN_SEPARATOR', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MULTIPROPOSAL_TYPEHASH', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'PROPOSAL_TYPEHASH', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'VERSION', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'WETH', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'acceptor', internalType: 'address', type: 'address' }, + { name: 'refinancingLoanId', internalType: 'uint256', type: 'uint256' }, + { name: 'proposalData', internalType: 'bytes', type: 'bytes' }, + { + name: 'proposalInclusionProof', + internalType: 'bytes32[]', + type: 'bytes32[]', + }, + { name: 'signature', internalType: 'bytes', type: 'bytes' }, + ], + name: 'acceptProposal', + outputs: [ + { name: 'proposalHash', internalType: 'bytes32', type: 'bytes32' }, + { + name: 'loanTerms', + internalType: 'struct PWNSimpleLoan.Terms', + type: 'tuple', + components: [ + { name: 'lender', internalType: 'address', type: 'address' }, + { name: 'borrower', internalType: 'address', type: 'address' }, + { name: 'duration', internalType: 'uint32', type: 'uint32' }, + { + name: 'collateral', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'assetAddress', + internalType: 'address', + type: 'address', + }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + }, + { + name: 'credit', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { + name: 'assetAddress', + internalType: 'address', + type: 'address', + }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'lenderSpecHash', internalType: 'bytes32', type: 'bytes32' }, + { + name: 'borrowerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + ], + }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'chainlinkFeedRegistry', + outputs: [ + { + name: '', + internalType: 'contract IChainlinkFeedRegistryLike', + type: 'address', + }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'chainlinkL2SequencerUptimeFeed', + outputs: [ + { + name: '', + internalType: 'contract IChainlinkAggregatorLike', + type: 'address', + }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'config', + outputs: [ + { name: '', internalType: 'contract PWNConfig', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'proposalData', internalType: 'bytes', type: 'bytes' }], + name: 'decodeProposalData', + outputs: [ + { + name: '', + internalType: 'struct PWNSimpleLoanUniswapV3LPSetProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'tokenAAllowlist', + internalType: 'address[]', + type: 'address[]', + }, + { + name: 'tokenBAllowlist', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + { + name: '', + internalType: + 'struct PWNSimpleLoanUniswapV3LPSetProposal.ProposalValues', + type: 'tuple', + components: [ + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { name: 'tokenAIndex', internalType: 'uint256', type: 'uint256' }, + { name: 'tokenBIndex', internalType: 'uint256', type: 'uint256' }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + ], + }, + ], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanUniswapV3LPSetProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'tokenAAllowlist', + internalType: 'address[]', + type: 'address[]', + }, + { + name: 'tokenBAllowlist', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + { + name: 'proposalValues', + internalType: + 'struct PWNSimpleLoanUniswapV3LPSetProposal.ProposalValues', + type: 'tuple', + components: [ + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { name: 'tokenAIndex', internalType: 'uint256', type: 'uint256' }, + { name: 'tokenBIndex', internalType: 'uint256', type: 'uint256' }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + ], + }, + ], + name: 'encodeProposalData', + outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanUniswapV3LPSetProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'tokenAAllowlist', + internalType: 'address[]', + type: 'address[]', + }, + { + name: 'tokenBAllowlist', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + ], + name: 'exposed_erc712EncodeProposal', + outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { name: 'collateralId', internalType: 'uint256', type: 'uint256' }, + { name: 'token0Denominator', internalType: 'bool', type: 'bool' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + ], + name: 'getCreditAmount', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'multiproposal', + internalType: 'struct PWNSimpleLoanProposal.Multiproposal', + type: 'tuple', + components: [ + { + name: 'multiproposalMerkleRoot', + internalType: 'bytes32', + type: 'bytes32', + }, + ], + }, + ], + name: 'getMultiproposalHash', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanUniswapV3LPSetProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'tokenAAllowlist', + internalType: 'address[]', + type: 'address[]', + }, + { + name: 'tokenBAllowlist', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + ], + name: 'getProposalHash', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'hub', + outputs: [{ name: '', internalType: 'contract PWNHub', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanUniswapV3LPSetProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'tokenAAllowlist', + internalType: 'address[]', + type: 'address[]', + }, + { + name: 'tokenBAllowlist', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + }, + ], + name: 'makeProposal', + outputs: [ + { name: 'proposalHash', internalType: 'bytes32', type: 'bytes32' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + name: 'proposalsMade', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + name: 'revokeNonce', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'revokedNonce', + outputs: [ + { name: '', internalType: 'contract PWNRevokedNonce', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'uniswapNFTPositionManager', + outputs: [ + { + name: '', + internalType: 'contract INonfungiblePositionManager', + type: 'address', + }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'uniswapV3Factory', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'utilizedCredit', + outputs: [ + { name: '', internalType: 'contract PWNUtilizedCredit', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'proposalHash', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + { + name: 'proposer', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'proposal', + internalType: 'struct PWNSimpleLoanUniswapV3LPSetProposal.Proposal', + type: 'tuple', + components: [ + { + name: 'tokenAAllowlist', + internalType: 'address[]', + type: 'address[]', + }, + { + name: 'tokenBAllowlist', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'creditAddress', internalType: 'address', type: 'address' }, + { + name: 'feedIntermediaryDenominations', + internalType: 'address[]', + type: 'address[]', + }, + { name: 'feedInvertFlags', internalType: 'bool[]', type: 'bool[]' }, + { name: 'loanToValue', internalType: 'uint256', type: 'uint256' }, + { name: 'minCreditAmount', internalType: 'uint256', type: 'uint256' }, + { + name: 'availableCreditLimit', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'utilizedCreditId', + internalType: 'bytes32', + type: 'bytes32', + }, + { + name: 'fixedInterestAmount', + internalType: 'uint256', + type: 'uint256', + }, + { + name: 'accruingInterestAPR', + internalType: 'uint24', + type: 'uint24', + }, + { name: 'durationOrDate', internalType: 'uint32', type: 'uint32' }, + { name: 'expiration', internalType: 'uint40', type: 'uint40' }, + { + name: 'acceptorController', + internalType: 'address', + type: 'address', + }, + { + name: 'acceptorControllerData', + internalType: 'bytes', + type: 'bytes', + }, + { name: 'proposer', internalType: 'address', type: 'address' }, + { + name: 'proposerSpecHash', + internalType: 'bytes32', + type: 'bytes32', + }, + { name: 'isOffer', internalType: 'bool', type: 'bool' }, + { + name: 'refinancingLoanId', + internalType: 'uint256', + type: 'uint256', + }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + indexed: false, + }, + ], + name: 'ProposalMade', + }, + { + type: 'error', + inputs: [{ name: 'addr', internalType: 'address', type: 'address' }], + name: 'AcceptorIsProposer', + }, + { + type: 'error', + inputs: [ + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'tag', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'AddressMissingHubTag', + }, + { + type: 'error', + inputs: [{ name: 'addr', internalType: 'address', type: 'address' }], + name: 'CallerIsNotStatedProposer', + }, + { + type: 'error', + inputs: [ + { name: 'caller', internalType: 'address', type: 'address' }, + { name: 'loanContract', internalType: 'address', type: 'address' }, + ], + name: 'CallerNotLoanContract', + }, + { + type: 'error', + inputs: [ + { name: 'feed', internalType: 'address', type: 'address' }, + { name: 'updatedAt', internalType: 'uint256', type: 'uint256' }, + ], + name: 'ChainlinkFeedPriceTooOld', + }, + { + type: 'error', + inputs: [ + { name: 'feed', internalType: 'address', type: 'address' }, + { name: 'price', internalType: 'int256', type: 'int256' }, + { name: 'updatedAt', internalType: 'uint256', type: 'uint256' }, + ], + name: 'ChainlinkFeedReturnedNegativePrice', + }, + { type: 'error', inputs: [], name: 'ChainlinkInvalidInputLenghts' }, + { + type: 'error', + inputs: [ + { name: 'defaultDate', internalType: 'uint32', type: 'uint32' }, + { name: 'current', internalType: 'uint32', type: 'uint32' }, + ], + name: 'DefaultDateInPast', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'uint256', type: 'uint256' }, + { name: 'expiration', internalType: 'uint256', type: 'uint256' }, + ], + name: 'Expired', + }, + { + type: 'error', + inputs: [ + { name: 'timeSinceUp', internalType: 'uint256', type: 'uint256' }, + { name: 'gracePeriod', internalType: 'uint256', type: 'uint256' }, + ], + name: 'GracePeriodNotOver', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'uint256', type: 'uint256' }, + { name: 'limit', internalType: 'uint256', type: 'uint256' }, + ], + name: 'InsufficientCreditAmount', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'uint256', type: 'uint256' }, + { name: 'limit', internalType: 'uint256', type: 'uint256' }, + ], + name: 'IntermediaryDenominationsOutOfBounds', + }, + { + type: 'error', + inputs: [ + { name: 'acceptorController', internalType: 'address', type: 'address' }, + ], + name: 'InvalidAcceptorController', + }, + { + type: 'error', + inputs: [ + { name: 'current', internalType: 'bytes32', type: 'bytes32' }, + { name: 'proposed', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'InvalidCollateralStateFingerprint', + }, + { type: 'error', inputs: [], name: 'InvalidLPTokenPair' }, + { + type: 'error', + inputs: [ + { name: 'refinancingLoanId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'InvalidRefinancingLoanId', + }, + { + type: 'error', + inputs: [ + { name: 'signer', internalType: 'address', type: 'address' }, + { name: 'digest', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'InvalidSignature', + }, + { + type: 'error', + inputs: [{ name: 'length', internalType: 'uint256', type: 'uint256' }], + name: 'InvalidSignatureLength', + }, + { type: 'error', inputs: [], name: 'L2SequencerDown' }, + { type: 'error', inputs: [], name: 'MinCreditAmountNotSet' }, + { type: 'error', inputs: [], name: 'MissingStateFingerprintComputer' }, + { + type: 'error', + inputs: [ + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'nonceSpace', internalType: 'uint256', type: 'uint256' }, + { name: 'nonce', internalType: 'uint256', type: 'uint256' }, + ], + name: 'NonceNotUsable', + }, + { type: 'error', inputs: [], name: 'T' }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // PWNUtilizedCredit ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const pwnUtilizedCreditAbi = [ - { - type: "constructor", - inputs: [ - { name: "_hub", internalType: "address", type: "address" }, - { name: "_accessTag", internalType: "bytes32", type: "bytes32" }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "accessTag", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "hub", - outputs: [{ name: "", internalType: "contract PWNHub", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "owner", internalType: "address", type: "address" }, - { name: "id", internalType: "bytes32", type: "bytes32" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - { name: "limit", internalType: "uint256", type: "uint256" }, - ], - name: "utilizeCredit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "", internalType: "address", type: "address" }, - { name: "", internalType: "bytes32", type: "bytes32" }, - ], - name: "utilizedCredit", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "error", - inputs: [ - { name: "addr", internalType: "address", type: "address" }, - { name: "tag", internalType: "bytes32", type: "bytes32" }, - ], - name: "AddressMissingHubTag", - }, - { - type: "error", - inputs: [ - { name: "owner", internalType: "address", type: "address" }, - { name: "id", internalType: "bytes32", type: "bytes32" }, - { name: "utilized", internalType: "uint256", type: "uint256" }, - { name: "limit", internalType: "uint256", type: "uint256" }, - ], - name: "AvailableCreditLimitExceeded", - }, -] as const; + { + type: 'constructor', + inputs: [ + { name: '_hub', internalType: 'address', type: 'address' }, + { name: '_accessTag', internalType: 'bytes32', type: 'bytes32' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'accessTag', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'hub', + outputs: [{ name: '', internalType: 'contract PWNHub', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'owner', internalType: 'address', type: 'address' }, + { name: 'id', internalType: 'bytes32', type: 'bytes32' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + { name: 'limit', internalType: 'uint256', type: 'uint256' }, + ], + name: 'utilizeCredit', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '', internalType: 'address', type: 'address' }, + { name: '', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'utilizedCredit', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'error', + inputs: [ + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'tag', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'AddressMissingHubTag', + }, + { + type: 'error', + inputs: [ + { name: 'owner', internalType: 'address', type: 'address' }, + { name: 'id', internalType: 'bytes32', type: 'bytes32' }, + { name: 'utilized', internalType: 'uint256', type: 'uint256' }, + { name: 'limit', internalType: 'uint256', type: 'uint256' }, + ], + name: 'AvailableCreditLimitExceeded', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // PWNVault ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const pwnVaultAbi = [ - { - type: "function", - inputs: [ - { name: "", internalType: "address", type: "address" }, - { name: "", internalType: "address", type: "address" }, - { name: "", internalType: "uint256[]", type: "uint256[]" }, - { name: "", internalType: "uint256[]", type: "uint256[]" }, - { name: "", internalType: "bytes", type: "bytes" }, - ], - name: "onERC1155BatchReceived", - outputs: [{ name: "", internalType: "bytes4", type: "bytes4" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "operator", internalType: "address", type: "address" }, - { name: "", internalType: "address", type: "address" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "bytes", type: "bytes" }, - ], - name: "onERC1155Received", - outputs: [{ name: "", internalType: "bytes4", type: "bytes4" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "operator", internalType: "address", type: "address" }, - { name: "", internalType: "address", type: "address" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "bytes", type: "bytes" }, - ], - name: "onERC721Received", - outputs: [{ name: "", internalType: "bytes4", type: "bytes4" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "interfaceId", internalType: "bytes4", type: "bytes4" }], - name: "supportsInterface", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "pure", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "asset", - internalType: "struct MultiToken.Asset", - type: "tuple", - components: [ - { - name: "category", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { name: "assetAddress", internalType: "address", type: "address" }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - indexed: false, - }, - { - name: "poolAdapter", - internalType: "address", - type: "address", - indexed: true, - }, - { name: "pool", internalType: "address", type: "address", indexed: true }, - { - name: "owner", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "PoolSupply", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "asset", - internalType: "struct MultiToken.Asset", - type: "tuple", - components: [ - { - name: "category", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { name: "assetAddress", internalType: "address", type: "address" }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - indexed: false, - }, - { - name: "poolAdapter", - internalType: "address", - type: "address", - indexed: true, - }, - { name: "pool", internalType: "address", type: "address", indexed: true }, - { - name: "owner", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "PoolWithdraw", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "asset", - internalType: "struct MultiToken.Asset", - type: "tuple", - components: [ - { - name: "category", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { name: "assetAddress", internalType: "address", type: "address" }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - indexed: false, - }, - { - name: "origin", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "VaultPull", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "asset", - internalType: "struct MultiToken.Asset", - type: "tuple", - components: [ - { - name: "category", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { name: "assetAddress", internalType: "address", type: "address" }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - indexed: false, - }, - { - name: "beneficiary", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "VaultPush", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "asset", - internalType: "struct MultiToken.Asset", - type: "tuple", - components: [ - { - name: "category", - internalType: "enum MultiToken.Category", - type: "uint8", - }, - { name: "assetAddress", internalType: "address", type: "address" }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - indexed: false, - }, - { - name: "origin", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "beneficiary", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "VaultPushFrom", - }, - { type: "error", inputs: [], name: "IncompleteTransfer" }, - { type: "error", inputs: [], name: "UnsupportedTransferFunction" }, - { - type: "error", - inputs: [{ name: "addr", internalType: "address", type: "address" }], - name: "VaultTransferSameSourceAndDestination", - }, -] as const; + { + type: 'function', + inputs: [ + { name: '', internalType: 'address', type: 'address' }, + { name: '', internalType: 'address', type: 'address' }, + { name: '', internalType: 'uint256[]', type: 'uint256[]' }, + { name: '', internalType: 'uint256[]', type: 'uint256[]' }, + { name: '', internalType: 'bytes', type: 'bytes' }, + ], + name: 'onERC1155BatchReceived', + outputs: [{ name: '', internalType: 'bytes4', type: 'bytes4' }], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { name: 'operator', internalType: 'address', type: 'address' }, + { name: '', internalType: 'address', type: 'address' }, + { name: '', internalType: 'uint256', type: 'uint256' }, + { name: '', internalType: 'uint256', type: 'uint256' }, + { name: '', internalType: 'bytes', type: 'bytes' }, + ], + name: 'onERC1155Received', + outputs: [{ name: '', internalType: 'bytes4', type: 'bytes4' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'operator', internalType: 'address', type: 'address' }, + { name: '', internalType: 'address', type: 'address' }, + { name: '', internalType: 'uint256', type: 'uint256' }, + { name: '', internalType: 'bytes', type: 'bytes' }, + ], + name: 'onERC721Received', + outputs: [{ name: '', internalType: 'bytes4', type: 'bytes4' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'interfaceId', internalType: 'bytes4', type: 'bytes4' }], + name: 'supportsInterface', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'pure', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'asset', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { name: 'assetAddress', internalType: 'address', type: 'address' }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + indexed: false, + }, + { + name: 'poolAdapter', + internalType: 'address', + type: 'address', + indexed: true, + }, + { name: 'pool', internalType: 'address', type: 'address', indexed: true }, + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'PoolSupply', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'asset', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { name: 'assetAddress', internalType: 'address', type: 'address' }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + indexed: false, + }, + { + name: 'poolAdapter', + internalType: 'address', + type: 'address', + indexed: true, + }, + { name: 'pool', internalType: 'address', type: 'address', indexed: true }, + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'PoolWithdraw', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'asset', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { name: 'assetAddress', internalType: 'address', type: 'address' }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + indexed: false, + }, + { + name: 'origin', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'VaultPull', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'asset', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { name: 'assetAddress', internalType: 'address', type: 'address' }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + indexed: false, + }, + { + name: 'beneficiary', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'VaultPush', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'asset', + internalType: 'struct MultiToken.Asset', + type: 'tuple', + components: [ + { + name: 'category', + internalType: 'enum MultiToken.Category', + type: 'uint8', + }, + { name: 'assetAddress', internalType: 'address', type: 'address' }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + indexed: false, + }, + { + name: 'origin', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'beneficiary', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'VaultPushFrom', + }, + { type: 'error', inputs: [], name: 'IncompleteTransfer' }, + { type: 'error', inputs: [], name: 'UnsupportedTransferFunction' }, + { + type: 'error', + inputs: [{ name: 'addr', internalType: 'address', type: 'address' }], + name: 'VaultTransferSameSourceAndDestination', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Proxy ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const proxyAbi = [ - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, -] as const; + { type: 'fallback', stateMutability: 'payable' }, + { type: 'receive', stateMutability: 'payable' }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // T1155 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const t1155Abi = [ - { - type: "function", - inputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "id", internalType: "uint256", type: "uint256" }, - ], - name: "balanceOf", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "accounts", internalType: "address[]", type: "address[]" }, - { name: "ids", internalType: "uint256[]", type: "uint256[]" }, - ], - name: "balanceOfBatch", - outputs: [{ name: "", internalType: "uint256[]", type: "uint256[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "owner", internalType: "address", type: "address" }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "burn", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "operator", internalType: "address", type: "address" }, - ], - name: "isApprovedForAll", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "owner", internalType: "address", type: "address" }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "mint", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "ids", internalType: "uint256[]", type: "uint256[]" }, - { name: "amounts", internalType: "uint256[]", type: "uint256[]" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "safeBatchTransferFrom", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "id", internalType: "uint256", type: "uint256" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "safeTransferFrom", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "operator", internalType: "address", type: "address" }, - { name: "approved", internalType: "bool", type: "bool" }, - ], - name: "setApprovalForAll", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "interfaceId", internalType: "bytes4", type: "bytes4" }], - name: "supportsInterface", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "uri", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "account", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "operator", - internalType: "address", - type: "address", - indexed: true, - }, - { name: "approved", internalType: "bool", type: "bool", indexed: false }, - ], - name: "ApprovalForAll", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "operator", - internalType: "address", - type: "address", - indexed: true, - }, - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - { - name: "ids", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "values", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - ], - name: "TransferBatch", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "operator", - internalType: "address", - type: "address", - indexed: true, - }, - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - { name: "id", internalType: "uint256", type: "uint256", indexed: false }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "TransferSingle", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "value", internalType: "string", type: "string", indexed: false }, - { name: "id", internalType: "uint256", type: "uint256", indexed: true }, - ], - name: "URI", - }, -] as const; + { + type: 'function', + inputs: [ + { name: 'account', internalType: 'address', type: 'address' }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + ], + name: 'balanceOf', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'accounts', internalType: 'address[]', type: 'address[]' }, + { name: 'ids', internalType: 'uint256[]', type: 'uint256[]' }, + ], + name: 'balanceOfBatch', + outputs: [{ name: '', internalType: 'uint256[]', type: 'uint256[]' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'owner', internalType: 'address', type: 'address' }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'burn', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'account', internalType: 'address', type: 'address' }, + { name: 'operator', internalType: 'address', type: 'address' }, + ], + name: 'isApprovedForAll', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'owner', internalType: 'address', type: 'address' }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'mint', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'from', internalType: 'address', type: 'address' }, + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'ids', internalType: 'uint256[]', type: 'uint256[]' }, + { name: 'amounts', internalType: 'uint256[]', type: 'uint256[]' }, + { name: 'data', internalType: 'bytes', type: 'bytes' }, + ], + name: 'safeBatchTransferFrom', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'from', internalType: 'address', type: 'address' }, + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'id', internalType: 'uint256', type: 'uint256' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + { name: 'data', internalType: 'bytes', type: 'bytes' }, + ], + name: 'safeTransferFrom', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'operator', internalType: 'address', type: 'address' }, + { name: 'approved', internalType: 'bool', type: 'bool' }, + ], + name: 'setApprovalForAll', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'interfaceId', internalType: 'bytes4', type: 'bytes4' }], + name: 'supportsInterface', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + name: 'uri', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'account', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'operator', + internalType: 'address', + type: 'address', + indexed: true, + }, + { name: 'approved', internalType: 'bool', type: 'bool', indexed: false }, + ], + name: 'ApprovalForAll', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'operator', + internalType: 'address', + type: 'address', + indexed: true, + }, + { name: 'from', internalType: 'address', type: 'address', indexed: true }, + { name: 'to', internalType: 'address', type: 'address', indexed: true }, + { + name: 'ids', + internalType: 'uint256[]', + type: 'uint256[]', + indexed: false, + }, + { + name: 'values', + internalType: 'uint256[]', + type: 'uint256[]', + indexed: false, + }, + ], + name: 'TransferBatch', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'operator', + internalType: 'address', + type: 'address', + indexed: true, + }, + { name: 'from', internalType: 'address', type: 'address', indexed: true }, + { name: 'to', internalType: 'address', type: 'address', indexed: true }, + { name: 'id', internalType: 'uint256', type: 'uint256', indexed: false }, + { + name: 'value', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'TransferSingle', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'value', internalType: 'string', type: 'string', indexed: false }, + { name: 'id', internalType: 'uint256', type: 'uint256', indexed: true }, + ], + name: 'URI', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // T20 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const t20Abi = [ - { - type: "function", - inputs: [ - { name: "owner", internalType: "address", type: "address" }, - { name: "spender", internalType: "address", type: "address" }, - ], - name: "allowance", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "approve", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "account", internalType: "address", type: "address" }], - name: "balanceOf", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "owner", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "burn", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "decimals", - outputs: [{ name: "", internalType: "uint8", type: "uint8" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "subtractedValue", internalType: "uint256", type: "uint256" }, - ], - name: "decreaseAllowance", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "addedValue", internalType: "uint256", type: "uint256" }, - ], - name: "increaseAllowance", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "owner", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "mint", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "name", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "symbol", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "totalSupply", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "to", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "transfer", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "transferFrom", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "owner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "spender", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Approval", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Transfer", - }, -] as const; + { + type: 'function', + inputs: [ + { name: 'owner', internalType: 'address', type: 'address' }, + { name: 'spender', internalType: 'address', type: 'address' }, + ], + name: 'allowance', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'spender', internalType: 'address', type: 'address' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'approve', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'account', internalType: 'address', type: 'address' }], + name: 'balanceOf', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'owner', internalType: 'address', type: 'address' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'burn', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'decimals', + outputs: [{ name: '', internalType: 'uint8', type: 'uint8' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'spender', internalType: 'address', type: 'address' }, + { name: 'subtractedValue', internalType: 'uint256', type: 'uint256' }, + ], + name: 'decreaseAllowance', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'spender', internalType: 'address', type: 'address' }, + { name: 'addedValue', internalType: 'uint256', type: 'uint256' }, + ], + name: 'increaseAllowance', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'owner', internalType: 'address', type: 'address' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'mint', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'name', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'symbol', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'totalSupply', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'transfer', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'from', internalType: 'address', type: 'address' }, + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'transferFrom', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'nonpayable', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'spender', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'value', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'Approval', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'from', internalType: 'address', type: 'address', indexed: true }, + { name: 'to', internalType: 'address', type: 'address', indexed: true }, + { + name: 'value', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'Transfer', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // T721 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const t721Abi = [ - { - type: "function", - inputs: [ - { name: "to", internalType: "address", type: "address" }, - { name: "tokenId", internalType: "uint256", type: "uint256" }, - ], - name: "approve", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "owner", internalType: "address", type: "address" }], - name: "balanceOf", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "tokenId", internalType: "uint256", type: "uint256" }], - name: "burn", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "tokenId", internalType: "uint256", type: "uint256" }], - name: "getApproved", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "owner", internalType: "address", type: "address" }, - { name: "operator", internalType: "address", type: "address" }, - ], - name: "isApprovedForAll", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "owner", internalType: "address", type: "address" }, - { name: "tokenId", internalType: "uint256", type: "uint256" }, - ], - name: "mint", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "name", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "tokenId", internalType: "uint256", type: "uint256" }], - name: "ownerOf", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "tokenId", internalType: "uint256", type: "uint256" }, - ], - name: "safeTransferFrom", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "tokenId", internalType: "uint256", type: "uint256" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "safeTransferFrom", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "operator", internalType: "address", type: "address" }, - { name: "approved", internalType: "bool", type: "bool" }, - ], - name: "setApprovalForAll", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "interfaceId", internalType: "bytes4", type: "bytes4" }], - name: "supportsInterface", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "symbol", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "tokenId", internalType: "uint256", type: "uint256" }], - name: "tokenURI", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "tokenId", internalType: "uint256", type: "uint256" }, - ], - name: "transferFrom", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "owner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "approved", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "tokenId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "Approval", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "owner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "operator", - internalType: "address", - type: "address", - indexed: true, - }, - { name: "approved", internalType: "bool", type: "bool", indexed: false }, - ], - name: "ApprovalForAll", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - { - name: "tokenId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "Transfer", - }, -] as const; + { + type: 'function', + inputs: [ + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'approve', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'owner', internalType: 'address', type: 'address' }], + name: 'balanceOf', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'tokenId', internalType: 'uint256', type: 'uint256' }], + name: 'burn', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'tokenId', internalType: 'uint256', type: 'uint256' }], + name: 'getApproved', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'owner', internalType: 'address', type: 'address' }, + { name: 'operator', internalType: 'address', type: 'address' }, + ], + name: 'isApprovedForAll', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'owner', internalType: 'address', type: 'address' }, + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'mint', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'name', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'tokenId', internalType: 'uint256', type: 'uint256' }], + name: 'ownerOf', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'from', internalType: 'address', type: 'address' }, + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'safeTransferFrom', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'from', internalType: 'address', type: 'address' }, + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + { name: 'data', internalType: 'bytes', type: 'bytes' }, + ], + name: 'safeTransferFrom', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'operator', internalType: 'address', type: 'address' }, + { name: 'approved', internalType: 'bool', type: 'bool' }, + ], + name: 'setApprovalForAll', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'interfaceId', internalType: 'bytes4', type: 'bytes4' }], + name: 'supportsInterface', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'symbol', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'tokenId', internalType: 'uint256', type: 'uint256' }], + name: 'tokenURI', + outputs: [{ name: '', internalType: 'string', type: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'from', internalType: 'address', type: 'address' }, + { name: 'to', internalType: 'address', type: 'address' }, + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'transferFrom', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'approved', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'tokenId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'Approval', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'operator', + internalType: 'address', + type: 'address', + indexed: true, + }, + { name: 'approved', internalType: 'bool', type: 'bool', indexed: false }, + ], + name: 'ApprovalForAll', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'from', internalType: 'address', type: 'address', indexed: true }, + { name: 'to', internalType: 'address', type: 'address', indexed: true }, + { + name: 'tokenId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'Transfer', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Test ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const testAbi = [ - { - type: "function", - inputs: [], - name: "IS_TEST", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "excludeArtifacts", - outputs: [ - { - name: "excludedArtifacts_", - internalType: "string[]", - type: "string[]", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "excludeContracts", - outputs: [ - { - name: "excludedContracts_", - internalType: "address[]", - type: "address[]", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "excludeSenders", - outputs: [ - { - name: "excludedSenders_", - internalType: "address[]", - type: "address[]", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "failed", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "targetArtifactSelectors", - outputs: [ - { - name: "targetedArtifactSelectors_", - internalType: "struct StdInvariant.FuzzSelector[]", - type: "tuple[]", - components: [ - { name: "addr", internalType: "address", type: "address" }, - { name: "selectors", internalType: "bytes4[]", type: "bytes4[]" }, - ], - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "targetArtifacts", - outputs: [ - { - name: "targetedArtifacts_", - internalType: "string[]", - type: "string[]", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "targetContracts", - outputs: [ - { - name: "targetedContracts_", - internalType: "address[]", - type: "address[]", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "targetInterfaces", - outputs: [ - { - name: "targetedInterfaces_", - internalType: "struct StdInvariant.FuzzInterface[]", - type: "tuple[]", - components: [ - { name: "addr", internalType: "address", type: "address" }, - { name: "artifacts", internalType: "string[]", type: "string[]" }, - ], - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "targetSelectors", - outputs: [ - { - name: "targetedSelectors_", - internalType: "struct StdInvariant.FuzzSelector[]", - type: "tuple[]", - components: [ - { name: "addr", internalType: "address", type: "address" }, - { name: "selectors", internalType: "bytes4[]", type: "bytes4[]" }, - ], - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "targetSenders", - outputs: [ - { - name: "targetedSenders_", - internalType: "address[]", - type: "address[]", - }, - ], - stateMutability: "view", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "", internalType: "string", type: "string", indexed: false }, - ], - name: "log", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "", internalType: "address", type: "address", indexed: false }, - ], - name: "log_address", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "val", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - ], - name: "log_array", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "val", - internalType: "int256[]", - type: "int256[]", - indexed: false, - }, - ], - name: "log_array", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "val", - internalType: "address[]", - type: "address[]", - indexed: false, - }, - ], - name: "log_array", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "", internalType: "bytes", type: "bytes", indexed: false }, - ], - name: "log_bytes", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "", internalType: "bytes32", type: "bytes32", indexed: false }, - ], - name: "log_bytes32", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "", internalType: "int256", type: "int256", indexed: false }, - ], - name: "log_int", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "key", internalType: "string", type: "string", indexed: false }, - { name: "val", internalType: "address", type: "address", indexed: false }, - ], - name: "log_named_address", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "key", internalType: "string", type: "string", indexed: false }, - { - name: "val", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - ], - name: "log_named_array", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "key", internalType: "string", type: "string", indexed: false }, - { - name: "val", - internalType: "int256[]", - type: "int256[]", - indexed: false, - }, - ], - name: "log_named_array", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "key", internalType: "string", type: "string", indexed: false }, - { - name: "val", - internalType: "address[]", - type: "address[]", - indexed: false, - }, - ], - name: "log_named_array", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "key", internalType: "string", type: "string", indexed: false }, - { name: "val", internalType: "bytes", type: "bytes", indexed: false }, - ], - name: "log_named_bytes", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "key", internalType: "string", type: "string", indexed: false }, - { name: "val", internalType: "bytes32", type: "bytes32", indexed: false }, - ], - name: "log_named_bytes32", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "key", internalType: "string", type: "string", indexed: false }, - { name: "val", internalType: "int256", type: "int256", indexed: false }, - { - name: "decimals", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "log_named_decimal_int", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "key", internalType: "string", type: "string", indexed: false }, - { name: "val", internalType: "uint256", type: "uint256", indexed: false }, - { - name: "decimals", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "log_named_decimal_uint", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "key", internalType: "string", type: "string", indexed: false }, - { name: "val", internalType: "int256", type: "int256", indexed: false }, - ], - name: "log_named_int", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "key", internalType: "string", type: "string", indexed: false }, - { name: "val", internalType: "string", type: "string", indexed: false }, - ], - name: "log_named_string", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "key", internalType: "string", type: "string", indexed: false }, - { name: "val", internalType: "uint256", type: "uint256", indexed: false }, - ], - name: "log_named_uint", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "", internalType: "string", type: "string", indexed: false }, - ], - name: "log_string", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "", internalType: "uint256", type: "uint256", indexed: false }, - ], - name: "log_uint", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "", internalType: "bytes", type: "bytes", indexed: false }, - ], - name: "logs", - }, -] as const; + { + type: 'function', + inputs: [], + name: 'IS_TEST', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'excludeArtifacts', + outputs: [ + { + name: 'excludedArtifacts_', + internalType: 'string[]', + type: 'string[]', + }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'excludeContracts', + outputs: [ + { + name: 'excludedContracts_', + internalType: 'address[]', + type: 'address[]', + }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'excludeSenders', + outputs: [ + { + name: 'excludedSenders_', + internalType: 'address[]', + type: 'address[]', + }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'failed', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'targetArtifactSelectors', + outputs: [ + { + name: 'targetedArtifactSelectors_', + internalType: 'struct StdInvariant.FuzzSelector[]', + type: 'tuple[]', + components: [ + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'selectors', internalType: 'bytes4[]', type: 'bytes4[]' }, + ], + }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'targetArtifacts', + outputs: [ + { + name: 'targetedArtifacts_', + internalType: 'string[]', + type: 'string[]', + }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'targetContracts', + outputs: [ + { + name: 'targetedContracts_', + internalType: 'address[]', + type: 'address[]', + }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'targetInterfaces', + outputs: [ + { + name: 'targetedInterfaces_', + internalType: 'struct StdInvariant.FuzzInterface[]', + type: 'tuple[]', + components: [ + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'artifacts', internalType: 'string[]', type: 'string[]' }, + ], + }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'targetSelectors', + outputs: [ + { + name: 'targetedSelectors_', + internalType: 'struct StdInvariant.FuzzSelector[]', + type: 'tuple[]', + components: [ + { name: 'addr', internalType: 'address', type: 'address' }, + { name: 'selectors', internalType: 'bytes4[]', type: 'bytes4[]' }, + ], + }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'targetSenders', + outputs: [ + { + name: 'targetedSenders_', + internalType: 'address[]', + type: 'address[]', + }, + ], + stateMutability: 'view', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: '', internalType: 'string', type: 'string', indexed: false }, + ], + name: 'log', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: '', internalType: 'address', type: 'address', indexed: false }, + ], + name: 'log_address', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'val', + internalType: 'uint256[]', + type: 'uint256[]', + indexed: false, + }, + ], + name: 'log_array', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'val', + internalType: 'int256[]', + type: 'int256[]', + indexed: false, + }, + ], + name: 'log_array', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'val', + internalType: 'address[]', + type: 'address[]', + indexed: false, + }, + ], + name: 'log_array', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: '', internalType: 'bytes', type: 'bytes', indexed: false }, + ], + name: 'log_bytes', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: '', internalType: 'bytes32', type: 'bytes32', indexed: false }, + ], + name: 'log_bytes32', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: '', internalType: 'int256', type: 'int256', indexed: false }, + ], + name: 'log_int', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'key', internalType: 'string', type: 'string', indexed: false }, + { name: 'val', internalType: 'address', type: 'address', indexed: false }, + ], + name: 'log_named_address', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'key', internalType: 'string', type: 'string', indexed: false }, + { + name: 'val', + internalType: 'uint256[]', + type: 'uint256[]', + indexed: false, + }, + ], + name: 'log_named_array', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'key', internalType: 'string', type: 'string', indexed: false }, + { + name: 'val', + internalType: 'int256[]', + type: 'int256[]', + indexed: false, + }, + ], + name: 'log_named_array', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'key', internalType: 'string', type: 'string', indexed: false }, + { + name: 'val', + internalType: 'address[]', + type: 'address[]', + indexed: false, + }, + ], + name: 'log_named_array', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'key', internalType: 'string', type: 'string', indexed: false }, + { name: 'val', internalType: 'bytes', type: 'bytes', indexed: false }, + ], + name: 'log_named_bytes', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'key', internalType: 'string', type: 'string', indexed: false }, + { name: 'val', internalType: 'bytes32', type: 'bytes32', indexed: false }, + ], + name: 'log_named_bytes32', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'key', internalType: 'string', type: 'string', indexed: false }, + { name: 'val', internalType: 'int256', type: 'int256', indexed: false }, + { + name: 'decimals', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'log_named_decimal_int', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'key', internalType: 'string', type: 'string', indexed: false }, + { name: 'val', internalType: 'uint256', type: 'uint256', indexed: false }, + { + name: 'decimals', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'log_named_decimal_uint', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'key', internalType: 'string', type: 'string', indexed: false }, + { name: 'val', internalType: 'int256', type: 'int256', indexed: false }, + ], + name: 'log_named_int', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'key', internalType: 'string', type: 'string', indexed: false }, + { name: 'val', internalType: 'string', type: 'string', indexed: false }, + ], + name: 'log_named_string', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'key', internalType: 'string', type: 'string', indexed: false }, + { name: 'val', internalType: 'uint256', type: 'uint256', indexed: false }, + ], + name: 'log_named_uint', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: '', internalType: 'string', type: 'string', indexed: false }, + ], + name: 'log_string', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: '', internalType: 'uint256', type: 'uint256', indexed: false }, + ], + name: 'log_uint', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: '', internalType: 'bytes', type: 'bytes', indexed: false }, + ], + name: 'logs', + }, +] as const + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Tick +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const tickAbi = [{ type: 'error', inputs: [], name: 'LO' }] as const + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// TickMath +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const tickMathAbi = [ + { type: 'error', inputs: [], name: 'R' }, + { type: 'error', inputs: [], name: 'T' }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // TimelockController ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const timelockControllerAbi = [ - { - type: "constructor", - inputs: [ - { name: "minDelay", internalType: "uint256", type: "uint256" }, - { name: "proposers", internalType: "address[]", type: "address[]" }, - { name: "executors", internalType: "address[]", type: "address[]" }, - { name: "admin", internalType: "address", type: "address" }, - ], - stateMutability: "nonpayable", - }, - { type: "receive", stateMutability: "payable" }, - { - type: "function", - inputs: [], - name: "CANCELLER_ROLE", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "DEFAULT_ADMIN_ROLE", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "EXECUTOR_ROLE", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "PROPOSER_ROLE", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "TIMELOCK_ADMIN_ROLE", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "id", internalType: "bytes32", type: "bytes32" }], - name: "cancel", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "target", internalType: "address", type: "address" }, - { name: "value", internalType: "uint256", type: "uint256" }, - { name: "payload", internalType: "bytes", type: "bytes" }, - { name: "predecessor", internalType: "bytes32", type: "bytes32" }, - { name: "salt", internalType: "bytes32", type: "bytes32" }, - ], - name: "execute", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "targets", internalType: "address[]", type: "address[]" }, - { name: "values", internalType: "uint256[]", type: "uint256[]" }, - { name: "payloads", internalType: "bytes[]", type: "bytes[]" }, - { name: "predecessor", internalType: "bytes32", type: "bytes32" }, - { name: "salt", internalType: "bytes32", type: "bytes32" }, - ], - name: "executeBatch", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "getMinDelay", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "role", internalType: "bytes32", type: "bytes32" }], - name: "getRoleAdmin", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "id", internalType: "bytes32", type: "bytes32" }], - name: "getTimestamp", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "role", internalType: "bytes32", type: "bytes32" }, - { name: "account", internalType: "address", type: "address" }, - ], - name: "grantRole", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "role", internalType: "bytes32", type: "bytes32" }, - { name: "account", internalType: "address", type: "address" }, - ], - name: "hasRole", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "target", internalType: "address", type: "address" }, - { name: "value", internalType: "uint256", type: "uint256" }, - { name: "data", internalType: "bytes", type: "bytes" }, - { name: "predecessor", internalType: "bytes32", type: "bytes32" }, - { name: "salt", internalType: "bytes32", type: "bytes32" }, - ], - name: "hashOperation", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "targets", internalType: "address[]", type: "address[]" }, - { name: "values", internalType: "uint256[]", type: "uint256[]" }, - { name: "payloads", internalType: "bytes[]", type: "bytes[]" }, - { name: "predecessor", internalType: "bytes32", type: "bytes32" }, - { name: "salt", internalType: "bytes32", type: "bytes32" }, - ], - name: "hashOperationBatch", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [{ name: "id", internalType: "bytes32", type: "bytes32" }], - name: "isOperation", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "id", internalType: "bytes32", type: "bytes32" }], - name: "isOperationDone", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "id", internalType: "bytes32", type: "bytes32" }], - name: "isOperationPending", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "id", internalType: "bytes32", type: "bytes32" }], - name: "isOperationReady", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "", internalType: "address", type: "address" }, - { name: "", internalType: "address", type: "address" }, - { name: "", internalType: "uint256[]", type: "uint256[]" }, - { name: "", internalType: "uint256[]", type: "uint256[]" }, - { name: "", internalType: "bytes", type: "bytes" }, - ], - name: "onERC1155BatchReceived", - outputs: [{ name: "", internalType: "bytes4", type: "bytes4" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "", internalType: "address", type: "address" }, - { name: "", internalType: "address", type: "address" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "bytes", type: "bytes" }, - ], - name: "onERC1155Received", - outputs: [{ name: "", internalType: "bytes4", type: "bytes4" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "", internalType: "address", type: "address" }, - { name: "", internalType: "address", type: "address" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "bytes", type: "bytes" }, - ], - name: "onERC721Received", - outputs: [{ name: "", internalType: "bytes4", type: "bytes4" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "role", internalType: "bytes32", type: "bytes32" }, - { name: "account", internalType: "address", type: "address" }, - ], - name: "renounceRole", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "role", internalType: "bytes32", type: "bytes32" }, - { name: "account", internalType: "address", type: "address" }, - ], - name: "revokeRole", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "target", internalType: "address", type: "address" }, - { name: "value", internalType: "uint256", type: "uint256" }, - { name: "data", internalType: "bytes", type: "bytes" }, - { name: "predecessor", internalType: "bytes32", type: "bytes32" }, - { name: "salt", internalType: "bytes32", type: "bytes32" }, - { name: "delay", internalType: "uint256", type: "uint256" }, - ], - name: "schedule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "targets", internalType: "address[]", type: "address[]" }, - { name: "values", internalType: "uint256[]", type: "uint256[]" }, - { name: "payloads", internalType: "bytes[]", type: "bytes[]" }, - { name: "predecessor", internalType: "bytes32", type: "bytes32" }, - { name: "salt", internalType: "bytes32", type: "bytes32" }, - { name: "delay", internalType: "uint256", type: "uint256" }, - ], - name: "scheduleBatch", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "interfaceId", internalType: "bytes4", type: "bytes4" }], - name: "supportsInterface", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "newDelay", internalType: "uint256", type: "uint256" }], - name: "updateDelay", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "id", internalType: "bytes32", type: "bytes32", indexed: true }, - { - name: "index", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "target", - internalType: "address", - type: "address", - indexed: false, - }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { name: "data", internalType: "bytes", type: "bytes", indexed: false }, - ], - name: "CallExecuted", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "id", internalType: "bytes32", type: "bytes32", indexed: true }, - { - name: "salt", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - ], - name: "CallSalt", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "id", internalType: "bytes32", type: "bytes32", indexed: true }, - { - name: "index", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "target", - internalType: "address", - type: "address", - indexed: false, - }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { name: "data", internalType: "bytes", type: "bytes", indexed: false }, - { - name: "predecessor", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - { - name: "delay", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "CallScheduled", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "id", internalType: "bytes32", type: "bytes32", indexed: true }, - ], - name: "Cancelled", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "oldDuration", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "newDuration", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "MinDelayChange", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "role", internalType: "bytes32", type: "bytes32", indexed: true }, - { - name: "previousAdminRole", - internalType: "bytes32", - type: "bytes32", - indexed: true, - }, - { - name: "newAdminRole", - internalType: "bytes32", - type: "bytes32", - indexed: true, - }, - ], - name: "RoleAdminChanged", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "role", internalType: "bytes32", type: "bytes32", indexed: true }, - { - name: "account", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "sender", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "RoleGranted", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "role", internalType: "bytes32", type: "bytes32", indexed: true }, - { - name: "account", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "sender", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "RoleRevoked", - }, -] as const; + { + type: 'constructor', + inputs: [ + { name: 'minDelay', internalType: 'uint256', type: 'uint256' }, + { name: 'proposers', internalType: 'address[]', type: 'address[]' }, + { name: 'executors', internalType: 'address[]', type: 'address[]' }, + { name: 'admin', internalType: 'address', type: 'address' }, + ], + stateMutability: 'nonpayable', + }, + { type: 'receive', stateMutability: 'payable' }, + { + type: 'function', + inputs: [], + name: 'CANCELLER_ROLE', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'DEFAULT_ADMIN_ROLE', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'EXECUTOR_ROLE', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'PROPOSER_ROLE', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'TIMELOCK_ADMIN_ROLE', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'id', internalType: 'bytes32', type: 'bytes32' }], + name: 'cancel', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'target', internalType: 'address', type: 'address' }, + { name: 'value', internalType: 'uint256', type: 'uint256' }, + { name: 'payload', internalType: 'bytes', type: 'bytes' }, + { name: 'predecessor', internalType: 'bytes32', type: 'bytes32' }, + { name: 'salt', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'execute', + outputs: [], + stateMutability: 'payable', + }, + { + type: 'function', + inputs: [ + { name: 'targets', internalType: 'address[]', type: 'address[]' }, + { name: 'values', internalType: 'uint256[]', type: 'uint256[]' }, + { name: 'payloads', internalType: 'bytes[]', type: 'bytes[]' }, + { name: 'predecessor', internalType: 'bytes32', type: 'bytes32' }, + { name: 'salt', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'executeBatch', + outputs: [], + stateMutability: 'payable', + }, + { + type: 'function', + inputs: [], + name: 'getMinDelay', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'role', internalType: 'bytes32', type: 'bytes32' }], + name: 'getRoleAdmin', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'id', internalType: 'bytes32', type: 'bytes32' }], + name: 'getTimestamp', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'role', internalType: 'bytes32', type: 'bytes32' }, + { name: 'account', internalType: 'address', type: 'address' }, + ], + name: 'grantRole', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'role', internalType: 'bytes32', type: 'bytes32' }, + { name: 'account', internalType: 'address', type: 'address' }, + ], + name: 'hasRole', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'target', internalType: 'address', type: 'address' }, + { name: 'value', internalType: 'uint256', type: 'uint256' }, + { name: 'data', internalType: 'bytes', type: 'bytes' }, + { name: 'predecessor', internalType: 'bytes32', type: 'bytes32' }, + { name: 'salt', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'hashOperation', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { name: 'targets', internalType: 'address[]', type: 'address[]' }, + { name: 'values', internalType: 'uint256[]', type: 'uint256[]' }, + { name: 'payloads', internalType: 'bytes[]', type: 'bytes[]' }, + { name: 'predecessor', internalType: 'bytes32', type: 'bytes32' }, + { name: 'salt', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'hashOperationBatch', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [{ name: 'id', internalType: 'bytes32', type: 'bytes32' }], + name: 'isOperation', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'id', internalType: 'bytes32', type: 'bytes32' }], + name: 'isOperationDone', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'id', internalType: 'bytes32', type: 'bytes32' }], + name: 'isOperationPending', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'id', internalType: 'bytes32', type: 'bytes32' }], + name: 'isOperationReady', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '', internalType: 'address', type: 'address' }, + { name: '', internalType: 'address', type: 'address' }, + { name: '', internalType: 'uint256[]', type: 'uint256[]' }, + { name: '', internalType: 'uint256[]', type: 'uint256[]' }, + { name: '', internalType: 'bytes', type: 'bytes' }, + ], + name: 'onERC1155BatchReceived', + outputs: [{ name: '', internalType: 'bytes4', type: 'bytes4' }], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '', internalType: 'address', type: 'address' }, + { name: '', internalType: 'address', type: 'address' }, + { name: '', internalType: 'uint256', type: 'uint256' }, + { name: '', internalType: 'uint256', type: 'uint256' }, + { name: '', internalType: 'bytes', type: 'bytes' }, + ], + name: 'onERC1155Received', + outputs: [{ name: '', internalType: 'bytes4', type: 'bytes4' }], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '', internalType: 'address', type: 'address' }, + { name: '', internalType: 'address', type: 'address' }, + { name: '', internalType: 'uint256', type: 'uint256' }, + { name: '', internalType: 'bytes', type: 'bytes' }, + ], + name: 'onERC721Received', + outputs: [{ name: '', internalType: 'bytes4', type: 'bytes4' }], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'role', internalType: 'bytes32', type: 'bytes32' }, + { name: 'account', internalType: 'address', type: 'address' }, + ], + name: 'renounceRole', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'role', internalType: 'bytes32', type: 'bytes32' }, + { name: 'account', internalType: 'address', type: 'address' }, + ], + name: 'revokeRole', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'target', internalType: 'address', type: 'address' }, + { name: 'value', internalType: 'uint256', type: 'uint256' }, + { name: 'data', internalType: 'bytes', type: 'bytes' }, + { name: 'predecessor', internalType: 'bytes32', type: 'bytes32' }, + { name: 'salt', internalType: 'bytes32', type: 'bytes32' }, + { name: 'delay', internalType: 'uint256', type: 'uint256' }, + ], + name: 'schedule', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'targets', internalType: 'address[]', type: 'address[]' }, + { name: 'values', internalType: 'uint256[]', type: 'uint256[]' }, + { name: 'payloads', internalType: 'bytes[]', type: 'bytes[]' }, + { name: 'predecessor', internalType: 'bytes32', type: 'bytes32' }, + { name: 'salt', internalType: 'bytes32', type: 'bytes32' }, + { name: 'delay', internalType: 'uint256', type: 'uint256' }, + ], + name: 'scheduleBatch', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'interfaceId', internalType: 'bytes4', type: 'bytes4' }], + name: 'supportsInterface', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'newDelay', internalType: 'uint256', type: 'uint256' }], + name: 'updateDelay', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'id', internalType: 'bytes32', type: 'bytes32', indexed: true }, + { + name: 'index', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'target', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'value', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { name: 'data', internalType: 'bytes', type: 'bytes', indexed: false }, + ], + name: 'CallExecuted', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'id', internalType: 'bytes32', type: 'bytes32', indexed: true }, + { + name: 'salt', + internalType: 'bytes32', + type: 'bytes32', + indexed: false, + }, + ], + name: 'CallSalt', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'id', internalType: 'bytes32', type: 'bytes32', indexed: true }, + { + name: 'index', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'target', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'value', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { name: 'data', internalType: 'bytes', type: 'bytes', indexed: false }, + { + name: 'predecessor', + internalType: 'bytes32', + type: 'bytes32', + indexed: false, + }, + { + name: 'delay', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'CallScheduled', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'id', internalType: 'bytes32', type: 'bytes32', indexed: true }, + ], + name: 'Cancelled', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'oldDuration', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'newDuration', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'MinDelayChange', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'role', internalType: 'bytes32', type: 'bytes32', indexed: true }, + { + name: 'previousAdminRole', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + { + name: 'newAdminRole', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + ], + name: 'RoleAdminChanged', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'role', internalType: 'bytes32', type: 'bytes32', indexed: true }, + { + name: 'account', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'sender', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'RoleGranted', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'role', internalType: 'bytes32', type: 'bytes32', indexed: true }, + { + name: 'account', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'sender', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'RoleRevoked', + }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // TransparentUpgradeableProxy ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const transparentUpgradeableProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_logic", internalType: "address", type: "address" }, - { name: "admin_", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "payable", - }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "previousAdmin", - internalType: "address", - type: "address", - indexed: false, - }, - { - name: "newAdmin", - internalType: "address", - type: "address", - indexed: false, - }, - ], - name: "AdminChanged", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "beacon", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "BeaconUpgraded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "implementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, -] as const; + { + type: 'constructor', + inputs: [ + { name: '_logic', internalType: 'address', type: 'address' }, + { name: 'admin_', internalType: 'address', type: 'address' }, + { name: '_data', internalType: 'bytes', type: 'bytes' }, + ], + stateMutability: 'payable', + }, + { type: 'fallback', stateMutability: 'payable' }, + { type: 'receive', stateMutability: 'payable' }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'previousAdmin', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'newAdmin', + internalType: 'address', + type: 'address', + indexed: false, + }, + ], + name: 'AdminChanged', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'beacon', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'BeaconUpgraded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'implementation', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'Upgraded', + }, +] as const + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// UniswapV3Harness +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const uniswapV3HarnessAbi = [ + { + type: 'function', + inputs: [ + { + name: 'config', + internalType: 'struct UniswapV3.Config', + type: 'tuple', + components: [ + { + name: 'positionManager', + internalType: 'contract INonfungiblePositionManager', + type: 'address', + }, + { name: 'factory', internalType: 'address', type: 'address' }, + ], + }, + { name: 'tokenId', internalType: 'uint256', type: 'uint256' }, + { name: 'token0Denominator', internalType: 'bool', type: 'bool' }, + ], + name: 'getLPValue', + outputs: [ + { name: 'value', internalType: 'uint256', type: 'uint256' }, + { name: 'denominator', internalType: 'address', type: 'address' }, + ], + stateMutability: 'view', + }, + { type: 'error', inputs: [], name: 'T' }, +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Action @@ -12965,8159 +22340,12160 @@ export const transparentUpgradeableProxyAbi = [ * Wraps __{@link readContract}__ with `abi` set to __{@link accessControlAbi}__ */ export const readAccessControl = /*#__PURE__*/ createReadContract({ - abi: accessControlAbi, -}); + abi: accessControlAbi, +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link accessControlAbi}__ and `functionName` set to `"DEFAULT_ADMIN_ROLE"` */ export const readAccessControlDefaultAdminRole = - /*#__PURE__*/ createReadContract({ - abi: accessControlAbi, - functionName: "DEFAULT_ADMIN_ROLE", - }); + /*#__PURE__*/ createReadContract({ + abi: accessControlAbi, + functionName: 'DEFAULT_ADMIN_ROLE', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link accessControlAbi}__ and `functionName` set to `"getRoleAdmin"` */ export const readAccessControlGetRoleAdmin = /*#__PURE__*/ createReadContract({ - abi: accessControlAbi, - functionName: "getRoleAdmin", -}); + abi: accessControlAbi, + functionName: 'getRoleAdmin', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link accessControlAbi}__ and `functionName` set to `"hasRole"` */ export const readAccessControlHasRole = /*#__PURE__*/ createReadContract({ - abi: accessControlAbi, - functionName: "hasRole", -}); + abi: accessControlAbi, + functionName: 'hasRole', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link accessControlAbi}__ and `functionName` set to `"supportsInterface"` */ export const readAccessControlSupportsInterface = - /*#__PURE__*/ createReadContract({ - abi: accessControlAbi, - functionName: "supportsInterface", - }); + /*#__PURE__*/ createReadContract({ + abi: accessControlAbi, + functionName: 'supportsInterface', + }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link accessControlAbi}__ */ export const writeAccessControl = /*#__PURE__*/ createWriteContract({ - abi: accessControlAbi, -}); + abi: accessControlAbi, +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link accessControlAbi}__ and `functionName` set to `"grantRole"` */ export const writeAccessControlGrantRole = /*#__PURE__*/ createWriteContract({ - abi: accessControlAbi, - functionName: "grantRole", -}); + abi: accessControlAbi, + functionName: 'grantRole', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link accessControlAbi}__ and `functionName` set to `"renounceRole"` */ export const writeAccessControlRenounceRole = /*#__PURE__*/ createWriteContract( - { abi: accessControlAbi, functionName: "renounceRole" }, -); + { abi: accessControlAbi, functionName: 'renounceRole' }, +) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link accessControlAbi}__ and `functionName` set to `"revokeRole"` */ export const writeAccessControlRevokeRole = /*#__PURE__*/ createWriteContract({ - abi: accessControlAbi, - functionName: "revokeRole", -}); + abi: accessControlAbi, + functionName: 'revokeRole', +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link accessControlAbi}__ */ export const simulateAccessControl = /*#__PURE__*/ createSimulateContract({ - abi: accessControlAbi, -}); + abi: accessControlAbi, +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link accessControlAbi}__ and `functionName` set to `"grantRole"` */ export const simulateAccessControlGrantRole = - /*#__PURE__*/ createSimulateContract({ - abi: accessControlAbi, - functionName: "grantRole", - }); + /*#__PURE__*/ createSimulateContract({ + abi: accessControlAbi, + functionName: 'grantRole', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link accessControlAbi}__ and `functionName` set to `"renounceRole"` */ export const simulateAccessControlRenounceRole = - /*#__PURE__*/ createSimulateContract({ - abi: accessControlAbi, - functionName: "renounceRole", - }); + /*#__PURE__*/ createSimulateContract({ + abi: accessControlAbi, + functionName: 'renounceRole', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link accessControlAbi}__ and `functionName` set to `"revokeRole"` */ export const simulateAccessControlRevokeRole = - /*#__PURE__*/ createSimulateContract({ - abi: accessControlAbi, - functionName: "revokeRole", - }); + /*#__PURE__*/ createSimulateContract({ + abi: accessControlAbi, + functionName: 'revokeRole', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link accessControlAbi}__ */ export const watchAccessControlEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: accessControlAbi, -}); + abi: accessControlAbi, +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link accessControlAbi}__ and `eventName` set to `"RoleAdminChanged"` */ export const watchAccessControlRoleAdminChangedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: accessControlAbi, - eventName: "RoleAdminChanged", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: accessControlAbi, + eventName: 'RoleAdminChanged', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link accessControlAbi}__ and `eventName` set to `"RoleGranted"` */ export const watchAccessControlRoleGrantedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: accessControlAbi, - eventName: "RoleGranted", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: accessControlAbi, + eventName: 'RoleGranted', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link accessControlAbi}__ and `eventName` set to `"RoleRevoked"` */ export const watchAccessControlRoleRevokedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: accessControlAbi, - eventName: "RoleRevoked", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: accessControlAbi, + eventName: 'RoleRevoked', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link chainlinkAbi}__ */ export const readChainlink = /*#__PURE__*/ createReadContract({ - abi: chainlinkAbi, -}); + abi: chainlinkAbi, +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link chainlinkAbi}__ and `functionName` set to `"ETH"` */ export const readChainlinkEth = /*#__PURE__*/ createReadContract({ - abi: chainlinkAbi, - functionName: "ETH", -}); + abi: chainlinkAbi, + functionName: 'ETH', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link chainlinkAbi}__ and `functionName` set to `"L2_GRACE_PERIOD"` */ export const readChainlinkL2GracePeriod = /*#__PURE__*/ createReadContract({ - abi: chainlinkAbi, - functionName: "L2_GRACE_PERIOD", -}); + abi: chainlinkAbi, + functionName: 'L2_GRACE_PERIOD', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link chainlinkAbi}__ and `functionName` set to `"MAX_CHAINLINK_FEED_PRICE_AGE"` */ export const readChainlinkMaxChainlinkFeedPriceAge = - /*#__PURE__*/ createReadContract({ - abi: chainlinkAbi, - functionName: "MAX_CHAINLINK_FEED_PRICE_AGE", - }); + /*#__PURE__*/ createReadContract({ + abi: chainlinkAbi, + functionName: 'MAX_CHAINLINK_FEED_PRICE_AGE', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link chainlinkDenominationsAbi}__ */ export const readChainlinkDenominations = /*#__PURE__*/ createReadContract({ - abi: chainlinkDenominationsAbi, -}); + abi: chainlinkDenominationsAbi, +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link chainlinkDenominationsAbi}__ and `functionName` set to `"BTC"` */ export const readChainlinkDenominationsBtc = /*#__PURE__*/ createReadContract({ - abi: chainlinkDenominationsAbi, - functionName: "BTC", -}); + abi: chainlinkDenominationsAbi, + functionName: 'BTC', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link chainlinkDenominationsAbi}__ and `functionName` set to `"ETH"` */ export const readChainlinkDenominationsEth = /*#__PURE__*/ createReadContract({ - abi: chainlinkDenominationsAbi, - functionName: "ETH", -}); + abi: chainlinkDenominationsAbi, + functionName: 'ETH', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link chainlinkDenominationsAbi}__ and `functionName` set to `"USD"` */ export const readChainlinkDenominationsUsd = /*#__PURE__*/ createReadContract({ - abi: chainlinkDenominationsAbi, - functionName: "USD", -}); + abi: chainlinkDenominationsAbi, + functionName: 'USD', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link chainlinkHarnessAbi}__ */ export const readChainlinkHarness = /*#__PURE__*/ createReadContract({ - abi: chainlinkHarnessAbi, -}); + abi: chainlinkHarnessAbi, +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link chainlinkHarnessAbi}__ and `functionName` set to `"calculatePrice"` + */ +export const readChainlinkHarnessCalculatePrice = + /*#__PURE__*/ createReadContract({ + abi: chainlinkHarnessAbi, + functionName: 'calculatePrice', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link chainlinkHarnessAbi}__ and `functionName` set to `"checkSequencerUptime"` */ export const readChainlinkHarnessCheckSequencerUptime = - /*#__PURE__*/ createReadContract({ - abi: chainlinkHarnessAbi, - functionName: "checkSequencerUptime", - }); + /*#__PURE__*/ createReadContract({ + abi: chainlinkHarnessAbi, + functionName: 'checkSequencerUptime', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link chainlinkHarnessAbi}__ and `functionName` set to `"convertPriceDenomination"` + * Wraps __{@link readContract}__ with `abi` set to __{@link chainlinkHarnessAbi}__ and `functionName` set to `"convertDenomination"` */ -export const readChainlinkHarnessConvertPriceDenomination = - /*#__PURE__*/ createReadContract({ - abi: chainlinkHarnessAbi, - functionName: "convertPriceDenomination", - }); +export const readChainlinkHarnessConvertDenomination = + /*#__PURE__*/ createReadContract({ + abi: chainlinkHarnessAbi, + functionName: 'convertDenomination', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link chainlinkHarnessAbi}__ and `functionName` set to `"fetchCreditPriceWithCollateralDenomination"` + * Wraps __{@link readContract}__ with `abi` set to __{@link chainlinkHarnessAbi}__ and `functionName` set to `"convertPriceDenomination"` */ -export const readChainlinkHarnessFetchCreditPriceWithCollateralDenomination = - /*#__PURE__*/ createReadContract({ - abi: chainlinkHarnessAbi, - functionName: "fetchCreditPriceWithCollateralDenomination", - }); +export const readChainlinkHarnessConvertPriceDenomination = + /*#__PURE__*/ createReadContract({ + abi: chainlinkHarnessAbi, + functionName: 'convertPriceDenomination', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link chainlinkHarnessAbi}__ and `functionName` set to `"fetchPrice"` */ export const readChainlinkHarnessFetchPrice = /*#__PURE__*/ createReadContract({ - abi: chainlinkHarnessAbi, - functionName: "fetchPrice", -}); + abi: chainlinkHarnessAbi, + functionName: 'fetchPrice', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link chainlinkHarnessAbi}__ and `functionName` set to `"syncDecimalsUp"` */ export const readChainlinkHarnessSyncDecimalsUp = - /*#__PURE__*/ createReadContract({ - abi: chainlinkHarnessAbi, - functionName: "syncDecimalsUp", - }); + /*#__PURE__*/ createReadContract({ + abi: chainlinkHarnessAbi, + functionName: 'syncDecimalsUp', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link contextUpgradeableAbi}__ */ export const watchContextUpgradeableEvent = - /*#__PURE__*/ createWatchContractEvent({ abi: contextUpgradeableAbi }); + /*#__PURE__*/ createWatchContractEvent({ abi: contextUpgradeableAbi }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link contextUpgradeableAbi}__ and `eventName` set to `"Initialized"` */ export const watchContextUpgradeableInitializedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: contextUpgradeableAbi, - eventName: "Initialized", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: contextUpgradeableAbi, + eventName: 'Initialized', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link dsTestAbi}__ */ -export const readDsTest = /*#__PURE__*/ createReadContract({ abi: dsTestAbi }); +export const readDsTest = /*#__PURE__*/ createReadContract({ abi: dsTestAbi }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link dsTestAbi}__ and `functionName` set to `"IS_TEST"` */ export const readDsTestIsTest = /*#__PURE__*/ createReadContract({ - abi: dsTestAbi, - functionName: "IS_TEST", -}); + abi: dsTestAbi, + functionName: 'IS_TEST', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link dsTestAbi}__ */ -export const writeDsTest = /*#__PURE__*/ createWriteContract({ - abi: dsTestAbi, -}); +export const writeDsTest = /*#__PURE__*/ createWriteContract({ abi: dsTestAbi }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link dsTestAbi}__ and `functionName` set to `"failed"` */ export const writeDsTestFailed = /*#__PURE__*/ createWriteContract({ - abi: dsTestAbi, - functionName: "failed", -}); + abi: dsTestAbi, + functionName: 'failed', +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link dsTestAbi}__ */ export const simulateDsTest = /*#__PURE__*/ createSimulateContract({ - abi: dsTestAbi, -}); + abi: dsTestAbi, +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link dsTestAbi}__ and `functionName` set to `"failed"` */ export const simulateDsTestFailed = /*#__PURE__*/ createSimulateContract({ - abi: dsTestAbi, - functionName: "failed", -}); + abi: dsTestAbi, + functionName: 'failed', +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link dsTestAbi}__ */ export const watchDsTestEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: dsTestAbi, -}); + abi: dsTestAbi, +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link dsTestAbi}__ and `eventName` set to `"log"` */ export const watchDsTestLogEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: dsTestAbi, - eventName: "log", -}); + abi: dsTestAbi, + eventName: 'log', +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link dsTestAbi}__ and `eventName` set to `"log_address"` */ export const watchDsTestLogAddressEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: dsTestAbi, - eventName: "log_address", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: dsTestAbi, + eventName: 'log_address', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link dsTestAbi}__ and `eventName` set to `"log_bytes"` */ export const watchDsTestLogBytesEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: dsTestAbi, - eventName: "log_bytes", -}); + abi: dsTestAbi, + eventName: 'log_bytes', +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link dsTestAbi}__ and `eventName` set to `"log_bytes32"` */ export const watchDsTestLogBytes32Event = - /*#__PURE__*/ createWatchContractEvent({ - abi: dsTestAbi, - eventName: "log_bytes32", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: dsTestAbi, + eventName: 'log_bytes32', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link dsTestAbi}__ and `eventName` set to `"log_int"` */ export const watchDsTestLogIntEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: dsTestAbi, - eventName: "log_int", -}); + abi: dsTestAbi, + eventName: 'log_int', +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link dsTestAbi}__ and `eventName` set to `"log_named_address"` */ export const watchDsTestLogNamedAddressEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: dsTestAbi, - eventName: "log_named_address", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: dsTestAbi, + eventName: 'log_named_address', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link dsTestAbi}__ and `eventName` set to `"log_named_bytes"` */ export const watchDsTestLogNamedBytesEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: dsTestAbi, - eventName: "log_named_bytes", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: dsTestAbi, + eventName: 'log_named_bytes', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link dsTestAbi}__ and `eventName` set to `"log_named_bytes32"` */ export const watchDsTestLogNamedBytes32Event = - /*#__PURE__*/ createWatchContractEvent({ - abi: dsTestAbi, - eventName: "log_named_bytes32", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: dsTestAbi, + eventName: 'log_named_bytes32', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link dsTestAbi}__ and `eventName` set to `"log_named_decimal_int"` */ export const watchDsTestLogNamedDecimalIntEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: dsTestAbi, - eventName: "log_named_decimal_int", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: dsTestAbi, + eventName: 'log_named_decimal_int', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link dsTestAbi}__ and `eventName` set to `"log_named_decimal_uint"` */ export const watchDsTestLogNamedDecimalUintEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: dsTestAbi, - eventName: "log_named_decimal_uint", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: dsTestAbi, + eventName: 'log_named_decimal_uint', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link dsTestAbi}__ and `eventName` set to `"log_named_int"` */ export const watchDsTestLogNamedIntEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: dsTestAbi, - eventName: "log_named_int", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: dsTestAbi, + eventName: 'log_named_int', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link dsTestAbi}__ and `eventName` set to `"log_named_string"` */ export const watchDsTestLogNamedStringEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: dsTestAbi, - eventName: "log_named_string", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: dsTestAbi, + eventName: 'log_named_string', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link dsTestAbi}__ and `eventName` set to `"log_named_uint"` */ export const watchDsTestLogNamedUintEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: dsTestAbi, - eventName: "log_named_uint", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: dsTestAbi, + eventName: 'log_named_uint', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link dsTestAbi}__ and `eventName` set to `"log_string"` */ export const watchDsTestLogStringEvent = /*#__PURE__*/ createWatchContractEvent( - { abi: dsTestAbi, eventName: "log_string" }, -); + { abi: dsTestAbi, eventName: 'log_string' }, +) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link dsTestAbi}__ and `eventName` set to `"log_uint"` */ export const watchDsTestLogUintEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: dsTestAbi, - eventName: "log_uint", -}); + abi: dsTestAbi, + eventName: 'log_uint', +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link dsTestAbi}__ and `eventName` set to `"logs"` */ export const watchDsTestLogsEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: dsTestAbi, - eventName: "logs", -}); + abi: dsTestAbi, + eventName: 'logs', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link deploymentsAbi}__ */ export const readDeployments = /*#__PURE__*/ createReadContract({ - abi: deploymentsAbi, -}); + abi: deploymentsAbi, +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link deploymentsAbi}__ and `functionName` set to `"deploymentsSubpath"` */ export const readDeploymentsDeploymentsSubpath = - /*#__PURE__*/ createReadContract({ - abi: deploymentsAbi, - functionName: "deploymentsSubpath", - }); + /*#__PURE__*/ createReadContract({ + abi: deploymentsAbi, + functionName: 'deploymentsSubpath', + }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link dummyPoolAdapterAbi}__ */ export const writeDummyPoolAdapter = /*#__PURE__*/ createWriteContract({ - abi: dummyPoolAdapterAbi, -}); + abi: dummyPoolAdapterAbi, +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link dummyPoolAdapterAbi}__ and `functionName` set to `"supply"` */ export const writeDummyPoolAdapterSupply = /*#__PURE__*/ createWriteContract({ - abi: dummyPoolAdapterAbi, - functionName: "supply", -}); + abi: dummyPoolAdapterAbi, + functionName: 'supply', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link dummyPoolAdapterAbi}__ and `functionName` set to `"withdraw"` */ export const writeDummyPoolAdapterWithdraw = /*#__PURE__*/ createWriteContract({ - abi: dummyPoolAdapterAbi, - functionName: "withdraw", -}); + abi: dummyPoolAdapterAbi, + functionName: 'withdraw', +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link dummyPoolAdapterAbi}__ */ export const simulateDummyPoolAdapter = /*#__PURE__*/ createSimulateContract({ - abi: dummyPoolAdapterAbi, -}); + abi: dummyPoolAdapterAbi, +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link dummyPoolAdapterAbi}__ and `functionName` set to `"supply"` */ export const simulateDummyPoolAdapterSupply = - /*#__PURE__*/ createSimulateContract({ - abi: dummyPoolAdapterAbi, - functionName: "supply", - }); + /*#__PURE__*/ createSimulateContract({ + abi: dummyPoolAdapterAbi, + functionName: 'supply', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link dummyPoolAdapterAbi}__ and `functionName` set to `"withdraw"` */ export const simulateDummyPoolAdapterWithdraw = - /*#__PURE__*/ createSimulateContract({ - abi: dummyPoolAdapterAbi, - functionName: "withdraw", - }); + /*#__PURE__*/ createSimulateContract({ + abi: dummyPoolAdapterAbi, + functionName: 'withdraw', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link erc1155Abi}__ */ -export const readErc1155 = /*#__PURE__*/ createReadContract({ - abi: erc1155Abi, -}); +export const readErc1155 = /*#__PURE__*/ createReadContract({ abi: erc1155Abi }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link erc1155Abi}__ and `functionName` set to `"balanceOf"` */ export const readErc1155BalanceOf = /*#__PURE__*/ createReadContract({ - abi: erc1155Abi, - functionName: "balanceOf", -}); + abi: erc1155Abi, + functionName: 'balanceOf', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link erc1155Abi}__ and `functionName` set to `"balanceOfBatch"` */ export const readErc1155BalanceOfBatch = /*#__PURE__*/ createReadContract({ - abi: erc1155Abi, - functionName: "balanceOfBatch", -}); + abi: erc1155Abi, + functionName: 'balanceOfBatch', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link erc1155Abi}__ and `functionName` set to `"isApprovedForAll"` */ export const readErc1155IsApprovedForAll = /*#__PURE__*/ createReadContract({ - abi: erc1155Abi, - functionName: "isApprovedForAll", -}); + abi: erc1155Abi, + functionName: 'isApprovedForAll', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link erc1155Abi}__ and `functionName` set to `"supportsInterface"` */ export const readErc1155SupportsInterface = /*#__PURE__*/ createReadContract({ - abi: erc1155Abi, - functionName: "supportsInterface", -}); + abi: erc1155Abi, + functionName: 'supportsInterface', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link erc1155Abi}__ and `functionName` set to `"uri"` */ export const readErc1155Uri = /*#__PURE__*/ createReadContract({ - abi: erc1155Abi, - functionName: "uri", -}); + abi: erc1155Abi, + functionName: 'uri', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link erc1155Abi}__ */ export const writeErc1155 = /*#__PURE__*/ createWriteContract({ - abi: erc1155Abi, -}); + abi: erc1155Abi, +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link erc1155Abi}__ and `functionName` set to `"safeBatchTransferFrom"` */ export const writeErc1155SafeBatchTransferFrom = - /*#__PURE__*/ createWriteContract({ - abi: erc1155Abi, - functionName: "safeBatchTransferFrom", - }); + /*#__PURE__*/ createWriteContract({ + abi: erc1155Abi, + functionName: 'safeBatchTransferFrom', + }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link erc1155Abi}__ and `functionName` set to `"safeTransferFrom"` */ export const writeErc1155SafeTransferFrom = /*#__PURE__*/ createWriteContract({ - abi: erc1155Abi, - functionName: "safeTransferFrom", -}); + abi: erc1155Abi, + functionName: 'safeTransferFrom', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link erc1155Abi}__ and `functionName` set to `"setApprovalForAll"` */ export const writeErc1155SetApprovalForAll = /*#__PURE__*/ createWriteContract({ - abi: erc1155Abi, - functionName: "setApprovalForAll", -}); + abi: erc1155Abi, + functionName: 'setApprovalForAll', +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link erc1155Abi}__ */ export const simulateErc1155 = /*#__PURE__*/ createSimulateContract({ - abi: erc1155Abi, -}); + abi: erc1155Abi, +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link erc1155Abi}__ and `functionName` set to `"safeBatchTransferFrom"` */ export const simulateErc1155SafeBatchTransferFrom = - /*#__PURE__*/ createSimulateContract({ - abi: erc1155Abi, - functionName: "safeBatchTransferFrom", - }); + /*#__PURE__*/ createSimulateContract({ + abi: erc1155Abi, + functionName: 'safeBatchTransferFrom', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link erc1155Abi}__ and `functionName` set to `"safeTransferFrom"` */ export const simulateErc1155SafeTransferFrom = - /*#__PURE__*/ createSimulateContract({ - abi: erc1155Abi, - functionName: "safeTransferFrom", - }); + /*#__PURE__*/ createSimulateContract({ + abi: erc1155Abi, + functionName: 'safeTransferFrom', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link erc1155Abi}__ and `functionName` set to `"setApprovalForAll"` */ export const simulateErc1155SetApprovalForAll = - /*#__PURE__*/ createSimulateContract({ - abi: erc1155Abi, - functionName: "setApprovalForAll", - }); + /*#__PURE__*/ createSimulateContract({ + abi: erc1155Abi, + functionName: 'setApprovalForAll', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link erc1155Abi}__ */ export const watchErc1155Event = /*#__PURE__*/ createWatchContractEvent({ - abi: erc1155Abi, -}); + abi: erc1155Abi, +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link erc1155Abi}__ and `eventName` set to `"ApprovalForAll"` */ export const watchErc1155ApprovalForAllEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: erc1155Abi, - eventName: "ApprovalForAll", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: erc1155Abi, + eventName: 'ApprovalForAll', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link erc1155Abi}__ and `eventName` set to `"TransferBatch"` */ export const watchErc1155TransferBatchEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: erc1155Abi, - eventName: "TransferBatch", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: erc1155Abi, + eventName: 'TransferBatch', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link erc1155Abi}__ and `eventName` set to `"TransferSingle"` */ export const watchErc1155TransferSingleEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: erc1155Abi, - eventName: "TransferSingle", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: erc1155Abi, + eventName: 'TransferSingle', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link erc1155Abi}__ and `eventName` set to `"URI"` */ export const watchErc1155UriEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: erc1155Abi, - eventName: "URI", -}); + abi: erc1155Abi, + eventName: 'URI', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link erc165Abi}__ */ -export const readErc165 = /*#__PURE__*/ createReadContract({ abi: erc165Abi }); +export const readErc165 = /*#__PURE__*/ createReadContract({ abi: erc165Abi }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link erc165Abi}__ and `functionName` set to `"supportsInterface"` */ export const readErc165SupportsInterface = /*#__PURE__*/ createReadContract({ - abi: erc165Abi, - functionName: "supportsInterface", -}); + abi: erc165Abi, + functionName: 'supportsInterface', +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link erc1967ProxyAbi}__ */ export const watchErc1967ProxyEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: erc1967ProxyAbi, -}); + abi: erc1967ProxyAbi, +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link erc1967ProxyAbi}__ and `eventName` set to `"AdminChanged"` */ export const watchErc1967ProxyAdminChangedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: erc1967ProxyAbi, - eventName: "AdminChanged", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: erc1967ProxyAbi, + eventName: 'AdminChanged', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link erc1967ProxyAbi}__ and `eventName` set to `"BeaconUpgraded"` */ export const watchErc1967ProxyBeaconUpgradedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: erc1967ProxyAbi, - eventName: "BeaconUpgraded", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: erc1967ProxyAbi, + eventName: 'BeaconUpgraded', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link erc1967ProxyAbi}__ and `eventName` set to `"Upgraded"` */ export const watchErc1967ProxyUpgradedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: erc1967ProxyAbi, - eventName: "Upgraded", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: erc1967ProxyAbi, + eventName: 'Upgraded', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link erc1967UpgradeAbi}__ */ export const watchErc1967UpgradeEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: erc1967UpgradeAbi, -}); + abi: erc1967UpgradeAbi, +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link erc1967UpgradeAbi}__ and `eventName` set to `"AdminChanged"` */ export const watchErc1967UpgradeAdminChangedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: erc1967UpgradeAbi, - eventName: "AdminChanged", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: erc1967UpgradeAbi, + eventName: 'AdminChanged', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link erc1967UpgradeAbi}__ and `eventName` set to `"BeaconUpgraded"` */ export const watchErc1967UpgradeBeaconUpgradedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: erc1967UpgradeAbi, - eventName: "BeaconUpgraded", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: erc1967UpgradeAbi, + eventName: 'BeaconUpgraded', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link erc1967UpgradeAbi}__ and `eventName` set to `"Upgraded"` */ export const watchErc1967UpgradeUpgradedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: erc1967UpgradeAbi, - eventName: "Upgraded", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: erc1967UpgradeAbi, + eventName: 'Upgraded', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link erc20Abi}__ */ -export const readErc20 = /*#__PURE__*/ createReadContract({ abi: erc20Abi }); +export const readErc20 = /*#__PURE__*/ createReadContract({ abi: erc20Abi }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link erc20Abi}__ and `functionName` set to `"allowance"` */ export const readErc20Allowance = /*#__PURE__*/ createReadContract({ - abi: erc20Abi, - functionName: "allowance", -}); + abi: erc20Abi, + functionName: 'allowance', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link erc20Abi}__ and `functionName` set to `"balanceOf"` */ export const readErc20BalanceOf = /*#__PURE__*/ createReadContract({ - abi: erc20Abi, - functionName: "balanceOf", -}); + abi: erc20Abi, + functionName: 'balanceOf', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link erc20Abi}__ and `functionName` set to `"decimals"` */ export const readErc20Decimals = /*#__PURE__*/ createReadContract({ - abi: erc20Abi, - functionName: "decimals", -}); + abi: erc20Abi, + functionName: 'decimals', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link erc20Abi}__ and `functionName` set to `"name"` */ export const readErc20Name = /*#__PURE__*/ createReadContract({ - abi: erc20Abi, - functionName: "name", -}); + abi: erc20Abi, + functionName: 'name', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link erc20Abi}__ and `functionName` set to `"symbol"` */ export const readErc20Symbol = /*#__PURE__*/ createReadContract({ - abi: erc20Abi, - functionName: "symbol", -}); + abi: erc20Abi, + functionName: 'symbol', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link erc20Abi}__ and `functionName` set to `"totalSupply"` */ export const readErc20TotalSupply = /*#__PURE__*/ createReadContract({ - abi: erc20Abi, - functionName: "totalSupply", -}); + abi: erc20Abi, + functionName: 'totalSupply', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link erc20Abi}__ */ -export const writeErc20 = /*#__PURE__*/ createWriteContract({ abi: erc20Abi }); +export const writeErc20 = /*#__PURE__*/ createWriteContract({ abi: erc20Abi }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link erc20Abi}__ and `functionName` set to `"approve"` */ export const writeErc20Approve = /*#__PURE__*/ createWriteContract({ - abi: erc20Abi, - functionName: "approve", -}); + abi: erc20Abi, + functionName: 'approve', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link erc20Abi}__ and `functionName` set to `"decreaseAllowance"` */ export const writeErc20DecreaseAllowance = /*#__PURE__*/ createWriteContract({ - abi: erc20Abi, - functionName: "decreaseAllowance", -}); + abi: erc20Abi, + functionName: 'decreaseAllowance', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link erc20Abi}__ and `functionName` set to `"increaseAllowance"` */ export const writeErc20IncreaseAllowance = /*#__PURE__*/ createWriteContract({ - abi: erc20Abi, - functionName: "increaseAllowance", -}); + abi: erc20Abi, + functionName: 'increaseAllowance', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link erc20Abi}__ and `functionName` set to `"transfer"` */ export const writeErc20Transfer = /*#__PURE__*/ createWriteContract({ - abi: erc20Abi, - functionName: "transfer", -}); + abi: erc20Abi, + functionName: 'transfer', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link erc20Abi}__ and `functionName` set to `"transferFrom"` */ export const writeErc20TransferFrom = /*#__PURE__*/ createWriteContract({ - abi: erc20Abi, - functionName: "transferFrom", -}); + abi: erc20Abi, + functionName: 'transferFrom', +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link erc20Abi}__ */ export const simulateErc20 = /*#__PURE__*/ createSimulateContract({ - abi: erc20Abi, -}); + abi: erc20Abi, +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link erc20Abi}__ and `functionName` set to `"approve"` */ export const simulateErc20Approve = /*#__PURE__*/ createSimulateContract({ - abi: erc20Abi, - functionName: "approve", -}); + abi: erc20Abi, + functionName: 'approve', +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link erc20Abi}__ and `functionName` set to `"decreaseAllowance"` */ export const simulateErc20DecreaseAllowance = - /*#__PURE__*/ createSimulateContract({ - abi: erc20Abi, - functionName: "decreaseAllowance", - }); + /*#__PURE__*/ createSimulateContract({ + abi: erc20Abi, + functionName: 'decreaseAllowance', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link erc20Abi}__ and `functionName` set to `"increaseAllowance"` */ export const simulateErc20IncreaseAllowance = - /*#__PURE__*/ createSimulateContract({ - abi: erc20Abi, - functionName: "increaseAllowance", - }); + /*#__PURE__*/ createSimulateContract({ + abi: erc20Abi, + functionName: 'increaseAllowance', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link erc20Abi}__ and `functionName` set to `"transfer"` */ export const simulateErc20Transfer = /*#__PURE__*/ createSimulateContract({ - abi: erc20Abi, - functionName: "transfer", -}); + abi: erc20Abi, + functionName: 'transfer', +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link erc20Abi}__ and `functionName` set to `"transferFrom"` */ export const simulateErc20TransferFrom = /*#__PURE__*/ createSimulateContract({ - abi: erc20Abi, - functionName: "transferFrom", -}); + abi: erc20Abi, + functionName: 'transferFrom', +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link erc20Abi}__ */ export const watchErc20Event = /*#__PURE__*/ createWatchContractEvent({ - abi: erc20Abi, -}); + abi: erc20Abi, +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link erc20Abi}__ and `eventName` set to `"Approval"` */ export const watchErc20ApprovalEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: erc20Abi, - eventName: "Approval", -}); + abi: erc20Abi, + eventName: 'Approval', +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link erc20Abi}__ and `eventName` set to `"Transfer"` */ export const watchErc20TransferEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: erc20Abi, - eventName: "Transfer", -}); + abi: erc20Abi, + eventName: 'Transfer', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link erc721Abi}__ */ -export const readErc721 = /*#__PURE__*/ createReadContract({ abi: erc721Abi }); +export const readErc721 = /*#__PURE__*/ createReadContract({ abi: erc721Abi }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link erc721Abi}__ and `functionName` set to `"balanceOf"` */ export const readErc721BalanceOf = /*#__PURE__*/ createReadContract({ - abi: erc721Abi, - functionName: "balanceOf", -}); + abi: erc721Abi, + functionName: 'balanceOf', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link erc721Abi}__ and `functionName` set to `"getApproved"` */ export const readErc721GetApproved = /*#__PURE__*/ createReadContract({ - abi: erc721Abi, - functionName: "getApproved", -}); + abi: erc721Abi, + functionName: 'getApproved', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link erc721Abi}__ and `functionName` set to `"isApprovedForAll"` */ export const readErc721IsApprovedForAll = /*#__PURE__*/ createReadContract({ - abi: erc721Abi, - functionName: "isApprovedForAll", -}); + abi: erc721Abi, + functionName: 'isApprovedForAll', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link erc721Abi}__ and `functionName` set to `"name"` */ export const readErc721Name = /*#__PURE__*/ createReadContract({ - abi: erc721Abi, - functionName: "name", -}); + abi: erc721Abi, + functionName: 'name', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link erc721Abi}__ and `functionName` set to `"ownerOf"` */ export const readErc721OwnerOf = /*#__PURE__*/ createReadContract({ - abi: erc721Abi, - functionName: "ownerOf", -}); + abi: erc721Abi, + functionName: 'ownerOf', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link erc721Abi}__ and `functionName` set to `"supportsInterface"` */ export const readErc721SupportsInterface = /*#__PURE__*/ createReadContract({ - abi: erc721Abi, - functionName: "supportsInterface", -}); + abi: erc721Abi, + functionName: 'supportsInterface', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link erc721Abi}__ and `functionName` set to `"symbol"` */ export const readErc721Symbol = /*#__PURE__*/ createReadContract({ - abi: erc721Abi, - functionName: "symbol", -}); + abi: erc721Abi, + functionName: 'symbol', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link erc721Abi}__ and `functionName` set to `"tokenURI"` */ export const readErc721TokenUri = /*#__PURE__*/ createReadContract({ - abi: erc721Abi, - functionName: "tokenURI", -}); + abi: erc721Abi, + functionName: 'tokenURI', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link erc721Abi}__ */ -export const writeErc721 = /*#__PURE__*/ createWriteContract({ - abi: erc721Abi, -}); +export const writeErc721 = /*#__PURE__*/ createWriteContract({ abi: erc721Abi }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link erc721Abi}__ and `functionName` set to `"approve"` */ export const writeErc721Approve = /*#__PURE__*/ createWriteContract({ - abi: erc721Abi, - functionName: "approve", -}); + abi: erc721Abi, + functionName: 'approve', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link erc721Abi}__ and `functionName` set to `"safeTransferFrom"` */ export const writeErc721SafeTransferFrom = /*#__PURE__*/ createWriteContract({ - abi: erc721Abi, - functionName: "safeTransferFrom", -}); + abi: erc721Abi, + functionName: 'safeTransferFrom', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link erc721Abi}__ and `functionName` set to `"setApprovalForAll"` */ export const writeErc721SetApprovalForAll = /*#__PURE__*/ createWriteContract({ - abi: erc721Abi, - functionName: "setApprovalForAll", -}); + abi: erc721Abi, + functionName: 'setApprovalForAll', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link erc721Abi}__ and `functionName` set to `"transferFrom"` */ export const writeErc721TransferFrom = /*#__PURE__*/ createWriteContract({ - abi: erc721Abi, - functionName: "transferFrom", -}); + abi: erc721Abi, + functionName: 'transferFrom', +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link erc721Abi}__ */ export const simulateErc721 = /*#__PURE__*/ createSimulateContract({ - abi: erc721Abi, -}); + abi: erc721Abi, +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link erc721Abi}__ and `functionName` set to `"approve"` */ export const simulateErc721Approve = /*#__PURE__*/ createSimulateContract({ - abi: erc721Abi, - functionName: "approve", -}); + abi: erc721Abi, + functionName: 'approve', +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link erc721Abi}__ and `functionName` set to `"safeTransferFrom"` */ export const simulateErc721SafeTransferFrom = - /*#__PURE__*/ createSimulateContract({ - abi: erc721Abi, - functionName: "safeTransferFrom", - }); + /*#__PURE__*/ createSimulateContract({ + abi: erc721Abi, + functionName: 'safeTransferFrom', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link erc721Abi}__ and `functionName` set to `"setApprovalForAll"` */ export const simulateErc721SetApprovalForAll = - /*#__PURE__*/ createSimulateContract({ - abi: erc721Abi, - functionName: "setApprovalForAll", - }); + /*#__PURE__*/ createSimulateContract({ + abi: erc721Abi, + functionName: 'setApprovalForAll', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link erc721Abi}__ and `functionName` set to `"transferFrom"` */ export const simulateErc721TransferFrom = /*#__PURE__*/ createSimulateContract({ - abi: erc721Abi, - functionName: "transferFrom", -}); + abi: erc721Abi, + functionName: 'transferFrom', +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link erc721Abi}__ */ export const watchErc721Event = /*#__PURE__*/ createWatchContractEvent({ - abi: erc721Abi, -}); + abi: erc721Abi, +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link erc721Abi}__ and `eventName` set to `"Approval"` */ export const watchErc721ApprovalEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: erc721Abi, - eventName: "Approval", -}); + abi: erc721Abi, + eventName: 'Approval', +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link erc721Abi}__ and `eventName` set to `"ApprovalForAll"` */ export const watchErc721ApprovalForAllEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: erc721Abi, - eventName: "ApprovalForAll", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: erc721Abi, + eventName: 'ApprovalForAll', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link erc721Abi}__ and `eventName` set to `"Transfer"` */ export const watchErc721TransferEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: erc721Abi, - eventName: "Transfer", -}); + abi: erc721Abi, + eventName: 'Transfer', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link gnosisSafeLikeAbi}__ */ export const writeGnosisSafeLike = /*#__PURE__*/ createWriteContract({ - abi: gnosisSafeLikeAbi, -}); + abi: gnosisSafeLikeAbi, +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link gnosisSafeLikeAbi}__ and `functionName` set to `"execTransaction"` */ export const writeGnosisSafeLikeExecTransaction = - /*#__PURE__*/ createWriteContract({ - abi: gnosisSafeLikeAbi, - functionName: "execTransaction", - }); + /*#__PURE__*/ createWriteContract({ + abi: gnosisSafeLikeAbi, + functionName: 'execTransaction', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link gnosisSafeLikeAbi}__ */ export const simulateGnosisSafeLike = /*#__PURE__*/ createSimulateContract({ - abi: gnosisSafeLikeAbi, -}); + abi: gnosisSafeLikeAbi, +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link gnosisSafeLikeAbi}__ and `functionName` set to `"execTransaction"` */ export const simulateGnosisSafeLikeExecTransaction = - /*#__PURE__*/ createSimulateContract({ - abi: gnosisSafeLikeAbi, - functionName: "execTransaction", - }); + /*#__PURE__*/ createSimulateContract({ + abi: gnosisSafeLikeAbi, + functionName: 'execTransaction', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link iAccessControlAbi}__ */ export const readIAccessControl = /*#__PURE__*/ createReadContract({ - abi: iAccessControlAbi, -}); + abi: iAccessControlAbi, +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link iAccessControlAbi}__ and `functionName` set to `"getRoleAdmin"` */ export const readIAccessControlGetRoleAdmin = /*#__PURE__*/ createReadContract({ - abi: iAccessControlAbi, - functionName: "getRoleAdmin", -}); + abi: iAccessControlAbi, + functionName: 'getRoleAdmin', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link iAccessControlAbi}__ and `functionName` set to `"hasRole"` */ export const readIAccessControlHasRole = /*#__PURE__*/ createReadContract({ - abi: iAccessControlAbi, - functionName: "hasRole", -}); + abi: iAccessControlAbi, + functionName: 'hasRole', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link iAccessControlAbi}__ */ export const writeIAccessControl = /*#__PURE__*/ createWriteContract({ - abi: iAccessControlAbi, -}); + abi: iAccessControlAbi, +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link iAccessControlAbi}__ and `functionName` set to `"grantRole"` */ export const writeIAccessControlGrantRole = /*#__PURE__*/ createWriteContract({ - abi: iAccessControlAbi, - functionName: "grantRole", -}); + abi: iAccessControlAbi, + functionName: 'grantRole', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link iAccessControlAbi}__ and `functionName` set to `"renounceRole"` */ export const writeIAccessControlRenounceRole = - /*#__PURE__*/ createWriteContract({ - abi: iAccessControlAbi, - functionName: "renounceRole", - }); + /*#__PURE__*/ createWriteContract({ + abi: iAccessControlAbi, + functionName: 'renounceRole', + }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link iAccessControlAbi}__ and `functionName` set to `"revokeRole"` */ export const writeIAccessControlRevokeRole = /*#__PURE__*/ createWriteContract({ - abi: iAccessControlAbi, - functionName: "revokeRole", -}); + abi: iAccessControlAbi, + functionName: 'revokeRole', +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link iAccessControlAbi}__ */ export const simulateIAccessControl = /*#__PURE__*/ createSimulateContract({ - abi: iAccessControlAbi, -}); + abi: iAccessControlAbi, +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link iAccessControlAbi}__ and `functionName` set to `"grantRole"` */ export const simulateIAccessControlGrantRole = - /*#__PURE__*/ createSimulateContract({ - abi: iAccessControlAbi, - functionName: "grantRole", - }); + /*#__PURE__*/ createSimulateContract({ + abi: iAccessControlAbi, + functionName: 'grantRole', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link iAccessControlAbi}__ and `functionName` set to `"renounceRole"` */ export const simulateIAccessControlRenounceRole = - /*#__PURE__*/ createSimulateContract({ - abi: iAccessControlAbi, - functionName: "renounceRole", - }); + /*#__PURE__*/ createSimulateContract({ + abi: iAccessControlAbi, + functionName: 'renounceRole', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link iAccessControlAbi}__ and `functionName` set to `"revokeRole"` */ export const simulateIAccessControlRevokeRole = - /*#__PURE__*/ createSimulateContract({ - abi: iAccessControlAbi, - functionName: "revokeRole", - }); + /*#__PURE__*/ createSimulateContract({ + abi: iAccessControlAbi, + functionName: 'revokeRole', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iAccessControlAbi}__ */ export const watchIAccessControlEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: iAccessControlAbi, -}); + abi: iAccessControlAbi, +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iAccessControlAbi}__ and `eventName` set to `"RoleAdminChanged"` */ export const watchIAccessControlRoleAdminChangedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: iAccessControlAbi, - eventName: "RoleAdminChanged", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: iAccessControlAbi, + eventName: 'RoleAdminChanged', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iAccessControlAbi}__ and `eventName` set to `"RoleGranted"` */ export const watchIAccessControlRoleGrantedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: iAccessControlAbi, - eventName: "RoleGranted", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: iAccessControlAbi, + eventName: 'RoleGranted', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iAccessControlAbi}__ and `eventName` set to `"RoleRevoked"` */ export const watchIAccessControlRoleRevokedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: iAccessControlAbi, - eventName: "RoleRevoked", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: iAccessControlAbi, + eventName: 'RoleRevoked', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link iBeaconAbi}__ */ -export const readIBeacon = /*#__PURE__*/ createReadContract({ - abi: iBeaconAbi, -}); +export const readIBeacon = /*#__PURE__*/ createReadContract({ abi: iBeaconAbi }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link iBeaconAbi}__ and `functionName` set to `"implementation"` */ export const readIBeaconImplementation = /*#__PURE__*/ createReadContract({ - abi: iBeaconAbi, - functionName: "implementation", -}); + abi: iBeaconAbi, + functionName: 'implementation', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link iChainlinkAggregatorLikeAbi}__ */ export const readIChainlinkAggregatorLike = /*#__PURE__*/ createReadContract({ - abi: iChainlinkAggregatorLikeAbi, -}); + abi: iChainlinkAggregatorLikeAbi, +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link iChainlinkAggregatorLikeAbi}__ and `functionName` set to `"decimals"` */ export const readIChainlinkAggregatorLikeDecimals = - /*#__PURE__*/ createReadContract({ - abi: iChainlinkAggregatorLikeAbi, - functionName: "decimals", - }); + /*#__PURE__*/ createReadContract({ + abi: iChainlinkAggregatorLikeAbi, + functionName: 'decimals', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link iChainlinkAggregatorLikeAbi}__ and `functionName` set to `"description"` */ export const readIChainlinkAggregatorLikeDescription = - /*#__PURE__*/ createReadContract({ - abi: iChainlinkAggregatorLikeAbi, - functionName: "description", - }); + /*#__PURE__*/ createReadContract({ + abi: iChainlinkAggregatorLikeAbi, + functionName: 'description', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link iChainlinkAggregatorLikeAbi}__ and `functionName` set to `"latestRoundData"` */ export const readIChainlinkAggregatorLikeLatestRoundData = - /*#__PURE__*/ createReadContract({ - abi: iChainlinkAggregatorLikeAbi, - functionName: "latestRoundData", - }); + /*#__PURE__*/ createReadContract({ + abi: iChainlinkAggregatorLikeAbi, + functionName: 'latestRoundData', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link iChainlinkFeedRegistryLikeAbi}__ */ export const readIChainlinkFeedRegistryLike = /*#__PURE__*/ createReadContract({ - abi: iChainlinkFeedRegistryLikeAbi, -}); + abi: iChainlinkFeedRegistryLikeAbi, +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link iChainlinkFeedRegistryLikeAbi}__ and `functionName` set to `"getFeed"` */ export const readIChainlinkFeedRegistryLikeGetFeed = - /*#__PURE__*/ createReadContract({ - abi: iChainlinkFeedRegistryLikeAbi, - functionName: "getFeed", - }); + /*#__PURE__*/ createReadContract({ + abi: iChainlinkFeedRegistryLikeAbi, + functionName: 'getFeed', + }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link iChainlinkFeedRegistryLikeAbi}__ */ export const writeIChainlinkFeedRegistryLike = - /*#__PURE__*/ createWriteContract({ abi: iChainlinkFeedRegistryLikeAbi }); + /*#__PURE__*/ createWriteContract({ abi: iChainlinkFeedRegistryLikeAbi }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link iChainlinkFeedRegistryLikeAbi}__ and `functionName` set to `"acceptOwnership"` */ export const writeIChainlinkFeedRegistryLikeAcceptOwnership = - /*#__PURE__*/ createWriteContract({ - abi: iChainlinkFeedRegistryLikeAbi, - functionName: "acceptOwnership", - }); + /*#__PURE__*/ createWriteContract({ + abi: iChainlinkFeedRegistryLikeAbi, + functionName: 'acceptOwnership', + }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link iChainlinkFeedRegistryLikeAbi}__ and `functionName` set to `"confirmFeed"` */ export const writeIChainlinkFeedRegistryLikeConfirmFeed = - /*#__PURE__*/ createWriteContract({ - abi: iChainlinkFeedRegistryLikeAbi, - functionName: "confirmFeed", - }); + /*#__PURE__*/ createWriteContract({ + abi: iChainlinkFeedRegistryLikeAbi, + functionName: 'confirmFeed', + }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link iChainlinkFeedRegistryLikeAbi}__ and `functionName` set to `"proposeFeed"` */ export const writeIChainlinkFeedRegistryLikeProposeFeed = - /*#__PURE__*/ createWriteContract({ - abi: iChainlinkFeedRegistryLikeAbi, - functionName: "proposeFeed", - }); + /*#__PURE__*/ createWriteContract({ + abi: iChainlinkFeedRegistryLikeAbi, + functionName: 'proposeFeed', + }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link iChainlinkFeedRegistryLikeAbi}__ and `functionName` set to `"transferOwnership"` */ export const writeIChainlinkFeedRegistryLikeTransferOwnership = - /*#__PURE__*/ createWriteContract({ - abi: iChainlinkFeedRegistryLikeAbi, - functionName: "transferOwnership", - }); + /*#__PURE__*/ createWriteContract({ + abi: iChainlinkFeedRegistryLikeAbi, + functionName: 'transferOwnership', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link iChainlinkFeedRegistryLikeAbi}__ */ export const simulateIChainlinkFeedRegistryLike = - /*#__PURE__*/ createSimulateContract({ abi: iChainlinkFeedRegistryLikeAbi }); + /*#__PURE__*/ createSimulateContract({ abi: iChainlinkFeedRegistryLikeAbi }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link iChainlinkFeedRegistryLikeAbi}__ and `functionName` set to `"acceptOwnership"` */ export const simulateIChainlinkFeedRegistryLikeAcceptOwnership = - /*#__PURE__*/ createSimulateContract({ - abi: iChainlinkFeedRegistryLikeAbi, - functionName: "acceptOwnership", - }); + /*#__PURE__*/ createSimulateContract({ + abi: iChainlinkFeedRegistryLikeAbi, + functionName: 'acceptOwnership', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link iChainlinkFeedRegistryLikeAbi}__ and `functionName` set to `"confirmFeed"` */ export const simulateIChainlinkFeedRegistryLikeConfirmFeed = - /*#__PURE__*/ createSimulateContract({ - abi: iChainlinkFeedRegistryLikeAbi, - functionName: "confirmFeed", - }); + /*#__PURE__*/ createSimulateContract({ + abi: iChainlinkFeedRegistryLikeAbi, + functionName: 'confirmFeed', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link iChainlinkFeedRegistryLikeAbi}__ and `functionName` set to `"proposeFeed"` */ export const simulateIChainlinkFeedRegistryLikeProposeFeed = - /*#__PURE__*/ createSimulateContract({ - abi: iChainlinkFeedRegistryLikeAbi, - functionName: "proposeFeed", - }); + /*#__PURE__*/ createSimulateContract({ + abi: iChainlinkFeedRegistryLikeAbi, + functionName: 'proposeFeed', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link iChainlinkFeedRegistryLikeAbi}__ and `functionName` set to `"transferOwnership"` */ export const simulateIChainlinkFeedRegistryLikeTransferOwnership = - /*#__PURE__*/ createSimulateContract({ - abi: iChainlinkFeedRegistryLikeAbi, - functionName: "transferOwnership", - }); + /*#__PURE__*/ createSimulateContract({ + abi: iChainlinkFeedRegistryLikeAbi, + functionName: 'transferOwnership', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link iCryptoKittiesAbi}__ */ export const readICryptoKitties = /*#__PURE__*/ createReadContract({ - abi: iCryptoKittiesAbi, -}); + abi: iCryptoKittiesAbi, +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link iCryptoKittiesAbi}__ and `functionName` set to `"balanceOf"` */ export const readICryptoKittiesBalanceOf = /*#__PURE__*/ createReadContract({ - abi: iCryptoKittiesAbi, - functionName: "balanceOf", -}); + abi: iCryptoKittiesAbi, + functionName: 'balanceOf', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link iCryptoKittiesAbi}__ and `functionName` set to `"name"` */ export const readICryptoKittiesName = /*#__PURE__*/ createReadContract({ - abi: iCryptoKittiesAbi, - functionName: "name", -}); + abi: iCryptoKittiesAbi, + functionName: 'name', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link iCryptoKittiesAbi}__ and `functionName` set to `"ownerOf"` */ export const readICryptoKittiesOwnerOf = /*#__PURE__*/ createReadContract({ - abi: iCryptoKittiesAbi, - functionName: "ownerOf", -}); + abi: iCryptoKittiesAbi, + functionName: 'ownerOf', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link iCryptoKittiesAbi}__ and `functionName` set to `"supportsInterface"` */ export const readICryptoKittiesSupportsInterface = - /*#__PURE__*/ createReadContract({ - abi: iCryptoKittiesAbi, - functionName: "supportsInterface", - }); + /*#__PURE__*/ createReadContract({ + abi: iCryptoKittiesAbi, + functionName: 'supportsInterface', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link iCryptoKittiesAbi}__ and `functionName` set to `"symbol"` */ export const readICryptoKittiesSymbol = /*#__PURE__*/ createReadContract({ - abi: iCryptoKittiesAbi, - functionName: "symbol", -}); + abi: iCryptoKittiesAbi, + functionName: 'symbol', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link iCryptoKittiesAbi}__ and `functionName` set to `"tokenMetadata"` */ export const readICryptoKittiesTokenMetadata = /*#__PURE__*/ createReadContract( - { abi: iCryptoKittiesAbi, functionName: "tokenMetadata" }, -); + { abi: iCryptoKittiesAbi, functionName: 'tokenMetadata' }, +) /** * Wraps __{@link readContract}__ with `abi` set to __{@link iCryptoKittiesAbi}__ and `functionName` set to `"tokensOfOwner"` */ export const readICryptoKittiesTokensOfOwner = /*#__PURE__*/ createReadContract( - { abi: iCryptoKittiesAbi, functionName: "tokensOfOwner" }, -); + { abi: iCryptoKittiesAbi, functionName: 'tokensOfOwner' }, +) /** * Wraps __{@link readContract}__ with `abi` set to __{@link iCryptoKittiesAbi}__ and `functionName` set to `"totalSupply"` */ export const readICryptoKittiesTotalSupply = /*#__PURE__*/ createReadContract({ - abi: iCryptoKittiesAbi, - functionName: "totalSupply", -}); + abi: iCryptoKittiesAbi, + functionName: 'totalSupply', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link iCryptoKittiesAbi}__ */ export const writeICryptoKitties = /*#__PURE__*/ createWriteContract({ - abi: iCryptoKittiesAbi, -}); + abi: iCryptoKittiesAbi, +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link iCryptoKittiesAbi}__ and `functionName` set to `"approve"` */ export const writeICryptoKittiesApprove = /*#__PURE__*/ createWriteContract({ - abi: iCryptoKittiesAbi, - functionName: "approve", -}); + abi: iCryptoKittiesAbi, + functionName: 'approve', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link iCryptoKittiesAbi}__ and `functionName` set to `"transfer"` */ export const writeICryptoKittiesTransfer = /*#__PURE__*/ createWriteContract({ - abi: iCryptoKittiesAbi, - functionName: "transfer", -}); + abi: iCryptoKittiesAbi, + functionName: 'transfer', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link iCryptoKittiesAbi}__ and `functionName` set to `"transferFrom"` */ export const writeICryptoKittiesTransferFrom = - /*#__PURE__*/ createWriteContract({ - abi: iCryptoKittiesAbi, - functionName: "transferFrom", - }); + /*#__PURE__*/ createWriteContract({ + abi: iCryptoKittiesAbi, + functionName: 'transferFrom', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link iCryptoKittiesAbi}__ */ export const simulateICryptoKitties = /*#__PURE__*/ createSimulateContract({ - abi: iCryptoKittiesAbi, -}); + abi: iCryptoKittiesAbi, +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link iCryptoKittiesAbi}__ and `functionName` set to `"approve"` */ export const simulateICryptoKittiesApprove = - /*#__PURE__*/ createSimulateContract({ - abi: iCryptoKittiesAbi, - functionName: "approve", - }); + /*#__PURE__*/ createSimulateContract({ + abi: iCryptoKittiesAbi, + functionName: 'approve', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link iCryptoKittiesAbi}__ and `functionName` set to `"transfer"` */ export const simulateICryptoKittiesTransfer = - /*#__PURE__*/ createSimulateContract({ - abi: iCryptoKittiesAbi, - functionName: "transfer", - }); + /*#__PURE__*/ createSimulateContract({ + abi: iCryptoKittiesAbi, + functionName: 'transfer', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link iCryptoKittiesAbi}__ and `functionName` set to `"transferFrom"` */ export const simulateICryptoKittiesTransferFrom = - /*#__PURE__*/ createSimulateContract({ - abi: iCryptoKittiesAbi, - functionName: "transferFrom", - }); + /*#__PURE__*/ createSimulateContract({ + abi: iCryptoKittiesAbi, + functionName: 'transferFrom', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iCryptoKittiesAbi}__ */ export const watchICryptoKittiesEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: iCryptoKittiesAbi, -}); + abi: iCryptoKittiesAbi, +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iCryptoKittiesAbi}__ and `eventName` set to `"Approval"` */ export const watchICryptoKittiesApprovalEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: iCryptoKittiesAbi, - eventName: "Approval", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: iCryptoKittiesAbi, + eventName: 'Approval', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iCryptoKittiesAbi}__ and `eventName` set to `"Transfer"` */ export const watchICryptoKittiesTransferEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: iCryptoKittiesAbi, - eventName: "Transfer", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: iCryptoKittiesAbi, + eventName: 'Transfer', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc1155Abi}__ */ export const readIerc1155 = /*#__PURE__*/ createReadContract({ - abi: ierc1155Abi, -}); + abi: ierc1155Abi, +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc1155Abi}__ and `functionName` set to `"balanceOf"` */ export const readIerc1155BalanceOf = /*#__PURE__*/ createReadContract({ - abi: ierc1155Abi, - functionName: "balanceOf", -}); + abi: ierc1155Abi, + functionName: 'balanceOf', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc1155Abi}__ and `functionName` set to `"balanceOfBatch"` */ export const readIerc1155BalanceOfBatch = /*#__PURE__*/ createReadContract({ - abi: ierc1155Abi, - functionName: "balanceOfBatch", -}); + abi: ierc1155Abi, + functionName: 'balanceOfBatch', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc1155Abi}__ and `functionName` set to `"isApprovedForAll"` */ export const readIerc1155IsApprovedForAll = /*#__PURE__*/ createReadContract({ - abi: ierc1155Abi, - functionName: "isApprovedForAll", -}); + abi: ierc1155Abi, + functionName: 'isApprovedForAll', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc1155Abi}__ and `functionName` set to `"supportsInterface"` */ export const readIerc1155SupportsInterface = /*#__PURE__*/ createReadContract({ - abi: ierc1155Abi, - functionName: "supportsInterface", -}); + abi: ierc1155Abi, + functionName: 'supportsInterface', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link ierc1155Abi}__ */ export const writeIerc1155 = /*#__PURE__*/ createWriteContract({ - abi: ierc1155Abi, -}); + abi: ierc1155Abi, +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link ierc1155Abi}__ and `functionName` set to `"safeBatchTransferFrom"` */ export const writeIerc1155SafeBatchTransferFrom = - /*#__PURE__*/ createWriteContract({ - abi: ierc1155Abi, - functionName: "safeBatchTransferFrom", - }); + /*#__PURE__*/ createWriteContract({ + abi: ierc1155Abi, + functionName: 'safeBatchTransferFrom', + }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link ierc1155Abi}__ and `functionName` set to `"safeTransferFrom"` */ export const writeIerc1155SafeTransferFrom = /*#__PURE__*/ createWriteContract({ - abi: ierc1155Abi, - functionName: "safeTransferFrom", -}); + abi: ierc1155Abi, + functionName: 'safeTransferFrom', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link ierc1155Abi}__ and `functionName` set to `"setApprovalForAll"` */ export const writeIerc1155SetApprovalForAll = /*#__PURE__*/ createWriteContract( - { abi: ierc1155Abi, functionName: "setApprovalForAll" }, -); + { abi: ierc1155Abi, functionName: 'setApprovalForAll' }, +) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link ierc1155Abi}__ */ export const simulateIerc1155 = /*#__PURE__*/ createSimulateContract({ - abi: ierc1155Abi, -}); + abi: ierc1155Abi, +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link ierc1155Abi}__ and `functionName` set to `"safeBatchTransferFrom"` */ export const simulateIerc1155SafeBatchTransferFrom = - /*#__PURE__*/ createSimulateContract({ - abi: ierc1155Abi, - functionName: "safeBatchTransferFrom", - }); + /*#__PURE__*/ createSimulateContract({ + abi: ierc1155Abi, + functionName: 'safeBatchTransferFrom', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link ierc1155Abi}__ and `functionName` set to `"safeTransferFrom"` */ export const simulateIerc1155SafeTransferFrom = - /*#__PURE__*/ createSimulateContract({ - abi: ierc1155Abi, - functionName: "safeTransferFrom", - }); + /*#__PURE__*/ createSimulateContract({ + abi: ierc1155Abi, + functionName: 'safeTransferFrom', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link ierc1155Abi}__ and `functionName` set to `"setApprovalForAll"` */ export const simulateIerc1155SetApprovalForAll = - /*#__PURE__*/ createSimulateContract({ - abi: ierc1155Abi, - functionName: "setApprovalForAll", - }); + /*#__PURE__*/ createSimulateContract({ + abi: ierc1155Abi, + functionName: 'setApprovalForAll', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ierc1155Abi}__ */ export const watchIerc1155Event = /*#__PURE__*/ createWatchContractEvent({ - abi: ierc1155Abi, -}); + abi: ierc1155Abi, +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ierc1155Abi}__ and `eventName` set to `"ApprovalForAll"` */ export const watchIerc1155ApprovalForAllEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: ierc1155Abi, - eventName: "ApprovalForAll", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: ierc1155Abi, + eventName: 'ApprovalForAll', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ierc1155Abi}__ and `eventName` set to `"TransferBatch"` */ export const watchIerc1155TransferBatchEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: ierc1155Abi, - eventName: "TransferBatch", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: ierc1155Abi, + eventName: 'TransferBatch', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ierc1155Abi}__ and `eventName` set to `"TransferSingle"` */ export const watchIerc1155TransferSingleEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: ierc1155Abi, - eventName: "TransferSingle", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: ierc1155Abi, + eventName: 'TransferSingle', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ierc1155Abi}__ and `eventName` set to `"URI"` */ export const watchIerc1155UriEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: ierc1155Abi, - eventName: "URI", -}); + abi: ierc1155Abi, + eventName: 'URI', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc1155MetadataUriAbi}__ */ export const readIerc1155MetadataUri = /*#__PURE__*/ createReadContract({ - abi: ierc1155MetadataUriAbi, -}); + abi: ierc1155MetadataUriAbi, +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc1155MetadataUriAbi}__ and `functionName` set to `"balanceOf"` */ export const readIerc1155MetadataUriBalanceOf = - /*#__PURE__*/ createReadContract({ - abi: ierc1155MetadataUriAbi, - functionName: "balanceOf", - }); + /*#__PURE__*/ createReadContract({ + abi: ierc1155MetadataUriAbi, + functionName: 'balanceOf', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc1155MetadataUriAbi}__ and `functionName` set to `"balanceOfBatch"` */ export const readIerc1155MetadataUriBalanceOfBatch = - /*#__PURE__*/ createReadContract({ - abi: ierc1155MetadataUriAbi, - functionName: "balanceOfBatch", - }); + /*#__PURE__*/ createReadContract({ + abi: ierc1155MetadataUriAbi, + functionName: 'balanceOfBatch', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc1155MetadataUriAbi}__ and `functionName` set to `"isApprovedForAll"` */ export const readIerc1155MetadataUriIsApprovedForAll = - /*#__PURE__*/ createReadContract({ - abi: ierc1155MetadataUriAbi, - functionName: "isApprovedForAll", - }); + /*#__PURE__*/ createReadContract({ + abi: ierc1155MetadataUriAbi, + functionName: 'isApprovedForAll', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc1155MetadataUriAbi}__ and `functionName` set to `"supportsInterface"` */ export const readIerc1155MetadataUriSupportsInterface = - /*#__PURE__*/ createReadContract({ - abi: ierc1155MetadataUriAbi, - functionName: "supportsInterface", - }); + /*#__PURE__*/ createReadContract({ + abi: ierc1155MetadataUriAbi, + functionName: 'supportsInterface', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc1155MetadataUriAbi}__ and `functionName` set to `"uri"` */ export const readIerc1155MetadataUriUri = /*#__PURE__*/ createReadContract({ - abi: ierc1155MetadataUriAbi, - functionName: "uri", -}); + abi: ierc1155MetadataUriAbi, + functionName: 'uri', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link ierc1155MetadataUriAbi}__ */ export const writeIerc1155MetadataUri = /*#__PURE__*/ createWriteContract({ - abi: ierc1155MetadataUriAbi, -}); + abi: ierc1155MetadataUriAbi, +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link ierc1155MetadataUriAbi}__ and `functionName` set to `"safeBatchTransferFrom"` */ export const writeIerc1155MetadataUriSafeBatchTransferFrom = - /*#__PURE__*/ createWriteContract({ - abi: ierc1155MetadataUriAbi, - functionName: "safeBatchTransferFrom", - }); + /*#__PURE__*/ createWriteContract({ + abi: ierc1155MetadataUriAbi, + functionName: 'safeBatchTransferFrom', + }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link ierc1155MetadataUriAbi}__ and `functionName` set to `"safeTransferFrom"` */ export const writeIerc1155MetadataUriSafeTransferFrom = - /*#__PURE__*/ createWriteContract({ - abi: ierc1155MetadataUriAbi, - functionName: "safeTransferFrom", - }); + /*#__PURE__*/ createWriteContract({ + abi: ierc1155MetadataUriAbi, + functionName: 'safeTransferFrom', + }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link ierc1155MetadataUriAbi}__ and `functionName` set to `"setApprovalForAll"` */ export const writeIerc1155MetadataUriSetApprovalForAll = - /*#__PURE__*/ createWriteContract({ - abi: ierc1155MetadataUriAbi, - functionName: "setApprovalForAll", - }); + /*#__PURE__*/ createWriteContract({ + abi: ierc1155MetadataUriAbi, + functionName: 'setApprovalForAll', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link ierc1155MetadataUriAbi}__ */ export const simulateIerc1155MetadataUri = /*#__PURE__*/ createSimulateContract( - { abi: ierc1155MetadataUriAbi }, -); + { abi: ierc1155MetadataUriAbi }, +) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link ierc1155MetadataUriAbi}__ and `functionName` set to `"safeBatchTransferFrom"` */ export const simulateIerc1155MetadataUriSafeBatchTransferFrom = - /*#__PURE__*/ createSimulateContract({ - abi: ierc1155MetadataUriAbi, - functionName: "safeBatchTransferFrom", - }); + /*#__PURE__*/ createSimulateContract({ + abi: ierc1155MetadataUriAbi, + functionName: 'safeBatchTransferFrom', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link ierc1155MetadataUriAbi}__ and `functionName` set to `"safeTransferFrom"` */ export const simulateIerc1155MetadataUriSafeTransferFrom = - /*#__PURE__*/ createSimulateContract({ - abi: ierc1155MetadataUriAbi, - functionName: "safeTransferFrom", - }); + /*#__PURE__*/ createSimulateContract({ + abi: ierc1155MetadataUriAbi, + functionName: 'safeTransferFrom', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link ierc1155MetadataUriAbi}__ and `functionName` set to `"setApprovalForAll"` */ export const simulateIerc1155MetadataUriSetApprovalForAll = - /*#__PURE__*/ createSimulateContract({ - abi: ierc1155MetadataUriAbi, - functionName: "setApprovalForAll", - }); + /*#__PURE__*/ createSimulateContract({ + abi: ierc1155MetadataUriAbi, + functionName: 'setApprovalForAll', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ierc1155MetadataUriAbi}__ */ export const watchIerc1155MetadataUriEvent = - /*#__PURE__*/ createWatchContractEvent({ abi: ierc1155MetadataUriAbi }); + /*#__PURE__*/ createWatchContractEvent({ abi: ierc1155MetadataUriAbi }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ierc1155MetadataUriAbi}__ and `eventName` set to `"ApprovalForAll"` */ export const watchIerc1155MetadataUriApprovalForAllEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: ierc1155MetadataUriAbi, - eventName: "ApprovalForAll", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: ierc1155MetadataUriAbi, + eventName: 'ApprovalForAll', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ierc1155MetadataUriAbi}__ and `eventName` set to `"TransferBatch"` */ export const watchIerc1155MetadataUriTransferBatchEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: ierc1155MetadataUriAbi, - eventName: "TransferBatch", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: ierc1155MetadataUriAbi, + eventName: 'TransferBatch', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ierc1155MetadataUriAbi}__ and `eventName` set to `"TransferSingle"` */ export const watchIerc1155MetadataUriTransferSingleEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: ierc1155MetadataUriAbi, - eventName: "TransferSingle", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: ierc1155MetadataUriAbi, + eventName: 'TransferSingle', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ierc1155MetadataUriAbi}__ and `eventName` set to `"URI"` */ export const watchIerc1155MetadataUriUriEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: ierc1155MetadataUriAbi, - eventName: "URI", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: ierc1155MetadataUriAbi, + eventName: 'URI', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc1155ReceiverAbi}__ */ export const readIerc1155Receiver = /*#__PURE__*/ createReadContract({ - abi: ierc1155ReceiverAbi, -}); + abi: ierc1155ReceiverAbi, +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc1155ReceiverAbi}__ and `functionName` set to `"supportsInterface"` */ export const readIerc1155ReceiverSupportsInterface = - /*#__PURE__*/ createReadContract({ - abi: ierc1155ReceiverAbi, - functionName: "supportsInterface", - }); + /*#__PURE__*/ createReadContract({ + abi: ierc1155ReceiverAbi, + functionName: 'supportsInterface', + }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link ierc1155ReceiverAbi}__ */ export const writeIerc1155Receiver = /*#__PURE__*/ createWriteContract({ - abi: ierc1155ReceiverAbi, -}); + abi: ierc1155ReceiverAbi, +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link ierc1155ReceiverAbi}__ and `functionName` set to `"onERC1155BatchReceived"` */ export const writeIerc1155ReceiverOnErc1155BatchReceived = - /*#__PURE__*/ createWriteContract({ - abi: ierc1155ReceiverAbi, - functionName: "onERC1155BatchReceived", - }); + /*#__PURE__*/ createWriteContract({ + abi: ierc1155ReceiverAbi, + functionName: 'onERC1155BatchReceived', + }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link ierc1155ReceiverAbi}__ and `functionName` set to `"onERC1155Received"` */ export const writeIerc1155ReceiverOnErc1155Received = - /*#__PURE__*/ createWriteContract({ - abi: ierc1155ReceiverAbi, - functionName: "onERC1155Received", - }); + /*#__PURE__*/ createWriteContract({ + abi: ierc1155ReceiverAbi, + functionName: 'onERC1155Received', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link ierc1155ReceiverAbi}__ */ export const simulateIerc1155Receiver = /*#__PURE__*/ createSimulateContract({ - abi: ierc1155ReceiverAbi, -}); + abi: ierc1155ReceiverAbi, +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link ierc1155ReceiverAbi}__ and `functionName` set to `"onERC1155BatchReceived"` */ export const simulateIerc1155ReceiverOnErc1155BatchReceived = - /*#__PURE__*/ createSimulateContract({ - abi: ierc1155ReceiverAbi, - functionName: "onERC1155BatchReceived", - }); + /*#__PURE__*/ createSimulateContract({ + abi: ierc1155ReceiverAbi, + functionName: 'onERC1155BatchReceived', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link ierc1155ReceiverAbi}__ and `functionName` set to `"onERC1155Received"` */ export const simulateIerc1155ReceiverOnErc1155Received = - /*#__PURE__*/ createSimulateContract({ - abi: ierc1155ReceiverAbi, - functionName: "onERC1155Received", - }); + /*#__PURE__*/ createSimulateContract({ + abi: ierc1155ReceiverAbi, + functionName: 'onERC1155Received', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc1271Abi}__ */ export const readIerc1271 = /*#__PURE__*/ createReadContract({ - abi: ierc1271Abi, -}); + abi: ierc1271Abi, +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc1271Abi}__ and `functionName` set to `"isValidSignature"` */ export const readIerc1271IsValidSignature = /*#__PURE__*/ createReadContract({ - abi: ierc1271Abi, - functionName: "isValidSignature", -}); + abi: ierc1271Abi, + functionName: 'isValidSignature', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc1822ProxiableAbi}__ */ export const readIerc1822Proxiable = /*#__PURE__*/ createReadContract({ - abi: ierc1822ProxiableAbi, -}); + abi: ierc1822ProxiableAbi, +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc1822ProxiableAbi}__ and `functionName` set to `"proxiableUUID"` */ export const readIerc1822ProxiableProxiableUuid = - /*#__PURE__*/ createReadContract({ - abi: ierc1822ProxiableAbi, - functionName: "proxiableUUID", - }); + /*#__PURE__*/ createReadContract({ + abi: ierc1822ProxiableAbi, + functionName: 'proxiableUUID', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ierc1967Abi}__ */ export const watchIerc1967Event = /*#__PURE__*/ createWatchContractEvent({ - abi: ierc1967Abi, -}); + abi: ierc1967Abi, +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ierc1967Abi}__ and `eventName` set to `"AdminChanged"` */ export const watchIerc1967AdminChangedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: ierc1967Abi, - eventName: "AdminChanged", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: ierc1967Abi, + eventName: 'AdminChanged', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ierc1967Abi}__ and `eventName` set to `"BeaconUpgraded"` */ export const watchIerc1967BeaconUpgradedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: ierc1967Abi, - eventName: "BeaconUpgraded", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: ierc1967Abi, + eventName: 'BeaconUpgraded', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ierc1967Abi}__ and `eventName` set to `"Upgraded"` */ export const watchIerc1967UpgradedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: ierc1967Abi, - eventName: "Upgraded", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: ierc1967Abi, + eventName: 'Upgraded', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc20MetadataAbi}__ */ export const readIerc20Metadata = /*#__PURE__*/ createReadContract({ - abi: ierc20MetadataAbi, -}); + abi: ierc20MetadataAbi, +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc20MetadataAbi}__ and `functionName` set to `"allowance"` */ export const readIerc20MetadataAllowance = /*#__PURE__*/ createReadContract({ - abi: ierc20MetadataAbi, - functionName: "allowance", -}); + abi: ierc20MetadataAbi, + functionName: 'allowance', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc20MetadataAbi}__ and `functionName` set to `"balanceOf"` */ export const readIerc20MetadataBalanceOf = /*#__PURE__*/ createReadContract({ - abi: ierc20MetadataAbi, - functionName: "balanceOf", -}); + abi: ierc20MetadataAbi, + functionName: 'balanceOf', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc20MetadataAbi}__ and `functionName` set to `"decimals"` */ export const readIerc20MetadataDecimals = /*#__PURE__*/ createReadContract({ - abi: ierc20MetadataAbi, - functionName: "decimals", -}); + abi: ierc20MetadataAbi, + functionName: 'decimals', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc20MetadataAbi}__ and `functionName` set to `"name"` */ export const readIerc20MetadataName = /*#__PURE__*/ createReadContract({ - abi: ierc20MetadataAbi, - functionName: "name", -}); + abi: ierc20MetadataAbi, + functionName: 'name', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc20MetadataAbi}__ and `functionName` set to `"symbol"` */ export const readIerc20MetadataSymbol = /*#__PURE__*/ createReadContract({ - abi: ierc20MetadataAbi, - functionName: "symbol", -}); + abi: ierc20MetadataAbi, + functionName: 'symbol', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc20MetadataAbi}__ and `functionName` set to `"totalSupply"` */ export const readIerc20MetadataTotalSupply = /*#__PURE__*/ createReadContract({ - abi: ierc20MetadataAbi, - functionName: "totalSupply", -}); + abi: ierc20MetadataAbi, + functionName: 'totalSupply', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link ierc20MetadataAbi}__ */ export const writeIerc20Metadata = /*#__PURE__*/ createWriteContract({ - abi: ierc20MetadataAbi, -}); + abi: ierc20MetadataAbi, +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link ierc20MetadataAbi}__ and `functionName` set to `"approve"` */ export const writeIerc20MetadataApprove = /*#__PURE__*/ createWriteContract({ - abi: ierc20MetadataAbi, - functionName: "approve", -}); + abi: ierc20MetadataAbi, + functionName: 'approve', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link ierc20MetadataAbi}__ and `functionName` set to `"transfer"` */ export const writeIerc20MetadataTransfer = /*#__PURE__*/ createWriteContract({ - abi: ierc20MetadataAbi, - functionName: "transfer", -}); + abi: ierc20MetadataAbi, + functionName: 'transfer', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link ierc20MetadataAbi}__ and `functionName` set to `"transferFrom"` */ export const writeIerc20MetadataTransferFrom = - /*#__PURE__*/ createWriteContract({ - abi: ierc20MetadataAbi, - functionName: "transferFrom", - }); + /*#__PURE__*/ createWriteContract({ + abi: ierc20MetadataAbi, + functionName: 'transferFrom', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link ierc20MetadataAbi}__ */ export const simulateIerc20Metadata = /*#__PURE__*/ createSimulateContract({ - abi: ierc20MetadataAbi, -}); + abi: ierc20MetadataAbi, +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link ierc20MetadataAbi}__ and `functionName` set to `"approve"` */ export const simulateIerc20MetadataApprove = - /*#__PURE__*/ createSimulateContract({ - abi: ierc20MetadataAbi, - functionName: "approve", - }); + /*#__PURE__*/ createSimulateContract({ + abi: ierc20MetadataAbi, + functionName: 'approve', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link ierc20MetadataAbi}__ and `functionName` set to `"transfer"` */ export const simulateIerc20MetadataTransfer = - /*#__PURE__*/ createSimulateContract({ - abi: ierc20MetadataAbi, - functionName: "transfer", - }); + /*#__PURE__*/ createSimulateContract({ + abi: ierc20MetadataAbi, + functionName: 'transfer', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link ierc20MetadataAbi}__ and `functionName` set to `"transferFrom"` */ export const simulateIerc20MetadataTransferFrom = - /*#__PURE__*/ createSimulateContract({ - abi: ierc20MetadataAbi, - functionName: "transferFrom", - }); + /*#__PURE__*/ createSimulateContract({ + abi: ierc20MetadataAbi, + functionName: 'transferFrom', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ierc20MetadataAbi}__ */ export const watchIerc20MetadataEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: ierc20MetadataAbi, -}); + abi: ierc20MetadataAbi, +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ierc20MetadataAbi}__ and `eventName` set to `"Approval"` */ export const watchIerc20MetadataApprovalEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: ierc20MetadataAbi, - eventName: "Approval", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: ierc20MetadataAbi, + eventName: 'Approval', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ierc20MetadataAbi}__ and `eventName` set to `"Transfer"` */ export const watchIerc20MetadataTransferEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: ierc20MetadataAbi, - eventName: "Transfer", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: ierc20MetadataAbi, + eventName: 'Transfer', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc20PermitAbi}__ */ export const readIerc20Permit = /*#__PURE__*/ createReadContract({ - abi: ierc20PermitAbi, -}); + abi: ierc20PermitAbi, +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc20PermitAbi}__ and `functionName` set to `"DOMAIN_SEPARATOR"` */ export const readIerc20PermitDomainSeparator = /*#__PURE__*/ createReadContract( - { abi: ierc20PermitAbi, functionName: "DOMAIN_SEPARATOR" }, -); + { abi: ierc20PermitAbi, functionName: 'DOMAIN_SEPARATOR' }, +) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc20PermitAbi}__ and `functionName` set to `"nonces"` */ export const readIerc20PermitNonces = /*#__PURE__*/ createReadContract({ - abi: ierc20PermitAbi, - functionName: "nonces", -}); + abi: ierc20PermitAbi, + functionName: 'nonces', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link ierc20PermitAbi}__ */ export const writeIerc20Permit = /*#__PURE__*/ createWriteContract({ - abi: ierc20PermitAbi, -}); + abi: ierc20PermitAbi, +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link ierc20PermitAbi}__ and `functionName` set to `"permit"` */ export const writeIerc20PermitPermit = /*#__PURE__*/ createWriteContract({ - abi: ierc20PermitAbi, - functionName: "permit", -}); + abi: ierc20PermitAbi, + functionName: 'permit', +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link ierc20PermitAbi}__ */ export const simulateIerc20Permit = /*#__PURE__*/ createSimulateContract({ - abi: ierc20PermitAbi, -}); + abi: ierc20PermitAbi, +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link ierc20PermitAbi}__ and `functionName` set to `"permit"` */ export const simulateIerc20PermitPermit = /*#__PURE__*/ createSimulateContract({ - abi: ierc20PermitAbi, - functionName: "permit", -}); + abi: ierc20PermitAbi, + functionName: 'permit', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc5646Abi}__ */ export const readIerc5646 = /*#__PURE__*/ createReadContract({ - abi: ierc5646Abi, -}); + abi: ierc5646Abi, +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc5646Abi}__ and `functionName` set to `"getStateFingerprint"` */ export const readIerc5646GetStateFingerprint = /*#__PURE__*/ createReadContract( - { abi: ierc5646Abi, functionName: "getStateFingerprint" }, -); + { abi: ierc5646Abi, functionName: 'getStateFingerprint' }, +) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link ierc721EnumerableAbi}__ + */ +export const readIerc721Enumerable = /*#__PURE__*/ createReadContract({ + abi: ierc721EnumerableAbi, +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link ierc721EnumerableAbi}__ and `functionName` set to `"balanceOf"` + */ +export const readIerc721EnumerableBalanceOf = /*#__PURE__*/ createReadContract({ + abi: ierc721EnumerableAbi, + functionName: 'balanceOf', +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link ierc721EnumerableAbi}__ and `functionName` set to `"getApproved"` + */ +export const readIerc721EnumerableGetApproved = + /*#__PURE__*/ createReadContract({ + abi: ierc721EnumerableAbi, + functionName: 'getApproved', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link ierc721EnumerableAbi}__ and `functionName` set to `"isApprovedForAll"` + */ +export const readIerc721EnumerableIsApprovedForAll = + /*#__PURE__*/ createReadContract({ + abi: ierc721EnumerableAbi, + functionName: 'isApprovedForAll', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link ierc721EnumerableAbi}__ and `functionName` set to `"ownerOf"` + */ +export const readIerc721EnumerableOwnerOf = /*#__PURE__*/ createReadContract({ + abi: ierc721EnumerableAbi, + functionName: 'ownerOf', +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link ierc721EnumerableAbi}__ and `functionName` set to `"supportsInterface"` + */ +export const readIerc721EnumerableSupportsInterface = + /*#__PURE__*/ createReadContract({ + abi: ierc721EnumerableAbi, + functionName: 'supportsInterface', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link ierc721EnumerableAbi}__ and `functionName` set to `"tokenByIndex"` + */ +export const readIerc721EnumerableTokenByIndex = + /*#__PURE__*/ createReadContract({ + abi: ierc721EnumerableAbi, + functionName: 'tokenByIndex', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link ierc721EnumerableAbi}__ and `functionName` set to `"tokenOfOwnerByIndex"` + */ +export const readIerc721EnumerableTokenOfOwnerByIndex = + /*#__PURE__*/ createReadContract({ + abi: ierc721EnumerableAbi, + functionName: 'tokenOfOwnerByIndex', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link ierc721EnumerableAbi}__ and `functionName` set to `"totalSupply"` + */ +export const readIerc721EnumerableTotalSupply = + /*#__PURE__*/ createReadContract({ + abi: ierc721EnumerableAbi, + functionName: 'totalSupply', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link ierc721EnumerableAbi}__ + */ +export const writeIerc721Enumerable = /*#__PURE__*/ createWriteContract({ + abi: ierc721EnumerableAbi, +}) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link ierc721EnumerableAbi}__ and `functionName` set to `"approve"` + */ +export const writeIerc721EnumerableApprove = /*#__PURE__*/ createWriteContract({ + abi: ierc721EnumerableAbi, + functionName: 'approve', +}) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link ierc721EnumerableAbi}__ and `functionName` set to `"safeTransferFrom"` + */ +export const writeIerc721EnumerableSafeTransferFrom = + /*#__PURE__*/ createWriteContract({ + abi: ierc721EnumerableAbi, + functionName: 'safeTransferFrom', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link ierc721EnumerableAbi}__ and `functionName` set to `"setApprovalForAll"` + */ +export const writeIerc721EnumerableSetApprovalForAll = + /*#__PURE__*/ createWriteContract({ + abi: ierc721EnumerableAbi, + functionName: 'setApprovalForAll', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link ierc721EnumerableAbi}__ and `functionName` set to `"transferFrom"` + */ +export const writeIerc721EnumerableTransferFrom = + /*#__PURE__*/ createWriteContract({ + abi: ierc721EnumerableAbi, + functionName: 'transferFrom', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link ierc721EnumerableAbi}__ + */ +export const simulateIerc721Enumerable = /*#__PURE__*/ createSimulateContract({ + abi: ierc721EnumerableAbi, +}) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link ierc721EnumerableAbi}__ and `functionName` set to `"approve"` + */ +export const simulateIerc721EnumerableApprove = + /*#__PURE__*/ createSimulateContract({ + abi: ierc721EnumerableAbi, + functionName: 'approve', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link ierc721EnumerableAbi}__ and `functionName` set to `"safeTransferFrom"` + */ +export const simulateIerc721EnumerableSafeTransferFrom = + /*#__PURE__*/ createSimulateContract({ + abi: ierc721EnumerableAbi, + functionName: 'safeTransferFrom', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link ierc721EnumerableAbi}__ and `functionName` set to `"setApprovalForAll"` + */ +export const simulateIerc721EnumerableSetApprovalForAll = + /*#__PURE__*/ createSimulateContract({ + abi: ierc721EnumerableAbi, + functionName: 'setApprovalForAll', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link ierc721EnumerableAbi}__ and `functionName` set to `"transferFrom"` + */ +export const simulateIerc721EnumerableTransferFrom = + /*#__PURE__*/ createSimulateContract({ + abi: ierc721EnumerableAbi, + functionName: 'transferFrom', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ierc721EnumerableAbi}__ + */ +export const watchIerc721EnumerableEvent = + /*#__PURE__*/ createWatchContractEvent({ abi: ierc721EnumerableAbi }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ierc721EnumerableAbi}__ and `eventName` set to `"Approval"` + */ +export const watchIerc721EnumerableApprovalEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: ierc721EnumerableAbi, + eventName: 'Approval', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ierc721EnumerableAbi}__ and `eventName` set to `"ApprovalForAll"` + */ +export const watchIerc721EnumerableApprovalForAllEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: ierc721EnumerableAbi, + eventName: 'ApprovalForAll', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ierc721EnumerableAbi}__ and `eventName` set to `"Transfer"` + */ +export const watchIerc721EnumerableTransferEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: ierc721EnumerableAbi, + eventName: 'Transfer', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc721MetadataAbi}__ */ export const readIerc721Metadata = /*#__PURE__*/ createReadContract({ - abi: ierc721MetadataAbi, -}); + abi: ierc721MetadataAbi, +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc721MetadataAbi}__ and `functionName` set to `"balanceOf"` */ export const readIerc721MetadataBalanceOf = /*#__PURE__*/ createReadContract({ - abi: ierc721MetadataAbi, - functionName: "balanceOf", -}); + abi: ierc721MetadataAbi, + functionName: 'balanceOf', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc721MetadataAbi}__ and `functionName` set to `"getApproved"` */ export const readIerc721MetadataGetApproved = /*#__PURE__*/ createReadContract({ - abi: ierc721MetadataAbi, - functionName: "getApproved", -}); + abi: ierc721MetadataAbi, + functionName: 'getApproved', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc721MetadataAbi}__ and `functionName` set to `"isApprovedForAll"` */ export const readIerc721MetadataIsApprovedForAll = - /*#__PURE__*/ createReadContract({ - abi: ierc721MetadataAbi, - functionName: "isApprovedForAll", - }); + /*#__PURE__*/ createReadContract({ + abi: ierc721MetadataAbi, + functionName: 'isApprovedForAll', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc721MetadataAbi}__ and `functionName` set to `"name"` */ export const readIerc721MetadataName = /*#__PURE__*/ createReadContract({ - abi: ierc721MetadataAbi, - functionName: "name", -}); + abi: ierc721MetadataAbi, + functionName: 'name', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc721MetadataAbi}__ and `functionName` set to `"ownerOf"` */ export const readIerc721MetadataOwnerOf = /*#__PURE__*/ createReadContract({ - abi: ierc721MetadataAbi, - functionName: "ownerOf", -}); + abi: ierc721MetadataAbi, + functionName: 'ownerOf', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc721MetadataAbi}__ and `functionName` set to `"supportsInterface"` */ export const readIerc721MetadataSupportsInterface = - /*#__PURE__*/ createReadContract({ - abi: ierc721MetadataAbi, - functionName: "supportsInterface", - }); + /*#__PURE__*/ createReadContract({ + abi: ierc721MetadataAbi, + functionName: 'supportsInterface', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc721MetadataAbi}__ and `functionName` set to `"symbol"` */ export const readIerc721MetadataSymbol = /*#__PURE__*/ createReadContract({ - abi: ierc721MetadataAbi, - functionName: "symbol", -}); + abi: ierc721MetadataAbi, + functionName: 'symbol', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link ierc721MetadataAbi}__ and `functionName` set to `"tokenURI"` */ export const readIerc721MetadataTokenUri = /*#__PURE__*/ createReadContract({ - abi: ierc721MetadataAbi, - functionName: "tokenURI", -}); + abi: ierc721MetadataAbi, + functionName: 'tokenURI', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link ierc721MetadataAbi}__ */ export const writeIerc721Metadata = /*#__PURE__*/ createWriteContract({ - abi: ierc721MetadataAbi, -}); + abi: ierc721MetadataAbi, +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link ierc721MetadataAbi}__ and `functionName` set to `"approve"` */ export const writeIerc721MetadataApprove = /*#__PURE__*/ createWriteContract({ - abi: ierc721MetadataAbi, - functionName: "approve", -}); + abi: ierc721MetadataAbi, + functionName: 'approve', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link ierc721MetadataAbi}__ and `functionName` set to `"safeTransferFrom"` */ export const writeIerc721MetadataSafeTransferFrom = - /*#__PURE__*/ createWriteContract({ - abi: ierc721MetadataAbi, - functionName: "safeTransferFrom", - }); + /*#__PURE__*/ createWriteContract({ + abi: ierc721MetadataAbi, + functionName: 'safeTransferFrom', + }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link ierc721MetadataAbi}__ and `functionName` set to `"setApprovalForAll"` */ export const writeIerc721MetadataSetApprovalForAll = - /*#__PURE__*/ createWriteContract({ - abi: ierc721MetadataAbi, - functionName: "setApprovalForAll", - }); + /*#__PURE__*/ createWriteContract({ + abi: ierc721MetadataAbi, + functionName: 'setApprovalForAll', + }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link ierc721MetadataAbi}__ and `functionName` set to `"transferFrom"` */ export const writeIerc721MetadataTransferFrom = - /*#__PURE__*/ createWriteContract({ - abi: ierc721MetadataAbi, - functionName: "transferFrom", - }); + /*#__PURE__*/ createWriteContract({ + abi: ierc721MetadataAbi, + functionName: 'transferFrom', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link ierc721MetadataAbi}__ */ export const simulateIerc721Metadata = /*#__PURE__*/ createSimulateContract({ - abi: ierc721MetadataAbi, -}); + abi: ierc721MetadataAbi, +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link ierc721MetadataAbi}__ and `functionName` set to `"approve"` */ export const simulateIerc721MetadataApprove = - /*#__PURE__*/ createSimulateContract({ - abi: ierc721MetadataAbi, - functionName: "approve", - }); + /*#__PURE__*/ createSimulateContract({ + abi: ierc721MetadataAbi, + functionName: 'approve', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link ierc721MetadataAbi}__ and `functionName` set to `"safeTransferFrom"` */ export const simulateIerc721MetadataSafeTransferFrom = - /*#__PURE__*/ createSimulateContract({ - abi: ierc721MetadataAbi, - functionName: "safeTransferFrom", - }); + /*#__PURE__*/ createSimulateContract({ + abi: ierc721MetadataAbi, + functionName: 'safeTransferFrom', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link ierc721MetadataAbi}__ and `functionName` set to `"setApprovalForAll"` */ export const simulateIerc721MetadataSetApprovalForAll = - /*#__PURE__*/ createSimulateContract({ - abi: ierc721MetadataAbi, - functionName: "setApprovalForAll", - }); + /*#__PURE__*/ createSimulateContract({ + abi: ierc721MetadataAbi, + functionName: 'setApprovalForAll', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link ierc721MetadataAbi}__ and `functionName` set to `"transferFrom"` */ export const simulateIerc721MetadataTransferFrom = - /*#__PURE__*/ createSimulateContract({ - abi: ierc721MetadataAbi, - functionName: "transferFrom", - }); + /*#__PURE__*/ createSimulateContract({ + abi: ierc721MetadataAbi, + functionName: 'transferFrom', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ierc721MetadataAbi}__ */ export const watchIerc721MetadataEvent = /*#__PURE__*/ createWatchContractEvent( - { abi: ierc721MetadataAbi }, -); + { abi: ierc721MetadataAbi }, +) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ierc721MetadataAbi}__ and `eventName` set to `"Approval"` */ export const watchIerc721MetadataApprovalEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: ierc721MetadataAbi, - eventName: "Approval", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: ierc721MetadataAbi, + eventName: 'Approval', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ierc721MetadataAbi}__ and `eventName` set to `"ApprovalForAll"` */ export const watchIerc721MetadataApprovalForAllEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: ierc721MetadataAbi, - eventName: "ApprovalForAll", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: ierc721MetadataAbi, + eventName: 'ApprovalForAll', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ierc721MetadataAbi}__ and `eventName` set to `"Transfer"` */ export const watchIerc721MetadataTransferEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: ierc721MetadataAbi, - eventName: "Transfer", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: ierc721MetadataAbi, + eventName: 'Transfer', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link ierc721PermitAbi}__ + */ +export const readIerc721Permit = /*#__PURE__*/ createReadContract({ + abi: ierc721PermitAbi, +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link ierc721PermitAbi}__ and `functionName` set to `"DOMAIN_SEPARATOR"` + */ +export const readIerc721PermitDomainSeparator = + /*#__PURE__*/ createReadContract({ + abi: ierc721PermitAbi, + functionName: 'DOMAIN_SEPARATOR', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link ierc721PermitAbi}__ and `functionName` set to `"PERMIT_TYPEHASH"` + */ +export const readIerc721PermitPermitTypehash = /*#__PURE__*/ createReadContract( + { abi: ierc721PermitAbi, functionName: 'PERMIT_TYPEHASH' }, +) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link ierc721PermitAbi}__ and `functionName` set to `"balanceOf"` + */ +export const readIerc721PermitBalanceOf = /*#__PURE__*/ createReadContract({ + abi: ierc721PermitAbi, + functionName: 'balanceOf', +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link ierc721PermitAbi}__ and `functionName` set to `"getApproved"` + */ +export const readIerc721PermitGetApproved = /*#__PURE__*/ createReadContract({ + abi: ierc721PermitAbi, + functionName: 'getApproved', +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link ierc721PermitAbi}__ and `functionName` set to `"isApprovedForAll"` + */ +export const readIerc721PermitIsApprovedForAll = + /*#__PURE__*/ createReadContract({ + abi: ierc721PermitAbi, + functionName: 'isApprovedForAll', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link ierc721PermitAbi}__ and `functionName` set to `"ownerOf"` + */ +export const readIerc721PermitOwnerOf = /*#__PURE__*/ createReadContract({ + abi: ierc721PermitAbi, + functionName: 'ownerOf', +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link ierc721PermitAbi}__ and `functionName` set to `"supportsInterface"` + */ +export const readIerc721PermitSupportsInterface = + /*#__PURE__*/ createReadContract({ + abi: ierc721PermitAbi, + functionName: 'supportsInterface', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link ierc721PermitAbi}__ + */ +export const writeIerc721Permit = /*#__PURE__*/ createWriteContract({ + abi: ierc721PermitAbi, +}) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link ierc721PermitAbi}__ and `functionName` set to `"approve"` + */ +export const writeIerc721PermitApprove = /*#__PURE__*/ createWriteContract({ + abi: ierc721PermitAbi, + functionName: 'approve', +}) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link ierc721PermitAbi}__ and `functionName` set to `"permit"` + */ +export const writeIerc721PermitPermit = /*#__PURE__*/ createWriteContract({ + abi: ierc721PermitAbi, + functionName: 'permit', +}) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link ierc721PermitAbi}__ and `functionName` set to `"safeTransferFrom"` + */ +export const writeIerc721PermitSafeTransferFrom = + /*#__PURE__*/ createWriteContract({ + abi: ierc721PermitAbi, + functionName: 'safeTransferFrom', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link ierc721PermitAbi}__ and `functionName` set to `"setApprovalForAll"` + */ +export const writeIerc721PermitSetApprovalForAll = + /*#__PURE__*/ createWriteContract({ + abi: ierc721PermitAbi, + functionName: 'setApprovalForAll', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link ierc721PermitAbi}__ and `functionName` set to `"transferFrom"` + */ +export const writeIerc721PermitTransferFrom = /*#__PURE__*/ createWriteContract( + { abi: ierc721PermitAbi, functionName: 'transferFrom' }, +) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link ierc721PermitAbi}__ + */ +export const simulateIerc721Permit = /*#__PURE__*/ createSimulateContract({ + abi: ierc721PermitAbi, +}) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link ierc721PermitAbi}__ and `functionName` set to `"approve"` + */ +export const simulateIerc721PermitApprove = + /*#__PURE__*/ createSimulateContract({ + abi: ierc721PermitAbi, + functionName: 'approve', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link ierc721PermitAbi}__ and `functionName` set to `"permit"` + */ +export const simulateIerc721PermitPermit = /*#__PURE__*/ createSimulateContract( + { abi: ierc721PermitAbi, functionName: 'permit' }, +) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link ierc721PermitAbi}__ and `functionName` set to `"safeTransferFrom"` + */ +export const simulateIerc721PermitSafeTransferFrom = + /*#__PURE__*/ createSimulateContract({ + abi: ierc721PermitAbi, + functionName: 'safeTransferFrom', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link ierc721PermitAbi}__ and `functionName` set to `"setApprovalForAll"` + */ +export const simulateIerc721PermitSetApprovalForAll = + /*#__PURE__*/ createSimulateContract({ + abi: ierc721PermitAbi, + functionName: 'setApprovalForAll', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link ierc721PermitAbi}__ and `functionName` set to `"transferFrom"` + */ +export const simulateIerc721PermitTransferFrom = + /*#__PURE__*/ createSimulateContract({ + abi: ierc721PermitAbi, + functionName: 'transferFrom', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ierc721PermitAbi}__ + */ +export const watchIerc721PermitEvent = /*#__PURE__*/ createWatchContractEvent({ + abi: ierc721PermitAbi, +}) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ierc721PermitAbi}__ and `eventName` set to `"Approval"` + */ +export const watchIerc721PermitApprovalEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: ierc721PermitAbi, + eventName: 'Approval', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ierc721PermitAbi}__ and `eventName` set to `"ApprovalForAll"` + */ +export const watchIerc721PermitApprovalForAllEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: ierc721PermitAbi, + eventName: 'ApprovalForAll', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ierc721PermitAbi}__ and `eventName` set to `"Transfer"` + */ +export const watchIerc721PermitTransferEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: ierc721PermitAbi, + eventName: 'Transfer', + }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link ierc721ReceiverAbi}__ */ export const writeIerc721Receiver = /*#__PURE__*/ createWriteContract({ - abi: ierc721ReceiverAbi, -}); + abi: ierc721ReceiverAbi, +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link ierc721ReceiverAbi}__ and `functionName` set to `"onERC721Received"` */ export const writeIerc721ReceiverOnErc721Received = - /*#__PURE__*/ createWriteContract({ - abi: ierc721ReceiverAbi, - functionName: "onERC721Received", - }); + /*#__PURE__*/ createWriteContract({ + abi: ierc721ReceiverAbi, + functionName: 'onERC721Received', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link ierc721ReceiverAbi}__ */ export const simulateIerc721Receiver = /*#__PURE__*/ createSimulateContract({ - abi: ierc721ReceiverAbi, -}); + abi: ierc721ReceiverAbi, +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link ierc721ReceiverAbi}__ and `functionName` set to `"onERC721Received"` */ export const simulateIerc721ReceiverOnErc721Received = - /*#__PURE__*/ createSimulateContract({ - abi: ierc721ReceiverAbi, - functionName: "onERC721Received", - }); + /*#__PURE__*/ createSimulateContract({ + abi: ierc721ReceiverAbi, + functionName: 'onERC721Received', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link iMultiTokenCategoryRegistryAbi}__ */ export const readIMultiTokenCategoryRegistry = /*#__PURE__*/ createReadContract( - { abi: iMultiTokenCategoryRegistryAbi }, -); + { abi: iMultiTokenCategoryRegistryAbi }, +) /** * Wraps __{@link readContract}__ with `abi` set to __{@link iMultiTokenCategoryRegistryAbi}__ and `functionName` set to `"registeredCategoryValue"` */ export const readIMultiTokenCategoryRegistryRegisteredCategoryValue = - /*#__PURE__*/ createReadContract({ - abi: iMultiTokenCategoryRegistryAbi, - functionName: "registeredCategoryValue", - }); + /*#__PURE__*/ createReadContract({ + abi: iMultiTokenCategoryRegistryAbi, + functionName: 'registeredCategoryValue', + }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link iMultiTokenCategoryRegistryAbi}__ */ export const writeIMultiTokenCategoryRegistry = - /*#__PURE__*/ createWriteContract({ abi: iMultiTokenCategoryRegistryAbi }); + /*#__PURE__*/ createWriteContract({ abi: iMultiTokenCategoryRegistryAbi }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link iMultiTokenCategoryRegistryAbi}__ and `functionName` set to `"registerCategoryValue"` */ export const writeIMultiTokenCategoryRegistryRegisterCategoryValue = - /*#__PURE__*/ createWriteContract({ - abi: iMultiTokenCategoryRegistryAbi, - functionName: "registerCategoryValue", - }); + /*#__PURE__*/ createWriteContract({ + abi: iMultiTokenCategoryRegistryAbi, + functionName: 'registerCategoryValue', + }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link iMultiTokenCategoryRegistryAbi}__ and `functionName` set to `"unregisterCategoryValue"` */ export const writeIMultiTokenCategoryRegistryUnregisterCategoryValue = - /*#__PURE__*/ createWriteContract({ - abi: iMultiTokenCategoryRegistryAbi, - functionName: "unregisterCategoryValue", - }); + /*#__PURE__*/ createWriteContract({ + abi: iMultiTokenCategoryRegistryAbi, + functionName: 'unregisterCategoryValue', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link iMultiTokenCategoryRegistryAbi}__ */ export const simulateIMultiTokenCategoryRegistry = - /*#__PURE__*/ createSimulateContract({ abi: iMultiTokenCategoryRegistryAbi }); + /*#__PURE__*/ createSimulateContract({ abi: iMultiTokenCategoryRegistryAbi }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link iMultiTokenCategoryRegistryAbi}__ and `functionName` set to `"registerCategoryValue"` */ export const simulateIMultiTokenCategoryRegistryRegisterCategoryValue = - /*#__PURE__*/ createSimulateContract({ - abi: iMultiTokenCategoryRegistryAbi, - functionName: "registerCategoryValue", - }); + /*#__PURE__*/ createSimulateContract({ + abi: iMultiTokenCategoryRegistryAbi, + functionName: 'registerCategoryValue', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link iMultiTokenCategoryRegistryAbi}__ and `functionName` set to `"unregisterCategoryValue"` */ export const simulateIMultiTokenCategoryRegistryUnregisterCategoryValue = - /*#__PURE__*/ createSimulateContract({ - abi: iMultiTokenCategoryRegistryAbi, - functionName: "unregisterCategoryValue", - }); + /*#__PURE__*/ createSimulateContract({ + abi: iMultiTokenCategoryRegistryAbi, + functionName: 'unregisterCategoryValue', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iMultiTokenCategoryRegistryAbi}__ */ export const watchIMultiTokenCategoryRegistryEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: iMultiTokenCategoryRegistryAbi, - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: iMultiTokenCategoryRegistryAbi, + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iMultiTokenCategoryRegistryAbi}__ and `eventName` set to `"CategoryRegistered"` */ export const watchIMultiTokenCategoryRegistryCategoryRegisteredEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: iMultiTokenCategoryRegistryAbi, - eventName: "CategoryRegistered", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: iMultiTokenCategoryRegistryAbi, + eventName: 'CategoryRegistered', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iMultiTokenCategoryRegistryAbi}__ and `eventName` set to `"CategoryUnregistered"` */ export const watchIMultiTokenCategoryRegistryCategoryUnregisteredEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: iMultiTokenCategoryRegistryAbi, - eventName: "CategoryUnregistered", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: iMultiTokenCategoryRegistryAbi, + eventName: 'CategoryUnregistered', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link iMulticall3Abi}__ */ export const readIMulticall3 = /*#__PURE__*/ createReadContract({ - abi: iMulticall3Abi, -}); + abi: iMulticall3Abi, +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link iMulticall3Abi}__ and `functionName` set to `"getBasefee"` */ export const readIMulticall3GetBasefee = /*#__PURE__*/ createReadContract({ - abi: iMulticall3Abi, - functionName: "getBasefee", -}); + abi: iMulticall3Abi, + functionName: 'getBasefee', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link iMulticall3Abi}__ and `functionName` set to `"getBlockHash"` */ export const readIMulticall3GetBlockHash = /*#__PURE__*/ createReadContract({ - abi: iMulticall3Abi, - functionName: "getBlockHash", -}); + abi: iMulticall3Abi, + functionName: 'getBlockHash', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link iMulticall3Abi}__ and `functionName` set to `"getBlockNumber"` */ export const readIMulticall3GetBlockNumber = /*#__PURE__*/ createReadContract({ - abi: iMulticall3Abi, - functionName: "getBlockNumber", -}); + abi: iMulticall3Abi, + functionName: 'getBlockNumber', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link iMulticall3Abi}__ and `functionName` set to `"getChainId"` */ export const readIMulticall3GetChainId = /*#__PURE__*/ createReadContract({ - abi: iMulticall3Abi, - functionName: "getChainId", -}); + abi: iMulticall3Abi, + functionName: 'getChainId', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link iMulticall3Abi}__ and `functionName` set to `"getCurrentBlockCoinbase"` */ export const readIMulticall3GetCurrentBlockCoinbase = - /*#__PURE__*/ createReadContract({ - abi: iMulticall3Abi, - functionName: "getCurrentBlockCoinbase", - }); + /*#__PURE__*/ createReadContract({ + abi: iMulticall3Abi, + functionName: 'getCurrentBlockCoinbase', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link iMulticall3Abi}__ and `functionName` set to `"getCurrentBlockDifficulty"` */ export const readIMulticall3GetCurrentBlockDifficulty = - /*#__PURE__*/ createReadContract({ - abi: iMulticall3Abi, - functionName: "getCurrentBlockDifficulty", - }); + /*#__PURE__*/ createReadContract({ + abi: iMulticall3Abi, + functionName: 'getCurrentBlockDifficulty', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link iMulticall3Abi}__ and `functionName` set to `"getCurrentBlockGasLimit"` */ export const readIMulticall3GetCurrentBlockGasLimit = - /*#__PURE__*/ createReadContract({ - abi: iMulticall3Abi, - functionName: "getCurrentBlockGasLimit", - }); + /*#__PURE__*/ createReadContract({ + abi: iMulticall3Abi, + functionName: 'getCurrentBlockGasLimit', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link iMulticall3Abi}__ and `functionName` set to `"getCurrentBlockTimestamp"` */ export const readIMulticall3GetCurrentBlockTimestamp = - /*#__PURE__*/ createReadContract({ - abi: iMulticall3Abi, - functionName: "getCurrentBlockTimestamp", - }); + /*#__PURE__*/ createReadContract({ + abi: iMulticall3Abi, + functionName: 'getCurrentBlockTimestamp', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link iMulticall3Abi}__ and `functionName` set to `"getEthBalance"` */ export const readIMulticall3GetEthBalance = /*#__PURE__*/ createReadContract({ - abi: iMulticall3Abi, - functionName: "getEthBalance", -}); + abi: iMulticall3Abi, + functionName: 'getEthBalance', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link iMulticall3Abi}__ and `functionName` set to `"getLastBlockHash"` */ export const readIMulticall3GetLastBlockHash = /*#__PURE__*/ createReadContract( - { abi: iMulticall3Abi, functionName: "getLastBlockHash" }, -); + { abi: iMulticall3Abi, functionName: 'getLastBlockHash' }, +) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link iMulticall3Abi}__ */ export const writeIMulticall3 = /*#__PURE__*/ createWriteContract({ - abi: iMulticall3Abi, -}); + abi: iMulticall3Abi, +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link iMulticall3Abi}__ and `functionName` set to `"aggregate"` */ export const writeIMulticall3Aggregate = /*#__PURE__*/ createWriteContract({ - abi: iMulticall3Abi, - functionName: "aggregate", -}); + abi: iMulticall3Abi, + functionName: 'aggregate', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link iMulticall3Abi}__ and `functionName` set to `"aggregate3"` */ export const writeIMulticall3Aggregate3 = /*#__PURE__*/ createWriteContract({ - abi: iMulticall3Abi, - functionName: "aggregate3", -}); + abi: iMulticall3Abi, + functionName: 'aggregate3', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link iMulticall3Abi}__ and `functionName` set to `"aggregate3Value"` */ export const writeIMulticall3Aggregate3Value = - /*#__PURE__*/ createWriteContract({ - abi: iMulticall3Abi, - functionName: "aggregate3Value", - }); + /*#__PURE__*/ createWriteContract({ + abi: iMulticall3Abi, + functionName: 'aggregate3Value', + }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link iMulticall3Abi}__ and `functionName` set to `"blockAndAggregate"` */ export const writeIMulticall3BlockAndAggregate = - /*#__PURE__*/ createWriteContract({ - abi: iMulticall3Abi, - functionName: "blockAndAggregate", - }); + /*#__PURE__*/ createWriteContract({ + abi: iMulticall3Abi, + functionName: 'blockAndAggregate', + }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link iMulticall3Abi}__ and `functionName` set to `"tryAggregate"` */ export const writeIMulticall3TryAggregate = /*#__PURE__*/ createWriteContract({ - abi: iMulticall3Abi, - functionName: "tryAggregate", -}); + abi: iMulticall3Abi, + functionName: 'tryAggregate', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link iMulticall3Abi}__ and `functionName` set to `"tryBlockAndAggregate"` */ export const writeIMulticall3TryBlockAndAggregate = - /*#__PURE__*/ createWriteContract({ - abi: iMulticall3Abi, - functionName: "tryBlockAndAggregate", - }); + /*#__PURE__*/ createWriteContract({ + abi: iMulticall3Abi, + functionName: 'tryBlockAndAggregate', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link iMulticall3Abi}__ */ export const simulateIMulticall3 = /*#__PURE__*/ createSimulateContract({ - abi: iMulticall3Abi, -}); + abi: iMulticall3Abi, +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link iMulticall3Abi}__ and `functionName` set to `"aggregate"` */ export const simulateIMulticall3Aggregate = - /*#__PURE__*/ createSimulateContract({ - abi: iMulticall3Abi, - functionName: "aggregate", - }); + /*#__PURE__*/ createSimulateContract({ + abi: iMulticall3Abi, + functionName: 'aggregate', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link iMulticall3Abi}__ and `functionName` set to `"aggregate3"` */ export const simulateIMulticall3Aggregate3 = - /*#__PURE__*/ createSimulateContract({ - abi: iMulticall3Abi, - functionName: "aggregate3", - }); + /*#__PURE__*/ createSimulateContract({ + abi: iMulticall3Abi, + functionName: 'aggregate3', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link iMulticall3Abi}__ and `functionName` set to `"aggregate3Value"` */ export const simulateIMulticall3Aggregate3Value = - /*#__PURE__*/ createSimulateContract({ - abi: iMulticall3Abi, - functionName: "aggregate3Value", - }); + /*#__PURE__*/ createSimulateContract({ + abi: iMulticall3Abi, + functionName: 'aggregate3Value', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link iMulticall3Abi}__ and `functionName` set to `"blockAndAggregate"` */ export const simulateIMulticall3BlockAndAggregate = - /*#__PURE__*/ createSimulateContract({ - abi: iMulticall3Abi, - functionName: "blockAndAggregate", - }); + /*#__PURE__*/ createSimulateContract({ + abi: iMulticall3Abi, + functionName: 'blockAndAggregate', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link iMulticall3Abi}__ and `functionName` set to `"tryAggregate"` */ export const simulateIMulticall3TryAggregate = - /*#__PURE__*/ createSimulateContract({ - abi: iMulticall3Abi, - functionName: "tryAggregate", - }); + /*#__PURE__*/ createSimulateContract({ + abi: iMulticall3Abi, + functionName: 'tryAggregate', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link iMulticall3Abi}__ and `functionName` set to `"tryBlockAndAggregate"` */ export const simulateIMulticall3TryBlockAndAggregate = - /*#__PURE__*/ createSimulateContract({ - abi: iMulticall3Abi, - functionName: "tryBlockAndAggregate", - }); + /*#__PURE__*/ createSimulateContract({ + abi: iMulticall3Abi, + functionName: 'tryBlockAndAggregate', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link ipwnDeployerAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ */ -export const readIpwnDeployer = /*#__PURE__*/ createReadContract({ - abi: ipwnDeployerAbi, -}); +export const readINonfungiblePositionManager = /*#__PURE__*/ createReadContract( + { abi: iNonfungiblePositionManagerAbi }, +) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link ipwnDeployerAbi}__ and `functionName` set to `"computeAddress"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"DOMAIN_SEPARATOR"` */ -export const readIpwnDeployerComputeAddress = /*#__PURE__*/ createReadContract({ - abi: ipwnDeployerAbi, - functionName: "computeAddress", -}); +export const readINonfungiblePositionManagerDomainSeparator = + /*#__PURE__*/ createReadContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'DOMAIN_SEPARATOR', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link ipwnDeployerAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"PERMIT_TYPEHASH"` */ -export const writeIpwnDeployer = /*#__PURE__*/ createWriteContract({ - abi: ipwnDeployerAbi, -}); +export const readINonfungiblePositionManagerPermitTypehash = + /*#__PURE__*/ createReadContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'PERMIT_TYPEHASH', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link ipwnDeployerAbi}__ and `functionName` set to `"deploy"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"WETH9"` */ -export const writeIpwnDeployerDeploy = /*#__PURE__*/ createWriteContract({ - abi: ipwnDeployerAbi, - functionName: "deploy", -}); +export const readINonfungiblePositionManagerWeth9 = + /*#__PURE__*/ createReadContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'WETH9', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link ipwnDeployerAbi}__ and `functionName` set to `"deployAndTransferOwnership"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"balanceOf"` */ -export const writeIpwnDeployerDeployAndTransferOwnership = - /*#__PURE__*/ createWriteContract({ - abi: ipwnDeployerAbi, - functionName: "deployAndTransferOwnership", - }); +export const readINonfungiblePositionManagerBalanceOf = + /*#__PURE__*/ createReadContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'balanceOf', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link ipwnDeployerAbi}__ and `functionName` set to `"owner"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"factory"` */ -export const writeIpwnDeployerOwner = /*#__PURE__*/ createWriteContract({ - abi: ipwnDeployerAbi, - functionName: "owner", -}); +export const readINonfungiblePositionManagerFactory = + /*#__PURE__*/ createReadContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'factory', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link ipwnDeployerAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"getApproved"` */ -export const simulateIpwnDeployer = /*#__PURE__*/ createSimulateContract({ - abi: ipwnDeployerAbi, -}); +export const readINonfungiblePositionManagerGetApproved = + /*#__PURE__*/ createReadContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'getApproved', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link ipwnDeployerAbi}__ and `functionName` set to `"deploy"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"isApprovedForAll"` */ -export const simulateIpwnDeployerDeploy = /*#__PURE__*/ createSimulateContract({ - abi: ipwnDeployerAbi, - functionName: "deploy", -}); +export const readINonfungiblePositionManagerIsApprovedForAll = + /*#__PURE__*/ createReadContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'isApprovedForAll', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link ipwnDeployerAbi}__ and `functionName` set to `"deployAndTransferOwnership"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"name"` */ -export const simulateIpwnDeployerDeployAndTransferOwnership = - /*#__PURE__*/ createSimulateContract({ - abi: ipwnDeployerAbi, - functionName: "deployAndTransferOwnership", - }); +export const readINonfungiblePositionManagerName = + /*#__PURE__*/ createReadContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'name', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link ipwnDeployerAbi}__ and `functionName` set to `"owner"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"ownerOf"` */ -export const simulateIpwnDeployerOwner = /*#__PURE__*/ createSimulateContract({ - abi: ipwnDeployerAbi, - functionName: "owner", -}); +export const readINonfungiblePositionManagerOwnerOf = + /*#__PURE__*/ createReadContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'ownerOf', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link ipwnLoanMetadataProviderAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"positions"` */ -export const readIpwnLoanMetadataProvider = /*#__PURE__*/ createReadContract({ - abi: ipwnLoanMetadataProviderAbi, -}); +export const readINonfungiblePositionManagerPositions = + /*#__PURE__*/ createReadContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'positions', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link ipwnLoanMetadataProviderAbi}__ and `functionName` set to `"loanMetadataUri"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"supportsInterface"` */ -export const readIpwnLoanMetadataProviderLoanMetadataUri = - /*#__PURE__*/ createReadContract({ - abi: ipwnLoanMetadataProviderAbi, - functionName: "loanMetadataUri", - }); +export const readINonfungiblePositionManagerSupportsInterface = + /*#__PURE__*/ createReadContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'supportsInterface', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link iPoolAdapterAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"symbol"` */ -export const writeIPoolAdapter = /*#__PURE__*/ createWriteContract({ - abi: iPoolAdapterAbi, -}); +export const readINonfungiblePositionManagerSymbol = + /*#__PURE__*/ createReadContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'symbol', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link iPoolAdapterAbi}__ and `functionName` set to `"supply"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"tokenByIndex"` */ -export const writeIPoolAdapterSupply = /*#__PURE__*/ createWriteContract({ - abi: iPoolAdapterAbi, - functionName: "supply", -}); +export const readINonfungiblePositionManagerTokenByIndex = + /*#__PURE__*/ createReadContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'tokenByIndex', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link iPoolAdapterAbi}__ and `functionName` set to `"withdraw"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"tokenOfOwnerByIndex"` */ -export const writeIPoolAdapterWithdraw = /*#__PURE__*/ createWriteContract({ - abi: iPoolAdapterAbi, - functionName: "withdraw", -}); +export const readINonfungiblePositionManagerTokenOfOwnerByIndex = + /*#__PURE__*/ createReadContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'tokenOfOwnerByIndex', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link iPoolAdapterAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"tokenURI"` */ -export const simulateIPoolAdapter = /*#__PURE__*/ createSimulateContract({ - abi: iPoolAdapterAbi, -}); +export const readINonfungiblePositionManagerTokenUri = + /*#__PURE__*/ createReadContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'tokenURI', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link iPoolAdapterAbi}__ and `functionName` set to `"supply"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"totalSupply"` */ -export const simulateIPoolAdapterSupply = /*#__PURE__*/ createSimulateContract({ - abi: iPoolAdapterAbi, - functionName: "supply", -}); +export const readINonfungiblePositionManagerTotalSupply = + /*#__PURE__*/ createReadContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'totalSupply', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link iPoolAdapterAbi}__ and `functionName` set to `"withdraw"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ */ -export const simulateIPoolAdapterWithdraw = - /*#__PURE__*/ createSimulateContract({ - abi: iPoolAdapterAbi, - functionName: "withdraw", - }); +export const writeINonfungiblePositionManager = + /*#__PURE__*/ createWriteContract({ abi: iNonfungiblePositionManagerAbi }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link iStateFingerpringComputerAbi}__ + * Wraps __{@link writeContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"approve"` */ -export const readIStateFingerpringComputer = /*#__PURE__*/ createReadContract({ - abi: iStateFingerpringComputerAbi, -}); +export const writeINonfungiblePositionManagerApprove = + /*#__PURE__*/ createWriteContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'approve', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link iStateFingerpringComputerAbi}__ and `functionName` set to `"computeStateFingerprint"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"burn"` */ -export const readIStateFingerpringComputerComputeStateFingerprint = - /*#__PURE__*/ createReadContract({ - abi: iStateFingerpringComputerAbi, - functionName: "computeStateFingerprint", - }); +export const writeINonfungiblePositionManagerBurn = + /*#__PURE__*/ createWriteContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'burn', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link iStateFingerpringComputerAbi}__ and `functionName` set to `"supportsToken"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"collect"` */ -export const readIStateFingerpringComputerSupportsToken = - /*#__PURE__*/ createReadContract({ - abi: iStateFingerpringComputerAbi, - functionName: "supportsToken", - }); +export const writeINonfungiblePositionManagerCollect = + /*#__PURE__*/ createWriteContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'collect', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link iTransparentUpgradeableProxyAbi}__ + * Wraps __{@link writeContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"createAndInitializePoolIfNecessary"` */ -export const readITransparentUpgradeableProxy = - /*#__PURE__*/ createReadContract({ abi: iTransparentUpgradeableProxyAbi }); +export const writeINonfungiblePositionManagerCreateAndInitializePoolIfNecessary = + /*#__PURE__*/ createWriteContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'createAndInitializePoolIfNecessary', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link iTransparentUpgradeableProxyAbi}__ and `functionName` set to `"admin"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"decreaseLiquidity"` */ -export const readITransparentUpgradeableProxyAdmin = - /*#__PURE__*/ createReadContract({ - abi: iTransparentUpgradeableProxyAbi, - functionName: "admin", - }); +export const writeINonfungiblePositionManagerDecreaseLiquidity = + /*#__PURE__*/ createWriteContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'decreaseLiquidity', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link iTransparentUpgradeableProxyAbi}__ and `functionName` set to `"implementation"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"increaseLiquidity"` */ -export const readITransparentUpgradeableProxyImplementation = - /*#__PURE__*/ createReadContract({ - abi: iTransparentUpgradeableProxyAbi, - functionName: "implementation", - }); +export const writeINonfungiblePositionManagerIncreaseLiquidity = + /*#__PURE__*/ createWriteContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'increaseLiquidity', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link iTransparentUpgradeableProxyAbi}__ + * Wraps __{@link writeContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"mint"` */ -export const writeITransparentUpgradeableProxy = - /*#__PURE__*/ createWriteContract({ abi: iTransparentUpgradeableProxyAbi }); +export const writeINonfungiblePositionManagerMint = + /*#__PURE__*/ createWriteContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'mint', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link iTransparentUpgradeableProxyAbi}__ and `functionName` set to `"changeAdmin"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"permit"` */ -export const writeITransparentUpgradeableProxyChangeAdmin = - /*#__PURE__*/ createWriteContract({ - abi: iTransparentUpgradeableProxyAbi, - functionName: "changeAdmin", - }); +export const writeINonfungiblePositionManagerPermit = + /*#__PURE__*/ createWriteContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'permit', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link iTransparentUpgradeableProxyAbi}__ and `functionName` set to `"upgradeTo"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"refundETH"` */ -export const writeITransparentUpgradeableProxyUpgradeTo = - /*#__PURE__*/ createWriteContract({ - abi: iTransparentUpgradeableProxyAbi, - functionName: "upgradeTo", - }); +export const writeINonfungiblePositionManagerRefundEth = + /*#__PURE__*/ createWriteContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'refundETH', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link iTransparentUpgradeableProxyAbi}__ and `functionName` set to `"upgradeToAndCall"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"safeTransferFrom"` */ -export const writeITransparentUpgradeableProxyUpgradeToAndCall = - /*#__PURE__*/ createWriteContract({ - abi: iTransparentUpgradeableProxyAbi, - functionName: "upgradeToAndCall", - }); +export const writeINonfungiblePositionManagerSafeTransferFrom = + /*#__PURE__*/ createWriteContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'safeTransferFrom', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link iTransparentUpgradeableProxyAbi}__ + * Wraps __{@link writeContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"setApprovalForAll"` */ -export const simulateITransparentUpgradeableProxy = - /*#__PURE__*/ createSimulateContract({ - abi: iTransparentUpgradeableProxyAbi, - }); +export const writeINonfungiblePositionManagerSetApprovalForAll = + /*#__PURE__*/ createWriteContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'setApprovalForAll', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link iTransparentUpgradeableProxyAbi}__ and `functionName` set to `"changeAdmin"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"sweepToken"` */ -export const simulateITransparentUpgradeableProxyChangeAdmin = - /*#__PURE__*/ createSimulateContract({ - abi: iTransparentUpgradeableProxyAbi, - functionName: "changeAdmin", - }); +export const writeINonfungiblePositionManagerSweepToken = + /*#__PURE__*/ createWriteContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'sweepToken', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link iTransparentUpgradeableProxyAbi}__ and `functionName` set to `"upgradeTo"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"transferFrom"` */ -export const simulateITransparentUpgradeableProxyUpgradeTo = - /*#__PURE__*/ createSimulateContract({ - abi: iTransparentUpgradeableProxyAbi, - functionName: "upgradeTo", - }); +export const writeINonfungiblePositionManagerTransferFrom = + /*#__PURE__*/ createWriteContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'transferFrom', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link iTransparentUpgradeableProxyAbi}__ and `functionName` set to `"upgradeToAndCall"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"unwrapWETH9"` */ -export const simulateITransparentUpgradeableProxyUpgradeToAndCall = - /*#__PURE__*/ createSimulateContract({ - abi: iTransparentUpgradeableProxyAbi, - functionName: "upgradeToAndCall", - }); +export const writeINonfungiblePositionManagerUnwrapWeth9 = + /*#__PURE__*/ createWriteContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'unwrapWETH9', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iTransparentUpgradeableProxyAbi}__ + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ */ -export const watchITransparentUpgradeableProxyEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: iTransparentUpgradeableProxyAbi, - }); +export const simulateINonfungiblePositionManager = + /*#__PURE__*/ createSimulateContract({ abi: iNonfungiblePositionManagerAbi }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iTransparentUpgradeableProxyAbi}__ and `eventName` set to `"AdminChanged"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"approve"` */ -export const watchITransparentUpgradeableProxyAdminChangedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: iTransparentUpgradeableProxyAbi, - eventName: "AdminChanged", - }); +export const simulateINonfungiblePositionManagerApprove = + /*#__PURE__*/ createSimulateContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'approve', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iTransparentUpgradeableProxyAbi}__ and `eventName` set to `"BeaconUpgraded"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"burn"` */ -export const watchITransparentUpgradeableProxyBeaconUpgradedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: iTransparentUpgradeableProxyAbi, - eventName: "BeaconUpgraded", - }); +export const simulateINonfungiblePositionManagerBurn = + /*#__PURE__*/ createSimulateContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'burn', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iTransparentUpgradeableProxyAbi}__ and `eventName` set to `"Upgraded"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"collect"` */ -export const watchITransparentUpgradeableProxyUpgradedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: iTransparentUpgradeableProxyAbi, - eventName: "Upgraded", - }); +export const simulateINonfungiblePositionManagerCollect = + /*#__PURE__*/ createSimulateContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'collect', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link initializableAbi}__ + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"createAndInitializePoolIfNecessary"` */ -export const watchInitializableEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: initializableAbi, -}); +export const simulateINonfungiblePositionManagerCreateAndInitializePoolIfNecessary = + /*#__PURE__*/ createSimulateContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'createAndInitializePoolIfNecessary', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link initializableAbi}__ and `eventName` set to `"Initialized"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"decreaseLiquidity"` */ -export const watchInitializableInitializedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: initializableAbi, - eventName: "Initialized", - }); +export const simulateINonfungiblePositionManagerDecreaseLiquidity = + /*#__PURE__*/ createSimulateContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'decreaseLiquidity', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link multiTokenAbi}__ + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"increaseLiquidity"` */ -export const readMultiToken = /*#__PURE__*/ createReadContract({ - abi: multiTokenAbi, -}); +export const simulateINonfungiblePositionManagerIncreaseLiquidity = + /*#__PURE__*/ createSimulateContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'increaseLiquidity', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link multiTokenAbi}__ and `functionName` set to `"CATEGORY_NOT_REGISTERED"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"mint"` */ -export const readMultiTokenCategoryNotRegistered = - /*#__PURE__*/ createReadContract({ - abi: multiTokenAbi, - functionName: "CATEGORY_NOT_REGISTERED", - }); +export const simulateINonfungiblePositionManagerMint = + /*#__PURE__*/ createSimulateContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'mint', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link multiTokenAbi}__ and `functionName` set to `"CRYPTO_KITTIES_INTERFACE_ID"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"permit"` */ -export const readMultiTokenCryptoKittiesInterfaceId = - /*#__PURE__*/ createReadContract({ - abi: multiTokenAbi, - functionName: "CRYPTO_KITTIES_INTERFACE_ID", - }); +export const simulateINonfungiblePositionManagerPermit = + /*#__PURE__*/ createSimulateContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'permit', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link multiTokenAbi}__ and `functionName` set to `"ERC1155_INTERFACE_ID"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"refundETH"` */ -export const readMultiTokenErc1155InterfaceId = - /*#__PURE__*/ createReadContract({ - abi: multiTokenAbi, - functionName: "ERC1155_INTERFACE_ID", - }); +export const simulateINonfungiblePositionManagerRefundEth = + /*#__PURE__*/ createSimulateContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'refundETH', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link multiTokenAbi}__ and `functionName` set to `"ERC20_INTERFACE_ID"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"safeTransferFrom"` */ -export const readMultiTokenErc20InterfaceId = /*#__PURE__*/ createReadContract({ - abi: multiTokenAbi, - functionName: "ERC20_INTERFACE_ID", -}); +export const simulateINonfungiblePositionManagerSafeTransferFrom = + /*#__PURE__*/ createSimulateContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'safeTransferFrom', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link multiTokenAbi}__ and `functionName` set to `"ERC721_INTERFACE_ID"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"setApprovalForAll"` */ -export const readMultiTokenErc721InterfaceId = /*#__PURE__*/ createReadContract( - { abi: multiTokenAbi, functionName: "ERC721_INTERFACE_ID" }, -); +export const simulateINonfungiblePositionManagerSetApprovalForAll = + /*#__PURE__*/ createSimulateContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'setApprovalForAll', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"sweepToken"` */ -export const readMultiTokenCategoryRegistry = /*#__PURE__*/ createReadContract({ - abi: multiTokenCategoryRegistryAbi, -}); +export const simulateINonfungiblePositionManagerSweepToken = + /*#__PURE__*/ createSimulateContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'sweepToken', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `functionName` set to `"CATEGORY_NOT_REGISTERED"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"transferFrom"` */ -export const readMultiTokenCategoryRegistryCategoryNotRegistered = - /*#__PURE__*/ createReadContract({ - abi: multiTokenCategoryRegistryAbi, - functionName: "CATEGORY_NOT_REGISTERED", - }); +export const simulateINonfungiblePositionManagerTransferFrom = + /*#__PURE__*/ createSimulateContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'transferFrom', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `functionName` set to `"owner"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `functionName` set to `"unwrapWETH9"` */ -export const readMultiTokenCategoryRegistryOwner = - /*#__PURE__*/ createReadContract({ - abi: multiTokenCategoryRegistryAbi, - functionName: "owner", - }); +export const simulateINonfungiblePositionManagerUnwrapWeth9 = + /*#__PURE__*/ createSimulateContract({ + abi: iNonfungiblePositionManagerAbi, + functionName: 'unwrapWETH9', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `functionName` set to `"pendingOwner"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ */ -export const readMultiTokenCategoryRegistryPendingOwner = - /*#__PURE__*/ createReadContract({ - abi: multiTokenCategoryRegistryAbi, - functionName: "pendingOwner", - }); +export const watchINonfungiblePositionManagerEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: iNonfungiblePositionManagerAbi, + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `functionName` set to `"registeredCategoryValue"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `eventName` set to `"Approval"` */ -export const readMultiTokenCategoryRegistryRegisteredCategoryValue = - /*#__PURE__*/ createReadContract({ - abi: multiTokenCategoryRegistryAbi, - functionName: "registeredCategoryValue", - }); +export const watchINonfungiblePositionManagerApprovalEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: iNonfungiblePositionManagerAbi, + eventName: 'Approval', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `functionName` set to `"supportsInterface"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `eventName` set to `"ApprovalForAll"` */ -export const readMultiTokenCategoryRegistrySupportsInterface = - /*#__PURE__*/ createReadContract({ - abi: multiTokenCategoryRegistryAbi, - functionName: "supportsInterface", - }); +export const watchINonfungiblePositionManagerApprovalForAllEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: iNonfungiblePositionManagerAbi, + eventName: 'ApprovalForAll', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `eventName` set to `"Collect"` */ -export const writeMultiTokenCategoryRegistry = - /*#__PURE__*/ createWriteContract({ abi: multiTokenCategoryRegistryAbi }); +export const watchINonfungiblePositionManagerCollectEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: iNonfungiblePositionManagerAbi, + eventName: 'Collect', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `functionName` set to `"acceptOwnership"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `eventName` set to `"DecreaseLiquidity"` */ -export const writeMultiTokenCategoryRegistryAcceptOwnership = - /*#__PURE__*/ createWriteContract({ - abi: multiTokenCategoryRegistryAbi, - functionName: "acceptOwnership", - }); +export const watchINonfungiblePositionManagerDecreaseLiquidityEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: iNonfungiblePositionManagerAbi, + eventName: 'DecreaseLiquidity', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `functionName` set to `"registerCategoryValue"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `eventName` set to `"IncreaseLiquidity"` */ -export const writeMultiTokenCategoryRegistryRegisterCategoryValue = - /*#__PURE__*/ createWriteContract({ - abi: multiTokenCategoryRegistryAbi, - functionName: "registerCategoryValue", - }); +export const watchINonfungiblePositionManagerIncreaseLiquidityEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: iNonfungiblePositionManagerAbi, + eventName: 'IncreaseLiquidity', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `functionName` set to `"renounceOwnership"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iNonfungiblePositionManagerAbi}__ and `eventName` set to `"Transfer"` */ -export const writeMultiTokenCategoryRegistryRenounceOwnership = - /*#__PURE__*/ createWriteContract({ - abi: multiTokenCategoryRegistryAbi, - functionName: "renounceOwnership", - }); +export const watchINonfungiblePositionManagerTransferEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: iNonfungiblePositionManagerAbi, + eventName: 'Transfer', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `functionName` set to `"transferOwnership"` + * Wraps __{@link readContract}__ with `abi` set to __{@link ipwnAcceptorControllerAbi}__ */ -export const writeMultiTokenCategoryRegistryTransferOwnership = - /*#__PURE__*/ createWriteContract({ - abi: multiTokenCategoryRegistryAbi, - functionName: "transferOwnership", - }); +export const readIpwnAcceptorController = /*#__PURE__*/ createReadContract({ + abi: ipwnAcceptorControllerAbi, +}) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `functionName` set to `"unregisterCategoryValue"` + * Wraps __{@link readContract}__ with `abi` set to __{@link ipwnAcceptorControllerAbi}__ and `functionName` set to `"checkAcceptor"` */ -export const writeMultiTokenCategoryRegistryUnregisterCategoryValue = - /*#__PURE__*/ createWriteContract({ - abi: multiTokenCategoryRegistryAbi, - functionName: "unregisterCategoryValue", - }); +export const readIpwnAcceptorControllerCheckAcceptor = + /*#__PURE__*/ createReadContract({ + abi: ipwnAcceptorControllerAbi, + functionName: 'checkAcceptor', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link ipwnDeployerAbi}__ */ -export const simulateMultiTokenCategoryRegistry = - /*#__PURE__*/ createSimulateContract({ abi: multiTokenCategoryRegistryAbi }); +export const readIpwnDeployer = /*#__PURE__*/ createReadContract({ + abi: ipwnDeployerAbi, +}) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `functionName` set to `"acceptOwnership"` + * Wraps __{@link readContract}__ with `abi` set to __{@link ipwnDeployerAbi}__ and `functionName` set to `"computeAddress"` */ -export const simulateMultiTokenCategoryRegistryAcceptOwnership = - /*#__PURE__*/ createSimulateContract({ - abi: multiTokenCategoryRegistryAbi, - functionName: "acceptOwnership", - }); +export const readIpwnDeployerComputeAddress = /*#__PURE__*/ createReadContract({ + abi: ipwnDeployerAbi, + functionName: 'computeAddress', +}) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `functionName` set to `"registerCategoryValue"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link ipwnDeployerAbi}__ */ -export const simulateMultiTokenCategoryRegistryRegisterCategoryValue = - /*#__PURE__*/ createSimulateContract({ - abi: multiTokenCategoryRegistryAbi, - functionName: "registerCategoryValue", - }); +export const writeIpwnDeployer = /*#__PURE__*/ createWriteContract({ + abi: ipwnDeployerAbi, +}) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `functionName` set to `"renounceOwnership"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link ipwnDeployerAbi}__ and `functionName` set to `"deploy"` */ -export const simulateMultiTokenCategoryRegistryRenounceOwnership = - /*#__PURE__*/ createSimulateContract({ - abi: multiTokenCategoryRegistryAbi, - functionName: "renounceOwnership", - }); +export const writeIpwnDeployerDeploy = /*#__PURE__*/ createWriteContract({ + abi: ipwnDeployerAbi, + functionName: 'deploy', +}) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `functionName` set to `"transferOwnership"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link ipwnDeployerAbi}__ and `functionName` set to `"deployAndTransferOwnership"` */ -export const simulateMultiTokenCategoryRegistryTransferOwnership = - /*#__PURE__*/ createSimulateContract({ - abi: multiTokenCategoryRegistryAbi, - functionName: "transferOwnership", - }); +export const writeIpwnDeployerDeployAndTransferOwnership = + /*#__PURE__*/ createWriteContract({ + abi: ipwnDeployerAbi, + functionName: 'deployAndTransferOwnership', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `functionName` set to `"unregisterCategoryValue"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link ipwnDeployerAbi}__ and `functionName` set to `"owner"` */ -export const simulateMultiTokenCategoryRegistryUnregisterCategoryValue = - /*#__PURE__*/ createSimulateContract({ - abi: multiTokenCategoryRegistryAbi, - functionName: "unregisterCategoryValue", - }); +export const writeIpwnDeployerOwner = /*#__PURE__*/ createWriteContract({ + abi: ipwnDeployerAbi, + functionName: 'owner', +}) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ + * Wraps __{@link simulateContract}__ with `abi` set to __{@link ipwnDeployerAbi}__ */ -export const watchMultiTokenCategoryRegistryEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: multiTokenCategoryRegistryAbi, - }); +export const simulateIpwnDeployer = /*#__PURE__*/ createSimulateContract({ + abi: ipwnDeployerAbi, +}) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `eventName` set to `"CategoryRegistered"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link ipwnDeployerAbi}__ and `functionName` set to `"deploy"` */ -export const watchMultiTokenCategoryRegistryCategoryRegisteredEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: multiTokenCategoryRegistryAbi, - eventName: "CategoryRegistered", - }); +export const simulateIpwnDeployerDeploy = /*#__PURE__*/ createSimulateContract({ + abi: ipwnDeployerAbi, + functionName: 'deploy', +}) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `eventName` set to `"CategoryUnregistered"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link ipwnDeployerAbi}__ and `functionName` set to `"deployAndTransferOwnership"` */ -export const watchMultiTokenCategoryRegistryCategoryUnregisteredEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: multiTokenCategoryRegistryAbi, - eventName: "CategoryUnregistered", - }); +export const simulateIpwnDeployerDeployAndTransferOwnership = + /*#__PURE__*/ createSimulateContract({ + abi: ipwnDeployerAbi, + functionName: 'deployAndTransferOwnership', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `eventName` set to `"OwnershipTransferStarted"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link ipwnDeployerAbi}__ and `functionName` set to `"owner"` */ -export const watchMultiTokenCategoryRegistryOwnershipTransferStartedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: multiTokenCategoryRegistryAbi, - eventName: "OwnershipTransferStarted", - }); +export const simulateIpwnDeployerOwner = /*#__PURE__*/ createSimulateContract({ + abi: ipwnDeployerAbi, + functionName: 'owner', +}) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `eventName` set to `"OwnershipTransferred"` + * Wraps __{@link readContract}__ with `abi` set to __{@link ipwnLoanMetadataProviderAbi}__ */ -export const watchMultiTokenCategoryRegistryOwnershipTransferredEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: multiTokenCategoryRegistryAbi, - eventName: "OwnershipTransferred", - }); +export const readIpwnLoanMetadataProvider = /*#__PURE__*/ createReadContract({ + abi: ipwnLoanMetadataProviderAbi, +}) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link ownableAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link ipwnLoanMetadataProviderAbi}__ and `functionName` set to `"loanMetadataUri"` */ -export const readOwnable = /*#__PURE__*/ createReadContract({ - abi: ownableAbi, -}); +export const readIpwnLoanMetadataProviderLoanMetadataUri = + /*#__PURE__*/ createReadContract({ + abi: ipwnLoanMetadataProviderAbi, + functionName: 'loanMetadataUri', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link ownableAbi}__ and `functionName` set to `"owner"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iPeripheryImmutableStateAbi}__ */ -export const readOwnableOwner = /*#__PURE__*/ createReadContract({ - abi: ownableAbi, - functionName: "owner", -}); +export const readIPeripheryImmutableState = /*#__PURE__*/ createReadContract({ + abi: iPeripheryImmutableStateAbi, +}) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link ownableAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link iPeripheryImmutableStateAbi}__ and `functionName` set to `"WETH9"` */ -export const writeOwnable = /*#__PURE__*/ createWriteContract({ - abi: ownableAbi, -}); +export const readIPeripheryImmutableStateWeth9 = + /*#__PURE__*/ createReadContract({ + abi: iPeripheryImmutableStateAbi, + functionName: 'WETH9', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link ownableAbi}__ and `functionName` set to `"renounceOwnership"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iPeripheryImmutableStateAbi}__ and `functionName` set to `"factory"` */ -export const writeOwnableRenounceOwnership = /*#__PURE__*/ createWriteContract({ - abi: ownableAbi, - functionName: "renounceOwnership", -}); +export const readIPeripheryImmutableStateFactory = + /*#__PURE__*/ createReadContract({ + abi: iPeripheryImmutableStateAbi, + functionName: 'factory', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link ownableAbi}__ and `functionName` set to `"transferOwnership"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iPeripheryPaymentsAbi}__ */ -export const writeOwnableTransferOwnership = /*#__PURE__*/ createWriteContract({ - abi: ownableAbi, - functionName: "transferOwnership", -}); +export const writeIPeripheryPayments = /*#__PURE__*/ createWriteContract({ + abi: iPeripheryPaymentsAbi, +}) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link ownableAbi}__ + * Wraps __{@link writeContract}__ with `abi` set to __{@link iPeripheryPaymentsAbi}__ and `functionName` set to `"refundETH"` */ -export const simulateOwnable = /*#__PURE__*/ createSimulateContract({ - abi: ownableAbi, -}); +export const writeIPeripheryPaymentsRefundEth = + /*#__PURE__*/ createWriteContract({ + abi: iPeripheryPaymentsAbi, + functionName: 'refundETH', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link ownableAbi}__ and `functionName` set to `"renounceOwnership"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iPeripheryPaymentsAbi}__ and `functionName` set to `"sweepToken"` */ -export const simulateOwnableRenounceOwnership = - /*#__PURE__*/ createSimulateContract({ - abi: ownableAbi, - functionName: "renounceOwnership", - }); +export const writeIPeripheryPaymentsSweepToken = + /*#__PURE__*/ createWriteContract({ + abi: iPeripheryPaymentsAbi, + functionName: 'sweepToken', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link ownableAbi}__ and `functionName` set to `"transferOwnership"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iPeripheryPaymentsAbi}__ and `functionName` set to `"unwrapWETH9"` */ -export const simulateOwnableTransferOwnership = - /*#__PURE__*/ createSimulateContract({ - abi: ownableAbi, - functionName: "transferOwnership", - }); +export const writeIPeripheryPaymentsUnwrapWeth9 = + /*#__PURE__*/ createWriteContract({ + abi: iPeripheryPaymentsAbi, + functionName: 'unwrapWETH9', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ownableAbi}__ + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iPeripheryPaymentsAbi}__ */ -export const watchOwnableEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: ownableAbi, -}); +export const simulateIPeripheryPayments = /*#__PURE__*/ createSimulateContract({ + abi: iPeripheryPaymentsAbi, +}) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ownableAbi}__ and `eventName` set to `"OwnershipTransferred"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iPeripheryPaymentsAbi}__ and `functionName` set to `"refundETH"` */ -export const watchOwnableOwnershipTransferredEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: ownableAbi, - eventName: "OwnershipTransferred", - }); +export const simulateIPeripheryPaymentsRefundEth = + /*#__PURE__*/ createSimulateContract({ + abi: iPeripheryPaymentsAbi, + functionName: 'refundETH', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link ownable2StepAbi}__ + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iPeripheryPaymentsAbi}__ and `functionName` set to `"sweepToken"` */ -export const readOwnable2Step = /*#__PURE__*/ createReadContract({ - abi: ownable2StepAbi, -}); +export const simulateIPeripheryPaymentsSweepToken = + /*#__PURE__*/ createSimulateContract({ + abi: iPeripheryPaymentsAbi, + functionName: 'sweepToken', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link ownable2StepAbi}__ and `functionName` set to `"owner"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iPeripheryPaymentsAbi}__ and `functionName` set to `"unwrapWETH9"` */ -export const readOwnable2StepOwner = /*#__PURE__*/ createReadContract({ - abi: ownable2StepAbi, - functionName: "owner", -}); +export const simulateIPeripheryPaymentsUnwrapWeth9 = + /*#__PURE__*/ createSimulateContract({ + abi: iPeripheryPaymentsAbi, + functionName: 'unwrapWETH9', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link ownable2StepAbi}__ and `functionName` set to `"pendingOwner"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iPoolAdapterAbi}__ */ -export const readOwnable2StepPendingOwner = /*#__PURE__*/ createReadContract({ - abi: ownable2StepAbi, - functionName: "pendingOwner", -}); +export const writeIPoolAdapter = /*#__PURE__*/ createWriteContract({ + abi: iPoolAdapterAbi, +}) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link ownable2StepAbi}__ + * Wraps __{@link writeContract}__ with `abi` set to __{@link iPoolAdapterAbi}__ and `functionName` set to `"supply"` */ -export const writeOwnable2Step = /*#__PURE__*/ createWriteContract({ - abi: ownable2StepAbi, -}); +export const writeIPoolAdapterSupply = /*#__PURE__*/ createWriteContract({ + abi: iPoolAdapterAbi, + functionName: 'supply', +}) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link ownable2StepAbi}__ and `functionName` set to `"acceptOwnership"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iPoolAdapterAbi}__ and `functionName` set to `"withdraw"` */ -export const writeOwnable2StepAcceptOwnership = - /*#__PURE__*/ createWriteContract({ - abi: ownable2StepAbi, - functionName: "acceptOwnership", - }); +export const writeIPoolAdapterWithdraw = /*#__PURE__*/ createWriteContract({ + abi: iPoolAdapterAbi, + functionName: 'withdraw', +}) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link ownable2StepAbi}__ and `functionName` set to `"renounceOwnership"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iPoolAdapterAbi}__ */ -export const writeOwnable2StepRenounceOwnership = - /*#__PURE__*/ createWriteContract({ - abi: ownable2StepAbi, - functionName: "renounceOwnership", - }); +export const simulateIPoolAdapter = /*#__PURE__*/ createSimulateContract({ + abi: iPoolAdapterAbi, +}) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link ownable2StepAbi}__ and `functionName` set to `"transferOwnership"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iPoolAdapterAbi}__ and `functionName` set to `"supply"` */ -export const writeOwnable2StepTransferOwnership = - /*#__PURE__*/ createWriteContract({ - abi: ownable2StepAbi, - functionName: "transferOwnership", - }); +export const simulateIPoolAdapterSupply = /*#__PURE__*/ createSimulateContract({ + abi: iPoolAdapterAbi, + functionName: 'supply', +}) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link ownable2StepAbi}__ + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iPoolAdapterAbi}__ and `functionName` set to `"withdraw"` */ -export const simulateOwnable2Step = /*#__PURE__*/ createSimulateContract({ - abi: ownable2StepAbi, -}); +export const simulateIPoolAdapterWithdraw = + /*#__PURE__*/ createSimulateContract({ + abi: iPoolAdapterAbi, + functionName: 'withdraw', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link ownable2StepAbi}__ and `functionName` set to `"acceptOwnership"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iPoolInitializerAbi}__ */ -export const simulateOwnable2StepAcceptOwnership = - /*#__PURE__*/ createSimulateContract({ - abi: ownable2StepAbi, - functionName: "acceptOwnership", - }); +export const writeIPoolInitializer = /*#__PURE__*/ createWriteContract({ + abi: iPoolInitializerAbi, +}) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link ownable2StepAbi}__ and `functionName` set to `"renounceOwnership"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iPoolInitializerAbi}__ and `functionName` set to `"createAndInitializePoolIfNecessary"` */ -export const simulateOwnable2StepRenounceOwnership = - /*#__PURE__*/ createSimulateContract({ - abi: ownable2StepAbi, - functionName: "renounceOwnership", - }); +export const writeIPoolInitializerCreateAndInitializePoolIfNecessary = + /*#__PURE__*/ createWriteContract({ + abi: iPoolInitializerAbi, + functionName: 'createAndInitializePoolIfNecessary', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link ownable2StepAbi}__ and `functionName` set to `"transferOwnership"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iPoolInitializerAbi}__ */ -export const simulateOwnable2StepTransferOwnership = - /*#__PURE__*/ createSimulateContract({ - abi: ownable2StepAbi, - functionName: "transferOwnership", - }); +export const simulateIPoolInitializer = /*#__PURE__*/ createSimulateContract({ + abi: iPoolInitializerAbi, +}) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ownable2StepAbi}__ + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iPoolInitializerAbi}__ and `functionName` set to `"createAndInitializePoolIfNecessary"` */ -export const watchOwnable2StepEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: ownable2StepAbi, -}); +export const simulateIPoolInitializerCreateAndInitializePoolIfNecessary = + /*#__PURE__*/ createSimulateContract({ + abi: iPoolInitializerAbi, + functionName: 'createAndInitializePoolIfNecessary', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ownable2StepAbi}__ and `eventName` set to `"OwnershipTransferStarted"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iStateFingerpringComputerAbi}__ */ -export const watchOwnable2StepOwnershipTransferStartedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: ownable2StepAbi, - eventName: "OwnershipTransferStarted", - }); +export const readIStateFingerpringComputer = /*#__PURE__*/ createReadContract({ + abi: iStateFingerpringComputerAbi, +}) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ownable2StepAbi}__ and `eventName` set to `"OwnershipTransferred"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iStateFingerpringComputerAbi}__ and `functionName` set to `"computeStateFingerprint"` */ -export const watchOwnable2StepOwnershipTransferredEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: ownable2StepAbi, - eventName: "OwnershipTransferred", - }); +export const readIStateFingerpringComputerComputeStateFingerprint = + /*#__PURE__*/ createReadContract({ + abi: iStateFingerpringComputerAbi, + functionName: 'computeStateFingerprint', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link ownable2StepUpgradeableAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link iStateFingerpringComputerAbi}__ and `functionName` set to `"supportsToken"` */ -export const readOwnable2StepUpgradeable = /*#__PURE__*/ createReadContract({ - abi: ownable2StepUpgradeableAbi, -}); +export const readIStateFingerpringComputerSupportsToken = + /*#__PURE__*/ createReadContract({ + abi: iStateFingerpringComputerAbi, + functionName: 'supportsToken', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link ownable2StepUpgradeableAbi}__ and `functionName` set to `"owner"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iTransparentUpgradeableProxyAbi}__ */ -export const readOwnable2StepUpgradeableOwner = - /*#__PURE__*/ createReadContract({ - abi: ownable2StepUpgradeableAbi, - functionName: "owner", - }); +export const readITransparentUpgradeableProxy = + /*#__PURE__*/ createReadContract({ abi: iTransparentUpgradeableProxyAbi }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link ownable2StepUpgradeableAbi}__ and `functionName` set to `"pendingOwner"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iTransparentUpgradeableProxyAbi}__ and `functionName` set to `"admin"` */ -export const readOwnable2StepUpgradeablePendingOwner = - /*#__PURE__*/ createReadContract({ - abi: ownable2StepUpgradeableAbi, - functionName: "pendingOwner", - }); +export const readITransparentUpgradeableProxyAdmin = + /*#__PURE__*/ createReadContract({ + abi: iTransparentUpgradeableProxyAbi, + functionName: 'admin', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link ownable2StepUpgradeableAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link iTransparentUpgradeableProxyAbi}__ and `functionName` set to `"implementation"` */ -export const writeOwnable2StepUpgradeable = /*#__PURE__*/ createWriteContract({ - abi: ownable2StepUpgradeableAbi, -}); +export const readITransparentUpgradeableProxyImplementation = + /*#__PURE__*/ createReadContract({ + abi: iTransparentUpgradeableProxyAbi, + functionName: 'implementation', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link ownable2StepUpgradeableAbi}__ and `functionName` set to `"acceptOwnership"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iTransparentUpgradeableProxyAbi}__ */ -export const writeOwnable2StepUpgradeableAcceptOwnership = - /*#__PURE__*/ createWriteContract({ - abi: ownable2StepUpgradeableAbi, - functionName: "acceptOwnership", - }); +export const writeITransparentUpgradeableProxy = + /*#__PURE__*/ createWriteContract({ abi: iTransparentUpgradeableProxyAbi }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link ownable2StepUpgradeableAbi}__ and `functionName` set to `"renounceOwnership"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iTransparentUpgradeableProxyAbi}__ and `functionName` set to `"changeAdmin"` */ -export const writeOwnable2StepUpgradeableRenounceOwnership = - /*#__PURE__*/ createWriteContract({ - abi: ownable2StepUpgradeableAbi, - functionName: "renounceOwnership", - }); +export const writeITransparentUpgradeableProxyChangeAdmin = + /*#__PURE__*/ createWriteContract({ + abi: iTransparentUpgradeableProxyAbi, + functionName: 'changeAdmin', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link ownable2StepUpgradeableAbi}__ and `functionName` set to `"transferOwnership"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iTransparentUpgradeableProxyAbi}__ and `functionName` set to `"upgradeTo"` */ -export const writeOwnable2StepUpgradeableTransferOwnership = - /*#__PURE__*/ createWriteContract({ - abi: ownable2StepUpgradeableAbi, - functionName: "transferOwnership", - }); +export const writeITransparentUpgradeableProxyUpgradeTo = + /*#__PURE__*/ createWriteContract({ + abi: iTransparentUpgradeableProxyAbi, + functionName: 'upgradeTo', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link ownable2StepUpgradeableAbi}__ + * Wraps __{@link writeContract}__ with `abi` set to __{@link iTransparentUpgradeableProxyAbi}__ and `functionName` set to `"upgradeToAndCall"` */ -export const simulateOwnable2StepUpgradeable = - /*#__PURE__*/ createSimulateContract({ abi: ownable2StepUpgradeableAbi }); +export const writeITransparentUpgradeableProxyUpgradeToAndCall = + /*#__PURE__*/ createWriteContract({ + abi: iTransparentUpgradeableProxyAbi, + functionName: 'upgradeToAndCall', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link ownable2StepUpgradeableAbi}__ and `functionName` set to `"acceptOwnership"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iTransparentUpgradeableProxyAbi}__ */ -export const simulateOwnable2StepUpgradeableAcceptOwnership = - /*#__PURE__*/ createSimulateContract({ - abi: ownable2StepUpgradeableAbi, - functionName: "acceptOwnership", - }); +export const simulateITransparentUpgradeableProxy = + /*#__PURE__*/ createSimulateContract({ abi: iTransparentUpgradeableProxyAbi }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link ownable2StepUpgradeableAbi}__ and `functionName` set to `"renounceOwnership"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iTransparentUpgradeableProxyAbi}__ and `functionName` set to `"changeAdmin"` */ -export const simulateOwnable2StepUpgradeableRenounceOwnership = - /*#__PURE__*/ createSimulateContract({ - abi: ownable2StepUpgradeableAbi, - functionName: "renounceOwnership", - }); +export const simulateITransparentUpgradeableProxyChangeAdmin = + /*#__PURE__*/ createSimulateContract({ + abi: iTransparentUpgradeableProxyAbi, + functionName: 'changeAdmin', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link ownable2StepUpgradeableAbi}__ and `functionName` set to `"transferOwnership"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iTransparentUpgradeableProxyAbi}__ and `functionName` set to `"upgradeTo"` */ -export const simulateOwnable2StepUpgradeableTransferOwnership = - /*#__PURE__*/ createSimulateContract({ - abi: ownable2StepUpgradeableAbi, - functionName: "transferOwnership", - }); +export const simulateITransparentUpgradeableProxyUpgradeTo = + /*#__PURE__*/ createSimulateContract({ + abi: iTransparentUpgradeableProxyAbi, + functionName: 'upgradeTo', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ownable2StepUpgradeableAbi}__ + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iTransparentUpgradeableProxyAbi}__ and `functionName` set to `"upgradeToAndCall"` */ -export const watchOwnable2StepUpgradeableEvent = - /*#__PURE__*/ createWatchContractEvent({ abi: ownable2StepUpgradeableAbi }); +export const simulateITransparentUpgradeableProxyUpgradeToAndCall = + /*#__PURE__*/ createSimulateContract({ + abi: iTransparentUpgradeableProxyAbi, + functionName: 'upgradeToAndCall', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ownable2StepUpgradeableAbi}__ and `eventName` set to `"Initialized"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iTransparentUpgradeableProxyAbi}__ */ -export const watchOwnable2StepUpgradeableInitializedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: ownable2StepUpgradeableAbi, - eventName: "Initialized", - }); +export const watchITransparentUpgradeableProxyEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: iTransparentUpgradeableProxyAbi, + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ownable2StepUpgradeableAbi}__ and `eventName` set to `"OwnershipTransferStarted"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iTransparentUpgradeableProxyAbi}__ and `eventName` set to `"AdminChanged"` */ -export const watchOwnable2StepUpgradeableOwnershipTransferStartedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: ownable2StepUpgradeableAbi, - eventName: "OwnershipTransferStarted", - }); +export const watchITransparentUpgradeableProxyAdminChangedEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: iTransparentUpgradeableProxyAbi, + eventName: 'AdminChanged', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ownable2StepUpgradeableAbi}__ and `eventName` set to `"OwnershipTransferred"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iTransparentUpgradeableProxyAbi}__ and `eventName` set to `"BeaconUpgraded"` */ -export const watchOwnable2StepUpgradeableOwnershipTransferredEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: ownable2StepUpgradeableAbi, - eventName: "OwnershipTransferred", - }); +export const watchITransparentUpgradeableProxyBeaconUpgradedEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: iTransparentUpgradeableProxyAbi, + eventName: 'BeaconUpgraded', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link ownableUpgradeableAbi}__ + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iTransparentUpgradeableProxyAbi}__ and `eventName` set to `"Upgraded"` */ -export const readOwnableUpgradeable = /*#__PURE__*/ createReadContract({ - abi: ownableUpgradeableAbi, -}); +export const watchITransparentUpgradeableProxyUpgradedEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: iTransparentUpgradeableProxyAbi, + eventName: 'Upgraded', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link ownableUpgradeableAbi}__ and `functionName` set to `"owner"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ */ -export const readOwnableUpgradeableOwner = /*#__PURE__*/ createReadContract({ - abi: ownableUpgradeableAbi, - functionName: "owner", -}); +export const readIUniswapV3Pool = /*#__PURE__*/ createReadContract({ + abi: iUniswapV3PoolAbi, +}) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link ownableUpgradeableAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `functionName` set to `"factory"` */ -export const writeOwnableUpgradeable = /*#__PURE__*/ createWriteContract({ - abi: ownableUpgradeableAbi, -}); +export const readIUniswapV3PoolFactory = /*#__PURE__*/ createReadContract({ + abi: iUniswapV3PoolAbi, + functionName: 'factory', +}) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link ownableUpgradeableAbi}__ and `functionName` set to `"renounceOwnership"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `functionName` set to `"fee"` */ -export const writeOwnableUpgradeableRenounceOwnership = - /*#__PURE__*/ createWriteContract({ - abi: ownableUpgradeableAbi, - functionName: "renounceOwnership", - }); +export const readIUniswapV3PoolFee = /*#__PURE__*/ createReadContract({ + abi: iUniswapV3PoolAbi, + functionName: 'fee', +}) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link ownableUpgradeableAbi}__ and `functionName` set to `"transferOwnership"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `functionName` set to `"feeGrowthGlobal0X128"` */ -export const writeOwnableUpgradeableTransferOwnership = - /*#__PURE__*/ createWriteContract({ - abi: ownableUpgradeableAbi, - functionName: "transferOwnership", - }); +export const readIUniswapV3PoolFeeGrowthGlobal0X128 = + /*#__PURE__*/ createReadContract({ + abi: iUniswapV3PoolAbi, + functionName: 'feeGrowthGlobal0X128', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link ownableUpgradeableAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `functionName` set to `"feeGrowthGlobal1X128"` */ -export const simulateOwnableUpgradeable = /*#__PURE__*/ createSimulateContract({ - abi: ownableUpgradeableAbi, -}); +export const readIUniswapV3PoolFeeGrowthGlobal1X128 = + /*#__PURE__*/ createReadContract({ + abi: iUniswapV3PoolAbi, + functionName: 'feeGrowthGlobal1X128', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link ownableUpgradeableAbi}__ and `functionName` set to `"renounceOwnership"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `functionName` set to `"liquidity"` */ -export const simulateOwnableUpgradeableRenounceOwnership = - /*#__PURE__*/ createSimulateContract({ - abi: ownableUpgradeableAbi, - functionName: "renounceOwnership", - }); +export const readIUniswapV3PoolLiquidity = /*#__PURE__*/ createReadContract({ + abi: iUniswapV3PoolAbi, + functionName: 'liquidity', +}) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link ownableUpgradeableAbi}__ and `functionName` set to `"transferOwnership"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `functionName` set to `"maxLiquidityPerTick"` */ -export const simulateOwnableUpgradeableTransferOwnership = - /*#__PURE__*/ createSimulateContract({ - abi: ownableUpgradeableAbi, - functionName: "transferOwnership", - }); +export const readIUniswapV3PoolMaxLiquidityPerTick = + /*#__PURE__*/ createReadContract({ + abi: iUniswapV3PoolAbi, + functionName: 'maxLiquidityPerTick', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ownableUpgradeableAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `functionName` set to `"observations"` */ -export const watchOwnableUpgradeableEvent = - /*#__PURE__*/ createWatchContractEvent({ abi: ownableUpgradeableAbi }); +export const readIUniswapV3PoolObservations = /*#__PURE__*/ createReadContract({ + abi: iUniswapV3PoolAbi, + functionName: 'observations', +}) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ownableUpgradeableAbi}__ and `eventName` set to `"Initialized"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `functionName` set to `"observe"` */ -export const watchOwnableUpgradeableInitializedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: ownableUpgradeableAbi, - eventName: "Initialized", - }); +export const readIUniswapV3PoolObserve = /*#__PURE__*/ createReadContract({ + abi: iUniswapV3PoolAbi, + functionName: 'observe', +}) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ownableUpgradeableAbi}__ and `eventName` set to `"OwnershipTransferred"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `functionName` set to `"positions"` */ -export const watchOwnableUpgradeableOwnershipTransferredEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: ownableUpgradeableAbi, - eventName: "OwnershipTransferred", - }); +export const readIUniswapV3PoolPositions = /*#__PURE__*/ createReadContract({ + abi: iUniswapV3PoolAbi, + functionName: 'positions', +}) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnConfigAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `functionName` set to `"protocolFees"` */ -export const readPwnConfig = /*#__PURE__*/ createReadContract({ - abi: pwnConfigAbi, -}); +export const readIUniswapV3PoolProtocolFees = /*#__PURE__*/ createReadContract({ + abi: iUniswapV3PoolAbi, + functionName: 'protocolFees', +}) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"MAX_FEE"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `functionName` set to `"slot0"` */ -export const readPwnConfigMaxFee = /*#__PURE__*/ createReadContract({ - abi: pwnConfigAbi, - functionName: "MAX_FEE", -}); +export const readIUniswapV3PoolSlot0 = /*#__PURE__*/ createReadContract({ + abi: iUniswapV3PoolAbi, + functionName: 'slot0', +}) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"fee"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `functionName` set to `"snapshotCumulativesInside"` */ -export const readPwnConfigFee = /*#__PURE__*/ createReadContract({ - abi: pwnConfigAbi, - functionName: "fee", -}); +export const readIUniswapV3PoolSnapshotCumulativesInside = + /*#__PURE__*/ createReadContract({ + abi: iUniswapV3PoolAbi, + functionName: 'snapshotCumulativesInside', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"feeCollector"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `functionName` set to `"tickBitmap"` */ -export const readPwnConfigFeeCollector = /*#__PURE__*/ createReadContract({ - abi: pwnConfigAbi, - functionName: "feeCollector", -}); +export const readIUniswapV3PoolTickBitmap = /*#__PURE__*/ createReadContract({ + abi: iUniswapV3PoolAbi, + functionName: 'tickBitmap', +}) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"getPoolAdapter"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `functionName` set to `"tickSpacing"` */ -export const readPwnConfigGetPoolAdapter = /*#__PURE__*/ createReadContract({ - abi: pwnConfigAbi, - functionName: "getPoolAdapter", -}); +export const readIUniswapV3PoolTickSpacing = /*#__PURE__*/ createReadContract({ + abi: iUniswapV3PoolAbi, + functionName: 'tickSpacing', +}) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"getStateFingerprintComputer"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `functionName` set to `"ticks"` */ -export const readPwnConfigGetStateFingerprintComputer = - /*#__PURE__*/ createReadContract({ - abi: pwnConfigAbi, - functionName: "getStateFingerprintComputer", - }); +export const readIUniswapV3PoolTicks = /*#__PURE__*/ createReadContract({ + abi: iUniswapV3PoolAbi, + functionName: 'ticks', +}) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"loanMetadataUri"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `functionName` set to `"token0"` */ -export const readPwnConfigLoanMetadataUri = /*#__PURE__*/ createReadContract({ - abi: pwnConfigAbi, - functionName: "loanMetadataUri", -}); +export const readIUniswapV3PoolToken0 = /*#__PURE__*/ createReadContract({ + abi: iUniswapV3PoolAbi, + functionName: 'token0', +}) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"owner"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `functionName` set to `"token1"` */ -export const readPwnConfigOwner = /*#__PURE__*/ createReadContract({ - abi: pwnConfigAbi, - functionName: "owner", -}); +export const readIUniswapV3PoolToken1 = /*#__PURE__*/ createReadContract({ + abi: iUniswapV3PoolAbi, + functionName: 'token1', +}) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"pendingOwner"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ */ -export const readPwnConfigPendingOwner = /*#__PURE__*/ createReadContract({ - abi: pwnConfigAbi, - functionName: "pendingOwner", -}); +export const writeIUniswapV3Pool = /*#__PURE__*/ createWriteContract({ + abi: iUniswapV3PoolAbi, +}) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnConfigAbi}__ + * Wraps __{@link writeContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `functionName` set to `"burn"` */ -export const writePwnConfig = /*#__PURE__*/ createWriteContract({ - abi: pwnConfigAbi, -}); +export const writeIUniswapV3PoolBurn = /*#__PURE__*/ createWriteContract({ + abi: iUniswapV3PoolAbi, + functionName: 'burn', +}) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"acceptOwnership"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `functionName` set to `"collect"` */ -export const writePwnConfigAcceptOwnership = /*#__PURE__*/ createWriteContract({ - abi: pwnConfigAbi, - functionName: "acceptOwnership", -}); +export const writeIUniswapV3PoolCollect = /*#__PURE__*/ createWriteContract({ + abi: iUniswapV3PoolAbi, + functionName: 'collect', +}) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"initialize"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `functionName` set to `"collectProtocol"` */ -export const writePwnConfigInitialize = /*#__PURE__*/ createWriteContract({ - abi: pwnConfigAbi, - functionName: "initialize", -}); +export const writeIUniswapV3PoolCollectProtocol = + /*#__PURE__*/ createWriteContract({ + abi: iUniswapV3PoolAbi, + functionName: 'collectProtocol', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"registerPoolAdapter"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `functionName` set to `"flash"` */ -export const writePwnConfigRegisterPoolAdapter = - /*#__PURE__*/ createWriteContract({ - abi: pwnConfigAbi, - functionName: "registerPoolAdapter", - }); +export const writeIUniswapV3PoolFlash = /*#__PURE__*/ createWriteContract({ + abi: iUniswapV3PoolAbi, + functionName: 'flash', +}) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"registerStateFingerprintComputer"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `functionName` set to `"increaseObservationCardinalityNext"` */ -export const writePwnConfigRegisterStateFingerprintComputer = - /*#__PURE__*/ createWriteContract({ - abi: pwnConfigAbi, - functionName: "registerStateFingerprintComputer", - }); +export const writeIUniswapV3PoolIncreaseObservationCardinalityNext = + /*#__PURE__*/ createWriteContract({ + abi: iUniswapV3PoolAbi, + functionName: 'increaseObservationCardinalityNext', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"renounceOwnership"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `functionName` set to `"initialize"` */ -export const writePwnConfigRenounceOwnership = - /*#__PURE__*/ createWriteContract({ - abi: pwnConfigAbi, - functionName: "renounceOwnership", - }); +export const writeIUniswapV3PoolInitialize = /*#__PURE__*/ createWriteContract({ + abi: iUniswapV3PoolAbi, + functionName: 'initialize', +}) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"setDefaultLOANMetadataUri"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `functionName` set to `"mint"` */ -export const writePwnConfigSetDefaultLoanMetadataUri = - /*#__PURE__*/ createWriteContract({ - abi: pwnConfigAbi, - functionName: "setDefaultLOANMetadataUri", - }); +export const writeIUniswapV3PoolMint = /*#__PURE__*/ createWriteContract({ + abi: iUniswapV3PoolAbi, + functionName: 'mint', +}) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"setFee"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `functionName` set to `"setFeeProtocol"` */ -export const writePwnConfigSetFee = /*#__PURE__*/ createWriteContract({ - abi: pwnConfigAbi, - functionName: "setFee", -}); +export const writeIUniswapV3PoolSetFeeProtocol = + /*#__PURE__*/ createWriteContract({ + abi: iUniswapV3PoolAbi, + functionName: 'setFeeProtocol', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"setFeeCollector"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `functionName` set to `"swap"` */ -export const writePwnConfigSetFeeCollector = /*#__PURE__*/ createWriteContract({ - abi: pwnConfigAbi, - functionName: "setFeeCollector", -}); +export const writeIUniswapV3PoolSwap = /*#__PURE__*/ createWriteContract({ + abi: iUniswapV3PoolAbi, + functionName: 'swap', +}) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"setLOANMetadataUri"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ */ -export const writePwnConfigSetLoanMetadataUri = - /*#__PURE__*/ createWriteContract({ - abi: pwnConfigAbi, - functionName: "setLOANMetadataUri", - }); +export const simulateIUniswapV3Pool = /*#__PURE__*/ createSimulateContract({ + abi: iUniswapV3PoolAbi, +}) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"transferOwnership"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `functionName` set to `"burn"` */ -export const writePwnConfigTransferOwnership = - /*#__PURE__*/ createWriteContract({ - abi: pwnConfigAbi, - functionName: "transferOwnership", - }); +export const simulateIUniswapV3PoolBurn = /*#__PURE__*/ createSimulateContract({ + abi: iUniswapV3PoolAbi, + functionName: 'burn', +}) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnConfigAbi}__ + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `functionName` set to `"collect"` */ -export const simulatePwnConfig = /*#__PURE__*/ createSimulateContract({ - abi: pwnConfigAbi, -}); +export const simulateIUniswapV3PoolCollect = + /*#__PURE__*/ createSimulateContract({ + abi: iUniswapV3PoolAbi, + functionName: 'collect', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"acceptOwnership"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `functionName` set to `"collectProtocol"` */ -export const simulatePwnConfigAcceptOwnership = - /*#__PURE__*/ createSimulateContract({ - abi: pwnConfigAbi, - functionName: "acceptOwnership", - }); +export const simulateIUniswapV3PoolCollectProtocol = + /*#__PURE__*/ createSimulateContract({ + abi: iUniswapV3PoolAbi, + functionName: 'collectProtocol', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"initialize"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `functionName` set to `"flash"` */ -export const simulatePwnConfigInitialize = /*#__PURE__*/ createSimulateContract( - { abi: pwnConfigAbi, functionName: "initialize" }, -); +export const simulateIUniswapV3PoolFlash = /*#__PURE__*/ createSimulateContract( + { abi: iUniswapV3PoolAbi, functionName: 'flash' }, +) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"registerPoolAdapter"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `functionName` set to `"increaseObservationCardinalityNext"` */ -export const simulatePwnConfigRegisterPoolAdapter = - /*#__PURE__*/ createSimulateContract({ - abi: pwnConfigAbi, - functionName: "registerPoolAdapter", - }); +export const simulateIUniswapV3PoolIncreaseObservationCardinalityNext = + /*#__PURE__*/ createSimulateContract({ + abi: iUniswapV3PoolAbi, + functionName: 'increaseObservationCardinalityNext', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"registerStateFingerprintComputer"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `functionName` set to `"initialize"` */ -export const simulatePwnConfigRegisterStateFingerprintComputer = - /*#__PURE__*/ createSimulateContract({ - abi: pwnConfigAbi, - functionName: "registerStateFingerprintComputer", - }); +export const simulateIUniswapV3PoolInitialize = + /*#__PURE__*/ createSimulateContract({ + abi: iUniswapV3PoolAbi, + functionName: 'initialize', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"renounceOwnership"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `functionName` set to `"mint"` */ -export const simulatePwnConfigRenounceOwnership = - /*#__PURE__*/ createSimulateContract({ - abi: pwnConfigAbi, - functionName: "renounceOwnership", - }); +export const simulateIUniswapV3PoolMint = /*#__PURE__*/ createSimulateContract({ + abi: iUniswapV3PoolAbi, + functionName: 'mint', +}) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"setDefaultLOANMetadataUri"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `functionName` set to `"setFeeProtocol"` */ -export const simulatePwnConfigSetDefaultLoanMetadataUri = - /*#__PURE__*/ createSimulateContract({ - abi: pwnConfigAbi, - functionName: "setDefaultLOANMetadataUri", - }); +export const simulateIUniswapV3PoolSetFeeProtocol = + /*#__PURE__*/ createSimulateContract({ + abi: iUniswapV3PoolAbi, + functionName: 'setFeeProtocol', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"setFee"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `functionName` set to `"swap"` */ -export const simulatePwnConfigSetFee = /*#__PURE__*/ createSimulateContract({ - abi: pwnConfigAbi, - functionName: "setFee", -}); +export const simulateIUniswapV3PoolSwap = /*#__PURE__*/ createSimulateContract({ + abi: iUniswapV3PoolAbi, + functionName: 'swap', +}) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"setFeeCollector"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ */ -export const simulatePwnConfigSetFeeCollector = - /*#__PURE__*/ createSimulateContract({ - abi: pwnConfigAbi, - functionName: "setFeeCollector", - }); +export const watchIUniswapV3PoolEvent = /*#__PURE__*/ createWatchContractEvent({ + abi: iUniswapV3PoolAbi, +}) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"setLOANMetadataUri"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `eventName` set to `"Burn"` */ -export const simulatePwnConfigSetLoanMetadataUri = - /*#__PURE__*/ createSimulateContract({ - abi: pwnConfigAbi, - functionName: "setLOANMetadataUri", - }); +export const watchIUniswapV3PoolBurnEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: iUniswapV3PoolAbi, + eventName: 'Burn', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"transferOwnership"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `eventName` set to `"Collect"` */ -export const simulatePwnConfigTransferOwnership = - /*#__PURE__*/ createSimulateContract({ - abi: pwnConfigAbi, - functionName: "transferOwnership", - }); +export const watchIUniswapV3PoolCollectEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: iUniswapV3PoolAbi, + eventName: 'Collect', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnConfigAbi}__ + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `eventName` set to `"CollectProtocol"` */ -export const watchPwnConfigEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: pwnConfigAbi, -}); +export const watchIUniswapV3PoolCollectProtocolEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: iUniswapV3PoolAbi, + eventName: 'CollectProtocol', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnConfigAbi}__ and `eventName` set to `"DefaultLOANMetadataUriUpdated"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `eventName` set to `"Flash"` */ -export const watchPwnConfigDefaultLoanMetadataUriUpdatedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnConfigAbi, - eventName: "DefaultLOANMetadataUriUpdated", - }); +export const watchIUniswapV3PoolFlashEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: iUniswapV3PoolAbi, + eventName: 'Flash', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnConfigAbi}__ and `eventName` set to `"FeeCollectorUpdated"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `eventName` set to `"IncreaseObservationCardinalityNext"` */ -export const watchPwnConfigFeeCollectorUpdatedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnConfigAbi, - eventName: "FeeCollectorUpdated", - }); +export const watchIUniswapV3PoolIncreaseObservationCardinalityNextEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: iUniswapV3PoolAbi, + eventName: 'IncreaseObservationCardinalityNext', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnConfigAbi}__ and `eventName` set to `"FeeUpdated"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `eventName` set to `"Initialize"` */ -export const watchPwnConfigFeeUpdatedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnConfigAbi, - eventName: "FeeUpdated", - }); +export const watchIUniswapV3PoolInitializeEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: iUniswapV3PoolAbi, + eventName: 'Initialize', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnConfigAbi}__ and `eventName` set to `"Initialized"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `eventName` set to `"Mint"` */ -export const watchPwnConfigInitializedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnConfigAbi, - eventName: "Initialized", - }); +export const watchIUniswapV3PoolMintEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: iUniswapV3PoolAbi, + eventName: 'Mint', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnConfigAbi}__ and `eventName` set to `"LOANMetadataUriUpdated"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `eventName` set to `"SetFeeProtocol"` */ -export const watchPwnConfigLoanMetadataUriUpdatedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnConfigAbi, - eventName: "LOANMetadataUriUpdated", - }); +export const watchIUniswapV3PoolSetFeeProtocolEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: iUniswapV3PoolAbi, + eventName: 'SetFeeProtocol', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnConfigAbi}__ and `eventName` set to `"OwnershipTransferStarted"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iUniswapV3PoolAbi}__ and `eventName` set to `"Swap"` */ -export const watchPwnConfigOwnershipTransferStartedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnConfigAbi, - eventName: "OwnershipTransferStarted", - }); +export const watchIUniswapV3PoolSwapEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: iUniswapV3PoolAbi, + eventName: 'Swap', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnConfigAbi}__ and `eventName` set to `"OwnershipTransferred"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iUniswapV3PoolActionsAbi}__ */ -export const watchPwnConfigOwnershipTransferredEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnConfigAbi, - eventName: "OwnershipTransferred", - }); +export const writeIUniswapV3PoolActions = /*#__PURE__*/ createWriteContract({ + abi: iUniswapV3PoolActionsAbi, +}) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnHubAbi}__ + * Wraps __{@link writeContract}__ with `abi` set to __{@link iUniswapV3PoolActionsAbi}__ and `functionName` set to `"burn"` */ -export const readPwnHub = /*#__PURE__*/ createReadContract({ abi: pwnHubAbi }); +export const writeIUniswapV3PoolActionsBurn = /*#__PURE__*/ createWriteContract( + { abi: iUniswapV3PoolActionsAbi, functionName: 'burn' }, +) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnHubAbi}__ and `functionName` set to `"hasTag"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iUniswapV3PoolActionsAbi}__ and `functionName` set to `"collect"` */ -export const readPwnHubHasTag = /*#__PURE__*/ createReadContract({ - abi: pwnHubAbi, - functionName: "hasTag", -}); +export const writeIUniswapV3PoolActionsCollect = + /*#__PURE__*/ createWriteContract({ + abi: iUniswapV3PoolActionsAbi, + functionName: 'collect', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnHubAbi}__ and `functionName` set to `"owner"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iUniswapV3PoolActionsAbi}__ and `functionName` set to `"flash"` */ -export const readPwnHubOwner = /*#__PURE__*/ createReadContract({ - abi: pwnHubAbi, - functionName: "owner", -}); +export const writeIUniswapV3PoolActionsFlash = + /*#__PURE__*/ createWriteContract({ + abi: iUniswapV3PoolActionsAbi, + functionName: 'flash', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnHubAbi}__ and `functionName` set to `"pendingOwner"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iUniswapV3PoolActionsAbi}__ and `functionName` set to `"increaseObservationCardinalityNext"` */ -export const readPwnHubPendingOwner = /*#__PURE__*/ createReadContract({ - abi: pwnHubAbi, - functionName: "pendingOwner", -}); +export const writeIUniswapV3PoolActionsIncreaseObservationCardinalityNext = + /*#__PURE__*/ createWriteContract({ + abi: iUniswapV3PoolActionsAbi, + functionName: 'increaseObservationCardinalityNext', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnHubAbi}__ + * Wraps __{@link writeContract}__ with `abi` set to __{@link iUniswapV3PoolActionsAbi}__ and `functionName` set to `"initialize"` */ -export const writePwnHub = /*#__PURE__*/ createWriteContract({ - abi: pwnHubAbi, -}); +export const writeIUniswapV3PoolActionsInitialize = + /*#__PURE__*/ createWriteContract({ + abi: iUniswapV3PoolActionsAbi, + functionName: 'initialize', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnHubAbi}__ and `functionName` set to `"acceptOwnership"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iUniswapV3PoolActionsAbi}__ and `functionName` set to `"mint"` */ -export const writePwnHubAcceptOwnership = /*#__PURE__*/ createWriteContract({ - abi: pwnHubAbi, - functionName: "acceptOwnership", -}); +export const writeIUniswapV3PoolActionsMint = /*#__PURE__*/ createWriteContract( + { abi: iUniswapV3PoolActionsAbi, functionName: 'mint' }, +) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnHubAbi}__ and `functionName` set to `"renounceOwnership"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iUniswapV3PoolActionsAbi}__ and `functionName` set to `"swap"` */ -export const writePwnHubRenounceOwnership = /*#__PURE__*/ createWriteContract({ - abi: pwnHubAbi, - functionName: "renounceOwnership", -}); +export const writeIUniswapV3PoolActionsSwap = /*#__PURE__*/ createWriteContract( + { abi: iUniswapV3PoolActionsAbi, functionName: 'swap' }, +) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnHubAbi}__ and `functionName` set to `"setTag"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iUniswapV3PoolActionsAbi}__ */ -export const writePwnHubSetTag = /*#__PURE__*/ createWriteContract({ - abi: pwnHubAbi, - functionName: "setTag", -}); +export const simulateIUniswapV3PoolActions = + /*#__PURE__*/ createSimulateContract({ abi: iUniswapV3PoolActionsAbi }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnHubAbi}__ and `functionName` set to `"setTags"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iUniswapV3PoolActionsAbi}__ and `functionName` set to `"burn"` */ -export const writePwnHubSetTags = /*#__PURE__*/ createWriteContract({ - abi: pwnHubAbi, - functionName: "setTags", -}); +export const simulateIUniswapV3PoolActionsBurn = + /*#__PURE__*/ createSimulateContract({ + abi: iUniswapV3PoolActionsAbi, + functionName: 'burn', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnHubAbi}__ and `functionName` set to `"transferOwnership"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iUniswapV3PoolActionsAbi}__ and `functionName` set to `"collect"` */ -export const writePwnHubTransferOwnership = /*#__PURE__*/ createWriteContract({ - abi: pwnHubAbi, - functionName: "transferOwnership", -}); +export const simulateIUniswapV3PoolActionsCollect = + /*#__PURE__*/ createSimulateContract({ + abi: iUniswapV3PoolActionsAbi, + functionName: 'collect', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnHubAbi}__ + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iUniswapV3PoolActionsAbi}__ and `functionName` set to `"flash"` */ -export const simulatePwnHub = /*#__PURE__*/ createSimulateContract({ - abi: pwnHubAbi, -}); +export const simulateIUniswapV3PoolActionsFlash = + /*#__PURE__*/ createSimulateContract({ + abi: iUniswapV3PoolActionsAbi, + functionName: 'flash', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnHubAbi}__ and `functionName` set to `"acceptOwnership"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iUniswapV3PoolActionsAbi}__ and `functionName` set to `"increaseObservationCardinalityNext"` */ -export const simulatePwnHubAcceptOwnership = - /*#__PURE__*/ createSimulateContract({ - abi: pwnHubAbi, - functionName: "acceptOwnership", - }); +export const simulateIUniswapV3PoolActionsIncreaseObservationCardinalityNext = + /*#__PURE__*/ createSimulateContract({ + abi: iUniswapV3PoolActionsAbi, + functionName: 'increaseObservationCardinalityNext', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnHubAbi}__ and `functionName` set to `"renounceOwnership"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iUniswapV3PoolActionsAbi}__ and `functionName` set to `"initialize"` */ -export const simulatePwnHubRenounceOwnership = - /*#__PURE__*/ createSimulateContract({ - abi: pwnHubAbi, - functionName: "renounceOwnership", - }); +export const simulateIUniswapV3PoolActionsInitialize = + /*#__PURE__*/ createSimulateContract({ + abi: iUniswapV3PoolActionsAbi, + functionName: 'initialize', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnHubAbi}__ and `functionName` set to `"setTag"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iUniswapV3PoolActionsAbi}__ and `functionName` set to `"mint"` */ -export const simulatePwnHubSetTag = /*#__PURE__*/ createSimulateContract({ - abi: pwnHubAbi, - functionName: "setTag", -}); +export const simulateIUniswapV3PoolActionsMint = + /*#__PURE__*/ createSimulateContract({ + abi: iUniswapV3PoolActionsAbi, + functionName: 'mint', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnHubAbi}__ and `functionName` set to `"setTags"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iUniswapV3PoolActionsAbi}__ and `functionName` set to `"swap"` */ -export const simulatePwnHubSetTags = /*#__PURE__*/ createSimulateContract({ - abi: pwnHubAbi, - functionName: "setTags", -}); +export const simulateIUniswapV3PoolActionsSwap = + /*#__PURE__*/ createSimulateContract({ + abi: iUniswapV3PoolActionsAbi, + functionName: 'swap', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnHubAbi}__ and `functionName` set to `"transferOwnership"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolDerivedStateAbi}__ */ -export const simulatePwnHubTransferOwnership = - /*#__PURE__*/ createSimulateContract({ - abi: pwnHubAbi, - functionName: "transferOwnership", - }); +export const readIUniswapV3PoolDerivedState = /*#__PURE__*/ createReadContract({ + abi: iUniswapV3PoolDerivedStateAbi, +}) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnHubAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolDerivedStateAbi}__ and `functionName` set to `"observe"` */ -export const watchPwnHubEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: pwnHubAbi, -}); +export const readIUniswapV3PoolDerivedStateObserve = + /*#__PURE__*/ createReadContract({ + abi: iUniswapV3PoolDerivedStateAbi, + functionName: 'observe', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnHubAbi}__ and `eventName` set to `"OwnershipTransferStarted"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolDerivedStateAbi}__ and `functionName` set to `"snapshotCumulativesInside"` */ -export const watchPwnHubOwnershipTransferStartedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnHubAbi, - eventName: "OwnershipTransferStarted", - }); +export const readIUniswapV3PoolDerivedStateSnapshotCumulativesInside = + /*#__PURE__*/ createReadContract({ + abi: iUniswapV3PoolDerivedStateAbi, + functionName: 'snapshotCumulativesInside', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnHubAbi}__ and `eventName` set to `"OwnershipTransferred"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iUniswapV3PoolEventsAbi}__ */ -export const watchPwnHubOwnershipTransferredEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnHubAbi, - eventName: "OwnershipTransferred", - }); +export const watchIUniswapV3PoolEventsEvent = + /*#__PURE__*/ createWatchContractEvent({ abi: iUniswapV3PoolEventsAbi }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnHubAbi}__ and `eventName` set to `"TagSet"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iUniswapV3PoolEventsAbi}__ and `eventName` set to `"Burn"` */ -export const watchPwnHubTagSetEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: pwnHubAbi, - eventName: "TagSet", -}); +export const watchIUniswapV3PoolEventsBurnEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: iUniswapV3PoolEventsAbi, + eventName: 'Burn', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnloanAbi}__ + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iUniswapV3PoolEventsAbi}__ and `eventName` set to `"Collect"` */ -export const readPwnloan = /*#__PURE__*/ createReadContract({ - abi: pwnloanAbi, -}); +export const watchIUniswapV3PoolEventsCollectEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: iUniswapV3PoolEventsAbi, + eventName: 'Collect', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"balanceOf"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iUniswapV3PoolEventsAbi}__ and `eventName` set to `"CollectProtocol"` */ -export const readPwnloanBalanceOf = /*#__PURE__*/ createReadContract({ - abi: pwnloanAbi, - functionName: "balanceOf", -}); +export const watchIUniswapV3PoolEventsCollectProtocolEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: iUniswapV3PoolEventsAbi, + eventName: 'CollectProtocol', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"getApproved"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iUniswapV3PoolEventsAbi}__ and `eventName` set to `"Flash"` */ -export const readPwnloanGetApproved = /*#__PURE__*/ createReadContract({ - abi: pwnloanAbi, - functionName: "getApproved", -}); +export const watchIUniswapV3PoolEventsFlashEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: iUniswapV3PoolEventsAbi, + eventName: 'Flash', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"getStateFingerprint"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iUniswapV3PoolEventsAbi}__ and `eventName` set to `"IncreaseObservationCardinalityNext"` */ -export const readPwnloanGetStateFingerprint = /*#__PURE__*/ createReadContract({ - abi: pwnloanAbi, - functionName: "getStateFingerprint", -}); +export const watchIUniswapV3PoolEventsIncreaseObservationCardinalityNextEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: iUniswapV3PoolEventsAbi, + eventName: 'IncreaseObservationCardinalityNext', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"hub"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iUniswapV3PoolEventsAbi}__ and `eventName` set to `"Initialize"` */ -export const readPwnloanHub = /*#__PURE__*/ createReadContract({ - abi: pwnloanAbi, - functionName: "hub", -}); +export const watchIUniswapV3PoolEventsInitializeEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: iUniswapV3PoolEventsAbi, + eventName: 'Initialize', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"isApprovedForAll"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iUniswapV3PoolEventsAbi}__ and `eventName` set to `"Mint"` */ -export const readPwnloanIsApprovedForAll = /*#__PURE__*/ createReadContract({ - abi: pwnloanAbi, - functionName: "isApprovedForAll", -}); +export const watchIUniswapV3PoolEventsMintEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: iUniswapV3PoolEventsAbi, + eventName: 'Mint', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"lastLoanId"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iUniswapV3PoolEventsAbi}__ and `eventName` set to `"SetFeeProtocol"` */ -export const readPwnloanLastLoanId = /*#__PURE__*/ createReadContract({ - abi: pwnloanAbi, - functionName: "lastLoanId", -}); +export const watchIUniswapV3PoolEventsSetFeeProtocolEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: iUniswapV3PoolEventsAbi, + eventName: 'SetFeeProtocol', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"loanContract"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link iUniswapV3PoolEventsAbi}__ and `eventName` set to `"Swap"` */ -export const readPwnloanLoanContract = /*#__PURE__*/ createReadContract({ - abi: pwnloanAbi, - functionName: "loanContract", -}); +export const watchIUniswapV3PoolEventsSwapEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: iUniswapV3PoolEventsAbi, + eventName: 'Swap', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"name"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolImmutablesAbi}__ */ -export const readPwnloanName = /*#__PURE__*/ createReadContract({ - abi: pwnloanAbi, - functionName: "name", -}); +export const readIUniswapV3PoolImmutables = /*#__PURE__*/ createReadContract({ + abi: iUniswapV3PoolImmutablesAbi, +}) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"ownerOf"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolImmutablesAbi}__ and `functionName` set to `"factory"` */ -export const readPwnloanOwnerOf = /*#__PURE__*/ createReadContract({ - abi: pwnloanAbi, - functionName: "ownerOf", -}); +export const readIUniswapV3PoolImmutablesFactory = + /*#__PURE__*/ createReadContract({ + abi: iUniswapV3PoolImmutablesAbi, + functionName: 'factory', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"supportsInterface"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolImmutablesAbi}__ and `functionName` set to `"fee"` */ -export const readPwnloanSupportsInterface = /*#__PURE__*/ createReadContract({ - abi: pwnloanAbi, - functionName: "supportsInterface", -}); +export const readIUniswapV3PoolImmutablesFee = /*#__PURE__*/ createReadContract( + { abi: iUniswapV3PoolImmutablesAbi, functionName: 'fee' }, +) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"symbol"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolImmutablesAbi}__ and `functionName` set to `"maxLiquidityPerTick"` */ -export const readPwnloanSymbol = /*#__PURE__*/ createReadContract({ - abi: pwnloanAbi, - functionName: "symbol", -}); +export const readIUniswapV3PoolImmutablesMaxLiquidityPerTick = + /*#__PURE__*/ createReadContract({ + abi: iUniswapV3PoolImmutablesAbi, + functionName: 'maxLiquidityPerTick', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"tokenURI"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolImmutablesAbi}__ and `functionName` set to `"tickSpacing"` */ -export const readPwnloanTokenUri = /*#__PURE__*/ createReadContract({ - abi: pwnloanAbi, - functionName: "tokenURI", -}); +export const readIUniswapV3PoolImmutablesTickSpacing = + /*#__PURE__*/ createReadContract({ + abi: iUniswapV3PoolImmutablesAbi, + functionName: 'tickSpacing', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnloanAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolImmutablesAbi}__ and `functionName` set to `"token0"` */ -export const writePwnloan = /*#__PURE__*/ createWriteContract({ - abi: pwnloanAbi, -}); +export const readIUniswapV3PoolImmutablesToken0 = + /*#__PURE__*/ createReadContract({ + abi: iUniswapV3PoolImmutablesAbi, + functionName: 'token0', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"approve"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolImmutablesAbi}__ and `functionName` set to `"token1"` */ -export const writePwnloanApprove = /*#__PURE__*/ createWriteContract({ - abi: pwnloanAbi, - functionName: "approve", -}); +export const readIUniswapV3PoolImmutablesToken1 = + /*#__PURE__*/ createReadContract({ + abi: iUniswapV3PoolImmutablesAbi, + functionName: 'token1', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"burn"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iUniswapV3PoolOwnerActionsAbi}__ */ -export const writePwnloanBurn = /*#__PURE__*/ createWriteContract({ - abi: pwnloanAbi, - functionName: "burn", -}); +export const writeIUniswapV3PoolOwnerActions = + /*#__PURE__*/ createWriteContract({ abi: iUniswapV3PoolOwnerActionsAbi }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"mint"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iUniswapV3PoolOwnerActionsAbi}__ and `functionName` set to `"collectProtocol"` */ -export const writePwnloanMint = /*#__PURE__*/ createWriteContract({ - abi: pwnloanAbi, - functionName: "mint", -}); +export const writeIUniswapV3PoolOwnerActionsCollectProtocol = + /*#__PURE__*/ createWriteContract({ + abi: iUniswapV3PoolOwnerActionsAbi, + functionName: 'collectProtocol', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"safeTransferFrom"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link iUniswapV3PoolOwnerActionsAbi}__ and `functionName` set to `"setFeeProtocol"` */ -export const writePwnloanSafeTransferFrom = /*#__PURE__*/ createWriteContract({ - abi: pwnloanAbi, - functionName: "safeTransferFrom", -}); +export const writeIUniswapV3PoolOwnerActionsSetFeeProtocol = + /*#__PURE__*/ createWriteContract({ + abi: iUniswapV3PoolOwnerActionsAbi, + functionName: 'setFeeProtocol', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"setApprovalForAll"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iUniswapV3PoolOwnerActionsAbi}__ */ -export const writePwnloanSetApprovalForAll = /*#__PURE__*/ createWriteContract({ - abi: pwnloanAbi, - functionName: "setApprovalForAll", -}); +export const simulateIUniswapV3PoolOwnerActions = + /*#__PURE__*/ createSimulateContract({ abi: iUniswapV3PoolOwnerActionsAbi }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"transferFrom"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iUniswapV3PoolOwnerActionsAbi}__ and `functionName` set to `"collectProtocol"` */ -export const writePwnloanTransferFrom = /*#__PURE__*/ createWriteContract({ - abi: pwnloanAbi, - functionName: "transferFrom", -}); +export const simulateIUniswapV3PoolOwnerActionsCollectProtocol = + /*#__PURE__*/ createSimulateContract({ + abi: iUniswapV3PoolOwnerActionsAbi, + functionName: 'collectProtocol', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnloanAbi}__ + * Wraps __{@link simulateContract}__ with `abi` set to __{@link iUniswapV3PoolOwnerActionsAbi}__ and `functionName` set to `"setFeeProtocol"` */ -export const simulatePwnloan = /*#__PURE__*/ createSimulateContract({ - abi: pwnloanAbi, -}); +export const simulateIUniswapV3PoolOwnerActionsSetFeeProtocol = + /*#__PURE__*/ createSimulateContract({ + abi: iUniswapV3PoolOwnerActionsAbi, + functionName: 'setFeeProtocol', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"approve"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolStateAbi}__ */ -export const simulatePwnloanApprove = /*#__PURE__*/ createSimulateContract({ - abi: pwnloanAbi, - functionName: "approve", -}); +export const readIUniswapV3PoolState = /*#__PURE__*/ createReadContract({ + abi: iUniswapV3PoolStateAbi, +}) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"burn"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolStateAbi}__ and `functionName` set to `"feeGrowthGlobal0X128"` */ -export const simulatePwnloanBurn = /*#__PURE__*/ createSimulateContract({ - abi: pwnloanAbi, - functionName: "burn", -}); +export const readIUniswapV3PoolStateFeeGrowthGlobal0X128 = + /*#__PURE__*/ createReadContract({ + abi: iUniswapV3PoolStateAbi, + functionName: 'feeGrowthGlobal0X128', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"mint"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolStateAbi}__ and `functionName` set to `"feeGrowthGlobal1X128"` */ -export const simulatePwnloanMint = /*#__PURE__*/ createSimulateContract({ - abi: pwnloanAbi, - functionName: "mint", -}); +export const readIUniswapV3PoolStateFeeGrowthGlobal1X128 = + /*#__PURE__*/ createReadContract({ + abi: iUniswapV3PoolStateAbi, + functionName: 'feeGrowthGlobal1X128', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"safeTransferFrom"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolStateAbi}__ and `functionName` set to `"liquidity"` */ -export const simulatePwnloanSafeTransferFrom = - /*#__PURE__*/ createSimulateContract({ - abi: pwnloanAbi, - functionName: "safeTransferFrom", - }); +export const readIUniswapV3PoolStateLiquidity = + /*#__PURE__*/ createReadContract({ + abi: iUniswapV3PoolStateAbi, + functionName: 'liquidity', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"setApprovalForAll"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolStateAbi}__ and `functionName` set to `"observations"` */ -export const simulatePwnloanSetApprovalForAll = - /*#__PURE__*/ createSimulateContract({ - abi: pwnloanAbi, - functionName: "setApprovalForAll", - }); +export const readIUniswapV3PoolStateObservations = + /*#__PURE__*/ createReadContract({ + abi: iUniswapV3PoolStateAbi, + functionName: 'observations', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"transferFrom"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolStateAbi}__ and `functionName` set to `"positions"` */ -export const simulatePwnloanTransferFrom = /*#__PURE__*/ createSimulateContract( - { abi: pwnloanAbi, functionName: "transferFrom" }, -); +export const readIUniswapV3PoolStatePositions = + /*#__PURE__*/ createReadContract({ + abi: iUniswapV3PoolStateAbi, + functionName: 'positions', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnloanAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolStateAbi}__ and `functionName` set to `"protocolFees"` */ -export const watchPwnloanEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: pwnloanAbi, -}); +export const readIUniswapV3PoolStateProtocolFees = + /*#__PURE__*/ createReadContract({ + abi: iUniswapV3PoolStateAbi, + functionName: 'protocolFees', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnloanAbi}__ and `eventName` set to `"Approval"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolStateAbi}__ and `functionName` set to `"slot0"` */ -export const watchPwnloanApprovalEvent = /*#__PURE__*/ createWatchContractEvent( - { abi: pwnloanAbi, eventName: "Approval" }, -); +export const readIUniswapV3PoolStateSlot0 = /*#__PURE__*/ createReadContract({ + abi: iUniswapV3PoolStateAbi, + functionName: 'slot0', +}) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnloanAbi}__ and `eventName` set to `"ApprovalForAll"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolStateAbi}__ and `functionName` set to `"tickBitmap"` */ -export const watchPwnloanApprovalForAllEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnloanAbi, - eventName: "ApprovalForAll", - }); +export const readIUniswapV3PoolStateTickBitmap = + /*#__PURE__*/ createReadContract({ + abi: iUniswapV3PoolStateAbi, + functionName: 'tickBitmap', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnloanAbi}__ and `eventName` set to `"LOANBurned"` + * Wraps __{@link readContract}__ with `abi` set to __{@link iUniswapV3PoolStateAbi}__ and `functionName` set to `"ticks"` */ -export const watchPwnloanLoanBurnedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnloanAbi, - eventName: "LOANBurned", - }); +export const readIUniswapV3PoolStateTicks = /*#__PURE__*/ createReadContract({ + abi: iUniswapV3PoolStateAbi, + functionName: 'ticks', +}) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnloanAbi}__ and `eventName` set to `"LOANMinted"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link initializableAbi}__ */ -export const watchPwnloanLoanMintedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnloanAbi, - eventName: "LOANMinted", - }); +export const watchInitializableEvent = /*#__PURE__*/ createWatchContractEvent({ + abi: initializableAbi, +}) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnloanAbi}__ and `eventName` set to `"Transfer"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link initializableAbi}__ and `eventName` set to `"Initialized"` */ -export const watchPwnloanTransferEvent = /*#__PURE__*/ createWatchContractEvent( - { abi: pwnloanAbi, eventName: "Transfer" }, -); +export const watchInitializableInitializedEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: initializableAbi, + eventName: 'Initialized', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnRevokedNonceAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link multiTokenAbi}__ */ -export const readPwnRevokedNonce = /*#__PURE__*/ createReadContract({ - abi: pwnRevokedNonceAbi, -}); +export const readMultiToken = /*#__PURE__*/ createReadContract({ + abi: multiTokenAbi, +}) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnRevokedNonceAbi}__ and `functionName` set to `"accessTag"` + * Wraps __{@link readContract}__ with `abi` set to __{@link multiTokenAbi}__ and `functionName` set to `"CATEGORY_NOT_REGISTERED"` */ -export const readPwnRevokedNonceAccessTag = /*#__PURE__*/ createReadContract({ - abi: pwnRevokedNonceAbi, - functionName: "accessTag", -}); +export const readMultiTokenCategoryNotRegistered = + /*#__PURE__*/ createReadContract({ + abi: multiTokenAbi, + functionName: 'CATEGORY_NOT_REGISTERED', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnRevokedNonceAbi}__ and `functionName` set to `"currentNonceSpace"` + * Wraps __{@link readContract}__ with `abi` set to __{@link multiTokenAbi}__ and `functionName` set to `"CRYPTO_KITTIES_INTERFACE_ID"` */ -export const readPwnRevokedNonceCurrentNonceSpace = - /*#__PURE__*/ createReadContract({ - abi: pwnRevokedNonceAbi, - functionName: "currentNonceSpace", - }); +export const readMultiTokenCryptoKittiesInterfaceId = + /*#__PURE__*/ createReadContract({ + abi: multiTokenAbi, + functionName: 'CRYPTO_KITTIES_INTERFACE_ID', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnRevokedNonceAbi}__ and `functionName` set to `"hub"` + * Wraps __{@link readContract}__ with `abi` set to __{@link multiTokenAbi}__ and `functionName` set to `"ERC1155_INTERFACE_ID"` */ -export const readPwnRevokedNonceHub = /*#__PURE__*/ createReadContract({ - abi: pwnRevokedNonceAbi, - functionName: "hub", -}); +export const readMultiTokenErc1155InterfaceId = + /*#__PURE__*/ createReadContract({ + abi: multiTokenAbi, + functionName: 'ERC1155_INTERFACE_ID', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnRevokedNonceAbi}__ and `functionName` set to `"isNonceRevoked"` + * Wraps __{@link readContract}__ with `abi` set to __{@link multiTokenAbi}__ and `functionName` set to `"ERC20_INTERFACE_ID"` */ -export const readPwnRevokedNonceIsNonceRevoked = - /*#__PURE__*/ createReadContract({ - abi: pwnRevokedNonceAbi, - functionName: "isNonceRevoked", - }); +export const readMultiTokenErc20InterfaceId = /*#__PURE__*/ createReadContract({ + abi: multiTokenAbi, + functionName: 'ERC20_INTERFACE_ID', +}) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnRevokedNonceAbi}__ and `functionName` set to `"isNonceUsable"` + * Wraps __{@link readContract}__ with `abi` set to __{@link multiTokenAbi}__ and `functionName` set to `"ERC721_INTERFACE_ID"` */ -export const readPwnRevokedNonceIsNonceUsable = - /*#__PURE__*/ createReadContract({ - abi: pwnRevokedNonceAbi, - functionName: "isNonceUsable", - }); +export const readMultiTokenErc721InterfaceId = /*#__PURE__*/ createReadContract( + { abi: multiTokenAbi, functionName: 'ERC721_INTERFACE_ID' }, +) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ + */ +export const readMultiTokenCategoryRegistry = /*#__PURE__*/ createReadContract({ + abi: multiTokenCategoryRegistryAbi, +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `functionName` set to `"CATEGORY_NOT_REGISTERED"` + */ +export const readMultiTokenCategoryRegistryCategoryNotRegistered = + /*#__PURE__*/ createReadContract({ + abi: multiTokenCategoryRegistryAbi, + functionName: 'CATEGORY_NOT_REGISTERED', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `functionName` set to `"owner"` + */ +export const readMultiTokenCategoryRegistryOwner = + /*#__PURE__*/ createReadContract({ + abi: multiTokenCategoryRegistryAbi, + functionName: 'owner', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `functionName` set to `"pendingOwner"` + */ +export const readMultiTokenCategoryRegistryPendingOwner = + /*#__PURE__*/ createReadContract({ + abi: multiTokenCategoryRegistryAbi, + functionName: 'pendingOwner', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `functionName` set to `"registeredCategoryValue"` + */ +export const readMultiTokenCategoryRegistryRegisteredCategoryValue = + /*#__PURE__*/ createReadContract({ + abi: multiTokenCategoryRegistryAbi, + functionName: 'registeredCategoryValue', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `functionName` set to `"supportsInterface"` + */ +export const readMultiTokenCategoryRegistrySupportsInterface = + /*#__PURE__*/ createReadContract({ + abi: multiTokenCategoryRegistryAbi, + functionName: 'supportsInterface', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ + */ +export const writeMultiTokenCategoryRegistry = + /*#__PURE__*/ createWriteContract({ abi: multiTokenCategoryRegistryAbi }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `functionName` set to `"acceptOwnership"` + */ +export const writeMultiTokenCategoryRegistryAcceptOwnership = + /*#__PURE__*/ createWriteContract({ + abi: multiTokenCategoryRegistryAbi, + functionName: 'acceptOwnership', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `functionName` set to `"registerCategoryValue"` + */ +export const writeMultiTokenCategoryRegistryRegisterCategoryValue = + /*#__PURE__*/ createWriteContract({ + abi: multiTokenCategoryRegistryAbi, + functionName: 'registerCategoryValue', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `functionName` set to `"renounceOwnership"` + */ +export const writeMultiTokenCategoryRegistryRenounceOwnership = + /*#__PURE__*/ createWriteContract({ + abi: multiTokenCategoryRegistryAbi, + functionName: 'renounceOwnership', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `functionName` set to `"transferOwnership"` + */ +export const writeMultiTokenCategoryRegistryTransferOwnership = + /*#__PURE__*/ createWriteContract({ + abi: multiTokenCategoryRegistryAbi, + functionName: 'transferOwnership', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `functionName` set to `"unregisterCategoryValue"` + */ +export const writeMultiTokenCategoryRegistryUnregisterCategoryValue = + /*#__PURE__*/ createWriteContract({ + abi: multiTokenCategoryRegistryAbi, + functionName: 'unregisterCategoryValue', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ + */ +export const simulateMultiTokenCategoryRegistry = + /*#__PURE__*/ createSimulateContract({ abi: multiTokenCategoryRegistryAbi }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `functionName` set to `"acceptOwnership"` + */ +export const simulateMultiTokenCategoryRegistryAcceptOwnership = + /*#__PURE__*/ createSimulateContract({ + abi: multiTokenCategoryRegistryAbi, + functionName: 'acceptOwnership', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `functionName` set to `"registerCategoryValue"` + */ +export const simulateMultiTokenCategoryRegistryRegisterCategoryValue = + /*#__PURE__*/ createSimulateContract({ + abi: multiTokenCategoryRegistryAbi, + functionName: 'registerCategoryValue', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `functionName` set to `"renounceOwnership"` + */ +export const simulateMultiTokenCategoryRegistryRenounceOwnership = + /*#__PURE__*/ createSimulateContract({ + abi: multiTokenCategoryRegistryAbi, + functionName: 'renounceOwnership', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `functionName` set to `"transferOwnership"` + */ +export const simulateMultiTokenCategoryRegistryTransferOwnership = + /*#__PURE__*/ createSimulateContract({ + abi: multiTokenCategoryRegistryAbi, + functionName: 'transferOwnership', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `functionName` set to `"unregisterCategoryValue"` + */ +export const simulateMultiTokenCategoryRegistryUnregisterCategoryValue = + /*#__PURE__*/ createSimulateContract({ + abi: multiTokenCategoryRegistryAbi, + functionName: 'unregisterCategoryValue', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ + */ +export const watchMultiTokenCategoryRegistryEvent = + /*#__PURE__*/ createWatchContractEvent({ abi: multiTokenCategoryRegistryAbi }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `eventName` set to `"CategoryRegistered"` + */ +export const watchMultiTokenCategoryRegistryCategoryRegisteredEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: multiTokenCategoryRegistryAbi, + eventName: 'CategoryRegistered', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `eventName` set to `"CategoryUnregistered"` + */ +export const watchMultiTokenCategoryRegistryCategoryUnregisteredEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: multiTokenCategoryRegistryAbi, + eventName: 'CategoryUnregistered', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `eventName` set to `"OwnershipTransferStarted"` + */ +export const watchMultiTokenCategoryRegistryOwnershipTransferStartedEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: multiTokenCategoryRegistryAbi, + eventName: 'OwnershipTransferStarted', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link multiTokenCategoryRegistryAbi}__ and `eventName` set to `"OwnershipTransferred"` + */ +export const watchMultiTokenCategoryRegistryOwnershipTransferredEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: multiTokenCategoryRegistryAbi, + eventName: 'OwnershipTransferred', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link ownableAbi}__ + */ +export const readOwnable = /*#__PURE__*/ createReadContract({ abi: ownableAbi }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link ownableAbi}__ and `functionName` set to `"owner"` + */ +export const readOwnableOwner = /*#__PURE__*/ createReadContract({ + abi: ownableAbi, + functionName: 'owner', +}) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link ownableAbi}__ + */ +export const writeOwnable = /*#__PURE__*/ createWriteContract({ + abi: ownableAbi, +}) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link ownableAbi}__ and `functionName` set to `"renounceOwnership"` + */ +export const writeOwnableRenounceOwnership = /*#__PURE__*/ createWriteContract({ + abi: ownableAbi, + functionName: 'renounceOwnership', +}) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link ownableAbi}__ and `functionName` set to `"transferOwnership"` + */ +export const writeOwnableTransferOwnership = /*#__PURE__*/ createWriteContract({ + abi: ownableAbi, + functionName: 'transferOwnership', +}) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link ownableAbi}__ + */ +export const simulateOwnable = /*#__PURE__*/ createSimulateContract({ + abi: ownableAbi, +}) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link ownableAbi}__ and `functionName` set to `"renounceOwnership"` + */ +export const simulateOwnableRenounceOwnership = + /*#__PURE__*/ createSimulateContract({ + abi: ownableAbi, + functionName: 'renounceOwnership', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link ownableAbi}__ and `functionName` set to `"transferOwnership"` + */ +export const simulateOwnableTransferOwnership = + /*#__PURE__*/ createSimulateContract({ + abi: ownableAbi, + functionName: 'transferOwnership', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ownableAbi}__ + */ +export const watchOwnableEvent = /*#__PURE__*/ createWatchContractEvent({ + abi: ownableAbi, +}) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ownableAbi}__ and `eventName` set to `"OwnershipTransferred"` + */ +export const watchOwnableOwnershipTransferredEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: ownableAbi, + eventName: 'OwnershipTransferred', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link ownable2StepAbi}__ + */ +export const readOwnable2Step = /*#__PURE__*/ createReadContract({ + abi: ownable2StepAbi, +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link ownable2StepAbi}__ and `functionName` set to `"owner"` + */ +export const readOwnable2StepOwner = /*#__PURE__*/ createReadContract({ + abi: ownable2StepAbi, + functionName: 'owner', +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link ownable2StepAbi}__ and `functionName` set to `"pendingOwner"` + */ +export const readOwnable2StepPendingOwner = /*#__PURE__*/ createReadContract({ + abi: ownable2StepAbi, + functionName: 'pendingOwner', +}) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link ownable2StepAbi}__ + */ +export const writeOwnable2Step = /*#__PURE__*/ createWriteContract({ + abi: ownable2StepAbi, +}) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link ownable2StepAbi}__ and `functionName` set to `"acceptOwnership"` + */ +export const writeOwnable2StepAcceptOwnership = + /*#__PURE__*/ createWriteContract({ + abi: ownable2StepAbi, + functionName: 'acceptOwnership', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link ownable2StepAbi}__ and `functionName` set to `"renounceOwnership"` + */ +export const writeOwnable2StepRenounceOwnership = + /*#__PURE__*/ createWriteContract({ + abi: ownable2StepAbi, + functionName: 'renounceOwnership', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link ownable2StepAbi}__ and `functionName` set to `"transferOwnership"` + */ +export const writeOwnable2StepTransferOwnership = + /*#__PURE__*/ createWriteContract({ + abi: ownable2StepAbi, + functionName: 'transferOwnership', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link ownable2StepAbi}__ + */ +export const simulateOwnable2Step = /*#__PURE__*/ createSimulateContract({ + abi: ownable2StepAbi, +}) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link ownable2StepAbi}__ and `functionName` set to `"acceptOwnership"` + */ +export const simulateOwnable2StepAcceptOwnership = + /*#__PURE__*/ createSimulateContract({ + abi: ownable2StepAbi, + functionName: 'acceptOwnership', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link ownable2StepAbi}__ and `functionName` set to `"renounceOwnership"` + */ +export const simulateOwnable2StepRenounceOwnership = + /*#__PURE__*/ createSimulateContract({ + abi: ownable2StepAbi, + functionName: 'renounceOwnership', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link ownable2StepAbi}__ and `functionName` set to `"transferOwnership"` + */ +export const simulateOwnable2StepTransferOwnership = + /*#__PURE__*/ createSimulateContract({ + abi: ownable2StepAbi, + functionName: 'transferOwnership', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ownable2StepAbi}__ + */ +export const watchOwnable2StepEvent = /*#__PURE__*/ createWatchContractEvent({ + abi: ownable2StepAbi, +}) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ownable2StepAbi}__ and `eventName` set to `"OwnershipTransferStarted"` + */ +export const watchOwnable2StepOwnershipTransferStartedEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: ownable2StepAbi, + eventName: 'OwnershipTransferStarted', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ownable2StepAbi}__ and `eventName` set to `"OwnershipTransferred"` + */ +export const watchOwnable2StepOwnershipTransferredEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: ownable2StepAbi, + eventName: 'OwnershipTransferred', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link ownable2StepUpgradeableAbi}__ + */ +export const readOwnable2StepUpgradeable = /*#__PURE__*/ createReadContract({ + abi: ownable2StepUpgradeableAbi, +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link ownable2StepUpgradeableAbi}__ and `functionName` set to `"owner"` + */ +export const readOwnable2StepUpgradeableOwner = + /*#__PURE__*/ createReadContract({ + abi: ownable2StepUpgradeableAbi, + functionName: 'owner', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link ownable2StepUpgradeableAbi}__ and `functionName` set to `"pendingOwner"` + */ +export const readOwnable2StepUpgradeablePendingOwner = + /*#__PURE__*/ createReadContract({ + abi: ownable2StepUpgradeableAbi, + functionName: 'pendingOwner', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link ownable2StepUpgradeableAbi}__ + */ +export const writeOwnable2StepUpgradeable = /*#__PURE__*/ createWriteContract({ + abi: ownable2StepUpgradeableAbi, +}) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link ownable2StepUpgradeableAbi}__ and `functionName` set to `"acceptOwnership"` + */ +export const writeOwnable2StepUpgradeableAcceptOwnership = + /*#__PURE__*/ createWriteContract({ + abi: ownable2StepUpgradeableAbi, + functionName: 'acceptOwnership', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link ownable2StepUpgradeableAbi}__ and `functionName` set to `"renounceOwnership"` + */ +export const writeOwnable2StepUpgradeableRenounceOwnership = + /*#__PURE__*/ createWriteContract({ + abi: ownable2StepUpgradeableAbi, + functionName: 'renounceOwnership', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link ownable2StepUpgradeableAbi}__ and `functionName` set to `"transferOwnership"` + */ +export const writeOwnable2StepUpgradeableTransferOwnership = + /*#__PURE__*/ createWriteContract({ + abi: ownable2StepUpgradeableAbi, + functionName: 'transferOwnership', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link ownable2StepUpgradeableAbi}__ + */ +export const simulateOwnable2StepUpgradeable = + /*#__PURE__*/ createSimulateContract({ abi: ownable2StepUpgradeableAbi }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link ownable2StepUpgradeableAbi}__ and `functionName` set to `"acceptOwnership"` + */ +export const simulateOwnable2StepUpgradeableAcceptOwnership = + /*#__PURE__*/ createSimulateContract({ + abi: ownable2StepUpgradeableAbi, + functionName: 'acceptOwnership', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link ownable2StepUpgradeableAbi}__ and `functionName` set to `"renounceOwnership"` + */ +export const simulateOwnable2StepUpgradeableRenounceOwnership = + /*#__PURE__*/ createSimulateContract({ + abi: ownable2StepUpgradeableAbi, + functionName: 'renounceOwnership', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link ownable2StepUpgradeableAbi}__ and `functionName` set to `"transferOwnership"` + */ +export const simulateOwnable2StepUpgradeableTransferOwnership = + /*#__PURE__*/ createSimulateContract({ + abi: ownable2StepUpgradeableAbi, + functionName: 'transferOwnership', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ownable2StepUpgradeableAbi}__ + */ +export const watchOwnable2StepUpgradeableEvent = + /*#__PURE__*/ createWatchContractEvent({ abi: ownable2StepUpgradeableAbi }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ownable2StepUpgradeableAbi}__ and `eventName` set to `"Initialized"` + */ +export const watchOwnable2StepUpgradeableInitializedEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: ownable2StepUpgradeableAbi, + eventName: 'Initialized', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ownable2StepUpgradeableAbi}__ and `eventName` set to `"OwnershipTransferStarted"` + */ +export const watchOwnable2StepUpgradeableOwnershipTransferStartedEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: ownable2StepUpgradeableAbi, + eventName: 'OwnershipTransferStarted', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ownable2StepUpgradeableAbi}__ and `eventName` set to `"OwnershipTransferred"` + */ +export const watchOwnable2StepUpgradeableOwnershipTransferredEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: ownable2StepUpgradeableAbi, + eventName: 'OwnershipTransferred', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link ownableUpgradeableAbi}__ + */ +export const readOwnableUpgradeable = /*#__PURE__*/ createReadContract({ + abi: ownableUpgradeableAbi, +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link ownableUpgradeableAbi}__ and `functionName` set to `"owner"` + */ +export const readOwnableUpgradeableOwner = /*#__PURE__*/ createReadContract({ + abi: ownableUpgradeableAbi, + functionName: 'owner', +}) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link ownableUpgradeableAbi}__ + */ +export const writeOwnableUpgradeable = /*#__PURE__*/ createWriteContract({ + abi: ownableUpgradeableAbi, +}) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link ownableUpgradeableAbi}__ and `functionName` set to `"renounceOwnership"` + */ +export const writeOwnableUpgradeableRenounceOwnership = + /*#__PURE__*/ createWriteContract({ + abi: ownableUpgradeableAbi, + functionName: 'renounceOwnership', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link ownableUpgradeableAbi}__ and `functionName` set to `"transferOwnership"` + */ +export const writeOwnableUpgradeableTransferOwnership = + /*#__PURE__*/ createWriteContract({ + abi: ownableUpgradeableAbi, + functionName: 'transferOwnership', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link ownableUpgradeableAbi}__ + */ +export const simulateOwnableUpgradeable = /*#__PURE__*/ createSimulateContract({ + abi: ownableUpgradeableAbi, +}) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link ownableUpgradeableAbi}__ and `functionName` set to `"renounceOwnership"` + */ +export const simulateOwnableUpgradeableRenounceOwnership = + /*#__PURE__*/ createSimulateContract({ + abi: ownableUpgradeableAbi, + functionName: 'renounceOwnership', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link ownableUpgradeableAbi}__ and `functionName` set to `"transferOwnership"` + */ +export const simulateOwnableUpgradeableTransferOwnership = + /*#__PURE__*/ createSimulateContract({ + abi: ownableUpgradeableAbi, + functionName: 'transferOwnership', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ownableUpgradeableAbi}__ + */ +export const watchOwnableUpgradeableEvent = + /*#__PURE__*/ createWatchContractEvent({ abi: ownableUpgradeableAbi }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ownableUpgradeableAbi}__ and `eventName` set to `"Initialized"` + */ +export const watchOwnableUpgradeableInitializedEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: ownableUpgradeableAbi, + eventName: 'Initialized', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link ownableUpgradeableAbi}__ and `eventName` set to `"OwnershipTransferred"` + */ +export const watchOwnableUpgradeableOwnershipTransferredEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: ownableUpgradeableAbi, + eventName: 'OwnershipTransferred', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnConfigAbi}__ + */ +export const readPwnConfig = /*#__PURE__*/ createReadContract({ + abi: pwnConfigAbi, +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"MAX_FEE"` + */ +export const readPwnConfigMaxFee = /*#__PURE__*/ createReadContract({ + abi: pwnConfigAbi, + functionName: 'MAX_FEE', +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"fee"` + */ +export const readPwnConfigFee = /*#__PURE__*/ createReadContract({ + abi: pwnConfigAbi, + functionName: 'fee', +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"feeCollector"` + */ +export const readPwnConfigFeeCollector = /*#__PURE__*/ createReadContract({ + abi: pwnConfigAbi, + functionName: 'feeCollector', +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"getPoolAdapter"` + */ +export const readPwnConfigGetPoolAdapter = /*#__PURE__*/ createReadContract({ + abi: pwnConfigAbi, + functionName: 'getPoolAdapter', +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"getStateFingerprintComputer"` + */ +export const readPwnConfigGetStateFingerprintComputer = + /*#__PURE__*/ createReadContract({ + abi: pwnConfigAbi, + functionName: 'getStateFingerprintComputer', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"loanMetadataUri"` + */ +export const readPwnConfigLoanMetadataUri = /*#__PURE__*/ createReadContract({ + abi: pwnConfigAbi, + functionName: 'loanMetadataUri', +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"owner"` + */ +export const readPwnConfigOwner = /*#__PURE__*/ createReadContract({ + abi: pwnConfigAbi, + functionName: 'owner', +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"pendingOwner"` + */ +export const readPwnConfigPendingOwner = /*#__PURE__*/ createReadContract({ + abi: pwnConfigAbi, + functionName: 'pendingOwner', +}) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnConfigAbi}__ + */ +export const writePwnConfig = /*#__PURE__*/ createWriteContract({ + abi: pwnConfigAbi, +}) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"acceptOwnership"` + */ +export const writePwnConfigAcceptOwnership = /*#__PURE__*/ createWriteContract({ + abi: pwnConfigAbi, + functionName: 'acceptOwnership', +}) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"initialize"` + */ +export const writePwnConfigInitialize = /*#__PURE__*/ createWriteContract({ + abi: pwnConfigAbi, + functionName: 'initialize', +}) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"registerPoolAdapter"` + */ +export const writePwnConfigRegisterPoolAdapter = + /*#__PURE__*/ createWriteContract({ + abi: pwnConfigAbi, + functionName: 'registerPoolAdapter', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"registerStateFingerprintComputer"` + */ +export const writePwnConfigRegisterStateFingerprintComputer = + /*#__PURE__*/ createWriteContract({ + abi: pwnConfigAbi, + functionName: 'registerStateFingerprintComputer', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"renounceOwnership"` + */ +export const writePwnConfigRenounceOwnership = + /*#__PURE__*/ createWriteContract({ + abi: pwnConfigAbi, + functionName: 'renounceOwnership', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"setDefaultLOANMetadataUri"` + */ +export const writePwnConfigSetDefaultLoanMetadataUri = + /*#__PURE__*/ createWriteContract({ + abi: pwnConfigAbi, + functionName: 'setDefaultLOANMetadataUri', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"setFee"` + */ +export const writePwnConfigSetFee = /*#__PURE__*/ createWriteContract({ + abi: pwnConfigAbi, + functionName: 'setFee', +}) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"setFeeCollector"` + */ +export const writePwnConfigSetFeeCollector = /*#__PURE__*/ createWriteContract({ + abi: pwnConfigAbi, + functionName: 'setFeeCollector', +}) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"setLOANMetadataUri"` + */ +export const writePwnConfigSetLoanMetadataUri = + /*#__PURE__*/ createWriteContract({ + abi: pwnConfigAbi, + functionName: 'setLOANMetadataUri', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"transferOwnership"` + */ +export const writePwnConfigTransferOwnership = + /*#__PURE__*/ createWriteContract({ + abi: pwnConfigAbi, + functionName: 'transferOwnership', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnConfigAbi}__ + */ +export const simulatePwnConfig = /*#__PURE__*/ createSimulateContract({ + abi: pwnConfigAbi, +}) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"acceptOwnership"` + */ +export const simulatePwnConfigAcceptOwnership = + /*#__PURE__*/ createSimulateContract({ + abi: pwnConfigAbi, + functionName: 'acceptOwnership', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"initialize"` + */ +export const simulatePwnConfigInitialize = /*#__PURE__*/ createSimulateContract( + { abi: pwnConfigAbi, functionName: 'initialize' }, +) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"registerPoolAdapter"` + */ +export const simulatePwnConfigRegisterPoolAdapter = + /*#__PURE__*/ createSimulateContract({ + abi: pwnConfigAbi, + functionName: 'registerPoolAdapter', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"registerStateFingerprintComputer"` + */ +export const simulatePwnConfigRegisterStateFingerprintComputer = + /*#__PURE__*/ createSimulateContract({ + abi: pwnConfigAbi, + functionName: 'registerStateFingerprintComputer', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"renounceOwnership"` + */ +export const simulatePwnConfigRenounceOwnership = + /*#__PURE__*/ createSimulateContract({ + abi: pwnConfigAbi, + functionName: 'renounceOwnership', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"setDefaultLOANMetadataUri"` + */ +export const simulatePwnConfigSetDefaultLoanMetadataUri = + /*#__PURE__*/ createSimulateContract({ + abi: pwnConfigAbi, + functionName: 'setDefaultLOANMetadataUri', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"setFee"` + */ +export const simulatePwnConfigSetFee = /*#__PURE__*/ createSimulateContract({ + abi: pwnConfigAbi, + functionName: 'setFee', +}) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"setFeeCollector"` + */ +export const simulatePwnConfigSetFeeCollector = + /*#__PURE__*/ createSimulateContract({ + abi: pwnConfigAbi, + functionName: 'setFeeCollector', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"setLOANMetadataUri"` + */ +export const simulatePwnConfigSetLoanMetadataUri = + /*#__PURE__*/ createSimulateContract({ + abi: pwnConfigAbi, + functionName: 'setLOANMetadataUri', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnConfigAbi}__ and `functionName` set to `"transferOwnership"` + */ +export const simulatePwnConfigTransferOwnership = + /*#__PURE__*/ createSimulateContract({ + abi: pwnConfigAbi, + functionName: 'transferOwnership', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnConfigAbi}__ + */ +export const watchPwnConfigEvent = /*#__PURE__*/ createWatchContractEvent({ + abi: pwnConfigAbi, +}) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnConfigAbi}__ and `eventName` set to `"DefaultLOANMetadataUriUpdated"` + */ +export const watchPwnConfigDefaultLoanMetadataUriUpdatedEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnConfigAbi, + eventName: 'DefaultLOANMetadataUriUpdated', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnConfigAbi}__ and `eventName` set to `"FeeCollectorUpdated"` + */ +export const watchPwnConfigFeeCollectorUpdatedEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnConfigAbi, + eventName: 'FeeCollectorUpdated', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnConfigAbi}__ and `eventName` set to `"FeeUpdated"` + */ +export const watchPwnConfigFeeUpdatedEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnConfigAbi, + eventName: 'FeeUpdated', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnConfigAbi}__ and `eventName` set to `"Initialized"` + */ +export const watchPwnConfigInitializedEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnConfigAbi, + eventName: 'Initialized', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnConfigAbi}__ and `eventName` set to `"LOANMetadataUriUpdated"` + */ +export const watchPwnConfigLoanMetadataUriUpdatedEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnConfigAbi, + eventName: 'LOANMetadataUriUpdated', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnConfigAbi}__ and `eventName` set to `"OwnershipTransferStarted"` + */ +export const watchPwnConfigOwnershipTransferStartedEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnConfigAbi, + eventName: 'OwnershipTransferStarted', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnConfigAbi}__ and `eventName` set to `"OwnershipTransferred"` + */ +export const watchPwnConfigOwnershipTransferredEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnConfigAbi, + eventName: 'OwnershipTransferred', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnHubAbi}__ + */ +export const readPwnHub = /*#__PURE__*/ createReadContract({ abi: pwnHubAbi }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnHubAbi}__ and `functionName` set to `"hasTag"` + */ +export const readPwnHubHasTag = /*#__PURE__*/ createReadContract({ + abi: pwnHubAbi, + functionName: 'hasTag', +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnHubAbi}__ and `functionName` set to `"owner"` + */ +export const readPwnHubOwner = /*#__PURE__*/ createReadContract({ + abi: pwnHubAbi, + functionName: 'owner', +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnHubAbi}__ and `functionName` set to `"pendingOwner"` + */ +export const readPwnHubPendingOwner = /*#__PURE__*/ createReadContract({ + abi: pwnHubAbi, + functionName: 'pendingOwner', +}) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnHubAbi}__ + */ +export const writePwnHub = /*#__PURE__*/ createWriteContract({ abi: pwnHubAbi }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnHubAbi}__ and `functionName` set to `"acceptOwnership"` + */ +export const writePwnHubAcceptOwnership = /*#__PURE__*/ createWriteContract({ + abi: pwnHubAbi, + functionName: 'acceptOwnership', +}) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnHubAbi}__ and `functionName` set to `"renounceOwnership"` + */ +export const writePwnHubRenounceOwnership = /*#__PURE__*/ createWriteContract({ + abi: pwnHubAbi, + functionName: 'renounceOwnership', +}) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnHubAbi}__ and `functionName` set to `"setTag"` + */ +export const writePwnHubSetTag = /*#__PURE__*/ createWriteContract({ + abi: pwnHubAbi, + functionName: 'setTag', +}) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnHubAbi}__ and `functionName` set to `"setTags"` + */ +export const writePwnHubSetTags = /*#__PURE__*/ createWriteContract({ + abi: pwnHubAbi, + functionName: 'setTags', +}) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnHubAbi}__ and `functionName` set to `"transferOwnership"` + */ +export const writePwnHubTransferOwnership = /*#__PURE__*/ createWriteContract({ + abi: pwnHubAbi, + functionName: 'transferOwnership', +}) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnHubAbi}__ + */ +export const simulatePwnHub = /*#__PURE__*/ createSimulateContract({ + abi: pwnHubAbi, +}) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnHubAbi}__ and `functionName` set to `"acceptOwnership"` + */ +export const simulatePwnHubAcceptOwnership = + /*#__PURE__*/ createSimulateContract({ + abi: pwnHubAbi, + functionName: 'acceptOwnership', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnHubAbi}__ and `functionName` set to `"renounceOwnership"` + */ +export const simulatePwnHubRenounceOwnership = + /*#__PURE__*/ createSimulateContract({ + abi: pwnHubAbi, + functionName: 'renounceOwnership', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnHubAbi}__ and `functionName` set to `"setTag"` + */ +export const simulatePwnHubSetTag = /*#__PURE__*/ createSimulateContract({ + abi: pwnHubAbi, + functionName: 'setTag', +}) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnHubAbi}__ and `functionName` set to `"setTags"` + */ +export const simulatePwnHubSetTags = /*#__PURE__*/ createSimulateContract({ + abi: pwnHubAbi, + functionName: 'setTags', +}) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnHubAbi}__ and `functionName` set to `"transferOwnership"` + */ +export const simulatePwnHubTransferOwnership = + /*#__PURE__*/ createSimulateContract({ + abi: pwnHubAbi, + functionName: 'transferOwnership', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnHubAbi}__ + */ +export const watchPwnHubEvent = /*#__PURE__*/ createWatchContractEvent({ + abi: pwnHubAbi, +}) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnHubAbi}__ and `eventName` set to `"OwnershipTransferStarted"` + */ +export const watchPwnHubOwnershipTransferStartedEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnHubAbi, + eventName: 'OwnershipTransferStarted', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnHubAbi}__ and `eventName` set to `"OwnershipTransferred"` + */ +export const watchPwnHubOwnershipTransferredEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnHubAbi, + eventName: 'OwnershipTransferred', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnHubAbi}__ and `eventName` set to `"TagSet"` + */ +export const watchPwnHubTagSetEvent = /*#__PURE__*/ createWatchContractEvent({ + abi: pwnHubAbi, + eventName: 'TagSet', +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnloanAbi}__ + */ +export const readPwnloan = /*#__PURE__*/ createReadContract({ abi: pwnloanAbi }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"balanceOf"` + */ +export const readPwnloanBalanceOf = /*#__PURE__*/ createReadContract({ + abi: pwnloanAbi, + functionName: 'balanceOf', +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"getApproved"` + */ +export const readPwnloanGetApproved = /*#__PURE__*/ createReadContract({ + abi: pwnloanAbi, + functionName: 'getApproved', +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"getStateFingerprint"` + */ +export const readPwnloanGetStateFingerprint = /*#__PURE__*/ createReadContract({ + abi: pwnloanAbi, + functionName: 'getStateFingerprint', +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"hub"` + */ +export const readPwnloanHub = /*#__PURE__*/ createReadContract({ + abi: pwnloanAbi, + functionName: 'hub', +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"isApprovedForAll"` + */ +export const readPwnloanIsApprovedForAll = /*#__PURE__*/ createReadContract({ + abi: pwnloanAbi, + functionName: 'isApprovedForAll', +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"lastLoanId"` + */ +export const readPwnloanLastLoanId = /*#__PURE__*/ createReadContract({ + abi: pwnloanAbi, + functionName: 'lastLoanId', +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"loanContract"` + */ +export const readPwnloanLoanContract = /*#__PURE__*/ createReadContract({ + abi: pwnloanAbi, + functionName: 'loanContract', +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"name"` + */ +export const readPwnloanName = /*#__PURE__*/ createReadContract({ + abi: pwnloanAbi, + functionName: 'name', +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"ownerOf"` + */ +export const readPwnloanOwnerOf = /*#__PURE__*/ createReadContract({ + abi: pwnloanAbi, + functionName: 'ownerOf', +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"supportsInterface"` + */ +export const readPwnloanSupportsInterface = /*#__PURE__*/ createReadContract({ + abi: pwnloanAbi, + functionName: 'supportsInterface', +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"symbol"` + */ +export const readPwnloanSymbol = /*#__PURE__*/ createReadContract({ + abi: pwnloanAbi, + functionName: 'symbol', +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"tokenURI"` + */ +export const readPwnloanTokenUri = /*#__PURE__*/ createReadContract({ + abi: pwnloanAbi, + functionName: 'tokenURI', +}) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnloanAbi}__ + */ +export const writePwnloan = /*#__PURE__*/ createWriteContract({ + abi: pwnloanAbi, +}) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"approve"` + */ +export const writePwnloanApprove = /*#__PURE__*/ createWriteContract({ + abi: pwnloanAbi, + functionName: 'approve', +}) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"burn"` + */ +export const writePwnloanBurn = /*#__PURE__*/ createWriteContract({ + abi: pwnloanAbi, + functionName: 'burn', +}) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"mint"` + */ +export const writePwnloanMint = /*#__PURE__*/ createWriteContract({ + abi: pwnloanAbi, + functionName: 'mint', +}) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"safeTransferFrom"` + */ +export const writePwnloanSafeTransferFrom = /*#__PURE__*/ createWriteContract({ + abi: pwnloanAbi, + functionName: 'safeTransferFrom', +}) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"setApprovalForAll"` + */ +export const writePwnloanSetApprovalForAll = /*#__PURE__*/ createWriteContract({ + abi: pwnloanAbi, + functionName: 'setApprovalForAll', +}) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"transferFrom"` + */ +export const writePwnloanTransferFrom = /*#__PURE__*/ createWriteContract({ + abi: pwnloanAbi, + functionName: 'transferFrom', +}) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnloanAbi}__ + */ +export const simulatePwnloan = /*#__PURE__*/ createSimulateContract({ + abi: pwnloanAbi, +}) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"approve"` + */ +export const simulatePwnloanApprove = /*#__PURE__*/ createSimulateContract({ + abi: pwnloanAbi, + functionName: 'approve', +}) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"burn"` + */ +export const simulatePwnloanBurn = /*#__PURE__*/ createSimulateContract({ + abi: pwnloanAbi, + functionName: 'burn', +}) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"mint"` + */ +export const simulatePwnloanMint = /*#__PURE__*/ createSimulateContract({ + abi: pwnloanAbi, + functionName: 'mint', +}) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"safeTransferFrom"` + */ +export const simulatePwnloanSafeTransferFrom = + /*#__PURE__*/ createSimulateContract({ + abi: pwnloanAbi, + functionName: 'safeTransferFrom', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"setApprovalForAll"` + */ +export const simulatePwnloanSetApprovalForAll = + /*#__PURE__*/ createSimulateContract({ + abi: pwnloanAbi, + functionName: 'setApprovalForAll', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnloanAbi}__ and `functionName` set to `"transferFrom"` + */ +export const simulatePwnloanTransferFrom = /*#__PURE__*/ createSimulateContract( + { abi: pwnloanAbi, functionName: 'transferFrom' }, +) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnloanAbi}__ + */ +export const watchPwnloanEvent = /*#__PURE__*/ createWatchContractEvent({ + abi: pwnloanAbi, +}) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnloanAbi}__ and `eventName` set to `"Approval"` + */ +export const watchPwnloanApprovalEvent = /*#__PURE__*/ createWatchContractEvent( + { abi: pwnloanAbi, eventName: 'Approval' }, +) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnloanAbi}__ and `eventName` set to `"ApprovalForAll"` + */ +export const watchPwnloanApprovalForAllEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnloanAbi, + eventName: 'ApprovalForAll', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnloanAbi}__ and `eventName` set to `"LOANBurned"` + */ +export const watchPwnloanLoanBurnedEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnloanAbi, + eventName: 'LOANBurned', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnloanAbi}__ and `eventName` set to `"LOANMinted"` + */ +export const watchPwnloanLoanMintedEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnloanAbi, + eventName: 'LOANMinted', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnloanAbi}__ and `eventName` set to `"Transfer"` + */ +export const watchPwnloanTransferEvent = /*#__PURE__*/ createWatchContractEvent( + { abi: pwnloanAbi, eventName: 'Transfer' }, +) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnRevokedNonceAbi}__ + */ +export const readPwnRevokedNonce = /*#__PURE__*/ createReadContract({ + abi: pwnRevokedNonceAbi, +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnRevokedNonceAbi}__ and `functionName` set to `"accessTag"` + */ +export const readPwnRevokedNonceAccessTag = /*#__PURE__*/ createReadContract({ + abi: pwnRevokedNonceAbi, + functionName: 'accessTag', +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnRevokedNonceAbi}__ and `functionName` set to `"currentNonceSpace"` + */ +export const readPwnRevokedNonceCurrentNonceSpace = + /*#__PURE__*/ createReadContract({ + abi: pwnRevokedNonceAbi, + functionName: 'currentNonceSpace', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnRevokedNonceAbi}__ and `functionName` set to `"hub"` + */ +export const readPwnRevokedNonceHub = /*#__PURE__*/ createReadContract({ + abi: pwnRevokedNonceAbi, + functionName: 'hub', +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnRevokedNonceAbi}__ and `functionName` set to `"isNonceRevoked"` + */ +export const readPwnRevokedNonceIsNonceRevoked = + /*#__PURE__*/ createReadContract({ + abi: pwnRevokedNonceAbi, + functionName: 'isNonceRevoked', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnRevokedNonceAbi}__ and `functionName` set to `"isNonceUsable"` + */ +export const readPwnRevokedNonceIsNonceUsable = + /*#__PURE__*/ createReadContract({ + abi: pwnRevokedNonceAbi, + functionName: 'isNonceUsable', + }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnRevokedNonceAbi}__ */ -export const writePwnRevokedNonce = /*#__PURE__*/ createWriteContract({ - abi: pwnRevokedNonceAbi, -}); +export const writePwnRevokedNonce = /*#__PURE__*/ createWriteContract({ + abi: pwnRevokedNonceAbi, +}) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnRevokedNonceAbi}__ and `functionName` set to `"revokeNonce"` + */ +export const writePwnRevokedNonceRevokeNonce = + /*#__PURE__*/ createWriteContract({ + abi: pwnRevokedNonceAbi, + functionName: 'revokeNonce', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnRevokedNonceAbi}__ and `functionName` set to `"revokeNonceSpace"` + */ +export const writePwnRevokedNonceRevokeNonceSpace = + /*#__PURE__*/ createWriteContract({ + abi: pwnRevokedNonceAbi, + functionName: 'revokeNonceSpace', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnRevokedNonceAbi}__ and `functionName` set to `"revokeNonces"` + */ +export const writePwnRevokedNonceRevokeNonces = + /*#__PURE__*/ createWriteContract({ + abi: pwnRevokedNonceAbi, + functionName: 'revokeNonces', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnRevokedNonceAbi}__ + */ +export const simulatePwnRevokedNonce = /*#__PURE__*/ createSimulateContract({ + abi: pwnRevokedNonceAbi, +}) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnRevokedNonceAbi}__ and `functionName` set to `"revokeNonce"` + */ +export const simulatePwnRevokedNonceRevokeNonce = + /*#__PURE__*/ createSimulateContract({ + abi: pwnRevokedNonceAbi, + functionName: 'revokeNonce', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnRevokedNonceAbi}__ and `functionName` set to `"revokeNonceSpace"` + */ +export const simulatePwnRevokedNonceRevokeNonceSpace = + /*#__PURE__*/ createSimulateContract({ + abi: pwnRevokedNonceAbi, + functionName: 'revokeNonceSpace', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnRevokedNonceAbi}__ and `functionName` set to `"revokeNonces"` + */ +export const simulatePwnRevokedNonceRevokeNonces = + /*#__PURE__*/ createSimulateContract({ + abi: pwnRevokedNonceAbi, + functionName: 'revokeNonces', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnRevokedNonceAbi}__ + */ +export const watchPwnRevokedNonceEvent = /*#__PURE__*/ createWatchContractEvent( + { abi: pwnRevokedNonceAbi }, +) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnRevokedNonceAbi}__ and `eventName` set to `"NonceRevoked"` + */ +export const watchPwnRevokedNonceNonceRevokedEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnRevokedNonceAbi, + eventName: 'NonceRevoked', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnRevokedNonceAbi}__ and `eventName` set to `"NonceSpaceRevoked"` + */ +export const watchPwnRevokedNonceNonceSpaceRevokedEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnRevokedNonceAbi, + eventName: 'NonceSpaceRevoked', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSignatureCheckerHarnessAbi}__ + */ +export const readPwnSignatureCheckerHarness = /*#__PURE__*/ createReadContract({ + abi: pwnSignatureCheckerHarnessAbi, +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSignatureCheckerHarnessAbi}__ and `functionName` set to `"exposed_isValidSignatureNow"` + */ +export const readPwnSignatureCheckerHarnessExposedIsValidSignatureNow = + /*#__PURE__*/ createReadContract({ + abi: pwnSignatureCheckerHarnessAbi, + functionName: 'exposed_isValidSignatureNow', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ + */ +export const readPwnSimpleLoan = /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanAbi, +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"ACCRUING_INTEREST_APR_DECIMALS"` + */ +export const readPwnSimpleLoanAccruingInterestAprDecimals = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanAbi, + functionName: 'ACCRUING_INTEREST_APR_DECIMALS', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"ACCRUING_INTEREST_APR_DENOMINATOR"` + */ +export const readPwnSimpleLoanAccruingInterestAprDenominator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanAbi, + functionName: 'ACCRUING_INTEREST_APR_DENOMINATOR', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"DOMAIN_SEPARATOR"` + */ +export const readPwnSimpleLoanDomainSeparator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanAbi, + functionName: 'DOMAIN_SEPARATOR', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"EXTENSION_PROPOSAL_TYPEHASH"` + */ +export const readPwnSimpleLoanExtensionProposalTypehash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanAbi, + functionName: 'EXTENSION_PROPOSAL_TYPEHASH', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"MAX_ACCRUING_INTEREST_APR"` + */ +export const readPwnSimpleLoanMaxAccruingInterestApr = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanAbi, + functionName: 'MAX_ACCRUING_INTEREST_APR', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"MAX_EXTENSION_DURATION"` + */ +export const readPwnSimpleLoanMaxExtensionDuration = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanAbi, + functionName: 'MAX_EXTENSION_DURATION', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"MINUTES_IN_YEAR"` + */ +export const readPwnSimpleLoanMinutesInYear = /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanAbi, + functionName: 'MINUTES_IN_YEAR', +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"MIN_EXTENSION_DURATION"` + */ +export const readPwnSimpleLoanMinExtensionDuration = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanAbi, + functionName: 'MIN_EXTENSION_DURATION', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"MIN_LOAN_DURATION"` + */ +export const readPwnSimpleLoanMinLoanDuration = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanAbi, + functionName: 'MIN_LOAN_DURATION', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"VERSION"` + */ +export const readPwnSimpleLoanVersion = /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanAbi, + functionName: 'VERSION', +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"categoryRegistry"` + */ +export const readPwnSimpleLoanCategoryRegistry = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanAbi, + functionName: 'categoryRegistry', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"config"` + */ +export const readPwnSimpleLoanConfig = /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanAbi, + functionName: 'config', +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"extensionProposalsMade"` + */ +export const readPwnSimpleLoanExtensionProposalsMade = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanAbi, + functionName: 'extensionProposalsMade', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"getExtensionHash"` + */ +export const readPwnSimpleLoanGetExtensionHash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanAbi, + functionName: 'getExtensionHash', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"getLOAN"` + */ +export const readPwnSimpleLoanGetLoan = /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanAbi, + functionName: 'getLOAN', +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"getLenderSpecHash"` + */ +export const readPwnSimpleLoanGetLenderSpecHash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanAbi, + functionName: 'getLenderSpecHash', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"getStateFingerprint"` + */ +export const readPwnSimpleLoanGetStateFingerprint = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanAbi, + functionName: 'getStateFingerprint', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"hub"` + */ +export const readPwnSimpleLoanHub = /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanAbi, + functionName: 'hub', +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"isValidAsset"` + */ +export const readPwnSimpleLoanIsValidAsset = /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanAbi, + functionName: 'isValidAsset', +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"loanMetadataUri"` + */ +export const readPwnSimpleLoanLoanMetadataUri = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanAbi, + functionName: 'loanMetadataUri', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"loanRepaymentAmount"` + */ +export const readPwnSimpleLoanLoanRepaymentAmount = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanAbi, + functionName: 'loanRepaymentAmount', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"loanToken"` + */ +export const readPwnSimpleLoanLoanToken = /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanAbi, + functionName: 'loanToken', +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"onERC1155BatchReceived"` + */ +export const readPwnSimpleLoanOnErc1155BatchReceived = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanAbi, + functionName: 'onERC1155BatchReceived', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"onERC1155Received"` + */ +export const readPwnSimpleLoanOnErc1155Received = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanAbi, + functionName: 'onERC1155Received', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"onERC721Received"` + */ +export const readPwnSimpleLoanOnErc721Received = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanAbi, + functionName: 'onERC721Received', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"revokedNonce"` + */ +export const readPwnSimpleLoanRevokedNonce = /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanAbi, + functionName: 'revokedNonce', +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"supportsInterface"` + */ +export const readPwnSimpleLoanSupportsInterface = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanAbi, + functionName: 'supportsInterface', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ + */ +export const writePwnSimpleLoan = /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanAbi, +}) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"claimLOAN"` + */ +export const writePwnSimpleLoanClaimLoan = /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanAbi, + functionName: 'claimLOAN', +}) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"createLOAN"` + */ +export const writePwnSimpleLoanCreateLoan = /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanAbi, + functionName: 'createLOAN', +}) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"extendLOAN"` + */ +export const writePwnSimpleLoanExtendLoan = /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanAbi, + functionName: 'extendLOAN', +}) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"makeExtensionProposal"` + */ +export const writePwnSimpleLoanMakeExtensionProposal = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanAbi, + functionName: 'makeExtensionProposal', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"repayLOAN"` + */ +export const writePwnSimpleLoanRepayLoan = /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanAbi, + functionName: 'repayLOAN', +}) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"tryClaimRepaidLOAN"` + */ +export const writePwnSimpleLoanTryClaimRepaidLoan = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanAbi, + functionName: 'tryClaimRepaidLOAN', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ + */ +export const simulatePwnSimpleLoan = /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanAbi, +}) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"claimLOAN"` + */ +export const simulatePwnSimpleLoanClaimLoan = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanAbi, + functionName: 'claimLOAN', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"createLOAN"` + */ +export const simulatePwnSimpleLoanCreateLoan = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanAbi, + functionName: 'createLOAN', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"extendLOAN"` + */ +export const simulatePwnSimpleLoanExtendLoan = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanAbi, + functionName: 'extendLOAN', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"makeExtensionProposal"` + */ +export const simulatePwnSimpleLoanMakeExtensionProposal = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanAbi, + functionName: 'makeExtensionProposal', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"repayLOAN"` + */ +export const simulatePwnSimpleLoanRepayLoan = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanAbi, + functionName: 'repayLOAN', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"tryClaimRepaidLOAN"` + */ +export const simulatePwnSimpleLoanTryClaimRepaidLoan = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanAbi, + functionName: 'tryClaimRepaidLOAN', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ + */ +export const watchPwnSimpleLoanEvent = /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanAbi, +}) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `eventName` set to `"ExtensionProposalMade"` + */ +export const watchPwnSimpleLoanExtensionProposalMadeEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanAbi, + eventName: 'ExtensionProposalMade', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `eventName` set to `"LOANClaimed"` + */ +export const watchPwnSimpleLoanLoanClaimedEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanAbi, + eventName: 'LOANClaimed', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `eventName` set to `"LOANCreated"` + */ +export const watchPwnSimpleLoanLoanCreatedEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanAbi, + eventName: 'LOANCreated', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `eventName` set to `"LOANExtended"` + */ +export const watchPwnSimpleLoanLoanExtendedEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanAbi, + eventName: 'LOANExtended', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `eventName` set to `"LOANPaidBack"` + */ +export const watchPwnSimpleLoanLoanPaidBackEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanAbi, + eventName: 'LOANPaidBack', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `eventName` set to `"PoolSupply"` + */ +export const watchPwnSimpleLoanPoolSupplyEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanAbi, + eventName: 'PoolSupply', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `eventName` set to `"PoolWithdraw"` + */ +export const watchPwnSimpleLoanPoolWithdrawEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanAbi, + eventName: 'PoolWithdraw', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `eventName` set to `"VaultPull"` + */ +export const watchPwnSimpleLoanVaultPullEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanAbi, + eventName: 'VaultPull', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `eventName` set to `"VaultPush"` + */ +export const watchPwnSimpleLoanVaultPushEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanAbi, + eventName: 'VaultPush', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `eventName` set to `"VaultPushFrom"` + */ +export const watchPwnSimpleLoanVaultPushFromEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanAbi, + eventName: 'VaultPushFrom', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ + */ +export const readPwnSimpleLoanDutchAuctionProposal = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanDutchAuctionProposalAbi, + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"DOMAIN_SEPARATOR"` + */ +export const readPwnSimpleLoanDutchAuctionProposalDomainSeparator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanDutchAuctionProposalAbi, + functionName: 'DOMAIN_SEPARATOR', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"MULTIPROPOSAL_DOMAIN_SEPARATOR"` + */ +export const readPwnSimpleLoanDutchAuctionProposalMultiproposalDomainSeparator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanDutchAuctionProposalAbi, + functionName: 'MULTIPROPOSAL_DOMAIN_SEPARATOR', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"MULTIPROPOSAL_TYPEHASH"` + */ +export const readPwnSimpleLoanDutchAuctionProposalMultiproposalTypehash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanDutchAuctionProposalAbi, + functionName: 'MULTIPROPOSAL_TYPEHASH', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"PROPOSAL_TYPEHASH"` + */ +export const readPwnSimpleLoanDutchAuctionProposalProposalTypehash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanDutchAuctionProposalAbi, + functionName: 'PROPOSAL_TYPEHASH', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"VERSION"` + */ +export const readPwnSimpleLoanDutchAuctionProposalVersion = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanDutchAuctionProposalAbi, + functionName: 'VERSION', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"config"` + */ +export const readPwnSimpleLoanDutchAuctionProposalConfig = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanDutchAuctionProposalAbi, + functionName: 'config', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"decodeProposalData"` + */ +export const readPwnSimpleLoanDutchAuctionProposalDecodeProposalData = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanDutchAuctionProposalAbi, + functionName: 'decodeProposalData', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"encodeProposalData"` + */ +export const readPwnSimpleLoanDutchAuctionProposalEncodeProposalData = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanDutchAuctionProposalAbi, + functionName: 'encodeProposalData', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"getCreditAmount"` + */ +export const readPwnSimpleLoanDutchAuctionProposalGetCreditAmount = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanDutchAuctionProposalAbi, + functionName: 'getCreditAmount', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"getMultiproposalHash"` + */ +export const readPwnSimpleLoanDutchAuctionProposalGetMultiproposalHash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanDutchAuctionProposalAbi, + functionName: 'getMultiproposalHash', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"getProposalHash"` + */ +export const readPwnSimpleLoanDutchAuctionProposalGetProposalHash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanDutchAuctionProposalAbi, + functionName: 'getProposalHash', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"hub"` + */ +export const readPwnSimpleLoanDutchAuctionProposalHub = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanDutchAuctionProposalAbi, + functionName: 'hub', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"proposalsMade"` + */ +export const readPwnSimpleLoanDutchAuctionProposalProposalsMade = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanDutchAuctionProposalAbi, + functionName: 'proposalsMade', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"revokedNonce"` + */ +export const readPwnSimpleLoanDutchAuctionProposalRevokedNonce = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanDutchAuctionProposalAbi, + functionName: 'revokedNonce', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"utilizedCredit"` + */ +export const readPwnSimpleLoanDutchAuctionProposalUtilizedCredit = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanDutchAuctionProposalAbi, + functionName: 'utilizedCredit', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ + */ +export const writePwnSimpleLoanDutchAuctionProposal = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanDutchAuctionProposalAbi, + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"acceptProposal"` + */ +export const writePwnSimpleLoanDutchAuctionProposalAcceptProposal = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanDutchAuctionProposalAbi, + functionName: 'acceptProposal', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"makeProposal"` + */ +export const writePwnSimpleLoanDutchAuctionProposalMakeProposal = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanDutchAuctionProposalAbi, + functionName: 'makeProposal', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"revokeNonce"` + */ +export const writePwnSimpleLoanDutchAuctionProposalRevokeNonce = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanDutchAuctionProposalAbi, + functionName: 'revokeNonce', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ + */ +export const simulatePwnSimpleLoanDutchAuctionProposal = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanDutchAuctionProposalAbi, + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"acceptProposal"` + */ +export const simulatePwnSimpleLoanDutchAuctionProposalAcceptProposal = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanDutchAuctionProposalAbi, + functionName: 'acceptProposal', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"makeProposal"` + */ +export const simulatePwnSimpleLoanDutchAuctionProposalMakeProposal = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanDutchAuctionProposalAbi, + functionName: 'makeProposal', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"revokeNonce"` + */ +export const simulatePwnSimpleLoanDutchAuctionProposalRevokeNonce = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanDutchAuctionProposalAbi, + functionName: 'revokeNonce', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ + */ +export const watchPwnSimpleLoanDutchAuctionProposalEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanDutchAuctionProposalAbi, + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `eventName` set to `"ProposalMade"` + */ +export const watchPwnSimpleLoanDutchAuctionProposalProposalMadeEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanDutchAuctionProposalAbi, + eventName: 'ProposalMade', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalHarnessAbi}__ + */ +export const readPwnSimpleLoanDutchAuctionProposalHarness = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanDutchAuctionProposalHarnessAbi, + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalHarnessAbi}__ and `functionName` set to `"DOMAIN_SEPARATOR"` + */ +export const readPwnSimpleLoanDutchAuctionProposalHarnessDomainSeparator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanDutchAuctionProposalHarnessAbi, + functionName: 'DOMAIN_SEPARATOR', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalHarnessAbi}__ and `functionName` set to `"MULTIPROPOSAL_DOMAIN_SEPARATOR"` + */ +export const readPwnSimpleLoanDutchAuctionProposalHarnessMultiproposalDomainSeparator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanDutchAuctionProposalHarnessAbi, + functionName: 'MULTIPROPOSAL_DOMAIN_SEPARATOR', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalHarnessAbi}__ and `functionName` set to `"MULTIPROPOSAL_TYPEHASH"` + */ +export const readPwnSimpleLoanDutchAuctionProposalHarnessMultiproposalTypehash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanDutchAuctionProposalHarnessAbi, + functionName: 'MULTIPROPOSAL_TYPEHASH', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalHarnessAbi}__ and `functionName` set to `"PROPOSAL_TYPEHASH"` + */ +export const readPwnSimpleLoanDutchAuctionProposalHarnessProposalTypehash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanDutchAuctionProposalHarnessAbi, + functionName: 'PROPOSAL_TYPEHASH', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalHarnessAbi}__ and `functionName` set to `"VERSION"` + */ +export const readPwnSimpleLoanDutchAuctionProposalHarnessVersion = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanDutchAuctionProposalHarnessAbi, + functionName: 'VERSION', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalHarnessAbi}__ and `functionName` set to `"config"` + */ +export const readPwnSimpleLoanDutchAuctionProposalHarnessConfig = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanDutchAuctionProposalHarnessAbi, + functionName: 'config', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalHarnessAbi}__ and `functionName` set to `"decodeProposalData"` + */ +export const readPwnSimpleLoanDutchAuctionProposalHarnessDecodeProposalData = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanDutchAuctionProposalHarnessAbi, + functionName: 'decodeProposalData', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalHarnessAbi}__ and `functionName` set to `"encodeProposalData"` + */ +export const readPwnSimpleLoanDutchAuctionProposalHarnessEncodeProposalData = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanDutchAuctionProposalHarnessAbi, + functionName: 'encodeProposalData', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalHarnessAbi}__ and `functionName` set to `"exposed_erc712EncodeProposal"` + */ +export const readPwnSimpleLoanDutchAuctionProposalHarnessExposedErc712EncodeProposal = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanDutchAuctionProposalHarnessAbi, + functionName: 'exposed_erc712EncodeProposal', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalHarnessAbi}__ and `functionName` set to `"getCreditAmount"` + */ +export const readPwnSimpleLoanDutchAuctionProposalHarnessGetCreditAmount = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanDutchAuctionProposalHarnessAbi, + functionName: 'getCreditAmount', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalHarnessAbi}__ and `functionName` set to `"getMultiproposalHash"` + */ +export const readPwnSimpleLoanDutchAuctionProposalHarnessGetMultiproposalHash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanDutchAuctionProposalHarnessAbi, + functionName: 'getMultiproposalHash', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalHarnessAbi}__ and `functionName` set to `"getProposalHash"` + */ +export const readPwnSimpleLoanDutchAuctionProposalHarnessGetProposalHash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanDutchAuctionProposalHarnessAbi, + functionName: 'getProposalHash', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalHarnessAbi}__ and `functionName` set to `"hub"` + */ +export const readPwnSimpleLoanDutchAuctionProposalHarnessHub = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanDutchAuctionProposalHarnessAbi, + functionName: 'hub', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalHarnessAbi}__ and `functionName` set to `"proposalsMade"` + */ +export const readPwnSimpleLoanDutchAuctionProposalHarnessProposalsMade = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanDutchAuctionProposalHarnessAbi, + functionName: 'proposalsMade', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalHarnessAbi}__ and `functionName` set to `"revokedNonce"` + */ +export const readPwnSimpleLoanDutchAuctionProposalHarnessRevokedNonce = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanDutchAuctionProposalHarnessAbi, + functionName: 'revokedNonce', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalHarnessAbi}__ and `functionName` set to `"utilizedCredit"` + */ +export const readPwnSimpleLoanDutchAuctionProposalHarnessUtilizedCredit = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanDutchAuctionProposalHarnessAbi, + functionName: 'utilizedCredit', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalHarnessAbi}__ + */ +export const writePwnSimpleLoanDutchAuctionProposalHarness = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanDutchAuctionProposalHarnessAbi, + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalHarnessAbi}__ and `functionName` set to `"acceptProposal"` + */ +export const writePwnSimpleLoanDutchAuctionProposalHarnessAcceptProposal = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanDutchAuctionProposalHarnessAbi, + functionName: 'acceptProposal', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalHarnessAbi}__ and `functionName` set to `"makeProposal"` + */ +export const writePwnSimpleLoanDutchAuctionProposalHarnessMakeProposal = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanDutchAuctionProposalHarnessAbi, + functionName: 'makeProposal', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalHarnessAbi}__ and `functionName` set to `"revokeNonce"` + */ +export const writePwnSimpleLoanDutchAuctionProposalHarnessRevokeNonce = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanDutchAuctionProposalHarnessAbi, + functionName: 'revokeNonce', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalHarnessAbi}__ + */ +export const simulatePwnSimpleLoanDutchAuctionProposalHarness = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanDutchAuctionProposalHarnessAbi, + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalHarnessAbi}__ and `functionName` set to `"acceptProposal"` + */ +export const simulatePwnSimpleLoanDutchAuctionProposalHarnessAcceptProposal = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanDutchAuctionProposalHarnessAbi, + functionName: 'acceptProposal', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalHarnessAbi}__ and `functionName` set to `"makeProposal"` + */ +export const simulatePwnSimpleLoanDutchAuctionProposalHarnessMakeProposal = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanDutchAuctionProposalHarnessAbi, + functionName: 'makeProposal', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalHarnessAbi}__ and `functionName` set to `"revokeNonce"` + */ +export const simulatePwnSimpleLoanDutchAuctionProposalHarnessRevokeNonce = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanDutchAuctionProposalHarnessAbi, + functionName: 'revokeNonce', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalHarnessAbi}__ + */ +export const watchPwnSimpleLoanDutchAuctionProposalHarnessEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanDutchAuctionProposalHarnessAbi, + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalHarnessAbi}__ and `eventName` set to `"ProposalMade"` + */ +export const watchPwnSimpleLoanDutchAuctionProposalHarnessProposalMadeEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanDutchAuctionProposalHarnessAbi, + eventName: 'ProposalMade', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ + */ +export const readPwnSimpleLoanElasticChainlinkProposal = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalAbi, + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"DOMAIN_SEPARATOR"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalDomainSeparator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalAbi, + functionName: 'DOMAIN_SEPARATOR', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"LOAN_TO_VALUE_DENOMINATOR"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalLoanToValueDenominator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalAbi, + functionName: 'LOAN_TO_VALUE_DENOMINATOR', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"MAX_INTERMEDIARY_DENOMINATIONS"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalMaxIntermediaryDenominations = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalAbi, + functionName: 'MAX_INTERMEDIARY_DENOMINATIONS', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"MULTIPROPOSAL_DOMAIN_SEPARATOR"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalMultiproposalDomainSeparator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalAbi, + functionName: 'MULTIPROPOSAL_DOMAIN_SEPARATOR', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"MULTIPROPOSAL_TYPEHASH"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalMultiproposalTypehash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalAbi, + functionName: 'MULTIPROPOSAL_TYPEHASH', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"PROPOSAL_TYPEHASH"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalProposalTypehash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalAbi, + functionName: 'PROPOSAL_TYPEHASH', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"VERSION"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalVersion = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalAbi, + functionName: 'VERSION', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"WETH"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalWeth = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalAbi, + functionName: 'WETH', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"chainlinkFeedRegistry"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalChainlinkFeedRegistry = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalAbi, + functionName: 'chainlinkFeedRegistry', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"chainlinkL2SequencerUptimeFeed"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalChainlinkL2SequencerUptimeFeed = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalAbi, + functionName: 'chainlinkL2SequencerUptimeFeed', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"config"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalConfig = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalAbi, + functionName: 'config', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"decodeProposalData"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalDecodeProposalData = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalAbi, + functionName: 'decodeProposalData', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"encodeProposalData"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalEncodeProposalData = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalAbi, + functionName: 'encodeProposalData', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"getCollateralAmount"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalGetCollateralAmount = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalAbi, + functionName: 'getCollateralAmount', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"getMultiproposalHash"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalGetMultiproposalHash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalAbi, + functionName: 'getMultiproposalHash', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"getProposalHash"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalGetProposalHash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalAbi, + functionName: 'getProposalHash', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"hub"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalHub = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalAbi, + functionName: 'hub', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"proposalsMade"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalProposalsMade = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalAbi, + functionName: 'proposalsMade', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"revokedNonce"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalRevokedNonce = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalAbi, + functionName: 'revokedNonce', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"utilizedCredit"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalUtilizedCredit = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalAbi, + functionName: 'utilizedCredit', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ + */ +export const writePwnSimpleLoanElasticChainlinkProposal = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanElasticChainlinkProposalAbi, + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"acceptProposal"` + */ +export const writePwnSimpleLoanElasticChainlinkProposalAcceptProposal = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanElasticChainlinkProposalAbi, + functionName: 'acceptProposal', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"makeProposal"` + */ +export const writePwnSimpleLoanElasticChainlinkProposalMakeProposal = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanElasticChainlinkProposalAbi, + functionName: 'makeProposal', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"revokeNonce"` + */ +export const writePwnSimpleLoanElasticChainlinkProposalRevokeNonce = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanElasticChainlinkProposalAbi, + functionName: 'revokeNonce', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ + */ +export const simulatePwnSimpleLoanElasticChainlinkProposal = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanElasticChainlinkProposalAbi, + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"acceptProposal"` + */ +export const simulatePwnSimpleLoanElasticChainlinkProposalAcceptProposal = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanElasticChainlinkProposalAbi, + functionName: 'acceptProposal', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"makeProposal"` + */ +export const simulatePwnSimpleLoanElasticChainlinkProposalMakeProposal = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanElasticChainlinkProposalAbi, + functionName: 'makeProposal', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"revokeNonce"` + */ +export const simulatePwnSimpleLoanElasticChainlinkProposalRevokeNonce = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanElasticChainlinkProposalAbi, + functionName: 'revokeNonce', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ + */ +export const watchPwnSimpleLoanElasticChainlinkProposalEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanElasticChainlinkProposalAbi, + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `eventName` set to `"ProposalMade"` + */ +export const watchPwnSimpleLoanElasticChainlinkProposalProposalMadeEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanElasticChainlinkProposalAbi, + eventName: 'ProposalMade', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ + */ +export const readPwnSimpleLoanElasticChainlinkProposalHarness = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"DOMAIN_SEPARATOR"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalHarnessDomainSeparator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, + functionName: 'DOMAIN_SEPARATOR', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"LOAN_TO_VALUE_DENOMINATOR"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalHarnessLoanToValueDenominator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, + functionName: 'LOAN_TO_VALUE_DENOMINATOR', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"MAX_INTERMEDIARY_DENOMINATIONS"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalHarnessMaxIntermediaryDenominations = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, + functionName: 'MAX_INTERMEDIARY_DENOMINATIONS', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"MULTIPROPOSAL_DOMAIN_SEPARATOR"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalHarnessMultiproposalDomainSeparator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, + functionName: 'MULTIPROPOSAL_DOMAIN_SEPARATOR', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"MULTIPROPOSAL_TYPEHASH"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalHarnessMultiproposalTypehash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, + functionName: 'MULTIPROPOSAL_TYPEHASH', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"PROPOSAL_TYPEHASH"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalHarnessProposalTypehash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, + functionName: 'PROPOSAL_TYPEHASH', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"VERSION"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalHarnessVersion = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, + functionName: 'VERSION', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"WETH"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalHarnessWeth = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, + functionName: 'WETH', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"chainlinkFeedRegistry"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalHarnessChainlinkFeedRegistry = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, + functionName: 'chainlinkFeedRegistry', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"chainlinkL2SequencerUptimeFeed"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalHarnessChainlinkL2SequencerUptimeFeed = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, + functionName: 'chainlinkL2SequencerUptimeFeed', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"config"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalHarnessConfig = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, + functionName: 'config', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"decodeProposalData"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalHarnessDecodeProposalData = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, + functionName: 'decodeProposalData', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"encodeProposalData"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalHarnessEncodeProposalData = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, + functionName: 'encodeProposalData', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"exposed_erc712EncodeProposal"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalHarnessExposedErc712EncodeProposal = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, + functionName: 'exposed_erc712EncodeProposal', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"getCollateralAmount"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalHarnessGetCollateralAmount = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, + functionName: 'getCollateralAmount', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"getMultiproposalHash"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalHarnessGetMultiproposalHash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, + functionName: 'getMultiproposalHash', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"getProposalHash"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalHarnessGetProposalHash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, + functionName: 'getProposalHash', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"hub"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalHarnessHub = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, + functionName: 'hub', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"proposalsMade"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalHarnessProposalsMade = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, + functionName: 'proposalsMade', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"revokedNonce"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalHarnessRevokedNonce = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, + functionName: 'revokedNonce', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"utilizedCredit"` + */ +export const readPwnSimpleLoanElasticChainlinkProposalHarnessUtilizedCredit = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, + functionName: 'utilizedCredit', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ + */ +export const writePwnSimpleLoanElasticChainlinkProposalHarness = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"acceptProposal"` + */ +export const writePwnSimpleLoanElasticChainlinkProposalHarnessAcceptProposal = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, + functionName: 'acceptProposal', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"makeProposal"` + */ +export const writePwnSimpleLoanElasticChainlinkProposalHarnessMakeProposal = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, + functionName: 'makeProposal', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"revokeNonce"` + */ +export const writePwnSimpleLoanElasticChainlinkProposalHarnessRevokeNonce = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, + functionName: 'revokeNonce', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ + */ +export const simulatePwnSimpleLoanElasticChainlinkProposalHarness = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"acceptProposal"` + */ +export const simulatePwnSimpleLoanElasticChainlinkProposalHarnessAcceptProposal = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, + functionName: 'acceptProposal', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"makeProposal"` + */ +export const simulatePwnSimpleLoanElasticChainlinkProposalHarnessMakeProposal = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, + functionName: 'makeProposal', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"revokeNonce"` + */ +export const simulatePwnSimpleLoanElasticChainlinkProposalHarnessRevokeNonce = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, + functionName: 'revokeNonce', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ + */ +export const watchPwnSimpleLoanElasticChainlinkProposalHarnessEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `eventName` set to `"ProposalMade"` + */ +export const watchPwnSimpleLoanElasticChainlinkProposalHarnessProposalMadeEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, + eventName: 'ProposalMade', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ + */ +export const readPwnSimpleLoanElasticProposal = + /*#__PURE__*/ createReadContract({ abi: pwnSimpleLoanElasticProposalAbi }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"CREDIT_PER_COLLATERAL_UNIT_DENOMINATOR"` + */ +export const readPwnSimpleLoanElasticProposalCreditPerCollateralUnitDenominator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticProposalAbi, + functionName: 'CREDIT_PER_COLLATERAL_UNIT_DENOMINATOR', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"DOMAIN_SEPARATOR"` + */ +export const readPwnSimpleLoanElasticProposalDomainSeparator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticProposalAbi, + functionName: 'DOMAIN_SEPARATOR', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"MULTIPROPOSAL_DOMAIN_SEPARATOR"` + */ +export const readPwnSimpleLoanElasticProposalMultiproposalDomainSeparator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticProposalAbi, + functionName: 'MULTIPROPOSAL_DOMAIN_SEPARATOR', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"MULTIPROPOSAL_TYPEHASH"` + */ +export const readPwnSimpleLoanElasticProposalMultiproposalTypehash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticProposalAbi, + functionName: 'MULTIPROPOSAL_TYPEHASH', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"PROPOSAL_TYPEHASH"` + */ +export const readPwnSimpleLoanElasticProposalProposalTypehash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticProposalAbi, + functionName: 'PROPOSAL_TYPEHASH', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"VERSION"` + */ +export const readPwnSimpleLoanElasticProposalVersion = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticProposalAbi, + functionName: 'VERSION', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"config"` + */ +export const readPwnSimpleLoanElasticProposalConfig = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticProposalAbi, + functionName: 'config', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"decodeProposalData"` + */ +export const readPwnSimpleLoanElasticProposalDecodeProposalData = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticProposalAbi, + functionName: 'decodeProposalData', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"encodeProposalData"` + */ +export const readPwnSimpleLoanElasticProposalEncodeProposalData = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticProposalAbi, + functionName: 'encodeProposalData', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"getCollateralAmount"` + */ +export const readPwnSimpleLoanElasticProposalGetCollateralAmount = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticProposalAbi, + functionName: 'getCollateralAmount', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"getMultiproposalHash"` + */ +export const readPwnSimpleLoanElasticProposalGetMultiproposalHash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticProposalAbi, + functionName: 'getMultiproposalHash', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"getProposalHash"` + */ +export const readPwnSimpleLoanElasticProposalGetProposalHash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticProposalAbi, + functionName: 'getProposalHash', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"hub"` + */ +export const readPwnSimpleLoanElasticProposalHub = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticProposalAbi, + functionName: 'hub', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"proposalsMade"` + */ +export const readPwnSimpleLoanElasticProposalProposalsMade = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticProposalAbi, + functionName: 'proposalsMade', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"revokedNonce"` + */ +export const readPwnSimpleLoanElasticProposalRevokedNonce = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticProposalAbi, + functionName: 'revokedNonce', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"utilizedCredit"` + */ +export const readPwnSimpleLoanElasticProposalUtilizedCredit = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticProposalAbi, + functionName: 'utilizedCredit', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ + */ +export const writePwnSimpleLoanElasticProposal = + /*#__PURE__*/ createWriteContract({ abi: pwnSimpleLoanElasticProposalAbi }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"acceptProposal"` + */ +export const writePwnSimpleLoanElasticProposalAcceptProposal = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanElasticProposalAbi, + functionName: 'acceptProposal', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"makeProposal"` + */ +export const writePwnSimpleLoanElasticProposalMakeProposal = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanElasticProposalAbi, + functionName: 'makeProposal', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnRevokedNonceAbi}__ and `functionName` set to `"revokeNonce"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"revokeNonce"` */ -export const writePwnRevokedNonceRevokeNonce = - /*#__PURE__*/ createWriteContract({ - abi: pwnRevokedNonceAbi, - functionName: "revokeNonce", - }); +export const writePwnSimpleLoanElasticProposalRevokeNonce = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanElasticProposalAbi, + functionName: 'revokeNonce', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnRevokedNonceAbi}__ and `functionName` set to `"revokeNonceSpace"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ */ -export const writePwnRevokedNonceRevokeNonceSpace = - /*#__PURE__*/ createWriteContract({ - abi: pwnRevokedNonceAbi, - functionName: "revokeNonceSpace", - }); +export const simulatePwnSimpleLoanElasticProposal = + /*#__PURE__*/ createSimulateContract({ abi: pwnSimpleLoanElasticProposalAbi }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnRevokedNonceAbi}__ and `functionName` set to `"revokeNonces"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"acceptProposal"` */ -export const writePwnRevokedNonceRevokeNonces = - /*#__PURE__*/ createWriteContract({ - abi: pwnRevokedNonceAbi, - functionName: "revokeNonces", - }); +export const simulatePwnSimpleLoanElasticProposalAcceptProposal = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanElasticProposalAbi, + functionName: 'acceptProposal', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnRevokedNonceAbi}__ + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"makeProposal"` */ -export const simulatePwnRevokedNonce = /*#__PURE__*/ createSimulateContract({ - abi: pwnRevokedNonceAbi, -}); +export const simulatePwnSimpleLoanElasticProposalMakeProposal = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanElasticProposalAbi, + functionName: 'makeProposal', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnRevokedNonceAbi}__ and `functionName` set to `"revokeNonce"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"revokeNonce"` */ -export const simulatePwnRevokedNonceRevokeNonce = - /*#__PURE__*/ createSimulateContract({ - abi: pwnRevokedNonceAbi, - functionName: "revokeNonce", - }); +export const simulatePwnSimpleLoanElasticProposalRevokeNonce = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanElasticProposalAbi, + functionName: 'revokeNonce', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnRevokedNonceAbi}__ and `functionName` set to `"revokeNonceSpace"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ */ -export const simulatePwnRevokedNonceRevokeNonceSpace = - /*#__PURE__*/ createSimulateContract({ - abi: pwnRevokedNonceAbi, - functionName: "revokeNonceSpace", - }); +export const watchPwnSimpleLoanElasticProposalEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanElasticProposalAbi, + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnRevokedNonceAbi}__ and `functionName` set to `"revokeNonces"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `eventName` set to `"ProposalMade"` */ -export const simulatePwnRevokedNonceRevokeNonces = - /*#__PURE__*/ createSimulateContract({ - abi: pwnRevokedNonceAbi, - functionName: "revokeNonces", - }); +export const watchPwnSimpleLoanElasticProposalProposalMadeEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanElasticProposalAbi, + eventName: 'ProposalMade', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnRevokedNonceAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalHarnessAbi}__ */ -export const watchPwnRevokedNonceEvent = /*#__PURE__*/ createWatchContractEvent( - { abi: pwnRevokedNonceAbi }, -); +export const readPwnSimpleLoanElasticProposalHarness = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticProposalHarnessAbi, + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnRevokedNonceAbi}__ and `eventName` set to `"NonceRevoked"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalHarnessAbi}__ and `functionName` set to `"CREDIT_PER_COLLATERAL_UNIT_DENOMINATOR"` */ -export const watchPwnRevokedNonceNonceRevokedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnRevokedNonceAbi, - eventName: "NonceRevoked", - }); +export const readPwnSimpleLoanElasticProposalHarnessCreditPerCollateralUnitDenominator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticProposalHarnessAbi, + functionName: 'CREDIT_PER_COLLATERAL_UNIT_DENOMINATOR', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnRevokedNonceAbi}__ and `eventName` set to `"NonceSpaceRevoked"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalHarnessAbi}__ and `functionName` set to `"DOMAIN_SEPARATOR"` */ -export const watchPwnRevokedNonceNonceSpaceRevokedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnRevokedNonceAbi, - eventName: "NonceSpaceRevoked", - }); +export const readPwnSimpleLoanElasticProposalHarnessDomainSeparator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticProposalHarnessAbi, + functionName: 'DOMAIN_SEPARATOR', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalHarnessAbi}__ and `functionName` set to `"MULTIPROPOSAL_DOMAIN_SEPARATOR"` */ -export const readPwnSimpleLoan = /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanAbi, -}); +export const readPwnSimpleLoanElasticProposalHarnessMultiproposalDomainSeparator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticProposalHarnessAbi, + functionName: 'MULTIPROPOSAL_DOMAIN_SEPARATOR', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"ACCRUING_INTEREST_APR_DECIMALS"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalHarnessAbi}__ and `functionName` set to `"MULTIPROPOSAL_TYPEHASH"` */ -export const readPwnSimpleLoanAccruingInterestAprDecimals = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanAbi, - functionName: "ACCRUING_INTEREST_APR_DECIMALS", - }); +export const readPwnSimpleLoanElasticProposalHarnessMultiproposalTypehash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticProposalHarnessAbi, + functionName: 'MULTIPROPOSAL_TYPEHASH', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"ACCRUING_INTEREST_APR_DENOMINATOR"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalHarnessAbi}__ and `functionName` set to `"PROPOSAL_TYPEHASH"` */ -export const readPwnSimpleLoanAccruingInterestAprDenominator = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanAbi, - functionName: "ACCRUING_INTEREST_APR_DENOMINATOR", - }); +export const readPwnSimpleLoanElasticProposalHarnessProposalTypehash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticProposalHarnessAbi, + functionName: 'PROPOSAL_TYPEHASH', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"DOMAIN_SEPARATOR"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalHarnessAbi}__ and `functionName` set to `"VERSION"` */ -export const readPwnSimpleLoanDomainSeparator = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanAbi, - functionName: "DOMAIN_SEPARATOR", - }); +export const readPwnSimpleLoanElasticProposalHarnessVersion = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticProposalHarnessAbi, + functionName: 'VERSION', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"EXTENSION_PROPOSAL_TYPEHASH"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalHarnessAbi}__ and `functionName` set to `"config"` */ -export const readPwnSimpleLoanExtensionProposalTypehash = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanAbi, - functionName: "EXTENSION_PROPOSAL_TYPEHASH", - }); +export const readPwnSimpleLoanElasticProposalHarnessConfig = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticProposalHarnessAbi, + functionName: 'config', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"MAX_ACCRUING_INTEREST_APR"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalHarnessAbi}__ and `functionName` set to `"decodeProposalData"` */ -export const readPwnSimpleLoanMaxAccruingInterestApr = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanAbi, - functionName: "MAX_ACCRUING_INTEREST_APR", - }); +export const readPwnSimpleLoanElasticProposalHarnessDecodeProposalData = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticProposalHarnessAbi, + functionName: 'decodeProposalData', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"MAX_EXTENSION_DURATION"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalHarnessAbi}__ and `functionName` set to `"encodeProposalData"` */ -export const readPwnSimpleLoanMaxExtensionDuration = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanAbi, - functionName: "MAX_EXTENSION_DURATION", - }); +export const readPwnSimpleLoanElasticProposalHarnessEncodeProposalData = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticProposalHarnessAbi, + functionName: 'encodeProposalData', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"MINUTES_IN_YEAR"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalHarnessAbi}__ and `functionName` set to `"exposed_erc712EncodeProposal"` */ -export const readPwnSimpleLoanMinutesInYear = /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanAbi, - functionName: "MINUTES_IN_YEAR", -}); +export const readPwnSimpleLoanElasticProposalHarnessExposedErc712EncodeProposal = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticProposalHarnessAbi, + functionName: 'exposed_erc712EncodeProposal', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"MIN_EXTENSION_DURATION"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalHarnessAbi}__ and `functionName` set to `"getCollateralAmount"` */ -export const readPwnSimpleLoanMinExtensionDuration = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanAbi, - functionName: "MIN_EXTENSION_DURATION", - }); +export const readPwnSimpleLoanElasticProposalHarnessGetCollateralAmount = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticProposalHarnessAbi, + functionName: 'getCollateralAmount', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"MIN_LOAN_DURATION"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalHarnessAbi}__ and `functionName` set to `"getMultiproposalHash"` */ -export const readPwnSimpleLoanMinLoanDuration = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanAbi, - functionName: "MIN_LOAN_DURATION", - }); +export const readPwnSimpleLoanElasticProposalHarnessGetMultiproposalHash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticProposalHarnessAbi, + functionName: 'getMultiproposalHash', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"VERSION"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalHarnessAbi}__ and `functionName` set to `"getProposalHash"` */ -export const readPwnSimpleLoanVersion = /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanAbi, - functionName: "VERSION", -}); +export const readPwnSimpleLoanElasticProposalHarnessGetProposalHash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticProposalHarnessAbi, + functionName: 'getProposalHash', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"categoryRegistry"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalHarnessAbi}__ and `functionName` set to `"hub"` */ -export const readPwnSimpleLoanCategoryRegistry = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanAbi, - functionName: "categoryRegistry", - }); +export const readPwnSimpleLoanElasticProposalHarnessHub = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticProposalHarnessAbi, + functionName: 'hub', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"config"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalHarnessAbi}__ and `functionName` set to `"proposalsMade"` */ -export const readPwnSimpleLoanConfig = /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanAbi, - functionName: "config", -}); +export const readPwnSimpleLoanElasticProposalHarnessProposalsMade = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticProposalHarnessAbi, + functionName: 'proposalsMade', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"extensionProposalsMade"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalHarnessAbi}__ and `functionName` set to `"revokedNonce"` */ -export const readPwnSimpleLoanExtensionProposalsMade = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanAbi, - functionName: "extensionProposalsMade", - }); +export const readPwnSimpleLoanElasticProposalHarnessRevokedNonce = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticProposalHarnessAbi, + functionName: 'revokedNonce', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"getExtensionHash"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalHarnessAbi}__ and `functionName` set to `"utilizedCredit"` */ -export const readPwnSimpleLoanGetExtensionHash = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanAbi, - functionName: "getExtensionHash", - }); +export const readPwnSimpleLoanElasticProposalHarnessUtilizedCredit = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanElasticProposalHarnessAbi, + functionName: 'utilizedCredit', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"getLOAN"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalHarnessAbi}__ */ -export const readPwnSimpleLoanGetLoan = /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanAbi, - functionName: "getLOAN", -}); +export const writePwnSimpleLoanElasticProposalHarness = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanElasticProposalHarnessAbi, + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"getLenderSpecHash"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalHarnessAbi}__ and `functionName` set to `"acceptProposal"` */ -export const readPwnSimpleLoanGetLenderSpecHash = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanAbi, - functionName: "getLenderSpecHash", - }); +export const writePwnSimpleLoanElasticProposalHarnessAcceptProposal = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanElasticProposalHarnessAbi, + functionName: 'acceptProposal', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"getStateFingerprint"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalHarnessAbi}__ and `functionName` set to `"makeProposal"` */ -export const readPwnSimpleLoanGetStateFingerprint = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanAbi, - functionName: "getStateFingerprint", - }); +export const writePwnSimpleLoanElasticProposalHarnessMakeProposal = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanElasticProposalHarnessAbi, + functionName: 'makeProposal', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"hub"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalHarnessAbi}__ and `functionName` set to `"revokeNonce"` */ -export const readPwnSimpleLoanHub = /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanAbi, - functionName: "hub", -}); +export const writePwnSimpleLoanElasticProposalHarnessRevokeNonce = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanElasticProposalHarnessAbi, + functionName: 'revokeNonce', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"isValidAsset"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalHarnessAbi}__ */ -export const readPwnSimpleLoanIsValidAsset = /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanAbi, - functionName: "isValidAsset", -}); +export const simulatePwnSimpleLoanElasticProposalHarness = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanElasticProposalHarnessAbi, + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"loanMetadataUri"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalHarnessAbi}__ and `functionName` set to `"acceptProposal"` */ -export const readPwnSimpleLoanLoanMetadataUri = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanAbi, - functionName: "loanMetadataUri", - }); +export const simulatePwnSimpleLoanElasticProposalHarnessAcceptProposal = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanElasticProposalHarnessAbi, + functionName: 'acceptProposal', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalHarnessAbi}__ and `functionName` set to `"makeProposal"` + */ +export const simulatePwnSimpleLoanElasticProposalHarnessMakeProposal = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanElasticProposalHarnessAbi, + functionName: 'makeProposal', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalHarnessAbi}__ and `functionName` set to `"revokeNonce"` + */ +export const simulatePwnSimpleLoanElasticProposalHarnessRevokeNonce = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanElasticProposalHarnessAbi, + functionName: 'revokeNonce', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalHarnessAbi}__ + */ +export const watchPwnSimpleLoanElasticProposalHarnessEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanElasticProposalHarnessAbi, + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalHarnessAbi}__ and `eventName` set to `"ProposalMade"` + */ +export const watchPwnSimpleLoanElasticProposalHarnessProposalMadeEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanElasticProposalHarnessAbi, + eventName: 'ProposalMade', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ + */ +export const readPwnSimpleLoanListProposal = /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanListProposalAbi, +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"DOMAIN_SEPARATOR"` + */ +export const readPwnSimpleLoanListProposalDomainSeparator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanListProposalAbi, + functionName: 'DOMAIN_SEPARATOR', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"MULTIPROPOSAL_DOMAIN_SEPARATOR"` + */ +export const readPwnSimpleLoanListProposalMultiproposalDomainSeparator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanListProposalAbi, + functionName: 'MULTIPROPOSAL_DOMAIN_SEPARATOR', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"MULTIPROPOSAL_TYPEHASH"` + */ +export const readPwnSimpleLoanListProposalMultiproposalTypehash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanListProposalAbi, + functionName: 'MULTIPROPOSAL_TYPEHASH', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"PROPOSAL_TYPEHASH"` + */ +export const readPwnSimpleLoanListProposalProposalTypehash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanListProposalAbi, + functionName: 'PROPOSAL_TYPEHASH', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"VERSION"` + */ +export const readPwnSimpleLoanListProposalVersion = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanListProposalAbi, + functionName: 'VERSION', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"config"` + */ +export const readPwnSimpleLoanListProposalConfig = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanListProposalAbi, + functionName: 'config', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"decodeProposalData"` + */ +export const readPwnSimpleLoanListProposalDecodeProposalData = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanListProposalAbi, + functionName: 'decodeProposalData', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"encodeProposalData"` + */ +export const readPwnSimpleLoanListProposalEncodeProposalData = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanListProposalAbi, + functionName: 'encodeProposalData', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"getMultiproposalHash"` + */ +export const readPwnSimpleLoanListProposalGetMultiproposalHash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanListProposalAbi, + functionName: 'getMultiproposalHash', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"getProposalHash"` + */ +export const readPwnSimpleLoanListProposalGetProposalHash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanListProposalAbi, + functionName: 'getProposalHash', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"hub"` + */ +export const readPwnSimpleLoanListProposalHub = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanListProposalAbi, + functionName: 'hub', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"proposalsMade"` + */ +export const readPwnSimpleLoanListProposalProposalsMade = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanListProposalAbi, + functionName: 'proposalsMade', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"revokedNonce"` + */ +export const readPwnSimpleLoanListProposalRevokedNonce = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanListProposalAbi, + functionName: 'revokedNonce', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"utilizedCredit"` + */ +export const readPwnSimpleLoanListProposalUtilizedCredit = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanListProposalAbi, + functionName: 'utilizedCredit', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ + */ +export const writePwnSimpleLoanListProposal = /*#__PURE__*/ createWriteContract( + { abi: pwnSimpleLoanListProposalAbi }, +) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"acceptProposal"` + */ +export const writePwnSimpleLoanListProposalAcceptProposal = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanListProposalAbi, + functionName: 'acceptProposal', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"makeProposal"` + */ +export const writePwnSimpleLoanListProposalMakeProposal = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanListProposalAbi, + functionName: 'makeProposal', + }) + +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"revokeNonce"` + */ +export const writePwnSimpleLoanListProposalRevokeNonce = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanListProposalAbi, + functionName: 'revokeNonce', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ + */ +export const simulatePwnSimpleLoanListProposal = + /*#__PURE__*/ createSimulateContract({ abi: pwnSimpleLoanListProposalAbi }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"acceptProposal"` + */ +export const simulatePwnSimpleLoanListProposalAcceptProposal = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanListProposalAbi, + functionName: 'acceptProposal', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"makeProposal"` + */ +export const simulatePwnSimpleLoanListProposalMakeProposal = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanListProposalAbi, + functionName: 'makeProposal', + }) + +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"revokeNonce"` + */ +export const simulatePwnSimpleLoanListProposalRevokeNonce = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanListProposalAbi, + functionName: 'revokeNonce', + }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ + */ +export const watchPwnSimpleLoanListProposalEvent = + /*#__PURE__*/ createWatchContractEvent({ abi: pwnSimpleLoanListProposalAbi }) + +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `eventName` set to `"ProposalMade"` + */ +export const watchPwnSimpleLoanListProposalProposalMadeEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanListProposalAbi, + eventName: 'ProposalMade', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalHarnessAbi}__ + */ +export const readPwnSimpleLoanListProposalHarness = + /*#__PURE__*/ createReadContract({ abi: pwnSimpleLoanListProposalHarnessAbi }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalHarnessAbi}__ and `functionName` set to `"DOMAIN_SEPARATOR"` + */ +export const readPwnSimpleLoanListProposalHarnessDomainSeparator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanListProposalHarnessAbi, + functionName: 'DOMAIN_SEPARATOR', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalHarnessAbi}__ and `functionName` set to `"MULTIPROPOSAL_DOMAIN_SEPARATOR"` + */ +export const readPwnSimpleLoanListProposalHarnessMultiproposalDomainSeparator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanListProposalHarnessAbi, + functionName: 'MULTIPROPOSAL_DOMAIN_SEPARATOR', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalHarnessAbi}__ and `functionName` set to `"MULTIPROPOSAL_TYPEHASH"` + */ +export const readPwnSimpleLoanListProposalHarnessMultiproposalTypehash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanListProposalHarnessAbi, + functionName: 'MULTIPROPOSAL_TYPEHASH', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalHarnessAbi}__ and `functionName` set to `"PROPOSAL_TYPEHASH"` + */ +export const readPwnSimpleLoanListProposalHarnessProposalTypehash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanListProposalHarnessAbi, + functionName: 'PROPOSAL_TYPEHASH', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalHarnessAbi}__ and `functionName` set to `"VERSION"` + */ +export const readPwnSimpleLoanListProposalHarnessVersion = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanListProposalHarnessAbi, + functionName: 'VERSION', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalHarnessAbi}__ and `functionName` set to `"config"` + */ +export const readPwnSimpleLoanListProposalHarnessConfig = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanListProposalHarnessAbi, + functionName: 'config', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalHarnessAbi}__ and `functionName` set to `"decodeProposalData"` + */ +export const readPwnSimpleLoanListProposalHarnessDecodeProposalData = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanListProposalHarnessAbi, + functionName: 'decodeProposalData', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalHarnessAbi}__ and `functionName` set to `"encodeProposalData"` + */ +export const readPwnSimpleLoanListProposalHarnessEncodeProposalData = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanListProposalHarnessAbi, + functionName: 'encodeProposalData', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalHarnessAbi}__ and `functionName` set to `"exposed_erc712EncodeProposal"` + */ +export const readPwnSimpleLoanListProposalHarnessExposedErc712EncodeProposal = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanListProposalHarnessAbi, + functionName: 'exposed_erc712EncodeProposal', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalHarnessAbi}__ and `functionName` set to `"getMultiproposalHash"` + */ +export const readPwnSimpleLoanListProposalHarnessGetMultiproposalHash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanListProposalHarnessAbi, + functionName: 'getMultiproposalHash', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalHarnessAbi}__ and `functionName` set to `"getProposalHash"` + */ +export const readPwnSimpleLoanListProposalHarnessGetProposalHash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanListProposalHarnessAbi, + functionName: 'getProposalHash', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalHarnessAbi}__ and `functionName` set to `"hub"` + */ +export const readPwnSimpleLoanListProposalHarnessHub = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanListProposalHarnessAbi, + functionName: 'hub', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"loanRepaymentAmount"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalHarnessAbi}__ and `functionName` set to `"proposalsMade"` */ -export const readPwnSimpleLoanLoanRepaymentAmount = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanAbi, - functionName: "loanRepaymentAmount", - }); +export const readPwnSimpleLoanListProposalHarnessProposalsMade = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanListProposalHarnessAbi, + functionName: 'proposalsMade', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"loanToken"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalHarnessAbi}__ and `functionName` set to `"revokedNonce"` */ -export const readPwnSimpleLoanLoanToken = /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanAbi, - functionName: "loanToken", -}); +export const readPwnSimpleLoanListProposalHarnessRevokedNonce = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanListProposalHarnessAbi, + functionName: 'revokedNonce', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"onERC1155BatchReceived"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalHarnessAbi}__ and `functionName` set to `"utilizedCredit"` */ -export const readPwnSimpleLoanOnErc1155BatchReceived = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanAbi, - functionName: "onERC1155BatchReceived", - }); +export const readPwnSimpleLoanListProposalHarnessUtilizedCredit = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanListProposalHarnessAbi, + functionName: 'utilizedCredit', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"onERC1155Received"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalHarnessAbi}__ */ -export const readPwnSimpleLoanOnErc1155Received = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanAbi, - functionName: "onERC1155Received", - }); +export const writePwnSimpleLoanListProposalHarness = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanListProposalHarnessAbi, + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"onERC721Received"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalHarnessAbi}__ and `functionName` set to `"acceptProposal"` */ -export const readPwnSimpleLoanOnErc721Received = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanAbi, - functionName: "onERC721Received", - }); +export const writePwnSimpleLoanListProposalHarnessAcceptProposal = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanListProposalHarnessAbi, + functionName: 'acceptProposal', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"revokedNonce"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalHarnessAbi}__ and `functionName` set to `"makeProposal"` */ -export const readPwnSimpleLoanRevokedNonce = /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanAbi, - functionName: "revokedNonce", -}); +export const writePwnSimpleLoanListProposalHarnessMakeProposal = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanListProposalHarnessAbi, + functionName: 'makeProposal', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"supportsInterface"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalHarnessAbi}__ and `functionName` set to `"revokeNonce"` */ -export const readPwnSimpleLoanSupportsInterface = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanAbi, - functionName: "supportsInterface", - }); +export const writePwnSimpleLoanListProposalHarnessRevokeNonce = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanListProposalHarnessAbi, + functionName: 'revokeNonce', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalHarnessAbi}__ */ -export const writePwnSimpleLoan = /*#__PURE__*/ createWriteContract({ - abi: pwnSimpleLoanAbi, -}); +export const simulatePwnSimpleLoanListProposalHarness = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanListProposalHarnessAbi, + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"claimLOAN"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalHarnessAbi}__ and `functionName` set to `"acceptProposal"` */ -export const writePwnSimpleLoanClaimLoan = /*#__PURE__*/ createWriteContract({ - abi: pwnSimpleLoanAbi, - functionName: "claimLOAN", -}); +export const simulatePwnSimpleLoanListProposalHarnessAcceptProposal = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanListProposalHarnessAbi, + functionName: 'acceptProposal', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"createLOAN"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalHarnessAbi}__ and `functionName` set to `"makeProposal"` */ -export const writePwnSimpleLoanCreateLoan = /*#__PURE__*/ createWriteContract({ - abi: pwnSimpleLoanAbi, - functionName: "createLOAN", -}); +export const simulatePwnSimpleLoanListProposalHarnessMakeProposal = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanListProposalHarnessAbi, + functionName: 'makeProposal', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"extendLOAN"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalHarnessAbi}__ and `functionName` set to `"revokeNonce"` */ -export const writePwnSimpleLoanExtendLoan = /*#__PURE__*/ createWriteContract({ - abi: pwnSimpleLoanAbi, - functionName: "extendLOAN", -}); +export const simulatePwnSimpleLoanListProposalHarnessRevokeNonce = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanListProposalHarnessAbi, + functionName: 'revokeNonce', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"makeExtensionProposal"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanListProposalHarnessAbi}__ */ -export const writePwnSimpleLoanMakeExtensionProposal = - /*#__PURE__*/ createWriteContract({ - abi: pwnSimpleLoanAbi, - functionName: "makeExtensionProposal", - }); +export const watchPwnSimpleLoanListProposalHarnessEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanListProposalHarnessAbi, + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"repayLOAN"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanListProposalHarnessAbi}__ and `eventName` set to `"ProposalMade"` */ -export const writePwnSimpleLoanRepayLoan = /*#__PURE__*/ createWriteContract({ - abi: pwnSimpleLoanAbi, - functionName: "repayLOAN", -}); +export const watchPwnSimpleLoanListProposalHarnessProposalMadeEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanListProposalHarnessAbi, + eventName: 'ProposalMade', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"tryClaimRepaidLOAN"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanProposalAbi}__ */ -export const writePwnSimpleLoanTryClaimRepaidLoan = - /*#__PURE__*/ createWriteContract({ - abi: pwnSimpleLoanAbi, - functionName: "tryClaimRepaidLOAN", - }); +export const readPwnSimpleLoanProposal = /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanProposalAbi, +}) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanProposalAbi}__ and `functionName` set to `"DOMAIN_SEPARATOR"` */ -export const simulatePwnSimpleLoan = /*#__PURE__*/ createSimulateContract({ - abi: pwnSimpleLoanAbi, -}); +export const readPwnSimpleLoanProposalDomainSeparator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanProposalAbi, + functionName: 'DOMAIN_SEPARATOR', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"claimLOAN"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanProposalAbi}__ and `functionName` set to `"MULTIPROPOSAL_DOMAIN_SEPARATOR"` */ -export const simulatePwnSimpleLoanClaimLoan = - /*#__PURE__*/ createSimulateContract({ - abi: pwnSimpleLoanAbi, - functionName: "claimLOAN", - }); +export const readPwnSimpleLoanProposalMultiproposalDomainSeparator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanProposalAbi, + functionName: 'MULTIPROPOSAL_DOMAIN_SEPARATOR', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"createLOAN"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanProposalAbi}__ and `functionName` set to `"MULTIPROPOSAL_TYPEHASH"` */ -export const simulatePwnSimpleLoanCreateLoan = - /*#__PURE__*/ createSimulateContract({ - abi: pwnSimpleLoanAbi, - functionName: "createLOAN", - }); +export const readPwnSimpleLoanProposalMultiproposalTypehash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanProposalAbi, + functionName: 'MULTIPROPOSAL_TYPEHASH', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"extendLOAN"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanProposalAbi}__ and `functionName` set to `"config"` */ -export const simulatePwnSimpleLoanExtendLoan = - /*#__PURE__*/ createSimulateContract({ - abi: pwnSimpleLoanAbi, - functionName: "extendLOAN", - }); +export const readPwnSimpleLoanProposalConfig = /*#__PURE__*/ createReadContract( + { abi: pwnSimpleLoanProposalAbi, functionName: 'config' }, +) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"makeExtensionProposal"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanProposalAbi}__ and `functionName` set to `"getMultiproposalHash"` */ -export const simulatePwnSimpleLoanMakeExtensionProposal = - /*#__PURE__*/ createSimulateContract({ - abi: pwnSimpleLoanAbi, - functionName: "makeExtensionProposal", - }); +export const readPwnSimpleLoanProposalGetMultiproposalHash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanProposalAbi, + functionName: 'getMultiproposalHash', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"repayLOAN"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanProposalAbi}__ and `functionName` set to `"hub"` */ -export const simulatePwnSimpleLoanRepayLoan = - /*#__PURE__*/ createSimulateContract({ - abi: pwnSimpleLoanAbi, - functionName: "repayLOAN", - }); +export const readPwnSimpleLoanProposalHub = /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanProposalAbi, + functionName: 'hub', +}) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `functionName` set to `"tryClaimRepaidLOAN"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanProposalAbi}__ and `functionName` set to `"proposalsMade"` */ -export const simulatePwnSimpleLoanTryClaimRepaidLoan = - /*#__PURE__*/ createSimulateContract({ - abi: pwnSimpleLoanAbi, - functionName: "tryClaimRepaidLOAN", - }); +export const readPwnSimpleLoanProposalProposalsMade = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanProposalAbi, + functionName: 'proposalsMade', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanProposalAbi}__ and `functionName` set to `"revokedNonce"` */ -export const watchPwnSimpleLoanEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: pwnSimpleLoanAbi, -}); +export const readPwnSimpleLoanProposalRevokedNonce = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanProposalAbi, + functionName: 'revokedNonce', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `eventName` set to `"ExtensionProposalMade"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanProposalAbi}__ and `functionName` set to `"utilizedCredit"` */ -export const watchPwnSimpleLoanExtensionProposalMadeEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnSimpleLoanAbi, - eventName: "ExtensionProposalMade", - }); +export const readPwnSimpleLoanProposalUtilizedCredit = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanProposalAbi, + functionName: 'utilizedCredit', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `eventName` set to `"LOANClaimed"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanProposalAbi}__ */ -export const watchPwnSimpleLoanLoanClaimedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnSimpleLoanAbi, - eventName: "LOANClaimed", - }); +export const writePwnSimpleLoanProposal = /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanProposalAbi, +}) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `eventName` set to `"LOANCreated"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanProposalAbi}__ and `functionName` set to `"acceptProposal"` */ -export const watchPwnSimpleLoanLoanCreatedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnSimpleLoanAbi, - eventName: "LOANCreated", - }); +export const writePwnSimpleLoanProposalAcceptProposal = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanProposalAbi, + functionName: 'acceptProposal', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `eventName` set to `"LOANExtended"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanProposalAbi}__ and `functionName` set to `"revokeNonce"` */ -export const watchPwnSimpleLoanLoanExtendedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnSimpleLoanAbi, - eventName: "LOANExtended", - }); +export const writePwnSimpleLoanProposalRevokeNonce = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanProposalAbi, + functionName: 'revokeNonce', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `eventName` set to `"LOANPaidBack"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanProposalAbi}__ */ -export const watchPwnSimpleLoanLoanPaidBackEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnSimpleLoanAbi, - eventName: "LOANPaidBack", - }); +export const simulatePwnSimpleLoanProposal = + /*#__PURE__*/ createSimulateContract({ abi: pwnSimpleLoanProposalAbi }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `eventName` set to `"PoolSupply"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanProposalAbi}__ and `functionName` set to `"acceptProposal"` */ -export const watchPwnSimpleLoanPoolSupplyEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnSimpleLoanAbi, - eventName: "PoolSupply", - }); +export const simulatePwnSimpleLoanProposalAcceptProposal = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanProposalAbi, + functionName: 'acceptProposal', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `eventName` set to `"PoolWithdraw"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanProposalAbi}__ and `functionName` set to `"revokeNonce"` */ -export const watchPwnSimpleLoanPoolWithdrawEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnSimpleLoanAbi, - eventName: "PoolWithdraw", - }); +export const simulatePwnSimpleLoanProposalRevokeNonce = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanProposalAbi, + functionName: 'revokeNonce', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `eventName` set to `"VaultPull"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ */ -export const watchPwnSimpleLoanVaultPullEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnSimpleLoanAbi, - eventName: "VaultPull", - }); +export const readPwnSimpleLoanSimpleProposal = /*#__PURE__*/ createReadContract( + { abi: pwnSimpleLoanSimpleProposalAbi }, +) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `eventName` set to `"VaultPush"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"DOMAIN_SEPARATOR"` */ -export const watchPwnSimpleLoanVaultPushEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnSimpleLoanAbi, - eventName: "VaultPush", - }); +export const readPwnSimpleLoanSimpleProposalDomainSeparator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanSimpleProposalAbi, + functionName: 'DOMAIN_SEPARATOR', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanAbi}__ and `eventName` set to `"VaultPushFrom"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"MULTIPROPOSAL_DOMAIN_SEPARATOR"` */ -export const watchPwnSimpleLoanVaultPushFromEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnSimpleLoanAbi, - eventName: "VaultPushFrom", - }); +export const readPwnSimpleLoanSimpleProposalMultiproposalDomainSeparator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanSimpleProposalAbi, + functionName: 'MULTIPROPOSAL_DOMAIN_SEPARATOR', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"MULTIPROPOSAL_TYPEHASH"` */ -export const readPwnSimpleLoanDutchAuctionProposal = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanDutchAuctionProposalAbi, - }); +export const readPwnSimpleLoanSimpleProposalMultiproposalTypehash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanSimpleProposalAbi, + functionName: 'MULTIPROPOSAL_TYPEHASH', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"DOMAIN_SEPARATOR"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"PROPOSAL_TYPEHASH"` */ -export const readPwnSimpleLoanDutchAuctionProposalDomainSeparator = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanDutchAuctionProposalAbi, - functionName: "DOMAIN_SEPARATOR", - }); +export const readPwnSimpleLoanSimpleProposalProposalTypehash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanSimpleProposalAbi, + functionName: 'PROPOSAL_TYPEHASH', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"MULTIPROPOSAL_DOMAIN_SEPARATOR"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"VERSION"` */ -export const readPwnSimpleLoanDutchAuctionProposalMultiproposalDomainSeparator = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanDutchAuctionProposalAbi, - functionName: "MULTIPROPOSAL_DOMAIN_SEPARATOR", - }); +export const readPwnSimpleLoanSimpleProposalVersion = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanSimpleProposalAbi, + functionName: 'VERSION', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"MULTIPROPOSAL_TYPEHASH"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"config"` */ -export const readPwnSimpleLoanDutchAuctionProposalMultiproposalTypehash = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanDutchAuctionProposalAbi, - functionName: "MULTIPROPOSAL_TYPEHASH", - }); +export const readPwnSimpleLoanSimpleProposalConfig = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanSimpleProposalAbi, + functionName: 'config', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"PROPOSAL_TYPEHASH"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"decodeProposalData"` */ -export const readPwnSimpleLoanDutchAuctionProposalProposalTypehash = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanDutchAuctionProposalAbi, - functionName: "PROPOSAL_TYPEHASH", - }); +export const readPwnSimpleLoanSimpleProposalDecodeProposalData = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanSimpleProposalAbi, + functionName: 'decodeProposalData', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"VERSION"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"encodeProposalData"` */ -export const readPwnSimpleLoanDutchAuctionProposalVersion = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanDutchAuctionProposalAbi, - functionName: "VERSION", - }); +export const readPwnSimpleLoanSimpleProposalEncodeProposalData = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanSimpleProposalAbi, + functionName: 'encodeProposalData', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"config"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"getMultiproposalHash"` */ -export const readPwnSimpleLoanDutchAuctionProposalConfig = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanDutchAuctionProposalAbi, - functionName: "config", - }); +export const readPwnSimpleLoanSimpleProposalGetMultiproposalHash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanSimpleProposalAbi, + functionName: 'getMultiproposalHash', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"decodeProposalData"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"getProposalHash"` */ -export const readPwnSimpleLoanDutchAuctionProposalDecodeProposalData = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanDutchAuctionProposalAbi, - functionName: "decodeProposalData", - }); +export const readPwnSimpleLoanSimpleProposalGetProposalHash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanSimpleProposalAbi, + functionName: 'getProposalHash', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"encodeProposalData"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"hub"` */ -export const readPwnSimpleLoanDutchAuctionProposalEncodeProposalData = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanDutchAuctionProposalAbi, - functionName: "encodeProposalData", - }); +export const readPwnSimpleLoanSimpleProposalHub = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanSimpleProposalAbi, + functionName: 'hub', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"getCreditAmount"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"proposalsMade"` */ -export const readPwnSimpleLoanDutchAuctionProposalGetCreditAmount = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanDutchAuctionProposalAbi, - functionName: "getCreditAmount", - }); +export const readPwnSimpleLoanSimpleProposalProposalsMade = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanSimpleProposalAbi, + functionName: 'proposalsMade', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"getMultiproposalHash"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"revokedNonce"` */ -export const readPwnSimpleLoanDutchAuctionProposalGetMultiproposalHash = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanDutchAuctionProposalAbi, - functionName: "getMultiproposalHash", - }); +export const readPwnSimpleLoanSimpleProposalRevokedNonce = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanSimpleProposalAbi, + functionName: 'revokedNonce', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"getProposalHash"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"utilizedCredit"` */ -export const readPwnSimpleLoanDutchAuctionProposalGetProposalHash = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanDutchAuctionProposalAbi, - functionName: "getProposalHash", - }); +export const readPwnSimpleLoanSimpleProposalUtilizedCredit = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanSimpleProposalAbi, + functionName: 'utilizedCredit', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"hub"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ */ -export const readPwnSimpleLoanDutchAuctionProposalHub = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanDutchAuctionProposalAbi, - functionName: "hub", - }); +export const writePwnSimpleLoanSimpleProposal = + /*#__PURE__*/ createWriteContract({ abi: pwnSimpleLoanSimpleProposalAbi }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"proposalsMade"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"acceptProposal"` */ -export const readPwnSimpleLoanDutchAuctionProposalProposalsMade = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanDutchAuctionProposalAbi, - functionName: "proposalsMade", - }); +export const writePwnSimpleLoanSimpleProposalAcceptProposal = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanSimpleProposalAbi, + functionName: 'acceptProposal', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"revokedNonce"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"makeProposal"` */ -export const readPwnSimpleLoanDutchAuctionProposalRevokedNonce = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanDutchAuctionProposalAbi, - functionName: "revokedNonce", - }); +export const writePwnSimpleLoanSimpleProposalMakeProposal = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanSimpleProposalAbi, + functionName: 'makeProposal', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"utilizedCredit"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"revokeNonce"` */ -export const readPwnSimpleLoanDutchAuctionProposalUtilizedCredit = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanDutchAuctionProposalAbi, - functionName: "utilizedCredit", - }); +export const writePwnSimpleLoanSimpleProposalRevokeNonce = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanSimpleProposalAbi, + functionName: 'revokeNonce', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ */ -export const writePwnSimpleLoanDutchAuctionProposal = - /*#__PURE__*/ createWriteContract({ - abi: pwnSimpleLoanDutchAuctionProposalAbi, - }); +export const simulatePwnSimpleLoanSimpleProposal = + /*#__PURE__*/ createSimulateContract({ abi: pwnSimpleLoanSimpleProposalAbi }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"acceptProposal"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"acceptProposal"` */ -export const writePwnSimpleLoanDutchAuctionProposalAcceptProposal = - /*#__PURE__*/ createWriteContract({ - abi: pwnSimpleLoanDutchAuctionProposalAbi, - functionName: "acceptProposal", - }); +export const simulatePwnSimpleLoanSimpleProposalAcceptProposal = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanSimpleProposalAbi, + functionName: 'acceptProposal', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"makeProposal"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"makeProposal"` */ -export const writePwnSimpleLoanDutchAuctionProposalMakeProposal = - /*#__PURE__*/ createWriteContract({ - abi: pwnSimpleLoanDutchAuctionProposalAbi, - functionName: "makeProposal", - }); +export const simulatePwnSimpleLoanSimpleProposalMakeProposal = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanSimpleProposalAbi, + functionName: 'makeProposal', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"revokeNonce"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"revokeNonce"` */ -export const writePwnSimpleLoanDutchAuctionProposalRevokeNonce = - /*#__PURE__*/ createWriteContract({ - abi: pwnSimpleLoanDutchAuctionProposalAbi, - functionName: "revokeNonce", - }); +export const simulatePwnSimpleLoanSimpleProposalRevokeNonce = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanSimpleProposalAbi, + functionName: 'revokeNonce', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ */ -export const simulatePwnSimpleLoanDutchAuctionProposal = - /*#__PURE__*/ createSimulateContract({ - abi: pwnSimpleLoanDutchAuctionProposalAbi, - }); +export const watchPwnSimpleLoanSimpleProposalEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanSimpleProposalAbi, + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"acceptProposal"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `eventName` set to `"ProposalMade"` */ -export const simulatePwnSimpleLoanDutchAuctionProposalAcceptProposal = - /*#__PURE__*/ createSimulateContract({ - abi: pwnSimpleLoanDutchAuctionProposalAbi, - functionName: "acceptProposal", - }); +export const watchPwnSimpleLoanSimpleProposalProposalMadeEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanSimpleProposalAbi, + eventName: 'ProposalMade', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"makeProposal"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalHarnessAbi}__ */ -export const simulatePwnSimpleLoanDutchAuctionProposalMakeProposal = - /*#__PURE__*/ createSimulateContract({ - abi: pwnSimpleLoanDutchAuctionProposalAbi, - functionName: "makeProposal", - }); +export const readPwnSimpleLoanSimpleProposalHarness = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanSimpleProposalHarnessAbi, + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `functionName` set to `"revokeNonce"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalHarnessAbi}__ and `functionName` set to `"DOMAIN_SEPARATOR"` */ -export const simulatePwnSimpleLoanDutchAuctionProposalRevokeNonce = - /*#__PURE__*/ createSimulateContract({ - abi: pwnSimpleLoanDutchAuctionProposalAbi, - functionName: "revokeNonce", - }); +export const readPwnSimpleLoanSimpleProposalHarnessDomainSeparator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanSimpleProposalHarnessAbi, + functionName: 'DOMAIN_SEPARATOR', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalHarnessAbi}__ and `functionName` set to `"MULTIPROPOSAL_DOMAIN_SEPARATOR"` */ -export const watchPwnSimpleLoanDutchAuctionProposalEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnSimpleLoanDutchAuctionProposalAbi, - }); +export const readPwnSimpleLoanSimpleProposalHarnessMultiproposalDomainSeparator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanSimpleProposalHarnessAbi, + functionName: 'MULTIPROPOSAL_DOMAIN_SEPARATOR', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanDutchAuctionProposalAbi}__ and `eventName` set to `"ProposalMade"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalHarnessAbi}__ and `functionName` set to `"MULTIPROPOSAL_TYPEHASH"` */ -export const watchPwnSimpleLoanDutchAuctionProposalProposalMadeEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnSimpleLoanDutchAuctionProposalAbi, - eventName: "ProposalMade", - }); +export const readPwnSimpleLoanSimpleProposalHarnessMultiproposalTypehash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanSimpleProposalHarnessAbi, + functionName: 'MULTIPROPOSAL_TYPEHASH', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalHarnessAbi}__ and `functionName` set to `"PROPOSAL_TYPEHASH"` */ -export const readPwnSimpleLoanElasticChainlinkProposal = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalAbi, - }); +export const readPwnSimpleLoanSimpleProposalHarnessProposalTypehash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanSimpleProposalHarnessAbi, + functionName: 'PROPOSAL_TYPEHASH', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"DOMAIN_SEPARATOR"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalHarnessAbi}__ and `functionName` set to `"VERSION"` */ -export const readPwnSimpleLoanElasticChainlinkProposalDomainSeparator = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalAbi, - functionName: "DOMAIN_SEPARATOR", - }); +export const readPwnSimpleLoanSimpleProposalHarnessVersion = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanSimpleProposalHarnessAbi, + functionName: 'VERSION', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"LOAN_TO_VALUE_DENOMINATOR"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalHarnessAbi}__ and `functionName` set to `"config"` */ -export const readPwnSimpleLoanElasticChainlinkProposalLoanToValueDenominator = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalAbi, - functionName: "LOAN_TO_VALUE_DENOMINATOR", - }); +export const readPwnSimpleLoanSimpleProposalHarnessConfig = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanSimpleProposalHarnessAbi, + functionName: 'config', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"MAX_INTERMEDIARY_DENOMINATIONS"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalHarnessAbi}__ and `functionName` set to `"decodeProposalData"` */ -export const readPwnSimpleLoanElasticChainlinkProposalMaxIntermediaryDenominations = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalAbi, - functionName: "MAX_INTERMEDIARY_DENOMINATIONS", - }); +export const readPwnSimpleLoanSimpleProposalHarnessDecodeProposalData = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanSimpleProposalHarnessAbi, + functionName: 'decodeProposalData', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"MULTIPROPOSAL_DOMAIN_SEPARATOR"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalHarnessAbi}__ and `functionName` set to `"encodeProposalData"` */ -export const readPwnSimpleLoanElasticChainlinkProposalMultiproposalDomainSeparator = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalAbi, - functionName: "MULTIPROPOSAL_DOMAIN_SEPARATOR", - }); +export const readPwnSimpleLoanSimpleProposalHarnessEncodeProposalData = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanSimpleProposalHarnessAbi, + functionName: 'encodeProposalData', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"MULTIPROPOSAL_TYPEHASH"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalHarnessAbi}__ and `functionName` set to `"exposed_erc712EncodeProposal"` */ -export const readPwnSimpleLoanElasticChainlinkProposalMultiproposalTypehash = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalAbi, - functionName: "MULTIPROPOSAL_TYPEHASH", - }); +export const readPwnSimpleLoanSimpleProposalHarnessExposedErc712EncodeProposal = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanSimpleProposalHarnessAbi, + functionName: 'exposed_erc712EncodeProposal', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"PROPOSAL_TYPEHASH"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalHarnessAbi}__ and `functionName` set to `"getMultiproposalHash"` */ -export const readPwnSimpleLoanElasticChainlinkProposalProposalTypehash = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalAbi, - functionName: "PROPOSAL_TYPEHASH", - }); +export const readPwnSimpleLoanSimpleProposalHarnessGetMultiproposalHash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanSimpleProposalHarnessAbi, + functionName: 'getMultiproposalHash', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"VERSION"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalHarnessAbi}__ and `functionName` set to `"getProposalHash"` */ -export const readPwnSimpleLoanElasticChainlinkProposalVersion = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalAbi, - functionName: "VERSION", - }); +export const readPwnSimpleLoanSimpleProposalHarnessGetProposalHash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanSimpleProposalHarnessAbi, + functionName: 'getProposalHash', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"WETH"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalHarnessAbi}__ and `functionName` set to `"hub"` */ -export const readPwnSimpleLoanElasticChainlinkProposalWeth = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalAbi, - functionName: "WETH", - }); +export const readPwnSimpleLoanSimpleProposalHarnessHub = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanSimpleProposalHarnessAbi, + functionName: 'hub', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"chainlinkFeedRegistry"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalHarnessAbi}__ and `functionName` set to `"proposalsMade"` */ -export const readPwnSimpleLoanElasticChainlinkProposalChainlinkFeedRegistry = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalAbi, - functionName: "chainlinkFeedRegistry", - }); +export const readPwnSimpleLoanSimpleProposalHarnessProposalsMade = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanSimpleProposalHarnessAbi, + functionName: 'proposalsMade', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"config"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalHarnessAbi}__ and `functionName` set to `"revokedNonce"` */ -export const readPwnSimpleLoanElasticChainlinkProposalConfig = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalAbi, - functionName: "config", - }); +export const readPwnSimpleLoanSimpleProposalHarnessRevokedNonce = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanSimpleProposalHarnessAbi, + functionName: 'revokedNonce', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"decodeProposalData"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalHarnessAbi}__ and `functionName` set to `"utilizedCredit"` */ -export const readPwnSimpleLoanElasticChainlinkProposalDecodeProposalData = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalAbi, - functionName: "decodeProposalData", - }); +export const readPwnSimpleLoanSimpleProposalHarnessUtilizedCredit = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanSimpleProposalHarnessAbi, + functionName: 'utilizedCredit', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"encodeProposalData"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalHarnessAbi}__ */ -export const readPwnSimpleLoanElasticChainlinkProposalEncodeProposalData = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalAbi, - functionName: "encodeProposalData", - }); +export const writePwnSimpleLoanSimpleProposalHarness = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanSimpleProposalHarnessAbi, + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"getCollateralAmount"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalHarnessAbi}__ and `functionName` set to `"acceptProposal"` */ -export const readPwnSimpleLoanElasticChainlinkProposalGetCollateralAmount = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalAbi, - functionName: "getCollateralAmount", - }); +export const writePwnSimpleLoanSimpleProposalHarnessAcceptProposal = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanSimpleProposalHarnessAbi, + functionName: 'acceptProposal', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"getMultiproposalHash"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalHarnessAbi}__ and `functionName` set to `"makeProposal"` */ -export const readPwnSimpleLoanElasticChainlinkProposalGetMultiproposalHash = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalAbi, - functionName: "getMultiproposalHash", - }); +export const writePwnSimpleLoanSimpleProposalHarnessMakeProposal = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanSimpleProposalHarnessAbi, + functionName: 'makeProposal', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"getProposalHash"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalHarnessAbi}__ and `functionName` set to `"revokeNonce"` */ -export const readPwnSimpleLoanElasticChainlinkProposalGetProposalHash = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalAbi, - functionName: "getProposalHash", - }); +export const writePwnSimpleLoanSimpleProposalHarnessRevokeNonce = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanSimpleProposalHarnessAbi, + functionName: 'revokeNonce', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"hub"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalHarnessAbi}__ */ -export const readPwnSimpleLoanElasticChainlinkProposalHub = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalAbi, - functionName: "hub", - }); +export const simulatePwnSimpleLoanSimpleProposalHarness = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanSimpleProposalHarnessAbi, + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"l2SequencerUptimeFeed"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalHarnessAbi}__ and `functionName` set to `"acceptProposal"` */ -export const readPwnSimpleLoanElasticChainlinkProposalL2SequencerUptimeFeed = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalAbi, - functionName: "l2SequencerUptimeFeed", - }); +export const simulatePwnSimpleLoanSimpleProposalHarnessAcceptProposal = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanSimpleProposalHarnessAbi, + functionName: 'acceptProposal', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"proposalsMade"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalHarnessAbi}__ and `functionName` set to `"makeProposal"` */ -export const readPwnSimpleLoanElasticChainlinkProposalProposalsMade = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalAbi, - functionName: "proposalsMade", - }); +export const simulatePwnSimpleLoanSimpleProposalHarnessMakeProposal = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanSimpleProposalHarnessAbi, + functionName: 'makeProposal', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"revokedNonce"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalHarnessAbi}__ and `functionName` set to `"revokeNonce"` */ -export const readPwnSimpleLoanElasticChainlinkProposalRevokedNonce = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalAbi, - functionName: "revokedNonce", - }); +export const simulatePwnSimpleLoanSimpleProposalHarnessRevokeNonce = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanSimpleProposalHarnessAbi, + functionName: 'revokeNonce', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"utilizedCredit"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalHarnessAbi}__ */ -export const readPwnSimpleLoanElasticChainlinkProposalUtilizedCredit = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalAbi, - functionName: "utilizedCredit", - }); +export const watchPwnSimpleLoanSimpleProposalHarnessEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanSimpleProposalHarnessAbi, + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalHarnessAbi}__ and `eventName` set to `"ProposalMade"` */ -export const writePwnSimpleLoanElasticChainlinkProposal = - /*#__PURE__*/ createWriteContract({ - abi: pwnSimpleLoanElasticChainlinkProposalAbi, - }); +export const watchPwnSimpleLoanSimpleProposalHarnessProposalMadeEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanSimpleProposalHarnessAbi, + eventName: 'ProposalMade', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"acceptProposal"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalAbi}__ */ -export const writePwnSimpleLoanElasticChainlinkProposalAcceptProposal = - /*#__PURE__*/ createWriteContract({ - abi: pwnSimpleLoanElasticChainlinkProposalAbi, - functionName: "acceptProposal", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposal = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalAbi, + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"makeProposal"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalAbi}__ and `functionName` set to `"DOMAIN_SEPARATOR"` */ -export const writePwnSimpleLoanElasticChainlinkProposalMakeProposal = - /*#__PURE__*/ createWriteContract({ - abi: pwnSimpleLoanElasticChainlinkProposalAbi, - functionName: "makeProposal", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalDomainSeparator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalAbi, + functionName: 'DOMAIN_SEPARATOR', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"revokeNonce"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalAbi}__ and `functionName` set to `"LOAN_TO_VALUE_DENOMINATOR"` */ -export const writePwnSimpleLoanElasticChainlinkProposalRevokeNonce = - /*#__PURE__*/ createWriteContract({ - abi: pwnSimpleLoanElasticChainlinkProposalAbi, - functionName: "revokeNonce", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalLoanToValueDenominator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalAbi, + functionName: 'LOAN_TO_VALUE_DENOMINATOR', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalAbi}__ and `functionName` set to `"MAX_INTERMEDIARY_DENOMINATIONS"` */ -export const simulatePwnSimpleLoanElasticChainlinkProposal = - /*#__PURE__*/ createSimulateContract({ - abi: pwnSimpleLoanElasticChainlinkProposalAbi, - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalMaxIntermediaryDenominations = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalAbi, + functionName: 'MAX_INTERMEDIARY_DENOMINATIONS', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"acceptProposal"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalAbi}__ and `functionName` set to `"MULTIPROPOSAL_DOMAIN_SEPARATOR"` */ -export const simulatePwnSimpleLoanElasticChainlinkProposalAcceptProposal = - /*#__PURE__*/ createSimulateContract({ - abi: pwnSimpleLoanElasticChainlinkProposalAbi, - functionName: "acceptProposal", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalMultiproposalDomainSeparator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalAbi, + functionName: 'MULTIPROPOSAL_DOMAIN_SEPARATOR', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"makeProposal"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalAbi}__ and `functionName` set to `"MULTIPROPOSAL_TYPEHASH"` */ -export const simulatePwnSimpleLoanElasticChainlinkProposalMakeProposal = - /*#__PURE__*/ createSimulateContract({ - abi: pwnSimpleLoanElasticChainlinkProposalAbi, - functionName: "makeProposal", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalMultiproposalTypehash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalAbi, + functionName: 'MULTIPROPOSAL_TYPEHASH', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `functionName` set to `"revokeNonce"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalAbi}__ and `functionName` set to `"PROPOSAL_TYPEHASH"` */ -export const simulatePwnSimpleLoanElasticChainlinkProposalRevokeNonce = - /*#__PURE__*/ createSimulateContract({ - abi: pwnSimpleLoanElasticChainlinkProposalAbi, - functionName: "revokeNonce", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalProposalTypehash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalAbi, + functionName: 'PROPOSAL_TYPEHASH', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalAbi}__ and `functionName` set to `"VERSION"` */ -export const watchPwnSimpleLoanElasticChainlinkProposalEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnSimpleLoanElasticChainlinkProposalAbi, - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalVersion = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalAbi, + functionName: 'VERSION', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalAbi}__ and `eventName` set to `"ProposalMade"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalAbi}__ and `functionName` set to `"WETH"` */ -export const watchPwnSimpleLoanElasticChainlinkProposalProposalMadeEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnSimpleLoanElasticChainlinkProposalAbi, - eventName: "ProposalMade", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalWeth = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalAbi, + functionName: 'WETH', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalAbi}__ and `functionName` set to `"chainlinkFeedRegistry"` */ -export const readPwnSimpleLoanElasticChainlinkProposalHarness = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalChainlinkFeedRegistry = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalAbi, + functionName: 'chainlinkFeedRegistry', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"DOMAIN_SEPARATOR"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalAbi}__ and `functionName` set to `"chainlinkL2SequencerUptimeFeed"` */ -export const readPwnSimpleLoanElasticChainlinkProposalHarnessDomainSeparator = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, - functionName: "DOMAIN_SEPARATOR", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalChainlinkL2SequencerUptimeFeed = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalAbi, + functionName: 'chainlinkL2SequencerUptimeFeed', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"LOAN_TO_VALUE_DENOMINATOR"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalAbi}__ and `functionName` set to `"config"` */ -export const readPwnSimpleLoanElasticChainlinkProposalHarnessLoanToValueDenominator = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, - functionName: "LOAN_TO_VALUE_DENOMINATOR", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalConfig = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalAbi, + functionName: 'config', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"MAX_INTERMEDIARY_DENOMINATIONS"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalAbi}__ and `functionName` set to `"decodeProposalData"` */ -export const readPwnSimpleLoanElasticChainlinkProposalHarnessMaxIntermediaryDenominations = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, - functionName: "MAX_INTERMEDIARY_DENOMINATIONS", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalDecodeProposalData = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalAbi, + functionName: 'decodeProposalData', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"MULTIPROPOSAL_DOMAIN_SEPARATOR"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalAbi}__ and `functionName` set to `"encodeProposalData"` */ -export const readPwnSimpleLoanElasticChainlinkProposalHarnessMultiproposalDomainSeparator = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, - functionName: "MULTIPROPOSAL_DOMAIN_SEPARATOR", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalEncodeProposalData = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalAbi, + functionName: 'encodeProposalData', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"MULTIPROPOSAL_TYPEHASH"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalAbi}__ and `functionName` set to `"getCreditAmount"` */ -export const readPwnSimpleLoanElasticChainlinkProposalHarnessMultiproposalTypehash = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, - functionName: "MULTIPROPOSAL_TYPEHASH", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalGetCreditAmount = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalAbi, + functionName: 'getCreditAmount', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"PROPOSAL_TYPEHASH"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalAbi}__ and `functionName` set to `"getMultiproposalHash"` */ -export const readPwnSimpleLoanElasticChainlinkProposalHarnessProposalTypehash = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, - functionName: "PROPOSAL_TYPEHASH", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalGetMultiproposalHash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalAbi, + functionName: 'getMultiproposalHash', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"VERSION"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalAbi}__ and `functionName` set to `"getProposalHash"` */ -export const readPwnSimpleLoanElasticChainlinkProposalHarnessVersion = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, - functionName: "VERSION", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalGetProposalHash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalAbi, + functionName: 'getProposalHash', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"WETH"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalAbi}__ and `functionName` set to `"hub"` */ -export const readPwnSimpleLoanElasticChainlinkProposalHarnessWeth = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, - functionName: "WETH", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalHub = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalAbi, + functionName: 'hub', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"chainlinkFeedRegistry"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalAbi}__ and `functionName` set to `"proposalsMade"` */ -export const readPwnSimpleLoanElasticChainlinkProposalHarnessChainlinkFeedRegistry = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, - functionName: "chainlinkFeedRegistry", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalProposalsMade = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalAbi, + functionName: 'proposalsMade', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"config"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalAbi}__ and `functionName` set to `"revokedNonce"` */ -export const readPwnSimpleLoanElasticChainlinkProposalHarnessConfig = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, - functionName: "config", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalRevokedNonce = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalAbi, + functionName: 'revokedNonce', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"decodeProposalData"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalAbi}__ and `functionName` set to `"uniswapNFTPositionManager"` */ -export const readPwnSimpleLoanElasticChainlinkProposalHarnessDecodeProposalData = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, - functionName: "decodeProposalData", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalUniswapNftPositionManager = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalAbi, + functionName: 'uniswapNFTPositionManager', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"encodeProposalData"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalAbi}__ and `functionName` set to `"uniswapV3Factory"` */ -export const readPwnSimpleLoanElasticChainlinkProposalHarnessEncodeProposalData = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, - functionName: "encodeProposalData", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalUniswapV3Factory = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalAbi, + functionName: 'uniswapV3Factory', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"exposed_erc712EncodeProposal"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalAbi}__ and `functionName` set to `"utilizedCredit"` */ -export const readPwnSimpleLoanElasticChainlinkProposalHarnessExposedErc712EncodeProposal = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, - functionName: "exposed_erc712EncodeProposal", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalUtilizedCredit = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalAbi, + functionName: 'utilizedCredit', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"getCollateralAmount"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalAbi}__ */ -export const readPwnSimpleLoanElasticChainlinkProposalHarnessGetCollateralAmount = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, - functionName: "getCollateralAmount", - }); +export const writePwnSimpleLoanUniswapV3LpIndividualProposal = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalAbi, + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"getMultiproposalHash"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalAbi}__ and `functionName` set to `"acceptProposal"` */ -export const readPwnSimpleLoanElasticChainlinkProposalHarnessGetMultiproposalHash = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, - functionName: "getMultiproposalHash", - }); +export const writePwnSimpleLoanUniswapV3LpIndividualProposalAcceptProposal = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalAbi, + functionName: 'acceptProposal', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"getProposalHash"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalAbi}__ and `functionName` set to `"makeProposal"` */ -export const readPwnSimpleLoanElasticChainlinkProposalHarnessGetProposalHash = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, - functionName: "getProposalHash", - }); +export const writePwnSimpleLoanUniswapV3LpIndividualProposalMakeProposal = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalAbi, + functionName: 'makeProposal', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"hub"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalAbi}__ and `functionName` set to `"revokeNonce"` */ -export const readPwnSimpleLoanElasticChainlinkProposalHarnessHub = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, - functionName: "hub", - }); +export const writePwnSimpleLoanUniswapV3LpIndividualProposalRevokeNonce = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalAbi, + functionName: 'revokeNonce', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"l2SequencerUptimeFeed"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalAbi}__ */ -export const readPwnSimpleLoanElasticChainlinkProposalHarnessL2SequencerUptimeFeed = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, - functionName: "l2SequencerUptimeFeed", - }); +export const simulatePwnSimpleLoanUniswapV3LpIndividualProposal = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalAbi, + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"proposalsMade"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalAbi}__ and `functionName` set to `"acceptProposal"` */ -export const readPwnSimpleLoanElasticChainlinkProposalHarnessProposalsMade = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, - functionName: "proposalsMade", - }); +export const simulatePwnSimpleLoanUniswapV3LpIndividualProposalAcceptProposal = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalAbi, + functionName: 'acceptProposal', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"revokedNonce"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalAbi}__ and `functionName` set to `"makeProposal"` */ -export const readPwnSimpleLoanElasticChainlinkProposalHarnessRevokedNonce = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, - functionName: "revokedNonce", - }); +export const simulatePwnSimpleLoanUniswapV3LpIndividualProposalMakeProposal = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalAbi, + functionName: 'makeProposal', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"utilizedCredit"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalAbi}__ and `functionName` set to `"revokeNonce"` */ -export const readPwnSimpleLoanElasticChainlinkProposalHarnessUtilizedCredit = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, - functionName: "utilizedCredit", - }); +export const simulatePwnSimpleLoanUniswapV3LpIndividualProposalRevokeNonce = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalAbi, + functionName: 'revokeNonce', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalAbi}__ */ -export const writePwnSimpleLoanElasticChainlinkProposalHarness = - /*#__PURE__*/ createWriteContract({ - abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, - }); +export const watchPwnSimpleLoanUniswapV3LpIndividualProposalEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalAbi, + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"acceptProposal"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalAbi}__ and `eventName` set to `"ProposalMade"` */ -export const writePwnSimpleLoanElasticChainlinkProposalHarnessAcceptProposal = - /*#__PURE__*/ createWriteContract({ - abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, - functionName: "acceptProposal", - }); +export const watchPwnSimpleLoanUniswapV3LpIndividualProposalProposalMadeEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalAbi, + eventName: 'ProposalMade', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"makeProposal"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi}__ */ -export const writePwnSimpleLoanElasticChainlinkProposalHarnessMakeProposal = - /*#__PURE__*/ createWriteContract({ - abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, - functionName: "makeProposal", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalHarness = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi, + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"revokeNonce"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi}__ and `functionName` set to `"DOMAIN_SEPARATOR"` */ -export const writePwnSimpleLoanElasticChainlinkProposalHarnessRevokeNonce = - /*#__PURE__*/ createWriteContract({ - abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, - functionName: "revokeNonce", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalHarnessDomainSeparator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi, + functionName: 'DOMAIN_SEPARATOR', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi}__ and `functionName` set to `"LOAN_TO_VALUE_DENOMINATOR"` */ -export const simulatePwnSimpleLoanElasticChainlinkProposalHarness = - /*#__PURE__*/ createSimulateContract({ - abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalHarnessLoanToValueDenominator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi, + functionName: 'LOAN_TO_VALUE_DENOMINATOR', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"acceptProposal"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi}__ and `functionName` set to `"MAX_INTERMEDIARY_DENOMINATIONS"` */ -export const simulatePwnSimpleLoanElasticChainlinkProposalHarnessAcceptProposal = - /*#__PURE__*/ createSimulateContract({ - abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, - functionName: "acceptProposal", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalHarnessMaxIntermediaryDenominations = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi, + functionName: 'MAX_INTERMEDIARY_DENOMINATIONS', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"makeProposal"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi}__ and `functionName` set to `"MULTIPROPOSAL_DOMAIN_SEPARATOR"` */ -export const simulatePwnSimpleLoanElasticChainlinkProposalHarnessMakeProposal = - /*#__PURE__*/ createSimulateContract({ - abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, - functionName: "makeProposal", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalHarnessMultiproposalDomainSeparator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi, + functionName: 'MULTIPROPOSAL_DOMAIN_SEPARATOR', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `functionName` set to `"revokeNonce"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi}__ and `functionName` set to `"MULTIPROPOSAL_TYPEHASH"` */ -export const simulatePwnSimpleLoanElasticChainlinkProposalHarnessRevokeNonce = - /*#__PURE__*/ createSimulateContract({ - abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, - functionName: "revokeNonce", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalHarnessMultiproposalTypehash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi, + functionName: 'MULTIPROPOSAL_TYPEHASH', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi}__ and `functionName` set to `"PROPOSAL_TYPEHASH"` */ -export const watchPwnSimpleLoanElasticChainlinkProposalHarnessEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalHarnessProposalTypehash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi, + functionName: 'PROPOSAL_TYPEHASH', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanElasticChainlinkProposalHarnessAbi}__ and `eventName` set to `"ProposalMade"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi}__ and `functionName` set to `"VERSION"` */ -export const watchPwnSimpleLoanElasticChainlinkProposalHarnessProposalMadeEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnSimpleLoanElasticChainlinkProposalHarnessAbi, - eventName: "ProposalMade", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalHarnessVersion = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi, + functionName: 'VERSION', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi}__ and `functionName` set to `"WETH"` */ -export const readPwnSimpleLoanElasticProposal = - /*#__PURE__*/ createReadContract({ abi: pwnSimpleLoanElasticProposalAbi }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalHarnessWeth = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi, + functionName: 'WETH', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"CREDIT_PER_COLLATERAL_UNIT_DENOMINATOR"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi}__ and `functionName` set to `"chainlinkFeedRegistry"` */ -export const readPwnSimpleLoanElasticProposalCreditPerCollateralUnitDenominator = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticProposalAbi, - functionName: "CREDIT_PER_COLLATERAL_UNIT_DENOMINATOR", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalHarnessChainlinkFeedRegistry = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi, + functionName: 'chainlinkFeedRegistry', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"DOMAIN_SEPARATOR"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi}__ and `functionName` set to `"chainlinkL2SequencerUptimeFeed"` */ -export const readPwnSimpleLoanElasticProposalDomainSeparator = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticProposalAbi, - functionName: "DOMAIN_SEPARATOR", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalHarnessChainlinkL2SequencerUptimeFeed = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi, + functionName: 'chainlinkL2SequencerUptimeFeed', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"MULTIPROPOSAL_DOMAIN_SEPARATOR"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi}__ and `functionName` set to `"config"` */ -export const readPwnSimpleLoanElasticProposalMultiproposalDomainSeparator = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticProposalAbi, - functionName: "MULTIPROPOSAL_DOMAIN_SEPARATOR", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalHarnessConfig = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi, + functionName: 'config', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"MULTIPROPOSAL_TYPEHASH"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi}__ and `functionName` set to `"decodeProposalData"` */ -export const readPwnSimpleLoanElasticProposalMultiproposalTypehash = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticProposalAbi, - functionName: "MULTIPROPOSAL_TYPEHASH", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalHarnessDecodeProposalData = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi, + functionName: 'decodeProposalData', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"PROPOSAL_TYPEHASH"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi}__ and `functionName` set to `"encodeProposalData"` */ -export const readPwnSimpleLoanElasticProposalProposalTypehash = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticProposalAbi, - functionName: "PROPOSAL_TYPEHASH", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalHarnessEncodeProposalData = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi, + functionName: 'encodeProposalData', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"VERSION"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi}__ and `functionName` set to `"exposed_erc712EncodeProposal"` */ -export const readPwnSimpleLoanElasticProposalVersion = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticProposalAbi, - functionName: "VERSION", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalHarnessExposedErc712EncodeProposal = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi, + functionName: 'exposed_erc712EncodeProposal', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"config"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi}__ and `functionName` set to `"getCreditAmount"` */ -export const readPwnSimpleLoanElasticProposalConfig = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticProposalAbi, - functionName: "config", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalHarnessGetCreditAmount = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi, + functionName: 'getCreditAmount', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"decodeProposalData"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi}__ and `functionName` set to `"getMultiproposalHash"` */ -export const readPwnSimpleLoanElasticProposalDecodeProposalData = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticProposalAbi, - functionName: "decodeProposalData", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalHarnessGetMultiproposalHash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi, + functionName: 'getMultiproposalHash', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"encodeProposalData"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi}__ and `functionName` set to `"getProposalHash"` */ -export const readPwnSimpleLoanElasticProposalEncodeProposalData = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticProposalAbi, - functionName: "encodeProposalData", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalHarnessGetProposalHash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi, + functionName: 'getProposalHash', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"getCollateralAmount"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi}__ and `functionName` set to `"hub"` */ -export const readPwnSimpleLoanElasticProposalGetCollateralAmount = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticProposalAbi, - functionName: "getCollateralAmount", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalHarnessHub = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi, + functionName: 'hub', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"getMultiproposalHash"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi}__ and `functionName` set to `"proposalsMade"` */ -export const readPwnSimpleLoanElasticProposalGetMultiproposalHash = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticProposalAbi, - functionName: "getMultiproposalHash", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalHarnessProposalsMade = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi, + functionName: 'proposalsMade', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"getProposalHash"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi}__ and `functionName` set to `"revokedNonce"` */ -export const readPwnSimpleLoanElasticProposalGetProposalHash = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticProposalAbi, - functionName: "getProposalHash", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalHarnessRevokedNonce = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi, + functionName: 'revokedNonce', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"hub"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi}__ and `functionName` set to `"uniswapNFTPositionManager"` */ -export const readPwnSimpleLoanElasticProposalHub = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticProposalAbi, - functionName: "hub", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalHarnessUniswapNftPositionManager = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi, + functionName: 'uniswapNFTPositionManager', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"proposalsMade"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi}__ and `functionName` set to `"uniswapV3Factory"` */ -export const readPwnSimpleLoanElasticProposalProposalsMade = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticProposalAbi, - functionName: "proposalsMade", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalHarnessUniswapV3Factory = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi, + functionName: 'uniswapV3Factory', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"revokedNonce"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi}__ and `functionName` set to `"utilizedCredit"` */ -export const readPwnSimpleLoanElasticProposalRevokedNonce = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticProposalAbi, - functionName: "revokedNonce", - }); +export const readPwnSimpleLoanUniswapV3LpIndividualProposalHarnessUtilizedCredit = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi, + functionName: 'utilizedCredit', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"utilizedCredit"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi}__ */ -export const readPwnSimpleLoanElasticProposalUtilizedCredit = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanElasticProposalAbi, - functionName: "utilizedCredit", - }); +export const writePwnSimpleLoanUniswapV3LpIndividualProposalHarness = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi, + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi}__ and `functionName` set to `"acceptProposal"` */ -export const writePwnSimpleLoanElasticProposal = - /*#__PURE__*/ createWriteContract({ abi: pwnSimpleLoanElasticProposalAbi }); +export const writePwnSimpleLoanUniswapV3LpIndividualProposalHarnessAcceptProposal = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi, + functionName: 'acceptProposal', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"acceptProposal"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi}__ and `functionName` set to `"makeProposal"` */ -export const writePwnSimpleLoanElasticProposalAcceptProposal = - /*#__PURE__*/ createWriteContract({ - abi: pwnSimpleLoanElasticProposalAbi, - functionName: "acceptProposal", - }); +export const writePwnSimpleLoanUniswapV3LpIndividualProposalHarnessMakeProposal = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi, + functionName: 'makeProposal', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"makeProposal"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi}__ and `functionName` set to `"revokeNonce"` */ -export const writePwnSimpleLoanElasticProposalMakeProposal = - /*#__PURE__*/ createWriteContract({ - abi: pwnSimpleLoanElasticProposalAbi, - functionName: "makeProposal", - }); +export const writePwnSimpleLoanUniswapV3LpIndividualProposalHarnessRevokeNonce = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi, + functionName: 'revokeNonce', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"revokeNonce"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi}__ */ -export const writePwnSimpleLoanElasticProposalRevokeNonce = - /*#__PURE__*/ createWriteContract({ - abi: pwnSimpleLoanElasticProposalAbi, - functionName: "revokeNonce", - }); +export const simulatePwnSimpleLoanUniswapV3LpIndividualProposalHarness = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi, + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi}__ and `functionName` set to `"acceptProposal"` */ -export const simulatePwnSimpleLoanElasticProposal = - /*#__PURE__*/ createSimulateContract({ - abi: pwnSimpleLoanElasticProposalAbi, - }); +export const simulatePwnSimpleLoanUniswapV3LpIndividualProposalHarnessAcceptProposal = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi, + functionName: 'acceptProposal', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"acceptProposal"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi}__ and `functionName` set to `"makeProposal"` */ -export const simulatePwnSimpleLoanElasticProposalAcceptProposal = - /*#__PURE__*/ createSimulateContract({ - abi: pwnSimpleLoanElasticProposalAbi, - functionName: "acceptProposal", - }); +export const simulatePwnSimpleLoanUniswapV3LpIndividualProposalHarnessMakeProposal = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi, + functionName: 'makeProposal', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"makeProposal"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi}__ and `functionName` set to `"revokeNonce"` */ -export const simulatePwnSimpleLoanElasticProposalMakeProposal = - /*#__PURE__*/ createSimulateContract({ - abi: pwnSimpleLoanElasticProposalAbi, - functionName: "makeProposal", - }); +export const simulatePwnSimpleLoanUniswapV3LpIndividualProposalHarnessRevokeNonce = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi, + functionName: 'revokeNonce', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `functionName` set to `"revokeNonce"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi}__ */ -export const simulatePwnSimpleLoanElasticProposalRevokeNonce = - /*#__PURE__*/ createSimulateContract({ - abi: pwnSimpleLoanElasticProposalAbi, - functionName: "revokeNonce", - }); +export const watchPwnSimpleLoanUniswapV3LpIndividualProposalHarnessEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi, + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi}__ and `eventName` set to `"ProposalMade"` */ -export const watchPwnSimpleLoanElasticProposalEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnSimpleLoanElasticProposalAbi, - }); +export const watchPwnSimpleLoanUniswapV3LpIndividualProposalHarnessProposalMadeEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanUniswapV3LpIndividualProposalHarnessAbi, + eventName: 'ProposalMade', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanElasticProposalAbi}__ and `eventName` set to `"ProposalMade"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalAbi}__ */ -export const watchPwnSimpleLoanElasticProposalProposalMadeEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnSimpleLoanElasticProposalAbi, - eventName: "ProposalMade", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposal = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalAbi, + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalAbi}__ and `functionName` set to `"DOMAIN_SEPARATOR"` */ -export const readPwnSimpleLoanListProposal = /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanListProposalAbi, -}); +export const readPwnSimpleLoanUniswapV3LpSetProposalDomainSeparator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalAbi, + functionName: 'DOMAIN_SEPARATOR', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"DOMAIN_SEPARATOR"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalAbi}__ and `functionName` set to `"LOAN_TO_VALUE_DENOMINATOR"` */ -export const readPwnSimpleLoanListProposalDomainSeparator = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanListProposalAbi, - functionName: "DOMAIN_SEPARATOR", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalLoanToValueDenominator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalAbi, + functionName: 'LOAN_TO_VALUE_DENOMINATOR', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"MULTIPROPOSAL_DOMAIN_SEPARATOR"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalAbi}__ and `functionName` set to `"MAX_INTERMEDIARY_DENOMINATIONS"` */ -export const readPwnSimpleLoanListProposalMultiproposalDomainSeparator = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanListProposalAbi, - functionName: "MULTIPROPOSAL_DOMAIN_SEPARATOR", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalMaxIntermediaryDenominations = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalAbi, + functionName: 'MAX_INTERMEDIARY_DENOMINATIONS', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"MULTIPROPOSAL_TYPEHASH"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalAbi}__ and `functionName` set to `"MULTIPROPOSAL_DOMAIN_SEPARATOR"` */ -export const readPwnSimpleLoanListProposalMultiproposalTypehash = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanListProposalAbi, - functionName: "MULTIPROPOSAL_TYPEHASH", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalMultiproposalDomainSeparator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalAbi, + functionName: 'MULTIPROPOSAL_DOMAIN_SEPARATOR', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"PROPOSAL_TYPEHASH"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalAbi}__ and `functionName` set to `"MULTIPROPOSAL_TYPEHASH"` */ -export const readPwnSimpleLoanListProposalProposalTypehash = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanListProposalAbi, - functionName: "PROPOSAL_TYPEHASH", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalMultiproposalTypehash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalAbi, + functionName: 'MULTIPROPOSAL_TYPEHASH', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"VERSION"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalAbi}__ and `functionName` set to `"PROPOSAL_TYPEHASH"` */ -export const readPwnSimpleLoanListProposalVersion = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanListProposalAbi, - functionName: "VERSION", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalProposalTypehash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalAbi, + functionName: 'PROPOSAL_TYPEHASH', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"config"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalAbi}__ and `functionName` set to `"VERSION"` */ -export const readPwnSimpleLoanListProposalConfig = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanListProposalAbi, - functionName: "config", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalVersion = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalAbi, + functionName: 'VERSION', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"decodeProposalData"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalAbi}__ and `functionName` set to `"WETH"` */ -export const readPwnSimpleLoanListProposalDecodeProposalData = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanListProposalAbi, - functionName: "decodeProposalData", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalWeth = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalAbi, + functionName: 'WETH', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"encodeProposalData"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalAbi}__ and `functionName` set to `"chainlinkFeedRegistry"` */ -export const readPwnSimpleLoanListProposalEncodeProposalData = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanListProposalAbi, - functionName: "encodeProposalData", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalChainlinkFeedRegistry = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalAbi, + functionName: 'chainlinkFeedRegistry', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"getMultiproposalHash"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalAbi}__ and `functionName` set to `"chainlinkL2SequencerUptimeFeed"` */ -export const readPwnSimpleLoanListProposalGetMultiproposalHash = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanListProposalAbi, - functionName: "getMultiproposalHash", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalChainlinkL2SequencerUptimeFeed = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalAbi, + functionName: 'chainlinkL2SequencerUptimeFeed', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"getProposalHash"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalAbi}__ and `functionName` set to `"config"` */ -export const readPwnSimpleLoanListProposalGetProposalHash = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanListProposalAbi, - functionName: "getProposalHash", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalConfig = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalAbi, + functionName: 'config', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"hub"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalAbi}__ and `functionName` set to `"decodeProposalData"` */ -export const readPwnSimpleLoanListProposalHub = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanListProposalAbi, - functionName: "hub", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalDecodeProposalData = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalAbi, + functionName: 'decodeProposalData', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"proposalsMade"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalAbi}__ and `functionName` set to `"encodeProposalData"` */ -export const readPwnSimpleLoanListProposalProposalsMade = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanListProposalAbi, - functionName: "proposalsMade", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalEncodeProposalData = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalAbi, + functionName: 'encodeProposalData', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"revokedNonce"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalAbi}__ and `functionName` set to `"getCreditAmount"` */ -export const readPwnSimpleLoanListProposalRevokedNonce = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanListProposalAbi, - functionName: "revokedNonce", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalGetCreditAmount = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalAbi, + functionName: 'getCreditAmount', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"utilizedCredit"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalAbi}__ and `functionName` set to `"getMultiproposalHash"` */ -export const readPwnSimpleLoanListProposalUtilizedCredit = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanListProposalAbi, - functionName: "utilizedCredit", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalGetMultiproposalHash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalAbi, + functionName: 'getMultiproposalHash', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalAbi}__ and `functionName` set to `"getProposalHash"` */ -export const writePwnSimpleLoanListProposal = /*#__PURE__*/ createWriteContract( - { abi: pwnSimpleLoanListProposalAbi }, -); +export const readPwnSimpleLoanUniswapV3LpSetProposalGetProposalHash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalAbi, + functionName: 'getProposalHash', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"acceptProposal"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalAbi}__ and `functionName` set to `"hub"` */ -export const writePwnSimpleLoanListProposalAcceptProposal = - /*#__PURE__*/ createWriteContract({ - abi: pwnSimpleLoanListProposalAbi, - functionName: "acceptProposal", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalHub = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalAbi, + functionName: 'hub', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"makeProposal"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalAbi}__ and `functionName` set to `"proposalsMade"` */ -export const writePwnSimpleLoanListProposalMakeProposal = - /*#__PURE__*/ createWriteContract({ - abi: pwnSimpleLoanListProposalAbi, - functionName: "makeProposal", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalProposalsMade = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalAbi, + functionName: 'proposalsMade', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"revokeNonce"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalAbi}__ and `functionName` set to `"revokedNonce"` */ -export const writePwnSimpleLoanListProposalRevokeNonce = - /*#__PURE__*/ createWriteContract({ - abi: pwnSimpleLoanListProposalAbi, - functionName: "revokeNonce", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalRevokedNonce = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalAbi, + functionName: 'revokedNonce', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalAbi}__ and `functionName` set to `"uniswapNFTPositionManager"` */ -export const simulatePwnSimpleLoanListProposal = - /*#__PURE__*/ createSimulateContract({ abi: pwnSimpleLoanListProposalAbi }); +export const readPwnSimpleLoanUniswapV3LpSetProposalUniswapNftPositionManager = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalAbi, + functionName: 'uniswapNFTPositionManager', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"acceptProposal"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalAbi}__ and `functionName` set to `"uniswapV3Factory"` */ -export const simulatePwnSimpleLoanListProposalAcceptProposal = - /*#__PURE__*/ createSimulateContract({ - abi: pwnSimpleLoanListProposalAbi, - functionName: "acceptProposal", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalUniswapV3Factory = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalAbi, + functionName: 'uniswapV3Factory', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"makeProposal"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalAbi}__ and `functionName` set to `"utilizedCredit"` */ -export const simulatePwnSimpleLoanListProposalMakeProposal = - /*#__PURE__*/ createSimulateContract({ - abi: pwnSimpleLoanListProposalAbi, - functionName: "makeProposal", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalUtilizedCredit = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalAbi, + functionName: 'utilizedCredit', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `functionName` set to `"revokeNonce"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalAbi}__ */ -export const simulatePwnSimpleLoanListProposalRevokeNonce = - /*#__PURE__*/ createSimulateContract({ - abi: pwnSimpleLoanListProposalAbi, - functionName: "revokeNonce", - }); +export const writePwnSimpleLoanUniswapV3LpSetProposal = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalAbi, + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalAbi}__ and `functionName` set to `"acceptProposal"` */ -export const watchPwnSimpleLoanListProposalEvent = - /*#__PURE__*/ createWatchContractEvent({ abi: pwnSimpleLoanListProposalAbi }); +export const writePwnSimpleLoanUniswapV3LpSetProposalAcceptProposal = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalAbi, + functionName: 'acceptProposal', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanListProposalAbi}__ and `eventName` set to `"ProposalMade"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalAbi}__ and `functionName` set to `"makeProposal"` */ -export const watchPwnSimpleLoanListProposalProposalMadeEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnSimpleLoanListProposalAbi, - eventName: "ProposalMade", - }); +export const writePwnSimpleLoanUniswapV3LpSetProposalMakeProposal = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalAbi, + functionName: 'makeProposal', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanProposalAbi}__ + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalAbi}__ and `functionName` set to `"revokeNonce"` */ -export const readPwnSimpleLoanProposal = /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanProposalAbi, -}); +export const writePwnSimpleLoanUniswapV3LpSetProposalRevokeNonce = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalAbi, + functionName: 'revokeNonce', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanProposalAbi}__ and `functionName` set to `"DOMAIN_SEPARATOR"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalAbi}__ */ -export const readPwnSimpleLoanProposalDomainSeparator = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanProposalAbi, - functionName: "DOMAIN_SEPARATOR", - }); +export const simulatePwnSimpleLoanUniswapV3LpSetProposal = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalAbi, + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanProposalAbi}__ and `functionName` set to `"MULTIPROPOSAL_DOMAIN_SEPARATOR"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalAbi}__ and `functionName` set to `"acceptProposal"` */ -export const readPwnSimpleLoanProposalMultiproposalDomainSeparator = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanProposalAbi, - functionName: "MULTIPROPOSAL_DOMAIN_SEPARATOR", - }); +export const simulatePwnSimpleLoanUniswapV3LpSetProposalAcceptProposal = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalAbi, + functionName: 'acceptProposal', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanProposalAbi}__ and `functionName` set to `"MULTIPROPOSAL_TYPEHASH"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalAbi}__ and `functionName` set to `"makeProposal"` */ -export const readPwnSimpleLoanProposalMultiproposalTypehash = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanProposalAbi, - functionName: "MULTIPROPOSAL_TYPEHASH", - }); +export const simulatePwnSimpleLoanUniswapV3LpSetProposalMakeProposal = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalAbi, + functionName: 'makeProposal', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanProposalAbi}__ and `functionName` set to `"config"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalAbi}__ and `functionName` set to `"revokeNonce"` */ -export const readPwnSimpleLoanProposalConfig = /*#__PURE__*/ createReadContract( - { abi: pwnSimpleLoanProposalAbi, functionName: "config" }, -); +export const simulatePwnSimpleLoanUniswapV3LpSetProposalRevokeNonce = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalAbi, + functionName: 'revokeNonce', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanProposalAbi}__ and `functionName` set to `"getMultiproposalHash"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalAbi}__ */ -export const readPwnSimpleLoanProposalGetMultiproposalHash = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanProposalAbi, - functionName: "getMultiproposalHash", - }); +export const watchPwnSimpleLoanUniswapV3LpSetProposalEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanUniswapV3LpSetProposalAbi, + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanProposalAbi}__ and `functionName` set to `"hub"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalAbi}__ and `eventName` set to `"ProposalMade"` */ -export const readPwnSimpleLoanProposalHub = /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanProposalAbi, - functionName: "hub", -}); +export const watchPwnSimpleLoanUniswapV3LpSetProposalProposalMadeEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanUniswapV3LpSetProposalAbi, + eventName: 'ProposalMade', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanProposalAbi}__ and `functionName` set to `"proposalsMade"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi}__ */ -export const readPwnSimpleLoanProposalProposalsMade = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanProposalAbi, - functionName: "proposalsMade", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalHarness = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi, + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanProposalAbi}__ and `functionName` set to `"revokedNonce"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi}__ and `functionName` set to `"DOMAIN_SEPARATOR"` */ -export const readPwnSimpleLoanProposalRevokedNonce = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanProposalAbi, - functionName: "revokedNonce", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalHarnessDomainSeparator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi, + functionName: 'DOMAIN_SEPARATOR', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanProposalAbi}__ and `functionName` set to `"utilizedCredit"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi}__ and `functionName` set to `"LOAN_TO_VALUE_DENOMINATOR"` */ -export const readPwnSimpleLoanProposalUtilizedCredit = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanProposalAbi, - functionName: "utilizedCredit", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalHarnessLoanToValueDenominator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi, + functionName: 'LOAN_TO_VALUE_DENOMINATOR', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanProposalAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi}__ and `functionName` set to `"MAX_INTERMEDIARY_DENOMINATIONS"` */ -export const writePwnSimpleLoanProposal = /*#__PURE__*/ createWriteContract({ - abi: pwnSimpleLoanProposalAbi, -}); +export const readPwnSimpleLoanUniswapV3LpSetProposalHarnessMaxIntermediaryDenominations = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi, + functionName: 'MAX_INTERMEDIARY_DENOMINATIONS', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanProposalAbi}__ and `functionName` set to `"acceptProposal"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi}__ and `functionName` set to `"MULTIPROPOSAL_DOMAIN_SEPARATOR"` */ -export const writePwnSimpleLoanProposalAcceptProposal = - /*#__PURE__*/ createWriteContract({ - abi: pwnSimpleLoanProposalAbi, - functionName: "acceptProposal", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalHarnessMultiproposalDomainSeparator = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi, + functionName: 'MULTIPROPOSAL_DOMAIN_SEPARATOR', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanProposalAbi}__ and `functionName` set to `"revokeNonce"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi}__ and `functionName` set to `"MULTIPROPOSAL_TYPEHASH"` */ -export const writePwnSimpleLoanProposalRevokeNonce = - /*#__PURE__*/ createWriteContract({ - abi: pwnSimpleLoanProposalAbi, - functionName: "revokeNonce", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalHarnessMultiproposalTypehash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi, + functionName: 'MULTIPROPOSAL_TYPEHASH', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanProposalAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi}__ and `functionName` set to `"PROPOSAL_TYPEHASH"` */ -export const simulatePwnSimpleLoanProposal = - /*#__PURE__*/ createSimulateContract({ abi: pwnSimpleLoanProposalAbi }); +export const readPwnSimpleLoanUniswapV3LpSetProposalHarnessProposalTypehash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi, + functionName: 'PROPOSAL_TYPEHASH', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanProposalAbi}__ and `functionName` set to `"acceptProposal"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi}__ and `functionName` set to `"VERSION"` */ -export const simulatePwnSimpleLoanProposalAcceptProposal = - /*#__PURE__*/ createSimulateContract({ - abi: pwnSimpleLoanProposalAbi, - functionName: "acceptProposal", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalHarnessVersion = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi, + functionName: 'VERSION', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanProposalAbi}__ and `functionName` set to `"revokeNonce"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi}__ and `functionName` set to `"WETH"` */ -export const simulatePwnSimpleLoanProposalRevokeNonce = - /*#__PURE__*/ createSimulateContract({ - abi: pwnSimpleLoanProposalAbi, - functionName: "revokeNonce", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalHarnessWeth = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi, + functionName: 'WETH', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi}__ and `functionName` set to `"chainlinkFeedRegistry"` */ -export const readPwnSimpleLoanSimpleProposal = /*#__PURE__*/ createReadContract( - { abi: pwnSimpleLoanSimpleProposalAbi }, -); +export const readPwnSimpleLoanUniswapV3LpSetProposalHarnessChainlinkFeedRegistry = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi, + functionName: 'chainlinkFeedRegistry', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"DOMAIN_SEPARATOR"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi}__ and `functionName` set to `"chainlinkL2SequencerUptimeFeed"` */ -export const readPwnSimpleLoanSimpleProposalDomainSeparator = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanSimpleProposalAbi, - functionName: "DOMAIN_SEPARATOR", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalHarnessChainlinkL2SequencerUptimeFeed = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi, + functionName: 'chainlinkL2SequencerUptimeFeed', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"MULTIPROPOSAL_DOMAIN_SEPARATOR"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi}__ and `functionName` set to `"config"` */ -export const readPwnSimpleLoanSimpleProposalMultiproposalDomainSeparator = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanSimpleProposalAbi, - functionName: "MULTIPROPOSAL_DOMAIN_SEPARATOR", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalHarnessConfig = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi, + functionName: 'config', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"MULTIPROPOSAL_TYPEHASH"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi}__ and `functionName` set to `"decodeProposalData"` */ -export const readPwnSimpleLoanSimpleProposalMultiproposalTypehash = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanSimpleProposalAbi, - functionName: "MULTIPROPOSAL_TYPEHASH", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalHarnessDecodeProposalData = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi, + functionName: 'decodeProposalData', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"PROPOSAL_TYPEHASH"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi}__ and `functionName` set to `"encodeProposalData"` */ -export const readPwnSimpleLoanSimpleProposalProposalTypehash = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanSimpleProposalAbi, - functionName: "PROPOSAL_TYPEHASH", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalHarnessEncodeProposalData = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi, + functionName: 'encodeProposalData', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"VERSION"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi}__ and `functionName` set to `"exposed_erc712EncodeProposal"` */ -export const readPwnSimpleLoanSimpleProposalVersion = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanSimpleProposalAbi, - functionName: "VERSION", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalHarnessExposedErc712EncodeProposal = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi, + functionName: 'exposed_erc712EncodeProposal', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"config"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi}__ and `functionName` set to `"getCreditAmount"` */ -export const readPwnSimpleLoanSimpleProposalConfig = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanSimpleProposalAbi, - functionName: "config", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalHarnessGetCreditAmount = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi, + functionName: 'getCreditAmount', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"decodeProposalData"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi}__ and `functionName` set to `"getMultiproposalHash"` */ -export const readPwnSimpleLoanSimpleProposalDecodeProposalData = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanSimpleProposalAbi, - functionName: "decodeProposalData", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalHarnessGetMultiproposalHash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi, + functionName: 'getMultiproposalHash', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"encodeProposalData"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi}__ and `functionName` set to `"getProposalHash"` */ -export const readPwnSimpleLoanSimpleProposalEncodeProposalData = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanSimpleProposalAbi, - functionName: "encodeProposalData", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalHarnessGetProposalHash = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi, + functionName: 'getProposalHash', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"getMultiproposalHash"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi}__ and `functionName` set to `"hub"` */ -export const readPwnSimpleLoanSimpleProposalGetMultiproposalHash = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanSimpleProposalAbi, - functionName: "getMultiproposalHash", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalHarnessHub = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi, + functionName: 'hub', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"getProposalHash"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi}__ and `functionName` set to `"proposalsMade"` */ -export const readPwnSimpleLoanSimpleProposalGetProposalHash = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanSimpleProposalAbi, - functionName: "getProposalHash", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalHarnessProposalsMade = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi, + functionName: 'proposalsMade', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"hub"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi}__ and `functionName` set to `"revokedNonce"` */ -export const readPwnSimpleLoanSimpleProposalHub = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanSimpleProposalAbi, - functionName: "hub", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalHarnessRevokedNonce = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi, + functionName: 'revokedNonce', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"proposalsMade"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi}__ and `functionName` set to `"uniswapNFTPositionManager"` */ -export const readPwnSimpleLoanSimpleProposalProposalsMade = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanSimpleProposalAbi, - functionName: "proposalsMade", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalHarnessUniswapNftPositionManager = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi, + functionName: 'uniswapNFTPositionManager', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"revokedNonce"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi}__ and `functionName` set to `"uniswapV3Factory"` */ -export const readPwnSimpleLoanSimpleProposalRevokedNonce = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanSimpleProposalAbi, - functionName: "revokedNonce", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalHarnessUniswapV3Factory = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi, + functionName: 'uniswapV3Factory', + }) /** - * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"utilizedCredit"` + * Wraps __{@link readContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi}__ and `functionName` set to `"utilizedCredit"` */ -export const readPwnSimpleLoanSimpleProposalUtilizedCredit = - /*#__PURE__*/ createReadContract({ - abi: pwnSimpleLoanSimpleProposalAbi, - functionName: "utilizedCredit", - }); +export const readPwnSimpleLoanUniswapV3LpSetProposalHarnessUtilizedCredit = + /*#__PURE__*/ createReadContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi, + functionName: 'utilizedCredit', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi}__ */ -export const writePwnSimpleLoanSimpleProposal = - /*#__PURE__*/ createWriteContract({ abi: pwnSimpleLoanSimpleProposalAbi }); +export const writePwnSimpleLoanUniswapV3LpSetProposalHarness = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi, + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"acceptProposal"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi}__ and `functionName` set to `"acceptProposal"` */ -export const writePwnSimpleLoanSimpleProposalAcceptProposal = - /*#__PURE__*/ createWriteContract({ - abi: pwnSimpleLoanSimpleProposalAbi, - functionName: "acceptProposal", - }); +export const writePwnSimpleLoanUniswapV3LpSetProposalHarnessAcceptProposal = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi, + functionName: 'acceptProposal', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"makeProposal"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi}__ and `functionName` set to `"makeProposal"` */ -export const writePwnSimpleLoanSimpleProposalMakeProposal = - /*#__PURE__*/ createWriteContract({ - abi: pwnSimpleLoanSimpleProposalAbi, - functionName: "makeProposal", - }); +export const writePwnSimpleLoanUniswapV3LpSetProposalHarnessMakeProposal = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi, + functionName: 'makeProposal', + }) /** - * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"revokeNonce"` + * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi}__ and `functionName` set to `"revokeNonce"` */ -export const writePwnSimpleLoanSimpleProposalRevokeNonce = - /*#__PURE__*/ createWriteContract({ - abi: pwnSimpleLoanSimpleProposalAbi, - functionName: "revokeNonce", - }); +export const writePwnSimpleLoanUniswapV3LpSetProposalHarnessRevokeNonce = + /*#__PURE__*/ createWriteContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi, + functionName: 'revokeNonce', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi}__ */ -export const simulatePwnSimpleLoanSimpleProposal = - /*#__PURE__*/ createSimulateContract({ abi: pwnSimpleLoanSimpleProposalAbi }); +export const simulatePwnSimpleLoanUniswapV3LpSetProposalHarness = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi, + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"acceptProposal"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi}__ and `functionName` set to `"acceptProposal"` */ -export const simulatePwnSimpleLoanSimpleProposalAcceptProposal = - /*#__PURE__*/ createSimulateContract({ - abi: pwnSimpleLoanSimpleProposalAbi, - functionName: "acceptProposal", - }); +export const simulatePwnSimpleLoanUniswapV3LpSetProposalHarnessAcceptProposal = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi, + functionName: 'acceptProposal', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"makeProposal"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi}__ and `functionName` set to `"makeProposal"` */ -export const simulatePwnSimpleLoanSimpleProposalMakeProposal = - /*#__PURE__*/ createSimulateContract({ - abi: pwnSimpleLoanSimpleProposalAbi, - functionName: "makeProposal", - }); +export const simulatePwnSimpleLoanUniswapV3LpSetProposalHarnessMakeProposal = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi, + functionName: 'makeProposal', + }) /** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `functionName` set to `"revokeNonce"` + * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi}__ and `functionName` set to `"revokeNonce"` */ -export const simulatePwnSimpleLoanSimpleProposalRevokeNonce = - /*#__PURE__*/ createSimulateContract({ - abi: pwnSimpleLoanSimpleProposalAbi, - functionName: "revokeNonce", - }); +export const simulatePwnSimpleLoanUniswapV3LpSetProposalHarnessRevokeNonce = + /*#__PURE__*/ createSimulateContract({ + abi: pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi, + functionName: 'revokeNonce', + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi}__ */ -export const watchPwnSimpleLoanSimpleProposalEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnSimpleLoanSimpleProposalAbi, - }); +export const watchPwnSimpleLoanUniswapV3LpSetProposalHarnessEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi, + }) /** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanSimpleProposalAbi}__ and `eventName` set to `"ProposalMade"` + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi}__ and `eventName` set to `"ProposalMade"` */ -export const watchPwnSimpleLoanSimpleProposalProposalMadeEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnSimpleLoanSimpleProposalAbi, - eventName: "ProposalMade", - }); +export const watchPwnSimpleLoanUniswapV3LpSetProposalHarnessProposalMadeEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnSimpleLoanUniswapV3LpSetProposalHarnessAbi, + eventName: 'ProposalMade', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link pwnUtilizedCreditAbi}__ */ export const readPwnUtilizedCredit = /*#__PURE__*/ createReadContract({ - abi: pwnUtilizedCreditAbi, -}); + abi: pwnUtilizedCreditAbi, +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link pwnUtilizedCreditAbi}__ and `functionName` set to `"accessTag"` */ export const readPwnUtilizedCreditAccessTag = /*#__PURE__*/ createReadContract({ - abi: pwnUtilizedCreditAbi, - functionName: "accessTag", -}); + abi: pwnUtilizedCreditAbi, + functionName: 'accessTag', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link pwnUtilizedCreditAbi}__ and `functionName` set to `"hub"` */ export const readPwnUtilizedCreditHub = /*#__PURE__*/ createReadContract({ - abi: pwnUtilizedCreditAbi, - functionName: "hub", -}); + abi: pwnUtilizedCreditAbi, + functionName: 'hub', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link pwnUtilizedCreditAbi}__ and `functionName` set to `"utilizedCredit"` */ export const readPwnUtilizedCreditUtilizedCredit = - /*#__PURE__*/ createReadContract({ - abi: pwnUtilizedCreditAbi, - functionName: "utilizedCredit", - }); + /*#__PURE__*/ createReadContract({ + abi: pwnUtilizedCreditAbi, + functionName: 'utilizedCredit', + }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnUtilizedCreditAbi}__ */ export const writePwnUtilizedCredit = /*#__PURE__*/ createWriteContract({ - abi: pwnUtilizedCreditAbi, -}); + abi: pwnUtilizedCreditAbi, +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link pwnUtilizedCreditAbi}__ and `functionName` set to `"utilizeCredit"` */ export const writePwnUtilizedCreditUtilizeCredit = - /*#__PURE__*/ createWriteContract({ - abi: pwnUtilizedCreditAbi, - functionName: "utilizeCredit", - }); + /*#__PURE__*/ createWriteContract({ + abi: pwnUtilizedCreditAbi, + functionName: 'utilizeCredit', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnUtilizedCreditAbi}__ */ export const simulatePwnUtilizedCredit = /*#__PURE__*/ createSimulateContract({ - abi: pwnUtilizedCreditAbi, -}); + abi: pwnUtilizedCreditAbi, +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link pwnUtilizedCreditAbi}__ and `functionName` set to `"utilizeCredit"` */ export const simulatePwnUtilizedCreditUtilizeCredit = - /*#__PURE__*/ createSimulateContract({ - abi: pwnUtilizedCreditAbi, - functionName: "utilizeCredit", - }); + /*#__PURE__*/ createSimulateContract({ + abi: pwnUtilizedCreditAbi, + functionName: 'utilizeCredit', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link pwnVaultAbi}__ */ export const readPwnVault = /*#__PURE__*/ createReadContract({ - abi: pwnVaultAbi, -}); + abi: pwnVaultAbi, +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link pwnVaultAbi}__ and `functionName` set to `"onERC1155BatchReceived"` */ export const readPwnVaultOnErc1155BatchReceived = - /*#__PURE__*/ createReadContract({ - abi: pwnVaultAbi, - functionName: "onERC1155BatchReceived", - }); + /*#__PURE__*/ createReadContract({ + abi: pwnVaultAbi, + functionName: 'onERC1155BatchReceived', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link pwnVaultAbi}__ and `functionName` set to `"onERC1155Received"` */ export const readPwnVaultOnErc1155Received = /*#__PURE__*/ createReadContract({ - abi: pwnVaultAbi, - functionName: "onERC1155Received", -}); + abi: pwnVaultAbi, + functionName: 'onERC1155Received', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link pwnVaultAbi}__ and `functionName` set to `"onERC721Received"` */ export const readPwnVaultOnErc721Received = /*#__PURE__*/ createReadContract({ - abi: pwnVaultAbi, - functionName: "onERC721Received", -}); + abi: pwnVaultAbi, + functionName: 'onERC721Received', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link pwnVaultAbi}__ and `functionName` set to `"supportsInterface"` */ export const readPwnVaultSupportsInterface = /*#__PURE__*/ createReadContract({ - abi: pwnVaultAbi, - functionName: "supportsInterface", -}); + abi: pwnVaultAbi, + functionName: 'supportsInterface', +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnVaultAbi}__ */ export const watchPwnVaultEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: pwnVaultAbi, -}); + abi: pwnVaultAbi, +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnVaultAbi}__ and `eventName` set to `"PoolSupply"` */ export const watchPwnVaultPoolSupplyEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnVaultAbi, - eventName: "PoolSupply", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnVaultAbi, + eventName: 'PoolSupply', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnVaultAbi}__ and `eventName` set to `"PoolWithdraw"` */ export const watchPwnVaultPoolWithdrawEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnVaultAbi, - eventName: "PoolWithdraw", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnVaultAbi, + eventName: 'PoolWithdraw', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnVaultAbi}__ and `eventName` set to `"VaultPull"` */ export const watchPwnVaultVaultPullEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnVaultAbi, - eventName: "VaultPull", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnVaultAbi, + eventName: 'VaultPull', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnVaultAbi}__ and `eventName` set to `"VaultPush"` */ export const watchPwnVaultVaultPushEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnVaultAbi, - eventName: "VaultPush", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnVaultAbi, + eventName: 'VaultPush', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link pwnVaultAbi}__ and `eventName` set to `"VaultPushFrom"` */ export const watchPwnVaultVaultPushFromEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: pwnVaultAbi, - eventName: "VaultPushFrom", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: pwnVaultAbi, + eventName: 'VaultPushFrom', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link t1155Abi}__ */ -export const readT1155 = /*#__PURE__*/ createReadContract({ abi: t1155Abi }); +export const readT1155 = /*#__PURE__*/ createReadContract({ abi: t1155Abi }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link t1155Abi}__ and `functionName` set to `"balanceOf"` */ export const readT1155BalanceOf = /*#__PURE__*/ createReadContract({ - abi: t1155Abi, - functionName: "balanceOf", -}); + abi: t1155Abi, + functionName: 'balanceOf', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link t1155Abi}__ and `functionName` set to `"balanceOfBatch"` */ export const readT1155BalanceOfBatch = /*#__PURE__*/ createReadContract({ - abi: t1155Abi, - functionName: "balanceOfBatch", -}); + abi: t1155Abi, + functionName: 'balanceOfBatch', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link t1155Abi}__ and `functionName` set to `"isApprovedForAll"` */ export const readT1155IsApprovedForAll = /*#__PURE__*/ createReadContract({ - abi: t1155Abi, - functionName: "isApprovedForAll", -}); + abi: t1155Abi, + functionName: 'isApprovedForAll', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link t1155Abi}__ and `functionName` set to `"supportsInterface"` */ export const readT1155SupportsInterface = /*#__PURE__*/ createReadContract({ - abi: t1155Abi, - functionName: "supportsInterface", -}); + abi: t1155Abi, + functionName: 'supportsInterface', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link t1155Abi}__ and `functionName` set to `"uri"` */ export const readT1155Uri = /*#__PURE__*/ createReadContract({ - abi: t1155Abi, - functionName: "uri", -}); + abi: t1155Abi, + functionName: 'uri', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link t1155Abi}__ */ -export const writeT1155 = /*#__PURE__*/ createWriteContract({ abi: t1155Abi }); +export const writeT1155 = /*#__PURE__*/ createWriteContract({ abi: t1155Abi }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link t1155Abi}__ and `functionName` set to `"burn"` */ export const writeT1155Burn = /*#__PURE__*/ createWriteContract({ - abi: t1155Abi, - functionName: "burn", -}); + abi: t1155Abi, + functionName: 'burn', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link t1155Abi}__ and `functionName` set to `"mint"` */ export const writeT1155Mint = /*#__PURE__*/ createWriteContract({ - abi: t1155Abi, - functionName: "mint", -}); + abi: t1155Abi, + functionName: 'mint', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link t1155Abi}__ and `functionName` set to `"safeBatchTransferFrom"` */ export const writeT1155SafeBatchTransferFrom = - /*#__PURE__*/ createWriteContract({ - abi: t1155Abi, - functionName: "safeBatchTransferFrom", - }); + /*#__PURE__*/ createWriteContract({ + abi: t1155Abi, + functionName: 'safeBatchTransferFrom', + }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link t1155Abi}__ and `functionName` set to `"safeTransferFrom"` */ export const writeT1155SafeTransferFrom = /*#__PURE__*/ createWriteContract({ - abi: t1155Abi, - functionName: "safeTransferFrom", -}); + abi: t1155Abi, + functionName: 'safeTransferFrom', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link t1155Abi}__ and `functionName` set to `"setApprovalForAll"` */ export const writeT1155SetApprovalForAll = /*#__PURE__*/ createWriteContract({ - abi: t1155Abi, - functionName: "setApprovalForAll", -}); + abi: t1155Abi, + functionName: 'setApprovalForAll', +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link t1155Abi}__ */ export const simulateT1155 = /*#__PURE__*/ createSimulateContract({ - abi: t1155Abi, -}); + abi: t1155Abi, +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link t1155Abi}__ and `functionName` set to `"burn"` */ export const simulateT1155Burn = /*#__PURE__*/ createSimulateContract({ - abi: t1155Abi, - functionName: "burn", -}); + abi: t1155Abi, + functionName: 'burn', +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link t1155Abi}__ and `functionName` set to `"mint"` */ export const simulateT1155Mint = /*#__PURE__*/ createSimulateContract({ - abi: t1155Abi, - functionName: "mint", -}); + abi: t1155Abi, + functionName: 'mint', +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link t1155Abi}__ and `functionName` set to `"safeBatchTransferFrom"` */ export const simulateT1155SafeBatchTransferFrom = - /*#__PURE__*/ createSimulateContract({ - abi: t1155Abi, - functionName: "safeBatchTransferFrom", - }); + /*#__PURE__*/ createSimulateContract({ + abi: t1155Abi, + functionName: 'safeBatchTransferFrom', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link t1155Abi}__ and `functionName` set to `"safeTransferFrom"` */ export const simulateT1155SafeTransferFrom = - /*#__PURE__*/ createSimulateContract({ - abi: t1155Abi, - functionName: "safeTransferFrom", - }); + /*#__PURE__*/ createSimulateContract({ + abi: t1155Abi, + functionName: 'safeTransferFrom', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link t1155Abi}__ and `functionName` set to `"setApprovalForAll"` */ export const simulateT1155SetApprovalForAll = - /*#__PURE__*/ createSimulateContract({ - abi: t1155Abi, - functionName: "setApprovalForAll", - }); + /*#__PURE__*/ createSimulateContract({ + abi: t1155Abi, + functionName: 'setApprovalForAll', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link t1155Abi}__ */ export const watchT1155Event = /*#__PURE__*/ createWatchContractEvent({ - abi: t1155Abi, -}); + abi: t1155Abi, +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link t1155Abi}__ and `eventName` set to `"ApprovalForAll"` */ export const watchT1155ApprovalForAllEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: t1155Abi, - eventName: "ApprovalForAll", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: t1155Abi, + eventName: 'ApprovalForAll', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link t1155Abi}__ and `eventName` set to `"TransferBatch"` */ export const watchT1155TransferBatchEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: t1155Abi, - eventName: "TransferBatch", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: t1155Abi, + eventName: 'TransferBatch', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link t1155Abi}__ and `eventName` set to `"TransferSingle"` */ export const watchT1155TransferSingleEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: t1155Abi, - eventName: "TransferSingle", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: t1155Abi, + eventName: 'TransferSingle', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link t1155Abi}__ and `eventName` set to `"URI"` */ export const watchT1155UriEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: t1155Abi, - eventName: "URI", -}); + abi: t1155Abi, + eventName: 'URI', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link t20Abi}__ */ -export const readT20 = /*#__PURE__*/ createReadContract({ abi: t20Abi }); +export const readT20 = /*#__PURE__*/ createReadContract({ abi: t20Abi }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link t20Abi}__ and `functionName` set to `"allowance"` */ export const readT20Allowance = /*#__PURE__*/ createReadContract({ - abi: t20Abi, - functionName: "allowance", -}); + abi: t20Abi, + functionName: 'allowance', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link t20Abi}__ and `functionName` set to `"balanceOf"` */ export const readT20BalanceOf = /*#__PURE__*/ createReadContract({ - abi: t20Abi, - functionName: "balanceOf", -}); + abi: t20Abi, + functionName: 'balanceOf', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link t20Abi}__ and `functionName` set to `"decimals"` */ export const readT20Decimals = /*#__PURE__*/ createReadContract({ - abi: t20Abi, - functionName: "decimals", -}); + abi: t20Abi, + functionName: 'decimals', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link t20Abi}__ and `functionName` set to `"name"` */ export const readT20Name = /*#__PURE__*/ createReadContract({ - abi: t20Abi, - functionName: "name", -}); + abi: t20Abi, + functionName: 'name', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link t20Abi}__ and `functionName` set to `"symbol"` */ export const readT20Symbol = /*#__PURE__*/ createReadContract({ - abi: t20Abi, - functionName: "symbol", -}); + abi: t20Abi, + functionName: 'symbol', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link t20Abi}__ and `functionName` set to `"totalSupply"` */ export const readT20TotalSupply = /*#__PURE__*/ createReadContract({ - abi: t20Abi, - functionName: "totalSupply", -}); + abi: t20Abi, + functionName: 'totalSupply', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link t20Abi}__ */ -export const writeT20 = /*#__PURE__*/ createWriteContract({ abi: t20Abi }); +export const writeT20 = /*#__PURE__*/ createWriteContract({ abi: t20Abi }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link t20Abi}__ and `functionName` set to `"approve"` */ export const writeT20Approve = /*#__PURE__*/ createWriteContract({ - abi: t20Abi, - functionName: "approve", -}); + abi: t20Abi, + functionName: 'approve', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link t20Abi}__ and `functionName` set to `"burn"` */ export const writeT20Burn = /*#__PURE__*/ createWriteContract({ - abi: t20Abi, - functionName: "burn", -}); + abi: t20Abi, + functionName: 'burn', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link t20Abi}__ and `functionName` set to `"decreaseAllowance"` */ export const writeT20DecreaseAllowance = /*#__PURE__*/ createWriteContract({ - abi: t20Abi, - functionName: "decreaseAllowance", -}); + abi: t20Abi, + functionName: 'decreaseAllowance', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link t20Abi}__ and `functionName` set to `"increaseAllowance"` */ export const writeT20IncreaseAllowance = /*#__PURE__*/ createWriteContract({ - abi: t20Abi, - functionName: "increaseAllowance", -}); + abi: t20Abi, + functionName: 'increaseAllowance', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link t20Abi}__ and `functionName` set to `"mint"` */ export const writeT20Mint = /*#__PURE__*/ createWriteContract({ - abi: t20Abi, - functionName: "mint", -}); + abi: t20Abi, + functionName: 'mint', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link t20Abi}__ and `functionName` set to `"transfer"` */ export const writeT20Transfer = /*#__PURE__*/ createWriteContract({ - abi: t20Abi, - functionName: "transfer", -}); + abi: t20Abi, + functionName: 'transfer', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link t20Abi}__ and `functionName` set to `"transferFrom"` */ export const writeT20TransferFrom = /*#__PURE__*/ createWriteContract({ - abi: t20Abi, - functionName: "transferFrom", -}); + abi: t20Abi, + functionName: 'transferFrom', +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link t20Abi}__ */ -export const simulateT20 = /*#__PURE__*/ createSimulateContract({ - abi: t20Abi, -}); +export const simulateT20 = /*#__PURE__*/ createSimulateContract({ abi: t20Abi }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link t20Abi}__ and `functionName` set to `"approve"` */ export const simulateT20Approve = /*#__PURE__*/ createSimulateContract({ - abi: t20Abi, - functionName: "approve", -}); + abi: t20Abi, + functionName: 'approve', +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link t20Abi}__ and `functionName` set to `"burn"` */ export const simulateT20Burn = /*#__PURE__*/ createSimulateContract({ - abi: t20Abi, - functionName: "burn", -}); + abi: t20Abi, + functionName: 'burn', +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link t20Abi}__ and `functionName` set to `"decreaseAllowance"` */ export const simulateT20DecreaseAllowance = - /*#__PURE__*/ createSimulateContract({ - abi: t20Abi, - functionName: "decreaseAllowance", - }); + /*#__PURE__*/ createSimulateContract({ + abi: t20Abi, + functionName: 'decreaseAllowance', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link t20Abi}__ and `functionName` set to `"increaseAllowance"` */ export const simulateT20IncreaseAllowance = - /*#__PURE__*/ createSimulateContract({ - abi: t20Abi, - functionName: "increaseAllowance", - }); + /*#__PURE__*/ createSimulateContract({ + abi: t20Abi, + functionName: 'increaseAllowance', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link t20Abi}__ and `functionName` set to `"mint"` */ export const simulateT20Mint = /*#__PURE__*/ createSimulateContract({ - abi: t20Abi, - functionName: "mint", -}); + abi: t20Abi, + functionName: 'mint', +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link t20Abi}__ and `functionName` set to `"transfer"` */ export const simulateT20Transfer = /*#__PURE__*/ createSimulateContract({ - abi: t20Abi, - functionName: "transfer", -}); + abi: t20Abi, + functionName: 'transfer', +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link t20Abi}__ and `functionName` set to `"transferFrom"` */ export const simulateT20TransferFrom = /*#__PURE__*/ createSimulateContract({ - abi: t20Abi, - functionName: "transferFrom", -}); + abi: t20Abi, + functionName: 'transferFrom', +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link t20Abi}__ */ export const watchT20Event = /*#__PURE__*/ createWatchContractEvent({ - abi: t20Abi, -}); + abi: t20Abi, +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link t20Abi}__ and `eventName` set to `"Approval"` */ export const watchT20ApprovalEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: t20Abi, - eventName: "Approval", -}); + abi: t20Abi, + eventName: 'Approval', +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link t20Abi}__ and `eventName` set to `"Transfer"` */ export const watchT20TransferEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: t20Abi, - eventName: "Transfer", -}); + abi: t20Abi, + eventName: 'Transfer', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link t721Abi}__ */ -export const readT721 = /*#__PURE__*/ createReadContract({ abi: t721Abi }); +export const readT721 = /*#__PURE__*/ createReadContract({ abi: t721Abi }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link t721Abi}__ and `functionName` set to `"balanceOf"` */ export const readT721BalanceOf = /*#__PURE__*/ createReadContract({ - abi: t721Abi, - functionName: "balanceOf", -}); + abi: t721Abi, + functionName: 'balanceOf', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link t721Abi}__ and `functionName` set to `"getApproved"` */ export const readT721GetApproved = /*#__PURE__*/ createReadContract({ - abi: t721Abi, - functionName: "getApproved", -}); + abi: t721Abi, + functionName: 'getApproved', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link t721Abi}__ and `functionName` set to `"isApprovedForAll"` */ export const readT721IsApprovedForAll = /*#__PURE__*/ createReadContract({ - abi: t721Abi, - functionName: "isApprovedForAll", -}); + abi: t721Abi, + functionName: 'isApprovedForAll', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link t721Abi}__ and `functionName` set to `"name"` */ export const readT721Name = /*#__PURE__*/ createReadContract({ - abi: t721Abi, - functionName: "name", -}); + abi: t721Abi, + functionName: 'name', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link t721Abi}__ and `functionName` set to `"ownerOf"` */ export const readT721OwnerOf = /*#__PURE__*/ createReadContract({ - abi: t721Abi, - functionName: "ownerOf", -}); + abi: t721Abi, + functionName: 'ownerOf', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link t721Abi}__ and `functionName` set to `"supportsInterface"` */ export const readT721SupportsInterface = /*#__PURE__*/ createReadContract({ - abi: t721Abi, - functionName: "supportsInterface", -}); + abi: t721Abi, + functionName: 'supportsInterface', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link t721Abi}__ and `functionName` set to `"symbol"` */ export const readT721Symbol = /*#__PURE__*/ createReadContract({ - abi: t721Abi, - functionName: "symbol", -}); + abi: t721Abi, + functionName: 'symbol', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link t721Abi}__ and `functionName` set to `"tokenURI"` */ export const readT721TokenUri = /*#__PURE__*/ createReadContract({ - abi: t721Abi, - functionName: "tokenURI", -}); + abi: t721Abi, + functionName: 'tokenURI', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link t721Abi}__ */ -export const writeT721 = /*#__PURE__*/ createWriteContract({ abi: t721Abi }); +export const writeT721 = /*#__PURE__*/ createWriteContract({ abi: t721Abi }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link t721Abi}__ and `functionName` set to `"approve"` */ export const writeT721Approve = /*#__PURE__*/ createWriteContract({ - abi: t721Abi, - functionName: "approve", -}); + abi: t721Abi, + functionName: 'approve', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link t721Abi}__ and `functionName` set to `"burn"` */ export const writeT721Burn = /*#__PURE__*/ createWriteContract({ - abi: t721Abi, - functionName: "burn", -}); + abi: t721Abi, + functionName: 'burn', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link t721Abi}__ and `functionName` set to `"mint"` */ export const writeT721Mint = /*#__PURE__*/ createWriteContract({ - abi: t721Abi, - functionName: "mint", -}); + abi: t721Abi, + functionName: 'mint', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link t721Abi}__ and `functionName` set to `"safeTransferFrom"` */ export const writeT721SafeTransferFrom = /*#__PURE__*/ createWriteContract({ - abi: t721Abi, - functionName: "safeTransferFrom", -}); + abi: t721Abi, + functionName: 'safeTransferFrom', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link t721Abi}__ and `functionName` set to `"setApprovalForAll"` */ export const writeT721SetApprovalForAll = /*#__PURE__*/ createWriteContract({ - abi: t721Abi, - functionName: "setApprovalForAll", -}); + abi: t721Abi, + functionName: 'setApprovalForAll', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link t721Abi}__ and `functionName` set to `"transferFrom"` */ export const writeT721TransferFrom = /*#__PURE__*/ createWriteContract({ - abi: t721Abi, - functionName: "transferFrom", -}); + abi: t721Abi, + functionName: 'transferFrom', +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link t721Abi}__ */ export const simulateT721 = /*#__PURE__*/ createSimulateContract({ - abi: t721Abi, -}); + abi: t721Abi, +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link t721Abi}__ and `functionName` set to `"approve"` */ export const simulateT721Approve = /*#__PURE__*/ createSimulateContract({ - abi: t721Abi, - functionName: "approve", -}); + abi: t721Abi, + functionName: 'approve', +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link t721Abi}__ and `functionName` set to `"burn"` */ export const simulateT721Burn = /*#__PURE__*/ createSimulateContract({ - abi: t721Abi, - functionName: "burn", -}); + abi: t721Abi, + functionName: 'burn', +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link t721Abi}__ and `functionName` set to `"mint"` */ export const simulateT721Mint = /*#__PURE__*/ createSimulateContract({ - abi: t721Abi, - functionName: "mint", -}); + abi: t721Abi, + functionName: 'mint', +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link t721Abi}__ and `functionName` set to `"safeTransferFrom"` */ export const simulateT721SafeTransferFrom = - /*#__PURE__*/ createSimulateContract({ - abi: t721Abi, - functionName: "safeTransferFrom", - }); + /*#__PURE__*/ createSimulateContract({ + abi: t721Abi, + functionName: 'safeTransferFrom', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link t721Abi}__ and `functionName` set to `"setApprovalForAll"` */ export const simulateT721SetApprovalForAll = - /*#__PURE__*/ createSimulateContract({ - abi: t721Abi, - functionName: "setApprovalForAll", - }); + /*#__PURE__*/ createSimulateContract({ + abi: t721Abi, + functionName: 'setApprovalForAll', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link t721Abi}__ and `functionName` set to `"transferFrom"` */ export const simulateT721TransferFrom = /*#__PURE__*/ createSimulateContract({ - abi: t721Abi, - functionName: "transferFrom", -}); + abi: t721Abi, + functionName: 'transferFrom', +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link t721Abi}__ */ export const watchT721Event = /*#__PURE__*/ createWatchContractEvent({ - abi: t721Abi, -}); + abi: t721Abi, +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link t721Abi}__ and `eventName` set to `"Approval"` */ export const watchT721ApprovalEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: t721Abi, - eventName: "Approval", -}); + abi: t721Abi, + eventName: 'Approval', +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link t721Abi}__ and `eventName` set to `"ApprovalForAll"` */ export const watchT721ApprovalForAllEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: t721Abi, - eventName: "ApprovalForAll", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: t721Abi, + eventName: 'ApprovalForAll', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link t721Abi}__ and `eventName` set to `"Transfer"` */ export const watchT721TransferEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: t721Abi, - eventName: "Transfer", -}); + abi: t721Abi, + eventName: 'Transfer', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link testAbi}__ */ -export const readTest = /*#__PURE__*/ createReadContract({ abi: testAbi }); +export const readTest = /*#__PURE__*/ createReadContract({ abi: testAbi }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link testAbi}__ and `functionName` set to `"IS_TEST"` */ export const readTestIsTest = /*#__PURE__*/ createReadContract({ - abi: testAbi, - functionName: "IS_TEST", -}); + abi: testAbi, + functionName: 'IS_TEST', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link testAbi}__ and `functionName` set to `"excludeArtifacts"` */ export const readTestExcludeArtifacts = /*#__PURE__*/ createReadContract({ - abi: testAbi, - functionName: "excludeArtifacts", -}); + abi: testAbi, + functionName: 'excludeArtifacts', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link testAbi}__ and `functionName` set to `"excludeContracts"` */ export const readTestExcludeContracts = /*#__PURE__*/ createReadContract({ - abi: testAbi, - functionName: "excludeContracts", -}); + abi: testAbi, + functionName: 'excludeContracts', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link testAbi}__ and `functionName` set to `"excludeSenders"` */ export const readTestExcludeSenders = /*#__PURE__*/ createReadContract({ - abi: testAbi, - functionName: "excludeSenders", -}); + abi: testAbi, + functionName: 'excludeSenders', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link testAbi}__ and `functionName` set to `"targetArtifactSelectors"` */ export const readTestTargetArtifactSelectors = /*#__PURE__*/ createReadContract( - { abi: testAbi, functionName: "targetArtifactSelectors" }, -); + { abi: testAbi, functionName: 'targetArtifactSelectors' }, +) /** * Wraps __{@link readContract}__ with `abi` set to __{@link testAbi}__ and `functionName` set to `"targetArtifacts"` */ export const readTestTargetArtifacts = /*#__PURE__*/ createReadContract({ - abi: testAbi, - functionName: "targetArtifacts", -}); + abi: testAbi, + functionName: 'targetArtifacts', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link testAbi}__ and `functionName` set to `"targetContracts"` */ export const readTestTargetContracts = /*#__PURE__*/ createReadContract({ - abi: testAbi, - functionName: "targetContracts", -}); + abi: testAbi, + functionName: 'targetContracts', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link testAbi}__ and `functionName` set to `"targetInterfaces"` */ export const readTestTargetInterfaces = /*#__PURE__*/ createReadContract({ - abi: testAbi, - functionName: "targetInterfaces", -}); + abi: testAbi, + functionName: 'targetInterfaces', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link testAbi}__ and `functionName` set to `"targetSelectors"` */ export const readTestTargetSelectors = /*#__PURE__*/ createReadContract({ - abi: testAbi, - functionName: "targetSelectors", -}); + abi: testAbi, + functionName: 'targetSelectors', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link testAbi}__ and `functionName` set to `"targetSenders"` */ export const readTestTargetSenders = /*#__PURE__*/ createReadContract({ - abi: testAbi, - functionName: "targetSenders", -}); + abi: testAbi, + functionName: 'targetSenders', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link testAbi}__ */ -export const writeTest = /*#__PURE__*/ createWriteContract({ abi: testAbi }); +export const writeTest = /*#__PURE__*/ createWriteContract({ abi: testAbi }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link testAbi}__ and `functionName` set to `"failed"` */ export const writeTestFailed = /*#__PURE__*/ createWriteContract({ - abi: testAbi, - functionName: "failed", -}); + abi: testAbi, + functionName: 'failed', +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link testAbi}__ */ export const simulateTest = /*#__PURE__*/ createSimulateContract({ - abi: testAbi, -}); + abi: testAbi, +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link testAbi}__ and `functionName` set to `"failed"` */ export const simulateTestFailed = /*#__PURE__*/ createSimulateContract({ - abi: testAbi, - functionName: "failed", -}); + abi: testAbi, + functionName: 'failed', +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link testAbi}__ */ export const watchTestEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: testAbi, -}); + abi: testAbi, +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link testAbi}__ and `eventName` set to `"log"` */ export const watchTestLogEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: testAbi, - eventName: "log", -}); + abi: testAbi, + eventName: 'log', +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link testAbi}__ and `eventName` set to `"log_address"` */ export const watchTestLogAddressEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: testAbi, - eventName: "log_address", -}); + abi: testAbi, + eventName: 'log_address', +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link testAbi}__ and `eventName` set to `"log_array"` */ export const watchTestLogArrayEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: testAbi, - eventName: "log_array", -}); + abi: testAbi, + eventName: 'log_array', +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link testAbi}__ and `eventName` set to `"log_bytes"` */ export const watchTestLogBytesEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: testAbi, - eventName: "log_bytes", -}); + abi: testAbi, + eventName: 'log_bytes', +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link testAbi}__ and `eventName` set to `"log_bytes32"` */ export const watchTestLogBytes32Event = /*#__PURE__*/ createWatchContractEvent({ - abi: testAbi, - eventName: "log_bytes32", -}); + abi: testAbi, + eventName: 'log_bytes32', +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link testAbi}__ and `eventName` set to `"log_int"` */ export const watchTestLogIntEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: testAbi, - eventName: "log_int", -}); + abi: testAbi, + eventName: 'log_int', +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link testAbi}__ and `eventName` set to `"log_named_address"` */ export const watchTestLogNamedAddressEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: testAbi, - eventName: "log_named_address", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: testAbi, + eventName: 'log_named_address', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link testAbi}__ and `eventName` set to `"log_named_array"` */ export const watchTestLogNamedArrayEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: testAbi, - eventName: "log_named_array", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: testAbi, + eventName: 'log_named_array', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link testAbi}__ and `eventName` set to `"log_named_bytes"` */ export const watchTestLogNamedBytesEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: testAbi, - eventName: "log_named_bytes", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: testAbi, + eventName: 'log_named_bytes', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link testAbi}__ and `eventName` set to `"log_named_bytes32"` */ export const watchTestLogNamedBytes32Event = - /*#__PURE__*/ createWatchContractEvent({ - abi: testAbi, - eventName: "log_named_bytes32", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: testAbi, + eventName: 'log_named_bytes32', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link testAbi}__ and `eventName` set to `"log_named_decimal_int"` */ export const watchTestLogNamedDecimalIntEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: testAbi, - eventName: "log_named_decimal_int", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: testAbi, + eventName: 'log_named_decimal_int', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link testAbi}__ and `eventName` set to `"log_named_decimal_uint"` */ export const watchTestLogNamedDecimalUintEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: testAbi, - eventName: "log_named_decimal_uint", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: testAbi, + eventName: 'log_named_decimal_uint', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link testAbi}__ and `eventName` set to `"log_named_int"` */ export const watchTestLogNamedIntEvent = /*#__PURE__*/ createWatchContractEvent( - { abi: testAbi, eventName: "log_named_int" }, -); + { abi: testAbi, eventName: 'log_named_int' }, +) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link testAbi}__ and `eventName` set to `"log_named_string"` */ export const watchTestLogNamedStringEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: testAbi, - eventName: "log_named_string", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: testAbi, + eventName: 'log_named_string', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link testAbi}__ and `eventName` set to `"log_named_uint"` */ export const watchTestLogNamedUintEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: testAbi, - eventName: "log_named_uint", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: testAbi, + eventName: 'log_named_uint', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link testAbi}__ and `eventName` set to `"log_string"` */ export const watchTestLogStringEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: testAbi, - eventName: "log_string", -}); + abi: testAbi, + eventName: 'log_string', +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link testAbi}__ and `eventName` set to `"log_uint"` */ export const watchTestLogUintEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: testAbi, - eventName: "log_uint", -}); + abi: testAbi, + eventName: 'log_uint', +}) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link testAbi}__ and `eventName` set to `"logs"` */ export const watchTestLogsEvent = /*#__PURE__*/ createWatchContractEvent({ - abi: testAbi, - eventName: "logs", -}); + abi: testAbi, + eventName: 'logs', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link timelockControllerAbi}__ */ export const readTimelockController = /*#__PURE__*/ createReadContract({ - abi: timelockControllerAbi, -}); + abi: timelockControllerAbi, +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"CANCELLER_ROLE"` */ export const readTimelockControllerCancellerRole = - /*#__PURE__*/ createReadContract({ - abi: timelockControllerAbi, - functionName: "CANCELLER_ROLE", - }); + /*#__PURE__*/ createReadContract({ + abi: timelockControllerAbi, + functionName: 'CANCELLER_ROLE', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"DEFAULT_ADMIN_ROLE"` */ export const readTimelockControllerDefaultAdminRole = - /*#__PURE__*/ createReadContract({ - abi: timelockControllerAbi, - functionName: "DEFAULT_ADMIN_ROLE", - }); + /*#__PURE__*/ createReadContract({ + abi: timelockControllerAbi, + functionName: 'DEFAULT_ADMIN_ROLE', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"EXECUTOR_ROLE"` */ export const readTimelockControllerExecutorRole = - /*#__PURE__*/ createReadContract({ - abi: timelockControllerAbi, - functionName: "EXECUTOR_ROLE", - }); + /*#__PURE__*/ createReadContract({ + abi: timelockControllerAbi, + functionName: 'EXECUTOR_ROLE', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"PROPOSER_ROLE"` */ export const readTimelockControllerProposerRole = - /*#__PURE__*/ createReadContract({ - abi: timelockControllerAbi, - functionName: "PROPOSER_ROLE", - }); + /*#__PURE__*/ createReadContract({ + abi: timelockControllerAbi, + functionName: 'PROPOSER_ROLE', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"TIMELOCK_ADMIN_ROLE"` */ export const readTimelockControllerTimelockAdminRole = - /*#__PURE__*/ createReadContract({ - abi: timelockControllerAbi, - functionName: "TIMELOCK_ADMIN_ROLE", - }); + /*#__PURE__*/ createReadContract({ + abi: timelockControllerAbi, + functionName: 'TIMELOCK_ADMIN_ROLE', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"getMinDelay"` */ export const readTimelockControllerGetMinDelay = - /*#__PURE__*/ createReadContract({ - abi: timelockControllerAbi, - functionName: "getMinDelay", - }); + /*#__PURE__*/ createReadContract({ + abi: timelockControllerAbi, + functionName: 'getMinDelay', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"getRoleAdmin"` */ export const readTimelockControllerGetRoleAdmin = - /*#__PURE__*/ createReadContract({ - abi: timelockControllerAbi, - functionName: "getRoleAdmin", - }); + /*#__PURE__*/ createReadContract({ + abi: timelockControllerAbi, + functionName: 'getRoleAdmin', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"getTimestamp"` */ export const readTimelockControllerGetTimestamp = - /*#__PURE__*/ createReadContract({ - abi: timelockControllerAbi, - functionName: "getTimestamp", - }); + /*#__PURE__*/ createReadContract({ + abi: timelockControllerAbi, + functionName: 'getTimestamp', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"hasRole"` */ export const readTimelockControllerHasRole = /*#__PURE__*/ createReadContract({ - abi: timelockControllerAbi, - functionName: "hasRole", -}); + abi: timelockControllerAbi, + functionName: 'hasRole', +}) /** * Wraps __{@link readContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"hashOperation"` */ export const readTimelockControllerHashOperation = - /*#__PURE__*/ createReadContract({ - abi: timelockControllerAbi, - functionName: "hashOperation", - }); + /*#__PURE__*/ createReadContract({ + abi: timelockControllerAbi, + functionName: 'hashOperation', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"hashOperationBatch"` */ export const readTimelockControllerHashOperationBatch = - /*#__PURE__*/ createReadContract({ - abi: timelockControllerAbi, - functionName: "hashOperationBatch", - }); + /*#__PURE__*/ createReadContract({ + abi: timelockControllerAbi, + functionName: 'hashOperationBatch', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"isOperation"` */ export const readTimelockControllerIsOperation = - /*#__PURE__*/ createReadContract({ - abi: timelockControllerAbi, - functionName: "isOperation", - }); + /*#__PURE__*/ createReadContract({ + abi: timelockControllerAbi, + functionName: 'isOperation', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"isOperationDone"` */ export const readTimelockControllerIsOperationDone = - /*#__PURE__*/ createReadContract({ - abi: timelockControllerAbi, - functionName: "isOperationDone", - }); + /*#__PURE__*/ createReadContract({ + abi: timelockControllerAbi, + functionName: 'isOperationDone', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"isOperationPending"` */ export const readTimelockControllerIsOperationPending = - /*#__PURE__*/ createReadContract({ - abi: timelockControllerAbi, - functionName: "isOperationPending", - }); + /*#__PURE__*/ createReadContract({ + abi: timelockControllerAbi, + functionName: 'isOperationPending', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"isOperationReady"` */ export const readTimelockControllerIsOperationReady = - /*#__PURE__*/ createReadContract({ - abi: timelockControllerAbi, - functionName: "isOperationReady", - }); + /*#__PURE__*/ createReadContract({ + abi: timelockControllerAbi, + functionName: 'isOperationReady', + }) /** * Wraps __{@link readContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"supportsInterface"` */ export const readTimelockControllerSupportsInterface = - /*#__PURE__*/ createReadContract({ - abi: timelockControllerAbi, - functionName: "supportsInterface", - }); + /*#__PURE__*/ createReadContract({ + abi: timelockControllerAbi, + functionName: 'supportsInterface', + }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link timelockControllerAbi}__ */ export const writeTimelockController = /*#__PURE__*/ createWriteContract({ - abi: timelockControllerAbi, -}); + abi: timelockControllerAbi, +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"cancel"` */ export const writeTimelockControllerCancel = /*#__PURE__*/ createWriteContract({ - abi: timelockControllerAbi, - functionName: "cancel", -}); + abi: timelockControllerAbi, + functionName: 'cancel', +}) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"execute"` */ export const writeTimelockControllerExecute = /*#__PURE__*/ createWriteContract( - { abi: timelockControllerAbi, functionName: "execute" }, -); + { abi: timelockControllerAbi, functionName: 'execute' }, +) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"executeBatch"` */ export const writeTimelockControllerExecuteBatch = - /*#__PURE__*/ createWriteContract({ - abi: timelockControllerAbi, - functionName: "executeBatch", - }); + /*#__PURE__*/ createWriteContract({ + abi: timelockControllerAbi, + functionName: 'executeBatch', + }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"grantRole"` */ export const writeTimelockControllerGrantRole = - /*#__PURE__*/ createWriteContract({ - abi: timelockControllerAbi, - functionName: "grantRole", - }); + /*#__PURE__*/ createWriteContract({ + abi: timelockControllerAbi, + functionName: 'grantRole', + }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"onERC1155BatchReceived"` */ export const writeTimelockControllerOnErc1155BatchReceived = - /*#__PURE__*/ createWriteContract({ - abi: timelockControllerAbi, - functionName: "onERC1155BatchReceived", - }); + /*#__PURE__*/ createWriteContract({ + abi: timelockControllerAbi, + functionName: 'onERC1155BatchReceived', + }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"onERC1155Received"` */ export const writeTimelockControllerOnErc1155Received = - /*#__PURE__*/ createWriteContract({ - abi: timelockControllerAbi, - functionName: "onERC1155Received", - }); + /*#__PURE__*/ createWriteContract({ + abi: timelockControllerAbi, + functionName: 'onERC1155Received', + }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"onERC721Received"` */ export const writeTimelockControllerOnErc721Received = - /*#__PURE__*/ createWriteContract({ - abi: timelockControllerAbi, - functionName: "onERC721Received", - }); + /*#__PURE__*/ createWriteContract({ + abi: timelockControllerAbi, + functionName: 'onERC721Received', + }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"renounceRole"` */ export const writeTimelockControllerRenounceRole = - /*#__PURE__*/ createWriteContract({ - abi: timelockControllerAbi, - functionName: "renounceRole", - }); + /*#__PURE__*/ createWriteContract({ + abi: timelockControllerAbi, + functionName: 'renounceRole', + }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"revokeRole"` */ export const writeTimelockControllerRevokeRole = - /*#__PURE__*/ createWriteContract({ - abi: timelockControllerAbi, - functionName: "revokeRole", - }); + /*#__PURE__*/ createWriteContract({ + abi: timelockControllerAbi, + functionName: 'revokeRole', + }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"schedule"` */ export const writeTimelockControllerSchedule = - /*#__PURE__*/ createWriteContract({ - abi: timelockControllerAbi, - functionName: "schedule", - }); + /*#__PURE__*/ createWriteContract({ + abi: timelockControllerAbi, + functionName: 'schedule', + }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"scheduleBatch"` */ export const writeTimelockControllerScheduleBatch = - /*#__PURE__*/ createWriteContract({ - abi: timelockControllerAbi, - functionName: "scheduleBatch", - }); + /*#__PURE__*/ createWriteContract({ + abi: timelockControllerAbi, + functionName: 'scheduleBatch', + }) /** * Wraps __{@link writeContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"updateDelay"` */ export const writeTimelockControllerUpdateDelay = - /*#__PURE__*/ createWriteContract({ - abi: timelockControllerAbi, - functionName: "updateDelay", - }); + /*#__PURE__*/ createWriteContract({ + abi: timelockControllerAbi, + functionName: 'updateDelay', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link timelockControllerAbi}__ */ export const simulateTimelockController = /*#__PURE__*/ createSimulateContract({ - abi: timelockControllerAbi, -}); + abi: timelockControllerAbi, +}) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"cancel"` */ export const simulateTimelockControllerCancel = - /*#__PURE__*/ createSimulateContract({ - abi: timelockControllerAbi, - functionName: "cancel", - }); + /*#__PURE__*/ createSimulateContract({ + abi: timelockControllerAbi, + functionName: 'cancel', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"execute"` */ export const simulateTimelockControllerExecute = - /*#__PURE__*/ createSimulateContract({ - abi: timelockControllerAbi, - functionName: "execute", - }); + /*#__PURE__*/ createSimulateContract({ + abi: timelockControllerAbi, + functionName: 'execute', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"executeBatch"` */ export const simulateTimelockControllerExecuteBatch = - /*#__PURE__*/ createSimulateContract({ - abi: timelockControllerAbi, - functionName: "executeBatch", - }); + /*#__PURE__*/ createSimulateContract({ + abi: timelockControllerAbi, + functionName: 'executeBatch', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"grantRole"` */ export const simulateTimelockControllerGrantRole = - /*#__PURE__*/ createSimulateContract({ - abi: timelockControllerAbi, - functionName: "grantRole", - }); + /*#__PURE__*/ createSimulateContract({ + abi: timelockControllerAbi, + functionName: 'grantRole', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"onERC1155BatchReceived"` */ export const simulateTimelockControllerOnErc1155BatchReceived = - /*#__PURE__*/ createSimulateContract({ - abi: timelockControllerAbi, - functionName: "onERC1155BatchReceived", - }); + /*#__PURE__*/ createSimulateContract({ + abi: timelockControllerAbi, + functionName: 'onERC1155BatchReceived', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"onERC1155Received"` */ export const simulateTimelockControllerOnErc1155Received = - /*#__PURE__*/ createSimulateContract({ - abi: timelockControllerAbi, - functionName: "onERC1155Received", - }); + /*#__PURE__*/ createSimulateContract({ + abi: timelockControllerAbi, + functionName: 'onERC1155Received', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"onERC721Received"` */ export const simulateTimelockControllerOnErc721Received = - /*#__PURE__*/ createSimulateContract({ - abi: timelockControllerAbi, - functionName: "onERC721Received", - }); + /*#__PURE__*/ createSimulateContract({ + abi: timelockControllerAbi, + functionName: 'onERC721Received', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"renounceRole"` */ export const simulateTimelockControllerRenounceRole = - /*#__PURE__*/ createSimulateContract({ - abi: timelockControllerAbi, - functionName: "renounceRole", - }); + /*#__PURE__*/ createSimulateContract({ + abi: timelockControllerAbi, + functionName: 'renounceRole', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"revokeRole"` */ export const simulateTimelockControllerRevokeRole = - /*#__PURE__*/ createSimulateContract({ - abi: timelockControllerAbi, - functionName: "revokeRole", - }); + /*#__PURE__*/ createSimulateContract({ + abi: timelockControllerAbi, + functionName: 'revokeRole', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"schedule"` */ export const simulateTimelockControllerSchedule = - /*#__PURE__*/ createSimulateContract({ - abi: timelockControllerAbi, - functionName: "schedule", - }); + /*#__PURE__*/ createSimulateContract({ + abi: timelockControllerAbi, + functionName: 'schedule', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"scheduleBatch"` */ export const simulateTimelockControllerScheduleBatch = - /*#__PURE__*/ createSimulateContract({ - abi: timelockControllerAbi, - functionName: "scheduleBatch", - }); + /*#__PURE__*/ createSimulateContract({ + abi: timelockControllerAbi, + functionName: 'scheduleBatch', + }) /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link timelockControllerAbi}__ and `functionName` set to `"updateDelay"` */ export const simulateTimelockControllerUpdateDelay = - /*#__PURE__*/ createSimulateContract({ - abi: timelockControllerAbi, - functionName: "updateDelay", - }); + /*#__PURE__*/ createSimulateContract({ + abi: timelockControllerAbi, + functionName: 'updateDelay', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link timelockControllerAbi}__ */ export const watchTimelockControllerEvent = - /*#__PURE__*/ createWatchContractEvent({ abi: timelockControllerAbi }); + /*#__PURE__*/ createWatchContractEvent({ abi: timelockControllerAbi }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link timelockControllerAbi}__ and `eventName` set to `"CallExecuted"` */ export const watchTimelockControllerCallExecutedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: timelockControllerAbi, - eventName: "CallExecuted", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: timelockControllerAbi, + eventName: 'CallExecuted', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link timelockControllerAbi}__ and `eventName` set to `"CallSalt"` */ export const watchTimelockControllerCallSaltEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: timelockControllerAbi, - eventName: "CallSalt", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: timelockControllerAbi, + eventName: 'CallSalt', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link timelockControllerAbi}__ and `eventName` set to `"CallScheduled"` */ export const watchTimelockControllerCallScheduledEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: timelockControllerAbi, - eventName: "CallScheduled", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: timelockControllerAbi, + eventName: 'CallScheduled', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link timelockControllerAbi}__ and `eventName` set to `"Cancelled"` */ export const watchTimelockControllerCancelledEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: timelockControllerAbi, - eventName: "Cancelled", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: timelockControllerAbi, + eventName: 'Cancelled', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link timelockControllerAbi}__ and `eventName` set to `"MinDelayChange"` */ export const watchTimelockControllerMinDelayChangeEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: timelockControllerAbi, - eventName: "MinDelayChange", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: timelockControllerAbi, + eventName: 'MinDelayChange', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link timelockControllerAbi}__ and `eventName` set to `"RoleAdminChanged"` */ export const watchTimelockControllerRoleAdminChangedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: timelockControllerAbi, - eventName: "RoleAdminChanged", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: timelockControllerAbi, + eventName: 'RoleAdminChanged', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link timelockControllerAbi}__ and `eventName` set to `"RoleGranted"` */ export const watchTimelockControllerRoleGrantedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: timelockControllerAbi, - eventName: "RoleGranted", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: timelockControllerAbi, + eventName: 'RoleGranted', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link timelockControllerAbi}__ and `eventName` set to `"RoleRevoked"` */ export const watchTimelockControllerRoleRevokedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: timelockControllerAbi, - eventName: "RoleRevoked", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: timelockControllerAbi, + eventName: 'RoleRevoked', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link transparentUpgradeableProxyAbi}__ */ export const watchTransparentUpgradeableProxyEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: transparentUpgradeableProxyAbi, - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: transparentUpgradeableProxyAbi, + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link transparentUpgradeableProxyAbi}__ and `eventName` set to `"AdminChanged"` */ export const watchTransparentUpgradeableProxyAdminChangedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: transparentUpgradeableProxyAbi, - eventName: "AdminChanged", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: transparentUpgradeableProxyAbi, + eventName: 'AdminChanged', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link transparentUpgradeableProxyAbi}__ and `eventName` set to `"BeaconUpgraded"` */ export const watchTransparentUpgradeableProxyBeaconUpgradedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: transparentUpgradeableProxyAbi, - eventName: "BeaconUpgraded", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: transparentUpgradeableProxyAbi, + eventName: 'BeaconUpgraded', + }) /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link transparentUpgradeableProxyAbi}__ and `eventName` set to `"Upgraded"` */ export const watchTransparentUpgradeableProxyUpgradedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: transparentUpgradeableProxyAbi, - eventName: "Upgraded", - }); + /*#__PURE__*/ createWatchContractEvent({ + abi: transparentUpgradeableProxyAbi, + eventName: 'Upgraded', + }) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link uniswapV3HarnessAbi}__ + */ +export const readUniswapV3Harness = /*#__PURE__*/ createReadContract({ + abi: uniswapV3HarnessAbi, +}) + +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link uniswapV3HarnessAbi}__ and `functionName` set to `"getLPValue"` + */ +export const readUniswapV3HarnessGetLpValue = /*#__PURE__*/ createReadContract({ + abi: uniswapV3HarnessAbi, + functionName: 'getLPValue', +}) diff --git a/packages/v1-core/src/structs.ts b/packages/v1-core/src/structs.ts index 385945db..d58ff7bc 100644 --- a/packages/v1-core/src/structs.ts +++ b/packages/v1-core/src/structs.ts @@ -6,7 +6,7 @@ import type { pwnSimpleLoanElasticProposalAbi, pwnSimpleLoanListProposalAbi, pwnSimpleLoanSimpleProposalAbi, - pwnSimpleLoanUniswapV3LPSetProposalAbi, + pwnSimpleLoanUniswapV3LpSetProposalAbi, } from "./generated.js"; // V1.3 @@ -53,7 +53,7 @@ export type V1_3SimpleLoanElasticChainlinkProposalStruct = >; type _V1_4SimpleLoanUniswapV3LpSetProposalEncodeFn = ExtractAbiFunction< - typeof pwnSimpleLoanUniswapV3LPSetProposalAbi[0], + typeof pwnSimpleLoanUniswapV3LpSetProposalAbi, "encodeProposalData" >; export type V1_4SimpleLoanUniswapV3LpSetProposalStruct = AbiParameterToPrimitiveType< diff --git a/packages/v1-core/wagmi.config.ts b/packages/v1-core/wagmi.config.ts index 69da884f..688ee473 100644 --- a/packages/v1-core/wagmi.config.ts +++ b/packages/v1-core/wagmi.config.ts @@ -2,13 +2,13 @@ import { defineConfig } from "@wagmi/cli"; import { foundry } from "@wagmi/cli/plugins"; import { actions } from "@wagmi/cli/plugins"; // eslint-disable-next-line @nx/enforce-module-boundaries -import deployments from "../../contracts/solidity/deployments/latest.json"; +import deployments from "../../contracts/solidity/deployments/protocol/v1.4.json"; export default defineConfig({ out: "src/generated.ts", plugins: [ foundry({ - deployments: deployments.chains, + deployments: deployments, project: "../../contracts/solidity", }), actions(), From 4e3526ccda7d5fbba7bff3e7ed7f037e553ced1e Mon Sep 17 00:00:00 2001 From: tohrxyz Date: Thu, 1 May 2025 19:15:18 +0200 Subject: [PATCH 04/19] feat: implement getCreditAmount method on univ3lpset proposal contract --- .../uniswap-v3-lp-set-proposal-contract.ts | 41 ++++++++++++++++++- .../v1-core/src/models/strategies/types.ts | 3 +- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/packages/v1-core/src/contracts/uniswap-v3-lp-set-proposal-contract.ts b/packages/v1-core/src/contracts/uniswap-v3-lp-set-proposal-contract.ts index a7f42bfe..70404f99 100644 --- a/packages/v1-core/src/contracts/uniswap-v3-lp-set-proposal-contract.ts +++ b/packages/v1-core/src/contracts/uniswap-v3-lp-set-proposal-contract.ts @@ -4,17 +4,26 @@ import { IServerAPI, ProposalWithHash, ProposalWithSignature, + readPwnSimpleLoanUniswapV3LpSetProposalGetCreditAmount, readPwnSimpleLoanUniswapV3LpSetProposalGetProposalHash, writePwnSimpleLoanUniswapV3LpSetProposalMakeProposal, type IProposalContract } from '../index.js' -import { getUniswapV3LpSetProposalContractAddress, Hex } from '@pwndao/sdk-core'; +import { AddressString, getUniswapV3LpSetProposalContractAddress, Hex, SupportedChain } from '@pwndao/sdk-core'; import { Address } from 'viem'; import { getAccount } from '@wagmi/core'; export interface IProposalUniswapV3LpSetContract extends IProposalContract { - // TODO: something? maybe getLPPoolValue ? + getCreditAmount( + creditAddress: AddressString, + collateralId: bigint, + token0Denominator: boolean, + feedIntermediaryDenominations: AddressString[], + feedInvertFlags: boolean[], + loanToValue: bigint, + chainId: SupportedChain + ): Promise; } export class UniswapV3LpSetProposalContract @@ -61,6 +70,34 @@ export class UniswapV3LpSetProposalContract }) as ProposalWithSignature; } + async getCreditAmount( + creditAddress: AddressString, + collateralId: bigint, + token0Denominator: boolean, + feedIntermediaryDenominations: AddressString[], + feedInvertFlags: boolean[], + loanToValue: bigint, + chainId: SupportedChain + ): Promise { + const data = await readPwnSimpleLoanUniswapV3LpSetProposalGetCreditAmount( + this.config, + { + address: getUniswapV3LpSetProposalContractAddress(chainId), + chainId, + args: [ + creditAddress, + collateralId, + token0Denominator, + feedIntermediaryDenominations, + feedInvertFlags, + loanToValue + ], + } + ) + + return data; + } + async createProposal( proposal: UniswapV3LpSetProposal, deps: { persistProposal: IServerAPI["post"]["persistProposal"] }, diff --git a/packages/v1-core/src/models/strategies/types.ts b/packages/v1-core/src/models/strategies/types.ts index 41ab9b4f..088a9ad2 100644 --- a/packages/v1-core/src/models/strategies/types.ts +++ b/packages/v1-core/src/models/strategies/types.ts @@ -13,6 +13,7 @@ import type { UniswapV3LpSetProposal } from "../proposals/uniswap-v3-lp-set-prop import type { IElasticProposalBase, IOracleProposalBase, + IUniswapV3LpSetProposalBase, } from "../proposals/proposal-base.js"; import type { ProposalType } from "../proposals/proposal-base.js"; @@ -33,7 +34,7 @@ export interface StrategyTerm { } export interface IProposalStrategy< - T extends IElasticProposalBase | IOracleProposalBase, + T extends IElasticProposalBase | IOracleProposalBase | IUniswapV3LpSetProposalBase, > { term: StrategyTerm; getProposalsParams( From e95818377ee3e09fa4ccffc1245a60683102fc17 Mon Sep 17 00:00:00 2001 From: tohrxyz Date: Thu, 1 May 2025 20:55:21 +0200 Subject: [PATCH 05/19] feat: proposal class, methods for creation --- packages/core/src/models/asset.ts | 1 + .../core/src/models/liquidity-position.ts | 28 +++ packages/core/src/models/types.ts | 3 +- .../create-uniswap-v3-lp-set-proposal.ts | 215 +++++++++++++++++- packages/v1-core/src/factories/helpers.ts | 4 +- .../src/models/proposals/proposal-base.ts | 4 +- .../proposals/uniswap-v3-lp-set-proposal.ts | 4 +- .../v1-core/src/models/strategies/types.ts | 8 + 8 files changed, 259 insertions(+), 8 deletions(-) create mode 100644 packages/core/src/models/liquidity-position.ts diff --git a/packages/core/src/models/asset.ts b/packages/core/src/models/asset.ts index ba8b8128..c58fe019 100644 --- a/packages/core/src/models/asset.ts +++ b/packages/core/src/models/asset.ts @@ -8,6 +8,7 @@ export enum MultiTokenCategory { NATIVE = 3, ERC721_COLLECTION = 420, ERC1155_COLLECTION = 421, + UNISWAP_V3_LP = 666, } interface IBaseAsset { diff --git a/packages/core/src/models/liquidity-position.ts b/packages/core/src/models/liquidity-position.ts new file mode 100644 index 00000000..1fb85f26 --- /dev/null +++ b/packages/core/src/models/liquidity-position.ts @@ -0,0 +1,28 @@ +import { AddressString } from "src/types.js"; +import { BaseAsset, MultiTokenCategory } from "./asset.js"; +import { SupportedChain } from "../chains.js"; + +export class UniswapV3Position extends BaseAsset { + static category = MultiTokenCategory.UNISWAP_V3_LP; + + tokenA: AddressString; + tokenB: AddressString; + tokenId: string; + + constructor( + chainId: SupportedChain, + address: AddressString, + decimals: number, + tokenA: AddressString, + tokenB: AddressString, + tokenId: string, + name?: string, + symbol?: string, + icon?: string, + ) { + super(chainId, address, decimals, false, UniswapV3Position.category, name, symbol, icon); + this.tokenA = tokenA; + this.tokenB = tokenB; + this.tokenId = tokenId; + } +} \ No newline at end of file diff --git a/packages/core/src/models/types.ts b/packages/core/src/models/types.ts index 2eb224ce..0196c60b 100644 --- a/packages/core/src/models/types.ts +++ b/packages/core/src/models/types.ts @@ -1,8 +1,9 @@ import type { FungibleNFT, NFT } from "./nft.js"; import type { ERC20Token } from "./token.js"; import { PoolToken } from "./pool-token.js"; +import { UniswapV3Position } from "./liquidity-position.js"; -export type Token = ERC20Token | NFT | FungibleNFT; +export type Token = ERC20Token | NFT | FungibleNFT | UniswapV3Position; export type ERC20TokenLike = ERC20Token | PoolToken; export const isPoolToken = (token: Partial): token is PoolToken => { diff --git a/packages/v1-core/src/factories/create-uniswap-v3-lp-set-proposal.ts b/packages/v1-core/src/factories/create-uniswap-v3-lp-set-proposal.ts index a52904ea..fb0d560e 100644 --- a/packages/v1-core/src/factories/create-uniswap-v3-lp-set-proposal.ts +++ b/packages/v1-core/src/factories/create-uniswap-v3-lp-set-proposal.ts @@ -1,8 +1,219 @@ -import type { IServerAPI } from "./types.js"; +import { IProposalUniswapV3LpSetContract } from "src/contracts/uniswap-v3-lp-set-proposal-contract.js"; +import type { BaseTerm, IServerAPI } from "./types.js"; +import { getLendingCommonProposalFields, ILoanContract } from "./helpers.js"; +import { IProposalStrategy, StrategyTerm } from "src/models/strategies/types.js"; +import { IUniswapV3LpSetProposalBase } from "src/models/proposals/proposal-base.js"; +import { AddressString, getLoanContractAddress, getUniqueCreditCollateralKey, Hex, UserWithNonceManager } from "@pwndao/sdk-core"; +import { UniswapV3LpSetProposal } from "src/models/proposals/uniswap-v3-lp-set-proposal.js"; +import { calculateExpirationTimestamp, calculateMinCreditAmount } from "src/utils/proposal-calculations.js"; +import { calculateDurationInSeconds } from "src/utils/proposal-calculations.js"; +import invariant from "ts-invariant"; +import { getFeedData } from "src/utils/chainlink-feeds.js"; +import { ChainsWithChainLinkFeedSupport } from "src/utils/chainlink-feeds.js"; +import { UniswapV3Position } from "../../../core/src/models/liquidity-position.js"; -export interface IProposalChainLinkAPIDeps { +export type CreateUniswapV3LpSetProposalParams = BaseTerm & { + tokenAAllowlist: string[]; + tokenBAllowlist: string[]; + isOffer: true; + acceptorController: string; + acceptorControllerData: string; + minCreditAmountPercentage: number; + minCreditAmount?: bigint; +} + +export class UniswapV3LpSetProposalStrategy + implements IProposalStrategy +{ + constructor( + public term: StrategyTerm, + public contract: IProposalUniswapV3LpSetContract, + public loanContract: ILoanContract, + ) {} + + async implementUniswapV3LpSetProposal( + params: CreateUniswapV3LpSetProposalParams, + contract: IProposalUniswapV3LpSetContract, + user: UserWithNonceManager, + ): Promise { + // Calculate expiration timestamp + const expiration = calculateExpirationTimestamp(params.expirationDays); + + // Get duration in seconds or timestamp + const durationOrDate = calculateDurationInSeconds(params.duration); + + // Get LTV value for the credit-collateral pair + const ltv = this.term.ltv[getUniqueCreditCollateralKey(params.credit, params.collateral)]; + + invariant(ltv, "LTV is undefined"); + + const feedData = getFeedData( + params.collateral.chainId as ChainsWithChainLinkFeedSupport, + params.collateral.address, + "underlyingAddress" in params.credit && params.credit.underlyingAddress + ? params.credit.underlyingAddress + : params.credit.address, + ); + + invariant(feedData, "We did not find a suitable price feed. Create classic elastic proposal instead."); + + invariant(params.collateral instanceof UniswapV3Position, "Collateral must be a UniswapV3Position"); + const creditAmount = await contract.getCreditAmount( + params.credit.address, + BigInt(params.collateral.tokenId), + true, + feedData.feedIntermediaryDenominations, + feedData.feedInvertFlags, + BigInt(ltv), + params.collateral.chainId, + ) + + const minCreditAmount = + params.minCreditAmount && !params.minCreditAmountPercentage + ? params.minCreditAmount + : params.minCreditAmountPercentage + ? calculateMinCreditAmount( + creditAmount, + params.minCreditAmountPercentage, + ) + : undefined; + + invariant(minCreditAmount, "Min credit amount is undefined"); + + // Get common proposal fields + const commonFields = await getLendingCommonProposalFields( + { + nonce: user.getNextNonce(params.collateral.chainId), + nonceSpace: user.getNonceSpace(params.collateral.chainId), + user, + collateral: params.collateral, + credit: params.credit, + creditAmount: params.creditAmount, + utilizedCreditId: params.utilizedCreditId, + durationOrDate, + apr: params.apr, + expiration, + loanContract: getLoanContractAddress(params.collateral.chainId), + relatedStrategyId: this.term.relatedStrategyId, + sourceOfFunds: params.sourceOfFunds, + isOffer: true, + }, + { + contract: contract, + loanContract: this.loanContract, + }, + ); + + // Create and return the UniswapV3LpSet proposal with formatted LTV for contract + return new UniswapV3LpSetProposal( + { + ...commonFields, + minCreditAmount, + isOffer: true, + feedIntermediaryDenominations: feedData.feedIntermediaryDenominations, + feedInvertFlags: feedData.feedInvertFlags, + loanToValue: BigInt(ltv), + chainId: params.collateral.chainId, + collateralCategory: params.collateral.category, + collateralAddress: params.collateral.address, + collateralId: BigInt(params.collateral.tokenId), + tokenAAllowlist: params.tokenAAllowlist.map(token => token as `0x${string}`), + tokenBAllowlist: params.tokenBAllowlist.map(token => token as `0x${string}`), + acceptorController: params.acceptorController as `0x${string}`, + acceptorControllerData: params.acceptorControllerData as `0x${string}`, + }, + params.collateral.chainId, + ); + } + + getProposalsParams( + creditAmount: bigint, + utilizedCreditId: Hex, + isOffer: boolean, + sourceOfFunds: AddressString | null, + minCreditAmount?: bigint, + ): CreateUniswapV3LpSetProposalParams[] { + + invariant(isOffer, "UniswapV3LpSetProposal is always an offer"); + invariant(this.term.creditAssets.length === 1, "UniswapV3LpSetProposal supports only one credit asset"); + invariant(this.term.collateralAssets.length === 1, "UniswapV3LpSetProposal supports only one collateral asset"); + + const credit = this.term.creditAssets[0]; + const collateral = this.term.collateralAssets[0]; + + return [ + { + collateral, + credit, + creditAmount, + utilizedCreditId, + apr: this.term.apr, + duration: { + days: this.term.durationDays, + date: undefined, + }, + ltv: this.term.ltv, + expirationDays: this.term.expirationDays, + isOffer: true, + sourceOfFunds, + minCreditAmount, + tokenAAllowlist: this.term.tokenAAllowlist || [], + tokenBAllowlist: this.term.tokenBAllowlist || [], + acceptorController: this.term.acceptorController || "", + acceptorControllerData: this.term.acceptorControllerData || "", + minCreditAmountPercentage: this.term.minCreditAmountPercentage || 0, + }, + ]; + } + + async createLendingProposals( + user: UserWithNonceManager, + creditAmount: bigint, + utilizedCreditId: Hex, + isOffer: boolean, + sourceOfFunds: AddressString | null, + minCreditAmount?: bigint, + ): Promise { + const paramsArray = this.getProposalsParams( + creditAmount, + utilizedCreditId, + isOffer, + sourceOfFunds, + minCreditAmount, + ); + + const result: UniswapV3LpSetProposal[] = []; + + const proposals = await Promise.allSettled( + paramsArray.map(async (params) => { + try { + return await this.implementUniswapV3LpSetProposal(params, this.contract, user); + } catch (error) { + console.error("Error creating UniswapV3LpSet proposal:", error); + throw error; + } + }), + ); + + for (const proposal of proposals) { + if (proposal.status === "fulfilled" && proposal.value) { + result.push(proposal.value); + } + } + + return result; + } +} + +export interface IProposalUniswapV3LpSetAPIDeps { persistProposal: IServerAPI["post"]["persistProposal"]; persistProposals: IServerAPI["post"]["persistProposals"]; updateNonces: IServerAPI["post"]["updateNonce"]; } +export type UniswapV3LpSetProposalDeps = { + api: IProposalUniswapV3LpSetAPIDeps; + contract: IProposalUniswapV3LpSetContract; + loanContract: ILoanContract; +}; + diff --git a/packages/v1-core/src/factories/helpers.ts b/packages/v1-core/src/factories/helpers.ts index f4556a63..7b5bde9c 100644 --- a/packages/v1-core/src/factories/helpers.ts +++ b/packages/v1-core/src/factories/helpers.ts @@ -21,6 +21,7 @@ import type { import type { ProposalWithHash, ProposalWithSignature } from "../models/strategies/types.js"; import type { Proposal } from "../models/strategies/types.js"; import type { ILenderSpec } from "../models/terms.js"; +import { IProposalUniswapV3LpSetContract } from "src/contracts/uniswap-v3-lp-set-proposal-contract.js"; type CommonProposalFieldsParams = { user: UserWithNonceManager; @@ -53,7 +54,8 @@ export interface IProposalContract { export type ProposalContract = | IProposalChainLinkContract - | IProposalElasticContract; + | IProposalElasticContract + | IProposalUniswapV3LpSetContract; export const getLendingCommonProposalFields = async ( params: CommonProposalFieldsParams & IProposalMisc, diff --git a/packages/v1-core/src/models/proposals/proposal-base.ts b/packages/v1-core/src/models/proposals/proposal-base.ts index ba64e1b1..59e075af 100644 --- a/packages/v1-core/src/models/proposals/proposal-base.ts +++ b/packages/v1-core/src/models/proposals/proposal-base.ts @@ -202,8 +202,8 @@ export interface IUniswapV3LpSetProposalBase extends Omit; durationDays: number; expirationDays: number; + + // 1.4 UniswapV3LpSet + tokenAAllowlist?: string[]; + tokenBAllowlist?: string[]; + + // V1.4 + acceptorController?: string; + acceptorControllerData?: string; /** * The minimum credit amount percentage for a proposal to be created * With 1e4 precision From 6be58a2c17bb6c1fc1867cd6950775449e824bca Mon Sep 17 00:00:00 2001 From: tohrxyz Date: Thu, 1 May 2025 21:03:29 +0200 Subject: [PATCH 06/19] feat: create univ3lpset proposal + makeProposal implementation --- packages/v1-core/src/actions/make-proposal.ts | 14 +++++++- .../create-uniswap-v3-lp-set-proposal.ts | 33 +++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/packages/v1-core/src/actions/make-proposal.ts b/packages/v1-core/src/actions/make-proposal.ts index acb68636..b9a35c29 100644 --- a/packages/v1-core/src/actions/make-proposal.ts +++ b/packages/v1-core/src/actions/make-proposal.ts @@ -4,7 +4,7 @@ import invariant from "ts-invariant"; import { createChainLinkElasticProposal } from "../factories/create-chain-link-proposal.js"; import { createElasticProposal } from "../factories/create-elastic-proposal.js"; import { ProposalType } from "../models/proposals/proposal-base.js"; - +import { createUniswapV3LpSetProposal } from "../factories/create-uniswap-v3-lp-set-proposal.js"; const proposalTypes = { [ProposalType.Elastic]: createElasticProposal, [ProposalType.ChainLink]: createChainLinkElasticProposal, @@ -14,6 +14,7 @@ const proposalTypes = { [ProposalType.Simple]: () => { throw new Error("Not implemented"); }, + [ProposalType.UniswapV3LpSet]: createUniswapV3LpSetProposal, }; export const makeProposal = async ( @@ -77,6 +78,17 @@ export const makeProposal = async ( ); break; } + case ProposalType.UniswapV3LpSet: { + const uniswapV3LpSetParams = proposalParams as Parameters< + typeof createUniswapV3LpSetProposal + >[0]; + const uniswapV3LpSetDeps = deps as Parameters[1]; + const proposal = await createUniswapV3LpSetProposal(uniswapV3LpSetParams, uniswapV3LpSetDeps, user); + proposalWithSignature = await uniswapV3LpSetDeps.contract.createOnChainProposal( + proposal, + ); + break; + } case ProposalType.DutchAuction: case ProposalType.Simple: throw new Error(`Proposal type ${proposalType} not yet implemented`); diff --git a/packages/v1-core/src/factories/create-uniswap-v3-lp-set-proposal.ts b/packages/v1-core/src/factories/create-uniswap-v3-lp-set-proposal.ts index fb0d560e..ce37bc52 100644 --- a/packages/v1-core/src/factories/create-uniswap-v3-lp-set-proposal.ts +++ b/packages/v1-core/src/factories/create-uniswap-v3-lp-set-proposal.ts @@ -217,3 +217,36 @@ export type UniswapV3LpSetProposalDeps = { loanContract: ILoanContract; }; +export const createUniswapV3LpSetProposal = async ( + params: CreateUniswapV3LpSetProposalParams, + deps: UniswapV3LpSetProposalDeps, + user: UserWithNonceManager, +): Promise => { + const dummyTerm: StrategyTerm = { + creditAssets: [params.credit], + collateralAssets: [params.collateral], + apr: params.apr, + durationDays: params.duration.days || 0, + ltv: params.ltv, + expirationDays: params.expirationDays, + minCreditAmountPercentage: params.minCreditAmountPercentage, + relatedStrategyId: params.relatedStrategyId, + }; + + const strategy = new UniswapV3LpSetProposalStrategy( + dummyTerm, + deps.contract, + deps.loanContract, + ); + + const proposals = await strategy.createLendingProposals( + user, + params.creditAmount, + params.utilizedCreditId, + params.isOffer, + params.sourceOfFunds, + params.minCreditAmount, + ); + + return proposals[0]; +} \ No newline at end of file From 49147712247150554126bf1eb9de445944ca1131 Mon Sep 17 00:00:00 2001 From: tohrxyz Date: Mon, 5 May 2025 15:10:31 +0200 Subject: [PATCH 07/19] fix: types, params, tests (mostly wip stuff) --- packages/core/src/addresses.test.ts | 7 ++++- .../create-uniswap-v3-lp-set-proposal.ts | 25 +++++++++------ .../models/proposals/chainlink-proposal.ts | 5 ++- .../src/models/proposals/elastic-proposal.ts | 4 ++- .../src/models/proposals/proposal-base.ts | 4 +-- .../proposals/uniswap-v3-lp-set-proposal.ts | 18 +++++------ .../v1-core/src/models/strategies/types.ts | 4 --- packages/v1-core/src/utils/utils.ts | 31 ++++++++++++++++++- 8 files changed, 68 insertions(+), 30 deletions(-) diff --git a/packages/core/src/addresses.test.ts b/packages/core/src/addresses.test.ts index d7874a7e..a44b806f 100644 --- a/packages/core/src/addresses.test.ts +++ b/packages/core/src/addresses.test.ts @@ -40,8 +40,13 @@ describe("Addresses", () => { [SupportedChain.UnichainSepolia, "0x1381F509f56f2aaA0faBD3012455901eA53F0BbD"], // note: no starknet version of tokenBundlerContract ])("should resolve correct bundler address for %s", (chain, expected) => { + if ( + !("tokenBundlerContract" in CHAIN_TO_ADDRESSES_MAP[chain]) // dont test if there's no tokenBundlerContract (considering V1.4) + ) { + return; + } expect( - CHAIN_TO_ADDRESSES_MAP[chain as V1_3_SUPPORTED_CHAINS] + (CHAIN_TO_ADDRESSES_MAP[chain as V1_3_SUPPORTED_CHAINS] as any) // hack, because V1_4Contracts doesnt have tokenBundlerContract, resulting in type error ?.tokenBundlerContract, ).toEqual(expected); }); diff --git a/packages/v1-core/src/factories/create-uniswap-v3-lp-set-proposal.ts b/packages/v1-core/src/factories/create-uniswap-v3-lp-set-proposal.ts index ce37bc52..b92d875c 100644 --- a/packages/v1-core/src/factories/create-uniswap-v3-lp-set-proposal.ts +++ b/packages/v1-core/src/factories/create-uniswap-v3-lp-set-proposal.ts @@ -1,15 +1,15 @@ -import { IProposalUniswapV3LpSetContract } from "src/contracts/uniswap-v3-lp-set-proposal-contract.js"; +import { IProposalUniswapV3LpSetContract } from '../contracts/uniswap-v3-lp-set-proposal-contract.js' import type { BaseTerm, IServerAPI } from "./types.js"; import { getLendingCommonProposalFields, ILoanContract } from "./helpers.js"; -import { IProposalStrategy, StrategyTerm } from "src/models/strategies/types.js"; -import { IUniswapV3LpSetProposalBase } from "src/models/proposals/proposal-base.js"; +import { IProposalStrategy, StrategyTerm } from "../models/strategies/types.js"; +import { IUniswapV3LpSetProposalBase } from "../models/proposals/proposal-base.js"; import { AddressString, getLoanContractAddress, getUniqueCreditCollateralKey, Hex, UserWithNonceManager } from "@pwndao/sdk-core"; -import { UniswapV3LpSetProposal } from "src/models/proposals/uniswap-v3-lp-set-proposal.js"; -import { calculateExpirationTimestamp, calculateMinCreditAmount } from "src/utils/proposal-calculations.js"; -import { calculateDurationInSeconds } from "src/utils/proposal-calculations.js"; +import { UniswapV3LpSetProposal } from "../models/proposals/uniswap-v3-lp-set-proposal.js"; +import { calculateExpirationTimestamp, calculateMinCreditAmount } from "../utils/proposal-calculations.js"; +import { calculateDurationInSeconds } from "../utils/proposal-calculations.js"; import invariant from "ts-invariant"; -import { getFeedData } from "src/utils/chainlink-feeds.js"; -import { ChainsWithChainLinkFeedSupport } from "src/utils/chainlink-feeds.js"; +import { getFeedData } from "../utils/chainlink-feeds.js"; +import { ChainsWithChainLinkFeedSupport } from "../utils/chainlink-feeds.js"; import { UniswapV3Position } from "../../../core/src/models/liquidity-position.js"; export type CreateUniswapV3LpSetProposalParams = BaseTerm & { @@ -132,6 +132,8 @@ export class UniswapV3LpSetProposalStrategy isOffer: boolean, sourceOfFunds: AddressString | null, minCreditAmount?: bigint, + tokenAAllowlist?: string[], + tokenBAllowlist?: string[], ): CreateUniswapV3LpSetProposalParams[] { invariant(isOffer, "UniswapV3LpSetProposal is always an offer"); @@ -140,6 +142,9 @@ export class UniswapV3LpSetProposalStrategy const credit = this.term.creditAssets[0]; const collateral = this.term.collateralAssets[0]; + + invariant(tokenAAllowlist && tokenAAllowlist.length > 0, "Token A allowlist is required"); + invariant(tokenBAllowlist && tokenBAllowlist.length > 0, "Token B allowlist is required"); return [ { @@ -157,8 +162,8 @@ export class UniswapV3LpSetProposalStrategy isOffer: true, sourceOfFunds, minCreditAmount, - tokenAAllowlist: this.term.tokenAAllowlist || [], - tokenBAllowlist: this.term.tokenBAllowlist || [], + tokenAAllowlist, + tokenBAllowlist, acceptorController: this.term.acceptorController || "", acceptorControllerData: this.term.acceptorControllerData || "", minCreditAmountPercentage: this.term.minCreditAmountPercentage || 0, diff --git a/packages/v1-core/src/models/proposals/chainlink-proposal.ts b/packages/v1-core/src/models/proposals/chainlink-proposal.ts index 5505b0a8..edb72a3d 100644 --- a/packages/v1-core/src/models/proposals/chainlink-proposal.ts +++ b/packages/v1-core/src/models/proposals/chainlink-proposal.ts @@ -99,7 +99,10 @@ export class ChainLinkProposal implements IOracleProposalBase { accruingInterestAPR: Number(this.accruingInterestAPR), durationOrDate: Number(this.durationOrDate), expiration: this.expiration, - allowedAcceptor: this.allowedAcceptor, + // allowedAcceptor: this.allowedAcceptor, // TODO: some type error, check later if correct + acceptorController: EMPTY_32_BYTES, + acceptorControllerData: EMPTY_32_BYTES, + proposer: this.proposer, proposerSpecHash: this.isOffer ? this.proposerSpecHash : EMPTY_32_BYTES, isOffer: this.isOffer ?? false, diff --git a/packages/v1-core/src/models/proposals/elastic-proposal.ts b/packages/v1-core/src/models/proposals/elastic-proposal.ts index c95ff064..8899c53b 100644 --- a/packages/v1-core/src/models/proposals/elastic-proposal.ts +++ b/packages/v1-core/src/models/proposals/elastic-proposal.ts @@ -57,7 +57,9 @@ export class ElasticProposal implements IElasticProposalBase { accruingInterestAPR: Number(this.accruingInterestAPR), durationOrDate: Number(this.durationOrDate), expiration: this.expiration, - allowedAcceptor: this.allowedAcceptor, + // allowedAcceptor: this.allowedAcceptor, // TODO: some type error, check later if correct + acceptorController: EMPTY_32_BYTES, // TODO: add this once V1.4 is implemented + acceptorControllerData: EMPTY_32_BYTES, // TODO: add this once V1.4 is implemented proposer: this.proposer, proposerSpecHash: this.isOffer ? this.proposerSpecHash : EMPTY_32_BYTES, isOffer: this.isOffer ?? false, diff --git a/packages/v1-core/src/models/proposals/proposal-base.ts b/packages/v1-core/src/models/proposals/proposal-base.ts index 59e075af..c3e3ff69 100644 --- a/packages/v1-core/src/models/proposals/proposal-base.ts +++ b/packages/v1-core/src/models/proposals/proposal-base.ts @@ -16,7 +16,7 @@ export enum ProposalType { DutchAuction = "pwn_contracts.v1_3simpleloandutchauctionproposal", Simple = "pwn_contracts.v1_3simpleloansimpleproposal", ChainLink = "pwn_contracts.v1_3simpleloanelasticchainlinkproposal", - UniswapV3LpSet = "pwn_contracts.v1_4simpleloanuniswapv3lpsetproposal", // TODO: check if this is correct + UniswapV3LpSet = "pwn_contracts.v1_4simpleloanuniswapv3lpsetproposal", } export interface IProposalMisc { @@ -183,7 +183,7 @@ export interface IOracleProposalBase type: ProposalType.ChainLink; } -export interface IUniswapV3LpSetProposalBase extends Omit { +export interface IUniswapV3LpSetProposalBase extends Omit { type: ProposalType.UniswapV3LpSet; /** diff --git a/packages/v1-core/src/models/proposals/uniswap-v3-lp-set-proposal.ts b/packages/v1-core/src/models/proposals/uniswap-v3-lp-set-proposal.ts index 491ddd86..76b6af47 100644 --- a/packages/v1-core/src/models/proposals/uniswap-v3-lp-set-proposal.ts +++ b/packages/v1-core/src/models/proposals/uniswap-v3-lp-set-proposal.ts @@ -1,8 +1,10 @@ -import { AddressString, Hex, MultiTokenCategory, SupportedChain } from "@pwndao/sdk-core"; +import { AddressString, EMPTY_32_BYTES, Hex, MultiTokenCategory, SupportedChain, V1_4_CHAIN_TO_ADDRESSES_MAP } from "@pwndao/sdk-core"; import { ProposalType, type IUniswapV3LpSetProposalBase } from "./proposal-base.js"; +import { V1_4SimpleLoanUniswapV3LpSetProposalStruct } from "src/structs.js"; export class UniswapV3LpSetProposal implements IUniswapV3LpSetProposalBase { type = ProposalType.UniswapV3LpSet as const; + proposalContract = V1_4_CHAIN_TO_ADDRESSES_MAP[SupportedChain.Sepolia].pwnSimpleLoanUniswapV3LpSetProposal; // TODO: later change to CHAIN_TO_ADDRESSES_MAP and dynamic chain id static ERC712_TYPES = { Proposal: [ @@ -41,6 +43,7 @@ export class UniswapV3LpSetProposal implements IUniswapV3LpSetProposalBase { this.checkCollateralStateFingerprint = proposal.checkCollateralStateFingerprint; this.collateralStateFingerprint = proposal.collateralStateFingerprint; this.collateralCategory = proposal.collateralCategory; + this.relatedStrategyId = proposal.relatedStrategyId; this.sourceOfFunds = proposal.sourceOfFunds; this.allowedAcceptor = proposal.allowedAcceptor; this.tokenAAllowlist = proposal.tokenAAllowlist; @@ -67,14 +70,8 @@ export class UniswapV3LpSetProposal implements IUniswapV3LpSetProposalBase { this.loanContract = proposal.loanContract; } - createProposalStruct(): any { + createProposalStruct(): V1_4SimpleLoanUniswapV3LpSetProposalStruct { return { - collateralCategory: this.collateralCategory, - collateralAddress: this.collateralAddress, - collateralId: this.collateralId, - checkCollateralStateFingerprint: this.checkCollateralStateFingerprint, - collateralStateFingerprint: this.collateralStateFingerprint, - tokenAAllowlist: this.tokenAAllowlist, tokenBAllowlist: this.tokenBAllowlist, creditAddress: this.creditAddress, @@ -88,8 +85,8 @@ export class UniswapV3LpSetProposal implements IUniswapV3LpSetProposalBase { accruingInterestAPR: Number(this.accruingInterestAPR), durationOrDate: Number(this.durationOrDate), expiration: this.expiration, - acceptorController: this.acceptorController, - acceptorControllerData: this.acceptorControllerData, + acceptorController: this.acceptorController ?? EMPTY_32_BYTES, + acceptorControllerData: this.acceptorControllerData ?? EMPTY_32_BYTES, proposer: this.proposer, proposerSpecHash: this.proposerSpecHash, isOffer: true, @@ -108,6 +105,7 @@ export class UniswapV3LpSetProposal implements IUniswapV3LpSetProposalBase { sourceOfFunds: AddressString | null; allowedAcceptor: AddressString; chainId: SupportedChain; + relatedStrategyId?: string | undefined; tokenAAllowlist: AddressString[]; tokenBAllowlist: AddressString[]; diff --git a/packages/v1-core/src/models/strategies/types.ts b/packages/v1-core/src/models/strategies/types.ts index dfe70a2a..1466cc0a 100644 --- a/packages/v1-core/src/models/strategies/types.ts +++ b/packages/v1-core/src/models/strategies/types.ts @@ -25,10 +25,6 @@ export interface StrategyTerm { durationDays: number; expirationDays: number; - // 1.4 UniswapV3LpSet - tokenAAllowlist?: string[]; - tokenBAllowlist?: string[]; - // V1.4 acceptorController?: string; acceptorControllerData?: string; diff --git a/packages/v1-core/src/utils/utils.ts b/packages/v1-core/src/utils/utils.ts index 2615fcb3..0eab4a8d 100644 --- a/packages/v1-core/src/utils/utils.ts +++ b/packages/v1-core/src/utils/utils.ts @@ -9,8 +9,10 @@ import type { ElasticProposal } from "../models/proposals/elastic-proposal.js"; import type { IElasticProposalBase, IOracleProposalBase, + IUniswapV3LpSetProposalBase, } from "../models/proposals/proposal-base.js"; import type { ProposalWithSignature } from "../models/strategies/types.js"; +import type { UniswapV3LpSetProposal } from "src/models/proposals/uniswap-v3-lp-set-proposal.js"; /** * Converts common proposal fields to backend format @@ -108,13 +110,36 @@ export const encodeChainLinkProposalForBackend = ( } as V13CreateSimpleLoanChainlinkProposalRequestSchemaRequest; }; +/** + * Encodes a UniswapV3LpSetProposal for the backend + * @param proposal UniswapV3LpSetProposal instance + * @returns Backend-formatted uniswap v3 lp set proposal data + */ +export const encodeUniswapV3LpSetProposalForBackend = ( + proposal: UniswapV3LpSetProposal, +): CreateProposalRequestSchemaRequest => { + const baseData = getBaseBackendProposalData( + proposal as ProposalWithSignature, + ); + + return { + ...baseData, + token_a_allowlist: proposal.tokenAAllowlist, + token_b_allowlist: proposal.tokenBAllowlist, + acceptor_controller: proposal.acceptorController, + acceptor_controller_data: proposal.acceptorControllerData, + is_offer: true, + // biome-ignore lint/suspicious/noExplicitAny: Dont have type yet + } as any; // TODO: add types from backend +}; + /** * Detects the proposal type and encodes it accordingly for the backend * @param proposal Any proposal instance * @returns Backend-formatted proposal data */ export const encodeProposalForBackend = ( - proposal: IElasticProposalBase | IOracleProposalBase, + proposal: IElasticProposalBase | IOracleProposalBase | IUniswapV3LpSetProposalBase, ): CreateProposalRequestSchemaRequest => { // Detect the proposal type if ( @@ -128,6 +153,10 @@ export const encodeProposalForBackend = ( return encodeElasticProposalForBackend(proposal as ElasticProposal); } + if ("tokenAAllowlist" in proposal && "tokenBAllowlist" in proposal) { + return encodeUniswapV3LpSetProposalForBackend(proposal as UniswapV3LpSetProposal); + } + // If no specific type is detected, use the base encoder return getBaseBackendProposalData( proposal as unknown as ProposalWithSignature, From 0b30e1318fee57af9b7260e045f64a3d170b6260 Mon Sep 17 00:00:00 2001 From: tohrxyz Date: Mon, 5 May 2025 15:20:18 +0200 Subject: [PATCH 08/19] refactor: format --- packages/core/src/models/liquidity-position.ts | 4 ++-- packages/core/src/models/types.ts | 2 +- .../contracts/uniswap-v3-lp-set-proposal-contract.ts | 10 +++++----- .../factories/create-uniswap-v3-lp-set-proposal.ts | 12 ++++++------ packages/v1-core/src/factories/helpers.ts | 2 +- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/packages/core/src/models/liquidity-position.ts b/packages/core/src/models/liquidity-position.ts index 1fb85f26..6d4df944 100644 --- a/packages/core/src/models/liquidity-position.ts +++ b/packages/core/src/models/liquidity-position.ts @@ -1,6 +1,6 @@ -import { AddressString } from "src/types.js"; +import type { AddressString } from "src/types.js"; import { BaseAsset, MultiTokenCategory } from "./asset.js"; -import { SupportedChain } from "../chains.js"; +import type { SupportedChain } from "../chains.js"; export class UniswapV3Position extends BaseAsset { static category = MultiTokenCategory.UNISWAP_V3_LP; diff --git a/packages/core/src/models/types.ts b/packages/core/src/models/types.ts index 0196c60b..766a5b78 100644 --- a/packages/core/src/models/types.ts +++ b/packages/core/src/models/types.ts @@ -1,7 +1,7 @@ import type { FungibleNFT, NFT } from "./nft.js"; import type { ERC20Token } from "./token.js"; import { PoolToken } from "./pool-token.js"; -import { UniswapV3Position } from "./liquidity-position.js"; +import type { UniswapV3Position } from "./liquidity-position.js"; export type Token = ERC20Token | NFT | FungibleNFT | UniswapV3Position; export type ERC20TokenLike = ERC20Token | PoolToken; diff --git a/packages/v1-core/src/contracts/uniswap-v3-lp-set-proposal-contract.ts b/packages/v1-core/src/contracts/uniswap-v3-lp-set-proposal-contract.ts index 70404f99..42f4b78d 100644 --- a/packages/v1-core/src/contracts/uniswap-v3-lp-set-proposal-contract.ts +++ b/packages/v1-core/src/contracts/uniswap-v3-lp-set-proposal-contract.ts @@ -1,16 +1,16 @@ import { UniswapV3LpSetProposal } from 'src/models/proposals/uniswap-v3-lp-set-proposal.js' import { BaseProposalContract, - IServerAPI, - ProposalWithHash, - ProposalWithSignature, + type IServerAPI, + type ProposalWithHash, + type ProposalWithSignature, readPwnSimpleLoanUniswapV3LpSetProposalGetCreditAmount, readPwnSimpleLoanUniswapV3LpSetProposalGetProposalHash, writePwnSimpleLoanUniswapV3LpSetProposalMakeProposal, type IProposalContract } from '../index.js' -import { AddressString, getUniswapV3LpSetProposalContractAddress, Hex, SupportedChain } from '@pwndao/sdk-core'; -import { Address } from 'viem'; +import { type AddressString, getUniswapV3LpSetProposalContractAddress, type Hex, type SupportedChain } from '@pwndao/sdk-core'; +import type { Address } from 'viem'; import { getAccount } from '@wagmi/core'; export interface IProposalUniswapV3LpSetContract diff --git a/packages/v1-core/src/factories/create-uniswap-v3-lp-set-proposal.ts b/packages/v1-core/src/factories/create-uniswap-v3-lp-set-proposal.ts index b92d875c..981f4cb1 100644 --- a/packages/v1-core/src/factories/create-uniswap-v3-lp-set-proposal.ts +++ b/packages/v1-core/src/factories/create-uniswap-v3-lp-set-proposal.ts @@ -1,15 +1,15 @@ -import { IProposalUniswapV3LpSetContract } from '../contracts/uniswap-v3-lp-set-proposal-contract.js' +import type { IProposalUniswapV3LpSetContract } from '../contracts/uniswap-v3-lp-set-proposal-contract.js' import type { BaseTerm, IServerAPI } from "./types.js"; -import { getLendingCommonProposalFields, ILoanContract } from "./helpers.js"; -import { IProposalStrategy, StrategyTerm } from "../models/strategies/types.js"; -import { IUniswapV3LpSetProposalBase } from "../models/proposals/proposal-base.js"; -import { AddressString, getLoanContractAddress, getUniqueCreditCollateralKey, Hex, UserWithNonceManager } from "@pwndao/sdk-core"; +import { getLendingCommonProposalFields, type ILoanContract } from "./helpers.js"; +import type { IProposalStrategy, StrategyTerm } from "../models/strategies/types.js"; +import type { IUniswapV3LpSetProposalBase } from "../models/proposals/proposal-base.js"; +import { type AddressString, getLoanContractAddress, getUniqueCreditCollateralKey, type Hex, type UserWithNonceManager } from "@pwndao/sdk-core"; import { UniswapV3LpSetProposal } from "../models/proposals/uniswap-v3-lp-set-proposal.js"; import { calculateExpirationTimestamp, calculateMinCreditAmount } from "../utils/proposal-calculations.js"; import { calculateDurationInSeconds } from "../utils/proposal-calculations.js"; import invariant from "ts-invariant"; import { getFeedData } from "../utils/chainlink-feeds.js"; -import { ChainsWithChainLinkFeedSupport } from "../utils/chainlink-feeds.js"; +import type { ChainsWithChainLinkFeedSupport } from "../utils/chainlink-feeds.js"; import { UniswapV3Position } from "../../../core/src/models/liquidity-position.js"; export type CreateUniswapV3LpSetProposalParams = BaseTerm & { diff --git a/packages/v1-core/src/factories/helpers.ts b/packages/v1-core/src/factories/helpers.ts index 7b5bde9c..bb07cb02 100644 --- a/packages/v1-core/src/factories/helpers.ts +++ b/packages/v1-core/src/factories/helpers.ts @@ -21,7 +21,7 @@ import type { import type { ProposalWithHash, ProposalWithSignature } from "../models/strategies/types.js"; import type { Proposal } from "../models/strategies/types.js"; import type { ILenderSpec } from "../models/terms.js"; -import { IProposalUniswapV3LpSetContract } from "src/contracts/uniswap-v3-lp-set-proposal-contract.js"; +import type { IProposalUniswapV3LpSetContract } from "src/contracts/uniswap-v3-lp-set-proposal-contract.js"; type CommonProposalFieldsParams = { user: UserWithNonceManager; From e1bf872666937b6deb4e784315f9b431814e86ff Mon Sep 17 00:00:00 2001 From: tohrxyz Date: Mon, 5 May 2025 18:00:50 +0200 Subject: [PATCH 09/19] fix: itterate fixes based on univ3lpset test --- .../core/src/models/liquidity-position.ts | 5 +- packages/core/src/test-utils/index.ts | 10 ++ .../v1-core/src/actions/make-proposal.test.ts | 95 +++++++++++++++++++ .../create-uniswap-v3-lp-set-proposal.ts | 6 ++ 4 files changed, 112 insertions(+), 4 deletions(-) diff --git a/packages/core/src/models/liquidity-position.ts b/packages/core/src/models/liquidity-position.ts index 6d4df944..d6e99fbe 100644 --- a/packages/core/src/models/liquidity-position.ts +++ b/packages/core/src/models/liquidity-position.ts @@ -12,15 +12,12 @@ export class UniswapV3Position extends BaseAsset { constructor( chainId: SupportedChain, address: AddressString, - decimals: number, tokenA: AddressString, tokenB: AddressString, tokenId: string, - name?: string, - symbol?: string, icon?: string, ) { - super(chainId, address, decimals, false, UniswapV3Position.category, name, symbol, icon); + super(chainId, address, 0, false, UniswapV3Position.category, "Uniswap V3 Positions NFT-V1", "UNI-V3-POS", icon); this.tokenA = tokenA; this.tokenB = tokenB; this.tokenId = tokenId; diff --git a/packages/core/src/test-utils/index.ts b/packages/core/src/test-utils/index.ts index e7de1539..55cffc1b 100644 --- a/packages/core/src/test-utils/index.ts +++ b/packages/core/src/test-utils/index.ts @@ -5,6 +5,7 @@ import { User, UserWithNonceManager } from "../models/user.js"; import type { AddressString } from "../types.js"; import { PoolToken } from "../models/pool-token.js"; import type { SupportedProtocol } from "../models/pool-token.js"; +import { UniswapV3Position } from "../models/liquidity-position.js"; export const generateAddress = () => { return faker.finance.ethereumAddress() as AddressString; @@ -69,4 +70,13 @@ export const getMockPoolToken = ( ) => { const defaultAddress = address ?? generateAddress(); return new PoolToken(chain, defaultAddress, underlyingAddress, decimals, protocol, name, symbol); +}; + +export const getMockLiquidityPoolToken = ( + chain: SupportedChain, + tokenA: AddressString, + tokenB: AddressString, + tokenId: string, +) => { + return new UniswapV3Position(chain, "0x1238536071E1c677A632429e3655c799b22cDA52", tokenA, tokenB, tokenId); }; \ No newline at end of file diff --git a/packages/v1-core/src/actions/make-proposal.test.ts b/packages/v1-core/src/actions/make-proposal.test.ts index a48a07ab..25268924 100644 --- a/packages/v1-core/src/actions/make-proposal.test.ts +++ b/packages/v1-core/src/actions/make-proposal.test.ts @@ -5,6 +5,7 @@ import { ZERO_ADDRESS, ZERO_FINGERPRINT, getLoanContractAddress, + getMockLiquidityPoolToken, getUniqueCreditCollateralKey, } from "@pwndao/sdk-core"; import { @@ -260,6 +261,100 @@ describe("Test make proposal", () => { expect(proposal.relatedStrategyId).toBe("1"); }); + it("should assemble uniswap v3 lp set proposal", async () => { + const contractMock = { + createProposal: vi.fn().mockImplementation((p) => p), + getCollateralAmount: vi.fn().mockImplementation(() => 0n), + createOnChainProposal: vi.fn().mockImplementation((p) => p), + getProposalHash: vi.fn().mockImplementation(() => "0x123"), + getCreditAmount: vi.fn().mockImplementation(() => 0n), + createMultiProposal: vi.fn().mockImplementation((p) => p), + }; + + const loanContractMock = { + getLenderSpecHash: vi + .fn() + .mockImplementation(() => Promise.resolve(proposerSpecHash)), + }; + + const sepoliaAssetsWithPriceFeeds = { + weth: "0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9" as AddressString, + usdc: "0x94a9D9AC8a22534E3FaCa9F4e7F2E2cf85d5E4C8" as AddressString, + } + + const user = getMockUserWithNonceManager(user_address, [SupportedChain.Sepolia]); + + expect(user.nonces[SupportedChain.Sepolia]?.[0]).toBe(0n); + + const proposal = await makeProposal( + user, + ProposalType.UniswapV3LpSet, + { + collateral: getMockLiquidityPoolToken(SupportedChain.Sepolia, sepoliaAssetsWithPriceFeeds.weth, sepoliaAssetsWithPriceFeeds.usdc, "1"), + credit: getMockToken(SupportedChain.Sepolia, sepoliaAssetsWithPriceFeeds.usdc), + creditAmount, + ltv: { + [getUniqueCreditCollateralKey( + getMockToken(SupportedChain.Sepolia, sepoliaAssetsWithPriceFeeds.usdc), + getMockToken(SupportedChain.Sepolia, "0x1238536071E1c677A632429e3655c799b22cDA52"), + )]: Number(ltv), + }, + apr: { + [getUniqueCreditCollateralKey( + getMockToken(SupportedChain.Sepolia, sepoliaAssetsWithPriceFeeds.usdc), + getMockToken(SupportedChain.Sepolia, "0x1238536071E1c677A632429e3655c799b22cDA52"), + )]: apr, + }, + duration: { + days: durationDays, + date: undefined, + }, + expirationDays, + utilizedCreditId: generateAddress(), + isOffer: true, + sourceOfFunds: user_address, + tokenAAllowlist: [sepoliaAssetsWithPriceFeeds.weth, sepoliaAssetsWithPriceFeeds.usdc], + tokenBAllowlist: [sepoliaAssetsWithPriceFeeds.weth, sepoliaAssetsWithPriceFeeds.usdc], + acceptorController: user_address, + acceptorControllerData: "0x", + minCreditAmountPercentage: 3, + }, + { + api: { + persistProposal: vi.fn().mockImplementation((p) => p), + persistProposals: vi.fn().mockImplementation((p) => p), + updateNonces: vi.fn().mockImplementation((p) => p), + }, + contract: contractMock, + loanContract: loanContractMock, + }, + ); + + expect(contractMock.createOnChainProposal).toHaveBeenCalled(); + + expect(proposal).toBeDefined(); + expect(proposal.proposerSpecHash).toBe(proposerSpecHash); + expect(proposal.collateralAddress).toBe(collateralAddress); + expect(proposal.creditAddress).toBe(creditAddress); + expect(proposal.availableCreditLimit).toBe(1n * 10n ** 18n); + expect(proposal.minCreditAmount).toBe(3n * 10n ** (18n - 2n)); // 3% of credit amount + expect(proposal.accruingInterestAPR).toBe(apr); + + const expectedExpiration = + Math.floor(date.getTime() / 1000) + expirationDays * 24 * 60 * 60; + expect(proposal.expiration).toBe(expectedExpiration); + expect(expectedExpiration).toBe(1740960000); + + expect(proposal.durationOrDate).toBe(durationDays * 24 * 60 * 60); + expect(proposal.isOffer).toBe(true); + expect(proposal.refinancingLoanId).toBe(0n); + expect(proposal.nonceSpace).toBe(0n); + expect(proposal.nonce).toBe(0n); + expect(proposal.loanContract).toBe( + getLoanContractAddress(SupportedChain.Sepolia), + ); + }); + it("should assemble elastic proposal with token that has underlyingAddress property", async () => { const contractMock = { createProposal: vi.fn().mockImplementation((p) => p), diff --git a/packages/v1-core/src/factories/create-uniswap-v3-lp-set-proposal.ts b/packages/v1-core/src/factories/create-uniswap-v3-lp-set-proposal.ts index 981f4cb1..70b688d1 100644 --- a/packages/v1-core/src/factories/create-uniswap-v3-lp-set-proposal.ts +++ b/packages/v1-core/src/factories/create-uniswap-v3-lp-set-proposal.ts @@ -178,6 +178,8 @@ export class UniswapV3LpSetProposalStrategy isOffer: boolean, sourceOfFunds: AddressString | null, minCreditAmount?: bigint, + tokenAAllowlist?: string[], + tokenBAllowlist?: string[], ): Promise { const paramsArray = this.getProposalsParams( creditAmount, @@ -185,6 +187,8 @@ export class UniswapV3LpSetProposalStrategy isOffer, sourceOfFunds, minCreditAmount, + tokenAAllowlist, + tokenBAllowlist, ); const result: UniswapV3LpSetProposal[] = []; @@ -251,6 +255,8 @@ export const createUniswapV3LpSetProposal = async ( params.isOffer, params.sourceOfFunds, params.minCreditAmount, + params.tokenAAllowlist, + params.tokenBAllowlist, ); return proposals[0]; From 0ce433f829006719cc3db27d651ed82e166dc768 Mon Sep 17 00:00:00 2001 From: tohrxyz Date: Mon, 5 May 2025 20:43:48 +0200 Subject: [PATCH 10/19] feat: uni v3 lp individual (borrower side) proposal added --- packages/core/src/addresses.ts | 2 + packages/core/src/utils.ts | 10 + .../v1-core/src/actions/make-proposal.test.ts | 186 ++++++------ packages/v1-core/src/actions/make-proposal.ts | 13 + packages/v1-core/src/actions/types.ts | 7 +- packages/v1-core/src/contracts/index.ts | 2 + ...swap-v3-lp-individual-proposal-contract.ts | 150 ++++++++++ .../uniswap-v3-lp-set-proposal-contract.ts | 4 +- ...reate-uniswap-v3-lp-individual-proposal.ts | 268 ++++++++++++++++++ .../create-uniswap-v3-lp-set-proposal.ts | 3 + packages/v1-core/src/factories/helpers.ts | 5 +- .../src/models/proposals/proposal-base.ts | 12 + .../uniswap-v3-lp-individual-proposal.ts | 132 +++++++++ .../v1-core/src/models/strategies/types.ts | 7 +- packages/v1-core/src/structs.ts | 9 + packages/v1-core/src/utils/utils.ts | 36 ++- 16 files changed, 741 insertions(+), 105 deletions(-) create mode 100644 packages/v1-core/src/contracts/uniswap-v3-lp-individual-proposal-contract.ts create mode 100644 packages/v1-core/src/factories/create-uniswap-v3-lp-individual-proposal.ts create mode 100644 packages/v1-core/src/models/proposals/uniswap-v3-lp-individual-proposal.ts diff --git a/packages/core/src/addresses.ts b/packages/core/src/addresses.ts index c7aca0b6..c16e3142 100644 --- a/packages/core/src/addresses.ts +++ b/packages/core/src/addresses.ts @@ -25,6 +25,7 @@ type V1_3_Contracts = ContractAddresses & { type V1_4_Contracts = Omit & { pwnSimpleLoanUniswapV3LpSetProposal: AddressString; + pwnSimpleLoanUniswapV3IndividualProposal: AddressString; }; // starknet has no tokenBundlerContract by now @@ -75,6 +76,7 @@ export const PWN_V1_4_CONTRACTS: Omit = ...PWN_V1_3_CONTRACTS, pwnSimpleLoanUniswapV3LpSetProposal: "0x4D067c921AC90cC4b1e962ea0e743Ef8d85Fb0E9", pwnSimpleLoanElasticChainlinkProposal: "0x39fd308D651F5add5A4826D12Bf92d9D91E732AC", + pwnSimpleLoanUniswapV3IndividualProposal: "0xF966696BE0623447679AC830FC5bB7bDB15FEAB4", }; // Mainnet contracts diff --git a/packages/core/src/utils.ts b/packages/core/src/utils.ts index 5612bcbd..cf5f8526 100644 --- a/packages/core/src/utils.ts +++ b/packages/core/src/utils.ts @@ -52,6 +52,16 @@ export const getUniswapV3LpSetProposalContractAddress = ( throw new Error(`UniswapV3LpSetProposalContractAddress not deployed on chain ${chainId}`); }; +export const getUniswapV3IndividualProposalContractAddress = ( + chainId: SupportedChain, +) => { + if (chainId === SupportedChain.Sepolia) { + return CHAIN_TO_ADDRESSES_MAP[chainId].pwnSimpleLoanUniswapV3IndividualProposal; + } + + throw new Error(`UniswapV3IndividualProposalContractAddress not deployed on chain ${chainId}`); +}; + export const typeSafeObjectKeys = (obj: T) => { return Object.keys(obj) as Array } diff --git a/packages/v1-core/src/actions/make-proposal.test.ts b/packages/v1-core/src/actions/make-proposal.test.ts index 25268924..1e30558f 100644 --- a/packages/v1-core/src/actions/make-proposal.test.ts +++ b/packages/v1-core/src/actions/make-proposal.test.ts @@ -5,7 +5,7 @@ import { ZERO_ADDRESS, ZERO_FINGERPRINT, getLoanContractAddress, - getMockLiquidityPoolToken, + // getMockLiquidityPoolToken, getUniqueCreditCollateralKey, } from "@pwndao/sdk-core"; import { @@ -261,99 +261,99 @@ describe("Test make proposal", () => { expect(proposal.relatedStrategyId).toBe("1"); }); - it("should assemble uniswap v3 lp set proposal", async () => { - const contractMock = { - createProposal: vi.fn().mockImplementation((p) => p), - getCollateralAmount: vi.fn().mockImplementation(() => 0n), - createOnChainProposal: vi.fn().mockImplementation((p) => p), - getProposalHash: vi.fn().mockImplementation(() => "0x123"), - getCreditAmount: vi.fn().mockImplementation(() => 0n), - createMultiProposal: vi.fn().mockImplementation((p) => p), - }; - - const loanContractMock = { - getLenderSpecHash: vi - .fn() - .mockImplementation(() => Promise.resolve(proposerSpecHash)), - }; - - const sepoliaAssetsWithPriceFeeds = { - weth: "0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9" as AddressString, - usdc: "0x94a9D9AC8a22534E3FaCa9F4e7F2E2cf85d5E4C8" as AddressString, - } - - const user = getMockUserWithNonceManager(user_address, [SupportedChain.Sepolia]); - - expect(user.nonces[SupportedChain.Sepolia]?.[0]).toBe(0n); - - const proposal = await makeProposal( - user, - ProposalType.UniswapV3LpSet, - { - collateral: getMockLiquidityPoolToken(SupportedChain.Sepolia, sepoliaAssetsWithPriceFeeds.weth, sepoliaAssetsWithPriceFeeds.usdc, "1"), - credit: getMockToken(SupportedChain.Sepolia, sepoliaAssetsWithPriceFeeds.usdc), - creditAmount, - ltv: { - [getUniqueCreditCollateralKey( - getMockToken(SupportedChain.Sepolia, sepoliaAssetsWithPriceFeeds.usdc), - getMockToken(SupportedChain.Sepolia, "0x1238536071E1c677A632429e3655c799b22cDA52"), - )]: Number(ltv), - }, - apr: { - [getUniqueCreditCollateralKey( - getMockToken(SupportedChain.Sepolia, sepoliaAssetsWithPriceFeeds.usdc), - getMockToken(SupportedChain.Sepolia, "0x1238536071E1c677A632429e3655c799b22cDA52"), - )]: apr, - }, - duration: { - days: durationDays, - date: undefined, - }, - expirationDays, - utilizedCreditId: generateAddress(), - isOffer: true, - sourceOfFunds: user_address, - tokenAAllowlist: [sepoliaAssetsWithPriceFeeds.weth, sepoliaAssetsWithPriceFeeds.usdc], - tokenBAllowlist: [sepoliaAssetsWithPriceFeeds.weth, sepoliaAssetsWithPriceFeeds.usdc], - acceptorController: user_address, - acceptorControllerData: "0x", - minCreditAmountPercentage: 3, - }, - { - api: { - persistProposal: vi.fn().mockImplementation((p) => p), - persistProposals: vi.fn().mockImplementation((p) => p), - updateNonces: vi.fn().mockImplementation((p) => p), - }, - contract: contractMock, - loanContract: loanContractMock, - }, - ); - - expect(contractMock.createOnChainProposal).toHaveBeenCalled(); - - expect(proposal).toBeDefined(); - expect(proposal.proposerSpecHash).toBe(proposerSpecHash); - expect(proposal.collateralAddress).toBe(collateralAddress); - expect(proposal.creditAddress).toBe(creditAddress); - expect(proposal.availableCreditLimit).toBe(1n * 10n ** 18n); - expect(proposal.minCreditAmount).toBe(3n * 10n ** (18n - 2n)); // 3% of credit amount - expect(proposal.accruingInterestAPR).toBe(apr); + // it("should assemble uniswap v3 lp set proposal", async () => { + // const contractMock = { + // createProposal: vi.fn().mockImplementation((p) => p), + // getCollateralAmount: vi.fn().mockImplementation(() => 0n), + // createOnChainProposal: vi.fn().mockImplementation((p) => p), + // getProposalHash: vi.fn().mockImplementation(() => "0x123"), + // getCreditAmount: vi.fn().mockImplementation(() => 0n), + // createMultiProposal: vi.fn().mockImplementation((p) => p), + // }; + + // const loanContractMock = { + // getLenderSpecHash: vi + // .fn() + // .mockImplementation(() => Promise.resolve(proposerSpecHash)), + // }; + + // const sepoliaAssetsWithPriceFeeds = { + // weth: "0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9" as AddressString, + // usdc: "0x94a9D9AC8a22534E3FaCa9F4e7F2E2cf85d5E4C8" as AddressString, + // } + + // const user = getMockUserWithNonceManager(user_address, [SupportedChain.Sepolia]); + + // expect(user.nonces[SupportedChain.Sepolia]?.[0]).toBe(0n); + + // const proposal = await makeProposal( + // user, + // ProposalType.UniswapV3LpSet, + // { + // collateral: getMockLiquidityPoolToken(SupportedChain.Sepolia, sepoliaAssetsWithPriceFeeds.weth, sepoliaAssetsWithPriceFeeds.usdc, "1"), + // credit: getMockToken(SupportedChain.Sepolia, sepoliaAssetsWithPriceFeeds.usdc), + // creditAmount, + // ltv: { + // [getUniqueCreditCollateralKey( + // getMockToken(SupportedChain.Sepolia, sepoliaAssetsWithPriceFeeds.usdc), + // getMockToken(SupportedChain.Sepolia, "0x1238536071E1c677A632429e3655c799b22cDA52"), + // )]: Number(ltv), + // }, + // apr: { + // [getUniqueCreditCollateralKey( + // getMockToken(SupportedChain.Sepolia, sepoliaAssetsWithPriceFeeds.usdc), + // getMockToken(SupportedChain.Sepolia, "0x1238536071E1c677A632429e3655c799b22cDA52"), + // )]: apr, + // }, + // duration: { + // days: durationDays, + // date: undefined, + // }, + // expirationDays, + // utilizedCreditId: generateAddress(), + // isOffer: true, + // sourceOfFunds: user_address, + // tokenAAllowlist: [sepoliaAssetsWithPriceFeeds.weth, sepoliaAssetsWithPriceFeeds.usdc], + // tokenBAllowlist: [sepoliaAssetsWithPriceFeeds.weth, sepoliaAssetsWithPriceFeeds.usdc], + // acceptorController: user_address, + // acceptorControllerData: "0x", + // minCreditAmountPercentage: 3, + // }, + // { + // api: { + // persistProposal: vi.fn().mockImplementation((p) => p), + // persistProposals: vi.fn().mockImplementation((p) => p), + // updateNonces: vi.fn().mockImplementation((p) => p), + // }, + // contract: contractMock, + // loanContract: loanContractMock, + // }, + // ); + + // expect(contractMock.createOnChainProposal).toHaveBeenCalled(); + + // expect(proposal).toBeDefined(); + // expect(proposal.proposerSpecHash).toBe(proposerSpecHash); + // expect(proposal.collateralAddress).toBe(collateralAddress); + // expect(proposal.creditAddress).toBe(creditAddress); + // expect(proposal.availableCreditLimit).toBe(1n * 10n ** 18n); + // expect(proposal.minCreditAmount).toBe(3n * 10n ** (18n - 2n)); // 3% of credit amount + // expect(proposal.accruingInterestAPR).toBe(apr); - const expectedExpiration = - Math.floor(date.getTime() / 1000) + expirationDays * 24 * 60 * 60; - expect(proposal.expiration).toBe(expectedExpiration); - expect(expectedExpiration).toBe(1740960000); - - expect(proposal.durationOrDate).toBe(durationDays * 24 * 60 * 60); - expect(proposal.isOffer).toBe(true); - expect(proposal.refinancingLoanId).toBe(0n); - expect(proposal.nonceSpace).toBe(0n); - expect(proposal.nonce).toBe(0n); - expect(proposal.loanContract).toBe( - getLoanContractAddress(SupportedChain.Sepolia), - ); - }); + // const expectedExpiration = + // Math.floor(date.getTime() / 1000) + expirationDays * 24 * 60 * 60; + // expect(proposal.expiration).toBe(expectedExpiration); + // expect(expectedExpiration).toBe(1740960000); + + // expect(proposal.durationOrDate).toBe(durationDays * 24 * 60 * 60); + // expect(proposal.isOffer).toBe(true); + // expect(proposal.refinancingLoanId).toBe(0n); + // expect(proposal.nonceSpace).toBe(0n); + // expect(proposal.nonce).toBe(0n); + // expect(proposal.loanContract).toBe( + // getLoanContractAddress(SupportedChain.Sepolia), + // ); + // }); it("should assemble elastic proposal with token that has underlyingAddress property", async () => { const contractMock = { diff --git a/packages/v1-core/src/actions/make-proposal.ts b/packages/v1-core/src/actions/make-proposal.ts index b9a35c29..aa1be692 100644 --- a/packages/v1-core/src/actions/make-proposal.ts +++ b/packages/v1-core/src/actions/make-proposal.ts @@ -5,6 +5,7 @@ import { createChainLinkElasticProposal } from "../factories/create-chain-link-p import { createElasticProposal } from "../factories/create-elastic-proposal.js"; import { ProposalType } from "../models/proposals/proposal-base.js"; import { createUniswapV3LpSetProposal } from "../factories/create-uniswap-v3-lp-set-proposal.js"; +import { createUniswapV3LpIndividualProposal } from "../factories/create-uniswap-v3-lp-individual-proposal.js"; const proposalTypes = { [ProposalType.Elastic]: createElasticProposal, [ProposalType.ChainLink]: createChainLinkElasticProposal, @@ -15,6 +16,7 @@ const proposalTypes = { throw new Error("Not implemented"); }, [ProposalType.UniswapV3LpSet]: createUniswapV3LpSetProposal, + [ProposalType.UniswapV3Individual]: createUniswapV3LpIndividualProposal, }; export const makeProposal = async ( @@ -89,6 +91,17 @@ export const makeProposal = async ( ); break; } + case ProposalType.UniswapV3Individual: { + const uniswapV3IndividualParams = proposalParams as Parameters< + typeof createUniswapV3LpIndividualProposal + >[0]; + const uniswapV3IndividualDeps = deps as Parameters[1]; + const proposal = await createUniswapV3LpIndividualProposal(uniswapV3IndividualParams, uniswapV3IndividualDeps, user); + proposalWithSignature = await uniswapV3IndividualDeps.contract.createOnChainProposal( + proposal, + ); + break; + } case ProposalType.DutchAuction: case ProposalType.Simple: throw new Error(`Proposal type ${proposalType} not yet implemented`); diff --git a/packages/v1-core/src/actions/types.ts b/packages/v1-core/src/actions/types.ts index 8d9180ec..4d015e46 100644 --- a/packages/v1-core/src/actions/types.ts +++ b/packages/v1-core/src/actions/types.ts @@ -1,6 +1,8 @@ import { ProposalType } from "../models/proposals/proposal-base.js"; import { createElasticProposal } from "../factories/create-elastic-proposal.js"; import { createChainLinkElasticProposal } from "../factories/create-chain-link-proposal.js"; +import { createUniswapV3LpSetProposal } from "../factories/create-uniswap-v3-lp-set-proposal.js"; +import { createUniswapV3LpIndividualProposal } from "../factories/create-uniswap-v3-lp-individual-proposal.js"; export const proposalTypes = { [ProposalType.Elastic]: createElasticProposal, @@ -11,9 +13,8 @@ export const proposalTypes = { [ProposalType.Simple]: () => { throw new Error("Not implemented"); }, - [ProposalType.UniswapV3LpSet]: () => { - throw new Error("Not implemented"); - }, + [ProposalType.UniswapV3LpSet]: createUniswapV3LpSetProposal, + [ProposalType.UniswapV3Individual]: createUniswapV3LpIndividualProposal, }; export type ImplementedProposalTypes = { diff --git a/packages/v1-core/src/contracts/index.ts b/packages/v1-core/src/contracts/index.ts index 9917bcce..2fa0ed57 100644 --- a/packages/v1-core/src/contracts/index.ts +++ b/packages/v1-core/src/contracts/index.ts @@ -3,3 +3,5 @@ export * from "./revoked-nonce-contract.js"; export * from "./chain-link-proposal-contract.js"; export * from "./simple-loan-contract.js"; export * from "./base-proposal-contract.js"; +export * from "./uniswap-v3-lp-individual-proposal-contract.js"; +export * from "./uniswap-v3-lp-set-proposal-contract.js"; diff --git a/packages/v1-core/src/contracts/uniswap-v3-lp-individual-proposal-contract.ts b/packages/v1-core/src/contracts/uniswap-v3-lp-individual-proposal-contract.ts new file mode 100644 index 00000000..1e2404e5 --- /dev/null +++ b/packages/v1-core/src/contracts/uniswap-v3-lp-individual-proposal-contract.ts @@ -0,0 +1,150 @@ +import { type AddressString, getUniswapV3IndividualProposalContractAddress, type Hex, type SupportedChain } from "@pwndao/sdk-core"; +import type { IProposalContract } from "../factories/helpers.js"; +import { UniswapV3IndividualProposal } from "../models/proposals/uniswap-v3-lp-individual-proposal.js"; +import { BaseProposalContract } from "./base-proposal-contract.js"; +import { type IServerAPI, type ProposalWithHash, type ProposalWithSignature, readPwnSimpleLoanUniswapV3LpIndividualProposalGetCreditAmount, readPwnSimpleLoanUniswapV3LpIndividualProposalGetProposalHash, writePwnSimpleLoanUniswapV3LpIndividualProposalMakeProposal } from "../index.js"; +import { getAccount } from "@wagmi/core"; +import type { Address } from "viem"; +export interface IProposalUniswapV3LpIndividualContract + extends IProposalContract { + getCreditAmount( + creditAddress: AddressString, + collateralId: bigint, + token0Denominator: boolean, + feedIntermediaryDenominations: AddressString[], + feedInvertFlags: boolean[], + loanToValue: bigint, + chainId: SupportedChain + ): Promise; + } + +export class UniswapV3LpIndividualProposalContract + extends BaseProposalContract + implements IProposalUniswapV3LpIndividualContract { + + async getProposalHash(proposal: UniswapV3IndividualProposal): Promise { + const data = await readPwnSimpleLoanUniswapV3LpIndividualProposalGetProposalHash( + this.config, + { + address: getUniswapV3IndividualProposalContractAddress(proposal.chainId), + chainId: proposal.chainId, + args: [proposal.createProposalStruct()], + } + ) + + return data; + } + + async signProposal( + proposal: UniswapV3IndividualProposal, + ): Promise { + const hash = await this.getProposalHash(proposal); + + const domain = { + name: "PWNSimpleLoanUniswapV3LpIndividualProposal", + version: "1.0", + chainId: proposal.chainId, + verifyingContract: getUniswapV3IndividualProposalContractAddress(proposal.chainId), + } + + const signature = await this.signWithSafeWalletSupport( + domain, + UniswapV3IndividualProposal.ERC712_TYPES, + "Proposal", + proposal.createProposalStruct(), + ) + + return Object.assign(proposal, { + signature, + hash, + isOnChain: true, + }) as ProposalWithSignature; + } + + async getCreditAmount( + creditAddress: AddressString, + collateralId: bigint, + token0Denominator: boolean, + feedIntermediaryDenominations: AddressString[], + feedInvertFlags: boolean[], + loanToValue: bigint, + chainId: SupportedChain + ): Promise { + const data = await readPwnSimpleLoanUniswapV3LpIndividualProposalGetCreditAmount( + this.config, + { + address: getUniswapV3IndividualProposalContractAddress(chainId), + chainId, + args: [ + creditAddress, + collateralId, + token0Denominator, + feedIntermediaryDenominations, + feedInvertFlags, + loanToValue + ], + } + ) + + return data; + } + + async createProposal( + proposal: UniswapV3IndividualProposal, + deps: { persistProposal: IServerAPI["post"]["persistProposal"] }, + ): Promise { + console.warn( + "UniswapV3IndividualProposalContract.createProposal is not implemented", + proposal, + deps, + ); + // TODO: Implement actual proposal creation logic. + // This involves signing the proposal (using getProposalHash and signProposal) + // and potentially persisting it via the provided deps.persistProposal. + throw new Error( + "Method UniswapV3IndividualProposalContract.createProposal not implemented.", + ); + } + + async createOnChainProposal( + proposal: UniswapV3IndividualProposal, + ): Promise { + const account = getAccount(this.config); + const isSafe = account?.address + ? await this.safeService.isSafeAddress(account.address as Address) + : false; + + const proposalHash = await writePwnSimpleLoanUniswapV3LpIndividualProposalMakeProposal( + this.config, + { + address: getUniswapV3IndividualProposalContractAddress(proposal.chainId), + chainId: proposal.chainId, + args: [proposal.createProposalStruct()], + } + ) + + if (isSafe) { + await this.safeService.waitForTransaction(proposalHash); + } + + return Object.assign(proposal, { + signature: null, + hash: proposalHash, + isOnChain: true, + }) as ProposalWithSignature; + } + + async createMultiProposal( + proposals: ProposalWithHash[], + ): Promise { + console.warn( + "UniswapV3IndividualProposalContract.createMultiProposal is not implemented", + proposals, + ); + // TODO: Implement actual multi-proposal creation using Merkle tree logic + // See ChainLinkProposalContract for an example implementation. + throw new Error( + "Method UniswapV3IndividualProposalContract.createMultiProposal not implemented.", + ); + } +} \ No newline at end of file diff --git a/packages/v1-core/src/contracts/uniswap-v3-lp-set-proposal-contract.ts b/packages/v1-core/src/contracts/uniswap-v3-lp-set-proposal-contract.ts index 42f4b78d..84aa1d00 100644 --- a/packages/v1-core/src/contracts/uniswap-v3-lp-set-proposal-contract.ts +++ b/packages/v1-core/src/contracts/uniswap-v3-lp-set-proposal-contract.ts @@ -1,6 +1,6 @@ -import { UniswapV3LpSetProposal } from 'src/models/proposals/uniswap-v3-lp-set-proposal.js' +import { UniswapV3LpSetProposal } from '../models/proposals/uniswap-v3-lp-set-proposal.js' +import { BaseProposalContract } from './base-proposal-contract.js' import { - BaseProposalContract, type IServerAPI, type ProposalWithHash, type ProposalWithSignature, diff --git a/packages/v1-core/src/factories/create-uniswap-v3-lp-individual-proposal.ts b/packages/v1-core/src/factories/create-uniswap-v3-lp-individual-proposal.ts new file mode 100644 index 00000000..d91bdfb2 --- /dev/null +++ b/packages/v1-core/src/factories/create-uniswap-v3-lp-individual-proposal.ts @@ -0,0 +1,268 @@ +import { type AddressString, getLoanContractAddress, getUniqueCreditCollateralKey, type Hex, type UserWithNonceManager, ZERO_ADDRESS } from "@pwndao/sdk-core"; +import { type BaseTerm, type StrategyTerm, type IProposalStrategy, type IUniswapV3IndividualProposalBase, type ILoanContract, type IProposalUniswapV3LpIndividualContract, type ChainsWithChainLinkFeedSupport, getFeedData, getLendingCommonProposalFields, type IServerAPI } from '../index.js' +import { UniswapV3IndividualProposal } from "../models/proposals/uniswap-v3-lp-individual-proposal.js"; +import { calculateDurationInSeconds, calculateMinCreditAmount } from "../utils/proposal-calculations.js"; +import { calculateExpirationTimestamp } from "../utils/proposal-calculations.js"; +import { UniswapV3Position } from "../../../core/src/models/liquidity-position.js"; +import { invariant } from 'ts-invariant' +export type CreateUniswapV3IndividualProposalParams = BaseTerm & { + token0Denominator: boolean; + feedIntermediaryDenominations: AddressString[]; + feedInvertFlags: boolean[]; + loanToValue: bigint; + acceptorController: AddressString; + acceptorControllerData: Hex; + collateralId: string; + minCreditAmount: bigint; + minCreditAmountPercentage: number; +} + +export class UniswapV3LpIndividualProposalStrategy + implements IProposalStrategy +{ + constructor( + public term: StrategyTerm, + public contract: IProposalUniswapV3LpIndividualContract, + public loanContract: ILoanContract, + ) {} + + async implementUniswapV3LpIndividualProposal( + params: CreateUniswapV3IndividualProposalParams, + contract: IProposalUniswapV3LpIndividualContract, + user: UserWithNonceManager, + ): Promise { + // Calculate expiration timestamp + const expiration = calculateExpirationTimestamp(params.expirationDays); + + // Get duration in seconds or timestamp + const durationOrDate = calculateDurationInSeconds(params.duration); + + // Get LTV value for the credit-collateral pair + const ltv = this.term.ltv[getUniqueCreditCollateralKey(params.credit, params.collateral)]; + + invariant(ltv, "LTV is undefined"); + + invariant(params.collateral instanceof UniswapV3Position, "Collateral must be a UniswapV3Position"); + + const feedData = getFeedData( + params.collateral.chainId as ChainsWithChainLinkFeedSupport, + params.collateral.address, + "underlyingAddress" in params.credit && params.credit.underlyingAddress + ? params.credit.underlyingAddress + : params.credit.address, + ); + + invariant(feedData, "We did not find a suitable price feed. Create classic elastic proposal instead."); + + const creditAmount = await contract.getCreditAmount( + params.credit.address, + BigInt(params.collateral.tokenId), + params.token0Denominator, + params.feedIntermediaryDenominations, + params.feedInvertFlags, + BigInt(ltv), + params.collateral.chainId, + ) + + const minCreditAmount = + params.minCreditAmount && !params.minCreditAmountPercentage + ? params.minCreditAmount + : params.minCreditAmountPercentage + ? calculateMinCreditAmount( + creditAmount, + params.minCreditAmountPercentage, + ) + : undefined; + + invariant(minCreditAmount, "Min credit amount is undefined"); + + const commonFields = await getLendingCommonProposalFields( + { + nonce: user.getNextNonce(params.collateral.chainId), + nonceSpace: user.getNonceSpace(params.collateral.chainId), + user, + collateral: params.collateral, + credit: params.credit, + creditAmount, + utilizedCreditId: params.utilizedCreditId, + durationOrDate, + apr: params.apr, + expiration, + loanContract: getLoanContractAddress(params.collateral.chainId), + relatedStrategyId: this.term.relatedStrategyId, + sourceOfFunds: params.sourceOfFunds, + isOffer: true, + }, + { + contract: contract, + loanContract: this.loanContract, + }, + ); + + return new UniswapV3IndividualProposal( + { + ...commonFields, + isOffer: false, + feedIntermediaryDenominations: params.feedIntermediaryDenominations, + feedInvertFlags: params.feedInvertFlags, + loanToValue: BigInt(ltv), + minCreditAmount, + chainId: params.collateral.chainId, + collateralCategory: params.collateral.category, + collateralAddress: params.collateral.address, + collateralId: BigInt(params.collateral.tokenId), + token0Denominator: params.token0Denominator, + acceptorController: params.acceptorController, + acceptorControllerData: params.acceptorControllerData + }, + params.collateral.chainId, + ); + } + + getProposalsParams( + creditAmount: bigint, + utilizedCreditId: Hex, + isOffer: boolean, + sourceOfFunds: AddressString | null, + minCreditAmount: bigint, + token0Denominator?: boolean, + feedIntermediaryDenominations?: AddressString[], + feedInvertFlags?: boolean[], + loanToValue?: bigint, + ): CreateUniswapV3IndividualProposalParams[] { + + invariant(!isOffer, "UniswapV3LpIndividualProposal is always a borrow request"); + invariant(this.term.creditAssets.length === 1, "UniswapV3LpIndividualProposal supports only one credit asset"); + invariant(this.term.collateralAssets.length === 1, "UniswapV3LpIndividualProposal supports only one collateral asset"); + + const credit = this.term.creditAssets[0]; + const collateral = this.term.collateralAssets[0]; + + invariant(token0Denominator, "Token 0 denominator is required"); + invariant(feedIntermediaryDenominations && feedIntermediaryDenominations.length > 0, "Feed intermediary denominations are required"); + invariant(feedInvertFlags && feedInvertFlags.length > 0, "Feed invert flags are required"); + invariant(loanToValue, "Loan to value is required"); + + return [ + { + collateral, + credit, + creditAmount, + utilizedCreditId, + apr: this.term.apr, + duration: { + days: this.term.durationDays, + date: undefined, + }, + ltv: this.term.ltv, + expirationDays: this.term.expirationDays, + isOffer: false, + sourceOfFunds, + minCreditAmount, + token0Denominator, + feedIntermediaryDenominations, + feedInvertFlags, + loanToValue, + acceptorController: ZERO_ADDRESS, + acceptorControllerData: ZERO_ADDRESS, + collateralId: (collateral as UniswapV3Position).tokenId, + minCreditAmountPercentage: this.term.minCreditAmountPercentage || 0, + } + ]; + } + + async createLendingProposals( + user: UserWithNonceManager, + creditAmount: bigint, + utilizedCreditId: Hex, + isOffer: boolean, + sourceOfFunds: AddressString | null, + minCreditAmount: bigint, + token0Denominator?: boolean, + feedIntermediaryDenominations?: AddressString[], + feedInvertFlags?: boolean[], + loanToValue?: bigint, + ): Promise { + const paramsArray = this.getProposalsParams( + creditAmount, + utilizedCreditId, + isOffer, + sourceOfFunds, + minCreditAmount, + token0Denominator, + feedIntermediaryDenominations, + feedInvertFlags, + loanToValue, + ); + + const result: UniswapV3IndividualProposal[] = []; + + const proposals = await Promise.allSettled( + paramsArray.map(async (params) => { + try { + return await this.implementUniswapV3LpIndividualProposal(params, this.contract, user); + } catch (error) { + console.error("Error creating UniswapV3LpIndividual proposal:", error); + throw error; + } + }), + ); + + for (const proposal of proposals) { + if (proposal.status === "fulfilled" && proposal.value) { + result.push(proposal.value); + } + } + + return result; + } +} + +export interface IProposalUniswapV3LpIndividualAPIDeps { + persistProposal: IServerAPI["post"]["persistProposal"]; + persistProposals: IServerAPI["post"]["persistProposals"]; + updateNonces: IServerAPI["post"]["updateNonce"]; +} + +export type UniswapV3LpIndividualProposalDeps = { + api: IProposalUniswapV3LpIndividualAPIDeps; + contract: IProposalUniswapV3LpIndividualContract; + loanContract: ILoanContract; +}; + +export const createUniswapV3LpIndividualProposal = async ( + params: CreateUniswapV3IndividualProposalParams, + deps: UniswapV3LpIndividualProposalDeps, + user: UserWithNonceManager, +): Promise => { + const dummyTerm: StrategyTerm = { + creditAssets: [params.credit], + collateralAssets: [params.collateral], + apr: params.apr, + durationDays: params.duration.days || 0, + ltv: params.ltv, + expirationDays: params.expirationDays, + minCreditAmountPercentage: params.minCreditAmountPercentage, + relatedStrategyId: params.relatedStrategyId, + }; + + const strategy = new UniswapV3LpIndividualProposalStrategy( + dummyTerm, + deps.contract, + deps.loanContract, + ); + + const proposals = await strategy.createLendingProposals(user, + params.creditAmount, + params.utilizedCreditId, + params.isOffer, + params.sourceOfFunds, + params.minCreditAmount, + params.token0Denominator, + params.feedIntermediaryDenominations, + params.feedInvertFlags, + params.loanToValue, + ); + + return proposals[0]; +} \ No newline at end of file diff --git a/packages/v1-core/src/factories/create-uniswap-v3-lp-set-proposal.ts b/packages/v1-core/src/factories/create-uniswap-v3-lp-set-proposal.ts index 70b688d1..14451607 100644 --- a/packages/v1-core/src/factories/create-uniswap-v3-lp-set-proposal.ts +++ b/packages/v1-core/src/factories/create-uniswap-v3-lp-set-proposal.ts @@ -134,6 +134,7 @@ export class UniswapV3LpSetProposalStrategy minCreditAmount?: bigint, tokenAAllowlist?: string[], tokenBAllowlist?: string[], + // todo: maybe laontovalue ? ): CreateUniswapV3LpSetProposalParams[] { invariant(isOffer, "UniswapV3LpSetProposal is always an offer"); @@ -145,6 +146,8 @@ export class UniswapV3LpSetProposalStrategy invariant(tokenAAllowlist && tokenAAllowlist.length > 0, "Token A allowlist is required"); invariant(tokenBAllowlist && tokenBAllowlist.length > 0, "Token B allowlist is required"); + + // todo: check feed params, loantovalue return [ { diff --git a/packages/v1-core/src/factories/helpers.ts b/packages/v1-core/src/factories/helpers.ts index bb07cb02..aaf616ae 100644 --- a/packages/v1-core/src/factories/helpers.ts +++ b/packages/v1-core/src/factories/helpers.ts @@ -22,7 +22,7 @@ import type { ProposalWithHash, ProposalWithSignature } from "../models/strategi import type { Proposal } from "../models/strategies/types.js"; import type { ILenderSpec } from "../models/terms.js"; import type { IProposalUniswapV3LpSetContract } from "src/contracts/uniswap-v3-lp-set-proposal-contract.js"; - +import type { IProposalUniswapV3LpIndividualContract } from "src/contracts/uniswap-v3-lp-individual-proposal-contract.js"; type CommonProposalFieldsParams = { user: UserWithNonceManager; nonce: bigint; @@ -55,7 +55,8 @@ export interface IProposalContract { export type ProposalContract = | IProposalChainLinkContract | IProposalElasticContract - | IProposalUniswapV3LpSetContract; + | IProposalUniswapV3LpSetContract + | IProposalUniswapV3LpIndividualContract; export const getLendingCommonProposalFields = async ( params: CommonProposalFieldsParams & IProposalMisc, diff --git a/packages/v1-core/src/models/proposals/proposal-base.ts b/packages/v1-core/src/models/proposals/proposal-base.ts index c3e3ff69..9da7b1f6 100644 --- a/packages/v1-core/src/models/proposals/proposal-base.ts +++ b/packages/v1-core/src/models/proposals/proposal-base.ts @@ -17,6 +17,7 @@ export enum ProposalType { Simple = "pwn_contracts.v1_3simpleloansimpleproposal", ChainLink = "pwn_contracts.v1_3simpleloanelasticchainlinkproposal", UniswapV3LpSet = "pwn_contracts.v1_4simpleloanuniswapv3lpsetproposal", + UniswapV3Individual = "pwn_contracts.v1_4simpleloanuniswapv3individualproposal", } export interface IProposalMisc { @@ -206,6 +207,17 @@ export interface IUniswapV3LpSetProposalBase extends Omit { + token0Denominator: boolean; + feedIntermediaryDenominations: AddressString[]; + feedInvertFlags: boolean[]; + loanToValue: bigint; + acceptorController: AddressString; + acceptorControllerData: Hex; + collateralId: bigint; + type: ProposalType.UniswapV3Individual; +} + interface IBaseFixedProposal { /** * Amount of tokens used as a collateral, in case of ERC721 should be 0. diff --git a/packages/v1-core/src/models/proposals/uniswap-v3-lp-individual-proposal.ts b/packages/v1-core/src/models/proposals/uniswap-v3-lp-individual-proposal.ts new file mode 100644 index 00000000..1c10d90e --- /dev/null +++ b/packages/v1-core/src/models/proposals/uniswap-v3-lp-individual-proposal.ts @@ -0,0 +1,132 @@ +import { AddressString, Hex, MultiTokenCategory, V1_4_CHAIN_TO_ADDRESSES_MAP } from "@pwndao/sdk-core"; +import { SupportedChain } from "@pwndao/sdk-core"; +import { IUniswapV3IndividualProposalBase, ProposalType } from "./proposal-base.js"; +import { V1_4SimpleLoanUniswapV3IndividualProposalStruct } from "../../structs.js"; + +export class UniswapV3IndividualProposal implements IUniswapV3IndividualProposalBase { + type = ProposalType.UniswapV3Individual as const; + proposalContract = V1_4_CHAIN_TO_ADDRESSES_MAP[SupportedChain.Sepolia].pwnSimpleLoanUniswapV3IndividualProposal; // TODO: later change to CHAIN_TO_ADDRESSES_MAP and dynamic chain id + collateralCategory = MultiTokenCategory.UNISWAP_V3_LP; + + static ERC712_TYPES = { + Proposal: [ + { name: "collateralId", type: "uint256" }, + { name: "token0Denominator", type: "bool" }, + { name: "creditAddress", type: "address" }, + { name: "feedIntermediaryDenominations", type: "address[]" }, + { name: "feedInvertFlags", type: "bool[]" }, + { name: "loanToValue", type: "uint256" }, + { name: "minCreditAmount", type: "uint256" }, + { name: "availableCreditLimit", type: "uint256" }, + { name: "utilizedCreditId", type: "bytes32" }, + { name: "fixedInterestAmount", type: "uint256" }, + { name: "accruingInterestAPR", type: "uint24" }, + { name: "durationOrDate", type: "uint32" }, + { name: "expiration", type: "uint40" }, + { name: "acceptorController", type: "address" }, + { name: "acceptorControllerData", type: "bytes" }, + { name: "proposer", type: "address" }, + { name: "proposerSpecHash", type: "bytes32" }, + { name: "isOffer", type: "bool" }, + { name: "refinancingLoanId", type: "uint256" }, + { name: "nonceSpace", type: "uint256" }, + { name: "nonce", type: "uint256" }, + { name: "loanContract", type: "address" } + ] + } + + constructor( + proposal: Omit, + chainId: SupportedChain, + ) { + this.chainId = chainId; + this.collateralId = proposal.collateralId; + this.token0Denominator = proposal.token0Denominator; + this.creditAddress = proposal.creditAddress; + this.feedIntermediaryDenominations = proposal.feedIntermediaryDenominations; + this.feedInvertFlags = proposal.feedInvertFlags; + this.loanToValue = proposal.loanToValue; + this.minCreditAmount = proposal.minCreditAmount; + this.availableCreditLimit = proposal.availableCreditLimit; + this.utilizedCreditId = proposal.utilizedCreditId; + this.fixedInterestAmount = proposal.fixedInterestAmount; + this.accruingInterestAPR = proposal.accruingInterestAPR; + this.durationOrDate = proposal.durationOrDate; + this.expiration = proposal.expiration; + this.acceptorController = proposal.acceptorController; + this.acceptorControllerData = proposal.acceptorControllerData; + this.proposer = proposal.proposer; + this.proposerSpecHash = proposal.proposerSpecHash; + this.isOffer = proposal.isOffer; + this.refinancingLoanId = proposal.refinancingLoanId; + this.nonceSpace = proposal.nonceSpace; + this.nonce = proposal.nonce; + this.loanContract = proposal.loanContract; + + this.collateralAddress = proposal.collateralAddress; + this.checkCollateralStateFingerprint = proposal.checkCollateralStateFingerprint; + this.collateralStateFingerprint = proposal.collateralStateFingerprint; + this.allowedAcceptor = proposal.allowedAcceptor; + this.sourceOfFunds = proposal.sourceOfFunds; + this.minCreditAmount = proposal.minCreditAmount; + this.relatedStrategyId = proposal.relatedStrategyId; + } + + createProposalStruct(): V1_4SimpleLoanUniswapV3IndividualProposalStruct { + return { + collateralId: this.collateralId, + token0Denominator: this.token0Denominator, + creditAddress: this.creditAddress, + feedIntermediaryDenominations: this.feedIntermediaryDenominations, + feedInvertFlags: this.feedInvertFlags, + loanToValue: this.loanToValue, + minCreditAmount: this.minCreditAmount, + availableCreditLimit: this.availableCreditLimit, + utilizedCreditId: this.utilizedCreditId, + fixedInterestAmount: this.fixedInterestAmount, + accruingInterestAPR: this.accruingInterestAPR, + durationOrDate: this.durationOrDate, + expiration: this.expiration, + acceptorController: this.acceptorController, + acceptorControllerData: this.acceptorControllerData, + proposer: this.proposer, + proposerSpecHash: this.proposerSpecHash, + isOffer: false, + refinancingLoanId: this.refinancingLoanId, + nonceSpace: this.nonceSpace, + nonce: this.nonce, + loanContract: this.loanContract, + } + } + + chainId: SupportedChain; + collateralId: bigint; + token0Denominator: boolean; + creditAddress: AddressString; + feedIntermediaryDenominations: AddressString[]; + feedInvertFlags: boolean[]; + loanToValue: bigint; + minCreditAmount: bigint; + availableCreditLimit: bigint; + utilizedCreditId: Hex; + fixedInterestAmount: bigint; + accruingInterestAPR: number; + durationOrDate: number; + expiration: number; + acceptorController: AddressString; + acceptorControllerData: Hex; + proposer: AddressString; + proposerSpecHash: Hex; + isOffer: boolean; + refinancingLoanId: bigint; + nonceSpace: bigint; + nonce: bigint; + loanContract: AddressString; + + collateralAddress: AddressString; + checkCollateralStateFingerprint: boolean; + collateralStateFingerprint: Hex; + allowedAcceptor: AddressString; + sourceOfFunds: AddressString | null; + relatedStrategyId?: string | undefined; +} diff --git a/packages/v1-core/src/models/strategies/types.ts b/packages/v1-core/src/models/strategies/types.ts index 1466cc0a..d8db4994 100644 --- a/packages/v1-core/src/models/strategies/types.ts +++ b/packages/v1-core/src/models/strategies/types.ts @@ -13,10 +13,11 @@ import type { UniswapV3LpSetProposal } from "../proposals/uniswap-v3-lp-set-prop import type { IElasticProposalBase, IOracleProposalBase, + IUniswapV3IndividualProposalBase, IUniswapV3LpSetProposalBase, } from "../proposals/proposal-base.js"; import type { ProposalType } from "../proposals/proposal-base.js"; - +import type { UniswapV3IndividualProposal } from "../proposals/uniswap-v3-lp-individual-proposal.js" export interface StrategyTerm { creditAssets: ERC20TokenLike[]; collateralAssets: Token[]; @@ -38,7 +39,7 @@ export interface StrategyTerm { } export interface IProposalStrategy< - T extends IElasticProposalBase | IOracleProposalBase | IUniswapV3LpSetProposalBase, + T extends IElasticProposalBase | IOracleProposalBase | IUniswapV3LpSetProposalBase | IUniswapV3IndividualProposalBase, > { term: StrategyTerm; getProposalsParams( @@ -84,7 +85,7 @@ export type Strategy = { }; }; -export type Proposal = ElasticProposal | ChainLinkProposal | UniswapV3LpSetProposal; +export type Proposal = ElasticProposal | ChainLinkProposal | UniswapV3LpSetProposal | UniswapV3IndividualProposal; export type ProposalWithHash = Proposal & { hash: Hex; diff --git a/packages/v1-core/src/structs.ts b/packages/v1-core/src/structs.ts index d58ff7bc..b4e2be95 100644 --- a/packages/v1-core/src/structs.ts +++ b/packages/v1-core/src/structs.ts @@ -7,6 +7,7 @@ import type { pwnSimpleLoanListProposalAbi, pwnSimpleLoanSimpleProposalAbi, pwnSimpleLoanUniswapV3LpSetProposalAbi, + pwnSimpleLoanUniswapV3LpIndividualProposalAbi, } from "./generated.js"; // V1.3 @@ -58,4 +59,12 @@ type _V1_4SimpleLoanUniswapV3LpSetProposalEncodeFn = ExtractAbiFunction< >; export type V1_4SimpleLoanUniswapV3LpSetProposalStruct = AbiParameterToPrimitiveType< _V1_4SimpleLoanUniswapV3LpSetProposalEncodeFn["inputs"][0] +>; + +type _V1_4SimpleLoanUniswapV3IndividualProposalEncodeFn = ExtractAbiFunction< + typeof pwnSimpleLoanUniswapV3LpIndividualProposalAbi, + "encodeProposalData" +>; +export type V1_4SimpleLoanUniswapV3IndividualProposalStruct = AbiParameterToPrimitiveType< + _V1_4SimpleLoanUniswapV3IndividualProposalEncodeFn["inputs"][0] >; \ No newline at end of file diff --git a/packages/v1-core/src/utils/utils.ts b/packages/v1-core/src/utils/utils.ts index 0eab4a8d..9a534eb9 100644 --- a/packages/v1-core/src/utils/utils.ts +++ b/packages/v1-core/src/utils/utils.ts @@ -9,10 +9,12 @@ import type { ElasticProposal } from "../models/proposals/elastic-proposal.js"; import type { IElasticProposalBase, IOracleProposalBase, + IUniswapV3IndividualProposalBase, IUniswapV3LpSetProposalBase, } from "../models/proposals/proposal-base.js"; import type { ProposalWithSignature } from "../models/strategies/types.js"; -import type { UniswapV3LpSetProposal } from "src/models/proposals/uniswap-v3-lp-set-proposal.js"; +import type { UniswapV3LpSetProposal } from "../models/proposals/uniswap-v3-lp-set-proposal.js"; +import type { UniswapV3IndividualProposal } from "../models/proposals/uniswap-v3-lp-individual-proposal.js"; /** * Converts common proposal fields to backend format @@ -133,13 +135,39 @@ export const encodeUniswapV3LpSetProposalForBackend = ( } as any; // TODO: add types from backend }; +/** + * Encodes a UniswapV3LpIndividualProposal for the backend + * @param proposal UniswapV3LpIndividualProposal instance + * @returns Backend-formatted uniswap v3 lp individual proposal data + */ +export const encodeUniswapV3LpIndividualProposalForBackend = ( + proposal: UniswapV3IndividualProposal, +): CreateProposalRequestSchemaRequest => { + const baseData = getBaseBackendProposalData( + proposal as ProposalWithSignature, + ); + + return { + ...baseData, + token_0_denominator: proposal.token0Denominator, + feed_intermediary_denominations: proposal.feedIntermediaryDenominations, + feed_invert_flags: proposal.feedInvertFlags, + loan_to_value: Number(proposal.loanToValue.toString()), + is_offer: false, + collateral_id: String(proposal.collateralId), + acceptor_controller: proposal.acceptorController, + acceptor_controller_data: proposal.acceptorControllerData, + // biome-ignore lint/suspicious/noExplicitAny: Dont have type yet + } as any; // TODO: add types from backend +}; + /** * Detects the proposal type and encodes it accordingly for the backend * @param proposal Any proposal instance * @returns Backend-formatted proposal data */ export const encodeProposalForBackend = ( - proposal: IElasticProposalBase | IOracleProposalBase | IUniswapV3LpSetProposalBase, + proposal: IElasticProposalBase | IOracleProposalBase | IUniswapV3LpSetProposalBase | IUniswapV3IndividualProposalBase, ): CreateProposalRequestSchemaRequest => { // Detect the proposal type if ( @@ -157,6 +185,10 @@ export const encodeProposalForBackend = ( return encodeUniswapV3LpSetProposalForBackend(proposal as UniswapV3LpSetProposal); } + if ("token0Denominator" in proposal && "collateralId" in proposal) { + return encodeUniswapV3LpIndividualProposalForBackend(proposal as UniswapV3IndividualProposal); + } + // If no specific type is detected, use the base encoder return getBaseBackendProposalData( proposal as unknown as ProposalWithSignature, From 28c92017ca7b5d09b5b580a6d6a0b2f0b9925460 Mon Sep 17 00:00:00 2001 From: tohrxyz Date: Wed, 14 May 2025 16:12:25 +0200 Subject: [PATCH 11/19] fix: univ3lpset creation and tests --- packages/core/src/test-utils/index.ts | 3 +- .../v1-core/src/actions/make-proposal.test.ts | 188 +++++++++--------- .../create-uniswap-v3-lp-set-proposal.ts | 39 ++-- 3 files changed, 121 insertions(+), 109 deletions(-) diff --git a/packages/core/src/test-utils/index.ts b/packages/core/src/test-utils/index.ts index 55cffc1b..460198c5 100644 --- a/packages/core/src/test-utils/index.ts +++ b/packages/core/src/test-utils/index.ts @@ -77,6 +77,7 @@ export const getMockLiquidityPoolToken = ( tokenA: AddressString, tokenB: AddressString, tokenId: string, + tokenAddress: AddressString, ) => { - return new UniswapV3Position(chain, "0x1238536071E1c677A632429e3655c799b22cDA52", tokenA, tokenB, tokenId); + return new UniswapV3Position(chain, tokenAddress, tokenA, tokenB, tokenId); }; \ No newline at end of file diff --git a/packages/v1-core/src/actions/make-proposal.test.ts b/packages/v1-core/src/actions/make-proposal.test.ts index 1e30558f..8003c54c 100644 --- a/packages/v1-core/src/actions/make-proposal.test.ts +++ b/packages/v1-core/src/actions/make-proposal.test.ts @@ -5,7 +5,7 @@ import { ZERO_ADDRESS, ZERO_FINGERPRINT, getLoanContractAddress, - // getMockLiquidityPoolToken, + getMockLiquidityPoolToken, getUniqueCreditCollateralKey, } from "@pwndao/sdk-core"; import { @@ -261,99 +261,101 @@ describe("Test make proposal", () => { expect(proposal.relatedStrategyId).toBe("1"); }); - // it("should assemble uniswap v3 lp set proposal", async () => { - // const contractMock = { - // createProposal: vi.fn().mockImplementation((p) => p), - // getCollateralAmount: vi.fn().mockImplementation(() => 0n), - // createOnChainProposal: vi.fn().mockImplementation((p) => p), - // getProposalHash: vi.fn().mockImplementation(() => "0x123"), - // getCreditAmount: vi.fn().mockImplementation(() => 0n), - // createMultiProposal: vi.fn().mockImplementation((p) => p), - // }; - - // const loanContractMock = { - // getLenderSpecHash: vi - // .fn() - // .mockImplementation(() => Promise.resolve(proposerSpecHash)), - // }; - - // const sepoliaAssetsWithPriceFeeds = { - // weth: "0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9" as AddressString, - // usdc: "0x94a9D9AC8a22534E3FaCa9F4e7F2E2cf85d5E4C8" as AddressString, - // } - - // const user = getMockUserWithNonceManager(user_address, [SupportedChain.Sepolia]); - - // expect(user.nonces[SupportedChain.Sepolia]?.[0]).toBe(0n); - - // const proposal = await makeProposal( - // user, - // ProposalType.UniswapV3LpSet, - // { - // collateral: getMockLiquidityPoolToken(SupportedChain.Sepolia, sepoliaAssetsWithPriceFeeds.weth, sepoliaAssetsWithPriceFeeds.usdc, "1"), - // credit: getMockToken(SupportedChain.Sepolia, sepoliaAssetsWithPriceFeeds.usdc), - // creditAmount, - // ltv: { - // [getUniqueCreditCollateralKey( - // getMockToken(SupportedChain.Sepolia, sepoliaAssetsWithPriceFeeds.usdc), - // getMockToken(SupportedChain.Sepolia, "0x1238536071E1c677A632429e3655c799b22cDA52"), - // )]: Number(ltv), - // }, - // apr: { - // [getUniqueCreditCollateralKey( - // getMockToken(SupportedChain.Sepolia, sepoliaAssetsWithPriceFeeds.usdc), - // getMockToken(SupportedChain.Sepolia, "0x1238536071E1c677A632429e3655c799b22cDA52"), - // )]: apr, - // }, - // duration: { - // days: durationDays, - // date: undefined, - // }, - // expirationDays, - // utilizedCreditId: generateAddress(), - // isOffer: true, - // sourceOfFunds: user_address, - // tokenAAllowlist: [sepoliaAssetsWithPriceFeeds.weth, sepoliaAssetsWithPriceFeeds.usdc], - // tokenBAllowlist: [sepoliaAssetsWithPriceFeeds.weth, sepoliaAssetsWithPriceFeeds.usdc], - // acceptorController: user_address, - // acceptorControllerData: "0x", - // minCreditAmountPercentage: 3, - // }, - // { - // api: { - // persistProposal: vi.fn().mockImplementation((p) => p), - // persistProposals: vi.fn().mockImplementation((p) => p), - // updateNonces: vi.fn().mockImplementation((p) => p), - // }, - // contract: contractMock, - // loanContract: loanContractMock, - // }, - // ); - - // expect(contractMock.createOnChainProposal).toHaveBeenCalled(); - - // expect(proposal).toBeDefined(); - // expect(proposal.proposerSpecHash).toBe(proposerSpecHash); - // expect(proposal.collateralAddress).toBe(collateralAddress); - // expect(proposal.creditAddress).toBe(creditAddress); - // expect(proposal.availableCreditLimit).toBe(1n * 10n ** 18n); - // expect(proposal.minCreditAmount).toBe(3n * 10n ** (18n - 2n)); // 3% of credit amount - // expect(proposal.accruingInterestAPR).toBe(apr); + it("should assemble uniswap v3 lp set proposal", async () => { + const contractMock = { + createProposal: vi.fn().mockImplementation((p) => p), + getCollateralAmount: vi.fn().mockImplementation(() => 0n), + createOnChainProposal: vi.fn().mockImplementation((p) => p), + getProposalHash: vi.fn().mockImplementation(() => "0x123"), + getCreditAmount: vi.fn().mockImplementation(() => 0n), + createMultiProposal: vi.fn().mockImplementation((p) => p), + }; + + const loanContractMock = { + getLenderSpecHash: vi + .fn() + .mockImplementation(() => Promise.resolve(proposerSpecHash)), + }; + + const sepoliaAssetsWithPriceFeeds = { + weth: "0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9" as AddressString, + usdc: "0x94a9D9AC8a22534E3FaCa9F4e7F2E2cf85d5E4C8" as AddressString, + } + + const lpTokenAddress = "0x1238536071E1c677A632429e3655c799b22cDA52" + + const user = getMockUserWithNonceManager(user_address, [SupportedChain.Sepolia]); + + expect(user.nonces[SupportedChain.Sepolia]?.[0]).toBe(0n); + + const proposal = await makeProposal( + user, + ProposalType.UniswapV3LpSet, + { + collateral: getMockLiquidityPoolToken(SupportedChain.Sepolia, sepoliaAssetsWithPriceFeeds.weth, sepoliaAssetsWithPriceFeeds.usdc, "1", lpTokenAddress), + credit: getMockToken(SupportedChain.Sepolia, sepoliaAssetsWithPriceFeeds.usdc), + creditAmount, + ltv: { + [getUniqueCreditCollateralKey( + getMockToken(SupportedChain.Sepolia, sepoliaAssetsWithPriceFeeds.usdc), + getMockToken(SupportedChain.Sepolia, lpTokenAddress), + )]: Number(ltv), + }, + apr: { + [getUniqueCreditCollateralKey( + getMockToken(SupportedChain.Sepolia, sepoliaAssetsWithPriceFeeds.usdc), + getMockToken(SupportedChain.Sepolia, lpTokenAddress), + )]: apr, + }, + duration: { + days: durationDays, + date: undefined, + }, + expirationDays, + utilizedCreditId: generateAddress(), + isOffer: true, + sourceOfFunds: user_address, + tokenAAllowlist: [sepoliaAssetsWithPriceFeeds.weth, sepoliaAssetsWithPriceFeeds.usdc], + tokenBAllowlist: [sepoliaAssetsWithPriceFeeds.weth, sepoliaAssetsWithPriceFeeds.usdc], + acceptorController: user_address, + acceptorControllerData: "0x", + minCreditAmountPercentage: 3, + }, + { + api: { + persistProposal: vi.fn().mockImplementation((p) => p), + persistProposals: vi.fn().mockImplementation((p) => p), + updateNonces: vi.fn().mockImplementation((p) => p), + }, + contract: contractMock, + loanContract: loanContractMock, + }, + ); + + expect(contractMock.createOnChainProposal).toHaveBeenCalled(); + + expect(proposal).toBeDefined(); + expect(proposal.proposerSpecHash).toBe(proposerSpecHash); + expect(proposal.collateralAddress).toBe(lpTokenAddress); + expect(proposal.creditAddress).toBe(sepoliaAssetsWithPriceFeeds.usdc); + expect(proposal.availableCreditLimit).toBe(1n * 10n ** 18n); + expect(proposal.minCreditAmount).toBe(3n * 10n ** (18n - 2n)); // 3% of credit amount + expect(proposal.accruingInterestAPR).toBe(apr); - // const expectedExpiration = - // Math.floor(date.getTime() / 1000) + expirationDays * 24 * 60 * 60; - // expect(proposal.expiration).toBe(expectedExpiration); - // expect(expectedExpiration).toBe(1740960000); - - // expect(proposal.durationOrDate).toBe(durationDays * 24 * 60 * 60); - // expect(proposal.isOffer).toBe(true); - // expect(proposal.refinancingLoanId).toBe(0n); - // expect(proposal.nonceSpace).toBe(0n); - // expect(proposal.nonce).toBe(0n); - // expect(proposal.loanContract).toBe( - // getLoanContractAddress(SupportedChain.Sepolia), - // ); - // }); + const expectedExpiration = + Math.floor(date.getTime() / 1000) + expirationDays * 24 * 60 * 60; + expect(proposal.expiration).toBe(expectedExpiration); + expect(expectedExpiration).toBe(1740960000); + + expect(proposal.durationOrDate).toBe(durationDays * 24 * 60 * 60); + expect(proposal.isOffer).toBe(true); + expect(proposal.refinancingLoanId).toBe(0n); + expect(proposal.nonceSpace).toBe(0n); + expect(proposal.nonce).toBe(0n); + expect(proposal.loanContract).toBe( + getLoanContractAddress(SupportedChain.Sepolia), + ); + }); it("should assemble elastic proposal with token that has underlyingAddress property", async () => { const contractMock = { diff --git a/packages/v1-core/src/factories/create-uniswap-v3-lp-set-proposal.ts b/packages/v1-core/src/factories/create-uniswap-v3-lp-set-proposal.ts index 14451607..90cb5d6b 100644 --- a/packages/v1-core/src/factories/create-uniswap-v3-lp-set-proposal.ts +++ b/packages/v1-core/src/factories/create-uniswap-v3-lp-set-proposal.ts @@ -47,9 +47,27 @@ export class UniswapV3LpSetProposalStrategy invariant(ltv, "LTV is undefined"); + const collateralCasted = ( + 'tokenId' in params.collateral && + 'tokenA' in params.collateral && + 'tokenB' in params.collateral) ? + params.collateral as UniswapV3Position : null ; + + invariant(collateralCasted, "Collateral doesn't have required fields to be a UniswapV3Position"); + + const collateralClass = new UniswapV3Position( + collateralCasted.chainId, + collateralCasted.address, + collateralCasted.tokenA, + collateralCasted.tokenB, + collateralCasted.tokenId, + ); + + invariant(collateralClass instanceof UniswapV3Position, "Collateral must be instanceOf UniswapV3Position"); + const feedData = getFeedData( - params.collateral.chainId as ChainsWithChainLinkFeedSupport, - params.collateral.address, + collateralClass.chainId as ChainsWithChainLinkFeedSupport, + params.tokenAAllowlist[0] as AddressString, //TODO: for 1st iteration, it's always [0] from the tokenAAllowlist "underlyingAddress" in params.credit && params.credit.underlyingAddress ? params.credit.underlyingAddress : params.credit.address, @@ -57,23 +75,14 @@ export class UniswapV3LpSetProposalStrategy invariant(feedData, "We did not find a suitable price feed. Create classic elastic proposal instead."); - invariant(params.collateral instanceof UniswapV3Position, "Collateral must be a UniswapV3Position"); - const creditAmount = await contract.getCreditAmount( - params.credit.address, - BigInt(params.collateral.tokenId), - true, - feedData.feedIntermediaryDenominations, - feedData.feedInvertFlags, - BigInt(ltv), - params.collateral.chainId, - ) + invariant(params.creditAmount, "Credit amount is undefined"); const minCreditAmount = params.minCreditAmount && !params.minCreditAmountPercentage ? params.minCreditAmount : params.minCreditAmountPercentage ? calculateMinCreditAmount( - creditAmount, + params.creditAmount, params.minCreditAmountPercentage, ) : undefined; @@ -116,13 +125,13 @@ export class UniswapV3LpSetProposalStrategy chainId: params.collateral.chainId, collateralCategory: params.collateral.category, collateralAddress: params.collateral.address, - collateralId: BigInt(params.collateral.tokenId), + collateralId: BigInt(collateralClass.tokenId), tokenAAllowlist: params.tokenAAllowlist.map(token => token as `0x${string}`), tokenBAllowlist: params.tokenBAllowlist.map(token => token as `0x${string}`), acceptorController: params.acceptorController as `0x${string}`, acceptorControllerData: params.acceptorControllerData as `0x${string}`, }, - params.collateral.chainId, + collateralClass.chainId, ); } From 50ed3948beab50a8e56ee68058f74d44d368b471 Mon Sep 17 00:00:00 2001 From: tohrxyz Date: Wed, 14 May 2025 16:48:06 +0200 Subject: [PATCH 12/19] fix: creating univ3individual proposal + tests --- .../v1-core/src/actions/make-proposal.test.ts | 90 +++++++++++++++++++ ...reate-uniswap-v3-lp-individual-proposal.ts | 67 +++++++------- 2 files changed, 122 insertions(+), 35 deletions(-) diff --git a/packages/v1-core/src/actions/make-proposal.test.ts b/packages/v1-core/src/actions/make-proposal.test.ts index 8003c54c..63855ccf 100644 --- a/packages/v1-core/src/actions/make-proposal.test.ts +++ b/packages/v1-core/src/actions/make-proposal.test.ts @@ -357,6 +357,96 @@ describe("Test make proposal", () => { ); }); + it("should assemble uniswap v3 lp individual proposal", async () => { + const contractMock = { + createProposal: vi.fn().mockImplementation((p) => p), + createOnChainProposal: vi.fn().mockImplementation((p) => p), + getProposalHash: vi.fn().mockImplementation(() => "0x123"), + getCreditAmount: vi.fn().mockImplementation(() => 2000n*10n**6n), + createMultiProposal: vi.fn().mockImplementation((p) => p), + } + + const loanContractMock = { + getLenderSpecHash: vi + .fn() + .mockImplementation(() => Promise.resolve(proposerSpecHash)), + }; + + const sepoliaAssetsWithPriceFeeds = { + weth: "0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9" as AddressString, + usdc: "0x94a9D9AC8a22534E3FaCa9F4e7F2E2cf85d5E4C8" as AddressString, + } + + const lpTokenAddress = "0x1238536071E1c677A632429e3655c799b22cDA52" + + const user = getMockUserWithNonceManager(user_address, [SupportedChain.Sepolia]); + + expect(user.nonces[SupportedChain.Sepolia]?.[0]).toBe(0n); + + const proposal = await makeProposal( + user, + ProposalType.UniswapV3Individual, + { + collateral: getMockLiquidityPoolToken(SupportedChain.Sepolia, sepoliaAssetsWithPriceFeeds.weth, sepoliaAssetsWithPriceFeeds.usdc, "1", lpTokenAddress), + credit: getMockToken(SupportedChain.Sepolia, sepoliaAssetsWithPriceFeeds.usdc), + creditAmount, + ltv: { + [getUniqueCreditCollateralKey( + getMockToken(SupportedChain.Sepolia, sepoliaAssetsWithPriceFeeds.usdc), + getMockToken(SupportedChain.Sepolia, lpTokenAddress), + )]: Number(ltv), + }, + apr: { + [getUniqueCreditCollateralKey( + getMockToken(SupportedChain.Sepolia, sepoliaAssetsWithPriceFeeds.usdc), + getMockToken(SupportedChain.Sepolia, lpTokenAddress), + )]: apr, + }, + duration: { + days: durationDays, + date: undefined, + }, + expirationDays, + utilizedCreditId: generateAddress(), + isOffer: false, + sourceOfFunds: user_address, + minCreditAmountPercentage: 3, + collateralId: "1", + token0Denominator: true, + acceptorController: ZERO_ADDRESS, + acceptorControllerData: ZERO_ADDRESS, + minCreditAmount: 0n, + }, + { + api: { + persistProposal: vi.fn().mockImplementation((p) => p), + persistProposals: vi.fn().mockImplementation((p) => p), + updateNonces: vi.fn().mockImplementation((p) => p), + }, + contract: contractMock, + loanContract: loanContractMock, + }, + ); + + expect(contractMock.createOnChainProposal).toHaveBeenCalled(); + expect(proposal).toBeDefined(); + expect(proposal.proposerSpecHash).toBe(proposerSpecHash); + expect(proposal.collateralAddress).toBe(lpTokenAddress); + expect(proposal.creditAddress).toBe(sepoliaAssetsWithPriceFeeds.usdc); + expect(proposal.availableCreditLimit).toBe(2000n*10n**6n); + expect(proposal.minCreditAmount).toBe(60n*10n**6n); + expect(proposal.accruingInterestAPR).toBe(apr); + expect(proposal.durationOrDate).toBe(durationDays * 24 * 60 * 60); + expect(proposal.isOffer).toBe(false); + expect(proposal.refinancingLoanId).toBe(0n); + expect(proposal.nonceSpace).toBe(0n); + expect(proposal.nonce).toBe(0n); + expect(proposal.loanContract).toBe( + getLoanContractAddress(SupportedChain.Sepolia), + ); + expect(proposal.collateralId).toBe(1n); + }); + it("should assemble elastic proposal with token that has underlyingAddress property", async () => { const contractMock = { createProposal: vi.fn().mockImplementation((p) => p), diff --git a/packages/v1-core/src/factories/create-uniswap-v3-lp-individual-proposal.ts b/packages/v1-core/src/factories/create-uniswap-v3-lp-individual-proposal.ts index d91bdfb2..6ce8ea11 100644 --- a/packages/v1-core/src/factories/create-uniswap-v3-lp-individual-proposal.ts +++ b/packages/v1-core/src/factories/create-uniswap-v3-lp-individual-proposal.ts @@ -7,9 +7,6 @@ import { UniswapV3Position } from "../../../core/src/models/liquidity-position.j import { invariant } from 'ts-invariant' export type CreateUniswapV3IndividualProposalParams = BaseTerm & { token0Denominator: boolean; - feedIntermediaryDenominations: AddressString[]; - feedInvertFlags: boolean[]; - loanToValue: bigint; acceptorController: AddressString; acceptorControllerData: Hex; collateralId: string; @@ -42,11 +39,23 @@ export class UniswapV3LpIndividualProposalStrategy invariant(ltv, "LTV is undefined"); - invariant(params.collateral instanceof UniswapV3Position, "Collateral must be a UniswapV3Position"); + console.log({ + collateral: params.collateral, + constructor: params.collateral.constructor.name, + prototype: Object.getPrototypeOf(params.collateral), + instanceOfUniswapV3: params.collateral instanceof UniswapV3Position, + type: typeof params.collateral + }); + + const castedCollateral = 'tokenId' in params.collateral && 'tokenA' in params.collateral && 'tokenB' in params.collateral + ? params.collateral as UniswapV3Position + : null; + + invariant(castedCollateral, "Collateral is not a UniswapV3Position"); const feedData = getFeedData( - params.collateral.chainId as ChainsWithChainLinkFeedSupport, - params.collateral.address, + castedCollateral.chainId as ChainsWithChainLinkFeedSupport, + params.token0Denominator ? castedCollateral.tokenA : castedCollateral.tokenB, "underlyingAddress" in params.credit && params.credit.underlyingAddress ? params.credit.underlyingAddress : params.credit.address, @@ -56,12 +65,12 @@ export class UniswapV3LpIndividualProposalStrategy const creditAmount = await contract.getCreditAmount( params.credit.address, - BigInt(params.collateral.tokenId), + BigInt(castedCollateral.tokenId), params.token0Denominator, - params.feedIntermediaryDenominations, - params.feedInvertFlags, + feedData.feedIntermediaryDenominations, + feedData.feedInvertFlags, BigInt(ltv), - params.collateral.chainId, + castedCollateral.chainId, ) const minCreditAmount = @@ -103,19 +112,19 @@ export class UniswapV3LpIndividualProposalStrategy { ...commonFields, isOffer: false, - feedIntermediaryDenominations: params.feedIntermediaryDenominations, - feedInvertFlags: params.feedInvertFlags, + feedIntermediaryDenominations: feedData.feedIntermediaryDenominations, + feedInvertFlags: feedData.feedInvertFlags, loanToValue: BigInt(ltv), minCreditAmount, - chainId: params.collateral.chainId, - collateralCategory: params.collateral.category, - collateralAddress: params.collateral.address, - collateralId: BigInt(params.collateral.tokenId), + chainId: castedCollateral.chainId, + collateralCategory: castedCollateral.category, + collateralAddress: castedCollateral.address, + collateralId: BigInt(castedCollateral.tokenId), token0Denominator: params.token0Denominator, acceptorController: params.acceptorController, acceptorControllerData: params.acceptorControllerData }, - params.collateral.chainId, + castedCollateral.chainId, ); } @@ -126,9 +135,7 @@ export class UniswapV3LpIndividualProposalStrategy sourceOfFunds: AddressString | null, minCreditAmount: bigint, token0Denominator?: boolean, - feedIntermediaryDenominations?: AddressString[], - feedInvertFlags?: boolean[], - loanToValue?: bigint, + collateralId?: bigint, ): CreateUniswapV3IndividualProposalParams[] { invariant(!isOffer, "UniswapV3LpIndividualProposal is always a borrow request"); @@ -139,9 +146,7 @@ export class UniswapV3LpIndividualProposalStrategy const collateral = this.term.collateralAssets[0]; invariant(token0Denominator, "Token 0 denominator is required"); - invariant(feedIntermediaryDenominations && feedIntermediaryDenominations.length > 0, "Feed intermediary denominations are required"); - invariant(feedInvertFlags && feedInvertFlags.length > 0, "Feed invert flags are required"); - invariant(loanToValue, "Loan to value is required"); + invariant(collateralId, "Collateral id is required"); return [ { @@ -160,13 +165,11 @@ export class UniswapV3LpIndividualProposalStrategy sourceOfFunds, minCreditAmount, token0Denominator, - feedIntermediaryDenominations, - feedInvertFlags, - loanToValue, acceptorController: ZERO_ADDRESS, acceptorControllerData: ZERO_ADDRESS, collateralId: (collateral as UniswapV3Position).tokenId, minCreditAmountPercentage: this.term.minCreditAmountPercentage || 0, + relatedStrategyId: this.term.relatedStrategyId, } ]; } @@ -179,9 +182,7 @@ export class UniswapV3LpIndividualProposalStrategy sourceOfFunds: AddressString | null, minCreditAmount: bigint, token0Denominator?: boolean, - feedIntermediaryDenominations?: AddressString[], - feedInvertFlags?: boolean[], - loanToValue?: bigint, + collateralId?: bigint, ): Promise { const paramsArray = this.getProposalsParams( creditAmount, @@ -190,9 +191,7 @@ export class UniswapV3LpIndividualProposalStrategy sourceOfFunds, minCreditAmount, token0Denominator, - feedIntermediaryDenominations, - feedInvertFlags, - loanToValue, + collateralId, ); const result: UniswapV3IndividualProposal[] = []; @@ -259,9 +258,7 @@ export const createUniswapV3LpIndividualProposal = async ( params.sourceOfFunds, params.minCreditAmount, params.token0Denominator, - params.feedIntermediaryDenominations, - params.feedInvertFlags, - params.loanToValue, + BigInt(params.collateralId) ); return proposals[0]; From d8854c04002f33c78319863bb1473d7dc97fc0c5 Mon Sep 17 00:00:00 2001 From: tohrxyz Date: Thu, 15 May 2025 14:33:31 +0200 Subject: [PATCH 13/19] chore(release): publish 0.0.1-rc --- bun.lockb | Bin 1285928 -> 1800312 bytes packages/api/package.json | 2 +- packages/core/package.json | 2 +- packages/v1-core/package.json | 6 +++--- packages/v1-sdk-react/package.json | 6 +++--- packages/v1-sdk-vue/package.json | 6 +++--- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/bun.lockb b/bun.lockb index 930b44c4666d31c76ecd56dbf97142ff0b2aa757..b386fd528c92576b8baa197a176531c17160590d 100755 GIT binary patch delta 600691 zcmce<1$b3gw=TS5I3#FrfwHOzjN~6@0@$@bDqodwC^5M#~fqKG3T0=mAgB9co{XNf`96YeFI6z#lrHXmSIYp#kJdiJS(a&g6YSL?!cojK5V<)2PB?rNjot z0BI`;K&Eq9qvEViO?v@xLHfxvN=y1Xpc$`Uzz-T-v?V4iAi|n>%%snkk%W6dv%pOz zPAMz&FQ8d*UH^X>6X`&wCCKVRg=Tp5a#GRvK*mQ|ouSq$npO$%uxmZp<_ZXnbOdV7 z@=}l=BB0*n_n;{{ACvAFAdFrG(%M5Tu9!hIT5GJ!7LuqfF&PSR1y~beoR&NlC4IQd zVGprIS~G)2g~>r-jtE<@#aW~h8SAJeXE%PJg+PkPX|)8SLquEbiBXoAps=7YOJoEp z+ErOv5@vA)ghX0G*Mnw(qtP1FoqQgcDW$zzf!3d@iuRua8Pm(ewk8e&Qsy11o1Va= zErB+p1KV7Vco%AHk@A~cX+5~6r0M~r%Gv;#duA=My)i%vtUAJJ62ods?FB)zm)>%h z^j@HSLBFjb>0j0nlY^fN2)0Jq?wjG|>xmrd!+k(wIt3CG19mncf+{SF2pWA*q$>fz z+K~FfnB5UXIcXgmNV7DkEy8UCV?&@s+xUTlY$M5CPLT_k*J z7s#J2N=5)Hp4(Lz2?NcFu67nz-vKl$+zOihtBzT~e9&aD1ZY+;40K^&Hj{2*(jS3j zq?DO{pc$UAvo2%NlTIR{3qUfo8^{)I08*zxj!1_SoY&|hx*q{#Z#fTS{9&|^D(T%< zXf?QQM|c*52gbSr9f_JYyr0mj*DTh}1hat|kd%tZZV?K#9KugmX{+#UhgG6DX3?v*8Ct*91tBmjF_P>yUv3 zZ4DM%SO&}qI>n@&z@nhL0*e6a0-3)UkbWVfiK9>SaR< z!d^-OR{$x1I*6ly$^df!eSz75F)`AfU?BPJ0fZ*?e(IUn9hSiib%AW4cf4S* zBPJlo;yj zGRmb19ZnWWwFd32BY-2fCDNtUVF2h}K#C~bg`%N~_9MjBUIN)$YnV81q?k$)(z7>* z0a;ObAVixSYPGu(?Lis`@9HRL=U`3qNBCr505Afmm%xvf_(9AEtN?tPBzO>rsZR1D zAmd$ep|A$DVw|)zH;|%U1*Gi+IvkOKP!UF?*ce-+YmpfrF`tP0#@IHwUuey?>B$>jMjdE{^cLz-5!fFRqv@l57i_HW&-K3a~AZ4Lm+o@+APv zgI)^6R4zFH@zlsr$D-L&IIrmm4BzwC_<+ zCgA-=QbE`G7~w&$1YIBK0M-W91l9t20ILB{FBF^)tO`0DNXgVPF+H#{=o@Q9B7@dq zMyw;?;*SzB3Rn?z4`2mg852J)5c(uA0O5;)6m1-kEouj(go>FsYPP8A0~lxcDHE5O z4H;shKTv1O-0_1txjIj9y@?Zmw83B#>zkOz#FulWCC5!%YT_^xdzn}jNI#X$#K&`l zJ~#(HfDsGLfWg2LpnIBF)kJR-pP^;N5ubUl^g0(X8|Xbi+R!mGez}Q(rX(5zX$$-I z3&T#U%Mlr8)h-=?{EHys?y0RW4*0}qabiZ{#W{j}eg998PTA$-W-vwqx zxEf-tu4tz%%JR=p`ie+5PnWe~7nT4`kk-Oq>K{owH4R<0k0>ABa@%1F4O3CVdRZ z^u`P_IX8>7YS0Ed7`%lr*IUvjTML4w@Yqy2itXYD! z7^fpPGz{JJMT&op(mKqZ?Z|{=OrGv9Y42hnbvFyh_#waoz+zx>#UJyTMHER*!2b}s|79O{S;W~ZHvbQJyd{8DbU0#Z&nAdUF| zkhXRxzwTyO<78xD#KM9iS}$-|1oY!vZidyWQAR5)>6!t_=vE-DdNGhzJ*0@Va5`vq z=Q4i6@L15Sa1&@sF31)DFX_;NbeD^(*V^c!BJ%JOZiaP!0J24Gfb5p#fwW#9AS--Z zTy%U5NNe9`;tCTd0clIICiXM28IUR)SXLO;PvQry7V~%G%cQ)SAeV`si%Ev`K(@$O zPJodAFvCv)X)E8C7l~X0vb&bCugaw!z8QYmy)5H=$iYyn9 z4)zlyMNz&maR`vAI}KG)5^F09mZ&0(%>qr;6sRh6Iw0$Lh4@_T|9{{IIS$P!1z)Hp z#&R5J=okgF0AuA5#^tg(<7i}qYDi0B95EJtL`FF|mB5TA+G^*_=VNs#?=K)3433SC zv?f@cSSv$+53)W)cqaD$v-m-d7Mm4K08*s)Ym1Ig0m*>!{b_x^a=kl|j=iCOJu%)8 zOKfBe7!7eav0kfbEfLOg)o1%JNUu|*^&3e4tOg{fSb4@^h-E$`VEpWc;&Mj;X_QkC zP8IytNEloJWOqw$Ecp)r>42?u@t?dh-@5?1t{0)3uB}z7|-wnox~VBAR`&kO=Df%SqhvBq-P9r zU=bfiSl3KMG?;0aD`XGhR0~+pyQBzVFrd{758Zf9H3F1xBRS1r+CDoDAXL z0aQR;moY0ew=awZkibOrmPm^WgQ}JX@s#AgUSezgdK;?KlV9NnTl5e}&PMeSya}2T zScVML*<>KCcWqy3(XTxvKFS&u;z9+X{e(_JI;tjJf00PV7c#H-jCe}&0m5m7SAbdB z|J7zhC^C|fZYDYg2**u8lk+@48dsZvLjMFLT@~RRq|mp6D5?1tDQ7Z}5*!6&!xBy0 z5h&?>f)LOCA0KApyhF3OPz2C{gyb{?NC`OX));ygxEEVcK#0ABSz&ssR1gyuYmb1a zdw^!XR3NQ8gURqGNQ#X78X}B5H|aaT!i>0xALMXjsGuvx5)+Hz;7e#qrb4B3n@!41 zyT~8NO(5`l!pt6Lae@m?8y7C=RlcF1=`PflR$yX`vCFUz`N(g>NWls~+VEC{v)#)D zvCbOcw8o(9s3<8&C{42_UIx0a+0i zAdP85UC@++)fy0DbGl+g9tAPB43Z2=Fu_)tXB4uhBo!{D_czOnwMW~q&8&4c=@w>r zl}uFIGEPf;K%gTyk$YPBcG2vyQtu$zG5-Aln*0rj6ED#b$o5nMvKS zM`9P_Q~Zk**0n@Q9|EM8=>;^}AIn{GO?#CfG`{qmmJsyO=wL%}`36gPd|)g>v5Nzm zJt7WB3-32X;vHsu7?%R@$*AJPh8p$h|0Gl&@%<3N2H9K|r_++CMW8?mI-7}ZKq}^K zlBDAhN(Mf`J+tAjfK(I)rg&GRrlo^3VR**jl3sbk8K8aHrT~_XOrG2$~F> z2ThYW0Mz-zW1{%w7Zbz=RKmNUDe8$xNXC`{SpaspjakjNAB2Go2&aV9m^~Xb^W~l_ z`LY11l4P@-&8CD_k96x~h;9)AD8d;gjyJKyRN-_Mkj6P4$bxks)BBqAu4xjF{q~ds z#p>%Xr%S~xX9&affJ~ou|NTDFG5i{k-bLlhI7_^u%6As=Y=GLWR{Q$L%y8LDz}zA> znqD0fl{r%IWz%LJfaa9Eji-E|s^t~6d0}kXAZOEg(qOg!uFaPQs|BfZD2J-t52WTc z0BMuhY&X2yGSJ3{>hlGXQH>XB{bn8#u%%p~aM_Zq=p{}E>?VY3eK@wVY@skd*Tm?6 zNJo$*#tMXu#b|RENqlrfD3kw_Po+2Vr(7srT%V1m(^w_|sWatxRd=hhMB>#Lopy~) zd43o2)A;Hwlk}5-9Ae1s zEBN6DoD1a4b)TEyvUT#=Gv+t3rhGt70@MOp0ODz_IgpPt)NN)tgUxc@ZV(27!mL=t zb7-;lU|SHJ-^Pv74QBxJutGJ19E|`vi1>{unM#$?{g9tloDcP|Tff*M0tgx?YXEAO z_Y&w5h#!S^a$2_wG(X$a=IT1oG_86&+>CVVw~I#9W^HkV=R>^O{QVK}s83Hmf*+h8 zs$F2UO&!3>e(u@{DykZH zObT+@LXE|U8wjUHn;e&NlxI|HtUL+D`RQq-qZe2KG`zqGj5!R5bi{J{qt*CbB9w#K zXJ(iWWG9HR*%MvSi5kwBz````=abTsAAyWdF)`Q*A7vdB$%@%eHkuWxvsx*jDPc5B zXT6#__NGpysncr3@r6R&?}Z|X>Xex}eWs4ZspD|!w3|BRrcSe|Q*7$AS|5~0W6xV~ zpsa|g^KDs6FQwG+uc4>?v`BkKO?_(o zcV7?_F=SD2gRhCx_yD8=Lx6ODRZRNOb?GZ5K||Ae@{}8r;R}$qH}Iz5CKI~=SrGO< ztqD*_JkqgGgaB!RT~H7ORu7vqwB<&iiCykUdM)k$%(7x3bRGf1gk%g zc9aH^|Dg~N+h;dX>0wZ;#n^xMza-UL6J)~=<4Xu!x)#C1Hkh`#9vWRqPgb2-_055Z zpqp$3WarQDROp>g^2w>JsM&aNs@vl!((tfq;){!3O!q9S7Y=*#@NGRlX7Lg;wLMl7q>n zo;(Q|sIeYE8iYF8A!~7(wgeT>;#`QQKxcjwdJK^5k25h8$clTJ*xJMfKpIrIx%?L% z57&)<8NX2A-L>R*pGAY}>v#kzq=p?P_6Pn)34Q!36~6@1Gy{X2iP16PuG(fgU2{(v zS+S&k)Xm-Su9JamSZ8;4qXBPhGVhcYKcnF z+ImX9hCm7;u$naFn}?L22lZ1EqrBXysp83R@q;FnoK7k@3}i+dkQNj-IHgUc!a4ji zNdC3y-3@_0&5)8*sj#k6)yw2=7(!_v6`vDGeYgWzol@}IjMCi4K-O{-NV%)p(;CPn z=#%=Zn@yTs-o%SQ*hAao!tx_I(pw4&H+Hr)?X^ii22yS~1&l*Pnx?){U9Pa`2+A+J zFcO(PC9raZD%nvS2Rkny`TLwzn!P8dyP@7fxr7f3kLN_#VqRxW*5)fjFVa{(9$p}xRw73`HEord?~1P!uhv*>2q)LO@=Epb4rg$@(-J+v44;rs z!ehdWZAK5R{mYc_Dh>2*=*|?k)fH*uUenM*?#2r003h8$V-wZUu`;09UvmMeF3rUE zMMRCy3kqMD&)Oj@?Yy6~=eUWh5O1gv2sP=+mx@XP?yJUFgSFF$pkVd`Dc5tw1XYEb z%>vXmyehCeluH5hDk0|95yOe}K( zIiFn*q$hq-QaDx)unNNc5dIF~Tyy?VK+@d-%?g#n#1d3YjLqt72no|*`}&JvN5@9N zU1DbMz!6;?Lc(r3z7DKf7bIW-t$=KaodYHQO$?C!77Jwm`p(2wK)TYZK=z=*CT0Rs zHSf#28xH3_kS25HBt2F>#8n^@VzlI7iXBSN{PY&9fdV5GDh%Sj>JF)4ryl*l{8 zv!WcJDXEb)r6Q|+P^`^qb!M(5T{^@T8jDY4O>Jl>MiMbc$3$D}Tw5g3q;?r;Nl>IM z)`kf6?Vnh=78HYnkqI^jGwiLCa=d!s96#5U`hNscrM2s&e5_t7Q+$01cGgbuuhBpc zX(U_mZs@`kQ&}M8e-q)9|6m}+`MQyC;bW#di*Slbox?xUSX$Y(i4-5r6)yZ6)KH|f z6Y0r?auueF(6z3Jpm;2p(lCQMOkKh3>wh(qf*$}`z>MZ1UMxG>aJ*4lf^dp^Ji-}2 z3`oXqnE6Vy6g%N@bWXaIm_1t2(7M5pkboIugDPNU+UdyJTIi_YSSQ=y0h$%OM>-Z< zuZ=MD)TA#08GjPUh8%2}vb|<0-3KJ?(+kMrgQJ4kJS|;&(PAq2qur_Y?FLQ3SMDIy z3As z3!z4pFWZBRq}5?hwS>e&R91YDDBq=g62!=zck6%cg5ax^?{Px~^uo_EUFMvkOi%G) zuYhb(`(7fc>!9f(P6H{KgFr*$eI*@s00VGWAuP0ygm3FD>38%Kmoo1}%4SeWfjyFKI>ZWR z0E%2)70U;jDpuV*$s^@%y*xUvA+l3t8Y9{MAFpn7P5#&N#{bOfM)&e5$Lkl?N8FZA zs?Vdv5GqX;{Y5~(>~beSvv2MNQe1XNG+YBl>A*mz74wXTQ^eV*bBJH3N|$^NWY@X} zWIpbpL|a_0tDq^zu_;Epo;(;oXfW4M5cP9fg_|gXFkyM6&ZnKDJL{!zftrrGx zkuAV(iLzb;&3siiNWtoS1LJuNDcEY9`*Gz##boUKMqw!bCShQ^jsQv^(Gr^!iEf3x z)?jw8zmb3~Tx7;a0V$!;K#I<_MY?M^kS$V2RWwvYoku_t>WD)L5+bls+uNZvKbKW zu-P&A7)Q==)Yf4~gL7otmX##ZODzBVN82kd`xYuUKGX&{S9jAe*7K@zeqK zA_%8<`hLGyU;>bIw9^rUU8&F&G7Kmn&UG>3eL|`fYBLqcLo`85} zPzP7kiR68U#4`UnEOP94)LpBAbZ$V3Z}c%~NCc4jv>ca)95^Cf@1z())>9&P*?>fP&}@j>hpcc~EO88whSLM_ zL^ZRBM)}4?l9>45ffnaAa(Pp}75KI!ka=0GGI&mZ-pB3)db) zt5Jnb&q+SDqpH57)Q#p^h-Z1cpxhw>mJs1UZv4x5LHulDq%)TE*YlF_wTVFvhGNqz zR7R*rX7~~KN4EUd`IJ@7D(Dl~Fpxcg)Zm*gvbI?9ikL*wRnb6yAO+kMNDY-V!!rWu zoE{^+AMiMkOA)I~dV)!315$2jG_EKA*DA*Zg*zr_M_`OJ{3=X=w!QPVR4k?er}lqk zT7CazQvc4B4ArATCHS-wyM0G2;M)U{RQy9RrCTYLTlnh#@3(LM)BHwH{y*KmQLa#} z>RI87f^o!pD7rRXAGV?>$94SDTE&fXSzOwMee~BfPd@Ytg z%A^d>4zBzN`+~O4A)^{kMlmBJ-K`*F| zUTu6Y3Q|X~)CnDYuo)+E#(a?U>ZFc3xf73YddcU1OV7IpWY--3QNmk-VKSml7DPlk z>^eJZZA4IXe|(az7tN;(@UJ|==|gyJJQlv-+Gko+m=ML>>T-vil4BY^C4 zZGnEk3PAQvA0Q_hZ@xu&?Y#06Y0AAPbrbWI;(l#s`|=t$^&@70vh@Ko1avx6fs}-9X7Gaq=rwZ# zDauSH;_!!2fZb{h=2evenLLaN(r%HtAw9<%b*bNlDKaZAitET!)nz@ahr#g0Scl-P5{~R^+2|KCXgx^V#eEnY}h|H)y)Se^hk6Y z8pXPtl5qhrCup_KQUmdvv&CRBI}n_|ag+4;t}y)NJ|G#z0;?gZUO-AR7m(KO1!PNA zdK_Ia7-@rfH5#lZSHur;o(D+IzxsL@Ht@j2(?Ht5HXsXJV&YH~L|btMM+D$I+ZBiZ zDB8Y-JPbx+;vL3$*e{^jz~?|R663(_Zv2z&Nc6vdx6i8fRn-Qq+Fwn(e`#*mCO1a~ zWbntL9)`r~fTqp#E+!If3S_)_b33^V;&ZV7uP^Rl%+0ElkOXCcG@3j>sv;ARM))Jr zaftFkMz%alDWTsM6bU*l!M20|yhT&a!}xM}6!v*oRg{u!?86)jBnv8HfrU)Y?t>w6c+AAq0usO0Wb{rQDLBQX`ZgwCVFN*ot*&^ywEF~Vmp{ybn>6^RPUEX#c4{*Z z88ghY=;~PkTc{oDRd^f(@l^E_FpS=zCzoy^qRj`S&Q1Z@ZO$P9d%+eURk6OMVEa}c z#sW}nAX_@YZ279zVk5JGG`=w=#sO&qHXsMBU~4eW;cMC)l$VcFc6G94Aqt}PCIRU% z65B~Z`LQIyg@E_%J+$J$^CqqbvRh3BvRg%)*a_$dx{`_6f$Tl6Q663UMId`a7%)5g ze}DX7i%+2W?B@@=N&&}#Ot{9xsX$614oDI9HL)>}Mpp(%WAg#BA%Axfo3fb=QYTLO zfTkyW0Nc@NJS*^nBANrF3dRB{fjA&VX+FY}tlr)+mNuY!wKS3iOC)4`kegtrMH;jY z$g!Y1kmWQ6Ql&Ar=;%Zo3E3Wq{?7`lBZ37K1Jd!#$7n%@9tVle)J==opjp7eV9~ug z;-Vh^_;-(kq(ixE@#}$7{=YU;blFWwyNjZ3YCJ*)s)jH0#DHVPm|_Tr)SVHyGO)=e z-OvRjBt+PFQ6kwrbZ#h{#$af${kUq-4}9O)*%s zx8Y)wI(d)^2C3_4tiQ3x+hg&z751B=EUpOB>N9UQ(oqFI4k^zjgQcb?@)Rom-9rQ` zylCP+U=l7vv3!Vr!RpVejbxK1WGBHkPG)G2tJR|L~40RmC9R;(ZVDt(y zbUj&A;|Q@DmqJDlPg&o+ls>x6 zQV~y49oDoA zLmUmHW6e52G~;MHpNKq)En2mHOtArYA3j0GiNt1Q3S- zX*ye{38xcHIua+r`EPuRgg*mv`k@19+lUVci;0Sy1xZj9IFJbra9JfzB-3Pubk?4r zDarakKH`_WW~PU+cwH6&6s39{tsrRj?!mJ~MJ0i3!Js*U&4Cne7Hg;Gv-OdlRyzm`{6`0BHR-F! zNQZbF$QJGZvf$@SM5jT{pn$4X@U4Py+ElE0pXVP2z!)X|0SvL;d%F3<7cC)2nSc~I zFZEH^#aD>}8Lj#6sG8Skzg0*-{Xp{|%DWg&jRCQz3eU(E^S}W6zy1$AaCK+e*cIDef~_(&4`<5+CJNsD#@nLf*Ukw8nNBdr{%&7|{e5UWoBQdPao z@LFcM4L34B`ahn~utnpx>v06oX!ZdqLc9bM#x@7y@EM1UefZ1g{*n%AY2m zo}AV+)Xl;}Sj^G!;?h1Wb^g{uBz}9DFm- z7({^_vnBwUaXK>4?VLX)9|;ksMK%7Z(ra@8>G9tIX+k_Cod^wkf~JkXMS51~I%&Ei zhuw}BQ#4+G)LF2)KdBZ6)jUi;Cmatz0Zca*1<(y`2GZYkM>uW9{esxY>+@1kK_K1E zRfMxwN8uKz0}SzSBQLb8H-&Ov!knF)eY+?vcm!n2XP^Rd9v3+X*)Z=4tZd*V#IuDJ zFH6DOK{NjnGv9b18O(f5@EB;isdzki%8}s~!l}ZTsA$8FF1iL!Pfi1kfkV^wU6&Tk zLPoYY0mzo7+%QFFzW?Bj7P2C>*`yx2yL?krI0eZ3^5P$sU!r8>IC@L!>wH@nU#cU5 z9BqJZIp0a!g6Rn7SQl$zPax-Sb%2~G76Hx|Km-}8Y9_d57Px1xthFBnO`R?SQWfg#l-d#>ig1==1JX8{KNf}# z0LiG5M5QMNLwfQrh@j4^0a;-3Q|V3~&t>#J|EGuX3ffvAXLuul<$(QwJiJlE3{MBF z1p2}=590xxjX+9tI?xXo1!VeGz>>fKU;%pi3}%206_b&YV1!1cEiYS{OSYK_~2y!S6`ay-P^`UNJ*3iQm4s( zi^wkn$yhFgQw3okMYkW|vN^xW|4EGR9B8WaAZVsj`BXV;5Kl>t2kKmfQ14p~LIB4k zpRZzMYP(8pJB1*gx^;XLMha-2hA|!mZOjIM>=oTjYz<^Dcmkwjb4PlXe-Si|vY)%B zydx3Grw{P&yt}7id_4z91r31AaM;7su=XuLO28RuNLqV_2^Foqua~FcFWLjih*vtn zsNm|x{A2=X8udg^Pon`@(hL33OP7F`$Vh8#1Y`@U0m*q;AX}__zaMB8G<2B=q$ooXP8+F~O&GQ#oQ!@%ICbv`bQmIS=q=?wHq)y|6H*b*^7TXu z9w|VDR#$aCGp$|pkqD~`4_}4AXY&De{A-_GDw0Wvru~j|WSDvQZ!c)JuqP^F3v=c4 zH2Qm`T%LvzdjYA+mk6iIegVP;^yI>bAjg*xz?R`fJIpq#YI{w3x{1Sp9Ob^`@HD#V zV<3&l&0HkFiG!+SBuieA4Cw$Yrx@r83o{Ta4fXO#d`_V8&3*+x$Ut43CuId?fb2G} zf#mc8kS=#o0Z+q`R4ORx^8x8E%9#bKuK@KKfx2+8BT(B@NXqjoEGkL}bCOT(5@_T8 z-|uFGY?I&>q#`0pJna#{k!vawqN1@t>TDR0qQBrL;c4%b%WA~G79ng%&xRB+S`1fT zOjJZk>lAg(;!==$miinLP?rr#2*+ycYb`!w zafnH zGGZ$~0ja9OWu-uM+n%@S**nxF`C9&xKkX%YhXoH5uqEo&yt*x~ZpW*AT%}7jGr|Ks zPJYG1)5mdx(`m)61>Dh8msixKm5l)+*}*v5&3eu@l6k-?gp>ZPXO&Go^+~9nk~mae zj7zmxy%V4q^@nGq^(zm#x3cKCa1~LJ#bvL|&xYtYd0=uL;yLQo0@BFSyUAgn{AKZj zE>#tz68H~DdD5w{-nhE(K{vqDAFqI3=$(w9;;5sSPe%jKvkZpokhsPyeK@ z0+a_$0X(iI;Vo*Lp4}P}gO_Vv1?m`r)A5+0BQ_FFCtqDj=mliMKOzAO{8JJp-vQEQ zGXbgkuPBi8OCU|>0+5|(Vton!3F*i{kp|M6kDBp!&Gh0>F+EV6*F*#be|XeM+A za+Fr*m3$kEgmLJFm&PNrf@Vd3HS#n@=~qpp_gw;VLNvXpl)DZz%U2h!jN2HT9^`N4 zX-s6!qX16%MmCoMw}EB>dytWi^GOSl2p+OEMn|>UfCnjfZCSg4cuFAE#4|0W<%?R0 zitmA@WOpMz2XGlsr^{9xk4AtWX!o|#f(LD+MR8-bk96f=$M z4f2tpJfMj^yGZ`brZH+J-Z0ah2GUkOe<#z9e-?r+b`@)nuPPPfM(?9X4eTzuZfBxj z4=ErIkUEddF1@=p;@Mj&0BN*wJ*5G-!iJ;Q!Pb%pr(=z@#aW|qkAGn=DQBu~{ul+M z?vi>-M)i_TBxrK1jPkcWqMH1DrNtS6>#W zXq}Fr9pp&knC}orr2e>r`eP465zcSa0YKV7TOf_C7LZn7(!?AlYCx8&KCoWe#c0(v z9rdSP{;;F}v)|&a^MDvjsEZRM9vH=KaN|ways^?7vH{uMeg-mql+_VW>m3^>-SZWY z4kjsHZ0IGBbJROP8mk@1eClXu0@5?y;?$kS@g*Aqm=Nzs7%%MgG3jMX?ZO(pHit(*@@xelGCbA-+>5_`$*F+7F`ZQ$XrgT?18&C<*;wrjM8`1#bZwwqqKlD(~M(Of4lDe=~voUx`YI zFccNgn6^%n3fST*XmLL?TpdjR87(b}bW?$xAIzFAM%Nd}2K+KZdPi0ujkxeZXEXm36ZTOh69 z^LO#x;jTbCqO}w=UmwI%#~n~G@zBqL>cgv@8K1IB8rBpv8PnBW96WG>dx%zT`f6#} zXdtb+$}f^ZebQ}OAdI+NP8%6W`^l%i><*hPbzdvx*)aJ_juNRd)0%m6a zzlk3dtp(m85cBA?x0*JYA|7PomyNB7>fg4D8(`j4IlK^sKnEiG8+s8pH2L zARE*WXq>{wV|}=&t!bCHimpp+lLUDFhmYe~Z-Hk2J`H4n`+(H(Mj(wZCN{)4O;L7- z(1U>NEoD#vyJIdOjoJ-J<9xAMjQK85X8{-SgGTlXbW0JQ1Wo+5O9~8%3dWL+ElP0|Lh1L1L=Si%_lHI{L3`9hbG=I z@tldrOx$Cl<$y>k*jU-Z8zTs3LvR=xOBqhhc2HDpgV7?^m0Y@YA z0B3|1T2+5rPCcaC3h`_i{#qNJr*K(s9Tt^1j!1rEtbngRj&Q1ACy?puA|G4MdV^zw ztYLT!HUL+GTsn@rSuoe(18e+{o_|a-{JYZ!>gA?r44PzI-L&V8iU`n31^?xrd;=pY zAD)?wgKV&9aZ*~Y9!s5UF`tSuUs3SF@XD5`aXjm*Ps7c zM7ISS!#r<7IU%9fsfNn+WHq-_&j3C~1iPaWy=s|ywNG6R*UU$<4x(cEbn}A(Z;Z+; zS>5qgcfQfdjK8&{uH9}xzU=J(Dx*rM4mYZ+cYHkqT^2ysY~VR8qhFQz;yr{kVe!M$QGIpm}sM}i-ZCY&Sn0*X1Xu^ zWC!LBkaNaUK=$|9H>KaJR~WV;oaN2L!m7?6h7CjoYf4uOk${uWhquMLr{9s`Rc(fi z1kGW4%3bkjVW2sK`r)3WPXe;yaFbU3zZ%k!u}(lrkXH&qxvF;KwzTLVkQL7W1GEA4 zpalmhKDvp1Y^Q^laN|ZN-r+yaW8xACcZNCUZ>K!7r zVyhNj_tueH8*)ks{XYg7$!VyGeSs8dCm>t2rKQ~(;F?P3+o?b?GQcsGj7r)g@;OZ~^ zs3*%udU+YP^CX>@@h$00?j=;UIPi~kQ!(8GK_L9kXEX$QRhW(AR~Te zI{cAMc6&|T{~qe?Wt6ABA5?Erf2=JM@pN24*`+}{vg=+3XMN3x!8yDP-CqIHCd%X# zT^|9>Zpgzym?GlDtXwQ_i+p6rmdneq6?M~Hy`S13x8zsvr#3`-+E#TSZRLWV&C75k zfswJ+K$|l-D_Ta^2@i(9M1Y5uUrTp-4kSaje5In$uz+X_eCM>hA|Z9Vxk5f+yf~1? zt8P216Zg&Yi|BC#*m#a!cifXBxETuwN5(T*XrWs7yJJ>-5y%3o7L*pn0oj5RW;l#C zAR0%06$WF2C(>aF#ygSx6VBSBLXxjsVL@}>L)X++j(QJSZRx139Ce-gOA!%W+V_#w z*Kpc*l24){swSkd91q_Ennt%CNJ+{L5c+@G&+VU04s9-ZEazQu;rJeqs`D ziC$eOUx}7dGU|SJ_fleX%4RZxCSyi^_J5V}?~*3Rn0nEHsPL-@C+F&wrsrjZp}RmD z(8AC7?6##$%nsxj@;N~8p@|oO>_zx;3grvRc$Qs{jKv$Lk19z) z>Rav>cCsh|^>Mn_9F)}bSuHdyL%1>V0Md_eMUxezT|HAzfvK64I#=GHI{H6#VSEil zM{8B8i)a+8$>e{WGO?xYs!BRF4@f)ytMR=_EwPnoFv$5rdpCKr_BMJLhv{(L{ENan z8%Z~uhX{(kSRK)&y6%xwP>ziJPv0}qJJl86|G&I&0!9=AQH@N7fRtDlAZ?%(kk&q~ zv2?2jChdw1a^mc}7L|k+;or|qBt32d;M_r?_M^~xa&Tmvksv)HXt5>oVk z1KC3NW?m^l-`%Jb@9lnd17}-LsrD+hSIXXCzk#`1-|vxiT8VpYHhsH& zv)}FRk5-QNzIZWR^l`WBS39nL^f9hyl|nxZ>2Un4YtPpUUFv156SB&cQu@2_eL3pB z9nfytiQM1zwD>LT^5#Ot?iAmfvDmggZu76Tc)u{Za>J!1hm6dgKjmmtrIgwBUbQY} zt8LGbyKU?KLswPrJuFMH&zIV`H}7_8Y}*4XFVwmnce7TT4J&RR zlCJ-}`V*JgQ`QakOBrkR^9dYOqJE>y-nGv3T9w-R&BFT|8Vy+F;S=`vkYvw>n_AAl z;rD&#^IylCB$hv#(c_2uHERBPnX z^mX5-TpEy1@4UQ*^ZCuGj%O>HPWVu|ci88@_ir4Sm}}eh6PG^a9u_dZ!ug^bf4%Bl z9G0!#pb{0c70ev=!B%Zm>Q7$f?gw8C|Lb5_vMr)Sv6PpJ2UT~4O&zl2eDz)C$M3F9 zsz1cG<-vUKb~~OAbbo$z(t~wdzHVKzxY^9S^V;ZzYwX`s@LKwhBi8I1@aNFx3zvnC zdS56ye%ROXalWg|Eh$qxXVY{a;+&4xvE?S+nzq6HUUHwh-%Wfr?%mSdEvMFxXzjdI z$G`lr-y6)X692T_1NwW_acCrugk{`?GA?17z+3LP7? zuF1vS!`rNBf8mdkosK*zwd2*$*ey5e`t2%QZdJyD-u@K|pKcO0{`Q=8i#N=BHzR%d zNBOt-^eq}Ox@O;J={;Ky-8!k>iOWx)o|<=~>C~we`}|O9Q~lcisljd0;>nq=*UTD~ zP_ae+Ez6uAcK=eP(RUT@92qimShcko&jyV+)b(ke8a)ziZx3AQSUGz(=jl?v*KdC( zVr|wf&cm)g$NxOBXaDBt#@Q=mF=dvgf{2DS6jNr>xt2)aT6ORwbU4{$corW`#?yJgZ+#>9l=s%D}C)e1>lS zar@#|PbY;Xx;NZ*=1%_szteU< zJ$!!qQ8laFP5xEix_4f&4cS$qyE9LH+xIc#Q{QQ?MvXfiKDS<(#x45ZOMSkfdxe$9 zS51iiI(M$tDPatIbfs12BXN0RkN5jfXk|jCZoOAWPAliRV&J~Q?!7l3w<_u0 zxp?nrsX8`$ws!3YzIc95|Ksnh6Po1gHfd3oVIHoEMb>QH^LgWmDj#aK^*$XkcgN?E zuk$|oTA}Ua*u$ySb9L)|{Z0CMcN_Ga*C794>8ZXKOVnz^!Nws z{_g+LR_?yXnJw|-XD^?4)7orSm6T??8&=CzJEYAwpAJvny4`I0v`oH*S-k(qv#GdG zpNJW&9Gero3hI+y`ul|Ut=MPRInNTcnp=Mg^ziLl=i8V(t97p%?n*Sz&yI`>n6cya zISk_K(S#23}hF?9bP^DxdG{vv>QA40%Vo|9y06-T7nNU(a(q-|5#i4-Tmw z*KFCsy46w_txR{jhQ4#lyk0kE9ozV8j~#byZ&&u3()HcdVt+i_o`0|3motOvZ_4sG zdRhbjVF_8111jwvzVYHa{iCnm?BKrZe>UzI{$t)ctFJC^cDR3!`z@kc)K17+YQlqn zjB`)kF8C;2+2!3*rG!8fAJ*t%KEJbgMbu6BfV@6sK=9{8zsx6*!>|4cWc_rly4HmqO1 zL+|eBls+};hoRZ-`E763Jhe~P_jP+ON%(wfpY>zMUmJU5{v7^nZMIsUeqP!)(XQ{& zXMeuaxX*yF>I0TnEdS?>e$g$SwOQNn;-S4~?cK80A9Qo`YVV*f%N9NR5O`xi&J5K` zU0^)!oLzRV*^Rw=)xP@zoM^8S@IQ2);@=&<~5|EBjE?>W-u zV6EQ{g}WD-9a#8}GHa)d8+tvzulLZbN3K4o*{$mOX9Ln@Ki8>S_U9QcXY^fF>_L|A z-?iFbs&RalB^QpCdAZaA>{!{2zXg^1 zSa{;kCCaSXm#>-{g_lqD**8KPGNfJhwv$$Vb9k1myR28Kes5DI&-c6WIl20j716n` zy~{S#O-UlTP)gpGFY4FwcwDpnQtfeKv4yWbI_ospsZVcHdUva9bG&zrpHq0qh3&bv zMZGTGWcIdZx2nH+`FHjbFAAKS9awMW^scGaH;bk{dHwlGnJ)VlCBB|ip>xe+hnjXc zwr1SCYkRv6y56hL$R1nWHa&gbspq6e*(1AV^6%X*`^kW9)1zWf`OX=X^xZ1&V$c2J zbETBlE#04Y_|Um@h2op$_SN%c@~Kg&Vy2PTvzFXbui2T3)@Cz9w*Jyw^XrtkXWaE= ze&Zbdq8hCakMF6b6UV>Sud%53tb2tH)Jk*|b*#_membmR?QhYwcD+sCwdqH{lWX?= zl=|9ce|2i_%XG`vJ~Ri<9cnOLGr!@o5tRxB+&}ofO+R;iTd%e)97~QgeLt(r`U)H0 zmR`U5M(Ll1?a8}kR>|eJd^63BT`_&I`<#0>BUi?^t0F2S?)_cmQ|0t(IcDs{rQrjPj)-`CvFgTk9cK3)xcouh zPuA#7Z-?q1 iYFCc#IpXKrkDu&$;gwg>abvF^aP0e`f_+70yW548&GV1S)wfjA zngU%szU1D#`DWtXcgwcAj{ogjZf4c4lLz{)%W%=_R<)KR! zyf*Ub;C@TqF20;25@((xm9(2k7{;HhiFYP_AMFb@M?KgVs zU2RJLhFPwSdcSc>RPN2;f2H=?-rB19pVp7~&n~##RlZ_il}-82RSGWXI%9EZPcPbD zF3xbkH&>RSMY5cjd}C|fE1%02_pJAWzNEpC6S-!uSTndwT>hK+y~dBNdm!_4<@-IJ zH?^0}l%rY51mErzXH{&gHSB++QqQhs>TjJH>>YRQ=EI@qnl-&(dDUr6xigI(xZRkR zIxH}?fw%95?{em9F{ae$q_Qs_rxx8Bzp?4k>EoQe9EJbfeRe~O)7_u{x~u3@?L~_< z^YqSJof}UC&551)eKzOEqS{Y~^G^)^I&R~H2Yb6_t#S79u-Z3^Hhg{9KK19tlfU%7 zbSm&o!c|*BYLDMGR?l!^P{q=&R@G&OcdRZOq{elOJ7vw`*lKi+oS_7yum z*V#WKa_Vmj+yg$9?BZwt)-m1et5@orQnR8h8JirS@dEX5`e_^A6>#U$Je0 z)q0aLw(y*p8*l1x|7+o!8CRT}9~L>%H|yJv7rOmcci8w1)20{BHScA>wK2o`^`ASu zbfYMcq~?}&f4AQCpo4$uJEPm|Y?k5pr*UludR}>PwP2z1cdL||v~%&0o4K-8 zkL$N>d)6$a7vxyCWmxU)kuT?;YrDOgN4E~`hfhfVV}|vO^IaLH4=UpA)_3#NfaY1g zY~B?1HhUH8^xZ4Y>^%`aJo3W#4Sy_j`*N0xGh@zGx^e6Gdj)HD^Jtqr>!3+Z^WU5J zVaMmy*&9|{8k%|Q*%8$pQ)+e|={($KW#0>9!|%QEZWNmGBqp8bEX(tImmbG2NL}81 zxsvqsI`-XTb4AQ3+aPdUO{~-PA2$C(r%DS_QUkVFTez>Cxjl>jk`Vuy8K?Cs^FD0# zmihZ~S85vfzH;UPH##R3Jvpk)T1Bh)*rE;NMt#{+@P`(czk6Tw?z@xWRWfgw|9s}k zI&(t$H#w8?^v_w-Bi={4yV6Y=8Z^63!u;p8cDQwaQfAMmknMWh?uDxx9=bHBkw?H! zry5P&(tlLMZ>#eQxU7&5V6+{^QM_XK_T<@%@*)oYEtarb(~c5f?HuXuj^yQB=~ zuXyMCvqJURJ!}1#E2}fx_hU96${&5{ZG(Kx3ii14RTT?7Z`V4tWZ@IO2^B_$L@juIGGKnr zdH45*Wl$|1nB)7BYo{fRQk)*^(e=iKL(e9r%wAi`??j(!c}JdX_@qbn%G18s!+Q=W z-|%ALdu0=p``nO%R z-PyZ4leUlFwy9(N($;swf3Fnz!@3gN=RWo9@ygcvr#V&X*R)pZT(`=wv)xu?9ebjz z?!SB7+4HlqK1%&7P^`2*&oLa8hI$$d*gs>nO+Xayl&g) z-B*jGn|8Y5jIAeU4D58EV9f(xd#!st(dWAxj$dy!?-KIp&=>0;XV#tibLFv(AD7m> znQ8XtZLM=O%Ky=l;ppWJ{qp1}Hht;FgBLbkn%ruH+q^+pFY3Eqr!MZg*n8#HYjwvJ zKU_dtP-I1~Cff5qQoL%d`!eOou{rOXx}(gJFO4iM_k2O?Z!WOYixN{JYePirZ(tv$opf z9TRx?@s`I0UaiU3a%i_K_0LrMzOvptNBEVmMa!$Y;?(<$;=EAM5Er>0a| zx>e89v-`t6t~r*4C6mjS8*L5TQ$E*$ozJFSPyc7<_tzhWdau5}XKUWc3AKKB(4;}> zxvlRFYJYrL!@ci)j(9Jw{p);>xV&$^ot&2aWz*vQ_j-)ZTxvxAfVwlwt!#XIX+pV{ z6}#Q=uG=E?{L$ZX?B6zj$%9VL!(G*cYv;h4zu)v4s~@fsx#9Kk(_x`KJD+dg|JAWO zM*}zYuMq!R$!uq;JHQN^IM6 z`_Yi}4I{^I_uCzu)TrFussVbp%zaAlt1)~^x3l$@YiHIyY%#TVe2#s-V}G8$>CD3~ zhX+2Y@x#YuI@?e8jtEwZ*lkB#m1gIwdKLC zO7*^mY&voA!}haH^K12eiuWCP*VCyjxZ>I}X?O$oq778M|Hp#gnqBR7ciy>sS$bW| zX;&&$DjRfX)p@;Ww|3rXbvI(m()XPQ)w`@js#@ClUT3{o#;qS!OH~Wi=YeXeqLnI? zgjKlFa%s43w7gJ(&GlY)Ir(JgoBPccuaC_#e9^``RqC`Z|6)s{-ETK$_$}|I3`^== zh&=dkR)ISuCSKkJkKQ8q@3n)7D)pbr(N zw%zjhvTybbjs0vdI&Lajtn`jqj>~_mS8H4QE-yR6cVgw_cULTr4vDH0SGQAQ)>k>A z52b85wf3lzu>}uh?Bb4^5|#g6TWedj>w}i*HlG|-q_m@m+r7}#7cpqR%$Ro$QW%M4zAJ;&awdE!P4wV4_;jWE6Yd+Kk# z57S-iv9LgaEYZ%|8#^_bf8KF^cim#8W`4-`&Zp|lGKgI{Jg_L!aQ{qc(lWUUK}WHNU-Ewy1sL`H+aK z-COmYV@{dj%d8FO_jLtU2z2ERwQaVB1q|+xt^SyNr$$Y=Jvw@A`r_9|z2Bo}NxP&~ z+xB~B7affn`SN|@qG28870G>Zcb+XJX7ActXIoCKURE{z)Ue?j z=bDk2|NLq3(L?9eDqP3%*WO|M-apFG;70f}&#J;^1>*C#uQ#c&_U@Acjyo&%oLkYl zO|6uE$A(R6ylU|J+(V13G()^Sb=nNIY-)O+<9 z|2xsS`p7@&*SAR?UG(_MZm-Rjnl&{aTqN%B{!u<<9RK^^_L=g}?X)rXD)Ye!gZB)3 zxa4bLvjUx)O?j0)qF&Yc;TPVvI6EiBr9AN`=dTHDoX z5#7JLa;f*AYpF*q)hBm|U%kuPVNtSwHl%L-p-A737up|M-1>Eo+$ApVOfkHw{ZzZF zjcZ&)jxk zv1tn|G5Kd7GI_9n@hRtR^((jTe!9@JK{r1KMOS+Gbo$c8U;lFXW!2{|x%>5Jm5-g* zz6jeswqo?v*$Y;^8uFu&ez9$eF1M{QcgOFBdEiAGNsCn}!8)z36+g#i_XY9U6cCvHo%W_EScc zjX&GYxA&%VPbQTQ`4a74bxh@fi6godE`P7k?74$u4h((K&gbvy+aiyb^4VVVOpebL ziZ)w+s+B#OZLO(|$m~j;3mpRLUA1R-)?SqP0)Ys(PqH zhcmyw>s@Tp%xe?#3`uKluALY@v)5+d`_cU;+-y8#&b|!|+LYha`p>bKpJs8^_Zz-e zag=y|se7l4GryP3wJO_~*?a!I_Wkqm-KD0s?%e+Hk=xNZt|n}J=GSOxsggNrZg6y3 z`{xOtk@m1X6Me>}+V{Bp*O|_vYv=J^Wkm%+)Z?`D*mSi~F)fd|0?5MTKQi)~e0ZUHozS>yR3MRr@E^ z^Cb%^K2#ePTvTPLwY&LhD*5;af84B@kgiy}J+HU_mi=DZobLODcGbDiV%GF6asKlU z_8wkx{<(V<^Byi&Liu;{>VGDDb{9&OIVf<#gmTM%Tx}WJ(3$bu)ne5K`?WtXyWNs< zsckXUA1A++(D(M_%u0d2ji!n{H%=AxOTJRCIVtnhRHOD;^m|*f>AgnzrW@I;Sk_fr zTX!B&J#Wq%TeSi7-YWWk-&>g%4@B*lza&k-k28JCM`Q{5D{fdsM6R~)^_+jtS^QGX z+qTlJHvSDa727!_VqF1G>aqRz`2Trs-i)ln%Ff?dfB))wS1ONDI(!WKxpMx8nS}`SxY;x;kEyoOh+N*AlG|uWvU-m6BxcuZo zbZ{+c%39TxWl!{kQrACD>$q#_ zqr}EH2Nx-pGq7{MAK?!RoyZz!-pCmzlzQ2*MU&gX`>WLWyXX3Ad6FgHytmIp*Zhbw zX8u9r#w>fBb4$f}D_i{&fB5OZosCBf*^q9{r;vKR2IU%iFgS}Ek*i*=(I=AE8#16* z(N|$>bKO3ES^s-RM*aNGbkU3Z@A2yvul8Pbz3qZ7&lA5)o%M6(&_Aa2_}0+>)5!Fl zrj2XdbE4nyZ&w0(b`EbpqWR{p{YNJ@8@9&1;6v|;IgY$twsqfUrNi@DnLf6;w58>c zH=XxXXg9oR+GC}1-LHLnW7j>khs3s;89n6ktGg+7_j8r2Gkr<>moM8@yI`p`GVRR? zkG@CWF}Ez2I(sE* z#}dnw4~JHVeZ96}!jclzcRV?>?%l`b{+C}LZ+dTUyywEY^~Q+pfBO5YvdhYQ`Yt+B zc(r}v>BsfA-z}Q6lW*D?hx0e}TNZtHL(rvwsuw!FKilN{`pc&DbyDv@}GCW(vsq$$vR_vW>U&b26Drf4SbNGTm*E^*7XY|?j zTkhok+P_!9U1qczybeBGEl_zuR~DTEX%&wjVmwEq}lSvzPlyMVL7uIn=60Porq`9}vl2X!nR2;CJvch-`o{r>@3#ItaCG9s zLW_Sp(|7R8nQzw(Jz39p;j;pxs+v~VH-6W#oT&=y=eGYAeZ1As6^(xQ`Axf&&#&B& z6;-X3^Y~Z#u%pT7kr5S(C%h=KqF1J4{l`x(b@J+8$>)|H5_j^X|2Tbdr|HX&&r7IX zW8EInCCzxBA&uu%%CxRq_6<#k)ag|>VVeKS(dPdCk)?a{7JGX!D0Vp{C_?y`{3rH4u@(LDz>HlsYOM;wSAGh%eNi3hiC1x>qbR$>m=(y z-T|4qEA`X)E0(5jUhnPaj%`wX?^|t7PS3??Ez9egdZVZxyE;Bu9lL#4zAeAGQ$8+r zZAs<9d2@HnQgigIsXZ3oUeGVg&Q4Wk&D()3dIy4>pU@K&kM|LZpWE`533 z?rNhn^A?r)kn&^i`MoEeEOD^)thx&~)DL;3WO`@5_pdm2z@j=!I@d@X)#B&s0@g|^ zzLy*nH}G)zkh3jn=Stz)QnJY4NfqDS+xy6;So)ea(55abIyNveP54b*KPGXbelNyC(`fBJZOC9 zeLYjf^$IJ}!`C@J?uvgFF=N7!^*8o~fA2YA_p11811=Q*IN)usN0okF+c+>~tD}Xs zKkv|MczC-B3s0=Pbm3^>k;$X0n$fvAI$k`RKfh7QLv==8^0Buc^Gx(_9+9qCSpAMi zckNX~wUBqoDx|(sYx~Pghe8W@tQq=svklDI;7)}0`NgC4Q#OaRcr+}c_R9DQ&&SoR zr0jgt;qP<$_kNx-=U)tHl(j*Pc2&EoxAVv58{9VK-rq80=+U@9blOY)*(+}SrTLgu|nzWnE5TQ$p=i1`;=9m-X2WdAc)GR0L~ z=9!k*X?e#z%cJ9q3>aIsSH={LGNn4XyvWQgN8S|h%y#c?vb*EC9zT5!#*FSzihB{d@DWM}O~;X`^4tL4$h?Y%sQd?{@=}oy`(_NR^iyBA)aOIaHFw`VP2BM&;NHIl_x(2HbQg1%(cCxvSthDpjdh-M z=KiU>Z%{(u%Xzu9t?pf{Y_dnQR za>BAbwYpSr*1Oc_TaEmGe7X9$j`|?xbD@sfAiovne(V3PWe1Lq?@_sa+=M>oruQxX zWZ9?9n+pbQZR1+B@$$ZeXSD)y53ihS*3aK2JIn{0s!x@C&GI&7j_$ZVExK3#HxCwP z$hq;~JOhed`n{IlpA(kZvNbe~=6dN5z0L%cE@l>B-nj71_}?tA`;NR)uiEMt)9#ls z(_?$J&%Jc_l9{z%$iCpY`+UUZ6elxGc_Ky>C|l(F)=jq4YjUM( zKJ!Slz3!QF*Ncwtwrtm(o?%5?D@&bNZ9D6jZx-0gvi-gzb7)4B&3%rnC;K&CUgcKo zf{Q0|UVOUf{obJF+QRt0qw=Qq7wro9W}LIF_6lFe;g6$JeCSyD_0ETFebOqq=H^un zElAg`T$`4q1_e@mFHxJhw zKiRm=u(c~@FYKOmP}9r@Hp)zrXr)YnrLr(o|+> zYOdnnJUaGn#dH6m;crL&yS+e{UB+%r%FWz3SFWs3f(43k-ZBOjpv}V_Q=jz?Pu(G!_By%aV#Hru&%BcE=YaivSy3^i`nZrA1Rdi@Q~q%7SrU9Y&ah~8^w z-gNs$b=USwBZ{n_sQ)<5;NdqS;y^yhm*)!=0K!CO6HPmnqf zQZ{!pLf7E29c>ngoyT&VS#-YqUv3H8<8aZYu-ufI*9LyJ>#&&BU3RS zB}DCq)2S_mpN|rxo`)F0Vo@ABY{KGjh(?C%5F2r7aU5uD&EiCe-9%(ECD;d22Tp8) z)3)tc+y=3m@Jo*CIH+peG!$YN5o08F;+!>bI`R(|S0{sbSRaiF^lD7hYR*r7D|U3YzPYKxJ` zHcU^s1~P7drE59yhwduk4j(=7kV9()qG5oC9&l*0yw_syJ5t{U1>u?n|1#^bSBuH# zXDiAzvgwH@9a>|9(4a#Obv}`va41N*QdGD?tWK?}opWP29dW25K^1hrb3xi}NK|i| z9(CHGeKv9>7m1^-fj-4hVJbzN4v88=3EqYfo|Y29ZXBa=PoNQ~A@OyYaEyp?i)x)p!T$sV5u`Qql$Lu47KMF4|CD zk31HnxC3<$65b=Bl1wODUUwaLsw>e2we`s3LCWj$y63o4DOW+apKvO@E9fqKY^|WX z@u39i9(;@q((Nam%9|kFb<(MYpxGg^&7oVe3#m|bCa9hq68D_C{ftwY6{@@N@hDVx zpK)q=VRNOCIXiW<8dM3MM^CsEq>YC}wMiq*@i3)>cpRidchSRP`LOPaVY>aCQyYjx zvRLloID_P{R?<|~J?ETC=gPYMyi;9O8P+5p@&*#wyc|MGg(|uSmj}RVLiB|5LE08b zWG67m!w&5&h&qg2S3wLUvM8A3CzvFNa$5AL6BtS$!zaZ#l(SWJcf3=>3dGVCSzuUj zJKaHK(aH7LBMxO>HQja5sU;#21D8w!({--uY>CMwMSyC^8)#Zy25Jc6#=ZlQu2Sf+ zdmM^?4c&9eskxAwO`b;Qb`WVt`c|!LO?GU!;fzCD0V3r}SEOM5ZNK8wYNK}a1SG<5 zZ2^Vpe$dGWNR(NX;Xzn!ubY6=m;fRz7=so>%C(57C?(JbH#OEHj|OR7AYp8dNGrpT zmvs>xcqz0VW@0bR0VQ2~4r<`NR-yi{IcI>HnAg-NAPjr`4~kC<-F45YgtgG^_u-~M__*6bci(qvx$sEx zfT|vQ!r?muME7~;U*%j&-Sxn!Bx|L+@lm&x?s?$UrnE9=4-8}FOe@{>(5Y#tU=Z%b zsDM3J0hI-%)e}DlT3hS(M^5z)($E8OL0a)P&=RgfH}KFyL1er(8XoEv5PAnL{tG0B z%mt%Xy8WTMA3L>J=nig=O!XK74iE-EW+fVD#oO`?e60^C#LTJWY^Qskz^k{@?N6O* z|MoIUe;TBmZ7&nDqszl}zo$W}3sNg79fed`N+&zg9F415noi~z2zZKk08~ZR5Twop zwU_z7Kx!kU=AF%Q*Fb8>SG`gl7*umT;YpCX5>jI+6@uRwOp>ystL}Q?)Se&#(+388 z06H^gH{J8XsWj=P+h01>CEaLBNO%#X-h%{3_9EEo(mlA+%Vn`t*Ard_Y1<)@hlW<} z1o|3~QHEV*yX&3=r_#N;d`OVi32M?z;nWdUHGo8@h^z#0hJ>t^NZF!->EoOrH9#R-rbQDkW=p^{DWus=h5vV2~&6721 zh=oam(ZX)EI@OIxt)~0IcYPoUPgJBTg2%9ZC?cvQdI*I11W!FWMz|D|mU^r=@Vn>G zLP6+K>T6iVRuGhC^nAcLiv@$zxVGRwq>i^(pcUiV=>L#)0)9``do2o-RLWzJKd!;E zqDzZUWW~ZmVk-HI3=4(Th1+zAhj4pX=)SkO#?eS%u>wM!25GpHeTgL-T#hPITBPJ^M)zKm9Q zI{x4eRY>~Nq0@yYqczlL26~1vYEK|hQS!1{aVB|V+RoVpsi#QDVh#4uO(Ptq3s)*w z$0ww~wq#a8YS;pOR?^)RU_FK8LOQE{$=|3Xk%;XBt*m0R0l5%1 zfI@K%4)Lc$y96o)!YD(CnQXP!G!W7{K^<@{g@}EKE?X^J=~2JiNab1$S%aU@lJ$EH zX`z%RueDfaNhy!pVwoxY@}sqoCdss*b%vxIStnc>QCi)9ES7Qd+C{Gv5o588(PMrD zskZfKhrIe1q~;<9y8C^D#R3(LNN$mTuM_|0e~*wOC(?5-xZeL>+A6E`>3g!N%aD15 zh@^hVx6$l}C8nh1ie=4kCocdEl~2pM$?WbKkOs;$ZL`r+YP2aS|8Cap`-17y3D$c78-r8JVJNr?v1 zS4b|I)+r8>h=iZ_AxWl{-)BlIAa$kkl)U?eD>rI6a=+mdwRlMN(QX*vTZfwO0Oh2o zOf)4W@qkoovx6v(Gh#ll9OC^a+;-5Rj6Wn?dEpyAAhk2{kedp$9u^)XDsvADdpNZ4_X(a8+0_%9g=_*W9?8S#`MD?{s4&^rz%gVgpQu^bYy+=J_U z3mQSs)_R}dd6u_w&Vp*-5d+-g@4m5@ws`YblCVca8#cnu=oXpzBMz$r5h zhN89EAi5860G9fvP6>Bm=r7G__Mez@PY3z}oLn@f+_=-i^*gdWI>Xw6i@@AvKg-S- zGhKSCL+N-{xQbXqt!IUsKF$dbf7pvka?!_m;pPtyf7tCZ(S;A+3;aY>A5-s`3&LY0 zR+KfRz^_<5dpuQU=^iiK#c+GP@bHJdIOw8q;luYL=afEBiMuE~bnTL``^gU%f4KR> z!yon%xOQ2%_`}T~9{#YG#I-BJ#UF0|@bHJ-AJ?u57k{|vaMGyzDScXq)1$anGeMGVH_!bkA$ZphH;xm!d?mYUwni$l&mL>vP_S8mV}Nl zt{NGHWdk-*XM(79nhgDp8zk*h`vGFzQak!S;jj>~G%PvIQ|<-m1p!e#P#tasLaOf?9X^SBl0=m(0YKVZ>@U3`#@hn1ptg4TZtc@2~QO?rp$9;uZkN- zK4*=|!LD5gg~>-zV{&-R$d!zt9Z0H3Hgujr7~P$*-vFXc=6xUQ3vRXyleG>nS((xe zsp~-qrfDSzsXgxD6S_W%-!c53t}w{7n&1Y6_9nEgVuMn7%WB2wT8DB$ZKx!vx;vnTUh;qUD~$qC za}j~<#qt1z%^?Jt&i6bOvVBYel}9f0Hb%-(kb{G5*vRpRs5b32D)RkQ$ri zs42csdSpYSLvoqv+Idh@FBSgE!7^*O;J06EG6s}%->d&ztM~oaQda(lzJSP(q;{27 zKZLyz`f14zi`+U!DtbL06plP>Z25m0y(6!U1+~C6_HvCdHB)I!7eO6m+3+A*4Xc&k zG{|MkOb}Uu;cPAgTgj|&3u=I3rNAH^)B&lhw}`AZE|7~K0_uTlAdI)Cpejr#VT6wr zJ3O?j`Y)t1vIH83MOCY@zd;Qf05a|Y?FLaZ+0arZvzm?r>$d?0`G_bx3>TEt=z91= z8q(~fLRNvOOoSM4xFvjp*zzjp6thl5CBL za-tq7xE@@39}qh(a;--}^-#J^BwB5ON=mDE(b5{C-b#tb=#iKi%BJEB7P$pK8YJye z1SDe2fk+knQsDR0Osw_+AgY=q^)jfjNLY%lO2ZA{`Dg^lXxt@-?Q$Bc=-$Q}qNPlW zmf&X26b^EFX(^}4%Es+pW%)SIASkhGR)(#T6MO8%o1$UoIc)DO^pyjsG zEB`LmAgw+`^18Y7MC>kH0!4tZt%FTytko^`$p>q5AT>ccJb!Cc0z|X5yhkaYSGc=j z@*SL4c<`wm&uf*@P-YpSr^{!R(Sl7xwXr(1Y6fBfe+mVG$hfgbhIPqb1=(+4PQ?gK zRfu)z!*82F)R%niFo+x&Q<1{lMy3fM8U{>HK;*x87bfg?ljsSHO%kyV)CJT+=8SzE z=v%}Da!2dEM7Q}CWdlH^(UAi{G!t+WZi2|kuyGW%vs2*l*&0M9&lTJ1B`PI#G4C}D zl};cs4(Y0t)y0Ip7xa2FDGzEM7E7m(Cjk?A(Y3tg46-hw($m}IwW#>2yPHm9tTm6A}T|0QlS*;D7S#7LQ3k0 zfYN5&0~Vu3Ao5G{IqFqVxQO`^uCWX&Dj5euWrU|c6#WRPmR=5VhyoZz( zZu(4CPI&OCl`hAlTL$*ZkaEH`5UD$m8c22JkQ-D6#GbRPgUKoq%OaNR2COJ!k+qO$ zz)Sz7Jp@q^^6_epKoB_|rBR@84Mqi~1qwHPUJ4W*d}{XctWv2S)lz|`=*SQZ?KTi8 zjAO654n#Tt!KA-~$QWU$=*=cUhToF?=L2f0N8Sl0fnQAz4YvLgls*8J!p*W-YNil0 zOOL!Cq}6~#2E*wKLE$oPdUj zK~50^H(;f5HjJmAi59rzycyUs3wRb*QLu8&9@30 zDUZ`iRjro3xQ_auOSXcHND-RIQ;l1To!x6NU{G($DWYhf7bGV(d0)%wR?9$dDHlOB z_Ti~o-QHq>&zk!TE3ZYnwn#d`=`(j8mNw8jifQ;A{wQ5|;+w7#~-%Z z?58kbk#h=&o{T!u;t50(BeyhH9d-h|<=-7d^}u@+ya?J2BE$3*0a2KC>vAa=-q2?^ z5Is*5QHRlP5E(5rkNOv`hih_5ZV!p> zec_sfdGHESQ3NKq4B?m&QA7%9cy&S4;g~h)_|$kH_iF59v<$?)mb`1K2HY}L#ID6P z5ZNJ|Bu*J@H;8TOBZwof035BT)X=navgUpua*_ygFbi868P+U&ttN;n!07=<|bq9johk&>|8mWUo zvY$kv4Lt)YPNj&%UQEqEvL3#5nj%sF8J6AxmW~uzPZ2NsV3V$4)>qex~e4 zEdoSt3S%ZW+~U8@t(Go&3{C(IjSzMn4o+=hwNyt2tB9I}J-0e7gd54qv=+icpGR8= z`z&Ppf^11v+@dA>B6Q(kl)4L8QM%DDEroqHvX^bem4F+nijxc=MDj;)%&3*{;JT8v zwXn}YzE-WdGvHo72l@gi@<9-XUBnNqg@>|)wlRY_3T;Ok1aFZS#&aD=U5hgzJrIHY zAv^-NjQqoDoJ+&>uN?hDxaPthQ?|8QLPbn4wp&}Z6&@rh8`}!|JlyaKmuON#;4}&P zY{!+C$APpBAbJFk-|rymUl2xRXnVt2xi-TLl!tJ%lOQUTZ_L$!Z`zX;FEujOyS`SFHM#Y7y(C{w00K{B|!w{c9M)MyylnPyh zdkHk#zYE>$he>K5NisJLwX9vaju;wnMfE{EP^iYbagCStr$GMlJ{tC4&HLCxlHLOSDnkqP_(M>oKQ-w3O3 z3!=7zP{ns3>OZuWBDO+(aHF2^AlOF=kvJ|e77{;)bbACu@g9d1pUrC=T$k@_7@mk) zh?xQuN?Ao>Q7Cd-U*TSl_Wne&95eEXild*fZ$N_w^^*<0igPTG{BR%q?hA+Z24pl7 z2HU4U`)iz|uZAapD0-4AP*M&M?u~dr_yDtS$XCq=k$EZ7JE(VoIID|M^4mbO*GUhJ zK&%zA{fQuIB?46Jz3v?-T$@nEbc66Xkx&bh?O=#BZ@{#1^GOi*bK(H>bI!r6eH@{^ z4`)7DxHqF(GmuJU!pp+Wj~ID)ujcn5Y&M9gH)8G{BHUYW$8n^R)8ih_GL*dwY#%o3 z0!c#?0fXVAKuII&4v4)H&U$HCh8Z4E4qSC8FkD22$hi0qu&LB6^sOqR&@2(z#v0^X4I6qKl zQNpzws*S@H=^{nIP?QH^J0er4GMW{}3%{qJhA4xhhlXQ}j*_w491xX)=>&uB5~u`- z8>WoqoE%3s1d&dC<+3vtL>-HW3UBXy#-S8>e0&TfdKNky+PwnejTabKWdc7c8IDNf00F4Dh;icm_!NlsL_!NJ3L#OwVZAtO z{o6#Ci_D@mfLIb2Qb~`UdJ<+Qd1AdIBvKHXhKBwFqUvLS!X$hrn<}A7*8v%uZ+OEv zXR>e~L}hdTWtAsD<;J(x4@83pbO0j(M3&5oJdmw6Bn;M(B3vGi0W> zb6|`^Ky;1kaRJ1dLryiHjv9-|s+dtB(TK-$pfw#to`wzam~o9u_-S0@8kL@9&Zl%= zCxdY24y_ah;phbP@eM@!;JByBY(pO+k@loPWKNn4eXoMZ;U*UWdvI+I6P^d_s1Kr? z&=sCH#kdBq7Xh~eq9-7z%#Aonm}8oB(jP?k@#1O=hZK|H?jT2?Kw2(C(xIT57wg~V=}mLCW_rMsdh=LqmIpAQDHofGW> zQPbe;V0#}xR6jWGezx+-`2i>r@0&U<0m+?@jgX8kh2CBnBwMc*Uy1@`u8xqXdgyA} zJ_FG`@IPqMLy(*p`CZ;JBc~h;bwQMq`)~4p=mdzW$JeaOjrxgz`fz(7g!Y(7x^_kg-U{nn`;DB+X!%j+wIJ3f45oLfTXy<>ft{c!M~I%CeHxCW9!Y=}O_g z4&SV=6drtPCvla6Dz4c#Bd;b6wASBTD!YrNprk#7mmty-yRH1Im{2)v&o>8QZGd-_ zb4Zf8sFN;%jG+(xr&`VT$kNp?5M~yEvBW?@~;wzdY7k~ z;~?6zz>0efM#Fa?%`Wixh=J>F<$i%NLQR`NWI((TmI$Kx)gl7uTMOH~-Uc~`foM2$ zm&Ag2mWE$a61EA~bF?!5b|ZL^Gfg;%Je*ZT-9+@eUD!RyLuALL;Ug3mb%qTwi~3B~u2aKFVJbq<*wPum|O z4hj1^r0zv(lBMQ4%+=yyy#Pekh*J|zbn1H`?}iX6la2`2d-Uq#BWS9Ke2*=oqDO@X zN!s9}Tmg2*TR^<;LYDFcL_VEkwcumM%YHpE!J$QisN&dcr7d-k+#3>!BQa%w_%T}D z{0ed=L>fKNIMjC@M8=yz z&cNC!c0ibqG3tUq13>gJrhOnjOAUc+OC`9K=xu$>u2QaF*~pX3bmYg#8ElIpcZgS@`|H=xqlP zZjZ#6B=K{SSoMN8!wiVEIPXn}HCQYV?-jcziJOzeuSsI%i{8AGlf;WsOt9hX>?J70 zs92J?I!R1O5=&nuE0Q%IkRKj5m@=TCc z`l@LOGy_J0(3uag6R`p!&1SrXcNs*zX%&gJFrw6Jrk{mDDy6RpS4upjJ5uQuUSll+ z@j$0F#S0LAa{yt6-*q--%ug`;NRZLp2s8c$B^ky;5E&Ymm*)o86q7J=Mu2F5a5y{- zlvK)9BPYz^oI_cAQ@GNgcFArT5xl&=5{O~<5EX*~kJFQu`~3Jca@(>4sIpY?DoErAWSFkpy)WF^6{k}6f&5fAJ+NA8 zi{dBn`aLv^M6S2`f@r{Dm!H1zy$$F9Vj0yEm;j_rIDF#@Ehzqo=PPbq zUl5gwp2D@2AnF^elCj9S1!A+J-cR$Gdzj~sT3*6IZEYNg?t?br+u}gq_8 zDY7ymaT?xec!Vpzf<4(6G+rZfW7Pctu_+2bZLvpr07Sz9s~b!tz95PnS;?U z{Ep2-d4oK!fq(awCW=z*odp$6ovgVK0szc7BvSTns~Q21L2g z7KwkOPeI1Kh?B+nKH`iiDe|-{eN`lHAcjT!=qteK_W63Q6eO& z8q5Zx_`E^rNKDdMzM0o(6t@CNuZ{Ow7>po_0+I7RqF;j$m|^dyz<2I)bSuh?2GN=X z*P!9Epi&}o07il3hZz}Ru2<`U5Ehg2=0l|6VW{A@pM16|wFn@M^aN5%P&z!uHjoTc zMC=0$>9;`YTzCa^lii|NYI_S(Cj%>r$n<#jYlt!*yS?A7iZm&sd0L|A&5icD0EuN-6C>8n9LOgL6h`j}73gwcIa0kK=6qRcQ zm19dg7=+G-X4ORyo3ofUnSw7tCX|4_CqX0~qAyWoJSfQlWk{~bzJM;E?XDncEpoR? ziAyd#74W>S9nWJ?2U< zB`2AAiB#N)n9w7w&NL7%H9bJ*MCei8&e}hpzQC?HGg76Lln=U_$bkqyE zg43BsLt}9uh*w?m1#b+{umbG$mrpM|VNl`7^uMMaNH1KKk@^j(WchM$LMxMj)eJg- zFMEP$euUlN8$pXeWVM(rVS&oU48mOn1=upO^00be3_k#3?a}V|SP*qMkE079^1J9Y z%&)~Wv2I`t@J_u!Tn%cS8$|cvQM3#C$a|3%H90eLt*|8f=}?=10z`s82JtwE@>QRF z*Q#v>hNBR68*1t-rhzqsM7_unn{E)6je&|oJx3_xsgzl{x*X6n1Caqj{jllrAWYsE zL&}S+!d(-3D4WgbHxZj%aVR6R341L}81dPJ3!hr*-?)L?tyMwT+R{<$SrBEb)lU=xLqm;_og$JM7(CkJZNXNPfMBx#3plieVJO|Qb$X`3jfj_q{r$!N5 z1sCfAss3`bX~PUsL{xb^CMJh)*G2LDaXgv%B{#VtxVlOG|Vtj zU=Q#Lh{JyPS*2heVXu$kBJ(H~`X&N`CVcrzTMwk@8@(Ea8l}pM4gtb*A&6=Usv z8bPG755q$&G%vq!HAG$SA=NOsP}DVh0i)_NMra8ltA>Zc+_}IYe7~M1bC9%Lw$+RU z&8kMtMLAu8R3|7p9C<;quSM)4TtpDYBT7zPc?OYa9k>SRbwMNC~dY=mC$ z-BNr7u?>rLeuo2OaVf-VQq-P6q)PK}D_n#h%?k{*Ezl@)8$=xMq~enm_1;|vBAX=* z$Z;T2CYEn_g?#}(T-6*p)9mc+QcH#R02wh34ccu$HaHsJPe3#!U46cWGG23lVaB- zF%Dv5BZEIIm&J|{@%ox>+X4|kp9WD=0t`EqL1h<^VZ^kEUIWB8(y)kr4~YX0s(NrK z)0!z%8V91AFjnB|j)7=afces_kgT*ZNys)=1(7-Ol6x|U&u+;>9`QgL6>y-KZu68e zl|^ww1c)NTlw9gUAk6{k0&^9eIYbYzojaifL#Nd*zu1!A!8t6c6IVpV`at zJf_)VOHylqjDz#jAyRd7iGUWEmq9Y% z(&_sQSpwO2qDBYtx(q}P`WUf4%Ja44#2pJ09KJpu|;9R)f25hjTGZ%6r8Fu z>l$;-Y%~Hy=MGbe*xnf2tOp8dw&Mc%8?JLAh^}D@f(_)W!s_I@MS!S1c+rOYl2zsV zVDg}fAnI5wwGTVgB_IwNZbG6?#ey7BS^8=`Fc4=T?5+#K87v&fn+%C64$Fh%I0d2_ zVHcTRA_i7xD}lPuH8VlfZ9XE3PKDO+UPFsJfhe59q7#9Ob{NQeGXZx4eQTP-3$~_) zgZNCyR7g~w>#$^uhmy59 zH#83isdWRADI)|XGh7cOt3*%&l{^5E!db-`>Tp&l0t%`H!mEnxSRX;+pqq4X4MfJu zM+Y+3{ndb4g2K2w8dD%rCF|}gi1dTA#qh`>^~@Gh2aX5vd`4sO5Qs)C3=eZ%^7`EI zyiL~*L|&fjzY`=4h9jEiKvE~(xvxj}gqs6A7Ha7ZB1=bbhG<8L4HvE<@LSdf!i`U@ zX9LC9{-fIAPd~}0@H3M)Jq~6r@VoBNEP}ql|v=2xnE#rk6 zqA`0Tz5^}C&WWp$e6qF#sj_3_K)ecS{O?c(S z`P5Fp78ETjwx+@pjhb|8rpO;8gT>-^KUG_EC{wOq+Cd7(0}*!NtU)ZOF`Zi0)ChA0 zO-{@jAzUM&rd2J48=qQYORhAgP94Tov=v(h+%#So{>ZQ!>l zgF(hMc#}9#Q)-diIHB{#u8GipL? zaG6s zHwfl|--TSzQ`l#qqwXS=debJN=uG3E=Aeo_l0CTNq8y2Q7CU7xRxJDrj!abU zCEPPn-Uy^}P35^H53mV}PbQ*vqlm*%823QwY1Q1lsixG~Js?pnFuk4(^fdrG1HYpZ zAad2{KiGj%ua9ug!gE&l;od>~bRVa8K(wI4{b*axzQQ#dc`W@D`Kl6a>j_udpdY?* zfaJ+YChyC=z856T8Iu;C)?bmkjF{Q6Jsl3BoG5_aN{{L<>;eVcLvnjrCAmZn8({3B z$jD~^h+2$YVr)8`2GN%;(n>>FGf=T~m*vrZi_&|LaL+|~2L>5Ulp%Plp^EWaGuX0H z4}xmSoxGI86nS6;Hn%6x7toQaAaA(}>S>Z%bvTya!fzgaDGQP}T`Lr=$S*MQJ&Qp7 z&3m+rBNX|&UVLpdDCxdLP-kz>W+N5(t#i(K2;`z`_$5wEIir5PZvm*6_r8>)f4y%2 zh`S27V`I5zuq)CL?rof6DJlFs*gRhJ3A|?d3&e#`+;9{`&x3hj7W5e} z+)EKf2aktgh?u2_3MWIX%i^^pvCsr>YVRa*A4I%9quWwUL{GBVC`nwHBtA|OOH87? zeygyAm69xAf0C$8_LkKUVs$QdUXpk(N&NjUZ-$-_t8(7WN#ds@F=UE2!zi!ldki8i z!9>1m$@zz}Q%vQl2Gc98*_}XAr;kWnjNJ;8 z!C{SY5JaH}*0%Str6zcCfcc^x?LkueaxBdUk%AGFVwrgd#7(8mSFP||t|a0`C~KfW z$cl+_2Z)NnIJ=LHFHj9V@?wy(Z=UdMKxn1R7xs-936tkz8jwG_b#p$x>j3Q*UBFH* zx$I)KKahW8>=`8a!)jX7g{(RHCD1_YLg9(UeHV~ORZS-yXV4<98(yJdf6cu}xHlos zcchZ-sUoog`f4##4iQim&Kg8YPA{VH)iNTQuX#nSEMb*PH>CtG5%w*#<-U|Qzx=jf zIG%-wV_GB@Ugi~tLu|^amy$&La*7va-r-4NJj8~aT5tt)!eU>DI5mQDmHjJ(XB*n^ z+e%(2W3@P zHNR3flSIINJPbsq1-SIgYh`d5fYKqgGt;$Gpa?G&bpJ}jK+U|@F8zm!t>d|l>o@{L zo|)+)h~L+djpqLc4hz@t@{OGME+9q4{GL5`j1hQAtLz9Ohru?w0YpQNbAAWO^(Ge+ zvYrDRj02eSL=Y{qn0A6_M-0CSjOT}JfbRzxTaF+y6@J7%5JgjbU*?Uxe~?k0)9(Q? z!gnn3wt?HGqCZIb8j+Y5g91bY7l9po!z+WhHHEjZ7Wn(NcR*A} zzE*6j(Kc3QKOngn-sU<6;?O5H5{=u&s>Pg$W1?lZ3HxE#b$_JN9li+eI8Qwy+2kzS z+2cy*sE!0xkqg0ZkVr8+@t51dgd-3|Q38mR%{ABsBJYq~L}i6SL8K;xf%HAo-aApe zJd<=367Tl}RDxw$cX>xwUZ4X=BSqz<8Yo2gmB8Zax>wW+?Kbs?P*QCTs?K> zcw0btpNz*SKlcjvNfcEg4sWNBAqD%0KY-N3ylfC4QXw4O35R-tuJK;kMiUaFC4$ ze|NzJ(*$A7jyJ7eAkjpHeF99t6%TRcq*18@LHG+Gv^5?Fv4VUP@rfi(EOppytTqZF z=?js;7IbMGA!qVCLX!_3rH+P#m*3O{S0IwL@$yV9aug4uEd;eEB;L8#QXS(r^>`17 zp)mWnVi}1$n6jK;XT`Ju)XjS>+evm$d~F1X92wI^5V=sMf~Pn{Vd?~mGOsBQ@oR?{ zp|{+pe|=IP5D$K;Q_eGr{QD++|3nZEU2IRcp};;P%@kso-3$l&GWx#OPvM6ypD~=N06vI zUhg-$V8l*x39}kRWupEV2v0#|H$Hq)uuwegT2DA0q&9;jPw=VpAUQn1)>!5KRz>3GmBy0IE7WqRR$h1w!8!x?;Sw5Q#lu_#hnG z$DY$flDGhzCb$5Sogf`v>Z?2|We2I%L3nR?5w#{s-b1a~3@RhPr27;SRR+Nq22s{) z{0t08FM8Z8R6K)_>=EV09aUz4R*Skq^ zixihbG&1~vh;!PMq3JE@9Z1{;u??qYy6sKv3z1W`c!=H!Ny&Z(-%+55>JAowI0TCE zegk4H77N~`2g}rf5F4_15@MJXwN&@G*QBYdH9`Jz%VH2D3ir@|SXd~Yd&2VwPpNsI z?(}=6gsQYP3%`lg`3EG9^3uQu?B4j=SrDyDnF1g3#KJTRM0-F?S3u-en2J2&SJzDQ zK@=HCQs02WMFLskV_xTSuJs^qt<*0dtTOXqm09%3FBi0aAkrV-v=>BUOp=o8DZY|` zc8-5a9UA!@gC!m!Sr<0TVQXogvA!??JxVA(>@Sp1AEejjEY&=;ev~&(OA@aoiTPf5Gq{q(%}L_7B(dsCZ{Dd8t8=-R zlf;|}-qa3Bq8nmW&igt^Ec42nI>;+(aS&;ePbp`s&md9_8;Mr-wXxO`0sAnI^aSFZ z63sx{Ao7%=eTPV17=aKr+3URFjRBmK-3|Wmv}EmMQ}9JFC9`a!y1<|24hNCj;x9BF1{q@?ZB6xwpJWjM-SFUQKpCt^ zwaf#Nljp$V42Z%Ep0;v)<{P=GO+ZvA(;^TB6?jvINzC#E4VTAh>OhiHj8yYH5QiQ# zrQHSbpW7+=m8VCpZX}521b#oa1VrCh!0BUD{uRjZ+L%b~-`EQyCpL0hfWnXyfz3gO zvg(^~e}$S}AeDEgXn$1+{w{DA{sh5KER2NTH`rNWi;e!^8;Q{n@z?1{ya5q^a*o6x ztBwBT9EmF-;&0NCm|U@0@R#OD>;cipdj_IWZb6%k{-zvd7!A>Q#4U)%BOE^7yi*|> z8J7(0HeFi* zYDGH5x(F{td4IpBsBypivRGwxR_H?%4TGbq|6x0K*6^r4%_^rouHmABZ7pg8| zGGNf9$xXMDs6{|zr%W$cb&z+5LOGOM*fZeH4@kxCQU+U)Rx1xTnBCEIgZS{k6%aW! zNvdyNC_~<)R)L6pDBQ2kf#_uMQc{L=`A`Yt0T9W!c$(S_B6DJwujc1o<6++eWGoO7 zI`0C}eeA2#6kyeJ?A#DU4ua_*h`f3-5v5_Q7c}pqUv&bIGGx%FT>!@-C<4%d{6d?W- z*5M#E5fa|U!#+v|8EM*Rl4S2DqUW!IBfM{ly8~o}5x+W3^W1VypB25?AMI3h+Qc;lnhnb?AY(s0hK{c1lf~d z-ym{C&@P?X1@SaWPY9{T#({S-2)Ji}=;#=hH zssK`N8d$NOP5!|`16Kp-{epqM_5Xw2fPW-i{XgE$15V27?AzN0c7Ro|U_-?UqM&O5 z6fme@$KGQB#EPic`-okvh%$-2ca5lMEZ7^dcY`I^P!KFA_VQiVIrlDuZhZ45dB5ie zd!7G%>T~*2X67m6F3qyA+!pRmN36kYfy@0!r1JLMviFv(^U1eyFfE1hIYos180lm9 zko~rrtMEr5ZOH6f_$zXqyll4KChgQ+Ob^7#hFRy!bDTZ5O*?h1Wt?o!b$&g^x$Smo zbFKAuob1$fHf*1^=Q{Vq$p&BNM4a5$(D@5aK0&N=qa7$+au!d;ndevTO&5RBgJS1Z zxZjSszoY2IN20vSVOKJXUsc(WkJPX%{*2WNXP#zo&uq<|%KP@gddN<->B=!#i`StX z8}paPuR}eeY<|=qYI#+vx~hs_W;&>Twe$uj z<~|PEy$2(aZ}`9anRkD9>6F{jPtFDD>fznLlyukO|G6w-2=6d(DUlztz% zP`f(=z%Ji)JzO@g$$HdhR1MwZkRd&|Zk=+};!98ObJaX4t1Ad>C32-gC4P-EX>P2% z#~WY6@%QB-9EYet*FU`=}{|| zJMUjzY=%3dQ(>dTLxnn2 zAD;#kmmHoOpgOnwzQ_RtW69vo%ws4EobNsVi1IE3e$Vx;+mEyM@kVifT=rOouU{LC z>W|_zC4PRzQ2d|;@56N&5nU?1>$Mxo#e$?5E$5(iKrvdlko*X>YWniCZu>`ud^(XD zLRstiBImqNbOx52!edD0*(rUBoeszas7cFQJ5;&_O>L|+cF6sy#v0DRYW5hbI`jI# zisiu<*B0xsdLsEo#i|E3O;U~H=rji)?Tg&@<&MY=D8BoK?<_5Rh?7S?n{kJKWbOzx z`C@rTq-$QQ^7upfOwxtO?qj=u(5Lt$F8h34d1OuX0&NM?{rzS7zIyY^pQHg&b5O3S zj_ET<#kG)zrg9iBhc+vF>uspCfypm){fKlo*gk#2WzU1NCj*TqQ;(x~y^FU$=RYKm z2I`S6z8@-e|MK{2X+4w;&QqY{sBu)<3XE<1tXIvwys@=Q?b2%lHJ~ij?ZWX5DLr3QA2@Ah(JI_GI3`#HPc~ovV z9!U5K@?jy^8w0zKR1)PPW}pIzo|>RydI@|8hHbC94gIA=`!gl)Oz`|ao*c`9n#wE3TBRJNzvY=wX+Mm>z#y3L;6%)&Ih!K+n9++&y+f$qke;O z`C)s+8#qHw&i5IpVD@VFp`6Hb$huQF@1&SN3mc&LHsDve@rBFBF43&0Gz{`Q)$Y`$ zQ9+#)H$dg>_;|MCV^CZ2CS%`v9KP?DnzgXeX$)u!UN{BU&bdivXe`hCI|F%z(-|Sz zIvQvHP2cm%-43QJAA4SI{YdOtr2Q!p>p0et(EVU;;cSW1E2lJcikG3H zKd@h_IlsBnyxyy@DT;?Z{)E72oSu7*^a#ps7;V{bL7vr_Uf$z8Hb*+xX+7%V5ma75 zxF1*4BKefR0dGVjz z+Ri+jv-k<8I|ZtkMS0Ypo0LoRB$QJZ>uo<8>cZGlq|e@+hT@%d=Bro2&WAL3V%6!Q za<`+%V%LjUoy#+qV#>G*XS!fYFRD#J*(X!4C@yhv-psNnEKf_`fpj`x`SMd%-yq#; zaRYf4zN=i4J0iOQ_F9Ggkh|own1nN3gr#+->e77rX>1nPN4ZwA^wLF-M!9>=uc94) zS#5gbm4$%0b}GsW&)05!FVFL7e(Uc{lxrCslY68up&SzVC)@g5(X>f&)jJWDx_4@} z>MNTD7Jh}TQFNcJxCx(J>AM9c;q)w7g=wvttE{+mEw?7l>|veM%aW=k{6Z76$cnviQ|UCZY_=#wj7my4f!^8u*5HE2ALmYs}r z31$+Y{DZD z{?7Llcet_XE}kLpM42tO0C?b2th*_nKRuat+ys>;Pd{XL`c35_2Bk>%U-5w?a& zak3ZiaqQv1th=+aNSn>2PDeSE=oZ{me;>6|b1MBNI9TSHmgVGQuExC{dmaXw_u~vAm!~>KEZIpJ$wT_eP}#pM|nE>n{ z3&08YbqEmkYl=$`;~6d21%`vycPF&YaPw z=I4p!ZYOiDyFZW{fB;MK-5C#*yN%|GVEP06vIxFQKbRYzORpOls>dLACbf`nAk(FF z_Fev=SSz#Kdv19nGVNKCZ^LwCYWS+EDqcBjy7KMuaAcUiI^Z-^$}g!8Q29#UZ&_OP zk;qNI!XYT0oASA?;scc){NQk8o08ZH<&>50>0FAka#)3FrB_gPbmniWvBzV1iO+9I z9gE`YEH-B8z7=P_Li0l=h3}DTrp@zek2kFwT-G)0he{RC`4yY)uoQ2>YHR1w{tuKJ zcJkna+C34IbGnzX70OkJe!&;(7m81&+hWJo^l8`^XIgc0&3#>y?-@+MoF`89poK3{ zyd3x_U-9--uIPLNd1NT=Blx251mxc2!c=?`_YfwfTWe%eyalIQ_=a@J)A4UP%Z}+e z>>!k5k4mJXZbZ56Au#frZcWy&pUXEq=eAz?d@P=Gh27|doagQqWXIRZr=+tP`r-gcZIF?QXbTts9!#Zvhmr% zd9`p2GRN}b>qC?c#me?1uZFu&X)8Ea%=WM5J=xqbx5a7$@|_wF_iDHZ<)YCXrhNI5 z{3s4q2V&Z>H4J<$U(z&(@lIx8+1FjMeSdTZT-;glNyPa$O*~DK4Ug&m32UOTt-DXfkVt(}^C;=*sXWc?#nx4(vMKBvM>SXWP%NFU?Mm%@HJ zx46t(xldH5L0Z@vxpvy}j0ul?_wH$w3kiLejcV(+b0_0=BNq`HpzHwDG*jCpC_^&t z9F>1Z+CA}PZ#VBd6ghu|=~g)Hnyejc#V$q}i*<$T%Fj_dm_}NeHvC6ZZsXtRT^}N) zSA02C-lWbyrKz`@$Y4}-0MxZ8_s=O_!xYqTl$EqdbA@j5?wkspV?Db?>x)>OP)s3B z4yjS=-bkJ52f1llMVH#*dXu=mFJ^2$&r4fZA-%{Ijwu{L**!pA6XwfOs+J59^8bx!!5P^<#auw9)_Ur9Ta<8fId z^ieJ`oa~7+1iWq{YkW0C~oSEA;rbN&hrSlQ)@e*9OnE)4GYcLs8vub zJ1hwgpu7)N%^4G!?N@p5iu4c6rao^P@;$%F*Xb-qP6sI4zD@oh-_*I~vft)1hwuJK zhjz&8kuGE*rz7oL++KaQS3~#j=B(2TQPvg54t}NB4r5cV&PJx~+K;}gE#I_HO}~a^ zzR%wElz+h#$65UttX?BDTg#X4$*hjmQC}eJ#@>p~E9a^|;q35rXUlx6l2zCWZ;mv&*?2zpEQ&0% z^S5eN+&JAH#ph6Y`M-ER&RjId<#Qd~c53)Z zD0c{H%T=ta&nK5R2*m-&oM8GC>Iq15%U`^Be<=2%cay%#yElbZigoe*k9*?s`jN}9 zMVV4iUU=|)Wm2z(mr>~+0`1T|br$=!smt%}lt=mjIh0+C+1}mm6r__pQ#WgTueP~r zlWI5?mENf)IbJz^FAcfkZCE{3cB|a_pMi3sO8bX~PVMrEJ5i+qDl*a+3PJoC2dzU^?$l~H-hTgAvOz1yMEQyvTA)L8Dk8ik!d*E;v_ zXuXXW$aR!e8D$-0^&ZNpHLK+o%p)nQJyCYFtgb?tQ&uxjE@X^Aa#*@!rQh(m)SW0N z;uNppJ5;*dY$|VR>Ma(k%g?bYtsSnwYHhZ|x&Z%s@o2eA3jZcP>3!7Z@SSHA+b#U7 z#!W%@#_HH#6cFgZ;_^)iEW!>G`? zE3M-_u7+W_%(*Q&b2BZLm1nW~z`9lWi_4iHSIB*tHFJZkOe)WM*M(nR)IUYpvb@_* z4XxiT_W_!Ou@&8a&ls+wij=z?ZR95tdt&a7V5h@CVa!WFRm0k-R^BTIAjg6 zcWAzddl>5gb1(bZ^ST~H&iA_3#A&f8q`%IF%EQDHe;CytKgJ|asj64bel(MBcJxEq zix`SN(HVuzE4Vi%#-s8rEgz1*jq;+8t4!{Nt+q;TxOBl%7>e3>Y#S8Ip#peo$hWaRi(G?!;Roi2A()vT~ z#Nr97=hZsBmQ&nejeLSE@ML(;8kDL(rP`ur(~8_!W)vQebfMz0BKP?oN9Em}FIrUf z%5yM&sD7w9en+6})5)*!28y4J<#BN5-mz0jadt(eX{0=U8odqWbAw#Ir%`s1tWH?7 zY3J*l)O9W5<)@&7ai+eIzK8Q>lu7Wz*A#czK20;S)8bIn7Wgqn83eaC``PxNqfCX( z=MhYjeVh7_J?bD-nn2w*)jrX;t~`AG+J1#r{T$W4IIuA;Bh%$x?^XB{iWi#QPQQWE zo|!ACaqZ~NY05qnWh90cv*O+1$C|?+`~l@m#3q{e=hyrL%9W&WI4*u+kB??g#AR$| zm^6zbDGQ6udj0eK&X^fQ^L1Y*_c8hfw~O~eZBri6miy-S;fxv7J8fSg(`3tts_9*` zE}dcH+J3b)>v7?+3B6*S_3D~lOrm^Oq0()@^kUdMsC1U)FZwg1_ZdJ5(jY$zS00Lu zoZ_>n-8|uZvv8$>?0M2>Yl>&#%++LdPeS=9nTmO`SE1ATtaIg=d<3UB8)urI)3mkP z2DzUyAAechyJmyB^hI`;Va*#-+rNIp=2~)H+6C#hu1#uyyHV*HEzO>F8^x9}`3*uD zGEe8{qSAJHEI->+cpJ5Ky7F0N<6I!#(R_~|5O7l91*LVfcC$^X?X9q%jyHJa(9{29F6jRGQI441~SS^VpdOve4lM%dQRU< zT8|oHNY~4TDJbVTcM9D0x*)Dyj@UL|Kr%@_*1I0zM3A0P6?$w(jPi)(8B7P`v_|uF z;a^bJ6+QDXCN-41$^6i>*Y>&7@ip51BF)Lj^b{(U?`f1{lG4&=YIn%Vu)Z>M`=Qvb z@^GSXiyrwWazBbN)%n{{mfDdj96RC>wzRn7=?JUW^C+)oDIcGguh}VA1Fgr^{~uB7 zI;RvK#>Fp6Z^u*oKjwZ}TOPR;XMpmw(?Vao4dpDFXP)8$JBLh{JV&6M_34{rGzn$x zr>6jg#dfjS-Q93+i_;A^n=dv`UC%(;M{242%47E-`wuzj$R3Sbp0au0^Q!yrUEboL znnmge%pQVi_bXg>5q1H-54Ga1IZ+l~-dG!g@|1IDK0g%qbLqZMqPEA626FCOVz-!A z(tAS<`yx%&p1>W+2lCyvE3l@U1(nvqEUes5=hxth0|&<{kz4j0q+0>{p$+{q($39p z;`v_n3l7Om+x%0|#m%u)1RsmE%6Wl^PnW)pa%)hNZ=P;EG<$|TADO2`myVZE{pW<8 zZ};3YBkX3#y#MhwY~eH{KTJx0xp(exUn6axh_=$OEc19Din6zd=cPzDQF;IPTm;R# z(7HWxkIq~Fz9>tYp9&p?ibpKGLh_J)>GAZ>xaO3x*n7{Wg=*xnyw$Dp-S39$ae1{{ zM}rjHXLCn_+ZOFGH}$2(*#fRuzPu0j5BJK65VmT*cr*P10%LA^NRrLzI`{(2&i8Xd zC-Zy1F{j%K?e=al^fA9Nmpd;@NichD`m3}T*e8|?>=h;1rDgNAEt^04jk(;p7iYO| zi)oMgjXA&R{~L2U`T2*pn8?nUz3~3k>0H&adHQe6<;%x#J8Zue6FCC2Q}VCUp4hUv zW<-mjH)zpZI1}@JvvvMxU7%&OXO3d#x6bMg`?Um?7X)ir|g z#SmWZpscv2U^{d$%09|f!VF&XM7g{Xl22&Pb1*YOdU;|8Tye?H1b2BTmPFR)k5L1N zlZWI=hvW$&Kib+4m9~K?ud74hM>*a?xtD5{ubsLa8cRxk0bm5us-dDNDWXgYn}gZqKY@fu@41j>w&i1&|va8=>+9;g#GuD09el z^nCc`W?JybeD5_&0(cX24_0w+jbzIJAntA)^sM!7G5BO|~Om&ogX{SC^ zuD@4MX|+mQ!!}1ZZByJOZHiilL>CzQ1$X?;LOH>4X-}Ozjk0cYJ9a*%E`5fLJCwd* zax^may7I`os0Nfp&XxHM%2Um1onv#zRPMsDsQi=dMfjj8<%4L|DnF=_lf^-LLMMo)X-TkLh)`q17rp+yL(M4>slu^cU>;T zPC&Vu@X9Iq-j1?a*s8wEC$>4NuLzhWCTHB0oD6`*B9r3#b$)Z$Q>KE$2$|zG#VZ*m29kdla`I?P1I&#QYRx zUFXr;?ett(+)LwIJqtS_*&{y32N-a9Tbh-YpAViDYC%2@L|+?Sm%i~Ve)r@3GwP~_ z5j6MGt<%sGOnQ`8Jfdx7o1L z3HT+pbfSEVed;(I=~}UH zx`4PF#RltnuA_0egQvyGcVIcMo4HJ*QEohGf3BZjL0O4xgV|Cq`={I!*_84`aSxP! zxw@`Kc`n=^V^B>&nKQE@HL}v5^VK3FfgXH1%F8wG75f86Pap>%bM|d6%>9<4@tKgV zQR%Dwihsss#pMzFI?5`}UAE6fO&3_+s5>2%E>_AT_hP$<%3q_|_Tt>u z$bO?yF8`bzA>T&j1_Kj2Z6KhxJRPu=27PT&Zl#DdX zDCYt?24nYmRNk=Yx5hR3{MbRUP#=wQp2&k^0?PdIx>S8_-Yc_I@K$HxKqNmMbuCw% zxJ;fqUi_ZVw+rAs1=mmFjl5hLo(~~ z>CQ({tCUBa#iuK9scSG)eT&DS&>8OxwPLwY<`KFUz=*FmmawEUSSC5L0`yRgx zh{~5QZ{dn*lFOQoHxVawg3WMwS=k}&t*%C;%gOx3jVPzJ+^hQCTscb|9jZ3}N;oR5 zJ>~I!*DNabS#+f(ZppooSDToXHbpsPXui*S*CULUd)Wghi=JC(zFR9NtRW~Hfc)v)g))_VHb0|cS47|6=Js68d6Zm? zvg`1ad~Yi6j;6KAQMoQEs*6$|kFp=pYuUiQh?-M-g*$V}((F@M1C<|X?1L*$ot$^! z4pnOSc_w6gtMV64Cn)Qe8aOU1XP#WXr}484j6XVh@vfW?ZN^-%0W|?$8{(cB=1!JfQ&Y#WPKiv_9{2}njOks zlFNBdsC-7>pv=CI>Uy0wFN-n1kM5Vbg`Q03fdGkE#EEIjzZ^D1HGTxCWSE$X3*X_#Jv}d@S9`4aT&b{wQD&CjUn>3uWksi3*2Rxd4#V697J0m~CvA;# z^2iJQlPH^n(_v}<0hKF-{#fYq1ce-X3m+Uf0+$UyN8x9^+o8;>ii3uYZ;a^jq{GK2 zk4NCL=jLnN+fk{nrXe>KwUsF))%&SPH>qP#wpX6W9zdB(R$tGhdQ8eS!K%Y1br{N! zd4S%CvaGqeK8=vsZ`r@)hDFhFhoT}L*A*9{dX{IdTivg9W#!d8owLeOdZS`#^cDSm zk>-_`d%lpTobpnA>hlj(l(4uZqSe`-PC$7g zOyPWRtnG_2eWZzY6IA|Dvr}<7Ipwx`TRVzpC~NaD`X%C|>3v6Bo;bD4!@o07e3+J9 z_I+Vb*MAK&QO2H^Ude@5(>t6iyqq7?*jc&WYkKN%9A=l2`0&e9$TSnCGw=9HE-upu zx9_(@t)Axi(YP!KQxC0QxF5-VeJ;0u#${@ZDK5h|e6?v|IuDn%!1+=2PoVO&;$&F& zS}rehKNrybQT8ORGu+H(Cf&*c0peDUrg>IQgXp(krz2JDcO|+!bdIP`nza`zm_!*EPLr zhfU^r*f^et-8(t=0cKQR_M43yO0ZUGk2>Mc^zzIM1F{} zC+04*+6PU3?(~jErRA+Wenmz(YTM=AqtnV6Rn#I!|?A=i5ZbxB_S*daP z637E^nQ2-8i_f5}gw&i3OMe-!A(H9FX(lgU{su3PVRjv>EsuYmF*LibYP97nr?K~S z?g6Y-2hirI7*P*XpeB_r=;~01rF*kSe3J{B`@)?l$17_l{cFB&V=r7D*@}^d@?C}G zSGWSTdAa*Ce2D0CoK74yl(bb-^%S~%S66l5*jrxjQ!MMkpG%STDf0Ju(qgkXlTX#4 zQgab^Nfzo{wbx-aE0&&jxvd&%(bS0Df5=Uf)t)GCn6a$?#CJBL(h$#^O_W`kCjEpr z(|^nlW9!R}CsB%@a^>V|HQktsF9aBKMn$_1RXxhvSNrckv;dFCd(kFX9-i%#*FI!2*PI@jsM zP3)$YKWw@9Io zSB886GX}Xm;g}F#>s^mWhCd#tdh zA-72{Tz!vg7zw7q(XeZMAq|c?Ds+W%V;xU|{WMKIX4f3<;4*V8U(6~!lxsK`Wgn;| zN{8ltG68F9tMuEWwO`J1{5)m<2l;%nD<+E%FU2 z_W|o;wT^{!pPpNA-0Qdmm5bsg`c;$-LvP-JSz;kZD~cPBeBVKF3#7L8J5D)zPc7t8rE0ns%!N7)WFewSWxR47icky4{<$z0Cas3;4S z*0)oPuhg55M|lp_`N!N)Rw2WPiT0~dR4?}fR$4s!v8AAGhlOI<=X&{eRL^uB_64q( zsyXk~muPNSa^4^1mX+rl^oO@mX``0z&~{le4_W#HjdwW8I>|lpK9pyZYpB?{IS0~Q z4`uhrHG5(x*H|V6RHQ;#S}&E)lsYjUY8B#Tbuh{r%4$5y@k2fHD%f|ZwaPR3QONqG zBfWgX3>9@udiS7mH+2H~4wcd?H-1bxmdSp3R2+`7hN$BY*6sg{E3^*q?)%(`TPWlUuxVMFJZK$cLs#>V&?U9B- zE9JFzZtH7U5BN>kf!z!FX)-A+(R6pL;Zm$kJH;+EMcVB(?9-!=-aIkgIo7{oby=O; zT3ERy>sDC3Fqu2-B`sP%{Lf7Tp55r$Yvx@88|n77 zy~=y{<+BObpIqC&I1UeA#pF3O>%t_I zyrGd*hd!~-OMd&K_G*gU`>xVP>%mQ*HgQk8|xD&~@E566g zKwP;GxglJAy_{Q~V-G^P9Figpbveotc6nX7-1$O2WpdzvrjbAgti5vp=W`+Fv&6vM z@-`{oo{GvBi8Nv19@O^bTkhoU*R|^xcv&_%iyJgMcgD%jAsgTtoZKnX`Bk&E*l)w8 z%?amO7>VL4XB93v?!Xz<@g6t$LRF;|u5Kg7QBLYOoa-cK?SmT?%END}J+hI(=zy$p zS{cg!R{Yt`}YZoe2<2*FXheMCwV-f%3`ER^Y{P&P%bCQCi zl6C0Q_;2>yK1lJ-fF7{arHPeW9hn8miSN?b8|8xBJ`1hIf{|^%Q z*9))+K|jjD=P>f0WB7G||6^VHO^N=E3~iE+`EOHAkNB0eZ_MPs;XdWR;Xda-N4b1! zZA1CuTWjk(80yPp43;O}TD#DeMw%VwN^1W)?6ScBANX(LKk?r~8t&)dFS1hK8k-P{%MxoeS~Dh>HXl3wtL$ zIi$|TgG+>6IxxFHfAiIMbPHAK-=gUG~RY-xkH58G4vlJTqTXaYuKAu(xJzY z@Tg>K?0bj3k_%!#Htf;@q>dES>-g}mq^42)ktbyTQgY}%F+5HRo}2?zRZ`O_VXvg7 zQ^Q_K3wAnoy+((BCDSkFof!eniU87x=LE+<2i3UnucW3jf9lE;#@8-cer9}aeaX0& zMOf(sJt6de!i7lZnMkLSnx5s4e6DFkJs$z3&KE*UoiB!#I$sJcb-o;0>U<^i@6jNy zR>z2XEh0#3ygnvu4 zKr``o?wAcN(6`VGeuVt1`pG{*oj-@Y^b3v#4DCq82eX+Ax(z0~ALv}C;^;+hdrdPaSr{{6yUNoUdZ!!8ZCL1?LSqtH_SjgzMR zvtw?W;h=~hjj&m0=^1Plx{`+58oN)|hr+a-gEq~9kbhMN1rLD>l7H3dTK@-{z!<`r z@deO6aUnG7#lcI1mqQD31vK2X&_f#k#?aFIlfei#g-0c=+B>m(Mvp=hd@908<4p=J z&EQ#R4ZaZe-(ku>1vKI-L@>^4{Bb(x2Y%BbO>hdd03U{3>g1Pc(;*EvJ+#!xFTbWk z>g4BI)A4Cd&OaGE6MmC5ozdq(er`4CSwVg%HR-Q{{K9F{{BCI~@K4Y~TF@FwW4g7L zDyXwn*jtyvqczmoCUhlDvt8Jw2{u6O^M<{WX1qYyrQte4J7cHd(qS(xi^D@2aCvBF z>j7<&Rl~kIG~+dbJt6<9*5r@z`aqj(-LMY~`v%aA2Zi1ou8+PT>rz!22mh)rahi1(8qNW;oDeSL?em%(dXeR$RrTvfZmP`pu3G&s5DZ`HpfInXinEYpi zop0ew_F2KNf_xKQ3di@rrOw9}oF!dN=}o5=VybEtx*n$f*ES3d!Fhung7XI#geI_X z=tUv_s+I`dIk~j6^ucYa1SV#TaYd4RCwhC?=+yR=vj*x#f9`?P$F17CyTAI$j zp{4%&mBO%J1Q-!oS_20{w^FBuT^jN9(9)VX2WlG2AN?;-{1fV5#@_;!{uGWsM+B+! z68;$QGHAfdH3lu%Rbjt6?9y=8gl>uYUmO0x(p&~JygmX*BisAeOm!0VwW zLyttqzYY`pM+A5;0!Smi4?V+aVQ-0M{7Lvrwu9wu7GGj-e}Q+x{`^l{A5!vCCbctuO?(gCoMef7lNS zeK7Qp#w#6yqXUkUp$VKG9;1V2KnrkI@Eq74eHrwS7W_(R{A+_Z25$}j@z4x!haM7L zs=5P*8BBlJ?zej^C$scQMY1rQWw<-?LY_;I((4!?9ZjA`n zGr~!$el2Li{lYFi$#uhj{ouyI&0t#pw+zF!&X$>h+-+ zYy=HADEup_{}vH$>)>|59ii#$1kHG7XgY(ly;L;>hrM*q;BaVy`v*rt4{5|hp$Q!x zcIkL;s>xB|ecQ}M1bRpd@>po8egawpe+xbb&ER?HA?>fPhL&ddM(CE9_MdMNz%cLg z$Ek7#v`M~zW;i?e9W=x5p~wG*X&})~7N{25WNqu2|IMg9%7i;Wbw_A~PLO|9%ksy9 zbcN=ZFJ@Hi%T9P|uEK{GrBdbC6{I4k0v6XDN?b>(ND zZA)Qj+X4;HF6`0*%oA)Mc4@c{p{060X!r%fUP=8I#BS4-I^pmP zJ4e8Og(kdogqJ3`Oz29QLAS8CMBwgT7Zl3mzO{bawTk4e*2l)g_bh< z&Eb6u^pKWsJZxP)^x4{#%NIXeTmP#+X@{ii7;SclP^W!i`6P^Yw`^?avLeKFF=phX^E3`D>uR>SSaI>+S-gn_Y zhr44951-1`ae785c$z_VtI(Bn{56FA_gKxBu+%QZ2UXa}NAOBo?havZk>!TxSxJmO zAHi(-g`lUi7_@YqB6=mYFCP9&gum3jWayTtf9LR*wtv?)w3GF}Vt7>22rGqMs=Eh! zK;t!re8;Twoxcw5d}0^`y<*-q5|Ac11X@FThP{&3*uG(JiDon$e;Z^( zgp=C$FX1qQkzqI}0{k9L=#U5}P3X|zVZp=0U+RBE@JML)X-%Dt-2$AO{Y%MVgfZbUHX=&x=LatcjthTjLVto5@RG3q9u0C` z#Jd6djJoQ^Fx(ux66{1fzy z2BJ-P189PqgdPMf*w)ZP8h)GLwqdWN>1-c%>51;vHs`M+m3$~P;IQDH!M&k3D-MTd zbOiK}p7GJ4rSXpq`|)9y#v2tp0eV8GwB?;~6F5CQMhDM;+RujktNJs4?ERN3f^Ewu zzg*j8$YRK+!`u?h=lSrLp7`s~^1K1f=1pjeeh~H#p@*y~FaAnxm-H^d$KgE<8f^yj zYO@vl4Ntq?eaEk8xVG5kJmKFG_3wbc#a%GMNsHOBU9=O9WLO9qVbRcwK@Vv)Egia& zCbUe1UpD-u_T@rL$8tBQsV9GYLNcgb%+rIkCd2<{mi~(w+f2S~=4=wqL!Be0KoC-ZE zsr@wUCO8_>U#l*Fj^(Sver@o2=ut`I-+;Zf{qHs$8pcOJslGjUN7(-zn$DdOzmg8t z`%T~eH!(7L0D49bLC@%EXpKAvJ*4`@(7#8UbaI4~w*5QMOPEif>3j;)73ViNEa|tw z@1PNW3jK5N7wAz*!_}JVujq*su$xgmG+es~C)Mp6V*KMs1?T{m!=op(iq?i6(($`q zXla25gs!Cafnl$t_Vpv)2G9a-)DYu;qlh3~%C-(I?VLM8OT0_y-NXO)XokZg-rf=Z zH!R^{N%nfm+S%d_9)jb8J;5ox-&Lc7Kt z(CBv>ENHm9!vDUoOYIXwSJLSskqLl9;2W z6oy)8#;t>G!`=>h{3|qr2EyBf^Fa%;K%}!^=!JrdK#x+BL)v$jiU7+%`)D_4f-6Ih zN}54q*ehv4Rt@|Az|vd+O>p(da80-@dY4G3l7`zY>@Crz8XEr6@WX<8LJPQ8@~8cE zXxKZr4>ZE?6ku*@9})JJsQ&@sFYSbfhHjD0nR-}&!=S6e3DBxP9oosxgC=}F^pJ+X zAUH1k{{+qO(%{w5qb1ru$K&5<03Bv&t$`}SJJB7H0;s>Y!+IY@aDlS z!Y&QBRoJ(NroUbImvk6$d+5*@93IjPhe0Fk750{B{JrtFrVfm7QfJc%N((XyI;2k3 z(<||C%taGCjR5lW957KmIOmDK+%?4H26;V&)7dC+G%RTqYbG{Qxpr8RIF zG{O~Omxj9%IvTDEdrLIq8zbCb;PU8Kq4qb7XaCb-f`1Q>x1de&Vc4fa4{5|{&;orD zc4_<>&?fjQ{J#!=ssA@&|1R|Ru;eX~23~)0`dSov#!L7*OwhJk7H!5|AfGm^+6g*5 zhd>h^3O%HH_t4Vx_JY>be$aFd2p-g)^Ebd@7(AmRf=309fhKq?^pF}pIj@>rDJN%`?{cpjyq4`(o_%%)7 z9qitSnjQZC2Tb|@UuKX_tg_&q*w=AFUw6p)CxfHl+whR;??X$g@)u|V=^E%)bU3y0 z+9+uJdbDg4cByU`x?Kr}5$A*U=8oYZ&1fO$Ot)m%CA+Gs?$A!SO4y}(HE6um!!FIR zXZWufc4_!hUmO---SCi}=?2h*HVkeAO=y$gpy1}=zXkM=rneom;Jb#sl4d+4+j(0G zhZzlxfYLerfYAR!tG1Fg*!528ZMO%*gQnEA4-k8QKTVr65+(*i=HUPM}pk zE_4}sNYCg`p{4tVE1+k1bNJs9{?hcvhnDGX#T{XgW;7vmCAHrjcB#GxT7Y|l_l3XI zet&4`l=~<&-s9o_#C*&@p6R6Ucp7?CQvc_$%NL=Y^R)>71~j9;Ll3E*9R6=XJK+bR zrv^WU9v{y~{TpE#201+f%!mM$v{%o)1=g(J}b zH)W4R&+Im|wfzXx|8ZyrPXwQYW;7}MpMf6I_%A}kzZ7<hBjwcXa{YC9{&OJl3JO78Lvjdat&y$^bWmN zWcYiupaTf!K-e(COBd%Ip(nf(H2s|yAb%aZVlbm2;jugPklOcz*2HjV|2j78#|KY@ zw#J3faF;=6)f+?q1)9$7(1P6sEy&#^93FQ=KYRXc=>K0V{WmkRCZCTpdjUFCybfJ3 zKMMURv=4m+IZDZ~Jg!Cgq5|iH75u`2pjEaKTCN;+sa_SD;p$UXu>84*R#Ee^A^1 zf5Ks#wPFP^Vm-8^4bX_~U0H(K7eu=Vb%BOo0a|m7p;rs80WDY`XgX^{H@ zc~=d?;YM{NG{J+RRdy6Kf#aduxwD}OjR~F)J*4(BOjQhxe-*SwuY(@aa5ski)`epH z<46H-hn8$2Oyd;Vd!K_Q{Br2Gp*8RswBSEN4{1T$aQoa*(h=&v3^ab%&}+a{GYeDy z2HXIHtJL<;0t|)jxDJITcw*SkhW3q1pkIx37qsdhfX06grh-D#{Ri{}ra_x{7W9yI z!Y@lWtdg(8L#n?ET}hkf2kb`t5vqTVaFw(GwUo{?ELzInVW~2J5$7R-8O#f9yZNCR zEf@(&3%D@!%$A0RUncyeXTEaiN*ZpJum?-YphqJfX1E5lAZtPGeM0w#Hq9o`PoYyhmgxt%-fZK0Ne+&?Y$udQ{T*2S@lr z;Nj>`pf&qhgqMc<9Hy_CnH7dFBS0lBz_-}V@cZyjET8ogPXrwdZFs@X^x8u6nb#NY z{s~Q{1O6u4F~U{SbQTJ`H2fl=rFyZ@u#{S8`7lTWbPX-l-9k$Y1$-x0tBdq=>QXvS-Xzck@K(0Oj%u>Wspyp2kc&?b?9G^0&JOZA}8($Tpi zw7|PS3$hzD++gS-)kC07d?0lGIuhDd&DZ$dPsCxslc0m;9Oy>sa%hAbpcCYH$lLh8 z#Ow5TAw7PNCVO{;la})ylY#d_%kfay9|`-T&|*9n_7|Y#derwV zCWl?>{E9yg+Hb;MNzb#&cU(Pwho)b>Sag|c0(wTZ5kZPq8v)I5aM0IJ-W37vg(h%6 z^pLjw!=YQE2|td%1%D#=WbmnoC-t8syW;p;7@m#*(g4qdmhH;@YU}dHDF1=9T<=2r z(DVo<&HvNjtguUy`w|*&cG#sA`fb?15B*d4x4=AFDm^SfD=v3UxZca&pt=p(jN3vp zng?2e^F#d?gvMVY?8}6GIp`sczkJxcc8by3H3CQz><-OfmEdY&?+rbq8Lk!n{lZ>J zC-4E-&2S*JCu|Na;10ndB^+)nM?yRO;m|{x!I7b*`eT7;9v z9}Nw6ZupnR;xNJUp@%eqa`3|7CD1dv8hS{>T?bA0hOk%C6T1hyeQ09%OT#}1$+uMX zPy~1kTJ@8%N7diL{v0&I3(%t_T9B9VcO`l=!oLl*Pl2A`yP-b_{UJ;rzW6*mzJwmq z2ww$f2fq$~X-)hTtmAH!RoVs`udR2dg0}Sn;lC(!B3%wTb2q}G{ckNC&e)qk6WTKL zPy?WcLp#r*p^pom3cYx_0GjbQX#9(z>D>aYxxYXUsU9D^1E!a%?~ee|01rT`?%~jn zLNj(J74z6pN2IPGtVf5u=Zso`md0cwMFKKl>Tpq3gE$G_Ns^18DNaJn31oiJ3Zy6qyG@)(7F4a3i+kP;#KtrJM zcMm-bdPqCte&N4=*rhcx5*q)YQg|E$&ET-m(wY3y&@Is`-<$CFOvXc-;Jyei&EWp< ze*{|4$HM+NG{4fMF#HXANUQASu)h*~HT@jNgM4s8sbq z1gxYbof>v&f*%Dx4!hJoEjT^w(s|^wuzw!*mPz~TVadJ@{umK|3jPc|q&3re$s`jk zKt0+vZ3{iKd7!eLJ={mNjc=}Z96V7Xwoh)_xWSH^C}t3s#Rb)gvz z2(BO8Ft~AW)8J+>J@VZm3|j@a32qnMA-Gd;=isi;Gad@PiWnL8gQ16XrYk|u{P?g- z^{6Fje-9kZG{RYE6CMLS!}FmLE`Vlqb@*QoJ*56OKx^Qp&^L#_)P8GdX}aT=Eb%uv zvf)lV%=oVnP@3>P&;;%aeSi2%?GFSW3jc@0U)oepK%4eCX!-EDn0}{!5joTJW== z>7EA-e?HXz0_Y+ATA`|oahTzi(1_Q-I(P$Y2PeRKI1!rAgV2IL1r7gn=vSZ_yb8^D zGBo{np?WIR|0C#P^+jju-vqzJAZJ4p{1zJUJ7@w`OXUL9L61rruN8K~w+{c7Xu55} zUmCvcQr3TRg{Gp-s9i)V^J?w0$^sfM&EC^pMqX zaA>I>5*!+KX@Q1?mY%>~&^|RH^nu|ot${<~0*=4aBfy!^5}pf9@I2@t)#rznW>5~@ z65SbH9sZRx{p+#Yq_?GXX#YEKRAaa^8Mr3}Ju0dHU$L9O{m^aq-=GP-1gqi8Q2*DV z1)LoAH=#FHzY0AYS~EXD=bz-TN~)I5XIcZRk+s3Pu(t}`I#?g}HoMbweW9=HdU|iucYyMWA_W1tNKO&X#v&__7A%>p#ji7vRU|V0ZnMj z;8xJ1lBTx}cH4Ys=W4!g8qr-%R9VgFZX zdSjP~@sA@N(s6kyG^5L)53nbM|9_u({`o)2pq7IFH3}}(_rb34eP~U8Xw`bAQ=vyC zwSN?LX@qGJetOs|ssD_yOXJTB{m)p^!?u_e0c9`~UsIqmrKC0b!SQ z=z~K`_2Ho_X+}q4x1dKs$NdS=6FN2Qr$J}Hb6|Qu^xW_m6Fd)k{2n{ue=Fe}uJ=T| zd!YrmKlDWCA$r7dPc89kCteSO%8uqhkgfo=I@8S zl7^qUEcsjFk0XFoPY+#5t8y0hv{)^d!xf-s)()EBywHNShaUeUO9ZSV-~!N$J3guk>vXN8uAJ3Dv|q~=Oh<8WBDmqHV~G6Gx``a0+#P4I@$(i*urbW5~p?ud93 zpar-Kx_5jWruF}+2=F)PAuMd`o7PKo&<9`Jlo>4dG zAq}unXsLg9Xhy4sU7B#u(9(Flp-tL9?3FZ~b;1twN50n$LnUpyjj)@+AZWzRf}2Np zseOykaw+skXh9AR|3jeZ909F?(P2MhdFtN;&cxuEje#Cg`+3k#b^$cOa_9>~Ukp9| z6`I~95x$uv43_MQ@TjErYr-zA(py4TQu~CkSJD%@H{v}4Ex@DD6L~yXdNLf7f=@#; zem?Yz(1#e`y9kK>dFV z{uKWI3T?`&E;*eV=nu41wZdV7t;3@jx=pYx^pJ*Y2Tf?+(Cx!t>fa$aU)ZGuUm(~q z>@q$7TQUrlG{REYZHncfZP^WKUkQ30&@*&z=+P2eWB)^hTPL_)gqP_D8aBjX$u|m* zmgpI8iocz08`v8DF~Um=whJ`e;IK>WLxaO$YxHnvxc$4t`i~<8JP>+FGdd#dM+J|8 zHusg#1g?P|(oT6RYz-$sGrk*oNcBCz`@()-mstNNVz34tfUV$T5%7r!SVCiU+44UB=&;({d3-~ScsHFbi zgp@a5VG`kAWUi z`*ESA`gmxig#JAm?mfcQ!|Blclfwi*#b80cgr3P)&2c@ z;olNXcg+=I{NqSx)Gs2g4Gqvg^g7U^l4h`O*nf{j!fir0(;EaW;1t8((o&X zmTCXL3Jw!oEj*+FR}Zccc4^hE8M>0rXagerz~K53PI}S0J@iC&4ZBR^Uxx)40?l}6 z1d!_8LswG!u(1Cg4Yx;xlQ!92p<&8D8T8mEJfso#4K3Bfp#|MP?9w(pEc_1-yEOa} z&>A}in*MR&FHL7ux12u?R5E0blh9Vx8DW_x;nV2P1$q;zPlQp;i0@bj$TJ z^bGzU_IIEO{XgE$1-|RK@Bcg2I!uabA)TZZ$vUtkM296Il!eJsS`vy_$WM}18IpOg zNJ1=0R;DFG5lbq`v`Xl_PSRmn82{Jvx3~NMyIi~6*L_{reSaS9_x!$}pZDkZJ?yu& z)>e^r+e9X?Q=~xJ@AVjxw@>6^KXPW+Wx<4F5^Qz!S$gquv&aW49;gonPS*zm4ATdG zxbsdi+B(1Czrt>mYyNQz<*&%K`LI5i*I0c}Aj3RLpb|>fo2d_mpQI1kP1XlRtbCpz z_`%4R^}!pXe0@+L4HprpKsqSU2WNh@J}Cb>{dxAUcks_ofWOn;Rhj<(>Er)@@#lp9 z+6Mv4VE1g$4 zIsHuNS}L8i>!%o|cwT>xZ}7ZO(*7p*e=xuS6=_}(N${Pt_!^4`oDH4}A~U6S6!3 z((p;=6p@?iS+5Tz%JdRt`FW9z?DIVR<`mk_^jydTI^W}ehxOIZ=iW~!QLFRf(dkQH3* zaVW{VMn3psTVn9-oXDxUOVppRkxtect(k^F@(~ z%o53aRir@LzwR+){Gg!0T(1ZvTl=;=EBZ*J!y?avv|HgZWPnv7JNSkBzhH3uU?L5_ zQUlt2trs5Wo4o@_hu@1#V269i;VzFMd3!vD9PaZNa`=PCKSWfH9~7+QfGXgR&V$ZF z&cn_l&NAmwkqK9b6v#v)G#mPhWL8cNtGTZp{O{8ws!LE&lb1h{K5M&&bQmk*>$ndk z1E1&~l6R8G#dxZ-sr$g`I-o!j&k(uT&K5Z(ZQZvQ8MuS}+&^*EGF=r#AD#OJz)^!tX0n(tg7 z2EQ}*wu?p1cY_uB`3~p%A{{LA_+yWYoS%#O6ShV#4E%-2guirO?D2Z%2InTo^|x6E z`V;oObDPM3yF@zL?S7y8AKf2v9&sKO^(X9@UbqH+^Eh0c(NCmEeKn6`#NhQ;%SEiS zj7c);KVhlPGy)Y!N4K~i z;vV9MdJO63Hjg3ow+H|0UJg8AxF&v5@(7ezKC=(v6tPy;vSMW+vBQ8{i|N@4E&8?z+6v&G??RYD9M}a z9@9z)tK@E8&=^!RV7^N*mze36wEcp~IU_@UP?6RG+{FWg=$37j0R(F^^ob*>ZX z?`x3>toL}MNC}erp94Dl&J(tJ0;J(KkrnQCUlkd6uh&D`?Gy1oxUY%^_v_|Kc7J|0?ozW_2~8;Podv zPZ23qk?&BoQ$0J;!FisyONwUyRgxqappz$b_Jj+a7m2K-yGW^uth|TUS4FBW*9-5c z`ikWD3;tvR2NF!6KUsewGrz%oDCyuv?1UsaI;a=we8;LTA|2l093fI54M&M|bf0_3{r<;Jj`jL+ zBKh8jKVhfqg^47HjNQiL zb|U#nA_X!)C-)aSySYym`DRyNk3<_-6u#4nVm-P@kO*z+LIvl5YYZ4@~{-+H}R`EQ=TcTp8N!#lk` zlnl7bJtS|xi2uPoWMKzA{(JhFrGmsGo(SovOk~E#L{{*N`(K?EBKJZyUj6~;w}$HJ zucqfg;#vV0wW=TqwcSG|aGdja_mI509z)`KBKaq}4<+?+@|?QBsXAbVjXm+7AssjM zd`O4QJPsuTv~ph+)h-ZrrYD4w0b09<3~;u`khqOVUZVR@a?xGod40UTYU=!lRHqrs+n3-I>OF4~N=7P_*DV;f-0NZRt)58z7tXa_4|!0m_c)Zt$?uS7 zi*|XvSoz+w)CHvD-6C_}@9_^JYdk1YAbE#8hID+y<4}@UCQpCIy#D|57Fn<0tK}#y zj|R~!(@9*-<4|({#k&71>X%inj;!C2?&^4YD4BO%_f^tj*ZA+ctfw^2e0`DSoFX#2 zQ@wd8@eRHHG_QyFMjls1>Kl7Kxjkhrz;Y>{?}ULQ()d-s1u z`s+~BKa+G&1HPHiTjVR|o4f-^hiM`^bgTPNvSYWouZj#bO!b_Q;hqQacLa3603%$C z^n|}69o^%3kd8(u|j`506vhqjdxiTku{a=y(CV5^c z*{LVwnZQ$(^?~344W@X-RBs6J&p5N4&w4$iqa2Y5&T#)%B;_@4H%AQqhe@xyc*FUo z$V?Xm6ZAgGeZEMkicIt!&nxh}s>oIUq310lkLxdZ;3VNQ?*Q`H`$FVru(mpnh&*sA zM6MmaAIDBah{Vw%3#j3~mdHhYs;DMmXNdfA&yHg7`sYA@!n*R}WJTQ+({T@x4tsgr zTV!I_h!jZvwa&ioLrFi^xrZ!tK=8L0RvrXrK2Q}T4szb=Oc(iP#eE_JWr!5WiXZS8 z(teElhuuTkjdeaEvY^Lmb*k)OqE}3EP8R9-2~mH-rs;*N|3w04EgQcsvPBv{Qoho4 zRb-qsUJqILdXf2*hzzqy5|n!NZjomDM84XrruQ2xJBIfi zeaT?I^iHF>Wefu+2d103S^s_dK^kRYUcT;dp*QA z_ZV_7w-Qn3>V>}{>0R5O)4j1l@qf&~e{f(<)s^ax9lYB64JD_bpZh-;;DAeHfLDZ) zExg(NUy-~t&x88yMPZ{v{JriW6U=blU+Dv39B|V=EHd+P&c{SLm>^O@iO-a$!%3p9 z*RX7nd-)ajuR3!@N+@YRN4`4O-&;CBc2CUL?K#i7X^qo`GUS@@jh?BtAaY?|&TxCs0>xu8MO-w&+5U0=a)L^%yeYt{#UH z-_3m}@!h>$50MG>jP?7!r#FCnD!ayG$i>-TWX7o;-{SRuMFt$??b1E}?-)=8Gr3J< z;CnprUm^Y6tM+X9XzvFyk^7wwxc`Fz4%q5(p75wAR7D=alU2`-Oc5Dys^>!ne%5`C z$iUM?c5a49f#khd8K3>fL69_<<%y8QSDdfmt!$HiqL*=BS4h8aid-5CMVh}&nv=YD zyncy$h%fXwl(c`}eO2V9T){O<;%A=t&yf6;o*zp5=khG%3z3ceTI5|>spmuTc6+>= zYnF}K=K|8fj~<7Tyu}}1f(d_1 z{BZYGk@`Em9&!vKc~e8KsO zNU4fkpLwcJB!L44Sm+J@if7yA@Abbv?)zTfPWta(dU7VVt6S!~!-v`Baj6d%O7eDl z-d?W{(qgyxzq>i$x+>EAN3Vxmxn&+hrc*Am+Mh-8fAP3N|er&Xkj zP;$O%x(_7-#>&Ivy&e*u;Bi&tRy@V)Aro#`$3Me1lwfA3IU9K*q+tt>LrDiM-G`EX zTDcD;-)Xr-p889jU4#Eok3?4&-9%QBEK)+rR$lHNGJz{RhID+T^D6g{ysO<`Bhr6A zuMcoQ!|OzDjhnp!GTCi1k%-|2)+_XmJg6pU5dV;`K+p z9#a34`(qyeEb?C$hsEm0UwC|-EVAO$_;DB~=jwFD4BSF&Ctfddd!~tWJW!-S;#)k1 z^fyFgr*0SN=T7Iy+)(%(+=){4fswOgi{ho^M2zdHw$a zgX8~i4iH>e=)_srQD4x}x|QPx1$RNYS3u&QJ%()M?;;%pzXtjfxt*%Gji6I$)rIo(OrS z-|6vxl8keg`sGXI2gKmtggmGN?(fHa!2eTn{e=$5HSm-s!WK;p&QM>Sh;03{9-Byk ztSHB0$oqy_A}f5u>*skrr2jmRVeq>Z3td14%J(>w_(kp^@nVq)yz5-z^$`D_$B;+v zMh;~d{xXpQ>A#o9kR7>3q`yF49dK@LblxIT zAfE+?izMDD^57XGvJ>M(3golqlcL^FhP@y%;7pNrvz#xBO!!rgb48Uvm>&d5!raP= zAX(X4irMXDBK6Bf2KdDJsmMSpy#8~M0%^ZiB>zkIka(RK{5_&y2M=`dcmiagZ#)hq z4L7@o#NT=xN(SC0Pd_`IyFCxmZVz#?AFzUb5`4Oi)Y}{4Xx`>HiK}}YN(QP;zNP-C zZz8<$qy7Ojo!9l;P}0W<^0bK;IlWCqPG^G11)3;Q{tZ@sN)7FRf!nEL*g<4hk~}`& z2mC8C(XPtlMo9L2$S3FiA`8A=r2iXF)c73SB*8#wUU7>^f%scRc4C;w^)<%*!_ILc zXJfiZ-b|6F>gyiQ7wKn#$i&_enaHAm4k(L6{_XiHkN>Y2_)iYRPOkBleIfFwSTFJk zbC<_Ih+IQQM3q4B;0zs|tY1{XGodBFu)xWdouwGIaSw^xiVWD^J!DHehz-T7MJCW+ zWXn^%{wC)DG58N~2Dun4QXn1ODl*Ve_o1Z2;huMg^G?qTB@-Os9@6hfk74jvgOAby z7tQ@%0U6*Skp=9z=P;1U<98zA7@Yw^h%8?|S|c5nm{tD;^eE&{6m0 z9{)nj{a2v_&RI2m2BBe$$V_8J8XnJQ7AHPVF`tB5h~&2v*||iI+c`UkOstbgKNpI$ zzf|O!xk3zR?65&P;En1Ckq++`*|PgZI(S&*?c5V09ZhjQBT^vV#NZZ-w0~J-M_&^u zki6I3zZv}1Y!W&MCN2<}S)mxbPercY)gm3Q^LVq!4jd4f_^%=bGSQm)_BnUSNh0;l zMA|2K+(8WPOuY7=#2ylSmby-40s}?fag7q`aGd)mM6Qh)BEK5z9g(enU!?tNF*s3? ze!ml0z;2OKd`P4~F2chB9k3-wy#f*+^Ei~8nqTB;_^U|#o9Bg+2}Ejktgr^N{0jy` z6KHsx8ZbZ|k#l!~$Ut%45oCh#A}ebulHbhhAuDg=aVW_<$GtNU6jUUtf&n{-OyqnK z-^t^PMNUmGk@BCR&VOh}tn3OO05V{IkN=ZooEz0|@czF^2b`-xA}b#3144GOLbbFHLg_3^iyNBdA@E8)G;;|SAo}n{bKoSx>hQzHr zh753~$VA(CeWLreA|;fxZ}0x^$>ZA-=rG9>t0Dt;^m<6gokX5I)lG9`M)9kho9n?Ot^k1mK8sqgZMhm<3-w?;PHtf1#+evdkmRq%YY6zL+6XE^g@vix_I18WPt7> z6HIo0x$`QK5=yrG2KSJ5sUH8Cflxu>03|Zu%}#z?mzk4>Lry3xqx74aR!KIFBC_naBi@0-4Ap_miEEiwyjf$5TWKWT2_eZ1<4-X~9_M zp99`qydm;A^c_!lSEPgYL<;2GFZH-8((!WDGx1NHpE`@Y9i)B*Owhq+E>?O1B;j+9 zVQuRi8CChuD8Ez4ytas3Lwh_8GX4+FL+&Bn9TsU<<{q-4xWenJVCCHsTEPUW z>C0U@j^WE*Cvi>13|vcOpyNa~@C1?iIFa_Jxo_saxk!PuKf`^(seZR6cmkxu)*=I( z<80?XNu)pqJm2d(yALG~@UHR<*iGb0xKd<-Db6&0buVu$M~GbX_lXq90HZyI#1Dvc z_@Mhx(*6;7CO+Po>3NX$lSJ~K^7_D39nj%3A_dZcIj1{kh^*)pkpjtkO{C*F?nBAK z7Rz%D6?#1+{{vCu2Esn{gpWnGenn+P*k|rni!}H`q*O&FvQG7UCfelrn??NhA`9H& z@pg}Qh{1n+@uOE97AcShN1SEOqh1f$i3(?wz8l4s))Z-1i|g~MtS^@bArehFWDjkKP%Gyd6E9+iR|2bkphYH zoD0R^4^_YC36O;MMYe9K#~+Cd@Uh3Ah)isa$k!*kL?(F9>ko?*NIyqChV=83v%I0s zKQsPKf{P?Vf7?Mqq%(@Y{ZN7UXpcil`&#ZH{nQc95IcxW^g@xX?f3wJh(nQ+d;_)Dn0=XD(_xd~BLw00@Nc)iiuNWyZz`Y(rp5!lh zTow7scdqJLNuJ0lSmODR0p9caWg-*(*!^;m@d7Jcd?r#LTei;qSI%Ouhjje4bG`de zQeWaeluYznc?RApYC?gq?VcD)X1dcoq{Cg#Quh$Q+quU*GD5h*8WrttGOuIwJkWc^+gz^+odI-3J-?li;FhtOQoj+}X+- zgp&F;@(kQo3Fe72TMGD&+8%nedmW>ztrm?r|J`tQ@dKE z|1X_i|FJdeB`A;%H;Bye8|QZ-4Y!F*XuETVNP+mBA_M*4@d1$u9PzkJWCx=fSLO$z zb->kHOJv|!k%5nQo*>deyh#1Y&QnDSWZ;G(1=3$Lk$%n)DUi6ONP+4%5O%f>=%9_r z%+K>UNo2tDJ?q+#@I^oXztp$a>6}DcC5EZf#hH5>?1OM7zb2bBQlX|MG9ob z*NGI!%2GuNWPmi0lGeB~9xPHI{SI*sbq*65=XNntd;1Ge}ckq68ek%7jEBt9xq zAn|ySjwd)LiWErwB$0_{iS+xlNd7Y-_1Pi?@@s{{p4R~bz9iCcwiqSO5o?S2VvJZQ z($NPZ6D<r;b93_CemTKNa8V(4#JvL zPAE#GgpzjE+Z7JOjmhJq%aez+=b&r#c(C zhqP-VhKo%_cA|y*mH|IFQ=~vTI$Pu&OGl9%xL6DqyNGmnsmEQN-9$<#!xeXzr=LC| zr?jt#@8=9$=Labw0}T)8M1B5#mOXjy8$- zZ$%1>5Wjc7O(bu-bB7qAc$dhE_j&w-sD%W=4(WieRwJ9~#mN@e@EArYuH|tkIp_7< zS4BQao#OS7ew&E2OAv!U@^z*sKn7~>kolSCMPv3a`IPq@zC0t3^sE>F-*3&iRcZ-`>90^Y0Ub_a6t5s<>aI z!Gj(LL<;2GJt{Kbc=wQrP4xOF-2XGAzp2gq{?|dUK<>*IL_;-oe(g(w!nDl=xllAq{qW{vP+Cq<)`!Nc;UB|04#d;9MN? zL>Q^K%wx!V!0^*6&vmrOK-HZ!L`o>BuO-g}YK!z&$MYcdbt~h*9|wQKC?&*sgQ`e} z@v0~9RL=_~1Dqz$1R8mLDDjPhUgw_!8Z`9=%|v!2L5vd5a-Jj7Fi|AGoyYCPGZbI% z@eLv+l;o$nhwSK3G5G%fcCQE}E4h&()XoLMp49sc$VZP+Rwqj?eWN(k@Bl zlwRyUl=RcZy;%8AzAteRO3qzRc?Re$((nrBm7WjrS9uJZC>|j)k-NSA9+7@BM0Q}3 z`^jf$|LNdy305{mq(J=BA{SY0dT$VIhTmdXDB2xdWv%>5D8FDJaT2%HEA@U!zgjLf49ai^> z8Xnhl))Fa@yxJli)$#avuZPsvb=GqanfQs$lib7L-~Tmo5lR{~k>^x27de-$MEqGI zUk9A)ags=>iq+*W^1Lq2OFbV3|AU5P9We8rUQrcU@#U)LV!KwXF5ckzkcp*=03g>5@|G9IuNP(QfFGc!a=k>*2UmVau zbya*La!z-OG}t3@&JTzTcu=H+Ln0F_7b&5n{+N46yI(y1M+{KG=ldE7die+B(`CHs z+456F20GRA{~2;>ntMKEVl67;K=6PSpXmuzkrgMZo{r8J`TkxH5#L*k5&MdCe4R*v z#QjBf@+L7xyjA2uHX`VC{_oWRD;q7+-~o{pJ}6Qk{vnSc@xvk=j~8RaERl9kh&(-+TO5ByX$oV#GZn;|CAu z@COMda#&;~M?@MN6ek$yY2^!r~2!4-A(h8Kz? zTP>>EJez_#V%L z)fGP=((ywg{RKqw$9jFH7^CV*H1Lk`J$UyJ9Un25+SRwLbT-!xD+9k4r{UYsu5ZTg0A_d|P zJC8WaMDmVRG7whb6~Bp;P_h!PJUR+@Mu-$heU!+As=J5e$2e<duWS|z#1h0qeU~BhhyNBer@fZf*|DU4+I&9|^ki_=R4(=ga z*U{rp@vbXvxyd~Y-v1mhfi#hU2YLb|zQyBE;s?3^E0Qs8>K5-sUkR9wsu;JKRIg>AhZmpLE z;QrqsJMoV91BnCg>VSckcm=GX_+yVl$;?;C^RIEf7umvXA`93d($7wj0;%6E(%&JE z%e)>cKM;0Q2Xs*G6_A(+fC29lnPHa4Q#>)0?9^2Ep=5`q z%d_P(L>BadbEfBqlJQ=a=jTtuKJWxc!w;QHMYi}8k+)pyL{_lD{kI|=Z53&^O=JQ) zMGB<-UXLMp`$R7GBWLP6F(e$5V5_6gTJ-Las9H68Z)!WC(e%Xm`(D^KdhO_wmTfq8 z=<5d`?h!NM-r;9=m=vgcYQey=&J(BiK7Zv4FSXgR_`!~k+<#lQGq>G!>A}>u^LO3- z&W9Q$JnXkRzlo=WSGE14!?_F1cH{UVy`F9FXKn}yl^@bobI5;hOBR%eN4gxMpoMVM`b2^yod*fPu} z!B%0m6`mPp=btT}6=qMv)?u~>o*ibFv=Q5c*>reLm>q(NVRqR$V%so#3APKfpJDqj zyE;+qp!vi`_p_AyHRDkiX~yS;*)pvmA}P#HzF6!SW+UPGS_$kFW=*?@7pNudtd+nE zwUSH3i?kAWu~q`RXeF15muMyMQmq7b)k?aG-Lw+eT`Pe-w32ROvQ`3nY9;V8t)#oy zODlnwYbCI^R?BwV;){d;+TaXwRT~{`L=&tRD2+B{WC9Cduzn@h7V6z*KBXY zyK6K(bKo<-3^}Fl!|iXY{rSc{)30g$%&Vh6IjwkV!#=Hhb*Z;4@vF7lqPyPm(5#rq zPp0NdhVuiFU~*hx6AsR-hN}^<3B!o*_KnT`?2<8$v-_j`K|YM#JqW9lZCb4 z?%y-}$mo6V%%2`Iy}qH-yXcGh_eAb^E8(nXr&i29HRZxNv1vE0pS$YFx}(#Mo4ROc z=K*KjxohNE-!?eZpy~3}v zDf6PPvzW(p{gxs6TbDN_3J|k%ByO-8g%ar#B!(A8^@>Ohv+F+ z{an=M^1WjRe_pTgCwmrr)UW&S!6(ePYG}x+(?VCh=(5Ar=68DTzTy#^Cd770YjyjA z0S9h+dG=FT&waP6&&j{8I{v`+pAI}Sv_bLgrYm~h6aU80AJ?p|+o4Btr=3%qeP0-` zO*VWYtB%)AdW&wZ37T-iBrTzHrj{^Rw_gL963mR_Wrpa6I$kDovP|!~GDCGs)s;zl zT&4muOgB|MnNmzv1DWCKnSOGzWICTLbEj_Hll8c}OE)eYp&R!Uainfsc(=xZ_vpqw zRUD;J;JvzW;eEPMC#%PpDe7@vJ@q(RMx#dDuUq#7@d0K264lSrpH{|>+~^+Fc;t@J zjhv<0hcrHqTm3KCTj9eR|8;S!#uvjMv9mhT9U+E_5&Hh{-$)-+*)9Rr!R z_%30h)g2*BvY}wIEd`HTgONg(jSws+M>8oNsjKHnYjU?l@-&I@cS}sMwTN;=hkGQZ z+Sq#}a;GzSM7AZ4l1O<@B72mC*%n01^Ag?em6&Ez?v*G&lp&t8F84{K&ybjXpTrD1 zh=_kdqHl)8Oq-PN{~`=CV9OA@0Vl$dKv5v7RcVf9f*8Od{`poRf+6}B^KEhM9gav-Ns5RwkcyJ3J_(8CD!E;iS%5F z*^fvR+CfD89ErZ;BtEcN<0Og@(T_?jwLXtZWV|kskNC*K$4ey4l^8r;V!7oZN)U06 zNqlN)k4a>{A+a2>!s2ao9&=P__x;c3E?}N1-`dqV2ky6QrK#9z%~niO4x4w!4At4tmGYa6gNd3 z?Xt8f@};&I?6$g3t2(Jb)uWzP^;E=V< z77p83aKtu%GE00`IBFBYPqqb=TSpU)*%a`z?FPSCmmC)Qz9vw?)4RfY>ejXR4n9j3gP6)S2vt)8Vk=c)l3%B!Ml1cegX2wf0^}}rsCZ;6Z@)66YbBdG8rpn z3Ng*JKd;Fod@eKmHJRqxA56*T+Ktn4wHqz8Ke;lQtCX`US2-=UKXYV~R?Cc;BXg$q z2UCh^{klwR?a%8nIcsD#W7=qc=E@|0A(J&%CQG9{QXZ_D)1+A*0WGOhDvdTQLd*?XX`xK|cQOs%mr2!1 z-HME!RtwAhOm=yk;8^na3nLmq^U9i6s(AKTGUK%(adiBuWu8Hb~5~-H4oD zBzkX@m~YcIN+ka(QGv*_o|`1f5%V@lEVN^Y+zN@*ZzS?<&NmV%ze&VymRMx{H%r9) zE>VbBY&E`>C_oJVR$_@QmdH+z)^>cSxX^}vr-b-$iB*UXtiksZMTjxqODwe&h>Qq{ z)>|Y#ve8>45+WrwBbHmstr8`OtgRBC+6F{sltkxk5-V)tHi@KYiT#L`)^WQ;DPqQU ziB+~6kyA~g_YR3QHf@JQa&?Ic#9HgQQ=%L(Z>PjMJBG-Okx1PoQEYQ|Nu<<}h%J>^ zZ~aRpVrohhA~sl!-4X?e;kzX^*Tc?*83#3+30-|3CBrnM(nVb`z1;cS^Fh+*#<;r9f{6ANbI(WKS(4UFR>r7*E$}M zC`HUTAhF+eBXa6W^!`!efKB^RBDtPK1>&IfJSb6)n0HX(upL9>o*-a-BWxok^JJOM$7E_m z*ra1JNvFu{$JC0j^M95p#mx9wCN{$MU~*2C>HUjLod}!Gms-gUW%~XqQ#Zn1`c8zqz3TqZk8re%a}#Uz~}(=A%&%m{lrTBa0JhG`vPmsFF< zX(2PanoOGrJA_G2km*}pCQ+MHU8Wop9V63Dn-e3G+fpVU(?Oe4Lnft_%-|X_=V@~= zF=xue)s*R|&8aCg96_}j1GI4P-S85e;GRf^^mSg&86(`A*V@91MbB$Jk$!#ywyuM6d zt)jk6N(Y%@8GX;DNqn^Kt8*pB$4m6LwTJ>l--Z%5*sO*U>E}sApC*xNeNK~zPm;(- z46yJ<5=Dr?jU>`650TMPBCfH-Etb|;BH?_A<%q#nw~0gvVpJ1}A+{8e*-4^#Q;DHA zqNzmE1ro)GVb-LXL@8o?Gl}807Ln6gqQmJDciPy~C6X_c*nt>fiOnU-5!uZp?zSz6 z+>0c-ogp#Grko*>a_4qK#-Rk<>$?7%|zJoGnp`7=N}zmaRqPBujK?Bk`n-Z6lG~Q(^~ViY1;SQI5zy zM`EgNLF8U0(JfIT+omK+r1X*~Lzs1GD-m zh*6hFd}>P(nKw!_zf@v{jkr`IDOI8vvC^7!l_*7w?<%p%)*^CllIYM)VvUXMCXqZq zVh3WaC3cr6M`U-GSZ7-hxi?F6>mgBWQ+i0Gq)C(^)?1fkiI{;Bvy&w@*g-@AqHj-$ zO*X5iMEWff(U(bVwmz3h#1E3lM|@}Dy(EedgL_GAu{=b^V2QZPCAL}GhDvm}O5%Wx zy-FhaHi;dGgO=Dwq8yRkN8+$;LF5jT=ytV4nN7J`BIS08GQ>~Tn0K{81X$rNMG)cy>XDaDK*EYn*1gUJcVbhuTfjrQkOndFCMc3={Je%_u zOlR%SFq!!AGWnQ`v_H4Y6k!J6F4IN(gUNVICT_UQrP`n2G6@r8mSehUf9{Ye!Hl{? zribg{7#vk+MhdRk|xR&%Y^r`CU@ylEk%sKOQN@}MdVD9=rBU!N*g;uB6+gJ z4n!YI94S$b$Q~(ijcq~XJ}%MiZi&7&6OFUq+9+pU-E)hLeVvO|}D-r*kL_Q*5;g3iZAqGDpG1l@B8P7|^jguH>Y2zdk zW=JeYjJLXvN|Yc*Jt{H5mLf7=kZ3+$Vxo;0FOf7;q8KsRnmi^^iWvWxM3${ZbyHg&XE{DMPiPvMI^m0(cx){xii+B73UDeA|LZenX<$GZJ|=XeCb;*{lMeN3VNk&jqn;W-lNZ%GW!ktno0M0}pa@@WzuSl#IoMTk+;C6?M! zM8*P%=FdrdWFwxFNLVOQj96|>o|h;=jDKF@Q(KG3d|RT!42cysc7{Y!zQhj1N=tk} zq7;$+g2XD@g2;JCqT5V~H8y3YMDikuGQ?Wz@}fjJV)ly?>+B#Rw?LxrEQw;9HA^C8 zu|)Js66>wcOA;~fO5`IpSoq5l1&F~fOKh?{MEVkmxK|`LTiPoU@$X42M|@{>XG;_z zM$MMkVoMPjg%ZtQmDpw@UX@6AU!oYX!94ZX25`k@TTN z+3ON}t;<}AQpD`J68r5SB4?>Y-!~)<*sM1sl9x$D&yzT4edbA&Bk~c4E&NT1+>ay% zzbR2>d5DycCF15w{A6kKC1RFKEJqx(x^GDoAV$3<@rx}*q<oEnlWals%mGSLMx zb))R+0-175KIVidi&!j^yIN-OVwt!oTYyPfBNO+oO#LVu_^wRM7c$E+4Wg{x5}5+b zs3kI|MAxzEYl&%YA%;a*(fu7xy*S{ z_AVx7lT5=;WI9IKZJ)>#U{+x|McK)p%A|iIGv-rWES+t|r(8XoC0Z9rTx6q*xOxzq z5nZh13Wt}6j6Z~ZaqsRa`sEiE0MUNJF?^H6eYO}8b5Nq;Hxi?5=rw~6j6bgXFY$A$cdDg_k+ZIJBCP(l1M!uk!N!b zNR%UDf0S5g{eP6mjg}}xApl2~j*4@ndtRw0&HgToT( zF%n}AOBC7)M0^d2)<+~hu+c{(iV&L-ORZ&@L`F@CtTKs@Yy%>pmPF^H63cDkQHc`7 ze#EEN@h6GQ+7dH=+`sjzsFu z5^HVF&l2T`*k2^pS^r-oa*vlNL=;<%UnNrNN(}#1V!bU!#MF~$SRt{&hE_-vAXXtZ zS%cps(oc{W^P9wGTY-o_QKI$l65rYA-zAC=n-N>GTUOI{#8r#U&Z?$&CfOSlCY+?| z&f$u8*u-#&62yMQF6$T}ky&42Mufy}+l@$ym*^cSvDc@3i#4brk$#%Qm>LolwgM5~NTPL3iQjE>O^G7JW{HUKXlqqVKZTmnSSG8M zOk}ie#3VG4>0DbTI@%`HmMOvP$5fBD^JDchtTEB{G^`PAdtl9IyW}{rRWIfh+e@%cwEYZ^kG89i7wbmb>#$z5Mbs5fh_>tDiP5$I#zkArdg4jZHW1d2 zws&ECwADL7Y!Gd?!IPtH89XK0PCijQHQGkPhSByJJT2Oq#)*xh?S9xe+P;KMvPmi{?^~L7e0eD8VZG|ng?szdl>xM10?gnBjts9=Hb;Gl??vusVS~omf z>xON#?o-5bv~HNFb)PD>)w*Fjty{F*MD2K7L+yA6t-PU3N?V!bnDeyu(_~`W$&5Np zrlVGmDZn&uB-2UjZzPl6UZz+^Z#J4V=8EVbF}|_HMYa}Egy_&jqKl1fB9U>f#16!z zme{n~b>UrYBIssYKzHldOz2@#K(g%yJ*~^>!eurM^swtwAf{2Ah+piKkzr ziO06p#8a(*Tlt$T4-Bvx?Sz{x4W!v(Fwp9@7jChkV2~{ZgRMaa;Z_>~hS&;_ZcWY= zhT3Rwo2>=ItmS#a?KTz+w+-M9OH2~(w29y@+X6;d$Bx2Cn*#2(-QXVUa=tLirU{mk ztch2guZiDhJv&Ln^pu#_Nn*4eLlhuVFOYb^=3Ky9FJrBpCB|6)&JyvxBnlA$>z^!9 z6cou4W35I{iHysYF}$b5I9rTJ=q=IkGKujv^fHMO#45xDYtTy~^9qSEy(A{u3PjSC z60I+nm~5jjmncPSMr2vb-V!-iNo4hwc+xf?lKV(>zCvP(O}s*)9I+oU)jD1&k$bho zj4LIwZ8sw28j0RlNtjK$N+RZ3i3-Ft>)A)505PwR#B+8Gk=|D#^=gS3Hs@-I_q?+ZS-{#rHIXldDb#TBIgE)tQ3j)wgHiRqeSQa5_vYUzeG7=KVqSE zyj~(VRbs~V68W|pk#dtn?;9i**|ZxZVg^W5AQoHC8zl-5^KO(_V#g5aH%p|ZN)+0h zREhXBiP)PYKCu2bNfaRp5lgMc0Evu&62k{bd}NCe3Aaczyjfzo4ZT^S1hES7sWnKG z$Q&dwCQV|6tw1CVmS{atVx^59C{c>oj96tYZ;{BkRU+#ai8ZzXkvv4A^B{?}HgS+d zIbuIzopl^6k((|tW3WWA?M9>wmFRt|#Cn@{t3=Fg5*3II)^mtN0bc! zHCXDfxYY2!(o zXc0weAr+!1?PxE=dtUGH{*Ghb=MUebPxD;9_dU#9&3&4QK8+CUfiMOw1k}zT$a^A8 zK!7L0D1m+gQy_Z^A;k+J?i9ig=p$h0ji7lNVH#piBPKs1|x5TN&-dR2)|*OfZJIFJ0FA<$oD}IJcq#Hi|`L@d=Z)n z)FP~=V**w`d@k|#NAdJSp=W|>A~FFeqGwSUnc&1(lwKljM3|XC=p0IPAWHB#T$lw~ z&f&spK?w5x2y77Gk1$H0p8yBQ1|X!IM~DkR;DSB^hQSD$fe73X6Ns=xV2S`Qs0ShB zT|meTLg0rn0@fi2X6F$EAoV-~B@|(W02Pda5h@831tSQ({$ zi$TbYLQsJ*0@jxi%q}6QLh2<1N-V+(0d+8nMyMoE6pgS0mI=6BL9mNK(1iRL1i?52 zj>`zU!R9hTGl5zHTEG&E;C~gtGZsMystCwjLlC`!pafqnvJAbSlVB>^Gs8p1y4BVd?_pm`m^9Ad5`ED@L@a1hkv z5%Q7{GUE{}V2pruGJ;tGf)%7DAW&`~tPrpPqeO&C0!4`kM_`$N8z9&vA=p8F5`tg~ z0!K2!QLsryXeLlgzyVlpAo!;uc-}y8gen3uX$Yc#;0*47&`Y3=fGbc_5Ter&f>RLO zp@o2227-Jl!bu27MHnT}Prwso(-2ZJ5#rJiPD397!) znB^e=q~;+|?jx)aNCl&Ogh~QM`3UK-Ou(%O!L9%y6Y>iX1d9JJd|$`LXjAe6%x0qaKy zW)Bf6AoU>vr2=7vKouDMhfqnN=s$!SSSH|BiC|ZbPz(9x2!d4z9FGv5g3Tj@W&*VY z>Vc&K!M_^8vjU+JstCx`Ac$5XG=Y01LN9?f0xy7Cg%JH1A-D>m1zHHG)gs7OBfNru zYJ^b&{RG-Twgw^P2|`>ALOb*kFno%j`52)SVjd$b5tt(I2Gna2^6C&WYZ1C(jDU4L zg4q*<9!PzHKxsf&AO2w3+Zn7u_1fYi4LlwO1t0#q>SMyMoE)Qunv%LLr|5bWL|h(i851i|+R z96bo@z@`VGnLsT831I0(@c)3|*^96NstCw@L=f#mkOKEUgkAz|1U3ToJwkLpLhyS8 zS!f}k_6b4$1HvW<_<%4>UWWR4+Nz!(ARDFm}|1S?1#N1%L1SRr5oMiU5?1d1jQj=(Yjw;u?0lL&T@KZzjt z6Mp3v5VaK^ci`U}3Gi!u)^t3akiu90-}L2<0$Fz?u`mj18dzQrQqFTnH-!s=$aHp^`umJ3RJSf5W)(9J}?qMs3cG%fbap9 z3AhO(*a;%^L%tw_pa=p772z}3Q1RXvfHD$;z#@e41sq6xg(?z5z%7h14DKYpK|P5P zpo(COf)|M~Xdy8U5~3Ir5I|xQI!R1{tQf|32qW3c3TicA%6>kpb`Ry z0>V15Q9x)WP)k4pShgbgD8{QLJAdG|p^kIOZ8h%?-1;4EbF)9d41f~cmgZg%a zJavT3?aU@-D&)Ow{@;HL2UR-1s@${MQT8F;cKs>lH`n$@-f*`}pi_u{wrnT+jc#o9 zBXhNfdw7J{`N!aM;S^3+D4=p*E4 zBjAuHfl2}vItV!Ase|BVfWWAWfJ2_T2!e(P*}(X@)>CN60Zl zz#&fpl>{vIBH)ncUIe!T2#os>aL98Xg5W`fasoKyxgVjKfb)I?9P%XKe+Yr!907+s z%@JfQ5Sj?!kmmt}UIKmx5OBzoK(r--)IkIs@;r#3W`)pA0EaveA&e4;JcNKlo&-{? z5mYP?aLCgF|Ab$MJ`(YuXo-;kF(eXUkVF!wTVW(aJc%1HMgl;~8W*D2;zBvrxKJug zBjD!3$Oa=FvPopXGKowuKa6n`@=4qRx+54_U_&As$}qtHC@#criwoTW2U`T0V+c(I za)8?op_hQ49YQYD6Nq*|kg`X}2QPaBwc`lg1PVdoD8eX#$fF2F&`BW05kch`LJ5Q& zLojqg7$#5#iVg@%1d<&P9>O4jJZA*G;|S#te;mQu1!0~*1!y@UP+Spm91*Hu8iB4F zjGQoPAe+QvSSC>m=FS*TAfLojpmV{f0~-?cP)4EwSX?n0!GXjxs3Oq>+-?}p!JWhl zs3*}3RCkOP@FMXNT1dPCi4z#D5I~|0I!U|+*^?OU5JsW{`bczwq6bD7#E^IcgCyR9 zx+g|A#FKajVl8*Wq>|`^X$+|J#sjuEjR*VzvQHzp`5-W!LFfnbGYEpd2;~Gm z1DzK_GXZBWgh41H;O~dP?~U*k9J~=^<7s7zS=1gkA!EJ_sXFPaygnf|M`97Nk$wnM&`BUA072y}!Vd^Li(nXtFicBI2;M<#AQ6he4gn-MppyhA$cABXK^TcO&_{wB6vHuiAch1l43gjj^#}}p zh$pcY#z+W&)~qN0EcQOb#{*4|W~UT|#Ik;Cu-| z0?G*Z$0G1YBWwVNXat!n2u%c}fI9}Emw;ak!bYe^ppyaWWei#HA|VGYBsPIWEXHOC zAR!N(B({L;6$}LkBe50wNGO709EK9akWhv}65BxiDuxQglh_VpBve7`8U{Y|lTe3g z5*lE19b*S%lh_H%Bs9T19%C2elh_S(3FKIl$+0G2aV;n#;D3W0Ya)UUI3$u|1#+we z^ng2w94i68Bm@JfN5FvwYBGiqc#$xM77`{PaRb8?0!WxaCyBiv3mE$#3tC|dY(4>KEi zc27rjyM;X&Gq9%}m}ejeW+9XlI0|%`2+ahXGZ7r1jDUYO0{=|}M{u}_Aafg`iGVY3 z-$Ljm;CBnb73v8@-$9VdLU0GKECjW?2;Bruf?D^D+hs+kC2mt5CGEzDhXKJ zLkNQGdkAg?2#mQ1!C;(}hr3jS&5OPWpQem1vB>{^v zgmlO*LvSlcV0?g(3FZ$F1Ro)k6SxI*4-uLPI6p+lhB5;F6$t$QA>09n{}5y<5t<0( z0Czb;F9E-Dgj}d65M6~J^#~y!ydEK_RU>p0CYKU;8RHY=llTmDEf@n}Lt+rhNPGd7ml$8cfy5A0kr)Q< zR~X;Gox}*#lNbeRE5;ajkr;;-5)&ZNhA{~NB&MK~#CMQ=jqwA*Nc@C864RjAjxhr< zBxYfd#2l!1V9Y~2i3J!Vu?Sk77)y{!Vi~4M`~sscjNgz=;twp7SON1lc=&=ncs|PC z;Q9CmbZ-%wd+K^tqJ`t5vUf45&*6jb}VmI6Psk_F$JI2 zgfIk|YV79)0>&D-<1jts;6i?(qkc7q1SDl=+z9wC~?PCP?=tq z`ZrDqJmZt!Jim0xrMIW_tq7~i!PH2+n1c0M1RYleOW8kZ@upUgVz$-I8Gz;FIdSM;cSHX|&d>9rZl)1NnwmCg68y!O@A zmb-gajjb)+_MdOTgDLwy`ljt}Wf2tz5=)b4>haUodudo@?_C`7#1}HRP}Q9)@>#_n zsbzB5Z@Vb;DDoMzbbz1RM!9<<)B>johP_$?pN8)@80&ZxSvM!{II-<%_SS!Rp@~`0 zH05FchYxvrKMd~u;p*F|o#aH<>ilVq!q1>zPdsc~b}rv}pP3YHH!;faeML{@>61p= z9Y((gI7_XQ~Yg4M8gB4XS&q;KRLAV z%==5-^$rdG^}c%3#H`Iy--TOtuXZcm-uYQXhNhk{ZM}$I>P^4y!b0O#3m7Cn-~ZoWr96N|W{|j9Bh&x0AU%=eK*Stmr_|!xkA;7tsV7QXkC$hc`0p-{@DJtL69@NXc~Eb8?0UeIuvW5=Y4dXN zp1K-~8YyY>0g(tnW-AI@7czi1jN-*NEfA-u4N_3ZUGvgx$?)o564 zxr3K+jDHrZ%kP-|@8-~kQhTd>{k(!*n{u1iiNDjjxDmBuO zGe7iJOv4rfC!w{0Q$Neb8BYqEvQkFyGAGuXzPfyGuJ`%_%lG`(MbEqC3-W)zx5E76 zG@r?F--f^6jhXjb=4T$*q&&dDsjjE%mCqY~9Z$r+W z>tPO-nmjd{QTJco{?0sRf5@i2b>!`fz7IncKh!Swj1<;HQq>y9G&UrB8T}#hSL~6^ z{Pc44Gfwm2W#=xu=!*5&9(|6rpr%FtS(;P);5-v>rkLrlAFQlorfwtb^&0z(XrAz2V`8@5rj7#XG z*WI+7yK#&C+f}_r$H+o!GglGY?fWRyM7?j5kA0YgZ=XG@wPK=`zd!4s<`BczCkE)W0wgFpvy)P|a+_`eh{wwLJ-(`Af;mpYG zbqD0mIX>r`u&1UEyset0maad;w|Ay)Hb2-)tDf(9VTHp4UXaFmt8{zyE8X>3g7;a< zXAFGXW40jNcIYG5t&ctx&R=Q*7JBlhrk8p59=Uih$8LS_-&rX){bScP*2J-=PpWrj zAEc+Lw~@Bq!CKpv?f0rhwRJmg-F4A;6!#c}+v=t(g(m-TTMvYIyS!deNYe15o_M><4d8+{v8ZU^vLpTrHGS2#wW3Q} zTWT(xp6Z#{*e%<^vTbtLbE+)UMTs{BT+6h7H8#=Ki5B)=|)(zl=aW%jp4Ut;wAv!`nh5ARBFJTIj* zz1^F8=$Qo{Ra|N3ieI^wc*RI%=(nWYf=@j>!c7|a5iK~#fc4CkC2UI$_^atj9exp@ z9Z;2OIF{EFVaGYD>gM(Dz^K~?Lw=jmw4FcCzpOt$qB5PYxJ{=yRZdA+M>Bd|SGMIX zntBSf^*Xb5zCDzYa{b!TAAC>rUM0x)^h{pU9xmfC2F3$9kLc?*JvCbDxIo=h=H4Imr})ZzveRW&Odi?r?HEh3lS~@rDwF2&Gw+GD8ezFK^%QCA@x9jc&SUXa*3-_O^WHgI^I!Oq<` z++L5j)g-3t;gAQ`(+a9#_|^WQ+c{ap;HL-O53%D%({9MDV&8K6I@RfuytDH*pS?K; zSr)B4npRP40v)SPohkTp>LY|?3QlaCk}aUAr%YS#w{pG7=*M{=U`w ziKUMPAHQR4R7qrdLE7lb){f%+jUL(V#_JEa4ze7H)7fyQ*!*@`{p+-QGOMrn?fNiq zg{Gb=ZN0{k;tSG#hrd{d&VR6)ef_cH3U}Ldp{$e4`LXH8?(c>x^Y6xK8EvJeJb304 zz*_d_&y8e1f%>U_Gwt*r2a2P&SK~Miv!Gc=ZL`UF#WS6Ia+KS}41^u)lunlSt-nG4 zTIBG|uIt7l-SIlUJxwjLOJ|+$4sPbY_IE>o`Obw`%vYj}3p-}gCTZ%av%&!_3jTwv z3EW5K-;Pgv$K{%q*%6B#olJ;6 zBDApoP}|^d<-@GYTvru%7O&H+yMy+yC!QMx-+X$E{>;!-_KL5BY(RsIN0pLN(ja?a6|?e#IKLmIl} z8r0+EZJ}L(fgGzc9e=V0y%%~XEo53Dw!VWGC!Vn0&5hHxw*n-)nhYF|>DljA=HK@< zzIJin87W29b{JUMe&B<)krQY31qO>t3k~y+r9N!+Watsxr545;^L3A(Ry|F<-L&OTQWf8{QTy{0 zHOtNo2E*q2PlrF*mClLtS6I*0!M?lduYZlaa9yWC_Q4a=5lb&Z8#jKtJ!()IDeksv zc4kMD?8B$Q=e9q3VC=$GwMKC83*Eg>QoAbxH_BPOSWi<=i?*K85trwDx_>0@-a41+ zc<9$%1&$jRB1@J}y*r)|CY;$hQ1hAMNd2{ndYftFN5c@;^GF5L+5S?-zy}E#V?o=^ z@y!oBzhgbo3(wLM@qPSW9+^70WL+$Ls!f=^<-FA5L-RZ8#ow>3Jv`#RLGoeYfQ90| z(e(m%2cECk|6WwKT1xy+Wc!rU+Xb3>I<)l~WuNUfi%p4omGgY-%z$yui>9%@toMtu za`)}mC5vQb3;LRR+<0+_N*|lWUs&w^P1IEESJ193snY^&^ycmIX;%@w)I-uT)b%dJ~Vi&)=xnkvxzF|4>g41(YOm~nrg&3{d(eYmS_ z@B!7daNFw3I~OaH-}e3rA3QO0`5lKsV0*ut5KhWrz1{D=wPX(dnbTkTIB;_OgYQ*N zoFT=d$`up${#$))K1aYdU&?WViot|b*kD(l(&)nBd&<<|J7NJ04co7? zhAC+&Cj{5N*zOg6wtvt1RGiym76gvX6caNe+J%KbRjs|3Q~I%RS001l*Px6menGRz zYu;u>Yb!Tzsff&Buby?Si>6$8rT(6Jkdo)bbiRh(F@C#M?|k}`s}6U&ar_St`%1&_ zhmLz%n=<~*@ocoLxL57;;{~T?vwp3&2iuuygF9VHmt|gm=(M0yp6!)p+-lvuq4h+8 zdij8VWoNtJ#DPefd&Pvdo#Ot-YZzoFUp@2ooRf9nSgXdp)FK@+FhASfvRBIxSS1do z*fLhlQ(d$RCUXwPI(!TAX%)0v>DV4S;_}Jz!TLxXM#OsAm!$6Za=W!3DCMWKc=Sg( z>y6bT13jhU@bORCVH>@!+D^p3P8IoKEcxv77Hx++y^>tdEsY0ljTt-IdQZM-rQO1q z(bikMcUFAm+i?d!dyWjw)9c_{}Qd zUyX)YeEd%vwj}TG5u+s+6LB;W>y7PEy~!Orf8z%u+PzsS zWeuEKalGzhEB9Qkf?~A9%5%4CU`^Y!gf0iOFV!UOYYdlyMA6UvS##g>iky39lgGMZ z+voCeP!sEY*8IUgX)JE^Rm5zT^2}{)`Crggz9~(oNW+1pKwoG2)t4z}XG+<)jN17G zm|R9<+0tG)7ZrQbHR{{U&B5C~ntJB6^%&Pb`xwyuzBRSuz<<$oyIZvKlMSwl9}*-IRb+O+!hh^m=WwCo*6-K31ObVQP83wG!w|7 zAUMD@0smzL3l;=N$Yw#1`Gvs9ir@_9tO&gX$_cmv9UDUQZ+!LNg^gm2m+{I7sQtlP z@U!DBPJ#nF!YF|z0-nIlfsnF-;KzY*8tMrc{zZ`DMDPMHPJ|@_-2{9Hyx77%GJP5%M&x0UHk1$Ul z1hjY&nhE6aB80&-0e=Pr3qFJh$mT_zlgmj1zL2%Y@mOoCuks z2)AI2Kr;a|F@$VL6+`gnLRcYi2aMJs$gDvqT8EGW%LIA}*oh3Ak-2l1eWy(qXazHBNRauffQZ@(G3VC;JyLDkPo4aKp9Xa5tax9OCmgk76N(v z2=Y=0+x&F+^=EJ(-)|<+L|_oOS0ngKA^5FE_zLv|WTX+K z=n;m&iyonuKsSLAkYGTF-iQ#%fVIY0;j$9eQjWt2#!GRhPyj1x(b zMKRlk@`Dx9wxJlxp{x*@W(8vvlqDiXDk!t8@QX;^CKS8vDD$jPupPyEGYW?)$|5Tq zRz;!6qtp^vW(8I?lu9C=YAC;1p_+)>78Fr+loeJup^hS`fYL_fA1erHpfnQ+*1!X$ zgBA^PZnh$*Fyc+<*&v(|Zz7|J;zu6j8KM3#IXMKRjvz3D*Aa4Zln}ZJuz-Xuf|@cy zq%8s)bP^aPpkjx>0bzCsDccZ+32=d;J%XVMLb5#qHw+S3BA|B^ffwSBBIIpHm?yvw zTE`HqRS|NIAqc=U0g4)eg#!W=vK!*4 zBQz6;)JKqjP6GZr5X#9K8-UIcL1rgHoB@Iq*bwL?Q0s`W5m=lMqBRjboe*T9ih$ZK z1X1!wbQ8EcBa9MgBOnh{7lf4E2*EB03eZBpa1RA9qPkK{aaJh66=7))-lE?XZ=npb zZU}i=2yt!*D$qy3S{p&r9YGah+z}``2vY>qLHz_mC4tNn2s>bmfSWFY*+~RVNIi)l zsE6RJjj$U6b|5qp=-+{$1+qI4{PhuP$t`q%MF&B~0KroSK@X}3^b!!&MKAz&T?!c> zswZItvIZ2Z5Mwr)E5Q=5IlJyCXK{YeE5++-T<`Z;Z!i2))ps^PZsC$>3`IBeYjoL* zjLxfJaa&nfpWC*M4}Z0NV4S<8A{*nL7B<95v$rv!UH5FD<&1l5j=LXSvLH1IXBD3} znm1jqU2AL|;xr;~_k}l$Wd73KM;S+*#Kgz9MfWMIu-jai^jlTTRBWg76f-oO2$A z2NQ?p`h{Ayvg)nVxPGo*l4bl%q3Y3NFT<~GpU;}z^I){Wuv4w=7){~5wCfgHMX)|I zxRw$dRM9joG%6Gl(UBisCkt-Kl7#Qp#!b`sR{LC%t z?7POWGpnbo+pwFXuQ`7;Wxr3z)eu>mTYQ-!jx-DJr(IalC3&BglPi0#hvw9ieT=_P z%9N8pXq-loC8u6Bz@ zdOBYY9`Rh+^QQE%sQArI@!hT(CqwqI@4fIZ#r%Q&^qZJp4Y|{orfC*FNV~AW`=FN4 z+_8qWb4Grz<(W4Wj^}()V0yXew<&%{&i8va=4;Y=?r!*|G}G0*C-#!`#KI;qpT=x3 z+!v_Bf8Q{d9WqTRf+1E>{|#|G3x!RW3w5$mrMNV;G-Tgh+;Xi;@U4lk1bz5br`HpL zKNBBa`(75bZBb+X$;`s^#PFX!JEI*d-!;?!zfT0EZD)Jq*{*NNK95#zdA1gq2l@<+ z9=li(@^Hau?0m>M9!4%pb#Ari{}of8@XBuLX*4_>GxhlCsfu02$Ibu6cgG0L;iYOb ztjEx8?I)cSH}t6WuK2F@%K7g`a+lWKDWaVAxNSQew(s_LtFt%3RiS_M?ztqxn^@GIlCqQ{*`@LLA9>yoXQEQ<5?F~zgd=OAo8GifBc%UFe*88H~pYneVDYvS>o~S%nX~c4^zMz4cygOmP`1Tv0b4J=c&Au7# zj5;N*u|3Yw?*iEE!+I}1e007z!S}PqeZBCt8g7=$I~3+W{Jioc$8%$Zsr>t&F;5?A zihNb-H0JnJ{a1W{P2`gw_Lmcu{y9~wf3=18$!3~*cC_`*I5W($l&>^WX5=~*4;FY> zqPp%B_iLiOnqY`*Eh$OB^`% zV?EJZW_4V#&!uK-K`p5_YMmH$>SeN8_Pur7 z8u$rsUgAl|VoX@8eHxO(>N2D^81eNTxqswnrbcRZxr=pZ&_v9`$fVZ{wzo4@b=d{I z*+Ns#fwrE}q~K7lX->iFK(Vjx&AQe{B;NTryQ#H_Ccn#jVkpe!&K>q9+<1YyM87)p zBkN%UkvFUdjz2nTP-#Et>LPMPrwKgGv0jp*$J{E4yW`6Kjh=_AG z%32+0y6{l0srL1WqL{8;AI(E$%*;j+lJfEUCXaV|dbF7vfBtfeW<1Q1wqBqpQ`ofR zy}-4cCCQGB4{D?Jc(*!@D+zk?WUjYOjAm>;bc?Hb?Pcm|uM6(FFAhEmsf!a zui*cl_-8frP342+meaCfIavo%8i$OwiOA5@bEd85U3>TYl$GR7X4BEuIghJK?_Sei z?JPH5tIOs&;<5Cpwl3?{cH?)f)R)^T%y|b}&))jwKHs%g(=RzKjj76dZo@@rBlS8d zX)gSJLv)#{wr}67zS$6blkKczov{zcT=1{x)cK0D!nGOWmUNLjq}iQC-&kH7 z3fQHz^RQ^>;rDF*G2~u*h9aR=@8j0>KBd-n8Pi(6+HvyOZ@B<@Yx_ zWr{2&YLw&zey{4Eab#p0A zJ$KrAaz-s9M!f62gYqtB2>5?;JLIkuzw@uv7qgF_|9%u`{%Nx6#4A1ZyVUkGqI zUWyZ#*=N$XXkBL<^3^%Y_M*Nw$REOboFYD#;`^#4IwEV{9O+;W>^#bFruBH*_I_i{ zQ*V00-f{i*T{aoNaFyQs`^%FjCq5ltv#+lsA%ZU?)@9p!v5*OxdM9b?>90QQlo_I5 z-ZI+1VX7qm9LMZd>O<$f{Hm^=bnwT8vO0K8z=O^;)Q^|xx4FbcMycLBYkb_2XN$dc z{CwQ-o9~aHpVSk1J>%H;=hnM0+qi+ZPXWh&y$}S z)X6n!v$MLk@_E?!5D)!Dv^yK`zH>~BY7OV9cElg+AJ5NCn)Ecf?h z4mG+JGH>8gYQ4^Q`2B47ILn`^j$a35v#okJ`nL##O9Z6}Zf1>5IKcYvf^(Sut{w?x zR;?LV>m~XO_473KPSe)ArZ99}bG>-o*S#ZjzmtB+2yeVxe^Ft=*_UC!=OB~!u zul9gX`M8TgmiGIJe?os=$$BeteIFB)OHVLYYJ9~Ydim|2=4;3O7FlZ-bY$rig=y+} z(biK;VqA0o@-B^%mpiT;n4aq!b4}%AZ2RxOmcJUuMrsqfEY0Fe6OIT|rFD3JWn2owtUI z2h*q8wPz!&`W#}vnV1HvcgI*SPo`; zCH;K-$i$Oh6Dxc-xF1t@GHJKp_gT~Q#?!N*Opf8_;%aM7&07~-xIsjz4i(; z%})}0c>St{Tc7@W1qYTNHtD_MH}%^W@`R2LJRKM)=lA(sk#tvsLxozGzV-a;_m{m2 zH&0zSKc4oU=IouLt(V=>?!3C~-omGI3^NNlC-<00W*7|AHncvT@cC44Z_TPxcu-*7 zp>gW<^@<~{&Ubb1hcIy79N0Tw@j&~le%q1nk+4GQ=~32v8QOLC(YW30y_kXE?$K`w zY+d31TouIb?<=IA4cbwC%=;c?ms;pv#xlO>v~rAUe#UCXFX5$-tN!O1x~y0i$_&`OITc0=;+4rIo5yhWr*1e>bITL>D^s>>!jMn z*{<^&k7V9<^E^sj@v?v-8?5(!ww*^Ib?U?w1-Cwj9vz84Rh;+cN?d1yJl;He0k5XYC32*cc3Gc(?0Sj*2+i3GqOIq0*UD$YrdoH@urGT^ z{2LrBC+3W-A48rMVT7ezr*W;*%97;aM-u4b)|8Mbmh~HFhQ@DLw?Ker4 z9I!i#_1qXUj@7+GHyGoL~0Vd}ULb5WDR*CX7rld4y)Y|6cSox}g~Vz+!Fa2&yUist>kDrW-D z>h<53Phxm7p2E7t=BYHh&EmeN+k^|5E{c>NyvqEi(a-v0^Pi62Mu*v5CJ(cA#xEOA zq_6QG<(;Rg7eZU_s?%2ovken_E<8T>U`(~M|7IswkfkyksVg^e`cuKVbur+rE+!`OX;bjGEU zVe@O8zm?969qr&db3CJ)Qh04_i~Bd5V;}Ed8Pw`v36tM%g^3s)-dFL`0nf zQ9G=6&bc+-rSsCAeoec*u8j{4ioYxF6xOk+qLVW&AB)wjxpN^*P2ZN$xzGQGYQ2hu z&AT?`@4cH1ZCRBiKiN~JjA`mc($+gHwEd#TcwbhOaoyoP{M!_KLpe7;P1rr~)Ig?M z+48ld_2Bw~$vu~;Z6}H>&5V+?g2bI0Io3?`(4E@i*gfu|ZvkzjUR?|y%e-;Uk+pZc z54c$E`dJrn`SYVypDcgg>^<}>@w48h+GiZD2k)NRUFd1^S>|wx04@wdb=hEB8KDxoj-0_~-b%MfIvzeau_-KFSbl3iuaHmAHGdYh^#R zl5zRTCv`PRdM(DAmku{R^-_}*3-yQ{afV=ftT)YWZD#Q{VY23YxXk6ZlDp~hGS)Hn zr~L8Pd2F1g>GJQx^{btd?4$J~mEliSMDut1>5kF61X;|9-|LL`dg8Wge7u+iF#l8P^LWc}rIftc$AhV!*Y|xYXw)J!T%g(J&0=Et~ zZ`hS`Vn{lz`BBt^ZFYw1Q~5fJeoUvV9)7=VG=)M_FP65ReDycUuY5+G{LjKm{2F}r zDCBAjJm%NmZ|18s@ny%i7LM@X*V!EOR3|RM49lAETk-{6i!zJz2`9E0Tpz`cC#6C^ zsTVFNE%(W7P~Ce(f@wwDedca|2YrxT{+Youp6uG!CT?m?d_J+&)8G^ zr*^(g?`+b3SsF9`cZ2ssntE}x^|mH)wC6Hi%`IgSicI-6DfazpQ2&o!v4^1nn^gHU z?B29)++`u6xkyca`DEIJLvrv>y^f6jccawUQ|3zi;h-mkj;vNZUSYx3a&lwe!9=PQ{YJlIBD_kI z&oj=@)VoGo&*W5@=EwOz2BD5x<8JexZz-$}l-|a<>|e^$5#t3>VLV?L=~sW1pwb^X zo>lN;=xEu*v%GUJWPhe>tT~acc&=b8XgXlMFjm*SEL%LbWNR}UdI?wyZj104N~>1R zY?+|$dG$-$sw3dXic;p9sPp&7Jai7vZB$53_1iVtXXH2gD4|04#BZ8<@wD~I=7o-@ z4AJ3e&^E$GoR9O=-9J=hs_c>cvo@f1ilIy~sJNY~pXWQ5spz{aH0i)4KBphH z3*SXf4i_aFZG$ON@3KHzM$2oZbD86msquz{;JtgYJ|>SRc<*6+aE|Sgx0-%V$xt-? zw(I$&9|A80Dza^Aw{EO&boH|Pm+E&-Nbe9$y+qo2zk)uw8SFpsTP9W~p(HeaxyHUW zUA$N6eoYIX^sAZ8m$-EgzHRI%rMB92_tmMNzNzDw@KHP?)C)g0po3fX*ZO40JdX8} zml_s#b`>iWnp8Pu$@mUbeOb%&Sc>sb{-*n9b{iMnmR{WEQ-}M7*7H_(^1?Shd^osA zN+%)npo3`r$AzQJwBrlOwDo-4#7a5;F<)|fynOGN{H50$tWHNZ37?hJ>2&1X$(<>7 zd7azA@7}J|ad(kod577w#nM-v_X6^mzMZ$;xiYKo0AS{b^)mm-{NmmjQO;t$P?-5b z>PpZ(-fri@`XHs-q5*l%zpwZ{`k5qk@#H@3-Tv+Cpeicp4$5yBffj>NDhb0b|&hhO-k2oni4#a1wM-`IRs(^T@z<3Q4&mV`} zZJV*DA5`g2kYm_JQ|_efRork5V;JddBu8N>MhV?it#QD6p#I9p{NjF<@sY1oMN4NX zssee9DC(ppR~Ws=qp8&85Y!R-0($v(SKm>1;W(v zlDa8g^yN0+&RJ_RUCqZ&l|qE=sIG*+{tY45w4-12wN#y_~O!&zZ<{DE6Vhk z#Z7Obh|3`QO!9jY|Ipm8XOA{*NSVEd>dYAekCT<&rqzB*(5AX^f#B{fs2&pbTjr3H z@j@Q)p)>+9aMdCc7|$0`iB+!u!zFB`{)oKH0VRz)#@}G!Pn%I*9B&X55EV<<%%eM@z`(^lj>`t)94OD0)Q(zLi2 zXPxZJt&hX2yE_n^#JNnVkj)5HAN9FK5@fu`x-2G14*z^uj#Xo!5(qrsVtBjJUH3f^gZ6* zbSwIwrOEXuIwks`KT*-agNw=OSDj6;&~mLdQb;Pq+L>T0=^Wf$rIp@rN-A~C1R&E< zoH75463GQOtOGbeygXn$Bf@jS!dM(_zFUm==i@+yPeCUWjMPVU&zV1ce8XMt2jER; zup#wv#@s9X7_(LO+?(x1mUT5b$3}ixh5Or_#wQb)y~iV})T{Ae6E9xB;w+=AT%(Y~ zB|%Tzy}LyT4>R)7ki^==p%G5&Mdq=crs_@!Bs(r4{0m};<*Tyf4IwbQ2gLy56#(Oz zZBhN|{~KZGz5a$ga6iF7IMt;w@sXA}Q$hIQ8fO?ek4mtY2yp|4dU^`OnOHmSF`n8W zQrQ>5$CiDju$qutEP3pocxf%QMnwxd;!=O{j_h@k@U&B++}4_Xu8^^{!Juf%dJeAQ z1^ChB9%5$Y+AWMxyhuf;po@$?;xNSQev=)mt^&j>0>&GX&%yheBdoO?H$b^KWQR*j z!F}oyzWyuY&tHTTOmt7twX(WC2o{`bGd?oaI*Q4(*mSzYY)&PM zBS5R)_9|u#yi$QYY60;|fbnqM#g3k(hK+|*cp^L8eV?u1Q2~OD*{V=R42(=4AuOcOmFcXkBRiI=Cufpe7uwF>i1<1 zyY5G&Y8cr&YYSTl@Q^PKwO*p^%Qna(er{YFAn}poS+xRD3~HGd?iy%*LaRE34M4my zU_6S=#^NYc&L@$YjHoQl(yPX!J@}E&)NJIz?g^=x5c~b7`8@e3TR1Cma5z1UWkR$f zUAtVX$`8rGTAfEX<^1%?tN+A{>-)*0XPi?I-J67Z!F)~TdFsFrvUliIqV1f?!PiIgTB?kB^J6N3cum?jYKqE*(jJj83_^APaK=$<>@eM z=yN5{m#!_3X{~hu_^W7QK)fnoycsAexbDNJSjN4W`Ng9xeEJA7igQMU*ntDE;@1+LlP*HfI ztBlq4RHs9aMN{Ir26Vh0X#xztoVVRoI(zH=Qb%dJm0~dP(iHPk7y6A)Z z=gFDYusEPcB)bg*|F_t`NNdIJA0+A$<7AMSo-eg!;bwJc9wy(_(ElYLe9hcbE4DefmONnDk78$g-;A9z__r^oqd7rB!ht-V_ ze~NetcGr(D(-^Rs{H1Z#SgjaQZQXzSosfwJJ{NCf%sql6LJ1FDY`gXMmqinp$(L-8 zi>gn6c#Xh#Wj+J5E=@9Dd>S8-otw?_PC!U&*=u9(%J~^2*nJ>OA^aYDP%ck=!Tc4&A z{WxE>XXkNTf-l^Do2et+6;+T&$7+(9&U)5@3u5v53oU=~H{gJ!85ob&-48#Xr$*f? zPrl6&hp8{GP{#)`fm?9igqg7Eh*KXQ`YY{OnK#Zc^X<6$gR?;Dic|G+!6yLO}PRz62mPfTxZ^lFsBS{>i~0zL;>q#2(&wSxbR z+8e&DlJd_n2#S=H&t9Am^^9-g1a47i1;)ch!`v|9N7{ZZopgCBYndO>u^bAr+qqAn zwbTnp?Rsi^4hY7`dcYao{-oa`@Nw2kDl5pgqDRYDFU=wJY&z>W`MceFyqg?6{mdC_ zf0m3pZI`y`l&}$9unw?7HGz$+>wDb1m@wPUTEfjwd))IpoQxF*jDhH44hgacXl6LJ z4)%HZz%3tbz<4?uSZ$XShdAY$GZF*GrFFT}7e|4%n8Z^VBRYkw_BqVAI-8Zd&mhti z|DWFwEFM4jW&4S>DU}%h{!*|QxaBGWcxu{#FbPY92`C{ppvg$xYaI*h8(Un1CemoE z?4Jn;%^Hp*JW-Sls!F)!IMM)-zf1!14o<$&1G3)!rCVAt)V=82w?AfcmDGa z(j1%!pQ~|2+KN47VsGenc!?8{8UE)Ww%ed` znL?9Mcc;fKi1F17Bhl06)pE)UoXoh#`O=cEUuqfvxC;o!M)DhL-ilOJJf!;XX#R~4h| zGfVX5ag6wjfAe>vKYcOts(p1JK;RyrtI4SuFbI=EYF@_1ZRO*zRc2)jn&U~t(KeD9 z>7dLzTBC0|u9|<~JlSnz!reZ??D|Bs|JA3B>FT3HyE?=#c^d%S3xwHDQ^H6hFPh6z z;)I*o;^`7x|G0t3r*H1Ba~&e++1jwMQXj4je!r^q9IMVXaxhFZ+;QW1Zh4t^fUeH> z(l|u{a32tkpxvwOs3#GQP@)@;{lu85y0DrAeuScgT)m97X(G(k%FWAcW->xGi*O{9 zmjOR_iM`lQxT%VY15?I>|D^<2LhA>*VyMM?VASjYv&d4SK2h2U2s{LEL6EBK!IFwBg>PenJY!Sg!QPJ1h#@t0NES

^QmbY0hcz;w;ZX6+#Tmn_xI3XGkWVZeu>T)!LZKnd@VE_zS62e3E(&WTz z5nCm(-RNYl!92O1zIi=+H9dAqydObmXCXz35Dl{Y-RZF_p#O9b=j zi`T%0!e51iTY0dcap2vf^#VndLKU>BnU&t%_rBua9nb_24kl`Ei96esvGff-_tX{; z5LZZ*Wn+~(RD3+V&G`|%u3f`Cg}Y%!j|v_y_GX> zy!c2|O1Eh8hkhR)zY+>axQ1#%t2c45+fE-(^_TNq3!o+DfUr5``ZmkpXRQW)-phMk zD&*0dn-dOVeK`NwM6JD}?hJY_4V_T1QCB8Dv0ZX??)40N!2ui{Odb@bu&MQe5#UPN z{Qq1K7^Lect|X2*21k)lJpFHDo?a&8(VY9UO_5yJ+NFj-Qh(aJ%p9t%!&xU!)zJf! zt8%qhUJ*PNwy2(khCkB_bzy+O3;%<`AQPkVoh(!d?+-jJcQ!3LEn*p<2-{FcHIjGC zaIh^g4AqsZC^$gpSQl!`a<_WrstXA$2BGEh83=mH6dqA8*T4-Kkv|zmzdwQsP0bM_YB{=M>L6oB741erQNwz$ zxIb{wZt4G9^R(S#=CycCT#3vWFE0s>P?t;hNrub+TPqa+aYkL^<9(0)aSU-{1|Qoi z?C|n;F3$L3HQf(z@=UZoP96_4>S#bq`~e33VMFS|Twp1R8z`iQG2IO#Su3$j#Y-W# zMg|F5Yi6F-Q?BcGStlO4A^q-Oq$WeW-=dUQO5#cg|B_jM_MH_6I7D9t!re~$SPJci z7!+&g7y0^}C->L2b;?^^y{~#Zjhal}5myKN# z#~fRO0ZqR{M4cH_uL8AFnPaP>7;{w2IKsZ;f zOZvhQqd>azuMUTkWxJgU!K}k|*hz)8Xnudpb!SnSlGJzb!Ve(2xxgOG!rVJ_bMvuU zDK?Ok{*D4F&8->$UI)S_<(kc60;!a$KP@z|)p-l!4XJb)SX(a7fB%Xsi$UC#WxJ4K zEgf!ys4=~<0b=puWRvOXw#=DimWzry_O+S_b+0C_h^Arpr zxM+J%A?PRCbfy3jZvo+4rMsF{3l6bnXQyd1tx3GouPU=@_A3?Y)i~Ag^*s9+mq#(+ zIJB9~1}9&$qvnRS&W%s~v=sY)Gu<&bb`PKd-0lB!-~awYs-e)}S1cP%I6S{NwK^Nv z4)Y-`F+vzt@Xp(!jNkAVU!Dc#%^8JZ_>J;>oOTwj*+r9_E8V61LJ#4;g9W$T1b}z` z4}Nzm;>Wo2$MuzjQFAoQ6pmyes*U)XUVNwb4iUz{Y750*xkSH!{?cBjpg1R_nseWJ z{qC<^@q>;|An*SDa4FK-~VJMP$A6B1`GS2D9SkGbe_RJG^g$0R^9Ge4*HGCpo zQy2v-@+VUUx|PERsJrfqQI0dq6mV_60nD@{00v0i|n8 ze5h+{UzfFnMG)%WKl&Ed?AV#wmJ^SAEk#qfnwoL+955ckDs7#JTuHl&+;Pm@DzZI* z!23WK({p5Y7AZORn^#Y$%r&+hj)1B6nWRQb&lm`wIko7rTYs|QsjJi6QzoGk4=DlC z^z#l~mCgG>Aue@i7(pU%U=tqz;i#3Gm1|u`4Vvs0^|mcc{uR1Dzn|XYP0!T@w?smg z8jYEP0Ub122D{UrVH?(4s<@a7S)JgkSyKIr?wdY6E&%>qef>Ho-~%6fI&6BGJ6>v$iM*N=bR$J*syx*XvU2;@rVHnhfM3) zmhz_YJto75Cl~CXt&hc8V;my)kGFWbHu&xBNK7+?=w2$YQLfEyb$}+m1j3caXhUmH zj_E?Ynkcnm^emr8FoZGO@GqQE8qgy+J~ct`DviUaQ2xYUFIYY@?RU_%m|`_A{py63 zK0f~0Foy4cE(q)j2q(^~p?~zX?WQ|JKbcXRTJ^>B90YR%X8`E7J;H*+x-5=MBxsXm5Q zpo15JK+-uMT4s$V+=xEc>+9%{h?z+bJxV8&TjyXo#CzpEf51tIeumj51i&{yIPs*ZV;N^m|++y-l_}4=^G**RBn0lTdMj>xSCpf~b!J#0)JX;6kA3=y8$z0NhUS2z0wsthg3HGFFIEsOWFua}68Izb2a& zSx1zz{RZ^zn5Rt$R*qeM(Q`g7G=f>@QYWiZ49TcRL2mlRKHPWGrYULz0zU!a#*gb_ zO(O$h4Ex`DKbo>beUy`ZMe2ZAmVgS#o2x>FVU5l#0>6kuM z-8CW+;_s!~`~!fWfpDqWLV;DT4>yOzW2QKM!-n=$dyJfpYMhO(3w!&nL+$JEjXXUZ z(G+hw|NKn9t~e^uben>HpsE?EG9#9w4R8zm%YWQ|)juE;(+c#1>j_3v{p1BN6oeJy8r7)jgaxiyvAW ze*1OpQ2baWQoYZT`a`zU@F#v&aK>J-4T)prm(>3iDE|5V5&u(x{-?{V`Yjg%*ZwWI z{UZJRssCO!*ng4-lZ=OT%YLtMkGtx@`#kd}M3KRnvFWT@ZPY9te2sO;D0{=iYEqeY zijM*CYPb(TS1&glk1+A8tgIZbL~;0M(!6YQIfkoVHW0_B5fg}#^q;mtt%pYX8ILuW z!F{K?*ltMY?MK&BvelG+cXAxIvIBsY00+Y1%l&p$GFM+gN?Y)6zdXp(rJ_&(W#B9JXtT~F7_cN!&yL#J@nx?t_!rzVUzVy9ZMwrn!JR2*d4nc#B}8h5DiBxiBv{?}{# zDdsT#8Q?+!U3fN&xvNK;m@VBt`Tl*7&`!^MSDCJk93-XLWI)1-=Gna!S(Kpu#ZPx% zmd(Vhqzr0)!JN5Z$n_9~6iSLuslZL8P(WCo37J1#0tHJS-wiVgJ47o!e6~%#apCNZpH=f{eT9-2obMq0!gfj zt~2(6_uBlfe))vY=B%n<80(}=A@6T^F(>`rOr3@Lq9&Rpgg`FrXV$!N$PP6Y%1mGboXr;y#bDjVSzCC@t6AywtNUYVzlXo04|g4C9w*WYGQ}q zu6D2NV%PA|x`>Hq%h|MMRtApG4iu#v_;VzN^RQ`ZnL@GpvZ@+F?8d4V8OgkE0oxwN>P zX7=$XjtR0xf*i;X9CUN7x)ZqdyMqa#Q5%uuQ^1E98R)_^91Z#E5$>hWK0NirCD+8i zWnP$V%7eO)W|NV~Q{uDY^)d&MTccLDL;{YsDh5s_f|xAX3U5W%OmL{H?Jj{MAQT{M z!8kU{%%zmsUCqFS98LI*;*nGwGl&Zn3#*Tm&=QjvKJ0`YMqKGr^RWunbu=;(mXa7; zpFfx|sA=k2h#n;xSb9Z8OpaTIQ3as^KR}$*J*IRLd|w1gteGR8=fikX%4kZe^V?DH z9)0Gzm-SD>LUHU*0f{l5{xm>2+GAv(}?O(EblL!HX< ziBr5~Q#pPPLywpj@n*9XumX)dLwp6>M<4UQ?dQ~*1p94B9PSt?Exz!`myg-Nf#PCp zJ=W2b2!KBV;hu^60p%b(cHX)(Pie^T$jUhS)pcRNhPrxfHT{|mAD4MFwwp5JUM(kr|rE1f&b1d^l`I5B_8n{)%fpMY>bt=xl^3{US27u*c_@Ft72t@43jsY8-=&=pk6qEu+IQ|J9u%A;Qo|z)6pZdHcYlU3b3{69x7nl&r3Q3@3KYSjoF_0ps#G)pv z8to8Q1_Z_d!V@xhu!drYwiNhqC?~W^^942!HS+TJi)F8{9d?beW;2-Iokl~}C4)c9hFTp%3AKxzTouxnYa8sfJ>NM6>W_5GZBh0k_} zjwm+ruI=u8`N#!>&d)GWS&&LR$@CSe)%bgMnd=XZQ&Qry$?SJ5TG90 zloL!~KS2Sf=lK7H{~2NJw^>c`?i(Al{3dM0kNQ3&;MwICX@48deZ7196`U2G|0^?y zQ7>WRFOH4tTLwike;~uE8dn5^>86*HYdH*ZBp@*X5N^hYD>X|_Bl_`>Upc2FoaGkM zXPD#K38OumnV7ro1V$k7l_xS#2gm%%gN5DYamOZy{S`kZ7V_)0FTb=vf#?5R5Evm4 zW`Z1YPV=g6@lSsJO@B>c^~OSVImxEuOOgib*NTt9$}2iD{EV-I1d%<09+peM{5I$c zT_BP{6Y~o5qv9Y0I8Pw@|J>NNB&yWM5d2N<+3w?IGy(~cMMimL-+j=o!Yi`=m1)0O zfa(|1?{(Q?;TaZa#7R7N*C#vDisq^*v>EHl07^iG-F!^|uiR2dua88>9 z2-~lGl=X;i6}W7BHONXTSD81nm!Dz7i9NN)r`Td)X4Vn+N+;Ag%O`As;QnY9!UbEG z-oXCFap1_2EGv@}A9(126zEQ|)<;o(ahBn61(#+^R{?!^o(Rw964-Xi9}|h^+RoZt zBzzvFx?#_EHgBtHJzk7dp&ZmVeWLrBB(`DGH1G_BKLcR_XLRkzNtKBWvMyF9T(yc~ zw%Fg}#Z=w86U+Odr|je{wcpIjaAV^gW>UTWP=t6cu+Sk=je?${wx#N~I@e#l|MyUU zkpbbb15d`{&XZW^R^u8J1bIHS?_5cttPJo8U!c5aaU)5xv9Am^PW&B>JOy1Am+HI) znN;v#8D(Z9OnkqIlq)juu182z}?V1#%uWmY^qM;@{(R0&J^83Ycc01gi>eDCYo} z5(qC3I)um$sP`{aj&u93aY*~`KcmBw`;@rLVCF>Qa63|dh}UjiPH23 zu^A%+o@~MQ*e4krHbM>+E35wt{QmpX0^#pgl&n*NEjuyO*2gOh2p{c9IdQBB)}?3C zEDn?kR1S&@@u#eYIj1PD<_?U{E0!L)c^)6KGhMR`)g3QD4Zy-99ngKDele7UPnIeb zJl?>PyAp)-v_#TdFHHu$a!(7TDt0T?;ZmUtn{&7s5xLFw%y_XmU6q3PFwd%Mx7`Nz zOEvxfFEJPxJrMrbXNVENCr3tHw6o;RP;f;9>a#Ex|8NyLl`GovbF;Qd`^{ViKMdt<@`ZtyA|cdm8qcH6FRi1hy`Ja2ZwEq&F8o-tcn2 zPM-NMUjM@vN;s&Q`~sXD5bCGlJ|mn;-G($@Kudf9!Z$Alrj|*;tBDTvJcgq`=w~<( zo1S(RSeatH#y6cqC62QtttD4@kx(G{uP~hNn&Y>3V6+mvScx>6tm;4rz!?)W(5>2f z7zW9+oumrQKcinZZECjB`2U`Je;-7fnP#LOXH`~$#G>~+tFl2j^}=-Kymi$_nfs3F z^^#Nj_t%Cmf9szH1ZDxk(;qlPmZIV;1yXB+m+}vsk0=Tqg)hG_cYKgIn&|vgywkJ9 ze0}8YP;?~)`st$weOxSH1FuB`b513CSAJ66%Lss3fiQkd|3I>4-xg!vr2TK}4BJJH zI;nF~nXRkCOnue@n`cSVPbUO^=t$w($hCbE6i{mZWcZ8pfi_As2l|_*P3}8 zH#jxKU1LOZsP&a29bmcbD=_dFnret{U@qks^s#N$=y`p~IdrgZNShy@Lx-oF7@DVo zL82(6q(OIfGsoo2X%msGTYEm&w`=#@xR=y6LCj0)fW+)TI8SK4OFpj1v960D@b{m` zzH>oB1gCT@TkaZJxUpOe=6GSKO_=82aq{aYk_Vj%&)j=0&T66-(+N9~>V}B3!~b>v znUrz>;b?mSX3EPZ1rvGyIRQfI=wo-{CVo#;hHy!0-(i~@La9FZ5fM>)0_xcZ|At-Z z4Dr1VR;Xu)qx_P1b31wR-v7eyKRJPJrD`IBvwb7p!C)&Yzr6jv3x&4bg>VGuO1fbc zgqyofgI_?^+2=*3B!+G`F5ycWQ7mq0l6oej_u|K0AohMmH2~%U!Y^pdhb7fKscsug zS8b^IW|0RU&n@c@kq9Lce2DHxQ;5a} zojw5IZ$Oy&8u#rj%swU|24fImewSq<;W{&DeCM*EC!y=5AavO_p6Jofo_Y>psN)Cy z?VVwOMvmn}LdfJYJO6b`VrC1#-miP$bOs01Vl9fH0h^a!7KaO^;zS z7itGqEl;esYO(d-Pt~>04b{78Uaeb8`L`vULYq;*TKECsWFE8G*tV@wLTH}fx)fVvv-l+PEsrVyvd8&iL%Q)(hc3T*d5V3kWRuFZbX54;ZArM1XK}!t&{Z<%7EiefG%^d%$9w z(y%5OY{p0AT1>Ct{c`i7&PFa9qj^}Gy)!NJ3M7)!@v5RLcxz}_g94<K*&tcw>6SQQfk!VJIWmom)4J{TOzrl|_Zyxg`K61{F9h%5Z%!v~B1o%=n= zn$W$?=|n`31csJA^@}+vvE!Xz1qgN4Qi}+5X1WeYEDnTu!gJ9Bcrp4@ji$;Zmm<#& zRim`1nlC~KR+!GB+%STIoEtle()P{BXR6}qp+a51iWRG(Ew$2h2iyg@Q2mmYzgxfd?bFtx+KhF{V)m~1VH#b5y4Sz)zC`O3vkfATmT#x>M zS|gplA+3Uhl*TxO^7jKWB*-DHG!MMidB8-tc;f^BO95eqLOlr1Bc!H)7MFw$YM8|s zs_(2XY~R5eO1LW^yt9ZD(IGb>ZXyO^_O<%kFpjhG-X1aI{Rpy>L#Q2nTM};ot~Ahv z&;%J#H7HID3z;M7HXLi@E~$ES2E!y%Iwe%@ zUEL~|T2sHS#C4(l1i&&t*yp>pXwBwl7G2q3?is`986hv;#Oa6Q5qj4X)ikD3Jt(o| zY8yr#%^T3h5&|`s@yG@E^TE%LvyvjMCkgT3>cGvUvOu_->eH6y`mR>HC8iSTl~q%F zN`(&c4%F`6-iiWx1Zo$jtg~c11Z(;Re9+z`(d@Z|05Q+qpyCgJ$fZ^Hdzzmh&&s4yL%gc-Nr$JtTFjbDN9#lJ`*jcS+VQ$?5u#ag z|8_zDI+CFXgqIeYH67&7Oz=sunAGkE-cL5!8<>uJ7UM9BqS%_+DZ_kt#(M6i$5&3I zy6W6}0}DuQuPSdc{2oAaD;WtT&;|&s1av7!r6yV$IJ62(O__0+d*{9`8xJ0Wen$0~ zt^IO}xAcLrq}*50kgSEPA4}UCtGdoB4A?-$$ z5OjG@hYA=_r~qLotd5}ZJSBBWB0e94TQZh51wPkn{lR*t2abZgT*u6*%_Px{K_+S( zxF7`AXT!g|>eW(FS+5NIrx(yryimXbg(}cZ$wm74F)H&XSvCr&R?RSeZ``q7eQ=-_ z`=)}ur;K-~ln+YcmEpKzL~h4zq0kiLcvcQF=*e_>WSMKOm1LRs8=#5RfUw=>V~B$E znT8-cWK22zepvQ`1q4mSLZ8;SKEh0&Vm0l`4K2yxZ|P-vnX!w^iuA5zP!e9A@5s8n zc!)p;DHsBvCDehiWQj|xU!mW6{L3Jtf5VIYX;V{OYhR6JuPj;15$yu2A8ym8^iNCS zso%cL$}!-gRLS3H;O5hy+U@p7A#WhW0f9Aut`MkaJy$7obJtt;VJ2F+-}xt+MT;VX z{=TBuTwm7X^J2XBUkbB~mm30DNkp7DPpN=9>mL4AdUTsO?S8$_GAjUB6A0U9(i|s; zl8S+%KNs+yZ&&r*d&~L>x9MoYNOjc*6h^l*-S92GqF{k!HRxa*JZB#y{`_DL{mFd^ z@^Kqs=1Bxr!?b{~?L7Khl%FkC$O{fWX@C?tl9qFvt>puy`S`_U{P4I97kSxHK_- zu_mZ?dBsO6yd)&nU!ne9cKz&hai`{^1>K2FE>@fc_Ign?r=#X_=6CWCX|Dr-zXJoC zPwYbVE~6QDC>t0=^G8adob!zGSd;0&5`YooKZD>eAYR$ekORGgx?w|2&ouRg!+W)L zmSnm!^Eygd)Q_ovE15b#IAN9QGt7x`RZEESSnPk}@u|9gF_C zo30Vgo4;UH%mq^zS1Xx% ziPf_?iSY}j?}%L76$G-nDmh`jF!+Kz9&wYB1b-`)So7^Ybssc@7{sLNe&+YRl&u19 z>(K+cos5c@Lphs*b=hU%pwxW@I1lg^bUmyjqNu_@@~O0dnl8{qk$c*#)t z$_qq3J*TPH454~oc`Mx(s@Oc7luxbtCurp4fP*v#)v6r9$+y zI{d32`jx=^YGCLpRKj!F|8M&I{sBfnI1xXQf8P%&7qbCoIS)>A-NMoB+bw6ya}E(o z%bJ2Szl^ZOjj~}s|5Wthp(<$#{3frI#J^N7 zBcD$`&wZDdVfp&h10%#`Sn9}`^OY;GS1ZH@QvwAx2;EDBmA=DvFv~t;@uYht>EKr` zh9f(mB}{-W2)x#FKqW){P_c;JOd9jKU79?WjC+S_JM=oWUI#y~l2HpI@e(G<>yl?6 zAkpBoM+#?Qn>U6t{Kr-wXd<>G(HFKjmhfVBOqN&1EcY@a1*#E$W%*fF>@@J zIzq3*k+*hD#@}y<%^(Vzz_6G87{Z%vmxS(f>^S^wlBPB#E7EGvWmbI%*9!pK17T8j zP=$`!qmeK4IMf@F8RC=Dz`WKWNUPF(;dfsXWi8r5>PGmV<^kL!$bxU%Au}KoisVMD zXvWrHys}gFA&htc>;Q!ANvy%16oS;xj;GqP*lx-R?Uor%ieiKNIXasJ1{B zCr-?FIo1_0&lm9aKi{=J5$VPKxrPH>McEUOebwDTM9S6`ft zLKKm+D)2`Sl{Y`xUl@XahTBCoc!h!l!FzHtf+8xR%ZM9zh5KNC4;AWa`k(?}Cjbl? z9gE-K4s%+PrS{lN2v=j)qjYTr3APxi2pbKd0#FUbG^A6)^4}^u@hzr zt!z|?7jXN7ON-q2Jn}{BR#_(QYRe;z?-4;?awQ|}e7nN`*Pza(UqtT9&mX;mJ@P`p z{Xnk3z^lvptuZN~^3I5Y=En-w;PIwkU6mZfXgtG2>_CmSgnth44)KQ$!O4m_zF_;? zskB05BO^O^-N+Jj!TM>XvXBE3y8&Ukmb3m%9n~;2l`NfI-YE3~-2}%zzj{N;`_r&q zRR@D_RO`#f(f)7XjylB@McI+nz4#wn4pU#j1q}o%*scCqNqMh7|9b@F4us!dL$k0I z3gU%Ne_J(Qse;7);7-QMzZTz4axzHWn1!e=ku6bXS^9k8%P^uj&Gcys{{ssy@0SG{%tJ& z$2-yJP<=!KRZ6s1-b#F^`AL)1pYR?r(GTXNEw&Q!kmu4h3kE*=z zo(?u7MYe(4b-aNt)+H(}J^E}CC`s)*9dqY58GJ9BMBc)@oxoP2-&_1HtZHo$!VdgQ z0{YeU*jr}FoA)vhZG8#2MFi0h&{*HlT>*iA0O4lks??1n(2o)&^RDd|qp={v8oQVF z;3b+A2A2|i_aIJxlT>2|_o^lPRxUJ#?;u(5%-=fd3)O-k-8W8??m}7s3aEkf2LrG@cfJ$wJ?fLy124 zDAzYkW^m;JT%Z5B?}t)lY-wg3>p*#9n5+=(1Q)&D?2eszIE5*doa8scD0rn;`%aS+ z+!D&9SgPDBR_l|yQLe_Tuux#qs!}RGD{fc-*!O=h7$olil^9MV=#1M7L6{MW(iF`< zb~#|t?nNjkSpKA%ziAwYZ{P!H(U9&dlBrs&3IW{|%k@WS=YwC$(wb(FW>p*j*bfMg z@$T^)kmTqwJf@jmZ79yqau%DXe>rypZ_Lhw?R?EyT+ypf*R=jTm9M^}=W+U6Rb44E z*R|c6vg8J4uoeT{xa9x;H8Cr@C+1G$`->Lqn~2)~>Yv^@ldAqf@I{?@)KiK$`e?a| zPwk7_hdad)ado{avDpII(|uGs7lIGct@*yR% z+OTUb!>gKm5$M%&PIaHZ-_aUed8m)awa$!IBkHcGESPSd3jyi~!9W*EXXRzi7{bY8 zsKS_8Iga%bv{>nBJy}n)=}$c3R-I3Zf7DUuKWU{t~dVg)T-^ z^+_MNS{?#~Ev<>sM+P!Y>xRM9&yy~)$C*}1zXy&lfu9&L6#w{nCC_ev+{o{q(1f_X z`f11A3*$RMvXt!m`&p_neaMN`S%42kC=kXmiX+o^*gO+e*vPO7g+$rg0QYr>uJ4;S z_Np{#6tF=eEqI}&^SoZ4_*5abw=b*ak}?|cW6-&!^ca6jgUn z%_|)L!ZW3osJgqP=~6i3W}&pEaHNOfT=T(g>t0{B>*E;~wW41`CCZG$C+g_8EfF<` z>d|mG4*(nvgb$MtIVAQ}2L#=jRX&Qe8S#~<+H(g_?OEPO^+5hVs_r@}s&6|#1I0~?a(D5ozmUi-6<^~A$;iQaqoNY zEnYcI>v3yol+kwjx_bFZg9n6SMZGS|^(qJ*SEUdyqeoZ@I9VJ4gkL-ro?&_OSxc@2 zi=tHD1dPL`%(Ume7GZ68Y+3fZzOO{#@2pm!j;5j=9l}_1XGP!s(>{^Tg5$~YG+#8) z4&3iY{+|ok|HDP3zbfXg`f6;a>HL0#Cysv%7V@-AyDxC%R~PTwgy&7_x?{;HoXkIe zdyyul9GRNWPz5H?Rv#KuD(lotEd2lOdWrf!7~&R&@3j4?6pt=xj-2K{pU$o58Q;R+ zIV@N9K_3eA6o2#a^W1w73_OFn&!%#q>ah4w8_65{=#Byhgf}_#&5F~~fFX_s!XyV4 zKcy}c;*T{PcqP=YC;Wf#&53exB&sC1IdHxp8B3mWFF1erWu#PdC?+1%!O?##_}a3t zVom&`lYB1@DsWy96a$10<`({Fj+WPs8h&hgi`7YhvpDVhVrqndc-BwcxP;Y84wq9e zK8mI?)(uznwdBZ2P3)LPRe&*~q+NE@qV~#fK*6y(h0tZ-m+G}F+iZ)IX5;y= z%e6mfIMLK7zt=Lg?jMwVo2pDuciW&%>SaCyS41TM-E}Nd5FG(OZ0k?&4xI?N6_A5V z1pz8`5T>MA8p|-%Af+G~DMfDDALULTIv0`|oEXEn!ZU%=%n?NMnUW@(rbEC;Bm&{K zgHJggjAiNU^5z4Eylg@d+}G?6%d9xUq4-GbspnUxQcFI(qVAmpWN{+f1k3AAwzUS? z9yXwXg#hKI`ggX#D-&OVaP2p(Qs(=tuFogV^4(={tTl{c5iddggE{^Wfz3+R7iuSp zvHJ~JG+FZtJWXQzMCLzK-{3C_0ZY$I=dE;1)f_3)HQG>GYJS| zs6HCORxK}!h!5MN%DxeTsXt&yIeUgkd5t3fjp4uYx55;Z05F3tNkYh+&#r&j6Ct}l*as&h<=BJdB+UH zOl(sZwzIHPFky#e!eVs`%c2HMdBaCradO;*gaAe&EZNH@&z$;)V7rmbG)1}a1*_n!blSe79UsB|((#Lk9yZ1pgQ`6R*oj;K zocbU9>@MA)S9WdW4cqY3qFHcnY8$SM_2&h(?UK3j;8GhKnC*Wm2Q4-YhMs8~_)fj4 zW7<8kye0NeNrZ0BAyYtfMD_!~X+T)(xUPbOVa}{ztUlh6C$!wT5h}tgOa_s&i8%Emu5}ZaaJZ!$$EZL}(g^I00&d z%T7SS89=wVXvu}g^_!JnI?Ad*EfiXW(SxPaI&?=U2>;goWLZO)d@G#sR%N~CLGqIY zJ%$U@rO$F*Ao1(AP*y8#+0G{5n(#~@Y-ShgN{|>FPfN+LuxXrnv z8G{EMjQy?}K>`hqc#;6wqGHJw(}t^ebcnTryLsZfI1)_Ztcse$xi_W9q*DE)t(_Hi zJa)7dfiVC#8|W(g7xTEIYy-=gw zJVxTNQ@#r(F_h+Mup_ZIW(b76;UNmStR7bzL688wDQD#Bl6n!bst16-0b%x`WB$6{ zOE7}~)XN*BR{ZQGOp&kpGCn!K?&^Quy%_l_M2!1uAmZF-Y@~4GO%s_RhxbL;t(M91 zh_eNI8Vc}dmkV@}5O&LRLC)*cSTVIPeo$)lz)q7|qMSW!>Kti&9T@fy4vx~pn($(u z=>p%HxVtTD=a_z6QqB?J5>zGT7eHPHKII}02n(A}^0pH{^oNgSodZ-?|;vyOy{+i28dTZ~mcVu-hcL0C7@Bd%Hsz++P)U(n<22^X3@x;?P z?Tv^Y!8y|C0?Uh7{T)m{O+kpmI9sor6($=w;IBUr=jA;WHohJh=Kpen+@W^`Jl`(_ z!aheIlvR}E&AbOHm}LA@wZ3D-GTf_9>!A_0_t&s)zz)X2npODt_n(!r$)@YdGVc4u zCZQyTBN3K>g_E()&Hk@oNdHAZcvf`~(S&&=J9-B5%7e0U;#^OnugPHfO&x4;BmP0* z3IkbU1&<%(Y<#2SA`gvf_ucF1AL$BfgENK>jn^IIz^R&Ip!=FLP#Po4RPh}<5^;^A zexzpZ)L0m{wkn8%?EIz6gWPOJfVKAy%aY`}hC(Zryk;zS>bonsB+GdV+X;-=s?_`c zs~8HZ1PB-7_2ayzL$c^2qrFUmQC@lgYa~-5aW3N^?!80Pf4HJ(k#bUeC&1#?1()!h zyOKjc(kolM0V7=?Zt?SW$ubByA72WDF9s`FK^-zNO>Q5Lu)2PGuZp*Z@m_>u;sp|u zqIWp`;f`6M%5@Qy2AVK-Ri(VOPp8G*tVo3wDd?NzJB~=GoT>Ye!`~hOw4> z8O1OFTn>b>)WyrXs2}Bv>^Ny1mnQT(x11{(7j%Tkp`9Lrnt~+}XV%Tu(~XKK|7;pw z8?Vs4sEEuP0rC4v&BQBkP7PE?0pJQCOqb_eioja$YlPBh@TI3N+nC!`5o))qY6ZS{tVNHE`VDJbo~~W2td&%B-Mop zx4(a|z205VZ$Ds-k?G3j5AG8xdaS|0%2+uOCK%CgHk(g5^2>AA=^r$uj=|T8X}mJ5 zI0arKt^&farRbd_EzVSdS~MC6<>r02HK%|4j|%fLB^}t_xnJ6h?kLmM^kj$DZaGqP zG1lnEM@bb*O^D~(9pyJhh$RO%04lCV11~NhYQof@f!P-!`2!6c_MEk7;LYc(Lj&_e z?jzK#2NuB8&Ips}%E|^eXv^bSs2!m~i@CK|w$*!N$+W-W%LHoW{b1SN4JCIpxUgy~ ziC^?m&`~*Um`J_;EEgpa#mF4+`3-1bY$qf+u-!Z&Doi8rf11$10ne2+qk#_~6~MHh zfyI^~*$VteZNUF&M+3{QK>kGs8aU@UJJGN)$-z$ojG96$pbKj$DCxbZoM(7-qwkQ_z>TR-Or8o2X0N72AUn~)qs1AlzZ zaWwGYb55XvDYhUvi3a}koKtAv$>*F#1JiFqat6}bbIwA>{yFC$W4{B*dC1s5=K^Hx zpK}p1_CF!H1i6>wAEIS(QIA3^d6(*JWFL;8Qt zUy%NfA$bDn|2a<~{Xgd!r2k)#{0-^eKj#Ic{}V`FLi&HsD@gy(`3KVfDI~8U z{Xgdor2prgxj-s7J0oG|F% z+vkKu2diE{5)K_)^qlbMV3GK@u4qZ2X)k=-|fZL`4VV z{DCAII@tO-(b2)3&xwH!Cc1_sCOY`zb7G-`2cHug9ZYcpNgQK!2!?t5*@twocQQq_B%)tpo7DnlMo%e`J6=PVE%hZzCs7bJtr|b_~1E7(7|F4 zkbI2}PI*pJbnx%zB!l$-2uX5C-_J<_`CK?8O%NqI{D4hJ9Q?VNxHOtIDz(H3@R_lAWi`i29+W^FiMQx*1bHmB&)}u2!(8w8f_z!J!TI zm!k&JgfcX7yyQ49G~w6-P9ReO;S_C-FaGlhm{#GJ3!f^oi!ji$`xO0fJ1!O~{as@O z%(y>;un9Jm%Z0w(!=S`QyhrMUo4?|mQu>y4gb(70M+eRUPy=C!98n5kssZ}R&#SBl zEFC$ng$tR#`k?AUBAR-;ZE_!d%o<_bMGLX@Fw)xR83)1;zLGm6tdnwU4K?HX_=^Ik zZ)kun^1B&6lqP?Aags!hQutvnbttVXAgC*i2)-_7#m^KKXm}22guCHi1O@8{5sZ)v>p8rO>%d29?Ed5YdW=f? z&#)M&GGHW_{&WAC1E7WJ>X#zRi;n#o{1jH7P|NknJ(m6^(q|gu{f2Bf3=2%Z$pep3 zkgMjlvw9`nNb!ar!FLDb;o~rZHotJzJK%F+nE!(zKWR97QMqW$$95G3%7m#uZ-Z>~ zBe95syI+~Ys?uVA_+5L0T!RkE@%<8i*ji#1_VHS{z&u^cr4rihEii*-$r*&REV!{F_QlGK z9z=9_w)_1_X0}tljw&fu6XBPy>ym1oZKvVjMM{9+eISNr}@WchB+f2?v-nSn43xq z0A>fmiX2MzY95GCFWFoLtH`sgTCrH| zX|#cp)L0h@dmE6m`xGBWFQ%eoWp=)SLQ7e{I&v7F4vSbEPcC)X3R zk$}`GJiiYj_ryrY+i5C-9st1HK$xmj`_rwo*^n9K*HuQ0J?FSc4D2)^M#-STxG&q% z+=HMQxRc{TKO;e*fL{dsXAFfp@>&$gM5xZ52Vxms#p3{%2j~jOYSycR!VX`<8RBxe zz4Z3)SE#WcV9&BEako^~c&RV6LhY=o#`A;dD5g9WqgpDU6*`0RlQ3^$Gbn`UNck)o z0P_N2LOz)NK)SLj9poUMk-_BXy=_C;xzW;oL45d!-5f2aAu~@`9ab!ps1E) zkL4NacJAL&3Xf*otCADY`T&>@2xnyZa2z2iy@fWq;O@o96dwqWr|CKB5%5ro;KVhN zcartUPlh_pBR z)&`~|-u5Wzn@P)i@p?M`C=Qr;B%jBZR+&&a5~g&GIoO4i+n0T)uoW?xEP(~VVLM-M z)ZPMM0bs#$h}h)Km1(O1FGNw+OF!NT_~l=w=OKy`j~#X4J{;Nz5`!X?1l;oAeC<{p zR=~U0NIlGf#mElTr(J!nYfqYT09X(R7vxBGgLyat<1wv_7xP16SSv1RhPy_>-CCni zCk5frNu&s@D)6&L{+}Bn42{g6uFzBm^v{551`5oQUJz=2%ogngL z_H!Hf|6nL6A)p)D_>`$FI$X826J4d!Bj6e#SddphuD=4JYM8szq_d)7F;j6HWyt#O zCB%pv(iN&HFef}h@W`OE?EikeabCg|01E@*I8rDnUhk4FFO1_HKTgF<7>n=JS3REx z`rZ&QG!0NO<2G0QtZdHyQlzSP=sRSe)qfP>F1wkJcR{!lrsl~G`U!wVfN(i!AvR~g z8LxeVVmBkG2jVZDv0d6230gY+I=Xn@3GW0Ced7@`g5PAV zwYc)i(c4)4R}d^(`^&fKG{zl^OO71Z09XtNUq?S}^kO>ocrz{dGgI9ohp%1IySJb+ z6dlKKx#*YHe{C5CsVqo_}Rn)cLcaTlR5Gw{ZeFyto~@l3DSh?*~i=pX=|U0LP#) zqyV$bWr8`^uVuo=g|OPg20=RZANdOS0I(zwhIK!b;4w}9rXa?g-yKd~!N>dYg_ds6 z;#4Be*{S8GG{rqAPt)d`TrNWg2xf>N6rCJfDq^s3aq}B$&=J#eI`HUK3J7P;=AsRf zoZ|H6`D39}o+bu;buV3>_WYniHA2SInV2g3!EHJs2;-%i4(Hs9Ug#;5{(7)w>pSBT zqOO{{l}X^itMp&@pY0D6oX#N%5`vfn!q1df!C+8g>CBfJxwR}+O#Q=YYME(fmdd;A zHcaN0{^Kcl9P#qGgs(Q}u<+)+T{^vIgCh+nfCCCB8DPOIooP!y48;11xv~v?{s4GhCB9Pc=`-o|MKUcq_? zgrS3{wPB zTo0E^T3kvx+Hpap)8H_PM8F~~D0;z7{w@DVw*e;1{uWocv>UvZ}zmG0ucuerD#vjVRH z!|@yGA8?lZ?b;H=Qe<}8Y3nv2vAK^a-pj1aJy$XkSJZf-z-xqxKsQvWbkV%zDO5Z3 zU@}9*U(pj=SrrS89TmO-&9e8NW?Nc0CyjSiICQDD{_C0?Yv|c5%m5s75sTr=_g3!* z&Ewbr1uH>j3&bF2(aOLNV55uXn3gck>V=EuU0d+mG|SdXMM>flr86e5McZJe*eny7Vt(T+H0mCPvi+jlOs$o%%~F zESB=)aG-!e-a7d2z9@FxyAqozU*N#OX!5m+&%aS|%|bY*R-AoLW-r)Tb_CpBr~=`R z4OpDAg`Mp_L0*quuDkQKOp-HS;oiM3%D$6Vv!h>k?K>FmO?7h!+Uh$i1G{zDJa?wU zMZ$l-ATeQ#;PQ$Eo<*wx;Vj(d#Y)O*oDpieWlfw78)6+7IgN2qY1T5?)YrB&*$*s6 zJT6W!Q8bynh!#b0WJ=)Vj<>u*U&vHln}47Ca{)$L9q5|5#1*p1l=IkQmM+zVboYby zBOM82T456_&Xv4m=4&K!3}p;{A7_-X?{W|Zm#|h4lZD{cJ9S`nDt)q>IKKY@|h;js0;Hv(KOp!-Ahwmyj#q%z+aI_Q+VxVsZ* zxr*M^`}Bo4#%A2C&r({=8NKJGYcQjyCs?~N?IiOlH<0$Mn?VEpRw-WW0SuPs^1G@91X7mMxtZn3FJI>Mg`T;sIcP((_d#XCEa9B^gSJA__wD8) z+CZOh#z;tvVjpCg02S*1;Y=;o-wLKvuj%~ITQ5J2#^|Rj9E>=oJ8M%maD!}}K1^Z$ zvMcC&AN00zcGq5XYe6B2WJRD5bmW7GW8#t2bPRBH|8xI2i&l>L63c3s<{qY`K9%qd zS&zxg3S3c%!(mKIKJX=!E@ic7&Pg_0SWeG3ZdzW{rWUCv#kz6()9^r_78z=)lm!6R z`wxCTi%wzyr+0$mlLDCWH#&GY!}&P_Ca4R9#A@uSPA#Lz#?9E&L5*$Q!;+(FmOsMe z%32m3d|fq+MiCQxUaR+fm@)yt`arl@ae$8avmE4w2>Xi-zPs+GZ|_@ofKEir*ulu?_!_ z@X#Gj4Mj_3hC$-93QO}l>P6M8dq*MZ;^Xh4@;yt$#kSj{%;fB|XL)K!KwO(k|5ud9 z1+iP;GXp*VU8pf#@!y!G4!2m7mnC}PjrEOJ~8(eSZQ*S@f z#;;^;aJj#A{piJLpogl9gp|M{Bj5eMza5k@5VkffxPgY^{GiD8w2~~&*uV@bA9p!8 zqUxVtFfRm+J|Uk__o1Lre8yFjj7eIwovugTOGc;#QO$oOE?MY4Eq(!jO@J^R9QGed zFX_xEIfSqY7usmM!uC(NUlHh&<%r*gy-7QGiEOd;l-Ul?fgN5hS(3-+b3PN2K>U)9 zPCHImSeKX>;F<#6+efb~1km^Q3!|$z%sZLKR4+}6zlLzwcD0;nTXgLDt1Ja8HcB#B z+P}Q4`Zi2!45t$HW5z6_Q2UG%r+!(Grm_Gd-9M|Ub_Q)K0Db*^yH+L{ zXA5GN-|&b~fgPS9^V z@jGC&@{ES6pRtu-L>+cTcLwkNsD3w@)|n@&qZoNQZkzGrpMw9wmcW8_7%dN88#+d5 zk@}*bHuJS?Sw03|qm5dFVDdmrH_I!&q~mMuI0zUe|NBBE%@@@M>r_s;z+ifdI}A zD8^Ay&cDnv&>X&n6-^=j-6_FAL1-vjAnfo$S}z$<4a6a5r6hk|)%51)4NFFL^>jLi zsY@&=^qjVzG!;0)RH?n=a;0Xf{aB&FtNv@&yw~ULSrK#O5fIitLktJy2Z8N?up%sLW3cfGNd9d?;B_&Xt4N8Fx|`cAQyt_CN1@FZUj zO?<0_l26L&-#hW3kjNmeJ<#<6*MDGO7QMW7#%B-21WhCTh7&G%Mb=j0<;C`PJcq4P z4&J8b6SX4EkMEcVc1VpsBV%M|tOO{to+zE)CyGY({{2qCJb#NFfbiW&-Lwhg>U+4_ z*P%ArVH2gc;-AQU2A%V8`hFj#?fyw0~e+ly?+ zjz_0sP0Cow8$Gr~BwQwxPm=MYbTsatzZ*8Ve_SV^yAXWj2r^1wsfmGBrAxP&Zy&2; z9$?2X+3@nQ!fjj3=76Uy>33d`b0AO1w@N)LhYH6HKh(o|{P1CwjgrLQ!R7BrAR$3U z;v*2Qg^v}yi>X|hNP6jLU71Ldz*5K44R^50eI&t}t?wSQh~X1$OKj9$N4W+1nUV3u z>*LI_ooAFt=sj^%J~AWU-}3~>uLJS{&OrF|{Yv820Brm1sHQfR(N;!{NO;lcm)QW+ z-};F?`-q!g8vk_ggt0QubC{SP^?H9g%-f+W2%pQ;7c z&N~}nn_+eNzcu`wZA1F!OY90PSod)pfvF$!c7pG%pbV6nTwUTO-qk^mL1Wga!m)g_ z2_=YYr90y2+M#*X3kUn~Lp+&Sv3KGi%VbXvH(5MQ*{^?x7&5|8Zb10UvHsnT(jgwS zs+Ao{3R(>niIC11;kadL4uilKcG@#Zb)1~60BXoxPTSEu={yxX;z?x+>tsoK=A`&r z5jA`NxJXb~&;7dtVd0QcJ(Na@ZbKzeE?QUKiRyykjy=+rMZ?TbFUN4ng{m*SnqQUI z$hcHoG38WRcP+Y|Ef(<&$oiom8mZfQ{arZ^h4j3g@Bq4bqwjmwVEgzQ<~~IeR-|I= zW4Lvc(&K~9F!cxMJUWqk1fqVq2vom@&LrNHouume^5%oeZHe0)C7MPAh1h-k-$`yL zBtHo334~*Lj3m2r&@YH>?ps7cX#y2enlmGjb6HCIzI||8jj*OJo@;# z6&pLQSax+-lE-D4N!rR^Xu(2nf5bHmsJfOoyCQzF`b`YY)}es?XOLbS`}C5kx9u z_aPd!^5ke+LM^Z+0VIi-ZF-N_>Tp%Oj1b-)H4+RsX2yEX0Fe(jXjQ*nr}|h=Es;Z7YRBI_xu%s zS}KzBhomP9=EZLHvLIUWBXFg<9e(YE30~K4j zD60u5WWT250ZAe$^#~5Bg)uG*eh95q+go}SGZOihpJ+&l)9HIk#VbI?fk4<3Q=CFh z@(qDh6g?DNf}QFvtqw_kr;dH;&G2bcBmoL|MLXFbk2ttcXm)ffY5_h}_~W~Am8l64 z-~3ifn7T8ic2f{ve=78WKWz>oq&x2C^ySeg1{53wbZzR`2s_={L*-vId^mp_#qH2E zm+(dq?o!hHTJ+maL@6(-4hF(p zzfKG7pDq}0)=!VuBafYovSF!9&*?w%+RjTPkh&A@M(&g-y>fMCp^Lg3^oTO`@v3SO z`|Y{T(s_3b4f0t8UcL(f!ozB*jKj$u@*FS$0fWb)e>4OxN=uJWv>FiiP7f-oZAjYnDYx5wPDwJKjd*@jd9t5RLn0|LbV%{HY;u8ZQ(G zdlEuUhK~tjtwb2fsi`oUaL0AjH4KW;oEjfd_GqtVYQT<7)?q+5K4z zMGU!A{PR65#W&Jv-@rDFDv1Dm>!iZz$mxMOtTNI;;~n{fOm|wCqxVPG+9^~kaJoMN z2t%DiV;61>)JBiUt`#aEu_?-oqq5R=+{JgrGmo&e7^0ZRvc>WdoHu|bp7`||IJRz~ zuyZmN38i-CbS=;?8~+|;{@oNu0%3*ArYG$$>x@k%ows4%49wsiTs<#9?H;0?_$gwq zez3p3-=}_b$s=h+YPX$G-*wly$nl_M0fEtmrGLx7Pysh=QP1wb+aD;n*}WICZO|kx z77TWSzCUqp;pI_3cAP5@}G9YJ*c~xu4>G3HkSSS9QdH-z!ABg9a zzL2#JxI`lwSTM$0#W?97s9s?VaKxV$7dJV};zbS|xaWU(6b|c1vVl@9J1SlKDr9M( ze4tAbImkt%E(Njp7hHQQ*HJ-R>1i;4??em`&beb8?8dd(w-2e{(>bh@nr(cMED86r zKZ7It#4em-HTP>G_q~^aN)tyEbxXXA6cE@M?Ye$EqMDK}hj-dQifL+DLD9P0J9f z1`>Bih6c)kch<%M-76^}R9g1;qu-`%Jm0G<@w^SjL9hiq-|N=Yb^A&cJJkr!}p?QH`_A|41wEtyOHT9WE(m_K|;);?tAtyzdg zT@ys?2*=}Jbn=BhG_qih?_6F$KEiv^0JCI?Fn4%l%{BR?v;(O-rG4F8=8IonP(1qh`;#R%M(7=SH1fB1b7Vy41^2J zepI34M0*c&yb+r!>k2eX1#wB=VQdWSQRjv)tjC)aO+=}~urOP8^m#`ge_p-%9U35u z&U<|-Voin-h!5O7CjngyP+b0kOk4Nr6A4T}?N_I4JpZ6fok`i!LFi_ET6FPVGYoHg zF|+LGjK=7`k#&Z;`{dN%_PygjP}F6NS0qiifbT>y5O!(|Y4pO<{iuMOldVC?$hL7q z`uhPVE#HAZUfe6ZeLUPko%dY#r8OwzfV5$B-$0;Ojbco*9$1%h6wFzGc$4hbexCj7cylib~*5(!## z9_{L@;-1&Iu}ISrQA9{hYfAT8FKV*4+FQ$7)E5@iBiaJMX~2SG)(ohcb_d9(8AI*S zyz3S|OsF1@23Gh~)(X^i$bmjizo94`4)KsE{X)XdIp0{AW&p}#NVxp!%Cu~M&OJ;G zm@I}$2g31WWmr4ksPpa7Yov$U@cuYEixDFswpiksR*mQi(O${iCXWl=+dC~V@TG1u z5gvjPu`6MP$kN|pqPI9m zqNGR?mVw*&EFi2)dFCfmOl~0T5g75&NfZ{;PZdM>z3>zkzN+<)@unWb%=^eCs}0wu zKdvoZ+29wETyC-j=ajG?3raw>y(7CRfQqw$@X^}As($kI53z#k^CqH!@_-0iZ0;cY z4y9W3(9%ES8&2epB&)5?nn`KG_6?JUor0^e9Lu9rgzlWy*0PK|H~=>X=mv-1+sWlH zGX@EQY=Z<9%sMR1M}jv?cE&jud8dx*Mk53*HPpQ5{%9CqsH+&c%o)IT*K0iBIxE(e z3r3b#FIofOZ$MZ*SoD^4U&3EN>|61~nW4W)SK&V~QH8pA6JVd% zioc-9q9Cc|1$~v_Q*(mrDf^6aIoXEzcS_~&em@roO9^n1uD_MuB)jt$zKZZa%!AqP ze=sZ^dAeI>diXkus22XPu6n$1QAD4j+x;rYzP_rtJ$4WB@-R{Fr#KH|V?e=qKo=A= z<=UaUVAs;(ft^FduIKTDZ2SFS_F$VhbBOF|#3UNcLLJXQ4h!BuYEEGOh3BQd0>3j- zN5v*LgDX|WTWtdXoDYN}alTFZP#ReC$GxtFtj@(DdEBH$LH~F%jH54=msNg;hgbRT1kbwokJ2i5n03|nvtJN8LqnOnf z57BQWtRWpdGo9sK~E#D|W$$ zCsms}aznGjH#G!x{py36P64jMD*?JcLSbVy?2IK6gSUBy2}oP|tCB!&84dfs!>V9e z{H`>$8#yWo;l}SL5=OI}qwsPH|P$vhp>5^k+^8 zeCqK&qG}tOpiZvkAfO;>9XO&a-|h5i#6(=t%>rV$~tmHm`BwSfDB?q3q@NuOBXq2Z}J}jm$22$#z9BUcLmC zjM411E#2Bs4NQmPkiwn0H;8U^nDcE1qy65po*$jl8pt;LVudZ{`#0UNNu1_xNp^J|e0-(V(YAw zp&OYIoRgg(jb(mIf`w_8YG)eoJr}h=moUUcJ8RnxXWJs_b-foK7bw!IJ~P?~_U`6v zO!_T94*ikCQWmJdJ5F-3EekfNEAX?55^K=!UU}8}zCW1X#DK?!bwGIIMZOT{Yd?eQ z_BoW9W5pHuhiPYTVa*^H{mpMHteoZMQBX*8OAW0(f`@&0W{oJr)G0e|`>mkqb13K- zSR#Gk&#)c{lc!#jLms=F^D9|2=h`*Hq3Mm^ueQJ-`FaEfss(EiofZH3TkRNpp_f%v zr^W`mb0w<@0E%`JoX2WrQcbFM7kzvUciF1`R++`skBy8TutAT&dT zbO<9kKX(tPxCsbfZ~DZAp8Sc)d&d!qVnSF1_Pp^gK{RdcE8)S_CF1B|mQK1)=aBxu zc<($eA^3h2shfaI6d_S<>p_!$^UV@)a;*73_xXqxZnZ0~*L={4d^k!2UoicLl zv_Q5FzA$03o1bfWvP)dYM`h%xkGmO{ zo5*>5W32dC-CJPOaKY#wN~+N_R6_)jb2XJDf2IA;1wpj|;q2kB&Tj3*SfGHTA}V;9 zpHa}};v1vR^U8J^HX{f*?jQtM&AcLS`Tg*ByO7C+-4Nplaz@+OaoAUxCMW#ALjDIs zwFBMT;7NP6m}CO|{#TzC?ux~7Ma1Gi>U zg4*S~Q$eF{CkgJ}!k9DG=GEIG9y-^yD^%DkndTj@+JwD$jDagEI)N}Wfmpu%1&Bw# zd74xxqW&T{C9M!Q5ie*yo}&mK+5Sb4Wa?eo#fd3c-=yVYI`C(ULtBBwdvdFBv?{02 zJFLH#g8mlV1$3R&rYg{njjI?Lt&rm(&nCUYl$@8Z^l|#WAs^}-CdqOV#Ljmx{!#UC z`VU7P=nYG*M4=}0-F82`B9pM@aG5z{56VIc9z@|`t~%L7|MQVFSI^O8z9_r_ z_Kp}O2o?Pepx|DhtBTQ*GzBX3{T&EB5_8IF#m;-~wz%6iu`JW`xS>bb{Z`i^-?_wJ zpiF-bVJ3bM4^^f!YpT^xFE92dwH2nAF+TwA1H#2y(7)ZVr?ZC2P_AF4WhCEOu`)l2 zG$y8xn`22^kD8e5%)#^i!uU3r*AWZiQLg!OlaxPggi;&=ok52ltQ_$b0QUpor<%I2o;cGAuvEal;7{Qf{z> z2=wHOQp8$40PeuQ?muVLaH%-3&~0*6_JLWOUfrOE8(;S6AHwS%4dZQMKRX%QO9w{8 zCO4YjOzUmA5U_lB{c1#rsX>AQ)ld@G;)bN^1i12Q5Lhs;AAzBg5IMC_AxA}wmuxX) z)o8yZJK2NEvM(Na48~rpG-zvpHgF~2ST!m4|YvL{rDGVV+ z*re}+?^}pus{M_{|GS>>_`Lrg2EvIsYBnGBZq(^4nFA{~Ht_4TG_$9?<2xm|KikuQ z+^Vw!7~UJpwIv?Pt9}E&3`(40M^dTZckwB`ou%BUL6Za&JOXs(S04PD$38off{CMI zl=j#z5TXxEmXqK?2YJShDo@luj!*EmYiVSSP%@V1L!}Jz;z|=dV_Ej(~@)fy`A$d*5MdS(98;W%|N}B7A}!`q|jR{ zzc+28N#qNS@r0ZDL?a=eb-2=J`I5sS`9&x7?qKc4uNUtD?l{mD`DBWXk5Ea1dyHI1 zJPA@A`1lz|7>an=)Wmu4jI)+Db^K^Pj^wxtBMpzX*wQ#<=pJQth)vWZ6q@{fHca6y za8h~#2$#O)l)0JGdSh$FcrywYom{?1LYd>7$dzBO?MmE0!j!9!y7@9WFpxLTehImn zpg1QBCbyv8Ilb{Z0lo~Wx2rM5Z5+o8&fj97S7d$b?j0b=A`yi_W+$o^z_6~IRIxhKKIxNIWB%X{PDq$6rKYN#BWrv{f6VyoB zXuo2!UB#ohxih4ey07Nb{&f`q&j8^%#M+4sR{=byf^*bI+1diVw7udUhNtrCo^RN7 zVaWy|UUm`m_Vf7f(J9tG^M8N0-7@&VP$opk8Dt6@vBeE^XaBl?XY}Bl#%Qs1iGK(j z;bo3So@^62E#-Zfhd)7r0@tHTpgVhc*N|vd^?^?5$HbhcqWmCs1e2!Q}=^Z^LX`$T|)?c0eC`nS+%NlPo^1 zG9eSUhcoa9luATWG#XHAYa}c){Bzd(@6%i7fpEOgtqt3u(pVyn1Z5VPG_GPO7ZPqj zd%c}7zBl925!-T=lEW+a1CJi#_K5)dBt$l6{jefu6e$Irq+%4xbo z-}Uw*b=?$=8z0Lie9OD$lF{qW-nWNu$-3k{YH2sN=^5z75>Q;57f8xez@PvL0K5!@ zMaJmYSXX!ZtyRAtTEXUzq|1?kRCQp~62t;XLy;FhvoIwKNY>!Djt?(5(XZUU(HakE zJ-cQ^htfJAd)Y3(0B~1;u5%0;$oCc9(pV72F&xO!Iu0gMje}vsjPd6EF{-&b!48d6 zvn-pyK~D%%Sl`#R&1+lC*UlSh7Uk{t8uh6|xfuX>6$r0o+FfSvmD~%d?e~pH_Q`#< z5X8+HAvO~0iQkFogTGtrf%OYhs`A~F)wgd%T9v~#*=GeU^s~C+A{8WYr<{-g;58sT zN0$-Zd&3+a-8WS^E-3sRw$@e4C=c6usjtCAW&m4>u%zzedp6E2m4}9(2o)b*ZnX~w+6{FDdEg!I zPnx2W4|?A=ckSjP+VBN!DcMQCm<1HP0fc)DQhT;O;WrXQCdPYRVZt&; z@R$fyv@$;sn$JUblB;BXvv%#b@+ZM42a)WVZPcil;!8KVOvYMh2guWzup<0jA@%p@ zbrT3jlYLg4&RbCPsj`qSxSS1h8f-|3s8&!fuKYzC3#`u^%<_Fa4`$c1<4@k`u z6Y&)(R^SyAy52;cfmeck?~EwiF8CZEPsy@vrW4Q*+B zI2oiNLDb#kg~+MGTPrq>!pd&X;wO%+=er{`9HGm#fO{W+8*!3?LIW6yU7-8pWTXzt z(U($%=}9K4#9is#PGM5a0_f9W&8uHGokM2{HbmkzoG!lty9i#Ce3xx{s&HA9DcDSW zM=@du4#7nR?mYH@FaqB2IBM+z@r(2=%nq`G!55?9Jepblm}*OO<0vW9|BtG>45)JH z8U_qVryw2DB}hm~iAV@YD&5`Pz3J`-K|;D4RJyx6q`SM}xgQ2t^Ii?Ob+q;sjqfMl;oDQ_rp^5Cj=HQ7KnHUgiBqGg6pujN7WsA zP4M7SZeus}layZl@>DN*Ka8)YTCbf$>Kf=V!Yn{e&OU9?g@}SI^@cbA-UH!_(0)$4X!Mv5O^9EUG%?$vkK;2Eh9u%(pIijL4?3M@4)z zh4pYT_k8lh+MQwSYp@RFc**?hiXL29qnJkNcIhOt`g9A&oK>10(h{1Jrw{vZ)#txs z;GlE>x)LuSu}F{(12>fpOm63NH-WGKw&bgQV$5%wsO6r_T&$+lTHDGB)5zv<32*7^P z)xe+SzTaSII5II?ApI$Azk^JWirhZ8maj`Iy*`pTNVanZBR&G*>fd!1ls0$R1#QPj z={$WS5-x~UiV-K@cz#^Sy&{AX@%F%d_+hIH@Beyi)ZILS0Q+D&1xjvve#?qOUdHwm zJP>vKFZaLCA1GL*{C7S9L{HH)?2%zFO{b!mf9$QB9qMnoyPlv`o^>LV!Hco|Y$}Qg zW{0sX34rzA@4rl~N(qC}+dS^o7c>Ib`zK()vr}wGrCH~$W-PeHi2dEq_b$->saJb1 z-WH*67Vw#o1k(D}8(RIwU#4E#-5KgSl8Z8-8{`+Fi+r5_mM@6ogeHaVjhk zMPNe|+>nqx$FmFw6&KROWw-u1U>pka@0H8Oek{jLR5KjJ8{6TouriFoZFC;z^`j&t zTAY$aW!3r5ckMqN6=xv)z8mk!2j+3tk6#(yjdpNew>LI}ptu)P-(8*f6?B7rDylJy zv_*i7LAK8vaqnWUN8(Zhf40uYX>}iVTp2}heQ*xC0%LAd=QpXpgj}@XUJn^@;f7lN z)`CE5s^fiUXsp%BLsqBp73hp}3Sf9FTKD>~o?CA?&1#l5Ub0Fy08u)@H2{7c7a+Va z3^O6*&sBI2)k)s^5ehK`Pd^&{*YU*G0U7o;m-=}g4c{VD*~pp)GqJXaCIQjUc00Hdzvye4{)zQw-UdJsqWSdFI-;>QVfsPBp~JR zmS!c%i%wPyRxi7_LyMv~J$SC)nlfpP*i&nnBG_#5`q$QKd9kMXC zbdJ{()}m@{)S2O@_pi7|)pFsVEv|DmK2{1pdwT7dLN@vn@KYBdOuW{3->kNm-gCct zmGBmy;$Q)_?mFGA9DwgZ__7V*uYFwYbPhH3M5#_yVl_6bTF&^5_p!ZlqSH_U^gOvv zld9tj4XL9i^MPuV!@=~wPExR;g|t^qB7S&hrGWeJ?Edfh0|ncq)6?(mRM8gS(*JVB zWYUD0h%Q)(WLgOe^wG>A$Hg)JU7C&#e-gkjPZiWqWJeqzPC9H=&Zy88Nf^Bs$) zZwsW@;hnixuhZU64C{nASbBW|;hMyUoy)ft{`L01o&xsEA#2fR%uE5a607(qfc*SwZdNqTiD7i|Za#Md-%j8{A z6as|U9oHJ%tbzvJLTkqx8m@qkxd^!CpU*H*Xa)E+tvnq@_>&wW^mYxapT zXYpc}&DaI2GfX!vt`2-cs#I(bsPHZDT0n|nK$ui%P_l)4-*FvVIHt~#|5{cI`KdZg z={422DYUhjc+yoC(_^+2oog;<4Q$4{&PRShdEsg@t&vRrYl!%hTDTAZzX0LCCNB~u z(yck@%rtL*$mPHAh$iGph|uWU*J^EX$7G4ey${tCFC|K&cF)sa;rxtf6VLhEgg}iL zR*K4p`XLG&lwd)3s{SkYx#~8=dIb`OJpN{Bldeg2N(6z)?5k|t|4S?h*M(1$!o z^Fq;OM9d2|uXtj~V0@q8=W|_ykeHoGaLNV;!dP?BuwpxtV^7oZZmQHbjIoH_1SCPa zMkWn2-BI-2-ufTCwV_W-lbw=a3WJgP&95P^@K)M8$z*jkh&B3K;Y%^k!&aC&$2d_MssdDzk%aFoftwnxvM9v^G) z#~rjyNGQoa8i?Lyw=)KG6sdo?%h?qq#;bL|$@+e|S0ThqdI zfPlrF>xhL3ZdM_q|MUETg7w-XoejfEPzu-%8r8P&I+Q|4dIkHlFrHIJFzqe7L8tG$R>o+*!Rjkd2@*flQ!+ z@IY=e24QWS88o>)FOsODq|;Hyajh#qviso@*==Z?wFj-S_+dq+QOarpQ7MGpYz1dV z;GMj)a$h(9`T8E(zo+s4>!?5jVaZ`-_h|~^*NOzx3N{@gn!FD z{wU$~RFK6CF*_*tYMtFAMKX2Tz_fYcsN=>PeV>iQ?*{@#2i@q@nfFEXkj_c1DCT5n zk5yRQF^JMn9A%<2!G?{R_Xg(Mv>DY4=VXh0_|OtxrQ>j2RcBw;IcXRp45P!uCKFNu zFa`*x8(X3`>s&D|?(EAd+B}6z8USMM#iY`^DHy3>A-@Wzcvtzl zI)kQ+Sv^B7SqNf0b9U>b48Sizc&Yh-f66H%6~W}~GJB$CDp~6y-{mgz^Tc|&p2&*p z%S=2L1?udPlnGPd0XZgzM{(66t?LG}dpx&q4~!jO8Q@}quA=xN#X~w7sRyJAWh4Xr zm!(yDrJ1Yjw5YR}{m+-?H^v|RXY5a)*q7sXD1Xl*%$=XztXnZ4|Db@oR5M55TO#=tKY*diHQkwmfhnL$o~f+3j$WO5OPyq)yN;i*x|0b) z1fzu$%C6mHBJ?^ag-P&6V)AS>M1wrn~Pat4yz=gmbvh;=?_ZF=rlLINjhFutIK!wDDm7r zXv=i)Trmy+!=^g%e7QWPpqC(?&}Mj8OL)0W=0v}iK-R}d3?t1W-H75Y5dfzOF$_X2 z4cXU}mwx}y`7#D=OxLyYRHbq}uF}<>-)pe@Yh5TUtYta`d zuc+TFTmMv`mQWkVU$u<*1INFK&df%{AGcOlK>I~HB|hY=y66YkXN-sbfAgQ`?Q(JS zz9D>%Yk_37aj0=_{ALFwKd-^=)ibtCq`Svol=k>HI}_WX7H$>X8lD}hzeCk@q*gt6 z2+UhkZ(;tiWuR2A0 zh5vMr%X}%WbjZ<|{G6e-{axueKOnpNyceC3$K~hl{F(N^&!%DNEq=Twc!uYIpX<;6 z`LYp$aIGlg$R_O|((fQY4G43nb-A8(Q54b&w|4FQ8`qwMJ#kOGaO1n-Tx7UcMz&D*I9{zd?9Ogcs6Zx&KsOJj3GVr%cS4{26g{#1H+EuZNLJzCBLyn&M+(AA z#yp#C(-K@u=ol4PS221G!_aN?1g<`=UkQTpZuyMpFpf0y_XV)$nKItW0P^lzlKId$2ljNY!$WymDtC6GFGP7xmZ) zZXl3=u>HU%$o}k|`(MHMzAp1p!~!wYlhWo^xT|nh%a8TZa6-~^`GJMK*hj&V*%_!aY;rSK^^ℜ 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 z

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%0AZ**`}X|no&(#GBIpP) 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 ?wriFyvTGyn4W$l&>wY&-N2|5AI)G)u~L#@ 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 z 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

UN;-E5T-ZK}p! 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 Date: Thu, 15 May 2025 15:41:38 +0200 Subject: [PATCH 14/19] fix: missing exports --- packages/core/src/models/index.ts | 1 + packages/v1-core/src/index.ts | 2 ++ packages/v1-core/src/models/proposals/index.ts | 2 ++ 3 files changed, 5 insertions(+) diff --git a/packages/core/src/models/index.ts b/packages/core/src/models/index.ts index 7a6c078f..c2c7dedc 100644 --- a/packages/core/src/models/index.ts +++ b/packages/core/src/models/index.ts @@ -4,3 +4,4 @@ export * from "./token.js"; export * from "./user.js"; export * from "./types.js"; export * from "./nft.js"; +export * from "./liquidity-position.js"; \ No newline at end of file diff --git a/packages/v1-core/src/index.ts b/packages/v1-core/src/index.ts index e7091741..542ed06c 100644 --- a/packages/v1-core/src/index.ts +++ b/packages/v1-core/src/index.ts @@ -11,6 +11,8 @@ export * from "./factories/create-chain-link-proposal.js"; export * from "./factories/types.js"; export * from "./factories/helpers.js"; export * from "./factories/constants.js"; +export * from "./factories/create-uniswap-v3-lp-individual-proposal.js"; +export * from "./factories/create-uniswap-v3-lp-set-proposal.js"; export * from "./views/get-user-with-nonce.js"; export * from "./views/get-strategies.js"; diff --git a/packages/v1-core/src/models/proposals/index.ts b/packages/v1-core/src/models/proposals/index.ts index 8fa3d428..9abdcd71 100644 --- a/packages/v1-core/src/models/proposals/index.ts +++ b/packages/v1-core/src/models/proposals/index.ts @@ -1,3 +1,5 @@ export * from "./elastic-proposal.js"; export * from "./chainlink-proposal.js"; export * from "./proposal-base.js"; +export * from "./uniswap-v3-lp-individual-proposal.js"; +export * from "./uniswap-v3-lp-set-proposal.js"; From 6782512213ad1841c9ef5d82af58161433631c0e Mon Sep 17 00:00:00 2001 From: tohrxyz Date: Thu, 15 May 2025 15:42:36 +0200 Subject: [PATCH 15/19] chore(release): publish 0.0.2-rc --- packages/api/package.json | 2 +- packages/core/package.json | 2 +- packages/v1-core/package.json | 6 +++--- packages/v1-sdk-react/package.json | 6 +++--- packages/v1-sdk-vue/package.json | 6 +++--- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/api/package.json b/packages/api/package.json index 197dbd3b..c9387eb2 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -1,6 +1,6 @@ { "name": "@pwndao/api-sdk", - "version": "0.0.1-rc", + "version": "0.0.2-rc", "type": "module", "main": "./dist/index.js", "module": "./dist/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index 2a5b2ebc..4421bfbf 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@pwndao/sdk-core", - "version": "0.0.1-rc", + "version": "0.0.2-rc", "type": "module", "main": "./dist/index.js", "module": "./dist/index.js", diff --git a/packages/v1-core/package.json b/packages/v1-core/package.json index a4b3e08e..7fb4ac6f 100644 --- a/packages/v1-core/package.json +++ b/packages/v1-core/package.json @@ -1,6 +1,6 @@ { "name": "@pwndao/v1-core", - "version": "0.0.1-rc", + "version": "0.0.2-rc", "type": "module", "main": "./dist/index.js", "module": "./dist/index.js", @@ -20,8 +20,8 @@ "dependencies": { "@moleculexyz/wagmi-safe-wait-for-tx": "^1.0.0", "@openzeppelin/merkle-tree": "^1.0.8", - "@pwndao/api-sdk": "0.0.1-rc", - "@pwndao/sdk-core": "0.0.1-rc", + "@pwndao/api-sdk": "0.0.2-rc", + "@pwndao/sdk-core": "0.0.2-rc", "@safe-global/api-kit": "^3.0.1", "@safe-global/protocol-kit": "^6.0.3", "@wagmi/cli": "^2.2.0", diff --git a/packages/v1-sdk-react/package.json b/packages/v1-sdk-react/package.json index c84a0c7b..8518a68f 100644 --- a/packages/v1-sdk-react/package.json +++ b/packages/v1-sdk-react/package.json @@ -1,6 +1,6 @@ { "name": "@pwndao/sdk-v1-react", - "version": "0.0.1-rc", + "version": "0.0.2-rc", "type": "module", "main": "./dist/index.js", "module": "./dist/index.js", @@ -38,8 +38,8 @@ "!**/*.tsbuildinfo" ], "dependencies": { - "@pwndao/sdk-core": "0.0.1-rc", - "@pwndao/v1-core": "0.0.1-rc", + "@pwndao/sdk-core": "0.0.2-rc", + "@pwndao/v1-core": "0.0.2-rc", "vitest": "^1.3.1", "wagmi": "^2.14.13", "ts-invariant": "^0.10.3" diff --git a/packages/v1-sdk-vue/package.json b/packages/v1-sdk-vue/package.json index b4b0f9aa..8c79de45 100644 --- a/packages/v1-sdk-vue/package.json +++ b/packages/v1-sdk-vue/package.json @@ -1,6 +1,6 @@ { "name": "@pwndao/sdk-v1-vue", - "version": "0.0.1-rc", + "version": "0.0.2-rc", "type": "module", "main": "./dist/index.js", "module": "./dist/index.mjs", @@ -18,8 +18,8 @@ "!**/*.tsbuildinfo" ], "dependencies": { - "@pwndao/v1-core": "0.0.1-rc", - "@pwndao/sdk-core": "0.0.1-rc" + "@pwndao/v1-core": "0.0.2-rc", + "@pwndao/sdk-core": "0.0.2-rc" }, "devDependencies": { "@tanstack/vue-query": "^5.59.1" From 31db05e41bfa57ca9ab74742fc29002e148938b5 Mon Sep 17 00:00:00 2001 From: tohrxyz Date: Fri, 16 May 2025 17:03:43 +0200 Subject: [PATCH 16/19] fix: cleanup and remove log --- packages/v1-core/src/actions/make-proposal.test.ts | 8 ++++++-- .../factories/create-uniswap-v3-lp-individual-proposal.ts | 8 -------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/packages/v1-core/src/actions/make-proposal.test.ts b/packages/v1-core/src/actions/make-proposal.test.ts index 63855ccf..56927c77 100644 --- a/packages/v1-core/src/actions/make-proposal.test.ts +++ b/packages/v1-core/src/actions/make-proposal.test.ts @@ -383,12 +383,16 @@ describe("Test make proposal", () => { expect(user.nonces[SupportedChain.Sepolia]?.[0]).toBe(0n); + const collateral = getMockLiquidityPoolToken(SupportedChain.Sepolia, sepoliaAssetsWithPriceFeeds.weth, sepoliaAssetsWithPriceFeeds.usdc, "1", lpTokenAddress); + const credit = getMockToken(SupportedChain.Sepolia, sepoliaAssetsWithPriceFeeds.usdc); + + const proposal = await makeProposal( user, ProposalType.UniswapV3Individual, { - collateral: getMockLiquidityPoolToken(SupportedChain.Sepolia, sepoliaAssetsWithPriceFeeds.weth, sepoliaAssetsWithPriceFeeds.usdc, "1", lpTokenAddress), - credit: getMockToken(SupportedChain.Sepolia, sepoliaAssetsWithPriceFeeds.usdc), + collateral, + credit, creditAmount, ltv: { [getUniqueCreditCollateralKey( diff --git a/packages/v1-core/src/factories/create-uniswap-v3-lp-individual-proposal.ts b/packages/v1-core/src/factories/create-uniswap-v3-lp-individual-proposal.ts index 6ce8ea11..2fdc9479 100644 --- a/packages/v1-core/src/factories/create-uniswap-v3-lp-individual-proposal.ts +++ b/packages/v1-core/src/factories/create-uniswap-v3-lp-individual-proposal.ts @@ -39,14 +39,6 @@ export class UniswapV3LpIndividualProposalStrategy invariant(ltv, "LTV is undefined"); - console.log({ - collateral: params.collateral, - constructor: params.collateral.constructor.name, - prototype: Object.getPrototypeOf(params.collateral), - instanceOfUniswapV3: params.collateral instanceof UniswapV3Position, - type: typeof params.collateral - }); - const castedCollateral = 'tokenId' in params.collateral && 'tokenA' in params.collateral && 'tokenB' in params.collateral ? params.collateral as UniswapV3Position : null; From e238f2e93511f98fcfcb0ef544dd96de6524276b Mon Sep 17 00:00:00 2001 From: tohrxyz Date: Fri, 16 May 2025 17:06:33 +0200 Subject: [PATCH 17/19] feat: add uniswapv3pool contract, methods, tests --- packages/v1-core/src/contracts/index.ts | 1 + .../uniswap-v3-pool-contract.test.ts | 93 +++++++++++++++++++ .../src/contracts/uniswap-v3-pool-contract.ts | 93 +++++++++++++++++++ ...reate-uniswap-v3-lp-individual-proposal.ts | 2 +- 4 files changed, 188 insertions(+), 1 deletion(-) create mode 100644 packages/v1-core/src/contracts/uniswap-v3-pool-contract.test.ts create mode 100644 packages/v1-core/src/contracts/uniswap-v3-pool-contract.ts diff --git a/packages/v1-core/src/contracts/index.ts b/packages/v1-core/src/contracts/index.ts index 2fa0ed57..b82e0886 100644 --- a/packages/v1-core/src/contracts/index.ts +++ b/packages/v1-core/src/contracts/index.ts @@ -5,3 +5,4 @@ export * from "./simple-loan-contract.js"; export * from "./base-proposal-contract.js"; export * from "./uniswap-v3-lp-individual-proposal-contract.js"; export * from "./uniswap-v3-lp-set-proposal-contract.js"; +export * from "./uniswap-v3-pool-contract.js"; \ No newline at end of file diff --git a/packages/v1-core/src/contracts/uniswap-v3-pool-contract.test.ts b/packages/v1-core/src/contracts/uniswap-v3-pool-contract.test.ts new file mode 100644 index 00000000..436b4603 --- /dev/null +++ b/packages/v1-core/src/contracts/uniswap-v3-pool-contract.test.ts @@ -0,0 +1,93 @@ +import { vi } from "vitest"; +import { UniswapV3PoolContract } from "./uniswap-v3-pool-contract.js"; +import type { Config, GetPublicClientReturnType, GetWalletClientReturnType } from "@wagmi/core"; +import type { AddressString, SupportedChain } from "@pwndao/sdk-core"; + +vi.mock("@wagmi/core", () => ({ + getPublicClient: vi.fn().mockResolvedValue(true as unknown as GetPublicClientReturnType), + getWalletClient: vi.fn().mockResolvedValue(true as unknown as GetWalletClientReturnType), +})) + +const mockReadContract = vi.fn() +const mockWriteContract = vi.fn() + +const mockPublicClient = { readContract: mockReadContract } +const mockWalletClient = { writeContract: mockWriteContract } + +const config = {} as unknown as Config +const contractAddress = "0x123" as AddressString + +beforeEach(() => { + mockReadContract.mockReset(); + mockWriteContract.mockReset(); +}) + +describe("UniswapV3PoolContract", () => { + it("should return public client", async () => { + const contract = new UniswapV3PoolContract(config, contractAddress) + expect(contract).toBeDefined(); + const client = await contract.getClient(); + expect(client).toBeDefined(); + }) + + it("should return wallet client", async () => { + const contract = new UniswapV3PoolContract(config, contractAddress) + expect(contract).toBeDefined(); + const client = await contract.getWalletClient(); + expect(client).toBeDefined(); + }) + + it("should return slot0", async () => { + mockReadContract.mockResolvedValue([ + 1234n, // sqrtPriceX96 + 5, // tick + 1, // observationIndex + 2, // observationCardinality + 3, // observationCardinalityNext + 0, // feeProtocol + true // unlocked + ]); + + const _contract = new UniswapV3PoolContract(config, contractAddress) + _contract.getClient = vi.fn().mockResolvedValue(mockPublicClient) + const _slot0 = await _contract.slot0(); + + expect(mockReadContract).toHaveBeenCalledWith({ + address: contractAddress, + abi: expect.any(Array), + functionName: "slot0" + }); + + expect(_slot0).toEqual({ + sqrtPriceX96: 1234n, + tick: 5, + observationIndex: 1, + observationCardinality: 2, + observationCardinalityNext: 3, + feeProtocol: 0, + unlocked: true + }); + }) + + it("should increase observation cardinality next", async () => { + const contract = new UniswapV3PoolContract(config, contractAddress) + contract.getWalletClient = vi.fn().mockResolvedValue(mockWalletClient) + await contract.increaseObservationCardinalityNext(10); + expect(mockWriteContract).toHaveBeenCalledWith({ + address: contractAddress, + abi: expect.any(Array), + functionName: "increaseObservationCardinalityNext", + args: [10] + }); + }) + + it("should return can use as collateral", async () => { + const contract = new UniswapV3PoolContract(config, contractAddress) + contract.getClient = vi.fn().mockResolvedValue(mockPublicClient) + contract.slot0 = vi.fn().mockResolvedValue({ + observationCardinality: 2 + }) + const canUseAsCollateral = await contract.canUseAsCollateral(); + expect(canUseAsCollateral).toBe(true); + }) +}) \ No newline at end of file diff --git a/packages/v1-core/src/contracts/uniswap-v3-pool-contract.ts b/packages/v1-core/src/contracts/uniswap-v3-pool-contract.ts new file mode 100644 index 00000000..969f454d --- /dev/null +++ b/packages/v1-core/src/contracts/uniswap-v3-pool-contract.ts @@ -0,0 +1,93 @@ +import type { AddressString, SupportedChain } from "@pwndao/sdk-core"; +import { type Config, getPublicClient, type GetPublicClientReturnType, getWalletClient, type GetWalletClientReturnType } from "@wagmi/core"; +import { parseAbi } from "viem"; + +interface Slot0Response { + sqrtPriceX96: bigint; + tick: number; + observationIndex: number; + observationCardinality: number; + observationCardinalityNext: number; + feeProtocol: number; + unlocked: boolean; +} + +export interface IUniswapV3PoolContract { + slot0(): Promise; +} + +const uniswapV3PoolSlot0Abi = parseAbi([ + 'function slot0() view returns (uint160 sqrtPriceX96, int24 tick, uint16 observationIndex, uint16 observationCardinality, uint16 observationCardinalityNext, uint8 feeProtocol, bool unlocked)' +]); + +const uniswapV3PoolFnIncreaseObservationCardinalityNextAbi = parseAbi([ + 'function increaseObservationCardinalityNext(uint16 observationCardinalityNext) external' +]); + +export class UniswapV3PoolContract implements IUniswapV3PoolContract { + constructor( + private readonly config: Config, + private readonly contractAddress: AddressString, + ) {} + + async getClient(): Promise> { + try { + return getPublicClient(this.config, ) + } catch (error) { + throw new Error("UniswapV3PoolContract: Failed to get public client"); + } + } + + async getWalletClient(): Promise> { + try { + return getWalletClient(this.config) + } catch (error) { + throw new Error(`UniswapV3PoolContract getWalletClient: ${error}`); + } + } + + async slot0(): Promise { + const client = await this.getClient(); + try { + const response = await client?.readContract({ + address: this.contractAddress, + abi: uniswapV3PoolSlot0Abi, + functionName: "slot0", + }) + if (!response) { + throw new Error("UniswapV3PoolContract: Failed to read slot0"); + } + return { + sqrtPriceX96: response[0], + tick: response[1], + observationIndex: response[2], + observationCardinality: response[3], + observationCardinalityNext: response[4], + feeProtocol: response[5], + unlocked: response[6], + } + } catch (error) { + throw new Error(`UniswapV3PoolContract: ${error}`); + } + } + + async canUseAsCollateral(): Promise { + const slot0 = await this.slot0(); + return slot0.observationCardinality > 1; + } + + async increaseObservationCardinalityNext(observationCardinalityNext: number): Promise { + const client = await this.getWalletClient(); + try { + await client?.writeContract({ + address: this.contractAddress, + abi: uniswapV3PoolFnIncreaseObservationCardinalityNextAbi, + functionName: "increaseObservationCardinalityNext", + args: [observationCardinalityNext], + }) + } catch (error) { + throw new Error(`UniswapV3PoolContract: Failed to increase observation cardinality next: ${error}`); + } + } + +} \ No newline at end of file diff --git a/packages/v1-core/src/factories/create-uniswap-v3-lp-individual-proposal.ts b/packages/v1-core/src/factories/create-uniswap-v3-lp-individual-proposal.ts index 2fdc9479..35e40e44 100644 --- a/packages/v1-core/src/factories/create-uniswap-v3-lp-individual-proposal.ts +++ b/packages/v1-core/src/factories/create-uniswap-v3-lp-individual-proposal.ts @@ -3,7 +3,7 @@ import { type BaseTerm, type StrategyTerm, type IProposalStrategy, type IUniswap import { UniswapV3IndividualProposal } from "../models/proposals/uniswap-v3-lp-individual-proposal.js"; import { calculateDurationInSeconds, calculateMinCreditAmount } from "../utils/proposal-calculations.js"; import { calculateExpirationTimestamp } from "../utils/proposal-calculations.js"; -import { UniswapV3Position } from "../../../core/src/models/liquidity-position.js"; +import type { UniswapV3Position } from "../../../core/src/models/liquidity-position.js"; import { invariant } from 'ts-invariant' export type CreateUniswapV3IndividualProposalParams = BaseTerm & { token0Denominator: boolean; From ffe6d48f4e443d9a7343d97a76d540e4d8da7246 Mon Sep 17 00:00:00 2001 From: tohrxyz Date: Thu, 22 May 2025 17:55:23 +0200 Subject: [PATCH 18/19] chore: codegen commit --- bun.lockb | Bin 1800312 -> 1285928 bytes packages/v1-core/src/generated.ts | 32297 ++++++++++++++++++++-------- 2 files changed, 23229 insertions(+), 9068 deletions(-) diff --git a/bun.lockb b/bun.lockb index b386fd528c92576b8baa197a176531c17160590d..fc2188720fd687ee0151f0e152136a2e8b3fb4d7 100755 GIT binary patch delta 285517 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 z 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 z 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

#?k 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 cF=%S?g5 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 Date: Thu, 22 May 2025 18:31:15 +0200 Subject: [PATCH 19/19] dep: fix of package versions of wagmi and viem --- bun.lockb | Bin 1285928 -> 1288384 bytes package.json | 259 ++++++++++++++++++++++++++------------------------- 2 files changed, 130 insertions(+), 129 deletions(-) diff --git a/bun.lockb b/bun.lockb index fc2188720fd687ee0151f0e152136a2e8b3fb4d7..75ae3d14b7f5ecacbfef1e9934f58e49b64ee5c1 100755 GIT binary patch delta 273240 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�%>aPDrg(0Qj7HC8kr=(Os( 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