@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,578 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: MIT
|
|
2
|
-
pragma solidity 0.8.28;
|
|
3
|
-
|
|
4
|
-
import {JBMultiTerminal} from "../../../../src/JBMultiTerminal.sol";
|
|
5
|
-
import {IJBDirectory} from "../../../../src/interfaces/IJBDirectory.sol";
|
|
6
|
-
import {IJBFeelessAddresses} from "../../../../src/interfaces/IJBFeelessAddresses.sol";
|
|
7
|
-
import {IJBSplitHook} from "../../../../src/interfaces/IJBSplitHook.sol";
|
|
8
|
-
import {IJBTerminal} from "../../../../src/interfaces/IJBTerminal.sol";
|
|
9
|
-
import {IJBTerminalStore} from "../../../../src/interfaces/IJBTerminalStore.sol";
|
|
10
|
-
import {JBConstants} from "../../../../src/libraries/JBConstants.sol";
|
|
11
|
-
import {JBFees} from "../../../../src/libraries/JBFees.sol";
|
|
12
|
-
import {JBAccountingContext} from "../../../../src/structs/JBAccountingContext.sol";
|
|
13
|
-
import {JBSplit} from "../../../../src/structs/JBSplit.sol";
|
|
14
|
-
import {JBSplitHookContext} from "../../../../src/structs/JBSplitHookContext.sol";
|
|
15
|
-
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
|
|
16
|
-
import {IERC165} from "@openzeppelin/contracts/utils/introspection/ERC165.sol";
|
|
17
|
-
import {JBMultiTerminalSetup} from "./JBMultiTerminalSetup.sol";
|
|
18
|
-
|
|
19
|
-
contract TestExecutePayout_Local is JBMultiTerminalSetup {
|
|
20
|
-
uint64 _projectId = 1;
|
|
21
|
-
uint64 _noProject = 0;
|
|
22
|
-
uint48 _lockedUntil = 0;
|
|
23
|
-
uint256 _defaultAmount = 1e18;
|
|
24
|
-
uint256 _fee = 25;
|
|
25
|
-
address _hook = makeAddr("splithook");
|
|
26
|
-
address payable _bene = payable(makeAddr("beneficiary"));
|
|
27
|
-
address payable _noBene = payable(address(0));
|
|
28
|
-
address _mockSecondTerminal = makeAddr("anothaOne");
|
|
29
|
-
|
|
30
|
-
address _native = JBConstants.NATIVE_TOKEN;
|
|
31
|
-
address _usdc = makeAddr("USDC");
|
|
32
|
-
// forge-lint: disable-next-line(unsafe-typecast)
|
|
33
|
-
uint32 _usdcCurrency = uint32(uint160(_usdc));
|
|
34
|
-
|
|
35
|
-
JBSplit private _split;
|
|
36
|
-
JBSplit private _emptySplit;
|
|
37
|
-
|
|
38
|
-
function setUp() public {
|
|
39
|
-
super.multiTerminalSetup();
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
function _setAccountingContext(uint256 projectId, address token, uint8 decimals, uint32 currency) internal {
|
|
43
|
-
// Mock the store to return this accounting context
|
|
44
|
-
mockExpect(
|
|
45
|
-
address(store),
|
|
46
|
-
abi.encodeCall(IJBTerminalStore.accountingContextOf, (address(_terminal), projectId, token)),
|
|
47
|
-
abi.encode(JBAccountingContext({token: token, decimals: decimals, currency: currency}))
|
|
48
|
-
);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
modifier whenASplitHookIsConfigured() {
|
|
52
|
-
_split = JBSplit({
|
|
53
|
-
preferAddToBalance: false,
|
|
54
|
-
percent: JBConstants.SPLITS_TOTAL_PERCENT,
|
|
55
|
-
projectId: _noProject,
|
|
56
|
-
beneficiary: _noBene,
|
|
57
|
-
lockedUntil: _lockedUntil,
|
|
58
|
-
hook: IJBSplitHook(_hook)
|
|
59
|
-
});
|
|
60
|
-
vm.deal(address(_terminal), _defaultAmount);
|
|
61
|
-
vm.startPrank(address(_terminal));
|
|
62
|
-
|
|
63
|
-
_;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
function test_GivenTheSplitHookEQFeeless() external whenASplitHookIsConfigured {
|
|
67
|
-
// it will not process a fee
|
|
68
|
-
|
|
69
|
-
// Mock accountingContextOf for the decimals lookup in executePayout
|
|
70
|
-
mockExpect(
|
|
71
|
-
address(store),
|
|
72
|
-
abi.encodeCall(IJBTerminalStore.accountingContextOf, (address(_terminal), _noProject, _native)),
|
|
73
|
-
abi.encode(JBAccountingContext({token: _native, decimals: 0, currency: 0}))
|
|
74
|
-
);
|
|
75
|
-
|
|
76
|
-
// mock call to split hook supportsInterface
|
|
77
|
-
mockExpect(
|
|
78
|
-
address(_hook),
|
|
79
|
-
abi.encodeCall(IERC165.supportsInterface, (type(IJBSplitHook).interfaceId)),
|
|
80
|
-
abi.encode(true)
|
|
81
|
-
);
|
|
82
|
-
|
|
83
|
-
// mock call to FeelessAddresses isFeeless
|
|
84
|
-
mockExpect(address(feelessAddresses), abi.encodeCall(IJBFeelessAddresses.isFeeless, (_hook)), abi.encode(true));
|
|
85
|
-
|
|
86
|
-
JBSplit memory _splitMemory = JBSplit({
|
|
87
|
-
preferAddToBalance: false,
|
|
88
|
-
percent: JBConstants.SPLITS_TOTAL_PERCENT,
|
|
89
|
-
projectId: _noProject,
|
|
90
|
-
beneficiary: _noBene,
|
|
91
|
-
lockedUntil: _lockedUntil,
|
|
92
|
-
hook: IJBSplitHook(_hook)
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
// Create the context to send to the split hook.
|
|
96
|
-
JBSplitHookContext memory context = JBSplitHookContext({
|
|
97
|
-
token: _native,
|
|
98
|
-
amount: _defaultAmount, // It will call with full amount as netPayoutAmount
|
|
99
|
-
decimals: 0,
|
|
100
|
-
projectId: _noProject,
|
|
101
|
-
groupId: uint256(uint160(_native)),
|
|
102
|
-
split: _splitMemory
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
// mock call to hooks processSplitWith
|
|
106
|
-
mockExpect(address(_hook), abi.encodeCall(IJBSplitHook.processSplitWith, (context)), "");
|
|
107
|
-
|
|
108
|
-
JBMultiTerminal(address(_terminal))
|
|
109
|
-
.executePayout({
|
|
110
|
-
split: _split,
|
|
111
|
-
projectId: _noProject,
|
|
112
|
-
token: _native,
|
|
113
|
-
amount: _defaultAmount,
|
|
114
|
-
originalMessageSender: address(this)
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
function test_GivenTheSplitHookDNEQFeeless() external whenASplitHookIsConfigured {
|
|
119
|
-
// it will process a fee
|
|
120
|
-
|
|
121
|
-
// Mock accountingContextOf for the decimals lookup in executePayout
|
|
122
|
-
mockExpect(
|
|
123
|
-
address(store),
|
|
124
|
-
abi.encodeCall(IJBTerminalStore.accountingContextOf, (address(_terminal), _noProject, _native)),
|
|
125
|
-
abi.encode(JBAccountingContext({token: _native, decimals: 0, currency: 0}))
|
|
126
|
-
);
|
|
127
|
-
|
|
128
|
-
// mock call to split hook supportsInterface
|
|
129
|
-
mockExpect(
|
|
130
|
-
address(_hook),
|
|
131
|
-
abi.encodeCall(IERC165.supportsInterface, (type(IJBSplitHook).interfaceId)),
|
|
132
|
-
abi.encode(true)
|
|
133
|
-
);
|
|
134
|
-
|
|
135
|
-
// mock call to FeelessAddresses isFeeless
|
|
136
|
-
mockExpect(address(feelessAddresses), abi.encodeCall(IJBFeelessAddresses.isFeeless, (_hook)), abi.encode(false));
|
|
137
|
-
|
|
138
|
-
JBSplit memory _splitMemory = JBSplit({
|
|
139
|
-
preferAddToBalance: false,
|
|
140
|
-
percent: JBConstants.SPLITS_TOTAL_PERCENT,
|
|
141
|
-
projectId: _noProject,
|
|
142
|
-
beneficiary: _noBene,
|
|
143
|
-
lockedUntil: _lockedUntil,
|
|
144
|
-
hook: IJBSplitHook(_hook)
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
uint256 taxedAmount = JBFees.feeAmountFrom(_defaultAmount, _fee);
|
|
148
|
-
|
|
149
|
-
// Create the context to send to the split hook.
|
|
150
|
-
JBSplitHookContext memory context = JBSplitHookContext({
|
|
151
|
-
token: _native,
|
|
152
|
-
amount: _defaultAmount - taxedAmount, // It will call with taxed amount
|
|
153
|
-
decimals: 0,
|
|
154
|
-
projectId: _noProject,
|
|
155
|
-
groupId: uint256(uint160(_native)),
|
|
156
|
-
split: _splitMemory
|
|
157
|
-
});
|
|
158
|
-
|
|
159
|
-
// mock call to hooks processSplitWith
|
|
160
|
-
mockExpect(address(_hook), abi.encodeCall(IJBSplitHook.processSplitWith, (context)), "");
|
|
161
|
-
|
|
162
|
-
JBMultiTerminal(address(_terminal))
|
|
163
|
-
.executePayout({
|
|
164
|
-
split: _split,
|
|
165
|
-
projectId: _noProject,
|
|
166
|
-
token: _native,
|
|
167
|
-
amount: _defaultAmount,
|
|
168
|
-
originalMessageSender: address(this)
|
|
169
|
-
});
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
function test_GivenTheSplitHookDNSupportSplitHookInterface() external whenASplitHookIsConfigured {
|
|
173
|
-
// it will revert 400_1
|
|
174
|
-
|
|
175
|
-
// mock call to split hook supportsInterface
|
|
176
|
-
mockExpect(
|
|
177
|
-
address(_hook),
|
|
178
|
-
abi.encodeCall(IERC165.supportsInterface, (type(IJBSplitHook).interfaceId)),
|
|
179
|
-
abi.encode(false)
|
|
180
|
-
);
|
|
181
|
-
|
|
182
|
-
vm.expectRevert(abi.encodeWithSelector(JBMultiTerminal.JBMultiTerminal_SplitHookInvalid.selector, _hook));
|
|
183
|
-
JBMultiTerminal(address(_terminal))
|
|
184
|
-
.executePayout({
|
|
185
|
-
split: _split,
|
|
186
|
-
projectId: _noProject,
|
|
187
|
-
token: _native,
|
|
188
|
-
amount: _defaultAmount,
|
|
189
|
-
originalMessageSender: address(this)
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
function test_GivenThePayoutTokenIsErc20() external whenASplitHookIsConfigured {
|
|
194
|
-
// it will safe increase allowance
|
|
195
|
-
|
|
196
|
-
// mock call to FeelessAddresses isFeeless
|
|
197
|
-
mockExpect(
|
|
198
|
-
address(feelessAddresses), abi.encodeCall(IJBFeelessAddresses.isFeeless, (address(this))), abi.encode(false)
|
|
199
|
-
);
|
|
200
|
-
|
|
201
|
-
JBSplit memory _splitMemory = JBSplit({
|
|
202
|
-
preferAddToBalance: false,
|
|
203
|
-
percent: JBConstants.SPLITS_TOTAL_PERCENT,
|
|
204
|
-
projectId: _noProject,
|
|
205
|
-
beneficiary: _noBene,
|
|
206
|
-
lockedUntil: _lockedUntil,
|
|
207
|
-
hook: IJBSplitHook(address(0))
|
|
208
|
-
});
|
|
209
|
-
|
|
210
|
-
uint256 taxedAmount = JBFees.feeAmountFrom(_defaultAmount, _fee);
|
|
211
|
-
|
|
212
|
-
// mock call to usdc transfer
|
|
213
|
-
mockExpect(
|
|
214
|
-
address(_usdc),
|
|
215
|
-
abi.encodeCall(IERC20.transfer, (address(this), _defaultAmount - taxedAmount)),
|
|
216
|
-
abi.encode(true)
|
|
217
|
-
);
|
|
218
|
-
|
|
219
|
-
// for safe ERC20 check of code length at token address
|
|
220
|
-
vm.etch(_usdc, abi.encode(1));
|
|
221
|
-
|
|
222
|
-
JBMultiTerminal(address(_terminal))
|
|
223
|
-
.executePayout({
|
|
224
|
-
split: _splitMemory,
|
|
225
|
-
projectId: _noProject,
|
|
226
|
-
token: _usdc,
|
|
227
|
-
amount: _defaultAmount,
|
|
228
|
-
originalMessageSender: address(this)
|
|
229
|
-
});
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
function test_GivenTheProjectsTerminalEQZeroAddress() external {
|
|
233
|
-
// it will revert 404_2
|
|
234
|
-
|
|
235
|
-
// mock call to directory primaryTerminalOf
|
|
236
|
-
mockExpect(
|
|
237
|
-
address(directory),
|
|
238
|
-
abi.encodeCall(IJBDirectory.primaryTerminalOf, (_projectId, _native)),
|
|
239
|
-
abi.encode(IJBTerminal(address(0)))
|
|
240
|
-
);
|
|
241
|
-
|
|
242
|
-
JBSplit memory _splitMemory = JBSplit({
|
|
243
|
-
preferAddToBalance: false,
|
|
244
|
-
percent: JBConstants.SPLITS_TOTAL_PERCENT,
|
|
245
|
-
projectId: _projectId,
|
|
246
|
-
beneficiary: _noBene,
|
|
247
|
-
lockedUntil: _lockedUntil,
|
|
248
|
-
hook: IJBSplitHook(address(0))
|
|
249
|
-
});
|
|
250
|
-
|
|
251
|
-
vm.expectRevert(
|
|
252
|
-
abi.encodeWithSelector(
|
|
253
|
-
JBMultiTerminal.JBMultiTerminal_RecipientProjectTerminalNotFound.selector, _projectId, _native
|
|
254
|
-
)
|
|
255
|
-
);
|
|
256
|
-
vm.prank(address(_terminal));
|
|
257
|
-
JBMultiTerminal(address(_terminal))
|
|
258
|
-
.executePayout({
|
|
259
|
-
split: _splitMemory,
|
|
260
|
-
projectId: _projectId,
|
|
261
|
-
token: _native,
|
|
262
|
-
amount: _defaultAmount,
|
|
263
|
-
originalMessageSender: address(this)
|
|
264
|
-
});
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
function test_GivenPreferAddToBalanceEQTrueAndTerminalEQThisAddress() external {
|
|
268
|
-
// it will call _addToBalanceOf internal
|
|
269
|
-
|
|
270
|
-
// mock call to directory primaryTerminalOf
|
|
271
|
-
mockExpect(
|
|
272
|
-
address(directory),
|
|
273
|
-
abi.encodeCall(IJBDirectory.primaryTerminalOf, (_projectId, _usdc)),
|
|
274
|
-
abi.encode(IJBTerminal(address(_terminal)))
|
|
275
|
-
);
|
|
276
|
-
|
|
277
|
-
JBSplit memory _splitMemory = JBSplit({
|
|
278
|
-
preferAddToBalance: true,
|
|
279
|
-
percent: JBConstants.SPLITS_TOTAL_PERCENT,
|
|
280
|
-
projectId: _projectId,
|
|
281
|
-
beneficiary: _noBene,
|
|
282
|
-
lockedUntil: _lockedUntil,
|
|
283
|
-
hook: IJBSplitHook(address(0))
|
|
284
|
-
});
|
|
285
|
-
|
|
286
|
-
// mock call to JBTerminalStore recordAddedBalanceFor
|
|
287
|
-
mockExpect(
|
|
288
|
-
address(store),
|
|
289
|
-
abi.encodeCall(IJBTerminalStore.recordAddedBalanceFor, (_projectId, _usdc, _defaultAmount)),
|
|
290
|
-
""
|
|
291
|
-
);
|
|
292
|
-
|
|
293
|
-
// for safe ERC20 check of code length at token address
|
|
294
|
-
vm.prank(address(_terminal));
|
|
295
|
-
|
|
296
|
-
JBMultiTerminal(address(_terminal))
|
|
297
|
-
.executePayout({
|
|
298
|
-
split: _splitMemory,
|
|
299
|
-
projectId: _projectId,
|
|
300
|
-
token: _usdc,
|
|
301
|
-
amount: _defaultAmount,
|
|
302
|
-
originalMessageSender: address(this)
|
|
303
|
-
});
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
function test_GivenPreferAddToBalanceEQTrueAndTerminalEQAnotherAddress() external {
|
|
307
|
-
// it will call that terminals addToBalanceOf
|
|
308
|
-
|
|
309
|
-
// mock call to FeelessAddresses isFeeless
|
|
310
|
-
mockExpect(
|
|
311
|
-
address(feelessAddresses),
|
|
312
|
-
abi.encodeCall(IJBFeelessAddresses.isFeeless, (address(_mockSecondTerminal))),
|
|
313
|
-
abi.encode(false)
|
|
314
|
-
);
|
|
315
|
-
|
|
316
|
-
// mock call to directory primaryTerminalOf
|
|
317
|
-
mockExpect(
|
|
318
|
-
address(directory),
|
|
319
|
-
abi.encodeCall(IJBDirectory.primaryTerminalOf, (_projectId, _usdc)),
|
|
320
|
-
abi.encode(IJBTerminal(address(_mockSecondTerminal)))
|
|
321
|
-
);
|
|
322
|
-
|
|
323
|
-
JBSplit memory _splitMemory = JBSplit({
|
|
324
|
-
preferAddToBalance: true,
|
|
325
|
-
percent: JBConstants.SPLITS_TOTAL_PERCENT,
|
|
326
|
-
projectId: _projectId,
|
|
327
|
-
beneficiary: _noBene,
|
|
328
|
-
lockedUntil: _lockedUntil,
|
|
329
|
-
hook: IJBSplitHook(address(0))
|
|
330
|
-
});
|
|
331
|
-
|
|
332
|
-
uint256 taxedAmount = JBFees.feeAmountFrom(_defaultAmount, _fee);
|
|
333
|
-
uint256 amountAfterTax = _defaultAmount - taxedAmount;
|
|
334
|
-
|
|
335
|
-
// mock call for SafeERC20s forceApprove approval
|
|
336
|
-
mockExpect(_usdc, abi.encodeCall(IERC20.approve, (_mockSecondTerminal, amountAfterTax)), "");
|
|
337
|
-
|
|
338
|
-
// Mock the forwarded allowance as fully consumed by the recipient terminal.
|
|
339
|
-
vm.mockCall(_usdc, abi.encodeCall(IERC20.allowance, (address(_terminal), _mockSecondTerminal)), abi.encode(0));
|
|
340
|
-
|
|
341
|
-
// mock call to second terminals addToBalanceOf
|
|
342
|
-
mockExpect(
|
|
343
|
-
_mockSecondTerminal,
|
|
344
|
-
abi.encodeCall(
|
|
345
|
-
IJBTerminal.addToBalanceOf,
|
|
346
|
-
(_projectId, _usdc, amountAfterTax, false, "", bytes(abi.encodePacked(uint256(_projectId))))
|
|
347
|
-
),
|
|
348
|
-
""
|
|
349
|
-
);
|
|
350
|
-
|
|
351
|
-
vm.prank(address(_terminal));
|
|
352
|
-
JBMultiTerminal(address(_terminal))
|
|
353
|
-
.executePayout({
|
|
354
|
-
split: _splitMemory,
|
|
355
|
-
projectId: _projectId,
|
|
356
|
-
token: _usdc,
|
|
357
|
-
amount: _defaultAmount,
|
|
358
|
-
originalMessageSender: address(this)
|
|
359
|
-
});
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
function test_GivenPreferAddToBalanceDNEQTrueAndTerminalEQThisAddress() external {
|
|
363
|
-
// it will revert with MintNotAllowed because same-project same-terminal pay splits are blocked
|
|
364
|
-
|
|
365
|
-
// mock call to directory primaryTerminalOf
|
|
366
|
-
mockExpect(
|
|
367
|
-
address(directory),
|
|
368
|
-
abi.encodeCall(IJBDirectory.primaryTerminalOf, (_projectId, _usdc)),
|
|
369
|
-
abi.encode(IJBTerminal(address(_terminal)))
|
|
370
|
-
);
|
|
371
|
-
|
|
372
|
-
JBSplit memory _splitMemory = JBSplit({
|
|
373
|
-
preferAddToBalance: false,
|
|
374
|
-
percent: JBConstants.SPLITS_TOTAL_PERCENT,
|
|
375
|
-
projectId: _projectId,
|
|
376
|
-
beneficiary: _noBene,
|
|
377
|
-
lockedUntil: _lockedUntil,
|
|
378
|
-
hook: IJBSplitHook(address(0))
|
|
379
|
-
});
|
|
380
|
-
|
|
381
|
-
vm.prank(address(_terminal));
|
|
382
|
-
vm.expectRevert(JBMultiTerminal.JBMultiTerminal_MintNotAllowed.selector);
|
|
383
|
-
JBMultiTerminal(address(_terminal))
|
|
384
|
-
.executePayout({
|
|
385
|
-
split: _splitMemory,
|
|
386
|
-
projectId: _projectId,
|
|
387
|
-
token: _usdc,
|
|
388
|
-
amount: _defaultAmount,
|
|
389
|
-
originalMessageSender: address(this)
|
|
390
|
-
});
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
function test_GivenPreferAddToBalanceDNEQTrueAndTerminalEQAnotherAddress() external {
|
|
394
|
-
// it will call that terminals pay function
|
|
395
|
-
|
|
396
|
-
// mock call to FeelessAddresses isFeeless
|
|
397
|
-
mockExpect(
|
|
398
|
-
address(feelessAddresses),
|
|
399
|
-
abi.encodeCall(IJBFeelessAddresses.isFeeless, (address(_mockSecondTerminal))),
|
|
400
|
-
abi.encode(false)
|
|
401
|
-
);
|
|
402
|
-
|
|
403
|
-
// mock call to directory primaryTerminalOf
|
|
404
|
-
mockExpect(
|
|
405
|
-
address(directory),
|
|
406
|
-
abi.encodeCall(IJBDirectory.primaryTerminalOf, (_projectId, _usdc)),
|
|
407
|
-
abi.encode(IJBTerminal(address(_mockSecondTerminal)))
|
|
408
|
-
);
|
|
409
|
-
|
|
410
|
-
JBSplit memory _splitMemory = JBSplit({
|
|
411
|
-
preferAddToBalance: false,
|
|
412
|
-
percent: JBConstants.SPLITS_TOTAL_PERCENT,
|
|
413
|
-
projectId: _projectId,
|
|
414
|
-
beneficiary: _noBene,
|
|
415
|
-
lockedUntil: _lockedUntil,
|
|
416
|
-
hook: IJBSplitHook(address(0))
|
|
417
|
-
});
|
|
418
|
-
|
|
419
|
-
uint256 taxedAmount = JBFees.feeAmountFrom(_defaultAmount, _fee);
|
|
420
|
-
uint256 amountAfterTax = _defaultAmount - taxedAmount;
|
|
421
|
-
|
|
422
|
-
// mock call for SafeERC20s forceApprove approval
|
|
423
|
-
mockExpect(_usdc, abi.encodeCall(IERC20.approve, (_mockSecondTerminal, amountAfterTax)), "");
|
|
424
|
-
|
|
425
|
-
// Mock the forwarded allowance as fully consumed by the recipient terminal.
|
|
426
|
-
vm.mockCall(_usdc, abi.encodeCall(IERC20.allowance, (address(_terminal), _mockSecondTerminal)), abi.encode(0));
|
|
427
|
-
|
|
428
|
-
// mock call to second terminals pay function
|
|
429
|
-
mockExpect(
|
|
430
|
-
_mockSecondTerminal,
|
|
431
|
-
abi.encodeCall(
|
|
432
|
-
IJBTerminal.pay,
|
|
433
|
-
(_projectId, _usdc, amountAfterTax, address(this), 0, "", bytes(abi.encodePacked(uint256(_projectId))))
|
|
434
|
-
),
|
|
435
|
-
abi.encode(1e18)
|
|
436
|
-
);
|
|
437
|
-
|
|
438
|
-
vm.prank(address(_terminal));
|
|
439
|
-
JBMultiTerminal(address(_terminal))
|
|
440
|
-
.executePayout({
|
|
441
|
-
split: _splitMemory,
|
|
442
|
-
projectId: _projectId,
|
|
443
|
-
token: _usdc,
|
|
444
|
-
amount: _defaultAmount,
|
|
445
|
-
originalMessageSender: address(this)
|
|
446
|
-
});
|
|
447
|
-
}
|
|
448
|
-
|
|
449
|
-
function test_GivenBeneficiaryEQFeeless() external {
|
|
450
|
-
// it will payout to the beneficiary without taking fees
|
|
451
|
-
|
|
452
|
-
// mock call to FeelessAddresses isFeeless
|
|
453
|
-
mockExpect(
|
|
454
|
-
address(feelessAddresses), abi.encodeCall(IJBFeelessAddresses.isFeeless, (address(_bene))), abi.encode(true)
|
|
455
|
-
);
|
|
456
|
-
|
|
457
|
-
JBSplit memory _splitMemory = JBSplit({
|
|
458
|
-
preferAddToBalance: false,
|
|
459
|
-
percent: JBConstants.SPLITS_TOTAL_PERCENT,
|
|
460
|
-
projectId: _noProject,
|
|
461
|
-
beneficiary: _bene,
|
|
462
|
-
lockedUntil: _lockedUntil,
|
|
463
|
-
hook: IJBSplitHook(address(0))
|
|
464
|
-
});
|
|
465
|
-
|
|
466
|
-
// mock call to usdc transfer
|
|
467
|
-
mockExpect(address(_usdc), abi.encodeCall(IERC20.transfer, (address(_bene), _defaultAmount)), abi.encode(true));
|
|
468
|
-
|
|
469
|
-
// for safe ERC20 check of code length at token address
|
|
470
|
-
vm.prank(address(_terminal));
|
|
471
|
-
|
|
472
|
-
JBMultiTerminal(address(_terminal))
|
|
473
|
-
.executePayout({
|
|
474
|
-
split: _splitMemory,
|
|
475
|
-
projectId: _projectId,
|
|
476
|
-
token: _usdc,
|
|
477
|
-
amount: _defaultAmount,
|
|
478
|
-
originalMessageSender: address(this)
|
|
479
|
-
});
|
|
480
|
-
}
|
|
481
|
-
|
|
482
|
-
function test_GivenBeneficiaryDNEQFeeless() external {
|
|
483
|
-
// it will payout to the beneficiary incurring fee
|
|
484
|
-
|
|
485
|
-
// mock call to FeelessAddresses isFeeless
|
|
486
|
-
mockExpect(
|
|
487
|
-
address(feelessAddresses),
|
|
488
|
-
abi.encodeCall(IJBFeelessAddresses.isFeeless, (address(_bene))),
|
|
489
|
-
abi.encode(false)
|
|
490
|
-
);
|
|
491
|
-
|
|
492
|
-
JBSplit memory _splitMemory = JBSplit({
|
|
493
|
-
preferAddToBalance: false,
|
|
494
|
-
percent: JBConstants.SPLITS_TOTAL_PERCENT,
|
|
495
|
-
projectId: _noProject,
|
|
496
|
-
beneficiary: _bene,
|
|
497
|
-
lockedUntil: _lockedUntil,
|
|
498
|
-
hook: IJBSplitHook(address(0))
|
|
499
|
-
});
|
|
500
|
-
|
|
501
|
-
uint256 taxedAmount = JBFees.feeAmountFrom(_defaultAmount, _fee);
|
|
502
|
-
uint256 amountAfterTax = _defaultAmount - taxedAmount;
|
|
503
|
-
|
|
504
|
-
// mock call to usdc transfer
|
|
505
|
-
mockExpect(address(_usdc), abi.encodeCall(IERC20.transfer, (address(_bene), amountAfterTax)), abi.encode(true));
|
|
506
|
-
|
|
507
|
-
// for safe ERC20 check of code length at token address
|
|
508
|
-
vm.prank(address(_terminal));
|
|
509
|
-
|
|
510
|
-
JBMultiTerminal(address(_terminal))
|
|
511
|
-
.executePayout({
|
|
512
|
-
split: _splitMemory,
|
|
513
|
-
projectId: _projectId,
|
|
514
|
-
token: _usdc,
|
|
515
|
-
amount: _defaultAmount,
|
|
516
|
-
originalMessageSender: address(this)
|
|
517
|
-
});
|
|
518
|
-
}
|
|
519
|
-
|
|
520
|
-
function test_WhenThereIsNoBeneficiarySplitHookOrProjectToPay() external {
|
|
521
|
-
// it will payout msgSender
|
|
522
|
-
|
|
523
|
-
// mock call to FeelessAddresses isFeeless
|
|
524
|
-
mockExpect(
|
|
525
|
-
address(feelessAddresses), abi.encodeCall(IJBFeelessAddresses.isFeeless, (address(this))), abi.encode(false)
|
|
526
|
-
);
|
|
527
|
-
|
|
528
|
-
JBSplit memory _splitMemory = JBSplit({
|
|
529
|
-
preferAddToBalance: false,
|
|
530
|
-
percent: JBConstants.SPLITS_TOTAL_PERCENT,
|
|
531
|
-
projectId: _noProject,
|
|
532
|
-
beneficiary: _noBene,
|
|
533
|
-
lockedUntil: _lockedUntil,
|
|
534
|
-
hook: IJBSplitHook(address(0))
|
|
535
|
-
});
|
|
536
|
-
|
|
537
|
-
uint256 taxedAmount = JBFees.feeAmountFrom(_defaultAmount, _fee);
|
|
538
|
-
uint256 amountAfterTax = _defaultAmount - taxedAmount;
|
|
539
|
-
|
|
540
|
-
// mock call to usdc transfer
|
|
541
|
-
mockExpect(address(_usdc), abi.encodeCall(IERC20.transfer, (address(this), amountAfterTax)), abi.encode(true));
|
|
542
|
-
|
|
543
|
-
// for safe ERC20 check of code length at token address
|
|
544
|
-
vm.prank(address(_terminal));
|
|
545
|
-
|
|
546
|
-
JBMultiTerminal(address(_terminal))
|
|
547
|
-
.executePayout({
|
|
548
|
-
split: _splitMemory,
|
|
549
|
-
projectId: _projectId,
|
|
550
|
-
token: _usdc,
|
|
551
|
-
amount: _defaultAmount,
|
|
552
|
-
originalMessageSender: address(this)
|
|
553
|
-
});
|
|
554
|
-
}
|
|
555
|
-
|
|
556
|
-
function test_WhenTheCallerIsNotItself() external {
|
|
557
|
-
// it will revert
|
|
558
|
-
|
|
559
|
-
JBSplit memory _splitMemory = JBSplit({
|
|
560
|
-
preferAddToBalance: false,
|
|
561
|
-
percent: JBConstants.SPLITS_TOTAL_PERCENT,
|
|
562
|
-
projectId: _noProject,
|
|
563
|
-
beneficiary: _noBene,
|
|
564
|
-
lockedUntil: _lockedUntil,
|
|
565
|
-
hook: IJBSplitHook(address(0))
|
|
566
|
-
});
|
|
567
|
-
|
|
568
|
-
vm.expectRevert();
|
|
569
|
-
JBMultiTerminal(address(_terminal))
|
|
570
|
-
.executePayout({
|
|
571
|
-
split: _splitMemory,
|
|
572
|
-
projectId: _projectId,
|
|
573
|
-
token: _usdc,
|
|
574
|
-
amount: _defaultAmount,
|
|
575
|
-
originalMessageSender: address(this)
|
|
576
|
-
});
|
|
577
|
-
}
|
|
578
|
-
}
|