@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,227 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity 0.8.23;
|
|
3
|
+
|
|
4
|
+
import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
|
|
5
|
+
import {JBControllerSetup} from "./JBControllerSetup.sol";
|
|
6
|
+
|
|
7
|
+
contract TestSetTokenFor_Local is JBControllerSetup {
|
|
8
|
+
IJBToken _token = IJBToken(makeAddr("token"));
|
|
9
|
+
uint256 _projectId = 1;
|
|
10
|
+
|
|
11
|
+
function setUp() public {
|
|
12
|
+
super.controllerSetup();
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function test_WhenCallerIsPermissionedAndCurrentRuleset() external {
|
|
16
|
+
// it will set token
|
|
17
|
+
|
|
18
|
+
// mock ownerOf call to auth this contract (caller)
|
|
19
|
+
bytes memory _ownerOfCall = abi.encodeCall(IERC721.ownerOf, (_projectId));
|
|
20
|
+
bytes memory _ownerOfReturn = abi.encode(address(this));
|
|
21
|
+
mockExpect(address(projects), _ownerOfCall, _ownerOfReturn);
|
|
22
|
+
|
|
23
|
+
// mock call to JBTokens
|
|
24
|
+
bytes memory _tokensCall = abi.encodeCall(IJBTokens.setTokenFor, (_projectId, _token));
|
|
25
|
+
mockExpect(address(tokens), _tokensCall, "");
|
|
26
|
+
|
|
27
|
+
// mock call to JBRulesets
|
|
28
|
+
|
|
29
|
+
// setup: return data
|
|
30
|
+
JBRulesetMetadata memory _metadata = JBRulesetMetadata({
|
|
31
|
+
reservedPercent: JBConstants.MAX_RESERVED_PERCENT / 2, //50%
|
|
32
|
+
cashOutTaxRate: JBConstants.MAX_CASH_OUT_TAX_RATE / 2, //50%
|
|
33
|
+
baseCurrency: uint32(uint160(JBConstants.NATIVE_TOKEN)),
|
|
34
|
+
pausePay: false,
|
|
35
|
+
pauseCreditTransfers: false,
|
|
36
|
+
allowOwnerMinting: true,
|
|
37
|
+
allowSetCustomToken: true, // Allows authorized to set a token or mint tokens
|
|
38
|
+
allowTerminalMigration: false,
|
|
39
|
+
allowSetTerminals: false,
|
|
40
|
+
ownerMustSendPayouts: false,
|
|
41
|
+
allowSetController: false,
|
|
42
|
+
allowAddAccountingContext: true,
|
|
43
|
+
allowAddPriceFeed: false,
|
|
44
|
+
holdFees: false,
|
|
45
|
+
useTotalSurplusForCashOuts: true,
|
|
46
|
+
useDataHookForPay: false,
|
|
47
|
+
useDataHookForCashOut: false,
|
|
48
|
+
dataHook: address(0),
|
|
49
|
+
metadata: 0
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
uint256 _packedMetadata = JBRulesetMetadataResolver.packRulesetMetadata(_metadata);
|
|
53
|
+
|
|
54
|
+
JBRuleset memory ruleset = JBRuleset({
|
|
55
|
+
cycleNumber: 1,
|
|
56
|
+
id: uint48(block.timestamp),
|
|
57
|
+
basedOnId: 0,
|
|
58
|
+
start: uint48(block.timestamp),
|
|
59
|
+
duration: 8000,
|
|
60
|
+
weight: 5000,
|
|
61
|
+
weightCutPercent: 0,
|
|
62
|
+
approvalHook: IJBRulesetApprovalHook(address(0)),
|
|
63
|
+
metadata: _packedMetadata
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
bytes memory _currentRulesetCall = abi.encodeCall(IJBRulesets.currentOf, (1));
|
|
67
|
+
mockExpect(address(rulesets), _currentRulesetCall, abi.encode(ruleset));
|
|
68
|
+
|
|
69
|
+
_controller.setTokenFor(_projectId, _token);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function test_WhenCallerIsPermissionedAndNoCurrentRulesetButUpcomingCompatible() external {
|
|
73
|
+
// it will set token
|
|
74
|
+
|
|
75
|
+
// mock ownerOf call to auth this contract (caller)
|
|
76
|
+
bytes memory _ownerOfCall = abi.encodeCall(IERC721.ownerOf, (_projectId));
|
|
77
|
+
bytes memory _ownerOfReturn = abi.encode(address(this));
|
|
78
|
+
mockExpect(address(projects), _ownerOfCall, _ownerOfReturn);
|
|
79
|
+
|
|
80
|
+
// mock call to JBTokens
|
|
81
|
+
bytes memory _tokensCall = abi.encodeCall(IJBTokens.setTokenFor, (_projectId, _token));
|
|
82
|
+
mockExpect(address(tokens), _tokensCall, "");
|
|
83
|
+
|
|
84
|
+
// mock call to JBRulesets
|
|
85
|
+
|
|
86
|
+
// setup: return data
|
|
87
|
+
JBRulesetMetadata memory _metadata = JBRulesetMetadata({
|
|
88
|
+
reservedPercent: JBConstants.MAX_RESERVED_PERCENT / 2, //50%
|
|
89
|
+
cashOutTaxRate: JBConstants.MAX_CASH_OUT_TAX_RATE / 2, //50%
|
|
90
|
+
baseCurrency: uint32(uint160(JBConstants.NATIVE_TOKEN)),
|
|
91
|
+
pausePay: false,
|
|
92
|
+
pauseCreditTransfers: false,
|
|
93
|
+
allowOwnerMinting: true,
|
|
94
|
+
allowSetCustomToken: true, // Allows authorized to set a token or mint tokens
|
|
95
|
+
allowTerminalMigration: false,
|
|
96
|
+
allowSetTerminals: false,
|
|
97
|
+
ownerMustSendPayouts: false,
|
|
98
|
+
allowSetController: false,
|
|
99
|
+
allowAddAccountingContext: true,
|
|
100
|
+
allowAddPriceFeed: false,
|
|
101
|
+
holdFees: false,
|
|
102
|
+
useTotalSurplusForCashOuts: true,
|
|
103
|
+
useDataHookForPay: false,
|
|
104
|
+
useDataHookForCashOut: false,
|
|
105
|
+
dataHook: address(0),
|
|
106
|
+
metadata: 0
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
uint256 _packedMetadata = JBRulesetMetadataResolver.packRulesetMetadata(_metadata);
|
|
110
|
+
|
|
111
|
+
JBRuleset memory ruleset = JBRuleset({
|
|
112
|
+
cycleNumber: 0,
|
|
113
|
+
id: 0,
|
|
114
|
+
basedOnId: 0,
|
|
115
|
+
start: 0,
|
|
116
|
+
duration: 0,
|
|
117
|
+
weight: 0,
|
|
118
|
+
weightCutPercent: 0,
|
|
119
|
+
approvalHook: IJBRulesetApprovalHook(address(0)),
|
|
120
|
+
metadata: 0
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
JBRuleset memory upcoming = JBRuleset({
|
|
124
|
+
cycleNumber: 1,
|
|
125
|
+
id: uint48(block.timestamp),
|
|
126
|
+
basedOnId: 0,
|
|
127
|
+
start: uint48(block.timestamp),
|
|
128
|
+
duration: 8000,
|
|
129
|
+
weight: 5000,
|
|
130
|
+
weightCutPercent: 0,
|
|
131
|
+
approvalHook: IJBRulesetApprovalHook(address(0)),
|
|
132
|
+
metadata: _packedMetadata
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
// Will check the current ruleset
|
|
136
|
+
bytes memory _currentRulesetCall = abi.encodeCall(IJBRulesets.currentOf, (1));
|
|
137
|
+
mockExpect(address(rulesets), _currentRulesetCall, abi.encode(ruleset));
|
|
138
|
+
|
|
139
|
+
// Will check the upcoming ruleset
|
|
140
|
+
mockExpect(address(rulesets), abi.encodeCall(IJBRulesets.upcomingOf, (1)), abi.encode(upcoming));
|
|
141
|
+
|
|
142
|
+
_controller.setTokenFor(_projectId, _token);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
function test_WhenCallerIsPermissionedAndAllowSetTokensEQFalse() external {
|
|
146
|
+
// it will set token
|
|
147
|
+
|
|
148
|
+
// mock ownerOf call to auth this contract (caller)
|
|
149
|
+
bytes memory _ownerOfCall = abi.encodeCall(IERC721.ownerOf, (_projectId));
|
|
150
|
+
bytes memory _ownerOfReturn = abi.encode(address(this));
|
|
151
|
+
mockExpect(address(projects), _ownerOfCall, _ownerOfReturn);
|
|
152
|
+
|
|
153
|
+
// mock call to JBRulesets
|
|
154
|
+
|
|
155
|
+
// setup: return data
|
|
156
|
+
JBRulesetMetadata memory _metadata = JBRulesetMetadata({
|
|
157
|
+
reservedPercent: JBConstants.MAX_RESERVED_PERCENT / 2, //50%
|
|
158
|
+
cashOutTaxRate: JBConstants.MAX_CASH_OUT_TAX_RATE / 2, //50%
|
|
159
|
+
baseCurrency: uint32(uint160(JBConstants.NATIVE_TOKEN)),
|
|
160
|
+
pausePay: false,
|
|
161
|
+
pauseCreditTransfers: false,
|
|
162
|
+
allowOwnerMinting: true,
|
|
163
|
+
allowSetCustomToken: false, // Allows authorized to set a token or mint tokens
|
|
164
|
+
allowTerminalMigration: false,
|
|
165
|
+
allowSetTerminals: false,
|
|
166
|
+
ownerMustSendPayouts: false,
|
|
167
|
+
allowSetController: false,
|
|
168
|
+
allowAddAccountingContext: true,
|
|
169
|
+
allowAddPriceFeed: false,
|
|
170
|
+
holdFees: false,
|
|
171
|
+
useTotalSurplusForCashOuts: true,
|
|
172
|
+
useDataHookForPay: false,
|
|
173
|
+
useDataHookForCashOut: false,
|
|
174
|
+
dataHook: address(0),
|
|
175
|
+
metadata: 0
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
uint256 _packedMetadata = JBRulesetMetadataResolver.packRulesetMetadata(_metadata);
|
|
179
|
+
|
|
180
|
+
JBRuleset memory ruleset = JBRuleset({
|
|
181
|
+
cycleNumber: 1,
|
|
182
|
+
id: uint48(block.timestamp),
|
|
183
|
+
basedOnId: 0,
|
|
184
|
+
start: uint48(block.timestamp),
|
|
185
|
+
duration: 8000,
|
|
186
|
+
weight: 5000,
|
|
187
|
+
weightCutPercent: 0,
|
|
188
|
+
approvalHook: IJBRulesetApprovalHook(address(0)),
|
|
189
|
+
metadata: _packedMetadata
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
bytes memory _currentRulesetCall = abi.encodeCall(IJBRulesets.currentOf, (1));
|
|
193
|
+
mockExpect(address(rulesets), _currentRulesetCall, abi.encode(ruleset));
|
|
194
|
+
|
|
195
|
+
vm.expectRevert(
|
|
196
|
+
abi.encodeWithSelector(JBController.JBController_RulesetSetTokenNotAllowed.selector, _projectId)
|
|
197
|
+
);
|
|
198
|
+
_controller.setTokenFor(_projectId, _token);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
function test_WhenCallerIsNotPermissioned() external {
|
|
202
|
+
// it will revert UNAUTHORIZED
|
|
203
|
+
|
|
204
|
+
// mock ownerOf call as not this address (unauth)
|
|
205
|
+
bytes memory _ownerOfCall = abi.encodeCall(IERC721.ownerOf, (_projectId));
|
|
206
|
+
address _ownerOfReturn = address(0);
|
|
207
|
+
mockExpect(address(projects), _ownerOfCall, abi.encode(_ownerOfReturn));
|
|
208
|
+
|
|
209
|
+
// mock permissions call as unauth
|
|
210
|
+
bytes memory _permsCall1 = abi.encodeCall(
|
|
211
|
+
IJBPermissions.hasPermission, (address(this), address(0), 1, JBPermissionIds.SET_TOKEN, true, true)
|
|
212
|
+
);
|
|
213
|
+
bytes memory _permsCallReturn1 = abi.encode(false);
|
|
214
|
+
mockExpect(address(permissions), _permsCall1, _permsCallReturn1);
|
|
215
|
+
|
|
216
|
+
vm.expectRevert(
|
|
217
|
+
abi.encodeWithSelector(
|
|
218
|
+
JBPermissioned.JBPermissioned_Unauthorized.selector,
|
|
219
|
+
_ownerOfReturn,
|
|
220
|
+
address(this),
|
|
221
|
+
_projectId,
|
|
222
|
+
JBPermissionIds.SET_TOKEN
|
|
223
|
+
)
|
|
224
|
+
);
|
|
225
|
+
_controller.setTokenFor(_projectId, _token);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity 0.8.23;
|
|
3
|
+
|
|
4
|
+
import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
|
|
5
|
+
import {JBControllerSetup} from "./JBControllerSetup.sol";
|
|
6
|
+
|
|
7
|
+
contract TestSetUriOf_Local is JBControllerSetup {
|
|
8
|
+
function setUp() public {
|
|
9
|
+
super.controllerSetup();
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function test_WhenCallerIsOwnerOrHasPermission() external {
|
|
13
|
+
// it should set metadata and emit SetMetadata
|
|
14
|
+
// mock ownerOf call
|
|
15
|
+
bytes memory _ownerOfCall = abi.encodeCall(IERC721.ownerOf, (1));
|
|
16
|
+
bytes memory _ownerData = abi.encode(address(this));
|
|
17
|
+
|
|
18
|
+
mockExpect(address(projects), _ownerOfCall, _ownerData);
|
|
19
|
+
|
|
20
|
+
vm.expectEmit();
|
|
21
|
+
emit IJBController.SetUri(1, "Juicay", address(this));
|
|
22
|
+
|
|
23
|
+
_controller.setUriOf(1, "Juicay");
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function test_RevertWhenCallerIsNotOwnerOrHasPermission() external {
|
|
27
|
+
// it should revert
|
|
28
|
+
// mock ownerOf call
|
|
29
|
+
bytes memory _ownerOfCall = abi.encodeCall(IERC721.ownerOf, (1));
|
|
30
|
+
address _ownerData = address(1);
|
|
31
|
+
|
|
32
|
+
mockExpect(address(projects), _ownerOfCall, abi.encode(_ownerData));
|
|
33
|
+
|
|
34
|
+
// mock first permissions call
|
|
35
|
+
bytes memory _permissionsCall = abi.encodeCall(
|
|
36
|
+
IJBPermissions.hasPermission, (address(this), address(1), 1, JBPermissionIds.SET_PROJECT_URI, true, true)
|
|
37
|
+
);
|
|
38
|
+
bytes memory _permissionsReturned = abi.encode(false);
|
|
39
|
+
|
|
40
|
+
mockExpect(address(permissions), _permissionsCall, _permissionsReturned);
|
|
41
|
+
|
|
42
|
+
vm.expectRevert(
|
|
43
|
+
abi.encodeWithSelector(
|
|
44
|
+
JBPermissioned.JBPermissioned_Unauthorized.selector,
|
|
45
|
+
_ownerData,
|
|
46
|
+
address(this),
|
|
47
|
+
1,
|
|
48
|
+
JBPermissionIds.SET_PROJECT_URI
|
|
49
|
+
)
|
|
50
|
+
);
|
|
51
|
+
_controller.setUriOf(1, "Not Juicay");
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity 0.8.23;
|
|
3
|
+
|
|
4
|
+
import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
|
|
5
|
+
import {JBControllerSetup} from "./JBControllerSetup.sol";
|
|
6
|
+
|
|
7
|
+
contract TestTransferCreditsFrom_Local is JBControllerSetup {
|
|
8
|
+
using JBRulesetMetadataResolver for JBRulesetMetadata;
|
|
9
|
+
|
|
10
|
+
address _holder = makeAddr("hodler");
|
|
11
|
+
uint256 _projectId = 1;
|
|
12
|
+
uint256 _rootId = 0;
|
|
13
|
+
uint256 _amount = 1e18;
|
|
14
|
+
address _beneficiary = makeAddr("bene");
|
|
15
|
+
|
|
16
|
+
function setUp() public {
|
|
17
|
+
super.controllerSetup();
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
modifier whenCallerIsPermissioned() {
|
|
21
|
+
// it will call permissions
|
|
22
|
+
bytes memory _permCall = abi.encodeCall(
|
|
23
|
+
IJBPermissions.hasPermission,
|
|
24
|
+
(address(this), _holder, _projectId, JBPermissionIds.TRANSFER_CREDITS, true, true)
|
|
25
|
+
);
|
|
26
|
+
bytes memory _permReturn = abi.encode(true);
|
|
27
|
+
mockExpect(address(permissions), _permCall, _permReturn);
|
|
28
|
+
_;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function test_GivenRulesetAllowsCreditTransfers() external whenCallerIsPermissioned {
|
|
32
|
+
// it will call JBTokens to transfer the credits
|
|
33
|
+
|
|
34
|
+
// data for JBRulesets currentOf call
|
|
35
|
+
JBRulesetMetadata memory _rulesMetadata = JBRulesetMetadata({
|
|
36
|
+
reservedPercent: JBConstants.MAX_RESERVED_PERCENT / 2,
|
|
37
|
+
cashOutTaxRate: JBConstants.MAX_CASH_OUT_TAX_RATE / 2,
|
|
38
|
+
baseCurrency: uint32(uint160(JBConstants.NATIVE_TOKEN)),
|
|
39
|
+
pausePay: false,
|
|
40
|
+
pauseCreditTransfers: false,
|
|
41
|
+
allowOwnerMinting: false,
|
|
42
|
+
allowSetCustomToken: false,
|
|
43
|
+
allowTerminalMigration: false,
|
|
44
|
+
allowSetTerminals: false,
|
|
45
|
+
ownerMustSendPayouts: false,
|
|
46
|
+
allowSetController: false,
|
|
47
|
+
allowAddAccountingContext: true,
|
|
48
|
+
allowAddPriceFeed: false,
|
|
49
|
+
holdFees: false,
|
|
50
|
+
useTotalSurplusForCashOuts: true,
|
|
51
|
+
useDataHookForPay: false,
|
|
52
|
+
useDataHookForCashOut: false,
|
|
53
|
+
dataHook: address(0),
|
|
54
|
+
metadata: 0
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
uint256 _packed = _rulesMetadata.packRulesetMetadata();
|
|
58
|
+
|
|
59
|
+
// mocked ruleset that allows credit transfer
|
|
60
|
+
JBRuleset memory _returnedRuleset = JBRuleset({
|
|
61
|
+
cycleNumber: 1,
|
|
62
|
+
id: uint48(block.timestamp),
|
|
63
|
+
basedOnId: 0,
|
|
64
|
+
start: uint48(block.timestamp),
|
|
65
|
+
duration: 100,
|
|
66
|
+
weight: 1e18,
|
|
67
|
+
weightCutPercent: 0,
|
|
68
|
+
approvalHook: IJBRulesetApprovalHook(address(0)),
|
|
69
|
+
metadata: _packed
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
// mock the call to JBRulesets currentOf
|
|
73
|
+
bytes memory _rulesetCall = abi.encodeCall(IJBRulesets.currentOf, (_projectId));
|
|
74
|
+
bytes memory _rulesetCallReturn = abi.encode(_returnedRuleset);
|
|
75
|
+
mockExpect(address(rulesets), _rulesetCall, _rulesetCallReturn);
|
|
76
|
+
|
|
77
|
+
// mock the subsequent call to JBTokens transferCreditsFrom
|
|
78
|
+
bytes memory _transferCall =
|
|
79
|
+
abi.encodeCall(IJBTokens.transferCreditsFrom, (_holder, _projectId, _beneficiary, _amount));
|
|
80
|
+
bytes memory _transferCallReturn = "";
|
|
81
|
+
mockExpect(address(tokens), _transferCall, _transferCallReturn);
|
|
82
|
+
|
|
83
|
+
_controller.transferCreditsFrom(_holder, _projectId, _beneficiary, _amount);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function test_GivenRulesetDoesNotAllowCreditTransfers() external whenCallerIsPermissioned {
|
|
87
|
+
// it will revert CREDIT_TRANSFERS_PAUSED
|
|
88
|
+
|
|
89
|
+
// data for JBRulesets currentOf call
|
|
90
|
+
JBRulesetMetadata memory _rulesMetadata = JBRulesetMetadata({
|
|
91
|
+
reservedPercent: JBConstants.MAX_RESERVED_PERCENT / 2,
|
|
92
|
+
cashOutTaxRate: JBConstants.MAX_CASH_OUT_TAX_RATE / 2,
|
|
93
|
+
baseCurrency: uint32(uint160(JBConstants.NATIVE_TOKEN)),
|
|
94
|
+
pausePay: false,
|
|
95
|
+
// will revert in this case
|
|
96
|
+
pauseCreditTransfers: true,
|
|
97
|
+
allowOwnerMinting: false,
|
|
98
|
+
allowSetCustomToken: false,
|
|
99
|
+
allowTerminalMigration: false,
|
|
100
|
+
allowSetTerminals: false,
|
|
101
|
+
ownerMustSendPayouts: false,
|
|
102
|
+
allowSetController: false,
|
|
103
|
+
allowAddAccountingContext: true,
|
|
104
|
+
allowAddPriceFeed: false,
|
|
105
|
+
holdFees: false,
|
|
106
|
+
useTotalSurplusForCashOuts: true,
|
|
107
|
+
useDataHookForPay: false,
|
|
108
|
+
useDataHookForCashOut: false,
|
|
109
|
+
dataHook: address(0),
|
|
110
|
+
metadata: 0
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
uint256 _packed = _rulesMetadata.packRulesetMetadata();
|
|
114
|
+
|
|
115
|
+
// mocked ruleset that allows credit transfer
|
|
116
|
+
JBRuleset memory _returnedRuleset = JBRuleset({
|
|
117
|
+
cycleNumber: 1,
|
|
118
|
+
id: uint48(block.timestamp),
|
|
119
|
+
basedOnId: 0,
|
|
120
|
+
start: uint48(block.timestamp),
|
|
121
|
+
duration: 100,
|
|
122
|
+
weight: 1e18,
|
|
123
|
+
weightCutPercent: 0,
|
|
124
|
+
approvalHook: IJBRulesetApprovalHook(address(0)),
|
|
125
|
+
metadata: _packed
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
// mock the call to JBRulesets currentOf
|
|
129
|
+
bytes memory _rulesetCall = abi.encodeCall(IJBRulesets.currentOf, (_projectId));
|
|
130
|
+
bytes memory _rulesetCallReturn = abi.encode(_returnedRuleset);
|
|
131
|
+
mockExpect(address(rulesets), _rulesetCall, _rulesetCallReturn);
|
|
132
|
+
|
|
133
|
+
vm.expectRevert(JBController.JBController_CreditTransfersPaused.selector);
|
|
134
|
+
_controller.transferCreditsFrom(_holder, _projectId, _beneficiary, _amount);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
function test_WhenCallerIsNotPermissioned() external {
|
|
138
|
+
// it will revert UNAUTHORIZED
|
|
139
|
+
// it will call permissions
|
|
140
|
+
bytes memory _permCall = abi.encodeCall(
|
|
141
|
+
IJBPermissions.hasPermission,
|
|
142
|
+
(address(this), _holder, _projectId, JBPermissionIds.TRANSFER_CREDITS, true, true)
|
|
143
|
+
);
|
|
144
|
+
bytes memory _permReturn = abi.encode(false);
|
|
145
|
+
mockExpect(address(permissions), _permCall, _permReturn);
|
|
146
|
+
|
|
147
|
+
// will revert
|
|
148
|
+
vm.expectRevert(
|
|
149
|
+
abi.encodeWithSelector(
|
|
150
|
+
JBPermissioned.JBPermissioned_Unauthorized.selector,
|
|
151
|
+
_holder,
|
|
152
|
+
address(this),
|
|
153
|
+
_projectId,
|
|
154
|
+
JBPermissionIds.TRANSFER_CREDITS
|
|
155
|
+
)
|
|
156
|
+
);
|
|
157
|
+
_controller.transferCreditsFrom(_holder, _projectId, _beneficiary, _amount);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity 0.8.23;
|
|
3
|
+
|
|
4
|
+
import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
|
|
5
|
+
import {JBDeadline} from "../../../../src/JBDeadline.sol";
|
|
6
|
+
import {JBApprovalStatus} from "../../../../src/enums/JBApprovalStatus.sol";
|
|
7
|
+
import {JBRuleset} from "../../../../src/structs/JBRuleset.sol";
|
|
8
|
+
|
|
9
|
+
/// @notice Fuzz tests for JBDeadline approval hook.
|
|
10
|
+
contract TestDeadlineFuzz_Local is JBTest {
|
|
11
|
+
JBDeadline deadline;
|
|
12
|
+
|
|
13
|
+
uint256 constant DURATION = 3 days;
|
|
14
|
+
|
|
15
|
+
function setUp() external {
|
|
16
|
+
deadline = new JBDeadline(DURATION);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/// @notice DURATION is set correctly.
|
|
20
|
+
function test_durationIsSet() external view {
|
|
21
|
+
assertEq(deadline.DURATION(), DURATION, "DURATION should match");
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/// @notice ERC165 support for IJBRulesetApprovalHook.
|
|
25
|
+
function test_supportsInterface() external view {
|
|
26
|
+
assertTrue(
|
|
27
|
+
deadline.supportsInterface(type(IJBRulesetApprovalHook).interfaceId),
|
|
28
|
+
"should support IJBRulesetApprovalHook"
|
|
29
|
+
);
|
|
30
|
+
assertTrue(deadline.supportsInterface(type(IERC165).interfaceId), "should support IERC165");
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
//*********************************************************************//
|
|
34
|
+
// --- Deterministic Status Tests ----------------------------------- //
|
|
35
|
+
//*********************************************************************//
|
|
36
|
+
|
|
37
|
+
/// @notice Ruleset queued after start time returns Failed.
|
|
38
|
+
function test_queuedAfterStart_isFailed() external view {
|
|
39
|
+
JBRuleset memory ruleset = _makeRuleset({queuedAt: 200, start: 100});
|
|
40
|
+
JBApprovalStatus status = deadline.approvalStatusOf(1, ruleset);
|
|
41
|
+
assertEq(uint256(status), uint256(JBApprovalStatus.Failed), "queued after start should be Failed");
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/// @notice Ruleset queued too close to start returns Failed.
|
|
45
|
+
function test_insufficientGap_isFailed() external {
|
|
46
|
+
uint48 start = uint48(block.timestamp + 1 days);
|
|
47
|
+
uint48 queued = start - uint48(DURATION) + 1; // 1 second short of required gap
|
|
48
|
+
|
|
49
|
+
JBRuleset memory ruleset = _makeRuleset({queuedAt: queued, start: start});
|
|
50
|
+
JBApprovalStatus status = deadline.approvalStatusOf(1, ruleset);
|
|
51
|
+
assertEq(uint256(status), uint256(JBApprovalStatus.Failed), "insufficient gap should be Failed");
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/// @notice Ruleset with exactly enough gap and deadline not yet passed returns ApprovalExpected.
|
|
55
|
+
function test_exactGap_deadlineNotPassed_isApprovalExpected() external {
|
|
56
|
+
// queue far enough in advance, and start is still far in the future
|
|
57
|
+
uint48 start = uint48(block.timestamp + 2 * DURATION + 100);
|
|
58
|
+
uint48 queued = start - uint48(DURATION);
|
|
59
|
+
|
|
60
|
+
JBRuleset memory ruleset = _makeRuleset({queuedAt: queued, start: start});
|
|
61
|
+
JBApprovalStatus status = deadline.approvalStatusOf(1, ruleset);
|
|
62
|
+
assertEq(uint256(status), uint256(JBApprovalStatus.ApprovalExpected), "should be ApprovalExpected");
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/// @notice Ruleset with enough gap and deadline passed returns Approved.
|
|
66
|
+
function test_gapSufficient_deadlinePassed_isApproved() external {
|
|
67
|
+
uint48 start = uint48(block.timestamp + 1); // start is very soon
|
|
68
|
+
uint48 queued = start - uint48(DURATION) - 1; // plenty of gap
|
|
69
|
+
|
|
70
|
+
JBRuleset memory ruleset = _makeRuleset({queuedAt: queued, start: start});
|
|
71
|
+
JBApprovalStatus status = deadline.approvalStatusOf(1, ruleset);
|
|
72
|
+
assertEq(uint256(status), uint256(JBApprovalStatus.Approved), "should be Approved");
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
//*********************************************************************//
|
|
76
|
+
// --- Fuzz Tests --------------------------------------------------- //
|
|
77
|
+
//*********************************************************************//
|
|
78
|
+
|
|
79
|
+
/// @notice Status is always one of: Failed, ApprovalExpected, or Approved.
|
|
80
|
+
function testFuzz_statusIsValid(uint48 queuedAt, uint48 start) external view {
|
|
81
|
+
JBRuleset memory ruleset = _makeRuleset({queuedAt: queuedAt, start: start});
|
|
82
|
+
JBApprovalStatus status = deadline.approvalStatusOf(1, ruleset);
|
|
83
|
+
|
|
84
|
+
assertTrue(
|
|
85
|
+
status == JBApprovalStatus.Failed || status == JBApprovalStatus.ApprovalExpected
|
|
86
|
+
|| status == JBApprovalStatus.Approved,
|
|
87
|
+
"status must be Failed, ApprovalExpected, or Approved"
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/// @notice If queued after start, always Failed.
|
|
92
|
+
function testFuzz_queuedAfterStart_alwaysFailed(uint48 start) external view {
|
|
93
|
+
// Ensure start is small enough that start+1 doesn't overflow uint48
|
|
94
|
+
start = uint48(bound(uint256(start), 1, type(uint48).max - 1));
|
|
95
|
+
uint48 queuedAt = start + 1; // queued AFTER start
|
|
96
|
+
|
|
97
|
+
JBRuleset memory ruleset = _makeRuleset({queuedAt: queuedAt, start: start});
|
|
98
|
+
JBApprovalStatus status = deadline.approvalStatusOf(1, ruleset);
|
|
99
|
+
assertEq(uint256(status), uint256(JBApprovalStatus.Failed), "queued after start always Failed");
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/// @notice If gap is less than DURATION, always Failed.
|
|
103
|
+
function testFuzz_gapTooSmall_alwaysFailed(uint48 start, uint48 gap) external view {
|
|
104
|
+
gap = uint48(bound(uint256(gap), 0, DURATION - 1));
|
|
105
|
+
// Ensure start >= gap to avoid underflow
|
|
106
|
+
start = uint48(bound(uint256(start), gap, type(uint48).max));
|
|
107
|
+
uint48 queuedAt = start - gap;
|
|
108
|
+
|
|
109
|
+
JBRuleset memory ruleset = _makeRuleset({queuedAt: queuedAt, start: start});
|
|
110
|
+
JBApprovalStatus status = deadline.approvalStatusOf(1, ruleset);
|
|
111
|
+
assertEq(uint256(status), uint256(JBApprovalStatus.Failed), "gap < DURATION always Failed");
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/// @notice If gap >= DURATION and deadline passed, always Approved.
|
|
115
|
+
function testFuzz_sufficientGap_deadlinePassed_approved(uint256 gapExtra) external view {
|
|
116
|
+
// gap = DURATION + gapExtra (always >= DURATION)
|
|
117
|
+
gapExtra = bound(gapExtra, 0, 365 days);
|
|
118
|
+
uint256 gap = DURATION + gapExtra;
|
|
119
|
+
|
|
120
|
+
// start = block.timestamp (deadline already passed since block.timestamp + DURATION >= start)
|
|
121
|
+
uint48 start = uint48(block.timestamp);
|
|
122
|
+
// Ensure queuedAt doesn't underflow
|
|
123
|
+
vm.assume(start >= gap);
|
|
124
|
+
uint48 queuedAt = start - uint48(gap);
|
|
125
|
+
|
|
126
|
+
JBRuleset memory ruleset = _makeRuleset({queuedAt: queuedAt, start: start});
|
|
127
|
+
JBApprovalStatus status = deadline.approvalStatusOf(1, ruleset);
|
|
128
|
+
assertEq(uint256(status), uint256(JBApprovalStatus.Approved), "sufficient gap + deadline passed -> Approved");
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/// @notice Status monotonically transitions: ApprovalExpected -> Approved as time advances.
|
|
132
|
+
function testFuzz_statusMonotonic(uint48 gap) external {
|
|
133
|
+
gap = uint48(bound(uint256(gap), DURATION, type(uint32).max));
|
|
134
|
+
// Ensure arithmetic doesn't overflow uint48
|
|
135
|
+
uint48 start = uint48(bound(uint256(block.timestamp) + 2 * DURATION + 100, gap, type(uint48).max));
|
|
136
|
+
uint48 queuedAt = start - gap;
|
|
137
|
+
|
|
138
|
+
JBRuleset memory ruleset = _makeRuleset({queuedAt: queuedAt, start: start});
|
|
139
|
+
|
|
140
|
+
// At this point, start is far in the future -> ApprovalExpected
|
|
141
|
+
JBApprovalStatus status1 = deadline.approvalStatusOf(1, ruleset);
|
|
142
|
+
assertTrue(
|
|
143
|
+
status1 == JBApprovalStatus.ApprovalExpected || status1 == JBApprovalStatus.Approved,
|
|
144
|
+
"initial status should be ApprovalExpected or Approved"
|
|
145
|
+
);
|
|
146
|
+
|
|
147
|
+
// Warp to just past the deadline
|
|
148
|
+
vm.warp(start - DURATION);
|
|
149
|
+
JBApprovalStatus status2 = deadline.approvalStatusOf(1, ruleset);
|
|
150
|
+
assertEq(uint256(status2), uint256(JBApprovalStatus.Approved), "after deadline should be Approved");
|
|
151
|
+
|
|
152
|
+
// Once Approved, stays Approved
|
|
153
|
+
vm.warp(start + 1000);
|
|
154
|
+
JBApprovalStatus status3 = deadline.approvalStatusOf(1, ruleset);
|
|
155
|
+
assertEq(uint256(status3), uint256(JBApprovalStatus.Approved), "should remain Approved");
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/// @notice Different durations produce consistent results.
|
|
159
|
+
function testFuzz_differentDurations(uint256 duration) external {
|
|
160
|
+
duration = bound(duration, 1, 365 days);
|
|
161
|
+
JBDeadline d = new JBDeadline(duration);
|
|
162
|
+
|
|
163
|
+
uint48 start = uint48(block.timestamp + 1);
|
|
164
|
+
uint48 queuedAt = uint48(block.timestamp - duration);
|
|
165
|
+
|
|
166
|
+
JBRuleset memory ruleset = _makeRuleset({queuedAt: queuedAt, start: start});
|
|
167
|
+
JBApprovalStatus status = d.approvalStatusOf(1, ruleset);
|
|
168
|
+
|
|
169
|
+
// With gap = duration + block.timestamp + 1 - (block.timestamp - duration) = 2*duration + 1
|
|
170
|
+
// This is always >= duration, so status depends on whether deadline passed
|
|
171
|
+
assertTrue(
|
|
172
|
+
status == JBApprovalStatus.Approved || status == JBApprovalStatus.ApprovalExpected,
|
|
173
|
+
"sufficient gap should be Approved or ApprovalExpected"
|
|
174
|
+
);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
//*********************************************************************//
|
|
178
|
+
// --- Helpers ------------------------------------------------------ //
|
|
179
|
+
//*********************************************************************//
|
|
180
|
+
|
|
181
|
+
function _makeRuleset(uint48 queuedAt, uint48 start) internal pure returns (JBRuleset memory) {
|
|
182
|
+
return JBRuleset({
|
|
183
|
+
cycleNumber: 1,
|
|
184
|
+
id: queuedAt,
|
|
185
|
+
basedOnId: 0,
|
|
186
|
+
start: start,
|
|
187
|
+
duration: 0,
|
|
188
|
+
weight: 0,
|
|
189
|
+
weightCutPercent: 0,
|
|
190
|
+
approvalHook: IJBRulesetApprovalHook(address(0)),
|
|
191
|
+
metadata: 0
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity 0.8.23;
|
|
3
|
+
|
|
4
|
+
import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
|
|
5
|
+
|
|
6
|
+
/*
|
|
7
|
+
Contract that deploys a target contract with other mock contracts to satisfy the constructor.
|
|
8
|
+
Tests relative to this contract will be dependent on mock calls/emits and stdStorage.
|
|
9
|
+
*/
|
|
10
|
+
contract JBDirectorySetup is JBTest {
|
|
11
|
+
// Target Contract
|
|
12
|
+
IJBDirectory public _directory;
|
|
13
|
+
|
|
14
|
+
// Mocks
|
|
15
|
+
IJBPermissions public permissions = IJBPermissions(makeAddr("permissions"));
|
|
16
|
+
IJBProjects public projects = IJBProjects(makeAddr("projects"));
|
|
17
|
+
|
|
18
|
+
function directorySetup() public virtual {
|
|
19
|
+
// Instantiate the contract being tested
|
|
20
|
+
_directory = new JBDirectory(permissions, projects, makeAddr("Juicer"));
|
|
21
|
+
}
|
|
22
|
+
}
|