@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,202 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: MIT
|
|
2
|
-
pragma solidity 0.8.28;
|
|
3
|
-
|
|
4
|
-
import {JBMultiTerminal} from "../../../../src/JBMultiTerminal.sol";
|
|
5
|
-
import {IJBRulesetApprovalHook} from "../../../../src/interfaces/IJBRulesetApprovalHook.sol";
|
|
6
|
-
import {IJBTerminal} from "../../../../src/interfaces/IJBTerminal.sol";
|
|
7
|
-
import {IJBTerminalStore} from "../../../../src/interfaces/IJBTerminalStore.sol";
|
|
8
|
-
import {JBConstants} from "../../../../src/libraries/JBConstants.sol";
|
|
9
|
-
import {JBAccountingContext} from "../../../../src/structs/JBAccountingContext.sol";
|
|
10
|
-
import {JBPayHookSpecification} from "../../../../src/structs/JBPayHookSpecification.sol";
|
|
11
|
-
import {JBRuleset} from "../../../../src/structs/JBRuleset.sol";
|
|
12
|
-
import {JBTokenAmount} from "../../../../src/structs/JBTokenAmount.sol";
|
|
13
|
-
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
|
|
14
|
-
import {JBMultiTerminalSetup} from "./JBMultiTerminalSetup.sol";
|
|
15
|
-
|
|
16
|
-
// Accounting context is now read from the store
|
|
17
|
-
|
|
18
|
-
contract TestExecuteProcessFee_Local is JBMultiTerminalSetup {
|
|
19
|
-
uint256 _projectId = 1;
|
|
20
|
-
uint256 _defaultAmount = 1e18;
|
|
21
|
-
address _bene = makeAddr("beneficiary");
|
|
22
|
-
address _native = JBConstants.NATIVE_TOKEN;
|
|
23
|
-
address _usdc = makeAddr("USDC");
|
|
24
|
-
|
|
25
|
-
IJBTerminal _feeTerminal = IJBTerminal(makeAddr("feeTerminal"));
|
|
26
|
-
IJBTerminal _invalidTerminal = IJBTerminal(address(0));
|
|
27
|
-
|
|
28
|
-
function setUp() public {
|
|
29
|
-
super.multiTerminalSetup();
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
function _setAccountingContext(address token, uint8 decimals, uint32 currency) internal {
|
|
33
|
-
// Mock the store to return this accounting context
|
|
34
|
-
mockExpect(
|
|
35
|
-
address(store),
|
|
36
|
-
abi.encodeCall(IJBTerminalStore.accountingContextOf, (address(_terminal), _projectId, token)),
|
|
37
|
-
abi.encode(JBAccountingContext({token: token, decimals: decimals, currency: currency}))
|
|
38
|
-
);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
function test_WhenCallerIsNotItself() external {
|
|
42
|
-
// it will revert
|
|
43
|
-
|
|
44
|
-
vm.expectRevert();
|
|
45
|
-
JBMultiTerminal(address(_terminal))
|
|
46
|
-
.executeProcessFee({
|
|
47
|
-
projectId: _projectId,
|
|
48
|
-
token: _native,
|
|
49
|
-
amount: _defaultAmount,
|
|
50
|
-
beneficiary: _bene,
|
|
51
|
-
feeTerminal: _feeTerminal
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
function test_WhenFeeTerminalEQZeroAddress() external {
|
|
56
|
-
// it will revert 404_1
|
|
57
|
-
|
|
58
|
-
vm.prank(address(_terminal));
|
|
59
|
-
vm.expectRevert(abi.encodeWithSelector(JBMultiTerminal.JBMultiTerminal_FeeTerminalNotFound.selector, _native));
|
|
60
|
-
JBMultiTerminal(address(_terminal))
|
|
61
|
-
.executeProcessFee({
|
|
62
|
-
projectId: _projectId,
|
|
63
|
-
token: _native,
|
|
64
|
-
amount: _defaultAmount,
|
|
65
|
-
beneficiary: _bene,
|
|
66
|
-
feeTerminal: _invalidTerminal
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
function test_WhenTokenIsErc20AndFeeTerminalIsExternal() external {
|
|
71
|
-
// it will forceApprove
|
|
72
|
-
|
|
73
|
-
// mock approval call for forceApprove
|
|
74
|
-
mockExpect(_usdc, abi.encodeCall(IERC20.approve, (address(_feeTerminal), _defaultAmount)), "");
|
|
75
|
-
|
|
76
|
-
// Mock the forwarded allowance as fully consumed by the fee terminal.
|
|
77
|
-
vm.mockCall(_usdc, abi.encodeCall(IERC20.allowance, (address(_terminal), address(_feeTerminal))), abi.encode(0));
|
|
78
|
-
|
|
79
|
-
// mock pay call to fee terminal
|
|
80
|
-
mockExpect(
|
|
81
|
-
address(_feeTerminal),
|
|
82
|
-
abi.encodeCall(
|
|
83
|
-
IJBTerminal.pay, (_projectId, _usdc, _defaultAmount, _bene, 0, "", bytes(abi.encodePacked(_projectId)))
|
|
84
|
-
),
|
|
85
|
-
abi.encode(1)
|
|
86
|
-
);
|
|
87
|
-
|
|
88
|
-
vm.prank(address(_terminal));
|
|
89
|
-
JBMultiTerminal(address(_terminal))
|
|
90
|
-
.executeProcessFee({
|
|
91
|
-
projectId: _projectId,
|
|
92
|
-
token: _usdc,
|
|
93
|
-
amount: _defaultAmount,
|
|
94
|
-
beneficiary: _bene,
|
|
95
|
-
feeTerminal: _feeTerminal
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
function test_WhenFeeTerminalEQItself() external {
|
|
100
|
-
// it will call internal _pay
|
|
101
|
-
|
|
102
|
-
_setAccountingContext(_native, 0, 1);
|
|
103
|
-
|
|
104
|
-
// needed for next mock call returns
|
|
105
|
-
JBTokenAmount memory tokenAmount =
|
|
106
|
-
JBTokenAmount({token: _native, decimals: 0, currency: 1, value: _defaultAmount});
|
|
107
|
-
JBPayHookSpecification[] memory hookSpecifications = new JBPayHookSpecification[](0);
|
|
108
|
-
JBRuleset memory returnedRuleset = JBRuleset({
|
|
109
|
-
cycleNumber: 1,
|
|
110
|
-
id: 1,
|
|
111
|
-
basedOnId: 0,
|
|
112
|
-
start: 0,
|
|
113
|
-
duration: 0,
|
|
114
|
-
weight: 0,
|
|
115
|
-
weightCutPercent: 0,
|
|
116
|
-
approvalHook: IJBRulesetApprovalHook(address(0)),
|
|
117
|
-
metadata: 0
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
// mock call to JBTerminalStore recordPaymentFrom
|
|
121
|
-
mockExpect(
|
|
122
|
-
address(store),
|
|
123
|
-
abi.encodeCall(
|
|
124
|
-
IJBTerminalStore.recordPaymentFrom,
|
|
125
|
-
(address(_terminal), tokenAmount, _projectId, _bene, bytes(abi.encodePacked(_projectId)))
|
|
126
|
-
),
|
|
127
|
-
abi.encode(returnedRuleset, 0, hookSpecifications)
|
|
128
|
-
);
|
|
129
|
-
|
|
130
|
-
vm.prank(address(_terminal));
|
|
131
|
-
JBMultiTerminal(address(_terminal))
|
|
132
|
-
.executeProcessFee({
|
|
133
|
-
projectId: _projectId,
|
|
134
|
-
token: _native,
|
|
135
|
-
amount: _defaultAmount,
|
|
136
|
-
beneficiary: _bene,
|
|
137
|
-
feeTerminal: _terminal
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
function test_GivenTokenEQNATIVE_TOKEN() external {
|
|
142
|
-
// it will call external pay with msgvalue
|
|
143
|
-
|
|
144
|
-
// mock pay call to fee terminal
|
|
145
|
-
mockExpect(
|
|
146
|
-
address(_feeTerminal),
|
|
147
|
-
abi.encodeCall(
|
|
148
|
-
IJBTerminal.pay,
|
|
149
|
-
(_projectId, _native, _defaultAmount, _bene, 0, "", bytes(abi.encodePacked(_projectId)))
|
|
150
|
-
),
|
|
151
|
-
abi.encode(1)
|
|
152
|
-
);
|
|
153
|
-
|
|
154
|
-
vm.prank(address(_terminal));
|
|
155
|
-
JBMultiTerminal(address(_terminal))
|
|
156
|
-
.executeProcessFee({
|
|
157
|
-
projectId: _projectId,
|
|
158
|
-
token: _native,
|
|
159
|
-
amount: _defaultAmount,
|
|
160
|
-
beneficiary: _bene,
|
|
161
|
-
feeTerminal: _feeTerminal
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
function test_GivenTokenDNEQNATIVE_TOKENAndPayingItself() external {
|
|
166
|
-
// it will call external pay with zero msgvalue
|
|
167
|
-
|
|
168
|
-
_setAccountingContext(_usdc, 0, 1);
|
|
169
|
-
|
|
170
|
-
// needed for next mock call returns
|
|
171
|
-
JBTokenAmount memory tokenAmount =
|
|
172
|
-
JBTokenAmount({token: _usdc, decimals: 0, currency: 1, value: _defaultAmount});
|
|
173
|
-
JBPayHookSpecification[] memory hookSpecifications = new JBPayHookSpecification[](0);
|
|
174
|
-
JBRuleset memory returnedRuleset = JBRuleset({
|
|
175
|
-
cycleNumber: 1,
|
|
176
|
-
id: 1,
|
|
177
|
-
basedOnId: 0,
|
|
178
|
-
start: 0,
|
|
179
|
-
duration: 0,
|
|
180
|
-
weight: 0,
|
|
181
|
-
weightCutPercent: 0,
|
|
182
|
-
approvalHook: IJBRulesetApprovalHook(address(0)),
|
|
183
|
-
metadata: 0
|
|
184
|
-
});
|
|
185
|
-
|
|
186
|
-
// mock call to JBTerminalStore recordPaymentFrom
|
|
187
|
-
mockExpect(
|
|
188
|
-
address(store),
|
|
189
|
-
abi.encodeCall(
|
|
190
|
-
IJBTerminalStore.recordPaymentFrom,
|
|
191
|
-
(address(_terminal), tokenAmount, _projectId, _bene, bytes(abi.encodePacked(_projectId)))
|
|
192
|
-
),
|
|
193
|
-
abi.encode(returnedRuleset, 0, hookSpecifications)
|
|
194
|
-
);
|
|
195
|
-
|
|
196
|
-
vm.prank(address(_terminal));
|
|
197
|
-
JBMultiTerminal(address(_terminal))
|
|
198
|
-
.executeProcessFee({
|
|
199
|
-
projectId: _projectId, token: _usdc, amount: _defaultAmount, beneficiary: _bene, feeTerminal: _terminal
|
|
200
|
-
});
|
|
201
|
-
}
|
|
202
|
-
}
|
|
@@ -1,222 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: MIT
|
|
2
|
-
pragma solidity 0.8.28;
|
|
3
|
-
|
|
4
|
-
import {JBMultiTerminal} from "../../../../src/JBMultiTerminal.sol";
|
|
5
|
-
import {JBPermissioned} from "../../../../src/abstract/JBPermissioned.sol";
|
|
6
|
-
import {IJBPermissions} from "../../../../src/interfaces/IJBPermissions.sol";
|
|
7
|
-
import {IJBTerminal} from "../../../../src/interfaces/IJBTerminal.sol";
|
|
8
|
-
import {IJBTerminalStore} from "../../../../src/interfaces/IJBTerminalStore.sol";
|
|
9
|
-
import {JBConstants} from "../../../../src/libraries/JBConstants.sol";
|
|
10
|
-
import {JBAccountingContext} from "../../../../src/structs/JBAccountingContext.sol";
|
|
11
|
-
import {JBPermissionIds} from "@bananapus/permission-ids-v6/src/JBPermissionIds.sol";
|
|
12
|
-
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
|
|
13
|
-
import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
|
|
14
|
-
import {IJBFeelessAddresses} from "../../../../src/interfaces/IJBFeelessAddresses.sol";
|
|
15
|
-
import {JBMultiTerminalSetup} from "./JBMultiTerminalSetup.sol";
|
|
16
|
-
|
|
17
|
-
contract TestMigrateBalanceOf_Local is JBMultiTerminalSetup {
|
|
18
|
-
uint256 _projectId = 1;
|
|
19
|
-
uint256 _defaultAmount = 1e18;
|
|
20
|
-
address _bene = makeAddr("beneficiary");
|
|
21
|
-
address _native = JBConstants.NATIVE_TOKEN;
|
|
22
|
-
// forge-lint: disable-next-line(unsafe-typecast)
|
|
23
|
-
uint256 _nativeCurrency = uint32(uint160(_native));
|
|
24
|
-
address _usdc = makeAddr("USDC");
|
|
25
|
-
// forge-lint: disable-next-line(unsafe-typecast)
|
|
26
|
-
uint256 _usdcCurrency = uint32(uint160(_usdc));
|
|
27
|
-
|
|
28
|
-
IJBTerminal _newTerminal = IJBTerminal(makeAddr("newTerminal"));
|
|
29
|
-
|
|
30
|
-
function setUp() public {
|
|
31
|
-
super.multiTerminalSetup();
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
modifier whenPermissioned() {
|
|
35
|
-
// mock call to JBProjects ownerOf
|
|
36
|
-
mockExpect(address(projects), abi.encodeCall(IERC721.ownerOf, (_projectId)), abi.encode(address(0)));
|
|
37
|
-
|
|
38
|
-
// mock call to JBPermissions hasPermission
|
|
39
|
-
mockExpect(
|
|
40
|
-
address(permissions),
|
|
41
|
-
abi.encodeCall(
|
|
42
|
-
IJBPermissions.hasPermission,
|
|
43
|
-
(address(this), address(0), _projectId, JBPermissionIds.MIGRATE_TERMINAL, true, true)
|
|
44
|
-
),
|
|
45
|
-
abi.encode(true)
|
|
46
|
-
);
|
|
47
|
-
|
|
48
|
-
_;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
function test_WhenCallerDoesNotHavePermission() external {
|
|
52
|
-
// it will revert UNAUTHORIZED
|
|
53
|
-
|
|
54
|
-
// mock call to JBProjects ownerOf
|
|
55
|
-
mockExpect(address(projects), abi.encodeCall(IERC721.ownerOf, (_projectId)), abi.encode(address(0)));
|
|
56
|
-
|
|
57
|
-
// mock call to JBPermissions hasPermission
|
|
58
|
-
mockExpect(
|
|
59
|
-
address(permissions),
|
|
60
|
-
abi.encodeCall(
|
|
61
|
-
IJBPermissions.hasPermission,
|
|
62
|
-
(address(this), address(0), _projectId, JBPermissionIds.MIGRATE_TERMINAL, true, true)
|
|
63
|
-
),
|
|
64
|
-
abi.encode(false)
|
|
65
|
-
);
|
|
66
|
-
|
|
67
|
-
vm.expectRevert(
|
|
68
|
-
abi.encodeWithSelector(
|
|
69
|
-
JBPermissioned.JBPermissioned_Unauthorized.selector,
|
|
70
|
-
address(0),
|
|
71
|
-
address(this),
|
|
72
|
-
_projectId,
|
|
73
|
-
JBPermissionIds.MIGRATE_TERMINAL
|
|
74
|
-
)
|
|
75
|
-
);
|
|
76
|
-
_terminal.migrateBalanceOf({projectId: _projectId, token: _native, to: _newTerminal});
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
function test_WhenTheTerminalToDoesNotAcceptTheToken() external whenPermissioned {
|
|
80
|
-
// it will revert TERMINAL_TOKENS_INCOMPATIBLE
|
|
81
|
-
|
|
82
|
-
// for next mock
|
|
83
|
-
JBAccountingContext memory _context = JBAccountingContext({token: _usdc, decimals: 0, currency: 0});
|
|
84
|
-
|
|
85
|
-
// mock call to the destination terminals accountingContextFor
|
|
86
|
-
mockExpect(
|
|
87
|
-
address(_newTerminal),
|
|
88
|
-
abi.encodeCall(IJBTerminal.accountingContextForTokenOf, (_projectId, _native)),
|
|
89
|
-
abi.encode(_context)
|
|
90
|
-
);
|
|
91
|
-
|
|
92
|
-
vm.expectRevert(
|
|
93
|
-
abi.encodeWithSelector(
|
|
94
|
-
JBMultiTerminal.JBMultiTerminal_TerminalTokensIncompatible.selector, _projectId, _native, _newTerminal
|
|
95
|
-
)
|
|
96
|
-
);
|
|
97
|
-
_terminal.migrateBalanceOf({projectId: _projectId, token: _native, to: _newTerminal});
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
// held fees have already been unit tested
|
|
101
|
-
/* function test_GivenThereAreHeldFees() external whenBalanceGTZeroAndCallerIsPermissioned {
|
|
102
|
-
// it will process held fees
|
|
103
|
-
} */
|
|
104
|
-
|
|
105
|
-
function test_GivenTokenIsERC20() external whenPermissioned {
|
|
106
|
-
// it will forceApprove and addToBalanceOf
|
|
107
|
-
|
|
108
|
-
// mock _isFeeless to return true (skip migration fee for this unit test)
|
|
109
|
-
mockExpect(
|
|
110
|
-
address(feelessAddresses),
|
|
111
|
-
abi.encodeCall(IJBFeelessAddresses.isFeeless, (address(_newTerminal))),
|
|
112
|
-
abi.encode(true)
|
|
113
|
-
);
|
|
114
|
-
|
|
115
|
-
// for next mock
|
|
116
|
-
// forge-lint: disable-next-line(unsafe-typecast)
|
|
117
|
-
JBAccountingContext memory _context =
|
|
118
|
-
// forge-lint: disable-next-line(unsafe-typecast)
|
|
119
|
-
JBAccountingContext({token: _usdc, decimals: 6, currency: uint32(_usdcCurrency)});
|
|
120
|
-
|
|
121
|
-
// mock call to the destination terminals accountingContextFor
|
|
122
|
-
mockExpect(
|
|
123
|
-
address(_newTerminal),
|
|
124
|
-
abi.encodeCall(IJBTerminal.accountingContextForTokenOf, (_projectId, _usdc)),
|
|
125
|
-
abi.encode(_context)
|
|
126
|
-
);
|
|
127
|
-
|
|
128
|
-
// mock call to JBTerminalStore
|
|
129
|
-
mockExpect(
|
|
130
|
-
address(store),
|
|
131
|
-
abi.encodeCall(IJBTerminalStore.recordTerminalMigration, (_projectId, _usdc)),
|
|
132
|
-
abi.encode(_defaultAmount)
|
|
133
|
-
);
|
|
134
|
-
|
|
135
|
-
// mock call for SafeERC20s forceApprove approval
|
|
136
|
-
mockExpect(_usdc, abi.encodeCall(IERC20.approve, (address(_newTerminal), _defaultAmount)), "");
|
|
137
|
-
|
|
138
|
-
// Mock the forwarded allowance as fully consumed by the destination terminal.
|
|
139
|
-
vm.mockCall(_usdc, abi.encodeCall(IERC20.allowance, (address(_terminal), address(_newTerminal))), abi.encode(0));
|
|
140
|
-
|
|
141
|
-
// mock call to new terminal addToBalance
|
|
142
|
-
mockExpect(
|
|
143
|
-
address(_newTerminal),
|
|
144
|
-
abi.encodeCall(IJBTerminal.addToBalanceOf, (_projectId, _usdc, _defaultAmount, false, "", "")),
|
|
145
|
-
""
|
|
146
|
-
);
|
|
147
|
-
|
|
148
|
-
_terminal.migrateBalanceOf({projectId: _projectId, token: _usdc, to: _newTerminal});
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
function test_GivenTokenIsNative() external whenPermissioned {
|
|
152
|
-
// it will addToBalanceOf with value in msgvalue
|
|
153
|
-
|
|
154
|
-
// mock _isFeeless to return true (skip migration fee for this unit test)
|
|
155
|
-
mockExpect(
|
|
156
|
-
address(feelessAddresses),
|
|
157
|
-
abi.encodeCall(IJBFeelessAddresses.isFeeless, (address(_newTerminal))),
|
|
158
|
-
abi.encode(true)
|
|
159
|
-
);
|
|
160
|
-
|
|
161
|
-
// for next mock
|
|
162
|
-
// forge-lint: disable-next-line(unsafe-typecast)
|
|
163
|
-
JBAccountingContext memory _context =
|
|
164
|
-
// forge-lint: disable-next-line(unsafe-typecast)
|
|
165
|
-
JBAccountingContext({token: _native, decimals: 18, currency: uint32(_nativeCurrency)});
|
|
166
|
-
|
|
167
|
-
// mock call to the destination terminals accountingContextFor
|
|
168
|
-
mockExpect(
|
|
169
|
-
address(_newTerminal),
|
|
170
|
-
abi.encodeCall(IJBTerminal.accountingContextForTokenOf, (_projectId, _native)),
|
|
171
|
-
abi.encode(_context)
|
|
172
|
-
);
|
|
173
|
-
|
|
174
|
-
// mock call to JBTerminalStore
|
|
175
|
-
mockExpect(
|
|
176
|
-
address(store),
|
|
177
|
-
abi.encodeCall(IJBTerminalStore.recordTerminalMigration, (_projectId, _native)),
|
|
178
|
-
abi.encode(_defaultAmount)
|
|
179
|
-
);
|
|
180
|
-
|
|
181
|
-
// mock call to new terminal addToBalance
|
|
182
|
-
mockExpect(
|
|
183
|
-
address(_newTerminal),
|
|
184
|
-
abi.encodeCall(IJBTerminal.addToBalanceOf, (_projectId, _native, _defaultAmount, false, "", "")),
|
|
185
|
-
""
|
|
186
|
-
);
|
|
187
|
-
|
|
188
|
-
vm.expectEmit();
|
|
189
|
-
emit IJBTerminal.MigrateTerminal(_projectId, _native, _newTerminal, _defaultAmount, address(this));
|
|
190
|
-
|
|
191
|
-
_terminal.migrateBalanceOf({projectId: _projectId, token: _native, to: _newTerminal});
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
function test_WhenBalanceIsZero() external whenPermissioned {
|
|
195
|
-
// it will not add to balance
|
|
196
|
-
|
|
197
|
-
// for next mock
|
|
198
|
-
// forge-lint: disable-next-line(unsafe-typecast)
|
|
199
|
-
JBAccountingContext memory _context =
|
|
200
|
-
// forge-lint: disable-next-line(unsafe-typecast)
|
|
201
|
-
JBAccountingContext({token: _native, decimals: 18, currency: uint32(_nativeCurrency)});
|
|
202
|
-
|
|
203
|
-
// mock call to the destination terminals accountingContextFor
|
|
204
|
-
mockExpect(
|
|
205
|
-
address(_newTerminal),
|
|
206
|
-
abi.encodeCall(IJBTerminal.accountingContextForTokenOf, (_projectId, _native)),
|
|
207
|
-
abi.encode(_context)
|
|
208
|
-
);
|
|
209
|
-
|
|
210
|
-
// mock call to JBTerminalStore
|
|
211
|
-
mockExpect(
|
|
212
|
-
address(store),
|
|
213
|
-
abi.encodeCall(IJBTerminalStore.recordTerminalMigration, (_projectId, _native)),
|
|
214
|
-
abi.encode(0)
|
|
215
|
-
);
|
|
216
|
-
|
|
217
|
-
vm.expectEmit();
|
|
218
|
-
emit IJBTerminal.MigrateTerminal(_projectId, _native, _newTerminal, 0, address(this));
|
|
219
|
-
|
|
220
|
-
_terminal.migrateBalanceOf({projectId: _projectId, token: _native, to: _newTerminal});
|
|
221
|
-
}
|
|
222
|
-
}
|