@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,129 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity 0.8.23;
|
|
3
|
+
|
|
4
|
+
import {JBRuleset} from "src/structs/JBRuleset.sol";
|
|
5
|
+
import {JBRulesetMetadata} from "src/structs/JBRulesetMetadata.sol";
|
|
6
|
+
import {JBRulesetMetadataResolver} from "src/libraries/JBRulesetMetadataResolver.sol";
|
|
7
|
+
import {JBConstants} from "src/libraries/JBConstants.sol";
|
|
8
|
+
import {IJBRulesetApprovalHook} from "src/interfaces/IJBRulesetApprovalHook.sol";
|
|
9
|
+
import "lib/forge-std/src/Test.sol";
|
|
10
|
+
|
|
11
|
+
contract JBTest is Test {
|
|
12
|
+
using JBRulesetMetadataResolver for JBRulesetMetadata;
|
|
13
|
+
|
|
14
|
+
function mockExpect(address _where, bytes memory _encodedCall, bytes memory _returns) public {
|
|
15
|
+
vm.mockCall(_where, _encodedCall, _returns);
|
|
16
|
+
vm.expectCall(_where, _encodedCall);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// Multiple calls with different return values
|
|
20
|
+
function mockExpectSubsequent(address _where, bytes memory _encodedCall, bytes[] memory _returns) public {
|
|
21
|
+
// Mocks calls with different return values
|
|
22
|
+
vm.mockCalls(_where, _encodedCall, _returns);
|
|
23
|
+
|
|
24
|
+
// Will check that multiple calls are made
|
|
25
|
+
for (uint256 i = 0; i < _returns.length; i++) {
|
|
26
|
+
vm.expectCall(_where, _encodedCall);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function generateFriendlyRuleset() public view returns (JBRuleset memory) {
|
|
31
|
+
JBRulesetMetadata memory _rulesMetadata = JBRulesetMetadata({
|
|
32
|
+
reservedPercent: JBConstants.MAX_RESERVED_PERCENT,
|
|
33
|
+
cashOutTaxRate: JBConstants.MAX_CASH_OUT_TAX_RATE,
|
|
34
|
+
baseCurrency: uint32(uint160(JBConstants.NATIVE_TOKEN)),
|
|
35
|
+
pausePay: false,
|
|
36
|
+
pauseCreditTransfers: false,
|
|
37
|
+
allowOwnerMinting: true,
|
|
38
|
+
allowSetCustomToken: true,
|
|
39
|
+
allowTerminalMigration: true,
|
|
40
|
+
allowSetTerminals: true,
|
|
41
|
+
ownerMustSendPayouts: false,
|
|
42
|
+
allowSetController: true,
|
|
43
|
+
allowAddAccountingContext: true,
|
|
44
|
+
allowAddPriceFeed: true,
|
|
45
|
+
holdFees: false,
|
|
46
|
+
useTotalSurplusForCashOuts: true,
|
|
47
|
+
useDataHookForPay: false,
|
|
48
|
+
useDataHookForCashOut: false,
|
|
49
|
+
dataHook: address(0),
|
|
50
|
+
metadata: 0
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
uint256 packed = _rulesMetadata.packRulesetMetadata();
|
|
54
|
+
|
|
55
|
+
return JBRuleset({
|
|
56
|
+
cycleNumber: 1,
|
|
57
|
+
id: 1,
|
|
58
|
+
basedOnId: 0,
|
|
59
|
+
start: uint48(block.timestamp),
|
|
60
|
+
duration: 10 days,
|
|
61
|
+
weight: 0,
|
|
62
|
+
weightCutPercent: 0,
|
|
63
|
+
approvalHook: IJBRulesetApprovalHook(address(0)),
|
|
64
|
+
metadata: packed
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function generateEmptyMetadata() public view returns (JBRulesetMetadata memory) {
|
|
69
|
+
return JBRulesetMetadata({
|
|
70
|
+
reservedPercent: 0,
|
|
71
|
+
cashOutTaxRate: 0,
|
|
72
|
+
baseCurrency: uint32(uint160(JBConstants.NATIVE_TOKEN)),
|
|
73
|
+
pausePay: false,
|
|
74
|
+
pauseCreditTransfers: false,
|
|
75
|
+
allowOwnerMinting: false,
|
|
76
|
+
allowSetCustomToken: false,
|
|
77
|
+
allowTerminalMigration: false,
|
|
78
|
+
allowSetTerminals: false,
|
|
79
|
+
ownerMustSendPayouts: false,
|
|
80
|
+
allowSetController: false,
|
|
81
|
+
allowAddAccountingContext: true,
|
|
82
|
+
allowAddPriceFeed: false,
|
|
83
|
+
holdFees: false,
|
|
84
|
+
useTotalSurplusForCashOuts: false,
|
|
85
|
+
useDataHookForPay: false,
|
|
86
|
+
useDataHookForCashOut: false,
|
|
87
|
+
dataHook: address(0),
|
|
88
|
+
metadata: 0
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function generateUnfriendlyRuleset() public view returns (JBRuleset memory) {
|
|
93
|
+
JBRulesetMetadata memory _rulesMetadata = JBRulesetMetadata({
|
|
94
|
+
reservedPercent: JBConstants.MAX_RESERVED_PERCENT,
|
|
95
|
+
cashOutTaxRate: JBConstants.MAX_CASH_OUT_TAX_RATE,
|
|
96
|
+
baseCurrency: uint32(uint160(JBConstants.NATIVE_TOKEN)),
|
|
97
|
+
pausePay: true,
|
|
98
|
+
pauseCreditTransfers: true,
|
|
99
|
+
allowOwnerMinting: false,
|
|
100
|
+
allowSetCustomToken: false,
|
|
101
|
+
allowTerminalMigration: false,
|
|
102
|
+
allowSetTerminals: false,
|
|
103
|
+
ownerMustSendPayouts: true,
|
|
104
|
+
allowSetController: false,
|
|
105
|
+
allowAddAccountingContext: false,
|
|
106
|
+
allowAddPriceFeed: false,
|
|
107
|
+
holdFees: true,
|
|
108
|
+
useTotalSurplusForCashOuts: true,
|
|
109
|
+
useDataHookForPay: false,
|
|
110
|
+
useDataHookForCashOut: false,
|
|
111
|
+
dataHook: address(0),
|
|
112
|
+
metadata: 0
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
uint256 packed = _rulesMetadata.packRulesetMetadata();
|
|
116
|
+
|
|
117
|
+
return JBRuleset({
|
|
118
|
+
cycleNumber: 1,
|
|
119
|
+
id: 1,
|
|
120
|
+
basedOnId: 0,
|
|
121
|
+
start: uint48(block.timestamp),
|
|
122
|
+
duration: 10 days,
|
|
123
|
+
weight: 0,
|
|
124
|
+
weightCutPercent: 0,
|
|
125
|
+
approvalHook: IJBRulesetApprovalHook(address(0)),
|
|
126
|
+
metadata: packed
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity 0.8.23;
|
|
3
|
+
|
|
4
|
+
import {JBMetadataResolver} from "../../src/libraries/JBMetadataResolver.sol";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @notice Contract to create structured metadata, storing {id: data} entries.
|
|
8
|
+
*
|
|
9
|
+
* @dev Metadata are built as:
|
|
10
|
+
* - 32B of reserved space for the protocol
|
|
11
|
+
* - a lookup table `Id: offset`, defining the offset of the data for a given 4 bytes id.
|
|
12
|
+
* The offset fits 1 bytes, the ID 4 bytes. This table is padded to 32B.
|
|
13
|
+
* - the data for each id, padded to 32B each
|
|
14
|
+
*
|
|
15
|
+
* +-----------------------+ offset: 0
|
|
16
|
+
* | 32B reserved |
|
|
17
|
+
* +-----------------------+ offset: 1 = end of first 32B
|
|
18
|
+
* | (ID1,offset1) |
|
|
19
|
+
* | (ID2,offset2) |
|
|
20
|
+
* | 0's padding |
|
|
21
|
+
* +-----------------------+ offset: offset1 = 1 + number of words taken by the padded table
|
|
22
|
+
* | id1 data1 |
|
|
23
|
+
* | 0's padding |
|
|
24
|
+
* +-----------------------+ offset: offset2 = offset1 + number of words taken by the data1
|
|
25
|
+
* | id2 data2 |
|
|
26
|
+
* | 0's padding |
|
|
27
|
+
* +-----------------------+
|
|
28
|
+
*
|
|
29
|
+
* This contract is intended to expose the library functions as a helper for frontends.
|
|
30
|
+
*/
|
|
31
|
+
contract MetadataResolverHelper {
|
|
32
|
+
//*********************************************************************//
|
|
33
|
+
// --------------------------- custom errors ------------------------- //
|
|
34
|
+
//*********************************************************************//
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* @notice Parse the metadata to find the data for a specific ID
|
|
38
|
+
*
|
|
39
|
+
* @dev Returns false and an empty bytes if no data is found
|
|
40
|
+
*
|
|
41
|
+
* @param _id The ID to find
|
|
42
|
+
* @param _metadata The metadata to parse
|
|
43
|
+
*
|
|
44
|
+
* @return _found Whether the {id:data} was found
|
|
45
|
+
* @return _targetData The data for the ID (can be empty)
|
|
46
|
+
*/
|
|
47
|
+
function getDataFor(
|
|
48
|
+
bytes4 _id,
|
|
49
|
+
bytes calldata _metadata
|
|
50
|
+
)
|
|
51
|
+
public
|
|
52
|
+
pure
|
|
53
|
+
returns (bool _found, bytes memory _targetData)
|
|
54
|
+
{
|
|
55
|
+
return JBMetadataResolver.getDataFor(_id, _metadata);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* @notice Create the metadata for a list of {id:data}
|
|
60
|
+
*
|
|
61
|
+
* @dev Intended for offchain use (gas heavy)
|
|
62
|
+
*
|
|
63
|
+
* @param _ids The list of ids
|
|
64
|
+
* @param _datas The list of corresponding datas
|
|
65
|
+
*
|
|
66
|
+
* @return metadata The resulting metadata
|
|
67
|
+
*/
|
|
68
|
+
function createMetadata(
|
|
69
|
+
bytes4[] calldata _ids,
|
|
70
|
+
bytes[] calldata _datas
|
|
71
|
+
)
|
|
72
|
+
public
|
|
73
|
+
pure
|
|
74
|
+
returns (bytes memory metadata)
|
|
75
|
+
{
|
|
76
|
+
return JBMetadataResolver.createMetadata(_ids, _datas);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* @notice Add a data entry to an existing metadata
|
|
81
|
+
*
|
|
82
|
+
* @param originalMetadata The original metadata
|
|
83
|
+
* @param idToAdd The id of the hook to add
|
|
84
|
+
* @param dataToAdd The metadata of the hook to add
|
|
85
|
+
*
|
|
86
|
+
* @return _newMetadata The new metadata with the hook added
|
|
87
|
+
*/
|
|
88
|
+
function addDataToMetadata(
|
|
89
|
+
bytes calldata originalMetadata,
|
|
90
|
+
bytes4 idToAdd,
|
|
91
|
+
bytes calldata dataToAdd
|
|
92
|
+
)
|
|
93
|
+
public
|
|
94
|
+
pure
|
|
95
|
+
returns (bytes memory)
|
|
96
|
+
{
|
|
97
|
+
return JBMetadataResolver.addToMetadata(originalMetadata, idToAdd, dataToAdd);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* @notice Returns an unique id following a suggested format
|
|
102
|
+
* (`xor(address(this), functionality name)` where functionality name is a string
|
|
103
|
+
* giving context to the id (Permit2, quoteForSwap, etc)
|
|
104
|
+
*
|
|
105
|
+
* @param functionality A string describing the functionality associated with the id
|
|
106
|
+
*
|
|
107
|
+
* @return id The resulting id
|
|
108
|
+
*/
|
|
109
|
+
function getId(string memory functionality) public view returns (bytes4) {
|
|
110
|
+
return JBMetadataResolver.getId(functionality);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
function getId(string memory functionality, address target) public pure returns (bytes4) {
|
|
114
|
+
return JBMetadataResolver.getId(functionality, target);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.6;
|
|
3
|
+
|
|
4
|
+
import "forge-std/Test.sol";
|
|
5
|
+
|
|
6
|
+
import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
|
|
7
|
+
import {IERC721Metadata} from "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol";
|
|
8
|
+
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
|
9
|
+
import {IERC20Permit} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol";
|
|
10
|
+
import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol";
|
|
11
|
+
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
|
|
12
|
+
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
|
|
13
|
+
import {ERC165, IERC165} from "@openzeppelin/contracts/utils/introspection/ERC165.sol";
|
|
14
|
+
import {JBPermissionIds} from "@bananapus/permission-ids-v6/src/JBPermissionIds.sol";
|
|
15
|
+
import {JBControlled} from "../../src/abstract/JBControlled.sol";
|
|
16
|
+
import {JBPermissioned} from "../../src/abstract/JBPermissioned.sol";
|
|
17
|
+
import {JBController} from "../../src/JBController.sol";
|
|
18
|
+
import {JBDirectory} from "../../src/JBDirectory.sol";
|
|
19
|
+
import {JBTerminalStore} from "../../src/JBTerminalStore.sol";
|
|
20
|
+
import {JBFeelessAddresses} from "../../src/JBFeelessAddresses.sol";
|
|
21
|
+
import {JBFundAccessLimits} from "../../src/JBFundAccessLimits.sol";
|
|
22
|
+
import {JBRulesets} from "../../src/JBRulesets.sol";
|
|
23
|
+
import {JBPermissions} from "../../src/JBPermissions.sol";
|
|
24
|
+
import {JBPrices} from "../../src/JBPrices.sol";
|
|
25
|
+
import {JBProjects} from "../../src/JBProjects.sol";
|
|
26
|
+
import {JBSplits} from "../../src/JBSplits.sol";
|
|
27
|
+
import {JBERC20} from "../../src/JBERC20.sol";
|
|
28
|
+
import {JBTokens} from "../../src/JBTokens.sol";
|
|
29
|
+
import {JBDeadline} from "../../src/JBDeadline.sol";
|
|
30
|
+
import {JBApprovalStatus} from "../../src/enums/JBApprovalStatus.sol";
|
|
31
|
+
import {JBMultiTerminal} from "../../src/JBMultiTerminal.sol";
|
|
32
|
+
import {JBAccountingContext} from "../../src/structs/JBAccountingContext.sol";
|
|
33
|
+
import {JBCurrencyAmount} from "../../src/structs/JBCurrencyAmount.sol";
|
|
34
|
+
import {JBAfterPayRecordedContext} from "../../src/structs/JBAfterPayRecordedContext.sol";
|
|
35
|
+
import {JBAfterCashOutRecordedContext} from "../../src/structs/JBAfterCashOutRecordedContext.sol";
|
|
36
|
+
import {JBFee} from "../../src/structs/JBFee.sol";
|
|
37
|
+
import {JBFees} from "../../src/libraries/JBFees.sol";
|
|
38
|
+
import {JBMetadataResolver} from "../../src/libraries/JBMetadataResolver.sol";
|
|
39
|
+
import {JBCashOuts} from "../../src/libraries/JBCashOuts.sol";
|
|
40
|
+
import {JBFundAccessLimitGroup} from "../../src/structs/JBFundAccessLimitGroup.sol";
|
|
41
|
+
import {JBRuleset} from "../../src/structs/JBRuleset.sol";
|
|
42
|
+
import {JBRulesetWithMetadata} from "../../src/structs/JBRulesetWithMetadata.sol";
|
|
43
|
+
import {JBRulesetMetadata} from "../../src/structs/JBRulesetMetadata.sol";
|
|
44
|
+
import {JBRulesetConfig} from "../../src/structs/JBRulesetConfig.sol";
|
|
45
|
+
import {JBSplitGroup} from "../../src/structs/JBSplitGroup.sol";
|
|
46
|
+
import {JBPermissionsData} from "../../src/structs/JBPermissionsData.sol";
|
|
47
|
+
import {JBBeforePayRecordedContext} from "../../src/structs/JBBeforePayRecordedContext.sol";
|
|
48
|
+
import {JBBeforeCashOutRecordedContext} from "../../src/structs/JBBeforeCashOutRecordedContext.sol";
|
|
49
|
+
import {JBSplit} from "../../src/structs/JBSplit.sol";
|
|
50
|
+
import {JBTerminalConfig} from "../../src/structs/JBTerminalConfig.sol";
|
|
51
|
+
import {JBPayHookSpecification} from "../../src/structs/JBPayHookSpecification.sol";
|
|
52
|
+
import {JBCashOutHookSpecification} from "../../src/structs/JBCashOutHookSpecification.sol";
|
|
53
|
+
import {JBTokenAmount} from "../../src/structs/JBTokenAmount.sol";
|
|
54
|
+
import {JBSplitHookContext} from "../../src/structs/JBSplitHookContext.sol";
|
|
55
|
+
import {IJBToken} from "../../src/interfaces/IJBToken.sol";
|
|
56
|
+
import {JBSingleAllowance} from "../../src/structs/JBSingleAllowance.sol";
|
|
57
|
+
import {IJBController} from "../../src/interfaces/IJBController.sol";
|
|
58
|
+
import {IJBFeelessAddresses} from "../../src/interfaces/IJBFeelessAddresses.sol";
|
|
59
|
+
import {IJBFundAccessLimits} from "../../src/interfaces/IJBFundAccessLimits.sol";
|
|
60
|
+
import {IJBMigratable} from "../../src/interfaces/IJBMigratable.sol";
|
|
61
|
+
import {IJBPermissions} from "../../src/interfaces/IJBPermissions.sol";
|
|
62
|
+
import {IJBDirectoryAccessControl} from "../../src/interfaces/IJBDirectoryAccessControl.sol";
|
|
63
|
+
import {IJBTerminalStore} from "../../src/interfaces/IJBTerminalStore.sol";
|
|
64
|
+
import {IJBProjects} from "../../src/interfaces/IJBProjects.sol";
|
|
65
|
+
import {IJBRulesetApprovalHook} from "../../src/interfaces/IJBRulesetApprovalHook.sol";
|
|
66
|
+
import {IJBDirectory} from "../../src/interfaces/IJBDirectory.sol";
|
|
67
|
+
import {IJBRulesets} from "../../src/interfaces/IJBRulesets.sol";
|
|
68
|
+
import {IJBSplits} from "../../src/interfaces/IJBSplits.sol";
|
|
69
|
+
import {IJBTokenUriResolver} from "../../src/interfaces/IJBTokenUriResolver.sol";
|
|
70
|
+
import {IJBTokens} from "../../src/interfaces/IJBTokens.sol";
|
|
71
|
+
import {IJBSplitHook} from "../../src/interfaces/IJBSplitHook.sol";
|
|
72
|
+
import {IJBPayHook} from "../../src/interfaces/IJBPayHook.sol";
|
|
73
|
+
import {IJBRulesetDataHook} from "../../src/interfaces/IJBRulesetDataHook.sol";
|
|
74
|
+
import {IJBCashOutHook} from "../../src/interfaces/IJBCashOutHook.sol";
|
|
75
|
+
import {IJBRulesetDataHook} from "../../src/interfaces/IJBRulesetDataHook.sol";
|
|
76
|
+
import {IJBMultiTerminal} from "../../src/interfaces/IJBMultiTerminal.sol";
|
|
77
|
+
import {IJBCashOutTerminal} from "../../src/interfaces/IJBCashOutTerminal.sol";
|
|
78
|
+
import {IJBPayoutTerminal} from "../../src/interfaces/IJBPayoutTerminal.sol";
|
|
79
|
+
import {IJBPermitTerminal} from "../../src/interfaces/IJBPermitTerminal.sol";
|
|
80
|
+
import {IJBFeeTerminal} from "../../src/interfaces/IJBFeeTerminal.sol";
|
|
81
|
+
import {IJBTerminal} from "../../src/interfaces/IJBTerminal.sol";
|
|
82
|
+
import {IJBPriceFeed} from "../../src/interfaces/IJBPriceFeed.sol";
|
|
83
|
+
import {IJBPermissioned} from "../../src/interfaces/IJBPermissioned.sol";
|
|
84
|
+
import {IJBProjectUriRegistry} from "../../src/interfaces/IJBProjectUriRegistry.sol";
|
|
85
|
+
import {IJBRulesetApprovalHook} from "../../src/interfaces/IJBRulesetApprovalHook.sol";
|
|
86
|
+
import {IJBPrices} from "../../src/interfaces/IJBPrices.sol";
|
|
87
|
+
|
|
88
|
+
import {JBConstants} from "../../src/libraries/JBConstants.sol";
|
|
89
|
+
import {JBCurrencyIds} from "../../src/libraries/JBCurrencyIds.sol";
|
|
90
|
+
import {JBRulesetMetadataResolver} from "../../src/libraries/JBRulesetMetadataResolver.sol";
|
|
91
|
+
import {JBSplitGroupIds} from "../../src/libraries/JBSplitGroupIds.sol";
|
|
92
|
+
|
|
93
|
+
import {IPermit2, IAllowanceTransfer} from "@uniswap/permit2/src/interfaces/IPermit2.sol";
|
|
94
|
+
import {DeployPermit2} from "@uniswap/permit2/test/utils/DeployPermit2.sol";
|
|
95
|
+
|
|
96
|
+
import {JBTest} from "./JBTest.sol";
|
|
97
|
+
import {MetadataResolverHelper} from "./MetadataResolverHelper.sol";
|
|
98
|
+
|
|
99
|
+
import {MockERC20} from "./../mock/MockERC20.sol";
|
|
100
|
+
|
|
101
|
+
import {mulDiv} from "@prb/math/src/Common.sol";
|
|
102
|
+
import {mul as UD60x18mul, wrap as UD60x18wrap, unwrap as UD60x18unwrap} from "@prb/math/src/UD60x18.sol";
|
|
103
|
+
|
|
104
|
+
// Base contract for Juicebox system tests.
|
|
105
|
+
// Provides common functionality, such as deploying contracts on test setup.
|
|
106
|
+
contract TestBaseWorkflow is Test, DeployPermit2 {
|
|
107
|
+
// Multisig address used for testing.
|
|
108
|
+
address private _multisig = address(123);
|
|
109
|
+
address private _beneficiary = address(69_420);
|
|
110
|
+
address private _trustedForwarder = address(123_456);
|
|
111
|
+
MockERC20 private _usdcToken;
|
|
112
|
+
address private _permit2;
|
|
113
|
+
JBPermissions private _jbPermissions;
|
|
114
|
+
JBProjects private _jbProjects;
|
|
115
|
+
JBPrices private _jbPrices;
|
|
116
|
+
JBDirectory private _jbDirectory;
|
|
117
|
+
JBRulesets private _jbRulesets;
|
|
118
|
+
JBERC20 private _jbErc20;
|
|
119
|
+
JBTokens private _jbTokens;
|
|
120
|
+
JBSplits private _jbSplits;
|
|
121
|
+
JBController private _jbController;
|
|
122
|
+
JBFeelessAddresses private _jbFeelessAddresses;
|
|
123
|
+
JBFundAccessLimits private _jbFundAccessLimits;
|
|
124
|
+
JBTerminalStore private _jbTerminalStore;
|
|
125
|
+
JBMultiTerminal private _jbMultiTerminal;
|
|
126
|
+
MetadataResolverHelper private _metadataHelper;
|
|
127
|
+
JBMultiTerminal private _jbMultiTerminal2;
|
|
128
|
+
|
|
129
|
+
function multisig() internal view returns (address) {
|
|
130
|
+
return _multisig;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
function beneficiary() internal view returns (address) {
|
|
134
|
+
return _beneficiary;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
function usdcToken() internal view returns (MockERC20) {
|
|
138
|
+
return _usdcToken;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
function permit2() internal view returns (IPermit2) {
|
|
142
|
+
return IPermit2(_permit2);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
function jbPermissions() internal view returns (JBPermissions) {
|
|
146
|
+
return _jbPermissions;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
function jbProjects() internal view returns (JBProjects) {
|
|
150
|
+
return _jbProjects;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
function jbPrices() internal view returns (JBPrices) {
|
|
154
|
+
return _jbPrices;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
function jbDirectory() internal view returns (JBDirectory) {
|
|
158
|
+
return _jbDirectory;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
function jbRulesets() internal view returns (JBRulesets) {
|
|
162
|
+
return _jbRulesets;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
function jbErc20() internal view returns (JBERC20) {
|
|
166
|
+
return _jbErc20;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
function jbTokens() internal view returns (JBTokens) {
|
|
170
|
+
return _jbTokens;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
function jbSplits() internal view returns (JBSplits) {
|
|
174
|
+
return _jbSplits;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
function jbController() internal view returns (JBController) {
|
|
178
|
+
return _jbController;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
function jbFeelessAddresses() internal view returns (JBFeelessAddresses) {
|
|
182
|
+
return _jbFeelessAddresses;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
function jbAccessConstraintStore() internal view returns (JBFundAccessLimits) {
|
|
186
|
+
return _jbFundAccessLimits;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
function jbTerminalStore() internal view returns (JBTerminalStore) {
|
|
190
|
+
return _jbTerminalStore;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
function jbMultiTerminal() internal view returns (JBMultiTerminal) {
|
|
194
|
+
return _jbMultiTerminal;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
function jbMultiTerminal2() internal view returns (JBMultiTerminal) {
|
|
198
|
+
return _jbMultiTerminal2;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
function trustedForwarder() internal view returns (address) {
|
|
202
|
+
return _trustedForwarder;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
function metadataHelper() internal view returns (MetadataResolverHelper) {
|
|
206
|
+
return _metadataHelper;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
//*********************************************************************//
|
|
210
|
+
// --------------------------- test setup ---------------------------- //
|
|
211
|
+
//*********************************************************************//
|
|
212
|
+
|
|
213
|
+
// Deploys and initializes contracts for testing.
|
|
214
|
+
function setUp() public virtual {
|
|
215
|
+
_jbPermissions = new JBPermissions(_trustedForwarder);
|
|
216
|
+
_jbProjects = new JBProjects(_multisig, address(0), _trustedForwarder);
|
|
217
|
+
_jbDirectory = new JBDirectory(_jbPermissions, _jbProjects, _multisig);
|
|
218
|
+
_jbErc20 = new JBERC20();
|
|
219
|
+
_jbTokens = new JBTokens(_jbDirectory, _jbErc20);
|
|
220
|
+
_jbRulesets = new JBRulesets(_jbDirectory);
|
|
221
|
+
_jbPrices = new JBPrices(_jbDirectory, _jbPermissions, _jbProjects, _multisig, _trustedForwarder);
|
|
222
|
+
_jbSplits = new JBSplits(_jbDirectory);
|
|
223
|
+
_jbFundAccessLimits = new JBFundAccessLimits(_jbDirectory);
|
|
224
|
+
_jbFeelessAddresses = new JBFeelessAddresses(_multisig);
|
|
225
|
+
|
|
226
|
+
_usdcToken = new MockERC20("USDC", "USDC");
|
|
227
|
+
|
|
228
|
+
_jbController = new JBController(
|
|
229
|
+
_jbDirectory,
|
|
230
|
+
_jbFundAccessLimits,
|
|
231
|
+
_jbPermissions,
|
|
232
|
+
_jbPrices,
|
|
233
|
+
_jbProjects,
|
|
234
|
+
_jbRulesets,
|
|
235
|
+
_jbSplits,
|
|
236
|
+
_jbTokens,
|
|
237
|
+
address(0), // omnichainRulesetOperator
|
|
238
|
+
_trustedForwarder
|
|
239
|
+
);
|
|
240
|
+
|
|
241
|
+
_metadataHelper = new MetadataResolverHelper();
|
|
242
|
+
|
|
243
|
+
vm.prank(_multisig);
|
|
244
|
+
_jbDirectory.setIsAllowedToSetFirstController(address(_jbController), true);
|
|
245
|
+
|
|
246
|
+
_jbTerminalStore = new JBTerminalStore(_jbDirectory, _jbPrices, _jbRulesets);
|
|
247
|
+
|
|
248
|
+
vm.prank(_multisig);
|
|
249
|
+
_permit2 = deployPermit2();
|
|
250
|
+
|
|
251
|
+
_jbMultiTerminal = new JBMultiTerminal(
|
|
252
|
+
_jbFeelessAddresses,
|
|
253
|
+
_jbPermissions,
|
|
254
|
+
_jbProjects,
|
|
255
|
+
_jbSplits,
|
|
256
|
+
_jbTerminalStore,
|
|
257
|
+
_jbTokens,
|
|
258
|
+
IPermit2(_permit2),
|
|
259
|
+
_trustedForwarder
|
|
260
|
+
);
|
|
261
|
+
|
|
262
|
+
_jbMultiTerminal2 = new JBMultiTerminal(
|
|
263
|
+
_jbFeelessAddresses,
|
|
264
|
+
_jbPermissions,
|
|
265
|
+
_jbProjects,
|
|
266
|
+
_jbSplits,
|
|
267
|
+
_jbTerminalStore,
|
|
268
|
+
_jbTokens,
|
|
269
|
+
IPermit2(_permit2),
|
|
270
|
+
_trustedForwarder
|
|
271
|
+
);
|
|
272
|
+
|
|
273
|
+
vm.label(_multisig, "projectOwner");
|
|
274
|
+
vm.label(_beneficiary, "beneficiary");
|
|
275
|
+
vm.label(address(_jbPrices), "JBPrices");
|
|
276
|
+
vm.label(address(_jbProjects), "JBProjects");
|
|
277
|
+
vm.label(address(_jbRulesets), "JBRulesets");
|
|
278
|
+
vm.label(address(_jbDirectory), "JBDirectory");
|
|
279
|
+
vm.label(address(_usdcToken), "ERC20");
|
|
280
|
+
vm.label(address(_jbPermissions), "JBPermissions");
|
|
281
|
+
vm.label(address(_jbTokens), "JBTokens");
|
|
282
|
+
vm.label(address(_jbFeelessAddresses), "JBFeelessAddresses");
|
|
283
|
+
vm.label(address(_jbFundAccessLimits), "JBFundAccessLimits");
|
|
284
|
+
vm.label(address(_jbSplits), "JBSplits");
|
|
285
|
+
vm.label(address(_jbController), "JBController");
|
|
286
|
+
vm.label(address(_jbTerminalStore), "JBTerminalStore");
|
|
287
|
+
vm.label(address(_jbMultiTerminal2), "JBMultiTerminal2");
|
|
288
|
+
vm.label(address(_jbMultiTerminal), "JBMultiTerminal");
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
//https://ethereum.stackexchange.com/questions/24248/how-to-calculate-an-ethereum-contracts-address-during-its-creation-using-the-so
|
|
292
|
+
function addressFrom(address _origin, uint256 _nonce) internal pure returns (address _address) {
|
|
293
|
+
bytes memory data;
|
|
294
|
+
if (_nonce == 0x00) {
|
|
295
|
+
data = abi.encodePacked(bytes1(0xd6), bytes1(0x94), _origin, bytes1(0x80));
|
|
296
|
+
} else if (_nonce <= 0x7f) {
|
|
297
|
+
data = abi.encodePacked(bytes1(0xd6), bytes1(0x94), _origin, uint8(_nonce));
|
|
298
|
+
} else if (_nonce <= 0xff) {
|
|
299
|
+
data = abi.encodePacked(bytes1(0xd7), bytes1(0x94), _origin, bytes1(0x81), uint8(_nonce));
|
|
300
|
+
} else if (_nonce <= 0xffff) {
|
|
301
|
+
data = abi.encodePacked(bytes1(0xd8), bytes1(0x94), _origin, bytes1(0x82), uint16(_nonce));
|
|
302
|
+
} else if (_nonce <= 0xffffff) {
|
|
303
|
+
data = abi.encodePacked(bytes1(0xd9), bytes1(0x94), _origin, bytes1(0x83), uint24(_nonce));
|
|
304
|
+
} else {
|
|
305
|
+
data = abi.encodePacked(bytes1(0xda), bytes1(0x94), _origin, bytes1(0x84), uint32(_nonce));
|
|
306
|
+
}
|
|
307
|
+
bytes32 hash = keccak256(data);
|
|
308
|
+
assembly {
|
|
309
|
+
mstore(0, hash)
|
|
310
|
+
_address := mload(0)
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
function strEqual(string memory a, string memory b) internal pure returns (bool) {
|
|
315
|
+
return keccak256(abi.encode(a)) == keccak256(abi.encode(b));
|
|
316
|
+
}
|
|
317
|
+
}
|