@bananapus/core-v6 0.0.37 → 0.0.38
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/foundry.lock +1 -7
- package/foundry.toml +1 -1
- package/package.json +19 -7
- package/src/JBController.sol +19 -1
- package/src/JBMultiTerminal.sol +68 -34
- package/src/JBTerminalStore.sol +6 -6
- package/src/interfaces/IJBController.sol +4 -1
- package/src/libraries/JBFees.sol +47 -9
- package/src/libraries/JBPayoutSplitGroupLib.sol +2 -2
- package/src/periphery/JBMatchingPriceFeed.sol +1 -1
- package/test/mock/MockMaliciousBeneficiary.sol +15 -15
- package/ADMINISTRATION.md +0 -103
- package/ARCHITECTURE.md +0 -133
- package/AUDIT_INSTRUCTIONS.md +0 -139
- package/RISKS.md +0 -215
- package/SKILLS.md +0 -55
- package/STYLE_GUIDE.md +0 -610
- package/USER_JOURNEYS.md +0 -215
- package/script/Deploy.s.sol +0 -124
- package/script/DeployPeriphery.s.sol +0 -354
- package/slither-ci.config.json +0 -10
- package/test/AuditFixes.t.sol +0 -808
- package/test/ComprehensiveInvariant.t.sol +0 -306
- package/test/CoreExploitTests.t.sol +0 -2741
- package/test/EconomicSimulation.t.sol +0 -348
- package/test/EntryPointPermutations.t.sol +0 -684
- package/test/FlashLoanAttacks.t.sol +0 -797
- package/test/PermissionEscalation.t.sol +0 -711
- package/test/PermissionsInvariant.t.sol +0 -403
- package/test/RulesetTransitions.t.sol +0 -713
- package/test/SplitLoopTests.t.sol +0 -752
- package/test/TestAccessToFunds.sol +0 -2683
- package/test/TestAuditResponseDesignProofs.sol +0 -434
- package/test/TestCashOut.sol +0 -198
- package/test/TestCashOutCountFor.sol +0 -271
- package/test/TestCashOutHooks.sol +0 -351
- package/test/TestCashOutTimingEdge.sol +0 -241
- package/test/TestDataHookFuzzing.sol +0 -524
- package/test/TestDurationUnderflow.sol +0 -233
- package/test/TestFeeFreeCashOutBypass.sol +0 -949
- package/test/TestFeeProcessingFailure.sol +0 -218
- package/test/TestFees.sol +0 -619
- package/test/TestForwardedTokenConsumption.sol +0 -425
- package/test/TestInterfaceSupport.sol +0 -81
- package/test/TestJBERC20Inheritance.sol +0 -103
- package/test/TestL2SequencerPriceFeed.sol +0 -292
- package/test/TestLaunchProject.sol +0 -188
- package/test/TestMetaTx.sol +0 -217
- package/test/TestMetadataOffsetOverflow.sol +0 -179
- package/test/TestMetadataParserLib.sol +0 -471
- package/test/TestMigrationHeldFees.sol +0 -255
- package/test/TestMintTokensOf.sol +0 -185
- package/test/TestMultiTerminalSurplus.sol +0 -348
- package/test/TestMultiTokenSurplus.sol +0 -202
- package/test/TestMultipleAccessLimits.sol +0 -664
- package/test/TestPayBurnRedeemFlow.sol +0 -195
- package/test/TestPayHooks.sol +0 -209
- package/test/TestPermissions.sol +0 -324
- package/test/TestPermissionsEdge.sol +0 -290
- package/test/TestPermit2DataHook.t.sol +0 -360
- package/test/TestPermit2Terminal.sol +0 -372
- package/test/TestRulesetQueueing.sol +0 -1025
- package/test/TestRulesetQueuingStress.sol +0 -806
- package/test/TestRulesetWeightCaching.sol +0 -178
- package/test/TestSplits.sol +0 -391
- package/test/TestTerminalMigration.sol +0 -274
- package/test/TestTerminalPreviewParity.sol +0 -208
- package/test/TestTokenFlow.sol +0 -191
- package/test/TestWeightCacheStaleAfterRejection.sol +0 -303
- package/test/WeirdTokenTests.t.sol +0 -817
- package/test/audit/CashOutReenterPay.t.sol +0 -501
- package/test/audit/CodexHeldFeeRounding.t.sol +0 -159
- package/test/audit/CodexMigrationFeeFailure.t.sol +0 -163
- package/test/audit/CrossTerminalSurplusSpoof.t.sol +0 -140
- package/test/audit/CycledSurplusAllowanceReset.t.sol +0 -184
- package/test/audit/FeeFreeSurplusLifecycle.t.sol +0 -399
- package/test/audit/FeeFreeSurplusStale.t.sol +0 -248
- package/test/audit/USDTVoidReturnCompat.t.sol +0 -525
- package/test/fork/TestChainlinkPriceFeedFork.sol +0 -254
- package/test/fork/TestSequencerPriceFeedFork.sol +0 -168
- package/test/fork/TestTerminalPreviewParityFork.sol +0 -108
- package/test/formal/BondingCurveProperties.t.sol +0 -420
- package/test/formal/FeeProperties.t.sol +0 -252
- package/test/invariants/Phase3DeepInvariant.t.sol +0 -412
- package/test/invariants/RulesetsInvariant.t.sol +0 -125
- package/test/invariants/TerminalStoreInvariant.t.sol +0 -227
- package/test/invariants/TokensInvariant.t.sol +0 -195
- package/test/invariants/handlers/ComprehensiveHandler.sol +0 -303
- package/test/invariants/handlers/EconomicHandler.sol +0 -377
- package/test/invariants/handlers/Phase3Handler.sol +0 -443
- package/test/invariants/handlers/RulesetsHandler.sol +0 -115
- package/test/invariants/handlers/TerminalStoreHandler.sol +0 -151
- package/test/invariants/handlers/TokensHandler.sol +0 -126
- package/test/regression/HoldFeesCashOutReserved.t.sol +0 -415
- package/test/regression/WeightCacheBoundary.t.sol +0 -291
- package/test/trees/JBController/burnTokensOf.tree +0 -9
- package/test/trees/JBController/claimTokensFor.tree +0 -5
- package/test/trees/JBController/deployERC20For.tree +0 -5
- package/test/trees/JBController/getRulesetOf.tree +0 -5
- package/test/trees/JBController/launchProjectFor.tree +0 -12
- package/test/trees/JBController/launchRulesetsFor.tree +0 -8
- package/test/trees/JBController/migrateController.tree +0 -12
- package/test/trees/JBController/mintTokensOf.tree +0 -12
- package/test/trees/JBController/payReservedTokenToTerminal.tree +0 -8
- package/test/trees/JBController/receiveMigrationFrom.tree +0 -4
- package/test/trees/JBController/sendReservedTokensToSplitsOf.tree +0 -12
- package/test/trees/JBController/setMetadataOf.tree +0 -5
- package/test/trees/JBController/setSplitGroupsOf.tree +0 -5
- package/test/trees/JBController/setTokenFor.tree +0 -5
- package/test/trees/JBController/transferCreditsFrom.tree +0 -8
- package/test/trees/JBDirectory/primaryTerminalOf.tree +0 -8
- package/test/trees/JBDirectory/setControllerOf.tree +0 -11
- package/test/trees/JBDirectory/setPrimaryTerminalOf.tree +0 -15
- package/test/trees/JBDirectory/setTerminalsOf.tree +0 -11
- package/test/trees/JBERC20/initialize.tree +0 -7
- package/test/trees/JBERC20/name.tree +0 -5
- package/test/trees/JBERC20/nonces.tree +0 -5
- package/test/trees/JBERC20/symbol.tree +0 -5
- package/test/trees/JBFeelessAddresses/setFeelessAddress.tree +0 -5
- package/test/trees/JBFeelessAddresses/supportsInterface.tree +0 -5
- package/test/trees/JBFundAccessLimits/payoutLimitOf.tree +0 -5
- package/test/trees/JBFundAccessLimits/payoutLimitsOf.tree +0 -8
- package/test/trees/JBFundAccessLimits/setFundAccessLimitsFor.tree +0 -18
- package/test/trees/JBFundAccessLimits/surplusAllowanceOf.tree +0 -5
- package/test/trees/JBFundAccessLimits/surplusAllowancesOf.tree +0 -8
- package/test/trees/JBMetadataResolver/getDataFor.tree +0 -8
- package/test/trees/JBMultiTerminal/accountingContextsOf.tree +0 -5
- package/test/trees/JBMultiTerminal/addAccountingContextsFor.tree +0 -10
- package/test/trees/JBMultiTerminal/addToBalanceOf.tree +0 -23
- package/test/trees/JBMultiTerminal/cashOutTokensOf.tree +0 -23
- package/test/trees/JBMultiTerminal/executePayout.tree +0 -32
- package/test/trees/JBMultiTerminal/executeProcessFee.tree +0 -14
- package/test/trees/JBMultiTerminal/migrateBalanceOf.tree +0 -12
- package/test/trees/JBMultiTerminal/pay.tree +0 -23
- package/test/trees/JBMultiTerminal/processHeldFeesOf.tree +0 -8
- package/test/trees/JBMultiTerminal/sendPayoutsOf.tree +0 -34
- package/test/trees/JBMultiTerminal/useAllowanceOf.tree +0 -16
- package/test/trees/JBPermissions/hasPermission.tree +0 -8
- package/test/trees/JBPermissions/hasPermissions.tree +0 -8
- package/test/trees/JBPermissions/setPermissionsFor.tree +0 -5
- package/test/trees/JBPrices/addPriceFeedFor.tree +0 -14
- package/test/trees/JBPrices/pricePerUnitOf.tree +0 -11
- package/test/trees/JBProjects/createFor.tree +0 -11
- package/test/trees/JBProjects/setTokenUriResolver.tree +0 -5
- package/test/trees/JBProjects/supportsInterface.tree +0 -9
- package/test/trees/JBProjects/tokenURI.tree +0 -5
- package/test/trees/JBRulesets/currentApprovalStatusForLatestRulesetOf.tree +0 -8
- package/test/trees/JBRulesets/currentOf.tree +0 -12
- package/test/trees/JBRulesets/getRulesetOf.tree +0 -5
- package/test/trees/JBRulesets/latestQueuedRulesetOf.tree +0 -10
- package/test/trees/JBRulesets/rulesetsOf.tree +0 -11
- package/test/trees/JBRulesets/upcomingRulesetOf.tree +0 -20
- package/test/trees/JBRulesets/updateRulesetWeightCache.tree +0 -5
- package/test/trees/JBSplits/setSplitGroupsOf.tree +0 -17
- package/test/trees/JBSplits/splitsOf.tree +0 -5
- package/test/trees/JBTerminalStore/currentReclaimableSurplusOf.tree +0 -16
- package/test/trees/JBTerminalStore/currentSurplusOf.tree +0 -25
- package/test/trees/JBTerminalStore/currentTotalSurplusOf.tree +0 -5
- package/test/trees/JBTerminalStore/recordCashOutsFor.tree +0 -16
- package/test/trees/JBTerminalStore/recordPaymentFrom.tree +0 -14
- package/test/trees/JBTerminalStore/recordPayoutFor.tree +0 -10
- package/test/trees/JBTerminalStore/recordTerminalMigration.tree +0 -5
- package/test/trees/JBTerminalStore/recordUsedAllowanceOf.tree +0 -10
- package/test/trees/JBTokens/burnFrom.tree +0 -10
- package/test/trees/JBTokens/claimTokensFor.tree +0 -10
- package/test/trees/JBTokens/deployERC20For.tree +0 -12
- package/test/trees/JBTokens/mintFor.tree +0 -10
- package/test/trees/JBTokens/setTokenFor.tree +0 -11
- package/test/trees/JBTokens/totalBalanceOf.tree +0 -5
- package/test/trees/JBTokens/totalSupplyOf.tree +0 -5
- package/test/trees/JBTokens/transferCreditsFrom.tree +0 -8
- package/test/trees/mintTokensOf.tree +0 -12
- package/test/units/static/JBChainlinkV3PriceFeed/TestPriceFeed.sol +0 -223
- package/test/units/static/JBController/JBControllerSetup.sol +0 -50
- package/test/units/static/JBController/TestBurnTokensOf.sol +0 -114
- package/test/units/static/JBController/TestClaimTokensFor.sol +0 -63
- package/test/units/static/JBController/TestDeployErc20For.sol +0 -86
- package/test/units/static/JBController/TestLaunchProjectFor.sol +0 -302
- package/test/units/static/JBController/TestLaunchRulesetsFor.sol +0 -342
- package/test/units/static/JBController/TestMigrateController.sol +0 -157
- package/test/units/static/JBController/TestMintTokensOfUnits.sol +0 -111
- package/test/units/static/JBController/TestOmnichainRulesetOperator.sol +0 -324
- package/test/units/static/JBController/TestPayReservedTokenToTerminal.sol +0 -74
- package/test/units/static/JBController/TestPreviewMintOf.sol +0 -117
- package/test/units/static/JBController/TestReceiveMigrationFrom.sol +0 -99
- package/test/units/static/JBController/TestRulesetViews.sol +0 -225
- package/test/units/static/JBController/TestSendReservedTokensToSplitsOf.sol +0 -615
- package/test/units/static/JBController/TestSetSplitGroupsOf.sol +0 -68
- package/test/units/static/JBController/TestSetTokenFor.sol +0 -239
- package/test/units/static/JBController/TestSetUriOf.sol +0 -57
- package/test/units/static/JBController/TestTransferCreditsFrom.sol +0 -169
- package/test/units/static/JBDeadline/TestDeadlineFuzz.sol +0 -211
- package/test/units/static/JBDirectory/JBDirectorySetup.sol +0 -26
- package/test/units/static/JBDirectory/TestPrimaryTerminalOf.sol +0 -126
- package/test/units/static/JBDirectory/TestSetControllerOf.sol +0 -183
- package/test/units/static/JBDirectory/TestSetControllerOfMigrationOrder.sol +0 -104
- package/test/units/static/JBDirectory/TestSetPrimaryTerminalOf.sol +0 -179
- package/test/units/static/JBDirectory/TestSetTerminalsOf.sol +0 -137
- package/test/units/static/JBERC20/JBERC20Setup.sol +0 -34
- package/test/units/static/JBERC20/SigUtils.sol +0 -36
- package/test/units/static/JBERC20/TestInitialize.sol +0 -60
- package/test/units/static/JBERC20/TestName.sol +0 -30
- package/test/units/static/JBERC20/TestNonces.sol +0 -62
- package/test/units/static/JBERC20/TestSymbol.sol +0 -31
- package/test/units/static/JBFeelessAdresses/JBFeelessSetup.sol +0 -22
- package/test/units/static/JBFeelessAdresses/TestInterfaces.sol +0 -30
- package/test/units/static/JBFeelessAdresses/TestSetFeelessAddress.sol +0 -35
- package/test/units/static/JBFees/TestFeesFuzz.sol +0 -79
- package/test/units/static/JBFixedPointNumber/TestAdjustDecimals.sol +0 -16
- package/test/units/static/JBFixedPointNumber/TestAdjustDecimalsFuzz.sol +0 -71
- package/test/units/static/JBFundAccessLimits/JBFundAccessSetup.sol +0 -24
- package/test/units/static/JBFundAccessLimits/TestFundAccessLimitsEdge.sol +0 -163
- package/test/units/static/JBFundAccessLimits/TestPayoutLimitOf.sol +0 -59
- package/test/units/static/JBFundAccessLimits/TestPayoutLimitsOf.sol +0 -101
- package/test/units/static/JBFundAccessLimits/TestSetFundAccessLimitsFor.sol +0 -189
- package/test/units/static/JBFundAccessLimits/TestSurplusAllowanceOf.sol +0 -64
- package/test/units/static/JBFundAccessLimits/TestSurplusAllowancesOf.sol +0 -102
- package/test/units/static/JBMetadataResolver/TestGetDataFor.sol +0 -90
- package/test/units/static/JBMetadataResolver/TestMetadataResolverEdgeCases.sol +0 -247
- package/test/units/static/JBMetadataResolver/TestMetadataResolverFuzz.sol +0 -229
- package/test/units/static/JBMultiTerminal/JBMultiTerminalSetup.sol +0 -50
- package/test/units/static/JBMultiTerminal/TestAccountingContextsOf.sol +0 -72
- package/test/units/static/JBMultiTerminal/TestAddAccountingContextsFor.sol +0 -289
- package/test/units/static/JBMultiTerminal/TestAddToBalanceOf.sol +0 -474
- package/test/units/static/JBMultiTerminal/TestCashOutTokensOf.sol +0 -624
- package/test/units/static/JBMultiTerminal/TestExecutePayout.sol +0 -578
- package/test/units/static/JBMultiTerminal/TestExecuteProcessFee.sol +0 -202
- package/test/units/static/JBMultiTerminal/TestMigrateBalanceOf.sol +0 -222
- package/test/units/static/JBMultiTerminal/TestPay.sol +0 -604
- package/test/units/static/JBMultiTerminal/TestPreviewCashOutFrom.sol +0 -117
- package/test/units/static/JBMultiTerminal/TestPreviewPayFor.sol +0 -114
- package/test/units/static/JBMultiTerminal/TestProcessHeldFeesOf.sol +0 -228
- package/test/units/static/JBMultiTerminal/TestSelfPayRevert.sol +0 -55
- package/test/units/static/JBMultiTerminal/TestSendPayoutsOf.sol +0 -257
- package/test/units/static/JBMultiTerminal/TestUseAllowanceOf.sol +0 -611
- package/test/units/static/JBPermissions/JBPermissionsSetup.sol +0 -20
- package/test/units/static/JBPermissions/TestHasPermission.sol +0 -50
- package/test/units/static/JBPermissions/TestHasPermissions.sol +0 -93
- package/test/units/static/JBPermissions/TestSetPermissionsFor.sol +0 -64
- package/test/units/static/JBPrices/JBPricesSetup.sol +0 -32
- package/test/units/static/JBPrices/TestAddPriceFeedFor.sol +0 -107
- package/test/units/static/JBPrices/TestPricePerUnitOf.sol +0 -132
- package/test/units/static/JBPrices/TestPrices.sol +0 -265
- package/test/units/static/JBProjects/JBProjectsSetup.sol +0 -22
- package/test/units/static/JBProjects/TestCreateFor.sol +0 -71
- package/test/units/static/JBProjects/TestInitialProject.sol +0 -21
- package/test/units/static/JBProjects/TestInterfaces.sol +0 -26
- package/test/units/static/JBProjects/TestSetResolver.sol +0 -37
- package/test/units/static/JBProjects/TestTokenUri.sol +0 -40
- package/test/units/static/JBRulesetMetadataResolver/TestSetCashOutTaxRateTo.sol +0 -108
- package/test/units/static/JBRulesets/JBRulesetsSetup.sol +0 -24
- package/test/units/static/JBRulesets/TestCurrentApprovalStatusForLatestRulesetOf.sol +0 -265
- package/test/units/static/JBRulesets/TestCurrentOf.sol +0 -242
- package/test/units/static/JBRulesets/TestGetRulesetOf.sol +0 -100
- package/test/units/static/JBRulesets/TestLatestQueuedRulesetOf.sol +0 -260
- package/test/units/static/JBRulesets/TestRulesets.sol +0 -632
- package/test/units/static/JBRulesets/TestRulesetsOf.sol +0 -37
- package/test/units/static/JBRulesets/TestUpcomingRulesetOf.sol +0 -522
- package/test/units/static/JBRulesets/TestUpdateRulesetWeightCache.sol +0 -96
- package/test/units/static/JBSplits/JBSplitsSetup.sol +0 -26
- package/test/units/static/JBSplits/TestSelfManagedSplitGroups.sol +0 -552
- package/test/units/static/JBSplits/TestSetSplitGroupsOf.sol +0 -377
- package/test/units/static/JBSplits/TestSplitsLockedEdge.sol +0 -267
- package/test/units/static/JBSplits/TestSplitsOf.sol +0 -24
- package/test/units/static/JBSplits/TestSplitsPacking.sol +0 -36
- package/test/units/static/JBSurplus/TestSurplusFuzz.sol +0 -160
- package/test/units/static/JBTerminalStore/JBTerminalStoreSetup.sol +0 -45
- package/test/units/static/JBTerminalStore/TestCurrentReclaimableSurplusOf.sol +0 -536
- package/test/units/static/JBTerminalStore/TestCurrentSurplusOf.sol +0 -463
- package/test/units/static/JBTerminalStore/TestCurrentTotalSurplusOf.sol +0 -135
- package/test/units/static/JBTerminalStore/TestPreviewCashOutFrom.sol +0 -476
- package/test/units/static/JBTerminalStore/TestPreviewPayFrom.sol +0 -494
- package/test/units/static/JBTerminalStore/TestRecordCashOutsFor.sol +0 -652
- package/test/units/static/JBTerminalStore/TestRecordPaymentFrom.sol +0 -744
- package/test/units/static/JBTerminalStore/TestRecordPayoutFor.sol +0 -289
- package/test/units/static/JBTerminalStore/TestRecordTerminalMigration.sol +0 -138
- package/test/units/static/JBTerminalStore/TestRecordUsedAllowanceOf.sol +0 -415
- package/test/units/static/JBTerminalStore/TestUint224Overflow.sol +0 -219
- package/test/units/static/JBTokens/JBTokensSetup.sol +0 -32
- package/test/units/static/JBTokens/TestBurnFrom.sol +0 -107
- package/test/units/static/JBTokens/TestClaimTokensFor.sol +0 -110
- package/test/units/static/JBTokens/TestDeployERC20ForUnits.sol +0 -92
- package/test/units/static/JBTokens/TestMintFor.sol +0 -100
- package/test/units/static/JBTokens/TestSetTokenFor.sol +0 -98
- package/test/units/static/JBTokens/TestTotalBalanceOf.sol +0 -65
- package/test/units/static/JBTokens/TestTotalSupplyOf.sol +0 -56
- package/test/units/static/JBTokens/TestTransferCreditsFrom.sol +0 -56
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: MIT
|
|
2
|
-
pragma solidity 0.8.28;
|
|
3
|
-
|
|
4
|
-
import {JBSplits} from "src/JBSplits.sol";
|
|
5
|
-
import {IJBDirectory} from "src/interfaces/IJBDirectory.sol";
|
|
6
|
-
import {JBConstants} from "src/libraries/JBConstants.sol";
|
|
7
|
-
import {JBSplit} from "src/structs/JBSplit.sol";
|
|
8
|
-
import {Test} from "forge-std/Test.sol";
|
|
9
|
-
|
|
10
|
-
contract TestSplitsPacking_Local is JBSplits, Test {
|
|
11
|
-
constructor() JBSplits(IJBDirectory(address(0))) {}
|
|
12
|
-
|
|
13
|
-
function test_SplitsPacking(JBSplit calldata _split) external {
|
|
14
|
-
// Ensure the split percentage is within bounds.
|
|
15
|
-
vm.assume(_split.percent != 0 && _split.percent <= JBConstants.SPLITS_TOTAL_PERCENT);
|
|
16
|
-
|
|
17
|
-
JBSplit[] memory _splits = new JBSplit[](1);
|
|
18
|
-
_splits[0] = _split;
|
|
19
|
-
|
|
20
|
-
_setSplitsOf(1, 1, 1, _splits);
|
|
21
|
-
JBSplit memory _unpackedSplit = _getStructsFor(1, 1, 1)[0];
|
|
22
|
-
|
|
23
|
-
assertEq(_split.percent, _unpackedSplit.percent, "Percent packing is lossy");
|
|
24
|
-
assertEq(_split.projectId, _unpackedSplit.projectId, "Project ID packing is lossy");
|
|
25
|
-
assertEq(_split.beneficiary, _unpackedSplit.beneficiary, "Beneficiary packing is lossy");
|
|
26
|
-
assertEq(_split.preferAddToBalance, _unpackedSplit.preferAddToBalance, "preferAddToBalance packing is lossy");
|
|
27
|
-
assertEq(_split.lockedUntil, _unpackedSplit.lockedUntil, "lockedUntil packing is lossy");
|
|
28
|
-
assertEq(address(_split.hook), address(_unpackedSplit.hook), "hook packing is lossy");
|
|
29
|
-
|
|
30
|
-
assertEq(
|
|
31
|
-
keccak256(abi.encode(_split)),
|
|
32
|
-
keccak256(abi.encode(_unpackedSplit)),
|
|
33
|
-
"Packing and unpacking of a split is lossy"
|
|
34
|
-
);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: MIT
|
|
2
|
-
pragma solidity 0.8.28;
|
|
3
|
-
|
|
4
|
-
import {IJBCashOutTerminal} from "../../../../src/interfaces/IJBCashOutTerminal.sol";
|
|
5
|
-
import {IJBTerminal} from "../../../../src/interfaces/IJBTerminal.sol";
|
|
6
|
-
import {JBAccountingContext} from "../../../../src/structs/JBAccountingContext.sol";
|
|
7
|
-
import {JBCashOutHookSpecification} from "../../../../src/structs/JBCashOutHookSpecification.sol";
|
|
8
|
-
import {JBPayHookSpecification} from "../../../../src/structs/JBPayHookSpecification.sol";
|
|
9
|
-
import {JBRuleset} from "../../../../src/structs/JBRuleset.sol";
|
|
10
|
-
import {ERC165, IERC165} from "@openzeppelin/contracts/utils/introspection/ERC165.sol";
|
|
11
|
-
import {JBTest} from "../../../helpers/JBTest.sol";
|
|
12
|
-
import {JBSurplus} from "../../../../src/libraries/JBSurplus.sol";
|
|
13
|
-
|
|
14
|
-
/// @notice Mock terminal that returns a fixed surplus for testing JBSurplus.
|
|
15
|
-
contract MockSurplusTerminal is ERC165, IJBCashOutTerminal {
|
|
16
|
-
uint256 public surplusAmount;
|
|
17
|
-
|
|
18
|
-
constructor(uint256 _surplus) {
|
|
19
|
-
surplusAmount = _surplus;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
function currentSurplusOf(uint256, address[] calldata, uint256, uint256) external view override returns (uint256) {
|
|
23
|
-
return surplusAmount;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
function supportsInterface(bytes4 interfaceId) public view override(ERC165, IERC165) returns (bool) {
|
|
27
|
-
return interfaceId == type(IJBTerminal).interfaceId || interfaceId == type(IJBCashOutTerminal).interfaceId
|
|
28
|
-
|| super.supportsInterface(interfaceId);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
// Stub implementations for IJBTerminal
|
|
32
|
-
function accountingContextForTokenOf(uint256, address)
|
|
33
|
-
external
|
|
34
|
-
pure
|
|
35
|
-
override
|
|
36
|
-
returns (JBAccountingContext memory)
|
|
37
|
-
{}
|
|
38
|
-
function accountingContextsOf(uint256) external pure override returns (JBAccountingContext[] memory) {}
|
|
39
|
-
function previewCashOutFrom(
|
|
40
|
-
address,
|
|
41
|
-
uint256,
|
|
42
|
-
uint256,
|
|
43
|
-
address,
|
|
44
|
-
address payable,
|
|
45
|
-
bytes calldata
|
|
46
|
-
)
|
|
47
|
-
external
|
|
48
|
-
pure
|
|
49
|
-
override
|
|
50
|
-
returns (JBRuleset memory, uint256, uint256, JBCashOutHookSpecification[] memory)
|
|
51
|
-
{}
|
|
52
|
-
function previewPayFor(
|
|
53
|
-
uint256,
|
|
54
|
-
address,
|
|
55
|
-
uint256,
|
|
56
|
-
address,
|
|
57
|
-
bytes calldata
|
|
58
|
-
)
|
|
59
|
-
external
|
|
60
|
-
pure
|
|
61
|
-
override
|
|
62
|
-
returns (JBRuleset memory, uint256, uint256, JBPayHookSpecification[] memory)
|
|
63
|
-
{}
|
|
64
|
-
function addAccountingContextsFor(uint256, JBAccountingContext[] calldata) external override {}
|
|
65
|
-
function addToBalanceOf(
|
|
66
|
-
uint256,
|
|
67
|
-
address,
|
|
68
|
-
uint256,
|
|
69
|
-
bool,
|
|
70
|
-
string calldata,
|
|
71
|
-
bytes calldata
|
|
72
|
-
)
|
|
73
|
-
external
|
|
74
|
-
payable
|
|
75
|
-
override
|
|
76
|
-
{}
|
|
77
|
-
|
|
78
|
-
function migrateBalanceOf(uint256, address, IJBTerminal) external pure override returns (uint256) {
|
|
79
|
-
return 0;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
function pay(
|
|
83
|
-
uint256,
|
|
84
|
-
address,
|
|
85
|
-
uint256,
|
|
86
|
-
address,
|
|
87
|
-
uint256,
|
|
88
|
-
string calldata,
|
|
89
|
-
bytes calldata
|
|
90
|
-
)
|
|
91
|
-
external
|
|
92
|
-
payable
|
|
93
|
-
override
|
|
94
|
-
returns (uint256)
|
|
95
|
-
{
|
|
96
|
-
return 0;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
function cashOutTokensOf(
|
|
100
|
-
address,
|
|
101
|
-
uint256,
|
|
102
|
-
uint256,
|
|
103
|
-
address,
|
|
104
|
-
uint256,
|
|
105
|
-
address payable,
|
|
106
|
-
bytes calldata
|
|
107
|
-
)
|
|
108
|
-
external
|
|
109
|
-
pure
|
|
110
|
-
override
|
|
111
|
-
returns (uint256)
|
|
112
|
-
{
|
|
113
|
-
return 0;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
/// @notice Fuzz tests for the JBSurplus library.
|
|
118
|
-
contract TestSurplusFuzz_Local is JBTest {
|
|
119
|
-
function setUp() external {}
|
|
120
|
-
|
|
121
|
-
/// @notice Surplus with no terminals is 0.
|
|
122
|
-
function testFuzz_noTerminals_returnsZero(uint256 projectId) external view {
|
|
123
|
-
IJBTerminal[] memory terminals = new IJBTerminal[](0);
|
|
124
|
-
|
|
125
|
-
uint256 surplus = JBSurplus.currentSurplusOf(projectId, terminals, new address[](0), 18, 1);
|
|
126
|
-
assertEq(surplus, 0, "surplus with no terminals should be 0");
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
/// @notice Surplus aggregates correctly across multiple terminals.
|
|
130
|
-
function testFuzz_multipleTerminals_aggregates(uint128 surplus1, uint128 surplus2) external {
|
|
131
|
-
MockSurplusTerminal terminal1 = new MockSurplusTerminal(surplus1);
|
|
132
|
-
MockSurplusTerminal terminal2 = new MockSurplusTerminal(surplus2);
|
|
133
|
-
|
|
134
|
-
IJBTerminal[] memory terminals = new IJBTerminal[](2);
|
|
135
|
-
terminals[0] = terminal1;
|
|
136
|
-
terminals[1] = terminal2;
|
|
137
|
-
|
|
138
|
-
uint256 total = JBSurplus.currentSurplusOf(1, terminals, new address[](0), 18, 1);
|
|
139
|
-
assertEq(total, uint256(surplus1) + uint256(surplus2), "surplus should be sum of all terminals");
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
/// @notice Surplus is monotonically increasing as terminal surpluses increase.
|
|
143
|
-
function testFuzz_monotonic(uint128 surplus1, uint128 surplus2) external {
|
|
144
|
-
vm.assume(surplus1 <= surplus2);
|
|
145
|
-
|
|
146
|
-
MockSurplusTerminal terminal1 = new MockSurplusTerminal(surplus1);
|
|
147
|
-
MockSurplusTerminal terminal2 = new MockSurplusTerminal(surplus2);
|
|
148
|
-
|
|
149
|
-
IJBTerminal[] memory terminals1 = new IJBTerminal[](1);
|
|
150
|
-
terminals1[0] = terminal1;
|
|
151
|
-
|
|
152
|
-
IJBTerminal[] memory terminals2 = new IJBTerminal[](1);
|
|
153
|
-
terminals2[0] = terminal2;
|
|
154
|
-
|
|
155
|
-
uint256 total1 = JBSurplus.currentSurplusOf(1, terminals1, new address[](0), 18, 1);
|
|
156
|
-
uint256 total2 = JBSurplus.currentSurplusOf(1, terminals2, new address[](0), 18, 1);
|
|
157
|
-
|
|
158
|
-
assertLe(total1, total2, "surplus should be monotonically increasing");
|
|
159
|
-
}
|
|
160
|
-
}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: MIT
|
|
2
|
-
pragma solidity 0.8.28;
|
|
3
|
-
|
|
4
|
-
import {JBTerminalStore} from "../../../../src/JBTerminalStore.sol";
|
|
5
|
-
import {IJBDirectory} from "../../../../src/interfaces/IJBDirectory.sol";
|
|
6
|
-
import {IJBPrices} from "../../../../src/interfaces/IJBPrices.sol";
|
|
7
|
-
import {IJBRulesetApprovalHook} from "../../../../src/interfaces/IJBRulesetApprovalHook.sol";
|
|
8
|
-
import {IJBRulesets} from "../../../../src/interfaces/IJBRulesets.sol";
|
|
9
|
-
import {IJBTerminalStore} from "../../../../src/interfaces/IJBTerminalStore.sol";
|
|
10
|
-
import {JBRuleset} from "../../../../src/structs/JBRuleset.sol";
|
|
11
|
-
import {JBTest} from "../../../helpers/JBTest.sol";
|
|
12
|
-
|
|
13
|
-
/*
|
|
14
|
-
Contract that deploys a target contract with other mock contracts to satisfy the constructor.
|
|
15
|
-
Tests relative to this contract will be dependent on mock calls/emits and stdStorage.
|
|
16
|
-
*/
|
|
17
|
-
contract JBTerminalStoreSetup is JBTest {
|
|
18
|
-
// Mocks
|
|
19
|
-
IJBDirectory public directory = IJBDirectory(makeAddr("directory"));
|
|
20
|
-
IJBRulesets public rulesets = IJBRulesets(makeAddr("rules"));
|
|
21
|
-
IJBPrices public prices = IJBPrices(makeAddr("prices"));
|
|
22
|
-
|
|
23
|
-
// Target Contract
|
|
24
|
-
IJBTerminalStore public _store;
|
|
25
|
-
|
|
26
|
-
function terminalStoreSetup() public virtual {
|
|
27
|
-
// Instantiate the contract being tested
|
|
28
|
-
_store = new JBTerminalStore(directory, prices, rulesets);
|
|
29
|
-
|
|
30
|
-
// Default mock: allow adding accounting contexts (return zero-id ruleset to bypass the
|
|
31
|
-
// allowAddAccountingContext check in recordAccountingContextOf).
|
|
32
|
-
JBRuleset memory _zeroRuleset = JBRuleset({
|
|
33
|
-
cycleNumber: 0,
|
|
34
|
-
id: 0,
|
|
35
|
-
basedOnId: 0,
|
|
36
|
-
start: 0,
|
|
37
|
-
duration: 0,
|
|
38
|
-
weight: 0,
|
|
39
|
-
weightCutPercent: 0,
|
|
40
|
-
approvalHook: IJBRulesetApprovalHook(address(0)),
|
|
41
|
-
metadata: 0
|
|
42
|
-
});
|
|
43
|
-
vm.mockCall(address(rulesets), abi.encodeWithSelector(IJBRulesets.currentOf.selector), abi.encode(_zeroRuleset));
|
|
44
|
-
}
|
|
45
|
-
}
|