@bananapus/core-v6 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +112 -0
- package/SKILLS.md +151 -0
- package/docs/book.css +13 -0
- package/docs/book.toml +12 -0
- package/docs/solidity.min.js +74 -0
- package/docs/src/README.md +703 -0
- package/docs/src/SUMMARY.md +94 -0
- package/docs/src/src/JBChainlinkV3PriceFeed.sol/contract.JBChainlinkV3PriceFeed.md +83 -0
- package/docs/src/src/JBChainlinkV3SequencerPriceFeed.sol/contract.JBChainlinkV3SequencerPriceFeed.md +88 -0
- package/docs/src/src/JBController.sol/contract.JBController.md +1121 -0
- package/docs/src/src/JBDeadline.sol/contract.JBDeadline.md +84 -0
- package/docs/src/src/JBDirectory.sol/contract.JBDirectory.md +294 -0
- package/docs/src/src/JBERC20.sol/contract.JBERC20.md +190 -0
- package/docs/src/src/JBFeelessAddresses.sol/contract.JBFeelessAddresses.md +80 -0
- package/docs/src/src/JBFundAccessLimits.sol/contract.JBFundAccessLimits.md +253 -0
- package/docs/src/src/JBMultiTerminal.sol/contract.JBMultiTerminal.md +1472 -0
- package/docs/src/src/JBPermissions.sol/contract.JBPermissions.md +199 -0
- package/docs/src/src/JBPrices.sol/contract.JBPrices.md +154 -0
- package/docs/src/src/JBProjects.sol/contract.JBProjects.md +131 -0
- package/docs/src/src/JBRulesets.sol/contract.JBRulesets.md +677 -0
- package/docs/src/src/JBSplits.sol/contract.JBSplits.md +237 -0
- package/docs/src/src/JBTerminalStore.sol/contract.JBTerminalStore.md +591 -0
- package/docs/src/src/JBTokens.sol/contract.JBTokens.md +353 -0
- package/docs/src/src/README.md +25 -0
- package/docs/src/src/abstract/JBControlled.sol/abstract.JBControlled.md +64 -0
- package/docs/src/src/abstract/JBPermissioned.sol/abstract.JBPermissioned.md +84 -0
- package/docs/src/src/abstract/README.md +5 -0
- package/docs/src/src/enums/JBApprovalStatus.sol/enum.JBApprovalStatus.md +17 -0
- package/docs/src/src/enums/README.md +4 -0
- package/docs/src/src/interfaces/IJBCashOutHook.sol/interface.IJBCashOutHook.md +29 -0
- package/docs/src/src/interfaces/IJBCashOutTerminal.sol/interface.IJBCashOutTerminal.md +57 -0
- package/docs/src/src/interfaces/IJBControlled.sol/interface.IJBControlled.md +12 -0
- package/docs/src/src/interfaces/IJBController.sol/interface.IJBController.md +334 -0
- package/docs/src/src/interfaces/IJBDirectory.sol/interface.IJBDirectory.md +108 -0
- package/docs/src/src/interfaces/IJBDirectoryAccessControl.sol/interface.IJBDirectoryAccessControl.md +19 -0
- package/docs/src/src/interfaces/IJBFeeTerminal.sol/interface.IJBFeeTerminal.md +91 -0
- package/docs/src/src/interfaces/IJBFeelessAddresses.sol/interface.IJBFeelessAddresses.md +26 -0
- package/docs/src/src/interfaces/IJBFundAccessLimits.sol/interface.IJBFundAccessLimits.md +88 -0
- package/docs/src/src/interfaces/IJBMigratable.sol/interface.IJBMigratable.md +29 -0
- package/docs/src/src/interfaces/IJBMultiTerminal.sol/interface.IJBMultiTerminal.md +50 -0
- package/docs/src/src/interfaces/IJBPayHook.sol/interface.IJBPayHook.md +28 -0
- package/docs/src/src/interfaces/IJBPayoutTerminal.sol/interface.IJBPayoutTerminal.md +105 -0
- package/docs/src/src/interfaces/IJBPermissioned.sol/interface.IJBPermissioned.md +12 -0
- package/docs/src/src/interfaces/IJBPermissions.sol/interface.IJBPermissions.md +74 -0
- package/docs/src/src/interfaces/IJBPermitTerminal.sol/interface.IJBPermitTerminal.md +15 -0
- package/docs/src/src/interfaces/IJBPriceFeed.sol/interface.IJBPriceFeed.md +12 -0
- package/docs/src/src/interfaces/IJBPrices.sol/interface.IJBPrices.md +74 -0
- package/docs/src/src/interfaces/IJBProjectUriRegistry.sol/interface.IJBProjectUriRegistry.md +19 -0
- package/docs/src/src/interfaces/IJBProjects.sol/interface.IJBProjects.md +49 -0
- package/docs/src/src/interfaces/IJBRulesetApprovalHook.sol/interface.IJBRulesetApprovalHook.md +35 -0
- package/docs/src/src/interfaces/IJBRulesetDataHook.sol/interface.IJBRulesetDataHook.md +97 -0
- package/docs/src/src/interfaces/IJBRulesets.sol/interface.IJBRulesets.md +165 -0
- package/docs/src/src/interfaces/IJBSplitHook.sol/interface.IJBSplitHook.md +31 -0
- package/docs/src/src/interfaces/IJBSplits.sol/interface.IJBSplits.md +35 -0
- package/docs/src/src/interfaces/IJBTerminal.sol/interface.IJBTerminal.md +141 -0
- package/docs/src/src/interfaces/IJBTerminalStore.sol/interface.IJBTerminalStore.md +198 -0
- package/docs/src/src/interfaces/IJBToken.sol/interface.IJBToken.md +54 -0
- package/docs/src/src/interfaces/IJBTokenUriResolver.sol/interface.IJBTokenUriResolver.md +12 -0
- package/docs/src/src/interfaces/IJBTokens.sol/interface.IJBTokens.md +151 -0
- package/docs/src/src/interfaces/README.md +33 -0
- package/docs/src/src/libraries/JBCashOuts.sol/library.JBCashOuts.md +40 -0
- package/docs/src/src/libraries/JBConstants.sol/library.JBConstants.md +52 -0
- package/docs/src/src/libraries/JBCurrencyIds.sol/library.JBCurrencyIds.md +19 -0
- package/docs/src/src/libraries/JBFees.sol/library.JBFees.md +52 -0
- package/docs/src/src/libraries/JBFixedPointNumber.sol/library.JBFixedPointNumber.md +12 -0
- package/docs/src/src/libraries/JBMetadataResolver.sol/library.JBMetadataResolver.md +242 -0
- package/docs/src/src/libraries/JBRulesetMetadataResolver.sol/library.JBRulesetMetadataResolver.md +180 -0
- package/docs/src/src/libraries/JBSplitGroupIds.sol/library.JBSplitGroupIds.md +14 -0
- package/docs/src/src/libraries/JBSurplus.sol/library.JBSurplus.md +44 -0
- package/docs/src/src/libraries/README.md +12 -0
- package/docs/src/src/periphery/JBDeadline1Day.sol/contract.JBDeadline1Day.md +15 -0
- package/docs/src/src/periphery/JBDeadline3Days.sol/contract.JBDeadline3Days.md +15 -0
- package/docs/src/src/periphery/JBDeadline3Hours.sol/contract.JBDeadline3Hours.md +15 -0
- package/docs/src/src/periphery/JBDeadline7Days.sol/contract.JBDeadline7Days.md +15 -0
- package/docs/src/src/periphery/JBMatchingPriceFeed.sol/contract.JBMatchingPriceFeed.md +22 -0
- package/docs/src/src/periphery/README.md +8 -0
- package/docs/src/src/structs/JBAccountingContext.sol/struct.JBAccountingContext.md +20 -0
- package/docs/src/src/structs/JBAfterCashOutRecordedContext.sol/struct.JBAfterCashOutRecordedContext.md +43 -0
- package/docs/src/src/structs/JBAfterPayRecordedContext.sol/struct.JBAfterPayRecordedContext.md +42 -0
- package/docs/src/src/structs/JBBeforeCashOutRecordedContext.sol/struct.JBBeforeCashOutRecordedContext.md +45 -0
- package/docs/src/src/structs/JBBeforePayRecordedContext.sol/struct.JBBeforePayRecordedContext.md +41 -0
- package/docs/src/src/structs/JBCashOutHookSpecification.sol/struct.JBCashOutHookSpecification.md +22 -0
- package/docs/src/src/structs/JBCurrencyAmount.sol/struct.JBCurrencyAmount.md +17 -0
- package/docs/src/src/structs/JBFee.sol/struct.JBFee.md +20 -0
- package/docs/src/src/structs/JBFundAccessLimitGroup.sol/struct.JBFundAccessLimitGroup.md +39 -0
- package/docs/src/src/structs/JBPayHookSpecification.sol/struct.JBPayHookSpecification.md +22 -0
- package/docs/src/src/structs/JBPermissionsData.sol/struct.JBPermissionsData.md +21 -0
- package/docs/src/src/structs/JBRuleset.sol/struct.JBRuleset.md +55 -0
- package/docs/src/src/structs/JBRulesetConfig.sol/struct.JBRulesetConfig.md +51 -0
- package/docs/src/src/structs/JBRulesetMetadata.sol/struct.JBRulesetMetadata.md +79 -0
- package/docs/src/src/structs/JBRulesetWeightCache.sol/struct.JBRulesetWeightCache.md +16 -0
- package/docs/src/src/structs/JBRulesetWithMetadata.sol/struct.JBRulesetWithMetadata.md +16 -0
- package/docs/src/src/structs/JBSingleAllowance.sol/struct.JBSingleAllowance.md +26 -0
- package/docs/src/src/structs/JBSplit.sol/struct.JBSplit.md +49 -0
- package/docs/src/src/structs/JBSplitGroup.sol/struct.JBSplitGroup.md +17 -0
- package/docs/src/src/structs/JBSplitHookContext.sol/struct.JBSplitHookContext.md +29 -0
- package/docs/src/src/structs/JBTerminalConfig.sol/struct.JBTerminalConfig.md +16 -0
- package/docs/src/src/structs/JBTokenAmount.sol/struct.JBTokenAmount.md +23 -0
- package/docs/src/src/structs/README.md +25 -0
- package/foundry.lock +11 -0
- package/foundry.toml +41 -0
- package/package.json +38 -0
- package/remappings.txt +1 -0
- package/script/Deploy.s.sol +111 -0
- package/script/DeployPeriphery.s.sol +287 -0
- package/script/helpers/CoreDeploymentLib.sol +121 -0
- package/slither-ci.config.json +10 -0
- package/sphinx.lock +507 -0
- package/src/JBChainlinkV3PriceFeed.sol +77 -0
- package/src/JBChainlinkV3SequencerPriceFeed.sol +75 -0
- package/src/JBController.sol +1186 -0
- package/src/JBDeadline.sol +73 -0
- package/src/JBDirectory.sol +343 -0
- package/src/JBERC20.sol +131 -0
- package/src/JBFeelessAddresses.sol +54 -0
- package/src/JBFundAccessLimits.sol +308 -0
- package/src/JBMultiTerminal.sol +2024 -0
- package/src/JBPermissions.sol +252 -0
- package/src/JBPrices.sol +227 -0
- package/src/JBProjects.sol +126 -0
- package/src/JBRulesets.sol +1093 -0
- package/src/JBSplits.sol +324 -0
- package/src/JBTerminalStore.sol +908 -0
- package/src/JBTokens.sol +376 -0
- package/src/abstract/JBControlled.sol +48 -0
- package/src/abstract/JBPermissioned.sol +77 -0
- package/src/enums/JBApprovalStatus.sol +12 -0
- package/src/interfaces/IJBCashOutHook.sol +15 -0
- package/src/interfaces/IJBCashOutTerminal.sol +51 -0
- package/src/interfaces/IJBControlled.sol +10 -0
- package/src/interfaces/IJBController.sol +280 -0
- package/src/interfaces/IJBDirectory.sol +69 -0
- package/src/interfaces/IJBDirectoryAccessControl.sol +15 -0
- package/src/interfaces/IJBFeeTerminal.sol +61 -0
- package/src/interfaces/IJBFeelessAddresses.sol +17 -0
- package/src/interfaces/IJBFundAccessLimits.sol +94 -0
- package/src/interfaces/IJBMigratable.sol +24 -0
- package/src/interfaces/IJBMultiTerminal.sol +36 -0
- package/src/interfaces/IJBPayHook.sol +14 -0
- package/src/interfaces/IJBPayoutTerminal.sol +92 -0
- package/src/interfaces/IJBPermissioned.sol +10 -0
- package/src/interfaces/IJBPermissions.sol +71 -0
- package/src/interfaces/IJBPermitTerminal.sol +14 -0
- package/src/interfaces/IJBPriceFeed.sol +10 -0
- package/src/interfaces/IJBPrices.sol +65 -0
- package/src/interfaces/IJBProjectUriRegistry.sol +15 -0
- package/src/interfaces/IJBProjects.sol +27 -0
- package/src/interfaces/IJBRulesetApprovalHook.sol +21 -0
- package/src/interfaces/IJBRulesetDataHook.sol +56 -0
- package/src/interfaces/IJBRulesets.sol +151 -0
- package/src/interfaces/IJBSplitHook.sol +16 -0
- package/src/interfaces/IJBSplits.sol +28 -0
- package/src/interfaces/IJBTerminal.sol +120 -0
- package/src/interfaces/IJBTerminalStore.sol +225 -0
- package/src/interfaces/IJBToken.sol +39 -0
- package/src/interfaces/IJBTokenUriResolver.sol +10 -0
- package/src/interfaces/IJBTokens.sol +113 -0
- package/src/libraries/JBCashOuts.sol +120 -0
- package/src/libraries/JBConstants.sol +14 -0
- package/src/libraries/JBCurrencyIds.sol +7 -0
- package/src/libraries/JBFees.sol +28 -0
- package/src/libraries/JBFixedPointNumber.sol +12 -0
- package/src/libraries/JBMetadataResolver.sol +306 -0
- package/src/libraries/JBRulesetMetadataResolver.sol +160 -0
- package/src/libraries/JBSplitGroupIds.sol +7 -0
- package/src/libraries/JBSurplus.sol +40 -0
- package/src/periphery/JBDeadline1Day.sol +8 -0
- package/src/periphery/JBDeadline3Days.sol +8 -0
- package/src/periphery/JBDeadline3Hours.sol +8 -0
- package/src/periphery/JBDeadline7Days.sol +8 -0
- package/src/periphery/JBMatchingPriceFeed.sol +13 -0
- package/src/structs/JBAccountingContext.sol +12 -0
- package/src/structs/JBAfterCashOutRecordedContext.sol +30 -0
- package/src/structs/JBAfterPayRecordedContext.sol +29 -0
- package/src/structs/JBBeforeCashOutRecordedContext.sol +31 -0
- package/src/structs/JBBeforePayRecordedContext.sol +28 -0
- package/src/structs/JBCashOutHookSpecification.sol +15 -0
- package/src/structs/JBCurrencyAmount.sol +10 -0
- package/src/structs/JBFee.sol +12 -0
- package/src/structs/JBFundAccessLimitGroup.sol +28 -0
- package/src/structs/JBPayHookSpecification.sol +15 -0
- package/src/structs/JBPermissionsData.sol +13 -0
- package/src/structs/JBRuleset.sol +42 -0
- package/src/structs/JBRulesetConfig.sol +43 -0
- package/src/structs/JBRulesetMetadata.sol +56 -0
- package/src/structs/JBRulesetWeightCache.sol +9 -0
- package/src/structs/JBRulesetWithMetadata.sol +12 -0
- package/src/structs/JBSingleAllowance.sol +16 -0
- package/src/structs/JBSplit.sol +37 -0
- package/src/structs/JBSplitGroup.sol +12 -0
- package/src/structs/JBSplitHookContext.sol +20 -0
- package/src/structs/JBTerminalConfig.sol +12 -0
- package/src/structs/JBTokenAmount.sol +14 -0
- package/test/AuditExploits.t.sol +2710 -0
- package/test/ComprehensiveInvariant.t.sol +298 -0
- package/test/EconomicSimulation.t.sol +340 -0
- package/test/EntryPointPermutations.t.sol +671 -0
- package/test/FlashLoanAttacks.t.sol +792 -0
- package/test/PermissionEscalation.t.sol +679 -0
- package/test/RulesetTransitions.t.sol +699 -0
- package/test/SplitLoopTests.t.sol +731 -0
- package/test/TestAccessToFunds.sol +2644 -0
- package/test/TestCashOut.sol +185 -0
- package/test/TestCashOutCountFor.sol +272 -0
- package/test/TestCashOutHooks.sol +317 -0
- package/test/TestCashOutTimingEdge.sol +229 -0
- package/test/TestDurationUnderflow.sol +220 -0
- package/test/TestFeeProcessingFailure.sol +208 -0
- package/test/TestFees.sol +604 -0
- package/test/TestInterfaceSupport.sol +62 -0
- package/test/TestJBERC20Inheritance.sol +91 -0
- package/test/TestLaunchProject.sol +176 -0
- package/test/TestMetaTx.sol +203 -0
- package/test/TestMetadataParserLib.sol +438 -0
- package/test/TestMigrationHeldFees.sol +249 -0
- package/test/TestMintTokensOf.sol +172 -0
- package/test/TestMultiTokenSurplus.sol +206 -0
- package/test/TestMultipleAccessLimits.sol +642 -0
- package/test/TestPayBurnRedeemFlow.sol +180 -0
- package/test/TestPayHooks.sol +190 -0
- package/test/TestPermissions.sol +305 -0
- package/test/TestPermissionsEdge.sol +286 -0
- package/test/TestPermit2Terminal.sol +339 -0
- package/test/TestRulesetQueueing.sol +1001 -0
- package/test/TestRulesetQueuingStress.sol +778 -0
- package/test/TestRulesetWeightCaching.sol +177 -0
- package/test/TestSplits.sol +369 -0
- package/test/TestTerminalMigration.sol +167 -0
- package/test/TestTokenFlow.sol +174 -0
- package/test/WeirdTokenTests.t.sol +764 -0
- package/test/formal/BondingCurveProperties.t.sol +411 -0
- package/test/formal/FeeProperties.t.sol +246 -0
- package/test/helpers/JBTest.sol +129 -0
- package/test/helpers/MetadataResolverHelper.sol +116 -0
- package/test/helpers/TestBaseWorkflow.sol +317 -0
- package/test/invariants/Phase3DeepInvariant.t.sol +404 -0
- package/test/invariants/RulesetsInvariant.t.sol +115 -0
- package/test/invariants/TerminalStoreInvariant.t.sol +220 -0
- package/test/invariants/TokensInvariant.t.sol +184 -0
- package/test/invariants/handlers/ComprehensiveHandler.sol +285 -0
- package/test/invariants/handlers/EconomicHandler.sol +347 -0
- package/test/invariants/handlers/Phase3Handler.sol +414 -0
- package/test/invariants/handlers/RulesetsHandler.sol +111 -0
- package/test/invariants/handlers/TerminalStoreHandler.sol +146 -0
- package/test/invariants/handlers/TokensHandler.sol +127 -0
- package/test/mock/ERC2771ForwarderMock.sol +37 -0
- package/test/mock/MockERC20.sol +18 -0
- package/test/mock/MockMaliciousBeneficiary.sol +67 -0
- package/test/mock/MockMaliciousSplitHook.sol +42 -0
- package/test/mock/MockPriceFeed.sol +20 -0
- package/test/trees/JBController/burnTokensOf.tree +9 -0
- package/test/trees/JBController/claimTokensFor.tree +5 -0
- package/test/trees/JBController/deployERC20For.tree +5 -0
- package/test/trees/JBController/getRulesetOf.tree +5 -0
- package/test/trees/JBController/launchProjectFor.tree +12 -0
- package/test/trees/JBController/launchRulesetsFor.tree +8 -0
- package/test/trees/JBController/migrateController.tree +12 -0
- package/test/trees/JBController/mintTokensOf.tree +12 -0
- package/test/trees/JBController/payReservedTokenToTerminal.tree +8 -0
- package/test/trees/JBController/receiveMigrationFrom.tree +4 -0
- package/test/trees/JBController/sendReservedTokensToSplitsOf.tree +12 -0
- package/test/trees/JBController/setMetadataOf.tree +5 -0
- package/test/trees/JBController/setSplitGroupsOf.tree +5 -0
- package/test/trees/JBController/setTokenFor.tree +5 -0
- package/test/trees/JBController/transferCreditsFrom.tree +8 -0
- package/test/trees/JBDirectory/primaryTerminalOf.tree +8 -0
- package/test/trees/JBDirectory/setControllerOf.tree +11 -0
- package/test/trees/JBDirectory/setPrimaryTerminalOf.tree +15 -0
- package/test/trees/JBDirectory/setTerminalsOf.tree +11 -0
- package/test/trees/JBERC20/initialize.tree +7 -0
- package/test/trees/JBERC20/name.tree +5 -0
- package/test/trees/JBERC20/nonces.tree +5 -0
- package/test/trees/JBERC20/symbol.tree +5 -0
- package/test/trees/JBFeelessAddresses/setFeelessAddress.tree +5 -0
- package/test/trees/JBFeelessAddresses/supportsInterface.tree +5 -0
- package/test/trees/JBFundAccessLimits/payoutLimitOf.tree +5 -0
- package/test/trees/JBFundAccessLimits/payoutLimitsOf.tree +8 -0
- package/test/trees/JBFundAccessLimits/setFundAccessLimitsFor.tree +18 -0
- package/test/trees/JBFundAccessLimits/surplusAllowanceOf.tree +5 -0
- package/test/trees/JBFundAccessLimits/surplusAllowancesOf.tree +8 -0
- package/test/trees/JBMetadataResolver/getDataFor.tree +8 -0
- package/test/trees/JBMultiTerminal/accountingContextsOf.tree +5 -0
- package/test/trees/JBMultiTerminal/addAccountingContextsFor.tree +10 -0
- package/test/trees/JBMultiTerminal/addToBalanceOf.tree +23 -0
- package/test/trees/JBMultiTerminal/cashOutTokensOf.tree +23 -0
- package/test/trees/JBMultiTerminal/executePayout.tree +32 -0
- package/test/trees/JBMultiTerminal/executeProcessFee.tree +14 -0
- package/test/trees/JBMultiTerminal/migrateBalanceOf.tree +12 -0
- package/test/trees/JBMultiTerminal/pay.tree +23 -0
- package/test/trees/JBMultiTerminal/processHeldFeesOf.tree +8 -0
- package/test/trees/JBMultiTerminal/sendPayoutsOf.tree +34 -0
- package/test/trees/JBMultiTerminal/useAllowanceOf.tree +16 -0
- package/test/trees/JBPermissions/hasPermission.tree +8 -0
- package/test/trees/JBPermissions/hasPermissions.tree +8 -0
- package/test/trees/JBPermissions/setPermissionsFor.tree +5 -0
- package/test/trees/JBPrices/addPriceFeedFor.tree +14 -0
- package/test/trees/JBPrices/pricePerUnitOf.tree +11 -0
- package/test/trees/JBProjects/createFor.tree +11 -0
- package/test/trees/JBProjects/setTokenUriResolver.tree +5 -0
- package/test/trees/JBProjects/supportsInterface.tree +9 -0
- package/test/trees/JBProjects/tokenURI.tree +5 -0
- package/test/trees/JBRulesets/currentApprovalStatusForLatestRulesetOf.tree +8 -0
- package/test/trees/JBRulesets/currentOf.tree +12 -0
- package/test/trees/JBRulesets/getRulesetOf.tree +5 -0
- package/test/trees/JBRulesets/latestQueuedRulesetOf.tree +10 -0
- package/test/trees/JBRulesets/rulesetsOf.tree +11 -0
- package/test/trees/JBRulesets/upcomingRulesetOf.tree +20 -0
- package/test/trees/JBRulesets/updateRulesetWeightCache.tree +5 -0
- package/test/trees/JBSplits/setSplitGroupsOf.tree +17 -0
- package/test/trees/JBSplits/splitsOf.tree +5 -0
- package/test/trees/JBTerminalStore/currentReclaimableSurplusOf.tree +16 -0
- package/test/trees/JBTerminalStore/currentSurplusOf.tree +25 -0
- package/test/trees/JBTerminalStore/currentTotalSurplusOf.tree +5 -0
- package/test/trees/JBTerminalStore/recordCashOutsFor.tree +16 -0
- package/test/trees/JBTerminalStore/recordPaymentFrom.tree +14 -0
- package/test/trees/JBTerminalStore/recordPayoutFor.tree +10 -0
- package/test/trees/JBTerminalStore/recordTerminalMigration.tree +5 -0
- package/test/trees/JBTerminalStore/recordUsedAllowanceOf.tree +10 -0
- package/test/trees/JBTokens/burnFrom.tree +10 -0
- package/test/trees/JBTokens/claimTokensFor.tree +10 -0
- package/test/trees/JBTokens/deployERC20For.tree +12 -0
- package/test/trees/JBTokens/mintFor.tree +10 -0
- package/test/trees/JBTokens/setTokenFor.tree +11 -0
- package/test/trees/JBTokens/totalBalanceOf.tree +5 -0
- package/test/trees/JBTokens/totalSupplyOf.tree +5 -0
- package/test/trees/JBTokens/transferCreditsFrom.tree +8 -0
- package/test/trees/mintTokensOf.tree +12 -0
- package/test/units/static/JBChainlinkV3PriceFeed/TestPriceFeed.sol +220 -0
- package/test/units/static/JBController/JBControllerSetup.sol +40 -0
- package/test/units/static/JBController/TestBurnTokensOf.sol +107 -0
- package/test/units/static/JBController/TestClaimTokensFor.sol +60 -0
- package/test/units/static/JBController/TestDeployErc20For.sol +80 -0
- package/test/units/static/JBController/TestLaunchProjectFor.sol +282 -0
- package/test/units/static/JBController/TestLaunchRulesetsFor.sol +322 -0
- package/test/units/static/JBController/TestMigrateController.sol +148 -0
- package/test/units/static/JBController/TestMintTokensOfUnits.sol +102 -0
- package/test/units/static/JBController/TestPayReservedTokenToTerminal.sol +71 -0
- package/test/units/static/JBController/TestReceiveMigrationFrom.sol +95 -0
- package/test/units/static/JBController/TestRulesetViews.sol +219 -0
- package/test/units/static/JBController/TestSendReservedTokensToSplitsOf.sol +595 -0
- package/test/units/static/JBController/TestSetSplitGroupsOf.sol +63 -0
- package/test/units/static/JBController/TestSetTokenFor.sol +227 -0
- package/test/units/static/JBController/TestSetUriOf.sol +53 -0
- package/test/units/static/JBController/TestTransferCreditsFrom.sol +159 -0
- package/test/units/static/JBDeadline/TestDeadlineFuzz.sol +194 -0
- package/test/units/static/JBDirectory/JBDirectorySetup.sol +22 -0
- package/test/units/static/JBDirectory/TestPrimaryTerminalOf.sol +122 -0
- package/test/units/static/JBDirectory/TestSetControllerOf.sol +173 -0
- package/test/units/static/JBDirectory/TestSetControllerOfMigrationOrder.sol +98 -0
- package/test/units/static/JBDirectory/TestSetPrimaryTerminalOf.sol +169 -0
- package/test/units/static/JBDirectory/TestSetTerminalsOf.sol +128 -0
- package/test/units/static/JBERC20/JBERC20Setup.sol +20 -0
- package/test/units/static/JBERC20/SigUtils.sol +34 -0
- package/test/units/static/JBERC20/TestInitialize.sol +54 -0
- package/test/units/static/JBERC20/TestName.sol +30 -0
- package/test/units/static/JBERC20/TestNonces.sol +59 -0
- package/test/units/static/JBERC20/TestSymbol.sol +31 -0
- package/test/units/static/JBFeelessAdresses/JBFeelessSetup.sol +20 -0
- package/test/units/static/JBFeelessAdresses/TestInterfaces.sol +29 -0
- package/test/units/static/JBFeelessAdresses/TestSetFeelessAddress.sol +35 -0
- package/test/units/static/JBFees/TestFeesFuzz.sol +78 -0
- package/test/units/static/JBFixedPointNumber/TestAdjustDecimals.sol +16 -0
- package/test/units/static/JBFixedPointNumber/TestAdjustDecimalsFuzz.sol +71 -0
- package/test/units/static/JBFundAccessLimits/JBFundAccessSetup.sol +21 -0
- package/test/units/static/JBFundAccessLimits/TestFundAccessLimitsEdge.sol +159 -0
- package/test/units/static/JBFundAccessLimits/TestPayoutLimitOf.sol +56 -0
- package/test/units/static/JBFundAccessLimits/TestPayoutLimitsOf.sol +94 -0
- package/test/units/static/JBFundAccessLimits/TestSetFundAccessLimitsFor.sol +182 -0
- package/test/units/static/JBFundAccessLimits/TestSurplusAllowanceOf.sol +61 -0
- package/test/units/static/JBFundAccessLimits/TestSurplusAllowancesOf.sol +96 -0
- package/test/units/static/JBMetadataResolver/TestGetDataFor.sol +89 -0
- package/test/units/static/JBMetadataResolver/TestMetadataResolverFuzz.sol +227 -0
- package/test/units/static/JBMetadataResolver/TestMetadataResolverM20M21.sol +245 -0
- package/test/units/static/JBMultiTerminal/JBMultiTerminalSetup.sol +39 -0
- package/test/units/static/JBMultiTerminal/TestAccountingContextsOf.sol +65 -0
- package/test/units/static/JBMultiTerminal/TestAddAccountingContextsFor.sol +313 -0
- package/test/units/static/JBMultiTerminal/TestAddToBalanceOf.sol +432 -0
- package/test/units/static/JBMultiTerminal/TestCashOutTokensOf.sol +478 -0
- package/test/units/static/JBMultiTerminal/TestExecutePayout.sol +577 -0
- package/test/units/static/JBMultiTerminal/TestExecuteProcessFee.sol +176 -0
- package/test/units/static/JBMultiTerminal/TestMigrateBalanceOf.sol +190 -0
- package/test/units/static/JBMultiTerminal/TestPay.sol +514 -0
- package/test/units/static/JBMultiTerminal/TestProcessHeldFeesOf.sol +29 -0
- package/test/units/static/JBMultiTerminal/TestSendPayoutsOf.sol +243 -0
- package/test/units/static/JBMultiTerminal/TestUseAllowanceOf.sol +310 -0
- package/test/units/static/JBPermissions/JBPermissionsSetup.sol +18 -0
- package/test/units/static/JBPermissions/TestHasPermission.sol +50 -0
- package/test/units/static/JBPermissions/TestHasPermissions.sol +93 -0
- package/test/units/static/JBPermissions/TestSetPermissionsFor.sol +62 -0
- package/test/units/static/JBPrices/JBPricesSetup.sol +26 -0
- package/test/units/static/JBPrices/TestAddPriceFeedFor.sol +102 -0
- package/test/units/static/JBPrices/TestPricePerUnitOf.sol +129 -0
- package/test/units/static/JBPrices/TestPrices.sol +262 -0
- package/test/units/static/JBProjects/JBProjectsSetup.sol +20 -0
- package/test/units/static/JBProjects/TestCreateFor.sol +69 -0
- package/test/units/static/JBProjects/TestInitialProject.sol +19 -0
- package/test/units/static/JBProjects/TestInterfaces.sol +27 -0
- package/test/units/static/JBProjects/TestSetResolver.sol +36 -0
- package/test/units/static/JBProjects/TestTokenUri.sol +38 -0
- package/test/units/static/JBRulesetMetadataResolver/TestSetCashOutTaxRateTo.sol +99 -0
- package/test/units/static/JBRulesets/JBRulesetsSetup.sol +21 -0
- package/test/units/static/JBRulesets/TestCurrentApprovalStatusForLatestRulesetOf.sol +257 -0
- package/test/units/static/JBRulesets/TestCurrentOf.sol +231 -0
- package/test/units/static/JBRulesets/TestGetRulesetOf.sol +94 -0
- package/test/units/static/JBRulesets/TestLatestQueuedRulesetOf.sol +252 -0
- package/test/units/static/JBRulesets/TestRulesets.sol +617 -0
- package/test/units/static/JBRulesets/TestRulesetsOf.sol +37 -0
- package/test/units/static/JBRulesets/TestUpcomingRulesetOf.sol +526 -0
- package/test/units/static/JBRulesets/TestUpdateRulesetWeightCache.sol +91 -0
- package/test/units/static/JBSplits/JBSplitsSetup.sol +23 -0
- package/test/units/static/JBSplits/TestSelfManagedSplitGroups.sol +502 -0
- package/test/units/static/JBSplits/TestSetSplitGroupsOf.sol +370 -0
- package/test/units/static/JBSplits/TestSplitsLockedEdge.sol +262 -0
- package/test/units/static/JBSplits/TestSplitsOf.sol +24 -0
- package/test/units/static/JBSplits/TestSplitsPacking.sol +33 -0
- package/test/units/static/JBSurplus/TestSurplusFuzz.sol +125 -0
- package/test/units/static/JBTerminalStore/JBTerminalStoreSetup.sol +23 -0
- package/test/units/static/JBTerminalStore/TestCurrentReclaimableSurplusOf.sol +434 -0
- package/test/units/static/JBTerminalStore/TestCurrentSurplusOf.sol +428 -0
- package/test/units/static/JBTerminalStore/TestCurrentTotalSurplusOf.sol +65 -0
- package/test/units/static/JBTerminalStore/TestRecordCashOutsFor.sol +479 -0
- package/test/units/static/JBTerminalStore/TestRecordPaymentFrom.sol +508 -0
- package/test/units/static/JBTerminalStore/TestRecordPayoutFor.sol +257 -0
- package/test/units/static/JBTerminalStore/TestRecordTerminalMigration.sol +131 -0
- package/test/units/static/JBTerminalStore/TestRecordUsedAllowanceOf.sol +390 -0
- package/test/units/static/JBTerminalStore/TestUint224Overflow.sol +187 -0
- package/test/units/static/JBTokens/JBTokensSetup.sol +23 -0
- package/test/units/static/JBTokens/TestBurnFrom.sol +104 -0
- package/test/units/static/JBTokens/TestClaimTokensFor.sol +107 -0
- package/test/units/static/JBTokens/TestDeployERC20ForUnits.sol +89 -0
- package/test/units/static/JBTokens/TestMintFor.sol +97 -0
- package/test/units/static/JBTokens/TestSetTokenFor.sol +95 -0
- package/test/units/static/JBTokens/TestTotalBalanceOf.sol +65 -0
- package/test/units/static/JBTokens/TestTotalSupplyOf.sol +56 -0
- package/test/units/static/JBTokens/TestTransferCreditsFrom.sol +54 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity 0.8.23;
|
|
3
|
+
|
|
4
|
+
import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
|
|
5
|
+
import {JBFundAccessSetup} from "./JBFundAccessSetup.sol";
|
|
6
|
+
|
|
7
|
+
contract TestPayoutLimitOf_Local is JBFundAccessSetup {
|
|
8
|
+
uint256 _projectId = 1;
|
|
9
|
+
uint256 _ruleset = block.timestamp;
|
|
10
|
+
uint224 _payoutLimit = 1e18;
|
|
11
|
+
uint32 _currency = uint32(uint160(JBConstants.NATIVE_TOKEN));
|
|
12
|
+
address _terminal = address(1);
|
|
13
|
+
address _token = JBConstants.NATIVE_TOKEN;
|
|
14
|
+
|
|
15
|
+
function setUp() public {
|
|
16
|
+
super.fundAccessSetup();
|
|
17
|
+
|
|
18
|
+
// Fund Access config
|
|
19
|
+
JBFundAccessLimitGroup[] memory _fundAccessLimitGroup = new JBFundAccessLimitGroup[](1);
|
|
20
|
+
{
|
|
21
|
+
// Specify a payout limit.
|
|
22
|
+
JBCurrencyAmount[] memory _payoutLimits = new JBCurrencyAmount[](1);
|
|
23
|
+
_payoutLimits[0] =
|
|
24
|
+
JBCurrencyAmount({amount: _payoutLimit, currency: uint32(uint160(JBConstants.NATIVE_TOKEN))});
|
|
25
|
+
|
|
26
|
+
// Specify a surplus allowance.
|
|
27
|
+
JBCurrencyAmount[] memory _surplusAllowances = new JBCurrencyAmount[](0);
|
|
28
|
+
|
|
29
|
+
_fundAccessLimitGroup[0] = JBFundAccessLimitGroup({
|
|
30
|
+
terminal: address(_terminal),
|
|
31
|
+
token: JBConstants.NATIVE_TOKEN,
|
|
32
|
+
payoutLimits: _payoutLimits,
|
|
33
|
+
surplusAllowances: _surplusAllowances
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
bytes memory _controllerCall = abi.encodeCall(IJBDirectory.controllerOf, (1));
|
|
38
|
+
bytes memory _return = abi.encode(address(this));
|
|
39
|
+
|
|
40
|
+
mockExpect(address(directory), _controllerCall, _return);
|
|
41
|
+
|
|
42
|
+
_fundAccess.setFundAccessLimitsFor(_projectId, _ruleset, _fundAccessLimitGroup);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function test_WhenTheProjectHasTheSpecificPayoutLimit() external view {
|
|
46
|
+
// it will return the uint256 payoutLimit
|
|
47
|
+
uint256 _returnedLimit = _fundAccess.payoutLimitOf(_projectId, _ruleset, _terminal, _token, _currency);
|
|
48
|
+
assertEq(_returnedLimit, _payoutLimit);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function test_WhenTheProjectDoesntHaveTheSpecificPayoutLimit() external view {
|
|
52
|
+
// it will return 0
|
|
53
|
+
uint256 empty = _fundAccess.payoutLimitOf(1, 1, address(1), address(2), 1);
|
|
54
|
+
assertEq(empty, 0);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity 0.8.23;
|
|
3
|
+
|
|
4
|
+
import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
|
|
5
|
+
import {JBFundAccessSetup} from "./JBFundAccessSetup.sol";
|
|
6
|
+
|
|
7
|
+
contract TestPayoutLimitsOf_Local is JBFundAccessSetup {
|
|
8
|
+
uint256 _projectId = 1;
|
|
9
|
+
uint256 _ruleset = block.timestamp;
|
|
10
|
+
uint224 _payoutLimit = 1e18;
|
|
11
|
+
uint224 _payoutLimit2 = 1e6;
|
|
12
|
+
uint32 _currency = uint32(uint160(JBConstants.NATIVE_TOKEN));
|
|
13
|
+
address _terminal = address(1);
|
|
14
|
+
address _terminal2 = address(2);
|
|
15
|
+
address _someToken = makeAddr("sometoken");
|
|
16
|
+
|
|
17
|
+
function setUp() public {
|
|
18
|
+
super.fundAccessSetup();
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
modifier whenAProjectHasPayoutLimits() {
|
|
22
|
+
// Fund Access config
|
|
23
|
+
JBFundAccessLimitGroup[] memory _fundAccessLimitGroup = new JBFundAccessLimitGroup[](2);
|
|
24
|
+
{
|
|
25
|
+
// Specify a payout limit.
|
|
26
|
+
JBCurrencyAmount[] memory _payoutLimits = new JBCurrencyAmount[](2);
|
|
27
|
+
_payoutLimits[0] =
|
|
28
|
+
JBCurrencyAmount({amount: _payoutLimit, currency: uint32(uint160(JBConstants.NATIVE_TOKEN))});
|
|
29
|
+
|
|
30
|
+
// Specify a second payout limit.
|
|
31
|
+
_payoutLimits[1] = JBCurrencyAmount({amount: _payoutLimit2, currency: uint32(uint160(_someToken))});
|
|
32
|
+
|
|
33
|
+
// Specify a surplus allowance.
|
|
34
|
+
JBCurrencyAmount[] memory _surplusAllowances = new JBCurrencyAmount[](0);
|
|
35
|
+
|
|
36
|
+
_fundAccessLimitGroup[0] = JBFundAccessLimitGroup({
|
|
37
|
+
terminal: address(_terminal),
|
|
38
|
+
token: JBConstants.NATIVE_TOKEN,
|
|
39
|
+
payoutLimits: _payoutLimits,
|
|
40
|
+
surplusAllowances: _surplusAllowances
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
_fundAccessLimitGroup[1] = JBFundAccessLimitGroup({
|
|
44
|
+
terminal: address(_terminal2),
|
|
45
|
+
token: JBConstants.NATIVE_TOKEN,
|
|
46
|
+
payoutLimits: _payoutLimits,
|
|
47
|
+
surplusAllowances: _surplusAllowances
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
bytes memory _controllerCall = abi.encodeCall(IJBDirectory.controllerOf, (1));
|
|
52
|
+
bytes memory _return = abi.encode(address(this));
|
|
53
|
+
|
|
54
|
+
mockExpect(address(directory), _controllerCall, _return);
|
|
55
|
+
|
|
56
|
+
_fundAccess.setFundAccessLimitsFor(_projectId, _ruleset, _fundAccessLimitGroup);
|
|
57
|
+
_fundAccess.setFundAccessLimitsFor(_projectId, _ruleset + 1, _fundAccessLimitGroup);
|
|
58
|
+
_;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function test_GivenTheyAreConfiguredForASpecificToken() external whenAProjectHasPayoutLimits {
|
|
62
|
+
// it will return them
|
|
63
|
+
|
|
64
|
+
JBCurrencyAmount[] memory payoutLimits =
|
|
65
|
+
_fundAccess.payoutLimitsOf(_projectId, _ruleset, _terminal, JBConstants.NATIVE_TOKEN);
|
|
66
|
+
|
|
67
|
+
assertEq(payoutLimits[0].currency, uint32(uint160(JBConstants.NATIVE_TOKEN)));
|
|
68
|
+
assertEq(payoutLimits[0].amount, _payoutLimit);
|
|
69
|
+
assertEq(payoutLimits[1].currency, uint32(uint160(_someToken)));
|
|
70
|
+
assertEq(payoutLimits[1].amount, _payoutLimit2);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function test_GivenTheyAreConfiguredForASpecificTerminal() external whenAProjectHasPayoutLimits {
|
|
74
|
+
// it will return them
|
|
75
|
+
JBCurrencyAmount[] memory payoutLimits =
|
|
76
|
+
_fundAccess.payoutLimitsOf(_projectId, _ruleset, _terminal2, JBConstants.NATIVE_TOKEN);
|
|
77
|
+
|
|
78
|
+
assertEq(payoutLimits[0].currency, uint32(uint160(JBConstants.NATIVE_TOKEN)));
|
|
79
|
+
assertEq(payoutLimits[0].amount, _payoutLimit);
|
|
80
|
+
assertEq(payoutLimits[1].currency, uint32(uint160(_someToken)));
|
|
81
|
+
assertEq(payoutLimits[1].amount, _payoutLimit2);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function test_GivenTheyAreConfiguredForASpecificRulesetId() external whenAProjectHasPayoutLimits {
|
|
85
|
+
// it will return them
|
|
86
|
+
JBCurrencyAmount[] memory payoutLimits =
|
|
87
|
+
_fundAccess.payoutLimitsOf(_projectId, _ruleset + 1, _terminal2, JBConstants.NATIVE_TOKEN);
|
|
88
|
+
|
|
89
|
+
assertEq(payoutLimits[0].currency, uint32(uint160(JBConstants.NATIVE_TOKEN)));
|
|
90
|
+
assertEq(payoutLimits[0].amount, _payoutLimit);
|
|
91
|
+
assertEq(payoutLimits[1].currency, uint32(uint160(_someToken)));
|
|
92
|
+
assertEq(payoutLimits[1].amount, _payoutLimit2);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity 0.8.23;
|
|
3
|
+
|
|
4
|
+
import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
|
|
5
|
+
import {JBFundAccessSetup} from "./JBFundAccessSetup.sol";
|
|
6
|
+
|
|
7
|
+
contract TestSetFundAccessLimitsFor_Local is JBFundAccessSetup {
|
|
8
|
+
uint256 _projectId = 1;
|
|
9
|
+
uint256 _ruleset = block.timestamp;
|
|
10
|
+
uint32 _validCurrency = uint32(uint160(JBConstants.NATIVE_TOKEN));
|
|
11
|
+
address _terminal = address(1);
|
|
12
|
+
address _terminal2 = address(2);
|
|
13
|
+
address _someToken = makeAddr("sometoken");
|
|
14
|
+
uint224 _validLimit = 1e18;
|
|
15
|
+
|
|
16
|
+
function setUp() public {
|
|
17
|
+
super.fundAccessSetup();
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function test_WhenCallerIsNotController() external {
|
|
21
|
+
// it will revert
|
|
22
|
+
|
|
23
|
+
bytes memory _controllerCall = abi.encodeCall(IJBDirectory.controllerOf, (1));
|
|
24
|
+
bytes memory _return = abi.encode(address(makeAddr("notThisContract")));
|
|
25
|
+
|
|
26
|
+
mockExpect(address(directory), _controllerCall, _return);
|
|
27
|
+
|
|
28
|
+
// Fund Access config
|
|
29
|
+
JBFundAccessLimitGroup[] memory _fundAccessLimitGroup = new JBFundAccessLimitGroup[](2);
|
|
30
|
+
|
|
31
|
+
vm.expectRevert(
|
|
32
|
+
abi.encodeWithSelector(
|
|
33
|
+
JBControlled.JBControlled_ControllerUnauthorized.selector, address(makeAddr("notThisContract"))
|
|
34
|
+
)
|
|
35
|
+
);
|
|
36
|
+
_fundAccess.setFundAccessLimitsFor(_projectId, _ruleset, _fundAccessLimitGroup);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
modifier whenCallerIsControllerOfProject() {
|
|
40
|
+
bytes memory _controllerCall = abi.encodeCall(IJBDirectory.controllerOf, (1));
|
|
41
|
+
bytes memory _return = abi.encode(address(this));
|
|
42
|
+
|
|
43
|
+
mockExpect(address(directory), _controllerCall, _return);
|
|
44
|
+
_;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function test_GivenPayoutLimitCurrencyIsNotGivenInAscendingOrder() external whenCallerIsControllerOfProject {
|
|
48
|
+
// it will revert INVALID_PAYOUT_LIMIT_CURRENCY_ORDERING
|
|
49
|
+
|
|
50
|
+
// Fund Access config
|
|
51
|
+
JBFundAccessLimitGroup[] memory _fundAccessLimitGroup = new JBFundAccessLimitGroup[](2);
|
|
52
|
+
{
|
|
53
|
+
// Specify a payout limit.
|
|
54
|
+
JBCurrencyAmount[] memory _payoutLimits = new JBCurrencyAmount[](2);
|
|
55
|
+
_payoutLimits[0] = JBCurrencyAmount({amount: _validLimit, currency: type(uint32).max});
|
|
56
|
+
|
|
57
|
+
// Specify a second payout limit.
|
|
58
|
+
_payoutLimits[1] =
|
|
59
|
+
JBCurrencyAmount({amount: _validLimit, currency: uint32(uint160(JBConstants.NATIVE_TOKEN))});
|
|
60
|
+
|
|
61
|
+
// Specify a surplus allowance.
|
|
62
|
+
JBCurrencyAmount[] memory _surplusAllowances = new JBCurrencyAmount[](0);
|
|
63
|
+
|
|
64
|
+
_fundAccessLimitGroup[0] = JBFundAccessLimitGroup({
|
|
65
|
+
terminal: address(_terminal),
|
|
66
|
+
token: JBConstants.NATIVE_TOKEN,
|
|
67
|
+
payoutLimits: _payoutLimits,
|
|
68
|
+
surplusAllowances: _surplusAllowances
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
vm.expectRevert(JBFundAccessLimits.JBFundAccessLimits_InvalidPayoutLimitCurrencyOrdering.selector);
|
|
73
|
+
_fundAccess.setFundAccessLimitsFor(_projectId, _ruleset, _fundAccessLimitGroup);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function test_GivenSurplusAllowanceCurrenciesAreNotAscendingOrder() external whenCallerIsControllerOfProject {
|
|
77
|
+
// it will revert INVALID_SURPLUS_ALLOWANCE_CURRENCY_ORDERING
|
|
78
|
+
|
|
79
|
+
// Fund Access config
|
|
80
|
+
JBFundAccessLimitGroup[] memory _fundAccessLimitGroup = new JBFundAccessLimitGroup[](2);
|
|
81
|
+
{
|
|
82
|
+
// Specify a payout limit.
|
|
83
|
+
JBCurrencyAmount[] memory _payoutLimits = new JBCurrencyAmount[](1);
|
|
84
|
+
_payoutLimits[0] = JBCurrencyAmount({amount: _validLimit, currency: _validCurrency});
|
|
85
|
+
|
|
86
|
+
// Specify a surplus allowance.
|
|
87
|
+
JBCurrencyAmount[] memory _surplusAllowances = new JBCurrencyAmount[](2);
|
|
88
|
+
_surplusAllowances[0] = JBCurrencyAmount({amount: _validLimit, currency: type(uint32).max});
|
|
89
|
+
|
|
90
|
+
_surplusAllowances[1] = JBCurrencyAmount({amount: _validLimit, currency: _validCurrency});
|
|
91
|
+
|
|
92
|
+
_fundAccessLimitGroup[0] = JBFundAccessLimitGroup({
|
|
93
|
+
terminal: address(_terminal),
|
|
94
|
+
token: JBConstants.NATIVE_TOKEN,
|
|
95
|
+
payoutLimits: _payoutLimits,
|
|
96
|
+
surplusAllowances: _surplusAllowances
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
vm.expectRevert(JBFundAccessLimits.JBFundAccessLimits_InvalidSurplusAllowanceCurrencyOrdering.selector);
|
|
101
|
+
_fundAccess.setFundAccessLimitsFor(_projectId, _ruleset, _fundAccessLimitGroup);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function test_GivenValidConfig() external whenCallerIsControllerOfProject {
|
|
105
|
+
// it will set packed properties and emit SetFundAccessLimits
|
|
106
|
+
|
|
107
|
+
// Fund Access config
|
|
108
|
+
JBFundAccessLimitGroup[] memory _fundAccessLimitGroup = new JBFundAccessLimitGroup[](2);
|
|
109
|
+
{
|
|
110
|
+
// Specify a payout limit.
|
|
111
|
+
JBCurrencyAmount[] memory _payoutLimits = new JBCurrencyAmount[](2);
|
|
112
|
+
_payoutLimits[0] =
|
|
113
|
+
JBCurrencyAmount({amount: _validLimit, currency: uint32(uint160(JBConstants.NATIVE_TOKEN))});
|
|
114
|
+
|
|
115
|
+
// Specify a second payout limit.
|
|
116
|
+
_payoutLimits[1] = JBCurrencyAmount({amount: _validLimit, currency: uint32(uint160(_someToken))});
|
|
117
|
+
|
|
118
|
+
// Specify a surplus allowance.
|
|
119
|
+
JBCurrencyAmount[] memory _surplusAllowances = new JBCurrencyAmount[](0);
|
|
120
|
+
|
|
121
|
+
_fundAccessLimitGroup[0] = JBFundAccessLimitGroup({
|
|
122
|
+
terminal: address(_terminal),
|
|
123
|
+
token: JBConstants.NATIVE_TOKEN,
|
|
124
|
+
payoutLimits: _payoutLimits,
|
|
125
|
+
surplusAllowances: _surplusAllowances
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
_fundAccessLimitGroup[1] = JBFundAccessLimitGroup({
|
|
129
|
+
terminal: address(_terminal2),
|
|
130
|
+
token: JBConstants.NATIVE_TOKEN,
|
|
131
|
+
payoutLimits: _payoutLimits,
|
|
132
|
+
surplusAllowances: _surplusAllowances
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
vm.expectEmit();
|
|
137
|
+
emit IJBFundAccessLimits.SetFundAccessLimits(_ruleset, _projectId, _fundAccessLimitGroup[0], address(this));
|
|
138
|
+
|
|
139
|
+
vm.expectEmit();
|
|
140
|
+
emit IJBFundAccessLimits.SetFundAccessLimits(_ruleset, _projectId, _fundAccessLimitGroup[1], address(this));
|
|
141
|
+
|
|
142
|
+
_fundAccess.setFundAccessLimitsFor(_projectId, _ruleset, _fundAccessLimitGroup);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
function test_GivenValidConfigWithLimitsZero() external whenCallerIsControllerOfProject {
|
|
146
|
+
// it will set packed properties and emit SetFundAccessLimits
|
|
147
|
+
|
|
148
|
+
// Fund Access config
|
|
149
|
+
JBFundAccessLimitGroup[] memory _fundAccessLimitGroup = new JBFundAccessLimitGroup[](2);
|
|
150
|
+
{
|
|
151
|
+
// Specify a payout limit.
|
|
152
|
+
JBCurrencyAmount[] memory _payoutLimits = new JBCurrencyAmount[](1);
|
|
153
|
+
_payoutLimits[0] = JBCurrencyAmount({amount: 0, currency: uint32(uint160(JBConstants.NATIVE_TOKEN))});
|
|
154
|
+
|
|
155
|
+
// Specify a surplus allowance.
|
|
156
|
+
JBCurrencyAmount[] memory _surplusAllowances = new JBCurrencyAmount[](1);
|
|
157
|
+
_surplusAllowances[0] = JBCurrencyAmount({amount: 0, currency: type(uint32).max});
|
|
158
|
+
|
|
159
|
+
_fundAccessLimitGroup[0] = JBFundAccessLimitGroup({
|
|
160
|
+
terminal: address(_terminal),
|
|
161
|
+
token: JBConstants.NATIVE_TOKEN,
|
|
162
|
+
payoutLimits: _payoutLimits,
|
|
163
|
+
surplusAllowances: _surplusAllowances
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
_fundAccessLimitGroup[1] = JBFundAccessLimitGroup({
|
|
167
|
+
terminal: address(_terminal2),
|
|
168
|
+
token: JBConstants.NATIVE_TOKEN,
|
|
169
|
+
payoutLimits: _payoutLimits,
|
|
170
|
+
surplusAllowances: _surplusAllowances
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
vm.expectEmit();
|
|
175
|
+
emit IJBFundAccessLimits.SetFundAccessLimits(_ruleset, _projectId, _fundAccessLimitGroup[0], address(this));
|
|
176
|
+
|
|
177
|
+
vm.expectEmit();
|
|
178
|
+
emit IJBFundAccessLimits.SetFundAccessLimits(_ruleset, _projectId, _fundAccessLimitGroup[1], address(this));
|
|
179
|
+
|
|
180
|
+
_fundAccess.setFundAccessLimitsFor(_projectId, _ruleset, _fundAccessLimitGroup);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity 0.8.23;
|
|
3
|
+
|
|
4
|
+
import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
|
|
5
|
+
import {JBFundAccessSetup} from "./JBFundAccessSetup.sol";
|
|
6
|
+
|
|
7
|
+
contract TestSurplusAllowanceOf_Local is JBFundAccessSetup {
|
|
8
|
+
uint256 _projectId = 1;
|
|
9
|
+
address _terminal = address(1);
|
|
10
|
+
|
|
11
|
+
function setUp() public {
|
|
12
|
+
super.fundAccessSetup();
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
modifier whenCallerIsControllerOfProject() {
|
|
16
|
+
bytes memory _controllerCall = abi.encodeCall(IJBDirectory.controllerOf, (1));
|
|
17
|
+
bytes memory _return = abi.encode(address(this));
|
|
18
|
+
|
|
19
|
+
mockExpect(address(directory), _controllerCall, _return);
|
|
20
|
+
_;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function test_WhenAProjectHasTheSpecificSurplusConfigured() external whenCallerIsControllerOfProject {
|
|
24
|
+
// it will return uint256 surplusAllowance
|
|
25
|
+
|
|
26
|
+
// Fund Access config
|
|
27
|
+
JBFundAccessLimitGroup[] memory _fundAccessLimitGroup = new JBFundAccessLimitGroup[](2);
|
|
28
|
+
{
|
|
29
|
+
// Specify a payout limit.
|
|
30
|
+
JBCurrencyAmount[] memory _payoutLimits = new JBCurrencyAmount[](0);
|
|
31
|
+
|
|
32
|
+
// Specify a surplus allowance.
|
|
33
|
+
JBCurrencyAmount[] memory _surplusAllowances = new JBCurrencyAmount[](1);
|
|
34
|
+
_surplusAllowances[0] =
|
|
35
|
+
JBCurrencyAmount({amount: 1e18, currency: uint32(uint160(JBConstants.NATIVE_TOKEN))});
|
|
36
|
+
|
|
37
|
+
_fundAccessLimitGroup[0] = JBFundAccessLimitGroup({
|
|
38
|
+
terminal: _terminal,
|
|
39
|
+
token: JBConstants.NATIVE_TOKEN,
|
|
40
|
+
payoutLimits: _payoutLimits,
|
|
41
|
+
surplusAllowances: _surplusAllowances
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
_fundAccess.setFundAccessLimitsFor(_projectId, block.timestamp, _fundAccessLimitGroup);
|
|
46
|
+
|
|
47
|
+
uint256 _returned = _fundAccess.surplusAllowanceOf(
|
|
48
|
+
_projectId, block.timestamp, _terminal, JBConstants.NATIVE_TOKEN, uint32(uint160(JBConstants.NATIVE_TOKEN))
|
|
49
|
+
);
|
|
50
|
+
assertEq(_returned, 1e18);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function test_WhenItDoesntHaveTheSpecificSurplusConfigured() external view {
|
|
54
|
+
// it will return 0
|
|
55
|
+
|
|
56
|
+
uint256 _returned = _fundAccess.surplusAllowanceOf(
|
|
57
|
+
_projectId, block.timestamp, _terminal, JBConstants.NATIVE_TOKEN, uint32(uint160(JBConstants.NATIVE_TOKEN))
|
|
58
|
+
);
|
|
59
|
+
assertEq(_returned, 0);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity 0.8.23;
|
|
3
|
+
|
|
4
|
+
import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
|
|
5
|
+
import {JBFundAccessSetup} from "./JBFundAccessSetup.sol";
|
|
6
|
+
|
|
7
|
+
contract TestSurplusAllowancesOf_Local is JBFundAccessSetup {
|
|
8
|
+
uint256 _projectId = 1;
|
|
9
|
+
address _terminal = address(1);
|
|
10
|
+
address _terminal2 = address(2);
|
|
11
|
+
address _someToken = makeAddr("someToken");
|
|
12
|
+
|
|
13
|
+
function setUp() public {
|
|
14
|
+
super.fundAccessSetup();
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
modifier whenAProjectHasSpecifiedSurplusAllowances() {
|
|
18
|
+
bytes memory _controllerCall = abi.encodeCall(IJBDirectory.controllerOf, (1));
|
|
19
|
+
bytes memory _return = abi.encode(address(this));
|
|
20
|
+
|
|
21
|
+
mockExpect(address(directory), _controllerCall, _return);
|
|
22
|
+
|
|
23
|
+
// Fund Access config
|
|
24
|
+
JBFundAccessLimitGroup[] memory _fundAccessLimitGroup = new JBFundAccessLimitGroup[](2);
|
|
25
|
+
{
|
|
26
|
+
// Specify a payout limit.
|
|
27
|
+
JBCurrencyAmount[] memory _payoutLimits = new JBCurrencyAmount[](0);
|
|
28
|
+
|
|
29
|
+
// Specify a surplus allowance.
|
|
30
|
+
JBCurrencyAmount[] memory _surplusAllowances = new JBCurrencyAmount[](2);
|
|
31
|
+
_surplusAllowances[0] =
|
|
32
|
+
JBCurrencyAmount({amount: 1e18, currency: uint32(uint160(JBConstants.NATIVE_TOKEN))});
|
|
33
|
+
|
|
34
|
+
_surplusAllowances[1] = JBCurrencyAmount({amount: 2e18, currency: uint32(uint160(_someToken))});
|
|
35
|
+
|
|
36
|
+
_fundAccessLimitGroup[0] = JBFundAccessLimitGroup({
|
|
37
|
+
terminal: _terminal,
|
|
38
|
+
token: JBConstants.NATIVE_TOKEN,
|
|
39
|
+
payoutLimits: _payoutLimits,
|
|
40
|
+
surplusAllowances: _surplusAllowances
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
_fundAccessLimitGroup[1] = JBFundAccessLimitGroup({
|
|
44
|
+
terminal: _terminal2,
|
|
45
|
+
token: _someToken,
|
|
46
|
+
payoutLimits: _payoutLimits,
|
|
47
|
+
surplusAllowances: _surplusAllowances
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
_fundAccess.setFundAccessLimitsFor(_projectId, block.timestamp, _fundAccessLimitGroup);
|
|
52
|
+
_fundAccess.setFundAccessLimitsFor(_projectId, block.timestamp + 1, _fundAccessLimitGroup);
|
|
53
|
+
|
|
54
|
+
_;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function test_GivenTheyAreSpecifiedForASpecificRuleset() external whenAProjectHasSpecifiedSurplusAllowances {
|
|
58
|
+
// it will return them
|
|
59
|
+
|
|
60
|
+
JBCurrencyAmount[] memory surplusLimits =
|
|
61
|
+
_fundAccess.surplusAllowancesOf(_projectId, block.timestamp, _terminal, JBConstants.NATIVE_TOKEN);
|
|
62
|
+
|
|
63
|
+
JBCurrencyAmount[] memory surplusLimits2 =
|
|
64
|
+
_fundAccess.surplusAllowancesOf(_projectId, block.timestamp + 1, _terminal, JBConstants.NATIVE_TOKEN);
|
|
65
|
+
|
|
66
|
+
assertEq(surplusLimits[0].currency, uint32(uint160(JBConstants.NATIVE_TOKEN)));
|
|
67
|
+
assertEq(surplusLimits[0].amount, 1e18);
|
|
68
|
+
assertEq(surplusLimits[1].currency, uint32(uint160(_someToken)));
|
|
69
|
+
assertEq(surplusLimits[1].amount, 2e18);
|
|
70
|
+
|
|
71
|
+
assertEq(surplusLimits2[0].currency, uint32(uint160(JBConstants.NATIVE_TOKEN)));
|
|
72
|
+
assertEq(surplusLimits2[0].amount, 1e18);
|
|
73
|
+
assertEq(surplusLimits2[1].currency, uint32(uint160(_someToken)));
|
|
74
|
+
assertEq(surplusLimits2[1].amount, 2e18);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function test_GivenTheyAreSpecifiedForASpecificTerminal() external whenAProjectHasSpecifiedSurplusAllowances {
|
|
78
|
+
// it will return them
|
|
79
|
+
|
|
80
|
+
JBCurrencyAmount[] memory surplusLimits =
|
|
81
|
+
_fundAccess.surplusAllowancesOf(_projectId, block.timestamp, _terminal2, _someToken);
|
|
82
|
+
|
|
83
|
+
assertEq(surplusLimits[0].currency, uint32(uint160(JBConstants.NATIVE_TOKEN)));
|
|
84
|
+
assertEq(surplusLimits[0].amount, 1e18);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function test_GivenTheyAreSpecifiedForASpecificToken() external whenAProjectHasSpecifiedSurplusAllowances {
|
|
88
|
+
// it will return them
|
|
89
|
+
|
|
90
|
+
JBCurrencyAmount[] memory surplusLimits =
|
|
91
|
+
_fundAccess.surplusAllowancesOf(_projectId, block.timestamp, _terminal, JBConstants.NATIVE_TOKEN);
|
|
92
|
+
|
|
93
|
+
assertEq(surplusLimits[0].currency, uint32(uint160(JBConstants.NATIVE_TOKEN)));
|
|
94
|
+
assertEq(surplusLimits[0].amount, 1e18);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity 0.8.23;
|
|
3
|
+
|
|
4
|
+
import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
|
|
5
|
+
import {JBMetadataResolver} from "../../../../src/libraries/JBMetadataResolver.sol";
|
|
6
|
+
|
|
7
|
+
contract TestGetDataFor_Local is JBTest {
|
|
8
|
+
bytes4 _id1 = bytes4(0x10101010);
|
|
9
|
+
bytes4 _id2 = bytes4(0x20202020);
|
|
10
|
+
|
|
11
|
+
function setUp() external {}
|
|
12
|
+
|
|
13
|
+
function test_WhenMetadataLengthLTEQMIN_METADATA_LENGTH() external view {
|
|
14
|
+
// it will return false and empty bytes
|
|
15
|
+
|
|
16
|
+
// malformed data only contains the padding intended for the protocol
|
|
17
|
+
bytes memory _malformed = abi.encodePacked(bytes32(uint256(type(uint256).max)));
|
|
18
|
+
|
|
19
|
+
(bool _found, bytes memory _data) = JBMetadataResolver.getDataFor(_id1, _malformed);
|
|
20
|
+
|
|
21
|
+
// check
|
|
22
|
+
assertEq(_found, false);
|
|
23
|
+
assertEq("", _data);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
modifier whenMetadataLengthGTMIN_METADATA_LENGTH() {
|
|
27
|
+
_;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function test_GivenIdIsFound() external view whenMetadataLengthGTMIN_METADATA_LENGTH {
|
|
31
|
+
// it will return found EQ true and targetData
|
|
32
|
+
|
|
33
|
+
uint256 _data1 = 10_000_000;
|
|
34
|
+
bytes memory _data2 = new bytes(100);
|
|
35
|
+
|
|
36
|
+
// malformed data only contains the padding intended for the protocol
|
|
37
|
+
bytes memory _metadata = abi.encodePacked(
|
|
38
|
+
// -- offset 0 --
|
|
39
|
+
bytes32(uint256(type(uint256).max)), // First 32B reserved
|
|
40
|
+
// -- offset 1 --
|
|
41
|
+
_id1, // First id
|
|
42
|
+
uint8(2), // First data offset == 2
|
|
43
|
+
_id2, // Second id == _id
|
|
44
|
+
uint8(3), // Second data offset == 3
|
|
45
|
+
bytes22(0), // Rest of the word is 0-padded
|
|
46
|
+
// -- offset 2 --
|
|
47
|
+
_data1, // First data
|
|
48
|
+
// -- offset 3 --
|
|
49
|
+
_data2 // Second data
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
(bool _found, bytes memory _returnedData) = JBMetadataResolver.getDataFor(_id1, _metadata);
|
|
53
|
+
|
|
54
|
+
// check
|
|
55
|
+
assertEq(_found, true);
|
|
56
|
+
assertEq(abi.decode(_returnedData, (uint256)), _data1);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function test_GivenIdIsNotFound() external view whenMetadataLengthGTMIN_METADATA_LENGTH {
|
|
60
|
+
// it will return found EQ false and empty bytes targetData
|
|
61
|
+
|
|
62
|
+
uint256 _data1 = 10_000_000;
|
|
63
|
+
bytes memory _data2 = new bytes(100);
|
|
64
|
+
|
|
65
|
+
// malformed data only contains the padding intended for the protocol
|
|
66
|
+
bytes memory _metadata = abi.encodePacked(
|
|
67
|
+
// -- offset 0 --
|
|
68
|
+
bytes32(uint256(type(uint256).max)), // First 32B reserved
|
|
69
|
+
// -- offset 1 --
|
|
70
|
+
_id1, // First id
|
|
71
|
+
uint8(2), // First data offset == 2
|
|
72
|
+
_id2, // Second id == _id
|
|
73
|
+
uint8(3), // Second data offset == 3
|
|
74
|
+
bytes22(0), // Rest of the word is 0-padded
|
|
75
|
+
// -- offset 2 --
|
|
76
|
+
_data1, // First data
|
|
77
|
+
// -- offset 3 --
|
|
78
|
+
_data2 // Second data
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
bytes4 _invalidId = bytes4(0x40404040);
|
|
82
|
+
|
|
83
|
+
(bool _found, bytes memory _returnedData) = JBMetadataResolver.getDataFor(_invalidId, _metadata);
|
|
84
|
+
|
|
85
|
+
// check
|
|
86
|
+
assertEq(_found, false);
|
|
87
|
+
assertEq("", _returnedData);
|
|
88
|
+
}
|
|
89
|
+
}
|