@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,372 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: MIT
|
|
2
|
-
pragma solidity >=0.8.6;
|
|
3
|
-
|
|
4
|
-
import {TestBaseWorkflow} from "./helpers/TestBaseWorkflow.sol";
|
|
5
|
-
import {MetadataResolverHelper} from "./helpers/MetadataResolverHelper.sol";
|
|
6
|
-
import {JBMultiTerminal} from "../src/JBMultiTerminal.sol";
|
|
7
|
-
import {IJBController} from "../src/interfaces/IJBController.sol";
|
|
8
|
-
import {IJBPrices} from "../src/interfaces/IJBPrices.sol";
|
|
9
|
-
import {IJBRulesetApprovalHook} from "../src/interfaces/IJBRulesetApprovalHook.sol";
|
|
10
|
-
import {IJBTerminal} from "../src/interfaces/IJBTerminal.sol";
|
|
11
|
-
import {IJBTokens} from "../src/interfaces/IJBTokens.sol";
|
|
12
|
-
import {JBConstants} from "../src/libraries/JBConstants.sol";
|
|
13
|
-
import {JBAccountingContext} from "../src/structs/JBAccountingContext.sol";
|
|
14
|
-
import {JBFundAccessLimitGroup} from "../src/structs/JBFundAccessLimitGroup.sol";
|
|
15
|
-
import {JBRulesetConfig} from "../src/structs/JBRulesetConfig.sol";
|
|
16
|
-
import {JBRulesetMetadata} from "../src/structs/JBRulesetMetadata.sol";
|
|
17
|
-
import {JBSingleAllowance} from "../src/structs/JBSingleAllowance.sol";
|
|
18
|
-
import {JBSplitGroup} from "../src/structs/JBSplitGroup.sol";
|
|
19
|
-
import {JBTerminalConfig} from "../src/structs/JBTerminalConfig.sol";
|
|
20
|
-
import {IAllowanceTransfer, IPermit2} from "@uniswap/permit2/src/interfaces/IPermit2.sol";
|
|
21
|
-
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
|
|
22
|
-
import {MockPriceFeed} from "./mock/MockPriceFeed.sol";
|
|
23
|
-
|
|
24
|
-
contract TestPermit2Terminal_Local is TestBaseWorkflow {
|
|
25
|
-
uint112 private constant _WEIGHT = uint112(1000 * 10 ** 18);
|
|
26
|
-
|
|
27
|
-
IJBController private _controller;
|
|
28
|
-
IJBTerminal private _terminal;
|
|
29
|
-
IJBPrices private _prices;
|
|
30
|
-
IJBTokens private _tokens;
|
|
31
|
-
IERC20 private _usdc;
|
|
32
|
-
IPermit2 private _permit2;
|
|
33
|
-
MetadataResolverHelper private _helper;
|
|
34
|
-
address private _projectOwner;
|
|
35
|
-
|
|
36
|
-
uint256 _projectId;
|
|
37
|
-
|
|
38
|
-
// Permit2 params.
|
|
39
|
-
// forge-lint: disable-next-line(mixed-case-variable)
|
|
40
|
-
bytes32 DOMAIN_SEPARATOR;
|
|
41
|
-
address from;
|
|
42
|
-
uint256 fromPrivateKey;
|
|
43
|
-
|
|
44
|
-
// Price.
|
|
45
|
-
uint256 _nativePricePerUsd = 0.0005 * 10 ** 18; // 1/2000
|
|
46
|
-
|
|
47
|
-
function setUp() public override {
|
|
48
|
-
super.setUp();
|
|
49
|
-
|
|
50
|
-
_controller = jbController();
|
|
51
|
-
_projectOwner = multisig();
|
|
52
|
-
_terminal = jbMultiTerminal();
|
|
53
|
-
_prices = jbPrices();
|
|
54
|
-
_tokens = jbTokens();
|
|
55
|
-
_helper = metadataHelper();
|
|
56
|
-
_usdc = usdcToken();
|
|
57
|
-
_permit2 = permit2();
|
|
58
|
-
|
|
59
|
-
fromPrivateKey = 0x12341234;
|
|
60
|
-
from = vm.addr(fromPrivateKey);
|
|
61
|
-
DOMAIN_SEPARATOR = permit2().DOMAIN_SEPARATOR();
|
|
62
|
-
|
|
63
|
-
JBRulesetMetadata memory _metadata = JBRulesetMetadata({
|
|
64
|
-
reservedPercent: 0,
|
|
65
|
-
cashOutTaxRate: JBConstants.MAX_CASH_OUT_TAX_RATE,
|
|
66
|
-
baseCurrency: uint32(uint160(JBConstants.NATIVE_TOKEN)),
|
|
67
|
-
pausePay: false,
|
|
68
|
-
pauseCreditTransfers: false,
|
|
69
|
-
allowOwnerMinting: true,
|
|
70
|
-
allowSetCustomToken: true,
|
|
71
|
-
allowTerminalMigration: false,
|
|
72
|
-
allowSetTerminals: false,
|
|
73
|
-
ownerMustSendPayouts: false,
|
|
74
|
-
allowSetController: false,
|
|
75
|
-
allowAddAccountingContext: true,
|
|
76
|
-
allowAddPriceFeed: true,
|
|
77
|
-
holdFees: false,
|
|
78
|
-
useTotalSurplusForCashOuts: false,
|
|
79
|
-
useDataHookForPay: false,
|
|
80
|
-
useDataHookForCashOut: false,
|
|
81
|
-
dataHook: address(0),
|
|
82
|
-
metadata: 0
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
// Package up ruleset configuration.
|
|
86
|
-
JBRulesetConfig[] memory _rulesetConfig = new JBRulesetConfig[](1);
|
|
87
|
-
_rulesetConfig[0].mustStartAtOrAfter = 0;
|
|
88
|
-
_rulesetConfig[0].duration = 0;
|
|
89
|
-
_rulesetConfig[0].weight = _WEIGHT;
|
|
90
|
-
_rulesetConfig[0].weightCutPercent = 0;
|
|
91
|
-
_rulesetConfig[0].approvalHook = IJBRulesetApprovalHook(address(0));
|
|
92
|
-
_rulesetConfig[0].metadata = _metadata;
|
|
93
|
-
_rulesetConfig[0].splitGroups = new JBSplitGroup[](0);
|
|
94
|
-
_rulesetConfig[0].fundAccessLimitGroups = new JBFundAccessLimitGroup[](0);
|
|
95
|
-
|
|
96
|
-
JBTerminalConfig[] memory _terminalConfigurations = new JBTerminalConfig[](1);
|
|
97
|
-
JBAccountingContext[] memory _tokensToAccept = new JBAccountingContext[](2);
|
|
98
|
-
_tokensToAccept[0] = JBAccountingContext({
|
|
99
|
-
token: JBConstants.NATIVE_TOKEN, decimals: 18, currency: uint32(uint160(JBConstants.NATIVE_TOKEN))
|
|
100
|
-
});
|
|
101
|
-
_tokensToAccept[1] = JBAccountingContext({
|
|
102
|
-
token: address(usdcToken()), decimals: 6, currency: uint32(uint160(address(usdcToken())))
|
|
103
|
-
});
|
|
104
|
-
_terminalConfigurations[0] =
|
|
105
|
-
JBTerminalConfig({terminal: _terminal, accountingContextsToAccept: _tokensToAccept});
|
|
106
|
-
|
|
107
|
-
// Create a first project to collect fees.
|
|
108
|
-
_controller.launchProjectFor({
|
|
109
|
-
owner: _projectOwner,
|
|
110
|
-
projectUri: "myIPFSHash",
|
|
111
|
-
rulesetConfigurations: _rulesetConfig,
|
|
112
|
-
terminalConfigurations: _terminalConfigurations,
|
|
113
|
-
memo: ""
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
_projectId = _controller.launchProjectFor({
|
|
117
|
-
owner: _projectOwner,
|
|
118
|
-
projectUri: "myIPFSHash",
|
|
119
|
-
rulesetConfigurations: _rulesetConfig,
|
|
120
|
-
terminalConfigurations: _terminalConfigurations,
|
|
121
|
-
memo: ""
|
|
122
|
-
});
|
|
123
|
-
|
|
124
|
-
vm.startPrank(_projectOwner);
|
|
125
|
-
MockPriceFeed _priceFeedNativeUsd = new MockPriceFeed(_nativePricePerUsd, 18);
|
|
126
|
-
vm.label(address(_priceFeedNativeUsd), "Mock Price Feed Native-USD");
|
|
127
|
-
|
|
128
|
-
_controller.addPriceFeedFor({
|
|
129
|
-
projectId: _projectId,
|
|
130
|
-
pricingCurrency: uint32(uint160(JBConstants.NATIVE_TOKEN)),
|
|
131
|
-
unitCurrency: uint32(uint160(address(usdcToken()))),
|
|
132
|
-
feed: _priceFeedNativeUsd
|
|
133
|
-
});
|
|
134
|
-
|
|
135
|
-
vm.stopPrank();
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
function testFuzzPayPermit2(uint256 _coins, uint256 _expiration, uint256 _deadline) public {
|
|
139
|
-
// Setup: set fuzz boundaries.
|
|
140
|
-
_coins = bound(_coins, 0, uint256(type(uint160).max) + 1);
|
|
141
|
-
_expiration = bound(_expiration, block.timestamp + 1, type(uint48).max - 1);
|
|
142
|
-
_deadline = bound(_deadline, block.timestamp + 1, type(uint256).max - 1);
|
|
143
|
-
|
|
144
|
-
// Setup: prepare permit details for signing.
|
|
145
|
-
IAllowanceTransfer.PermitDetails memory details = IAllowanceTransfer.PermitDetails({
|
|
146
|
-
// forge-lint: disable-next-line(unsafe-typecast)
|
|
147
|
-
token: address(_usdc),
|
|
148
|
-
// forge-lint: disable-next-line(unsafe-typecast)
|
|
149
|
-
amount: uint160(_coins),
|
|
150
|
-
// forge-lint: disable-next-line(unsafe-typecast)
|
|
151
|
-
expiration: uint48(_expiration),
|
|
152
|
-
nonce: 0
|
|
153
|
-
});
|
|
154
|
-
|
|
155
|
-
IAllowanceTransfer.PermitSingle memory permit =
|
|
156
|
-
IAllowanceTransfer.PermitSingle({details: details, spender: address(_terminal), sigDeadline: _deadline});
|
|
157
|
-
|
|
158
|
-
// Setup: sign permit details.
|
|
159
|
-
bytes memory sig = getPermitSignature(permit, fromPrivateKey, DOMAIN_SEPARATOR);
|
|
160
|
-
|
|
161
|
-
JBSingleAllowance memory permitData = JBSingleAllowance({
|
|
162
|
-
sigDeadline: _deadline,
|
|
163
|
-
// forge-lint: disable-next-line(unsafe-typecast)
|
|
164
|
-
amount: uint160(_coins),
|
|
165
|
-
// forge-lint: disable-next-line(unsafe-typecast)
|
|
166
|
-
expiration: uint48(_expiration),
|
|
167
|
-
nonce: uint48(0),
|
|
168
|
-
signature: sig
|
|
169
|
-
});
|
|
170
|
-
|
|
171
|
-
// Setup: prepare data for metadata helper.
|
|
172
|
-
bytes4[] memory _ids = new bytes4[](1);
|
|
173
|
-
bytes[] memory _datas = new bytes[](1);
|
|
174
|
-
_datas[0] = abi.encode(permitData);
|
|
175
|
-
_ids[0] = _helper.getId("permit2", address(_terminal));
|
|
176
|
-
|
|
177
|
-
// Setup: use the metadata library to encode.
|
|
178
|
-
bytes memory _packedData = _helper.createMetadata(_ids, _datas);
|
|
179
|
-
|
|
180
|
-
// Setup: give coins and approve permit2 contract.
|
|
181
|
-
deal(address(_usdc), from, _coins);
|
|
182
|
-
vm.prank(from);
|
|
183
|
-
IERC20(address(_usdc)).approve(address(permit2()), _coins);
|
|
184
|
-
|
|
185
|
-
if (_coins == uint256(type(uint160).max) + 1) {
|
|
186
|
-
vm.expectRevert(
|
|
187
|
-
abi.encodeWithSelector(JBMultiTerminal.JBMultiTerminal_PermitAllowanceNotEnough.selector, _coins, 0)
|
|
188
|
-
);
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
vm.prank(from);
|
|
192
|
-
uint256 _minted = _terminal.pay({
|
|
193
|
-
projectId: _projectId,
|
|
194
|
-
amount: _coins,
|
|
195
|
-
token: address(_usdc),
|
|
196
|
-
beneficiary: from,
|
|
197
|
-
minReturnedTokens: 0,
|
|
198
|
-
memo: "Take my permitted money!",
|
|
199
|
-
metadata: _packedData
|
|
200
|
-
});
|
|
201
|
-
|
|
202
|
-
if (_coins < uint256(type(uint160).max) + 1) {
|
|
203
|
-
// Check: that tokens were transfered.
|
|
204
|
-
assertEq(_usdc.balanceOf(address(_terminal)), _coins);
|
|
205
|
-
|
|
206
|
-
// Check: that payer receives project token/balance.
|
|
207
|
-
assertEq(_tokens.totalBalanceOf(from, _projectId), _minted);
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
function testFuzzAddToBalancePermit2(uint256 _coins, uint256 _expiration, uint256 _deadline) public {
|
|
212
|
-
// Setup: set fuzz boundaries.
|
|
213
|
-
_coins = bound(_coins, 0, uint256(type(uint160).max) + 1);
|
|
214
|
-
_expiration = bound(_expiration, block.timestamp + 1, type(uint48).max - 1);
|
|
215
|
-
_deadline = bound(_deadline, block.timestamp + 1, type(uint256).max - 1);
|
|
216
|
-
|
|
217
|
-
// Setup: prepare permit details for signing.
|
|
218
|
-
IAllowanceTransfer.PermitDetails memory details = IAllowanceTransfer.PermitDetails({
|
|
219
|
-
// forge-lint: disable-next-line(unsafe-typecast)
|
|
220
|
-
token: address(_usdc),
|
|
221
|
-
// forge-lint: disable-next-line(unsafe-typecast)
|
|
222
|
-
amount: uint160(_coins),
|
|
223
|
-
// forge-lint: disable-next-line(unsafe-typecast)
|
|
224
|
-
expiration: uint48(_expiration),
|
|
225
|
-
nonce: 0
|
|
226
|
-
});
|
|
227
|
-
|
|
228
|
-
IAllowanceTransfer.PermitSingle memory permit =
|
|
229
|
-
IAllowanceTransfer.PermitSingle({details: details, spender: address(_terminal), sigDeadline: _deadline});
|
|
230
|
-
|
|
231
|
-
// Setup: sign permit details.
|
|
232
|
-
bytes memory sig = getPermitSignature(permit, fromPrivateKey, DOMAIN_SEPARATOR);
|
|
233
|
-
|
|
234
|
-
JBSingleAllowance memory permitData = JBSingleAllowance({
|
|
235
|
-
sigDeadline: _deadline,
|
|
236
|
-
// forge-lint: disable-next-line(unsafe-typecast)
|
|
237
|
-
amount: uint160(_coins),
|
|
238
|
-
// forge-lint: disable-next-line(unsafe-typecast)
|
|
239
|
-
expiration: uint48(_expiration),
|
|
240
|
-
nonce: uint48(0),
|
|
241
|
-
signature: sig
|
|
242
|
-
});
|
|
243
|
-
|
|
244
|
-
// Setup: prepare data for metadata helper.
|
|
245
|
-
bytes4[] memory _ids = new bytes4[](1);
|
|
246
|
-
bytes[] memory _datas = new bytes[](1);
|
|
247
|
-
_datas[0] = abi.encode(permitData);
|
|
248
|
-
_ids[0] = _helper.getId("permit2", address(_terminal));
|
|
249
|
-
|
|
250
|
-
// Setup: use the metadata library to encode.
|
|
251
|
-
bytes memory _packedData = _helper.createMetadata(_ids, _datas);
|
|
252
|
-
|
|
253
|
-
// Setup: give coins and approve permit2 contract.
|
|
254
|
-
deal(address(_usdc), from, _coins);
|
|
255
|
-
vm.prank(from);
|
|
256
|
-
IERC20(address(_usdc)).approve(address(permit2()), _coins);
|
|
257
|
-
|
|
258
|
-
if (_coins == uint256(type(uint160).max) + 1) {
|
|
259
|
-
vm.expectRevert(
|
|
260
|
-
abi.encodeWithSelector(JBMultiTerminal.JBMultiTerminal_PermitAllowanceNotEnough.selector, _coins, 0)
|
|
261
|
-
);
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
// Test: add to balance using permit2 data, which should transfer tokens.
|
|
265
|
-
vm.prank(from);
|
|
266
|
-
_terminal.addToBalanceOf(_projectId, address(_usdc), _coins, false, "testing permit2", _packedData);
|
|
267
|
-
|
|
268
|
-
// Check: that tokens were transferred.
|
|
269
|
-
if (_coins < uint256(type(uint160).max) + 1) assertEq(_usdc.balanceOf(address(_terminal)), _coins);
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
function testPayAmountGtMaxPermit() public {
|
|
273
|
-
// Setup: refs
|
|
274
|
-
uint160 _permitAmount = type(uint160).max;
|
|
275
|
-
uint256 _payAmount = type(uint256).max;
|
|
276
|
-
uint256 _sigDeadline = block.timestamp + 1;
|
|
277
|
-
uint48 _expiration = type(uint48).max;
|
|
278
|
-
uint48 _nonce = 0;
|
|
279
|
-
|
|
280
|
-
// Setup: prepare permit details for signing.
|
|
281
|
-
IAllowanceTransfer.PermitDetails memory details = IAllowanceTransfer.PermitDetails({
|
|
282
|
-
token: address(_usdc), amount: _permitAmount, expiration: _expiration, nonce: 0
|
|
283
|
-
});
|
|
284
|
-
|
|
285
|
-
IAllowanceTransfer.PermitSingle memory permit =
|
|
286
|
-
IAllowanceTransfer.PermitSingle({details: details, spender: address(_terminal), sigDeadline: _sigDeadline});
|
|
287
|
-
|
|
288
|
-
// Setup: sign permit details.
|
|
289
|
-
bytes memory sig = getPermitSignature(permit, fromPrivateKey, DOMAIN_SEPARATOR);
|
|
290
|
-
|
|
291
|
-
JBSingleAllowance({
|
|
292
|
-
sigDeadline: _sigDeadline, amount: _permitAmount, expiration: _expiration, nonce: _nonce, signature: sig
|
|
293
|
-
});
|
|
294
|
-
|
|
295
|
-
vm.expectRevert(
|
|
296
|
-
abi.encodeWithSelector(
|
|
297
|
-
JBMultiTerminal.JBMultiTerminal_OverflowAlert.selector, _payAmount, type(uint160).max
|
|
298
|
-
)
|
|
299
|
-
);
|
|
300
|
-
|
|
301
|
-
vm.prank(from);
|
|
302
|
-
_terminal.pay({
|
|
303
|
-
projectId: _projectId,
|
|
304
|
-
amount: _payAmount,
|
|
305
|
-
token: address(_usdc),
|
|
306
|
-
beneficiary: from,
|
|
307
|
-
minReturnedTokens: 0,
|
|
308
|
-
memo: "Take my permitted money!",
|
|
309
|
-
metadata: ""
|
|
310
|
-
});
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
/// Permit2 signature helpers.
|
|
314
|
-
/// (required because `permit2/test/utils/PermitSignature.sol` imports `draft-EIP712.sol` which is no longer a
|
|
315
|
-
/// draft.)
|
|
316
|
-
|
|
317
|
-
bytes32 public constant _PERMIT_DETAILS_TYPEHASH =
|
|
318
|
-
keccak256("PermitDetails(address token,uint160 amount,uint48 expiration,uint48 nonce)");
|
|
319
|
-
|
|
320
|
-
bytes32 public constant _PERMIT_SINGLE_TYPEHASH = keccak256(
|
|
321
|
-
"PermitSingle(PermitDetails details,address spender,uint256 sigDeadline)PermitDetails(address token,uint160 amount,uint48 expiration,uint48 nonce)"
|
|
322
|
-
);
|
|
323
|
-
|
|
324
|
-
bytes32 public constant _PERMIT_BATCH_TYPEHASH = keccak256(
|
|
325
|
-
"PermitBatch(PermitDetails[] details,address spender,uint256 sigDeadline)PermitDetails(address token,uint160 amount,uint48 expiration,uint48 nonce)"
|
|
326
|
-
);
|
|
327
|
-
|
|
328
|
-
bytes32 public constant _TOKEN_PERMISSIONS_TYPEHASH = keccak256("TokenPermissions(address token,uint256 amount)");
|
|
329
|
-
|
|
330
|
-
bytes32 public constant _PERMIT_TRANSFER_FROM_TYPEHASH = keccak256(
|
|
331
|
-
"PermitTransferFrom(TokenPermissions permitted,address spender,uint256 nonce,uint256 deadline)TokenPermissions(address token,uint256 amount)"
|
|
332
|
-
);
|
|
333
|
-
|
|
334
|
-
bytes32 public constant _PERMIT_BATCH_TRANSFER_FROM_TYPEHASH = keccak256(
|
|
335
|
-
"PermitBatchTransferFrom(TokenPermissions[] permitted,address spender,uint256 nonce,uint256 deadline)TokenPermissions(address token,uint256 amount)"
|
|
336
|
-
);
|
|
337
|
-
|
|
338
|
-
function getPermitSignatureRaw(
|
|
339
|
-
IAllowanceTransfer.PermitSingle memory permit,
|
|
340
|
-
uint256 privateKey,
|
|
341
|
-
bytes32 domainSeparator
|
|
342
|
-
)
|
|
343
|
-
internal
|
|
344
|
-
pure
|
|
345
|
-
returns (uint8 v, bytes32 r, bytes32 s)
|
|
346
|
-
{
|
|
347
|
-
bytes32 permitHash = keccak256(abi.encode(_PERMIT_DETAILS_TYPEHASH, permit.details));
|
|
348
|
-
|
|
349
|
-
bytes32 msgHash = keccak256(
|
|
350
|
-
abi.encodePacked(
|
|
351
|
-
"\x19\x01",
|
|
352
|
-
domainSeparator,
|
|
353
|
-
keccak256(abi.encode(_PERMIT_SINGLE_TYPEHASH, permitHash, permit.spender, permit.sigDeadline))
|
|
354
|
-
)
|
|
355
|
-
);
|
|
356
|
-
|
|
357
|
-
(v, r, s) = vm.sign(privateKey, msgHash);
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
function getPermitSignature(
|
|
361
|
-
IAllowanceTransfer.PermitSingle memory permit,
|
|
362
|
-
uint256 privateKey,
|
|
363
|
-
bytes32 domainSeparator
|
|
364
|
-
)
|
|
365
|
-
internal
|
|
366
|
-
pure
|
|
367
|
-
returns (bytes memory sig)
|
|
368
|
-
{
|
|
369
|
-
(uint8 v, bytes32 r, bytes32 s) = getPermitSignatureRaw(permit, privateKey, domainSeparator);
|
|
370
|
-
return bytes.concat(r, s, bytes1(v));
|
|
371
|
-
}
|
|
372
|
-
}
|