@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,23 @@
|
|
|
1
|
+
TestAddToBalanceOf_Local
|
|
2
|
+
├── when shouldReturnHeldFees eq true
|
|
3
|
+
│ ├── given return amount is zero
|
|
4
|
+
│ │ └── it will set heldFeesOf project to zero
|
|
5
|
+
│ ├── given return amount is non-zero and leftoverAmount GTEQ amountFromFee
|
|
6
|
+
│ │ └── it will return feeAmountResultingIn
|
|
7
|
+
│ └── given return amount is non-zero and leftoverAmount LT amountFromFee
|
|
8
|
+
│ └── it will set heldFeesOf return feeAmountFrom and set leftoverAmount to zero
|
|
9
|
+
├── when shouldReturnHeldFees eq false
|
|
10
|
+
│ └── it will call terminalstore recordAddedBalanceFor and emit AddToBalance
|
|
11
|
+
├── when the project DNH accounting context for the token
|
|
12
|
+
│ └── it will revert TOKEN_NOT_ACCEPTED
|
|
13
|
+
├── when the terminals token eq native token
|
|
14
|
+
│ └── it will use msg.value
|
|
15
|
+
├── when the terminals token eq native token and msgvalue eq zero
|
|
16
|
+
│ └── it will revert NO_MSG_VALUE_ALLOWED
|
|
17
|
+
├── when the terminal is calling itself
|
|
18
|
+
│ └── it will not transfer
|
|
19
|
+
└── when pay metadata contains permit data
|
|
20
|
+
├── given the permit allowance lt amount
|
|
21
|
+
│ └── it will revert PERMIT_ALLOWANCE_NOT_ENOUGH
|
|
22
|
+
└── given permit allowance is good
|
|
23
|
+
└── it will set permit allowance to spend tokens for user via permit2
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
TestCashOutTokensOf_Local
|
|
2
|
+
├── when caller DN have permission
|
|
3
|
+
│ └── it will revert UNAUTHORIZED
|
|
4
|
+
├── when caller has permission
|
|
5
|
+
│ ├── given cashOutCount gt zero
|
|
6
|
+
│ │ └── it will call directory controller of and burnTokensOf
|
|
7
|
+
│ ├── given reclaimAmount gt zero beneficiary is not feeless and cashOutTaxRate dneq MAX_CASH_OUT_TAX_RATE
|
|
8
|
+
│ │ └── it will subtract the fee for the reclaim
|
|
9
|
+
│ ├── given the token is native
|
|
10
|
+
│ │ └── it will sendValue
|
|
11
|
+
│ ├── given the token is erc20
|
|
12
|
+
│ │ └── it will safeTransfer tokens
|
|
13
|
+
│ └── given amountEligibleForFees dneq zero
|
|
14
|
+
│ └── it will call directory primaryTerminalOf and process the fee
|
|
15
|
+
└── when a data hook is configured
|
|
16
|
+
├── given data hook returns cash out hook specs hook is feeless and token is native
|
|
17
|
+
│ └── it will pass the full amount to the hook and emit HookAfterRecordCashOut
|
|
18
|
+
├── given data hook returns cash out hook specs hook is feeless and token is erc20
|
|
19
|
+
│ └── it will safeIncreaseAllowance pass the full amount to the hook and emit HookAfterRecordCashOut
|
|
20
|
+
├── given data hook returns cash out hook specs hook is not feeless and token is native
|
|
21
|
+
│ └── it will calculate the fee pass the amount to the hook and emit HookAfterRecordCashOut
|
|
22
|
+
└── given data hook returns cash out hook specs hook is not feeless and token is erc20
|
|
23
|
+
└── it will safeIncreaseAllowance pass the amount to the hook and emit HookAfterRecordCashOut
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
TestExecutePayout_Local
|
|
2
|
+
├── when a split hook is configured
|
|
3
|
+
│ ├── given the split hook EQ feeless
|
|
4
|
+
│ │ └── it will not process a fee
|
|
5
|
+
│ ├── given the split hook DNEQ feeless
|
|
6
|
+
│ │ └── it will process a fee
|
|
7
|
+
│ ├── given the split hook DN support split hook interface
|
|
8
|
+
│ │ └── it will revert 400_1
|
|
9
|
+
│ ├── given the payout token is erc20
|
|
10
|
+
│ │ └── it will safe increase allowance
|
|
11
|
+
│ └── given the payout token is native
|
|
12
|
+
│ └── it will send eth in msgvalue
|
|
13
|
+
├── when a split projectId is configured
|
|
14
|
+
│ ├── given the projects terminal EQ zero address
|
|
15
|
+
│ │ └── it will revert 404_2
|
|
16
|
+
│ ├── given preferAddToBalance EQ true and terminal EQ this address
|
|
17
|
+
│ │ └── it will call _addToBalanceOf internal
|
|
18
|
+
│ ├── given preferAddToBalance EQ true and terminal EQ another address
|
|
19
|
+
│ │ └── it will call that terminals addToBalanceOf
|
|
20
|
+
│ ├── given preferAddToBalance DNEQ true and terminal EQ this address
|
|
21
|
+
│ │ └── it will call internal _pay
|
|
22
|
+
│ └── given preferAddToBalance DNEQ true and terminal EQ another address
|
|
23
|
+
│ └── it will call that terminals pay function
|
|
24
|
+
├── when a beneficiary is configured
|
|
25
|
+
│ ├── given beneficiary EQ feeless
|
|
26
|
+
│ │ └── it will payout to the beneficiary without taking fees
|
|
27
|
+
│ └── given beneficiary DNEQ feeless
|
|
28
|
+
│ └── it will payout to the beneficiary incurring fee
|
|
29
|
+
├── when there is no beneficiary split hook or project to pay
|
|
30
|
+
│ └── it will payout msgSender
|
|
31
|
+
└── when there are leftover payout funds
|
|
32
|
+
└── it will payout the rest to the project owner
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
TestExecuteProcessFee_Local
|
|
2
|
+
├── when caller is not itself
|
|
3
|
+
│ └── it will revert
|
|
4
|
+
├── when feeTerminal EQ zero address
|
|
5
|
+
│ └── it will revert 404_1
|
|
6
|
+
├── when token is erc20
|
|
7
|
+
│ └── it will safeIncreaseAllowance
|
|
8
|
+
├── when feeTerminal EQ this address
|
|
9
|
+
│ └── it will call internal _pay
|
|
10
|
+
└── when feeTerminal DNEQ this address
|
|
11
|
+
├── given token EQ NATIVE_TOKEN
|
|
12
|
+
│ └── it will call external pay with msgvalue
|
|
13
|
+
└── given token DNEQ NATIVE_TOKEN
|
|
14
|
+
└── it will call external pay with zero msgvalue
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
TestMigrateBalanceOf_Local
|
|
2
|
+
├── when caller does not have permission
|
|
3
|
+
│ └── it will revert UNAUTHORIZED
|
|
4
|
+
├── when the terminal to does not accept the token
|
|
5
|
+
│ └── it will revert TERMINAL_TOKENS_INCOMPATIBLE
|
|
6
|
+
└── when balance GT zero and caller is permissioned
|
|
7
|
+
├── given there are held fees
|
|
8
|
+
│ └── it will process held fees
|
|
9
|
+
├── given token is ERC20
|
|
10
|
+
│ └── it will safeIncreaseAllowance and addToBalanceOf
|
|
11
|
+
└── given token is native
|
|
12
|
+
└── it will addToBalanceOf with value in msgvalue
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
TestPay_Local
|
|
2
|
+
├── when tokens returned LT minReturnedTokens
|
|
3
|
+
│ └── it will revert UNDER_MIN_RETURNED_TOKENS
|
|
4
|
+
├── when terminalStore returns tokenCount GT zero and happypath
|
|
5
|
+
│ └── it will mint tokens and emit Pay
|
|
6
|
+
├── when a pay hook is configured and happypath
|
|
7
|
+
│ ├── given the paid token is an ERC20
|
|
8
|
+
│ │ └── it will increase allowance to the hook and emit HookAfterRecordPay and Pay
|
|
9
|
+
│ └── given the paid token is native
|
|
10
|
+
│ └── it will send ETH to the hook and emit HookAfterRecordPay and Pay
|
|
11
|
+
├── when the project DNH accounting context for the token
|
|
12
|
+
│ └── it will revert TOKEN_NOT_ACCEPTED
|
|
13
|
+
├── when the terminals token eq native token
|
|
14
|
+
│ └── it will use msg.value
|
|
15
|
+
├── when the terminals token eq native token and msgvalue eq zero
|
|
16
|
+
│ └── it will revert NO_MSG_VALUE_ALLOWED
|
|
17
|
+
├── when the terminal is calling itself
|
|
18
|
+
│ └── it will not transfer
|
|
19
|
+
└── when pay metadata contains permit data
|
|
20
|
+
├── given the permit allowance lt amount
|
|
21
|
+
│ └── it will revert PERMIT_ALLOWANCE_NOT_ENOUGH
|
|
22
|
+
└── given permit allowance is good
|
|
23
|
+
└── it will set permit allowance to spend tokens for user via permit2
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
TestProcessHeldFeesOf_Local
|
|
2
|
+
├── when held fee unlockTimestamp GT blocktimestamp
|
|
3
|
+
│ └── it will add the fee back to _heldFeesOf
|
|
4
|
+
└── when held fee is unlocked
|
|
5
|
+
├── given executeProcessFee succeeds
|
|
6
|
+
│ └── it will process the fee and emit ProcessFee
|
|
7
|
+
└── given executeProcessFee fails
|
|
8
|
+
└── it will readd balance and emit FeeReverted
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
TestPayoutsOf_Local
|
|
2
|
+
├── when amountPaidOut lt minTokensPaidOut
|
|
3
|
+
│ └── it will revert UNDER_MIN_TOKENS_PAID_OUT
|
|
4
|
+
├── when a split hook is configured
|
|
5
|
+
│ ├── given the split hook is feeless
|
|
6
|
+
│ │ └── it will not process a fee
|
|
7
|
+
│ ├── given the split hook DNEQ feeless
|
|
8
|
+
│ │ └── it will process a fee
|
|
9
|
+
│ ├── given the split hook DN support split hook interface
|
|
10
|
+
│ │ └── it will revert 400_1
|
|
11
|
+
│ ├── given the payout token is erc20
|
|
12
|
+
│ │ └── it will safe increase allowance
|
|
13
|
+
│ └── given the payout token is native
|
|
14
|
+
│ └── it will send eth in msgvalue
|
|
15
|
+
├── when a split projectId is configured
|
|
16
|
+
│ ├── given the projects terminal EQ zero address
|
|
17
|
+
│ │ └── it will revert 404_2
|
|
18
|
+
│ ├── given preferAddToBalance EQ true and terminal EQ this address
|
|
19
|
+
│ │ └── it will call _addToBalanceOf internal
|
|
20
|
+
│ ├── given preferAddToBalance EQ true and terminal EQ another address
|
|
21
|
+
│ │ └── it will call that terminals addToBalanceOf
|
|
22
|
+
│ ├── given preferAddToBalance DNEQ true and terminal EQ this address
|
|
23
|
+
│ │ └── it will call internal _pay
|
|
24
|
+
│ └── given preferAddToBalance DNEQ true and terminal EQ another address
|
|
25
|
+
│ └── it will call that terminals pay function
|
|
26
|
+
├── when a beneficiary is configured
|
|
27
|
+
│ ├── given beneficiary EQ feeless
|
|
28
|
+
│ │ └── it will payout to the beneficiary without taking fees
|
|
29
|
+
│ └── given beneficiary DNEQ feeless
|
|
30
|
+
│ └── it will payout to the beneficiary incurring fee
|
|
31
|
+
├── when there is no beneficiary split hook or project to pay
|
|
32
|
+
│ └── it will payout msgSender
|
|
33
|
+
└── when there are leftover payout funds
|
|
34
|
+
└── it will payout the rest to the project owner
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
TestUseAllowanceOf_Local
|
|
2
|
+
├── when caller does not have permission
|
|
3
|
+
│ └── it will revert UNAUTHORIZED
|
|
4
|
+
├── when amountPaidOut LT minTokensPaidOut
|
|
5
|
+
│ └── it will revert UNDER_MIN_TOKENS_PAID_OUT
|
|
6
|
+
├── when msgSender EQ feeless
|
|
7
|
+
│ └── it will not incur fees
|
|
8
|
+
├── when msgSender DNEQ feeless
|
|
9
|
+
│ ├── given ruleset holdFees EQ true
|
|
10
|
+
│ │ └── it will hold fees and emit HoldFee
|
|
11
|
+
│ └── given ruleset holdFees DNEQ true
|
|
12
|
+
│ └── it will not hold fees and emit ProcessFee
|
|
13
|
+
├── when token EQ NATIVE_TOKEN
|
|
14
|
+
│ └── it will send ETH via sendValue
|
|
15
|
+
└── when token EQ ERC20
|
|
16
|
+
└── it will call safeTransfer
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
TestHasPermissions_Local
|
|
2
|
+
├── when permissionId gt 255
|
|
3
|
+
│ └── it will revert with PERMISSION_ID_OUT_OF_BOUNDS
|
|
4
|
+
└── when permissionId lt 255
|
|
5
|
+
├── given operator has permission for account of project
|
|
6
|
+
│ └── it will return true
|
|
7
|
+
└── given operator doesn't have permission for account of project
|
|
8
|
+
└── it will return false
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
TestHasPermissions_Local
|
|
2
|
+
├── when any permissionId gt 255
|
|
3
|
+
│ └── it will revert with PERMISSION_ID_OUT_OF_BOUNDS
|
|
4
|
+
└── when all permissionIds lt 255
|
|
5
|
+
├── given operator does not have all permissions specified
|
|
6
|
+
│ └── it will return false
|
|
7
|
+
└── given operator has all permissions specified
|
|
8
|
+
└── it will return true
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
TestAddPriceFeedFor_Local
|
|
2
|
+
├── when projectId is the DEFAULT_PROJECT_ID and msg sender is the owner
|
|
3
|
+
│ └── it should add the price feed without checking permissions
|
|
4
|
+
├── when projectId is not the DEFAULT_PROJECT_ID
|
|
5
|
+
│ └── it should require ADD_PRICE_FEED permission from the project's owner or an operator
|
|
6
|
+
├── when pricingCurrency or unitCurrency is 0
|
|
7
|
+
│ └── it should revert with INVALID_CURRENCY
|
|
8
|
+
├── when a default feed for the currency pair or its inverse already exists
|
|
9
|
+
│ └── it should revert with PRICE_FEED_ALREADY_EXISTS
|
|
10
|
+
├── when this project already has feeds for the currency pair or its inverse
|
|
11
|
+
│ └── it should revert with PRICE_FEED_ALREADY_EXISTS
|
|
12
|
+
└── given the above conditions are met
|
|
13
|
+
├── it should store the feed for the project and currency pair
|
|
14
|
+
└── it should emit AddPriceFeed event with projectId, pricingCurrency, unitCurrency, and feed
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
TestPricePerUnitOf_Local
|
|
2
|
+
├── when pricingCurrency is the same as unitCurrency
|
|
3
|
+
│ └── it should return 1 with requested decimals
|
|
4
|
+
├── when price feed exists for projectId and pricingCurrency to unitCurrency
|
|
5
|
+
│ └── it should return the current price from price feed
|
|
6
|
+
├── when inverse price feed exists for projectId and unitCurrency to pricingCurrency
|
|
7
|
+
│ └── it should return the inverse of the current price from inverse price feed
|
|
8
|
+
├── when projectId is not the DEFAULT_PROJECT_ID and no direct or inverse price feed is found
|
|
9
|
+
│ └── it should attempt to use the default price feed for DEFAULT_PROJECT_ID
|
|
10
|
+
└── when no price feed is found or exists including default case
|
|
11
|
+
└── it should revert with PRICE_FEED_NOT_FOUND
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
TestCreateFor_Local
|
|
2
|
+
├── when projectId plus one is gt uint256 max
|
|
3
|
+
│ └── it will revert
|
|
4
|
+
└── when projectId plus one is lt or eq to uint256 max
|
|
5
|
+
├── given owner is not a contract
|
|
6
|
+
│ └── it will mint and emit Create
|
|
7
|
+
└── given owner is a contract
|
|
8
|
+
├── given it is IERC721Receiver
|
|
9
|
+
│ └── it will mint and emit Create
|
|
10
|
+
└── given it does not support IERC721Receiver
|
|
11
|
+
└── it will revert
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
TestSupportsInterface_Local
|
|
2
|
+
├── when interfaceId is IJBProjects
|
|
3
|
+
│ └── it will return true
|
|
4
|
+
├── when interfaceId is IERC721
|
|
5
|
+
│ └── it will return true
|
|
6
|
+
├── when interfaceId is IERC721Metadata
|
|
7
|
+
│ └── it will return true
|
|
8
|
+
└── when interfaceId is anything else
|
|
9
|
+
└── it will return false
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
TestCurrentApprovalStatusForLatestRulesetOf_Local
|
|
2
|
+
└── when a ruleset is configured
|
|
3
|
+
├── given the basedOn ruleset eq zero
|
|
4
|
+
│ └── it will return status Empty
|
|
5
|
+
├── given there is no approval hook
|
|
6
|
+
│ └── it will return status Empty
|
|
7
|
+
└── given basedOn DNEQ zero and there is an approval hook
|
|
8
|
+
└── it will return the approval status
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
TestCurrentOf_Local
|
|
2
|
+
├── when latestrulesetOf project EQ zero
|
|
3
|
+
│ └── it will return an empty ruleset
|
|
4
|
+
├── when latest rulesetId DNEQ zero
|
|
5
|
+
│ ├── given the currentlyApprovableRulesetIdOf approval status EQ Approved or Empty
|
|
6
|
+
│ │ └── it will return the latest approved ruleset
|
|
7
|
+
│ ├── given the currentlyApprovableRulesetIdOf approval status DNEQ Approved or Empty
|
|
8
|
+
│ │ └── it will return the ruleset the pending approval ruleset is basedOn
|
|
9
|
+
│ └── given the currentlyApprovableRulesetIdOf EQ zero and approval status of the latest ruleset DNEQ Approved or Empty
|
|
10
|
+
│ └── it will return the basedOn of the latest ruleset
|
|
11
|
+
└── when base of the currentlyApprovableRulesetIdOf duration EQ zero
|
|
12
|
+
└── it will return simulateCycledRulesetBasedOn with allowMidRuleset true
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
TestLatestQueuedRulesetOf_Local
|
|
2
|
+
├── when the latest rulesetId dneq zero
|
|
3
|
+
│ ├── given the ruleset is based on ruleset zero
|
|
4
|
+
│ │ └── it will return JBApprovalStatus.Empty
|
|
5
|
+
│ ├── given the ruleset is based on nonzero ruleset and the basedOn approvalhook dneq zero address
|
|
6
|
+
│ │ └── it will return the approvalHooks approvalStatusOf
|
|
7
|
+
│ └── given the ruleset is based on nonzero ruleset and the basedOn approvalhook eq zero address
|
|
8
|
+
│ └── it will return JBApprovalStatus.Empty
|
|
9
|
+
└── when the latest rulesetId eq zero
|
|
10
|
+
└── it will return empty ruleset and JBApprovalStatus.Empty
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
TestRulesetsOf_Local
|
|
2
|
+
├── when startingId eq zero
|
|
3
|
+
│ └── it will return latest ruleset
|
|
4
|
+
├── when startingId dneq zero
|
|
5
|
+
│ └── it will return predecessors up to latest ruleset
|
|
6
|
+
├── when size is zero
|
|
7
|
+
│ └── it will return an empty array
|
|
8
|
+
├── when there are no rulesets
|
|
9
|
+
│ └── it will return an empty array
|
|
10
|
+
└── when size is gt configured rulesets
|
|
11
|
+
└── it will return up to latest ruleset
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
TestUpcomingOf_Local
|
|
2
|
+
├── when latest ruleset Id EQ zero
|
|
3
|
+
│ └── it will return an empty ruleset
|
|
4
|
+
├── when upcoming ruleset Id DNEQ zero
|
|
5
|
+
│ ├── given status EQ Approved or ApprovalExpected or Empty
|
|
6
|
+
│ │ └── it will return that ruleset
|
|
7
|
+
│ └── given status DNEQ Approved or ApprovalExpected or Empty
|
|
8
|
+
│ └── it will return the ruleset upcoming was based on
|
|
9
|
+
├── when upcoming ruleset Id EQ zero
|
|
10
|
+
│ └── given the latest ruleset starts in the future
|
|
11
|
+
│ └── it will return the ruleset that latestRuleset is based on
|
|
12
|
+
├── when latest ruleset has duration eq zero
|
|
13
|
+
│ └── it will return an empty ruleset
|
|
14
|
+
└── when ruleset duration dneq zero
|
|
15
|
+
├── given approval status is approved or empty
|
|
16
|
+
│ └── it will return a simulatedCycledRulesetBasedOn
|
|
17
|
+
├── given the rulesets approval failed and it's basedOn duration DNEQ zero
|
|
18
|
+
│ └── it will return the simulatedCycledRulesetBasedOn it was based on
|
|
19
|
+
└── given the rulesets approval failed and it's basedOn duration EQ zero
|
|
20
|
+
└── it will return an empty ruleset
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
TestUpdateRulesetWeightCache_Local
|
|
2
|
+
├── when latest ruleset of project duration or weightCutPercent EQ zero
|
|
3
|
+
│ └── it will return without updating
|
|
4
|
+
└── when latest ruleset has proper duration and weightCutPercent
|
|
5
|
+
└── it will store a new derivedWeightFrom and weightCutMultiple in storage
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
TestSetSplitGroupsOf_Local
|
|
2
|
+
├── when caller is not controller
|
|
3
|
+
│ └── it will revert with CONTROLLER_UNAUTHORIZED
|
|
4
|
+
└── when caller is controller
|
|
5
|
+
├── given previously locked splits are included
|
|
6
|
+
│ └── it will revert with PREVIOUS_LOCKED_SPLITS_NOT_INCLUDED
|
|
7
|
+
└── given previously locked splits are not included
|
|
8
|
+
├── given any configured split percent is zero
|
|
9
|
+
│ └── it will revert with INVALID_SPLIT_PERCENT
|
|
10
|
+
├── given projectId gt uint64 max
|
|
11
|
+
│ └── it will revert with INVALID_PROJECT_ID
|
|
12
|
+
├── given splits total to over SPLITS_TOTAL_PERCENT
|
|
13
|
+
│ └── it will revert with INVALID_TOTAL_PERCENT
|
|
14
|
+
├── given lockedUntil gt uint48 max
|
|
15
|
+
│ └── it will revert with INVALID_LOCKED_UNTIL
|
|
16
|
+
└── given all conditions are satisfied
|
|
17
|
+
└── it will store splits and emit SetSplit for each configured
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
TestCurrentReclaimableSurplusOf_Local
|
|
2
|
+
├── when useTotalSurplus eq true
|
|
3
|
+
│ └── it will use the total surplus of all terminals
|
|
4
|
+
└── when useTotalSurplus eq false
|
|
5
|
+
├── given currentSurplus eq zero
|
|
6
|
+
│ └── it will return zero
|
|
7
|
+
├── given currentSurplus gt zero
|
|
8
|
+
│ └── it will get the number of outstanding tokens and return the reclaimable surplus
|
|
9
|
+
├── given tokenCount is eq to totalSupply
|
|
10
|
+
│ └── it will return the rest of the surplus
|
|
11
|
+
├── given cash out tax rate eq zero
|
|
12
|
+
│ └── it will return zero
|
|
13
|
+
├── given cash out tax rate eq MAX_CASH_OUT_TAX_RATE
|
|
14
|
+
│ └── it will return the linear proportion
|
|
15
|
+
└── given cash out tax rate dneq MAX_CASH_OUT_TAX_RATE
|
|
16
|
+
└── it will return the calculated proportion
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
TestCurrentSurplusOf_Local
|
|
2
|
+
├── when surplus requires decimal adjustment
|
|
3
|
+
│ ├── given surplus requires decimal adjustment and accounting currency matches target currency
|
|
4
|
+
│ │ └── it will adjust surplus to target decimals without conversion
|
|
5
|
+
│ └── given surplus requires decimal adjustment and accounting currency does not match target currency
|
|
6
|
+
│ └── it will convert surplus to target currency with decimal adjustment
|
|
7
|
+
├── when surplus does not require decimal adjustment
|
|
8
|
+
│ ├── given accounting currency matches target currency
|
|
9
|
+
│ │ └── it will return standard surplus
|
|
10
|
+
│ └── given accounting currency does not match target currency
|
|
11
|
+
│ └── it will convert surplus to target currency without decimal adjustment
|
|
12
|
+
├── given a payout limit requires decimal adjustment
|
|
13
|
+
│ ├── given a payout limit requires decimal adjustment and payout limit currency matches target currency
|
|
14
|
+
│ │ └── it will adjust payout limit to target decimals without conversion
|
|
15
|
+
│ └── given payout limit currency that requires decimal adjustment does not match target currency
|
|
16
|
+
│ └── it will convert payout limit to target currency with decimal adjustment
|
|
17
|
+
├── given a payout limit does not require decimal adjustment
|
|
18
|
+
│ ├── given payout limit currency matches target currency
|
|
19
|
+
│ │ └── it will return standard surplus
|
|
20
|
+
│ └── given payout limit currency does not match target currency
|
|
21
|
+
│ └── it will convert payout limit target currency without decimal adjustment
|
|
22
|
+
├── given cumulative payout limit greater than surplus
|
|
23
|
+
│ └── it will decrease surplus by payout limit amount
|
|
24
|
+
└── given cumulative payout limit not greater than surplus
|
|
25
|
+
└── it will return zero
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
TestRecordCashOutFor_Local
|
|
2
|
+
├── when current ruleset useTotalSurplusForCashOuts eq true
|
|
3
|
+
│ ├── given the cashOutCount gt totalSupply
|
|
4
|
+
│ │ └── it will revert INSUFFICIENT_TOKENS
|
|
5
|
+
│ ├── given the currentSurplus gt zero
|
|
6
|
+
│ │ └── it will set reclaim amount using the currentSurplus
|
|
7
|
+
│ ├── given current ruleset useDataHookForCashOut eq true
|
|
8
|
+
│ │ └── it will call the dataHook for the reclaim amount and hookSpecs
|
|
9
|
+
│ ├── given the amount reclaimed gt projects balance
|
|
10
|
+
│ │ └── it will revert INADEQUATE_TERMINAL_STORE_BALANCE
|
|
11
|
+
│ ├── given the balance diff gt zero
|
|
12
|
+
│ │ └── it will deduct from the projects balance
|
|
13
|
+
│ └── given the balance diff eq zero
|
|
14
|
+
│ └── it will not deduct
|
|
15
|
+
└── when the current ruleset useTotalSurplusForCashOuts eq false
|
|
16
|
+
└── it will use the standard surplus calculation
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
TestRecordPaymentFrom_Local
|
|
2
|
+
├── when current ruleset cycleNumber is zero
|
|
3
|
+
│ └── it will revert INVALID_RULESET
|
|
4
|
+
├── when current ruleset pausePay eq true
|
|
5
|
+
│ └── it will revert RULESET_PAYMENT_PAUSED
|
|
6
|
+
├── when current ruleset useDataHookForPay eq true and the hook dneq zero address
|
|
7
|
+
│ ├── given the hook returns a non zero specifiedAmount
|
|
8
|
+
│ │ └── it will decrement the amount being added to the local balance
|
|
9
|
+
│ └── given weight returned by the hook is zero
|
|
10
|
+
│ └── it will return zero as the tokenCount
|
|
11
|
+
├── when a hook is not configured
|
|
12
|
+
│ └── it will derive weight from the ruleset
|
|
13
|
+
└── when the terminal should base its weight on a currency other than the ruleset baseCurrency
|
|
14
|
+
└── it will return an adjusted weightRatio
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
TestRecordPayoutFor_Local
|
|
2
|
+
└── when there is a used payout limit of the current ruleset
|
|
3
|
+
├── given the calling amount gt what is available to payout
|
|
4
|
+
│ └── it will revert PAYOUT_LIMIT_EXCEEDED
|
|
5
|
+
├── given the calling currency eq the context currency
|
|
6
|
+
│ └── it will not convert prices and return
|
|
7
|
+
├── given the calling currency dneq the context currency
|
|
8
|
+
│ └── it will convert prices and return
|
|
9
|
+
└── given the amountPaidOut exceeds balance
|
|
10
|
+
└── it will revert INADEQUATE_TERMINAL_STORE_BALANCE
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
TestRecordUsedAllowanceOf_Local
|
|
2
|
+
├── when amount is within range to use surplus allowance
|
|
3
|
+
│ ├── given calling currency eq accounting currency
|
|
4
|
+
│ │ └── it will not convert prices
|
|
5
|
+
│ ├── given calling currency dneq accounting currency
|
|
6
|
+
│ │ └── it will convert prices
|
|
7
|
+
│ └── given there is inadequate balance after price conversion
|
|
8
|
+
│ └── it will revert INADEQUATE_TERMINAL_STORE_BALANCE
|
|
9
|
+
└── when amount is not within range to use surplus allowance
|
|
10
|
+
└── it will revert INADEQUATE_CONTROLLER_ALLOWANCE
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
TestBurnFrom_Local
|
|
2
|
+
├── when caller is controller
|
|
3
|
+
│ ├── given the calling amount GT tokenbalance plus creditbalance of holder
|
|
4
|
+
│ │ └── it will revert INSUFFICIENT_FUNDS
|
|
5
|
+
│ ├── given there is a credit balance
|
|
6
|
+
│ │ └── it will subtract credits from creditBalanceOf and totalCreditSupplyOf
|
|
7
|
+
│ └── given there is erc20 token balance
|
|
8
|
+
│ └── it will burn tokens
|
|
9
|
+
└── when caller DNEQ controller
|
|
10
|
+
└── it will revert CONTROLLER_UNAUTHORIZED
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
TestClaimTokensFor_Local
|
|
2
|
+
├── when caller is controller
|
|
3
|
+
│ ├── given token address EQ zero
|
|
4
|
+
│ │ └── it will revert TOKEN_NOT_FOUND
|
|
5
|
+
│ ├── given creditBalanceOf GT calling amount
|
|
6
|
+
│ │ └── it will revert INSUFFICIENT_CREDITS
|
|
7
|
+
│ └── given happy path
|
|
8
|
+
│ └── it will mint to the beneficiary and emit ClaimTokens
|
|
9
|
+
└── when caller is not controller
|
|
10
|
+
└── it will revert CONTROLLER_UNAUTHORIZED
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
TestDeployERC20For_Local
|
|
2
|
+
├── when bytes length EQ zero
|
|
3
|
+
│ └── it will revert EMPTY_NAME
|
|
4
|
+
├── when symbol length EQ zero
|
|
5
|
+
│ └── it will revert EMPTY_SYMBOL
|
|
6
|
+
├── when project already has a configured token
|
|
7
|
+
│ └── it will revert PROJECT_ALREADY_HAS_TOKEN
|
|
8
|
+
└── when happy path
|
|
9
|
+
├── given a salt is provided
|
|
10
|
+
│ └── it will create and initialize a deterministic clone based on the msgsender and salt
|
|
11
|
+
└── given a salt is not provided
|
|
12
|
+
└── it will clone and initialize a indeterministically generated clone
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
TestMintFor_Local
|
|
2
|
+
├── when caller is controller of project
|
|
3
|
+
│ ├── given token of the project EQ zero address
|
|
4
|
+
│ │ └── it will add tokens to credit balances and total credit supply
|
|
5
|
+
│ ├── given token DNEQ zero address
|
|
6
|
+
│ │ └── it will call token mint
|
|
7
|
+
│ └── given total supply after mint or credits GT uint208 max
|
|
8
|
+
│ └── it will revert OVERFLOW_ALERT
|
|
9
|
+
└── when caller is not controller
|
|
10
|
+
└── it will revert CONTROLLER_UNAUTHORIZED
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
TestSetTokenFor_Local
|
|
2
|
+
├── when token is the zero address
|
|
3
|
+
│ └── it will revert EMPTY_TOKEN
|
|
4
|
+
├── when a token is already set
|
|
5
|
+
│ └── it will revert TOKEN_ALREADY_SET
|
|
6
|
+
├── when a token is associated with another project
|
|
7
|
+
│ └── it will revert TOKEN_ALREADY_SET
|
|
8
|
+
├── when a tokens decimals DNEQ 18
|
|
9
|
+
│ └── it will revert TOKENS_MUST_HAVE_18_DECIMALS
|
|
10
|
+
└── when happy path
|
|
11
|
+
└── it will set token states and emit SetToken
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
TestTransferCreditsFrom_Local
|
|
2
|
+
└── when caller is controller
|
|
3
|
+
├── given recipient EQ zero address
|
|
4
|
+
│ └── it will revert RECIPIENT_ZERO_ADDRESS
|
|
5
|
+
├── given calling amount GT creditBalance
|
|
6
|
+
│ └── it will revert INSUFFICIENT_CREDITS
|
|
7
|
+
└── given happy path
|
|
8
|
+
└── it will subtract creditBalanceOf from holder to recipient and emit TransferCredits
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
TestMintTokensOf
|
|
2
|
+
├── when no ruleset is active
|
|
3
|
+
│ └── it should be able to mint
|
|
4
|
+
├── when minting is disabled in the funding cycle ruleset
|
|
5
|
+
│ └── it should revert
|
|
6
|
+
└── when minting is enabled in the funding cycle ruleset
|
|
7
|
+
├── given that there are tokens available to mint
|
|
8
|
+
│ └── it should be possible to mint
|
|
9
|
+
├── given that a data source is configured
|
|
10
|
+
│ └── it should be able to mint
|
|
11
|
+
└── given that a data source has permissioned another contract to mint
|
|
12
|
+
└── it should be able to mint
|