@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,231 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity 0.8.23;
|
|
3
|
+
|
|
4
|
+
import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
|
|
5
|
+
import {JBRulesetsSetup} from "./JBRulesetsSetup.sol";
|
|
6
|
+
|
|
7
|
+
contract TestCurrentOf_Local is JBRulesetsSetup {
|
|
8
|
+
// Necessary params
|
|
9
|
+
JBRulesetMetadata private _metadata;
|
|
10
|
+
JBRulesetMetadata private _metadataWithApprovalHook;
|
|
11
|
+
IJBRulesetApprovalHook private _mockApprovalHook = IJBRulesetApprovalHook(makeAddr("hook"));
|
|
12
|
+
uint256 _packedMetadata;
|
|
13
|
+
uint256 _packedWithApprovalHook;
|
|
14
|
+
uint256 _projectId = 1;
|
|
15
|
+
uint256 _duration = 3 days;
|
|
16
|
+
uint256 _weight = 0;
|
|
17
|
+
uint256 _weightCutPercent = 450_000_000;
|
|
18
|
+
uint48 _mustStartAt = 0;
|
|
19
|
+
uint256 _hookDuration = 1 days;
|
|
20
|
+
IJBRulesetApprovalHook private _noHook = IJBRulesetApprovalHook(address(0));
|
|
21
|
+
|
|
22
|
+
function setUp() public {
|
|
23
|
+
super.rulesetsSetup();
|
|
24
|
+
|
|
25
|
+
// Params for tests
|
|
26
|
+
_metadata = JBRulesetMetadata({
|
|
27
|
+
reservedPercent: 0,
|
|
28
|
+
cashOutTaxRate: 0,
|
|
29
|
+
baseCurrency: uint32(uint160(JBConstants.NATIVE_TOKEN)),
|
|
30
|
+
pausePay: false,
|
|
31
|
+
pauseCreditTransfers: false,
|
|
32
|
+
allowOwnerMinting: false,
|
|
33
|
+
allowSetCustomToken: false,
|
|
34
|
+
allowTerminalMigration: false,
|
|
35
|
+
allowSetTerminals: false,
|
|
36
|
+
ownerMustSendPayouts: false,
|
|
37
|
+
allowSetController: false,
|
|
38
|
+
allowAddAccountingContext: true,
|
|
39
|
+
allowAddPriceFeed: false,
|
|
40
|
+
holdFees: false,
|
|
41
|
+
useTotalSurplusForCashOuts: false,
|
|
42
|
+
useDataHookForPay: false,
|
|
43
|
+
useDataHookForCashOut: false,
|
|
44
|
+
dataHook: address(0),
|
|
45
|
+
metadata: 0
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
// Params for tests
|
|
49
|
+
_metadataWithApprovalHook = JBRulesetMetadata({
|
|
50
|
+
reservedPercent: 0,
|
|
51
|
+
cashOutTaxRate: 0,
|
|
52
|
+
baseCurrency: uint32(uint160(JBConstants.NATIVE_TOKEN)),
|
|
53
|
+
pausePay: false,
|
|
54
|
+
pauseCreditTransfers: false,
|
|
55
|
+
allowOwnerMinting: false,
|
|
56
|
+
allowSetCustomToken: false,
|
|
57
|
+
allowTerminalMigration: false,
|
|
58
|
+
allowSetTerminals: false,
|
|
59
|
+
ownerMustSendPayouts: false,
|
|
60
|
+
allowSetController: false,
|
|
61
|
+
allowAddAccountingContext: true,
|
|
62
|
+
allowAddPriceFeed: false,
|
|
63
|
+
holdFees: false,
|
|
64
|
+
useTotalSurplusForCashOuts: false,
|
|
65
|
+
useDataHookForPay: false,
|
|
66
|
+
useDataHookForCashOut: false,
|
|
67
|
+
dataHook: address(0),
|
|
68
|
+
metadata: 0
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
_packedMetadata = JBRulesetMetadataResolver.packRulesetMetadata(_metadata);
|
|
72
|
+
_packedWithApprovalHook = JBRulesetMetadataResolver.packRulesetMetadata(_metadataWithApprovalHook);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
function test_WhenLatestrulesetOfProjectEQZero() external view {
|
|
76
|
+
// it will return an empty ruleset
|
|
77
|
+
|
|
78
|
+
JBRuleset memory _ruleset = _rulesets.currentOf(_projectId);
|
|
79
|
+
assertEq(_ruleset.id, 0);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
modifier whenLatestRulesetIdDNEQZero() {
|
|
83
|
+
// put code at hook address
|
|
84
|
+
vm.etch(address(_mockApprovalHook), abi.encode(1));
|
|
85
|
+
|
|
86
|
+
// mock call to hook interface support
|
|
87
|
+
mockExpect(
|
|
88
|
+
address(_mockApprovalHook),
|
|
89
|
+
abi.encodeCall(IERC165.supportsInterface, (type(IJBRulesetApprovalHook).interfaceId)),
|
|
90
|
+
abi.encode(true)
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
// Setup: queueFor will call onlyControllerOf modifier -> Directory.controllerOf to see if caller has proper
|
|
94
|
+
// permissions, encode & mock that.
|
|
95
|
+
bytes memory _encodedCall = abi.encodeCall(IJBDirectory.controllerOf, (1));
|
|
96
|
+
bytes memory _willReturn = abi.encode(address(this));
|
|
97
|
+
|
|
98
|
+
mockExpect(address(directory), _encodedCall, _willReturn);
|
|
99
|
+
|
|
100
|
+
// First queue a base funding cycle
|
|
101
|
+
|
|
102
|
+
// Setup: expect ruleset event (RulesetQueued) is emitted
|
|
103
|
+
vm.expectEmit();
|
|
104
|
+
emit IJBRulesets.RulesetQueued(
|
|
105
|
+
block.timestamp,
|
|
106
|
+
_projectId,
|
|
107
|
+
_duration,
|
|
108
|
+
_weight,
|
|
109
|
+
_weightCutPercent,
|
|
110
|
+
_mockApprovalHook,
|
|
111
|
+
_packedWithApprovalHook,
|
|
112
|
+
block.timestamp,
|
|
113
|
+
address(this)
|
|
114
|
+
);
|
|
115
|
+
|
|
116
|
+
// mock call to hook duration
|
|
117
|
+
mockExpect(
|
|
118
|
+
address(_mockApprovalHook), abi.encodeCall(IJBRulesetApprovalHook.DURATION, ()), abi.encode(_hookDuration)
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
// Send: Call from this contract as it's been mock authorized above.
|
|
122
|
+
_rulesets.queueFor({
|
|
123
|
+
projectId: _projectId,
|
|
124
|
+
duration: _duration,
|
|
125
|
+
weight: _weight,
|
|
126
|
+
weightCutPercent: _weightCutPercent,
|
|
127
|
+
approvalHook: _mockApprovalHook,
|
|
128
|
+
metadata: _packedWithApprovalHook,
|
|
129
|
+
mustStartAtOrAfter: _mustStartAt
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
// Setup: expect ruleset event (RulesetQueued) is emitted
|
|
133
|
+
vm.expectEmit();
|
|
134
|
+
emit IJBRulesets.RulesetQueued(
|
|
135
|
+
block.timestamp + 1,
|
|
136
|
+
_projectId,
|
|
137
|
+
_duration,
|
|
138
|
+
_weight,
|
|
139
|
+
_weightCutPercent,
|
|
140
|
+
_noHook,
|
|
141
|
+
_packedMetadata,
|
|
142
|
+
block.timestamp,
|
|
143
|
+
address(this)
|
|
144
|
+
);
|
|
145
|
+
|
|
146
|
+
// Send: Call from this contract as it's been mock authorized above.
|
|
147
|
+
_rulesets.queueFor({
|
|
148
|
+
projectId: _projectId,
|
|
149
|
+
duration: _duration,
|
|
150
|
+
weight: _weight,
|
|
151
|
+
weightCutPercent: _weightCutPercent,
|
|
152
|
+
approvalHook: _noHook,
|
|
153
|
+
metadata: _packedMetadata,
|
|
154
|
+
mustStartAtOrAfter: _mustStartAt
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
/* // mock call to hook approvalStatusOf
|
|
158
|
+
mockExpect(
|
|
159
|
+
address(_mockApprovalHook),
|
|
160
|
+
abi.encodeCall(
|
|
161
|
+
IJBRulesetApprovalHook.approvalStatusOf, (_projectId, block.timestamp + 1, block.timestamp + _duration)
|
|
162
|
+
),
|
|
163
|
+
abi.encode(JBApprovalStatus.Failed)
|
|
164
|
+
); */
|
|
165
|
+
|
|
166
|
+
_;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
function test_GivenTheCurrentlyApprovableRulesetIdOfApprovalStatusEQApprovedOrEmpty()
|
|
170
|
+
external
|
|
171
|
+
whenLatestRulesetIdDNEQZero
|
|
172
|
+
{
|
|
173
|
+
// it will return the latest approved ruleset
|
|
174
|
+
|
|
175
|
+
JBRuleset memory _current = _rulesets.currentOf(_projectId);
|
|
176
|
+
assertEq(_current.id, block.timestamp);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
function test_GivenTheCurrentlyApprovableRulesetIdOfApprovalStatusDNEQApprovedOrEmpty()
|
|
180
|
+
external
|
|
181
|
+
whenLatestRulesetIdDNEQZero
|
|
182
|
+
{
|
|
183
|
+
// it will return the ruleset the pending approval ruleset is basedOn
|
|
184
|
+
|
|
185
|
+
uint256 _firstRulesetId = block.timestamp;
|
|
186
|
+
uint256 _rulesetWithHookId = block.timestamp + 1;
|
|
187
|
+
|
|
188
|
+
JBRuleset memory _queuedRuleset = _rulesets.getRulesetOf(_projectId, _rulesetWithHookId);
|
|
189
|
+
|
|
190
|
+
vm.warp(block.timestamp + 3 days);
|
|
191
|
+
|
|
192
|
+
// mock approvalStatusOf to return Pending
|
|
193
|
+
mockExpect(
|
|
194
|
+
address(_mockApprovalHook),
|
|
195
|
+
abi.encodeCall(IJBRulesetApprovalHook.approvalStatusOf, (_projectId, _queuedRuleset)),
|
|
196
|
+
abi.encode(JBApprovalStatus.Active)
|
|
197
|
+
);
|
|
198
|
+
|
|
199
|
+
JBRuleset memory _current = _rulesets.currentOf(_projectId);
|
|
200
|
+
assertEq(_current.id, _firstRulesetId);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
function test_GivenTheCurrentlyApprovableRulesetIdOfEQZeroAndApprovalStatusOfTheLatestRulesetDNEQApprovedOrEmpty()
|
|
204
|
+
external
|
|
205
|
+
whenLatestRulesetIdDNEQZero
|
|
206
|
+
{
|
|
207
|
+
// it will return the basedOn of the latest ruleset
|
|
208
|
+
|
|
209
|
+
uint256 _firstRulesetId = block.timestamp;
|
|
210
|
+
uint256 _rulesetWithHookId = block.timestamp + 1;
|
|
211
|
+
|
|
212
|
+
JBRuleset memory _queuedRuleset = _rulesets.getRulesetOf(_projectId, _rulesetWithHookId);
|
|
213
|
+
|
|
214
|
+
vm.warp(block.timestamp + 4 days);
|
|
215
|
+
|
|
216
|
+
// mock approvalStatusOf to return Pending
|
|
217
|
+
mockExpect(
|
|
218
|
+
address(_mockApprovalHook),
|
|
219
|
+
abi.encodeCall(IJBRulesetApprovalHook.approvalStatusOf, (_projectId, _queuedRuleset)),
|
|
220
|
+
abi.encode(JBApprovalStatus.Active)
|
|
221
|
+
);
|
|
222
|
+
|
|
223
|
+
JBRuleset memory _current = _rulesets.currentOf(_projectId);
|
|
224
|
+
assertEq(_current.id, _firstRulesetId);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
// covered above - tree had typo
|
|
228
|
+
/* function test_WhenBaseOfTheCurrentlyApprovableRulesetIdOfDurationDNEQZero() external {
|
|
229
|
+
// it will return simulateCycledRulesetBasedOn with allowMidRuleset true
|
|
230
|
+
} */
|
|
231
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity 0.8.23;
|
|
3
|
+
|
|
4
|
+
import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
|
|
5
|
+
import {JBRulesetsSetup} from "./JBRulesetsSetup.sol";
|
|
6
|
+
|
|
7
|
+
contract TestGetRulesetOf_Local is JBRulesetsSetup {
|
|
8
|
+
// Necessary params
|
|
9
|
+
JBRulesetMetadata private _metadata;
|
|
10
|
+
uint256 _packedMetadata;
|
|
11
|
+
uint256 _projectId = 1;
|
|
12
|
+
uint256 _duration = 3 days;
|
|
13
|
+
uint256 _weight = 0;
|
|
14
|
+
uint256 _weightCutPercent = 450_000_000;
|
|
15
|
+
uint48 _mustStartAt = 0;
|
|
16
|
+
uint256 _hookDuration = 1 days;
|
|
17
|
+
IJBRulesetApprovalHook private _noHook = IJBRulesetApprovalHook(address(0));
|
|
18
|
+
|
|
19
|
+
function setUp() public {
|
|
20
|
+
super.rulesetsSetup();
|
|
21
|
+
|
|
22
|
+
// Params for tests
|
|
23
|
+
_metadata = JBRulesetMetadata({
|
|
24
|
+
reservedPercent: 0,
|
|
25
|
+
cashOutTaxRate: 0,
|
|
26
|
+
baseCurrency: uint32(uint160(JBConstants.NATIVE_TOKEN)),
|
|
27
|
+
pausePay: false,
|
|
28
|
+
pauseCreditTransfers: false,
|
|
29
|
+
allowOwnerMinting: false,
|
|
30
|
+
allowSetCustomToken: false,
|
|
31
|
+
allowTerminalMigration: false,
|
|
32
|
+
allowSetTerminals: false,
|
|
33
|
+
ownerMustSendPayouts: false,
|
|
34
|
+
allowSetController: false,
|
|
35
|
+
allowAddAccountingContext: true,
|
|
36
|
+
allowAddPriceFeed: false,
|
|
37
|
+
holdFees: false,
|
|
38
|
+
useTotalSurplusForCashOuts: false,
|
|
39
|
+
useDataHookForPay: false,
|
|
40
|
+
useDataHookForCashOut: false,
|
|
41
|
+
dataHook: address(0),
|
|
42
|
+
metadata: 0
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
_packedMetadata = JBRulesetMetadataResolver.packRulesetMetadata(_metadata);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function test_WhenRulesetIdDneqZeroAndARulesetIsConfigured() external {
|
|
49
|
+
// it will return a JBRuleset derived from _packedIntrinsicPropertiesOf
|
|
50
|
+
|
|
51
|
+
// Setup: queueFor will call onlyControllerOf modifier -> Directory.controllerOf to see if caller has proper
|
|
52
|
+
// permissions, encode & mock that.
|
|
53
|
+
bytes memory _encodedCall = abi.encodeCall(IJBDirectory.controllerOf, (1));
|
|
54
|
+
bytes memory _willReturn = abi.encode(address(this));
|
|
55
|
+
|
|
56
|
+
mockExpect(address(directory), _encodedCall, _willReturn);
|
|
57
|
+
|
|
58
|
+
// Setup: expect ruleset event (RulesetQueued) is emitted
|
|
59
|
+
vm.expectEmit();
|
|
60
|
+
emit IJBRulesets.RulesetQueued(
|
|
61
|
+
block.timestamp,
|
|
62
|
+
_projectId,
|
|
63
|
+
_duration,
|
|
64
|
+
_weight,
|
|
65
|
+
_weightCutPercent,
|
|
66
|
+
_noHook,
|
|
67
|
+
_packedMetadata,
|
|
68
|
+
block.timestamp,
|
|
69
|
+
address(this)
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
// Send: Call from this contract as it's been mock authorized above.
|
|
73
|
+
_rulesets.queueFor({
|
|
74
|
+
projectId: _projectId,
|
|
75
|
+
duration: _duration,
|
|
76
|
+
weight: _weight,
|
|
77
|
+
weightCutPercent: _weightCutPercent,
|
|
78
|
+
approvalHook: _noHook,
|
|
79
|
+
metadata: _packedMetadata,
|
|
80
|
+
mustStartAtOrAfter: _mustStartAt
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
JBRuleset memory _gottenRulesetOf = _rulesets.getRulesetOf(_projectId, block.timestamp);
|
|
84
|
+
|
|
85
|
+
assertEq(_gottenRulesetOf.weight, _weight);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function test_WhenRulesetIdEqZero() external view {
|
|
89
|
+
// it will return an empty ruleset
|
|
90
|
+
|
|
91
|
+
JBRuleset memory _gottenRulesetOf = _rulesets.getRulesetOf(_projectId, 0);
|
|
92
|
+
assertEq(_gottenRulesetOf.id, 0);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity 0.8.23;
|
|
3
|
+
|
|
4
|
+
import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
|
|
5
|
+
import {JBRulesetsSetup} from "./JBRulesetsSetup.sol";
|
|
6
|
+
|
|
7
|
+
contract TestLatestQueuedRulesetOf_Local is JBRulesetsSetup {
|
|
8
|
+
// Necessary params
|
|
9
|
+
JBRulesetMetadata private _metadata;
|
|
10
|
+
JBRulesetMetadata private _metadataWithApprovalHook;
|
|
11
|
+
IJBRulesetApprovalHook private _mockApprovalHook = IJBRulesetApprovalHook(makeAddr("hook"));
|
|
12
|
+
uint256 _packedMetadata;
|
|
13
|
+
uint256 _packedWithApprovalHook;
|
|
14
|
+
uint256 _projectId = 1;
|
|
15
|
+
uint256 _duration = 3 days;
|
|
16
|
+
uint256 _weight = 0;
|
|
17
|
+
uint256 _weightCutPercent = 450_000_000;
|
|
18
|
+
uint48 _mustStartAt = 0;
|
|
19
|
+
uint256 _hookDuration = 1 days;
|
|
20
|
+
IJBRulesetApprovalHook private _noHook = IJBRulesetApprovalHook(address(0));
|
|
21
|
+
|
|
22
|
+
function setUp() public {
|
|
23
|
+
super.rulesetsSetup();
|
|
24
|
+
|
|
25
|
+
// Params for tests
|
|
26
|
+
_metadata = JBRulesetMetadata({
|
|
27
|
+
reservedPercent: 0,
|
|
28
|
+
cashOutTaxRate: 0,
|
|
29
|
+
baseCurrency: uint32(uint160(JBConstants.NATIVE_TOKEN)),
|
|
30
|
+
pausePay: false,
|
|
31
|
+
pauseCreditTransfers: false,
|
|
32
|
+
allowOwnerMinting: false,
|
|
33
|
+
allowSetCustomToken: false,
|
|
34
|
+
allowTerminalMigration: false,
|
|
35
|
+
allowSetTerminals: false,
|
|
36
|
+
ownerMustSendPayouts: false,
|
|
37
|
+
allowSetController: false,
|
|
38
|
+
allowAddAccountingContext: true,
|
|
39
|
+
allowAddPriceFeed: false,
|
|
40
|
+
holdFees: false,
|
|
41
|
+
useTotalSurplusForCashOuts: false,
|
|
42
|
+
useDataHookForPay: false,
|
|
43
|
+
useDataHookForCashOut: false,
|
|
44
|
+
dataHook: address(0),
|
|
45
|
+
metadata: 0
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
// Params for tests
|
|
49
|
+
_metadataWithApprovalHook = JBRulesetMetadata({
|
|
50
|
+
reservedPercent: 0,
|
|
51
|
+
cashOutTaxRate: 0,
|
|
52
|
+
baseCurrency: uint32(uint160(JBConstants.NATIVE_TOKEN)),
|
|
53
|
+
pausePay: false,
|
|
54
|
+
pauseCreditTransfers: false,
|
|
55
|
+
allowOwnerMinting: false,
|
|
56
|
+
allowSetCustomToken: false,
|
|
57
|
+
allowTerminalMigration: false,
|
|
58
|
+
allowSetTerminals: false,
|
|
59
|
+
ownerMustSendPayouts: false,
|
|
60
|
+
allowSetController: false,
|
|
61
|
+
allowAddAccountingContext: true,
|
|
62
|
+
allowAddPriceFeed: false,
|
|
63
|
+
holdFees: false,
|
|
64
|
+
useTotalSurplusForCashOuts: false,
|
|
65
|
+
useDataHookForPay: false,
|
|
66
|
+
useDataHookForCashOut: false,
|
|
67
|
+
dataHook: address(0),
|
|
68
|
+
metadata: 0
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
_packedMetadata = JBRulesetMetadataResolver.packRulesetMetadata(_metadata);
|
|
72
|
+
_packedWithApprovalHook = JBRulesetMetadataResolver.packRulesetMetadata(_metadataWithApprovalHook);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
modifier whenTheLatestRulesetIdDneqZero() {
|
|
76
|
+
// put code at hook address
|
|
77
|
+
vm.etch(address(_mockApprovalHook), abi.encode(1));
|
|
78
|
+
|
|
79
|
+
// mock call to hook interface support
|
|
80
|
+
mockExpect(
|
|
81
|
+
address(_mockApprovalHook),
|
|
82
|
+
abi.encodeCall(IERC165.supportsInterface, (type(IJBRulesetApprovalHook).interfaceId)),
|
|
83
|
+
abi.encode(true)
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
// Setup: queueFor will call onlyControllerOf modifier -> Directory.controllerOf to see if caller has proper
|
|
87
|
+
// permissions, encode & mock that.
|
|
88
|
+
bytes memory _encodedCall = abi.encodeCall(IJBDirectory.controllerOf, (1));
|
|
89
|
+
bytes memory _willReturn = abi.encode(address(this));
|
|
90
|
+
|
|
91
|
+
mockExpect(address(directory), _encodedCall, _willReturn);
|
|
92
|
+
|
|
93
|
+
// Setup: expect ruleset event (RulesetQueued) is emitted
|
|
94
|
+
vm.expectEmit();
|
|
95
|
+
emit IJBRulesets.RulesetQueued(
|
|
96
|
+
block.timestamp,
|
|
97
|
+
_projectId,
|
|
98
|
+
_duration,
|
|
99
|
+
_weight,
|
|
100
|
+
_weightCutPercent,
|
|
101
|
+
_mockApprovalHook,
|
|
102
|
+
_packedWithApprovalHook,
|
|
103
|
+
block.timestamp,
|
|
104
|
+
address(this)
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
// Send: Call from this contract as it's been mock authorized above.
|
|
108
|
+
_rulesets.queueFor({
|
|
109
|
+
projectId: _projectId,
|
|
110
|
+
duration: _duration,
|
|
111
|
+
weight: _weight,
|
|
112
|
+
weightCutPercent: _weightCutPercent,
|
|
113
|
+
approvalHook: _mockApprovalHook,
|
|
114
|
+
metadata: _packedWithApprovalHook,
|
|
115
|
+
mustStartAtOrAfter: _mustStartAt
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
_;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
function test_GivenTheRulesetIsBasedOnRulesetZero() external whenTheLatestRulesetIdDneqZero {
|
|
122
|
+
// it will return JBApprovalStatus.Empty
|
|
123
|
+
|
|
124
|
+
(JBRuleset memory _latestRuleset, JBApprovalStatus _latestApprovalStatus) = _rulesets.latestQueuedOf(_projectId);
|
|
125
|
+
assertEq(uint256(_latestApprovalStatus), 0);
|
|
126
|
+
assertEq(_latestRuleset.id, block.timestamp);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function test_GivenTheRulesetIsBasedOnNonzeroRulesetAndTheBasedOnApprovalhookDneqZeroAddress()
|
|
130
|
+
external
|
|
131
|
+
whenTheLatestRulesetIdDneqZero
|
|
132
|
+
{
|
|
133
|
+
// it will return the approvalHooks approvalStatusOf
|
|
134
|
+
|
|
135
|
+
// mock call to hook duration
|
|
136
|
+
mockExpect(
|
|
137
|
+
address(_mockApprovalHook), abi.encodeCall(IJBRulesetApprovalHook.DURATION, ()), abi.encode(_hookDuration)
|
|
138
|
+
);
|
|
139
|
+
|
|
140
|
+
// Setup: expect ruleset event (RulesetQueued) is emitted
|
|
141
|
+
vm.expectEmit();
|
|
142
|
+
emit IJBRulesets.RulesetQueued(
|
|
143
|
+
block.timestamp + 1, // queued after the first in the modifier
|
|
144
|
+
_projectId,
|
|
145
|
+
_duration,
|
|
146
|
+
_weight,
|
|
147
|
+
_weightCutPercent,
|
|
148
|
+
_noHook,
|
|
149
|
+
_packedMetadata,
|
|
150
|
+
block.timestamp,
|
|
151
|
+
address(this)
|
|
152
|
+
);
|
|
153
|
+
|
|
154
|
+
// Send: Call from this contract as it's been mock authorized above.
|
|
155
|
+
_rulesets.queueFor({
|
|
156
|
+
projectId: _projectId,
|
|
157
|
+
duration: _duration,
|
|
158
|
+
weight: _weight,
|
|
159
|
+
weightCutPercent: _weightCutPercent,
|
|
160
|
+
approvalHook: _noHook,
|
|
161
|
+
metadata: _packedMetadata,
|
|
162
|
+
mustStartAtOrAfter: _mustStartAt
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
uint256 _latestQueuedId = _rulesets.latestRulesetIdOf(_projectId);
|
|
166
|
+
JBRuleset memory _queuedRuleset = _rulesets.getRulesetOf(_projectId, _latestQueuedId);
|
|
167
|
+
|
|
168
|
+
// mock call to hook approvalStatusOf
|
|
169
|
+
mockExpect(
|
|
170
|
+
address(_mockApprovalHook),
|
|
171
|
+
abi.encodeCall(IJBRulesetApprovalHook.approvalStatusOf, (_projectId, _queuedRuleset)),
|
|
172
|
+
abi.encode(JBApprovalStatus.ApprovalExpected)
|
|
173
|
+
);
|
|
174
|
+
|
|
175
|
+
(JBRuleset memory _latestRuleset, JBApprovalStatus _latestApprovalStatus) = _rulesets.latestQueuedOf(_projectId);
|
|
176
|
+
assertEq(uint256(_latestApprovalStatus), 3); // 3 = enum ApprovalExpected of the basedOn ruleset
|
|
177
|
+
assertEq(_latestRuleset.id, block.timestamp + 1); // second queued ruleset
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
function test_GivenTheRulesetIsBasedOnNonzeroRulesetAndTheBasedOnApprovalhookEqZeroAddress() external {
|
|
181
|
+
// it will return JBApprovalStatus.Empty
|
|
182
|
+
|
|
183
|
+
// Setup: queueFor will call onlyControllerOf modifier -> Directory.controllerOf to see if caller has proper
|
|
184
|
+
// permissions, encode & mock that.
|
|
185
|
+
bytes memory _encodedCall = abi.encodeCall(IJBDirectory.controllerOf, (1));
|
|
186
|
+
bytes memory _willReturn = abi.encode(address(this));
|
|
187
|
+
|
|
188
|
+
mockExpect(address(directory), _encodedCall, _willReturn);
|
|
189
|
+
|
|
190
|
+
// Setup: expect ruleset event (RulesetQueued) is emitted
|
|
191
|
+
vm.expectEmit();
|
|
192
|
+
emit IJBRulesets.RulesetQueued(
|
|
193
|
+
block.timestamp, // queued after the first in the modifier
|
|
194
|
+
_projectId,
|
|
195
|
+
_duration,
|
|
196
|
+
_weight,
|
|
197
|
+
_weightCutPercent,
|
|
198
|
+
_noHook,
|
|
199
|
+
_packedMetadata,
|
|
200
|
+
block.timestamp,
|
|
201
|
+
address(this)
|
|
202
|
+
);
|
|
203
|
+
|
|
204
|
+
// Send: Call from this contract as it's been mock authorized above.
|
|
205
|
+
_rulesets.queueFor({
|
|
206
|
+
projectId: _projectId,
|
|
207
|
+
duration: _duration,
|
|
208
|
+
weight: _weight,
|
|
209
|
+
weightCutPercent: _weightCutPercent,
|
|
210
|
+
approvalHook: _noHook,
|
|
211
|
+
metadata: _packedMetadata,
|
|
212
|
+
mustStartAtOrAfter: _mustStartAt
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
// Setup: expect ruleset event (RulesetQueued) is emitted
|
|
216
|
+
vm.expectEmit();
|
|
217
|
+
emit IJBRulesets.RulesetQueued(
|
|
218
|
+
block.timestamp + 1, // queued after the first in the modifier
|
|
219
|
+
_projectId,
|
|
220
|
+
_duration,
|
|
221
|
+
_weight,
|
|
222
|
+
_weightCutPercent,
|
|
223
|
+
_noHook,
|
|
224
|
+
_packedMetadata,
|
|
225
|
+
block.timestamp,
|
|
226
|
+
address(this)
|
|
227
|
+
);
|
|
228
|
+
|
|
229
|
+
// Send: Call from this contract as it's been mock authorized above.
|
|
230
|
+
_rulesets.queueFor({
|
|
231
|
+
projectId: _projectId,
|
|
232
|
+
duration: _duration,
|
|
233
|
+
weight: _weight,
|
|
234
|
+
weightCutPercent: _weightCutPercent,
|
|
235
|
+
approvalHook: _noHook,
|
|
236
|
+
metadata: _packedMetadata,
|
|
237
|
+
mustStartAtOrAfter: _mustStartAt
|
|
238
|
+
});
|
|
239
|
+
|
|
240
|
+
(JBRuleset memory _latestRuleset, JBApprovalStatus _latestApprovalStatus) = _rulesets.latestQueuedOf(_projectId);
|
|
241
|
+
assertEq(uint256(_latestApprovalStatus), 0); // 0 = enum Empty of the basedOn ruleset
|
|
242
|
+
assertEq(_latestRuleset.id, block.timestamp + 1); // second queued ruleset
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
function test_WhenTheLatestRulesetIdEqZero() external view {
|
|
246
|
+
// it will return empty ruleset and JBApprovalStatus.Empty
|
|
247
|
+
|
|
248
|
+
(JBRuleset memory _latestRuleset, JBApprovalStatus _latestApprovalStatus) = _rulesets.latestQueuedOf(_projectId);
|
|
249
|
+
assertEq(uint256(_latestApprovalStatus), 0); // 0 = enum Empty of the basedOn ruleset
|
|
250
|
+
assertEq(_latestRuleset.id, 0); // second queued ruleset
|
|
251
|
+
}
|
|
252
|
+
}
|