@bananapus/core-v6 0.0.15 → 0.0.16

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.
Files changed (212) hide show
  1. package/ADMINISTRATION.md +4 -0
  2. package/README.md +2 -2
  3. package/SKILLS.md +2 -0
  4. package/STYLE_GUIDE.md +16 -2
  5. package/package.json +2 -2
  6. package/script/Deploy.s.sol +22 -13
  7. package/script/DeployPeriphery.s.sol +70 -52
  8. package/script/helpers/CoreDeploymentLib.sol +83 -35
  9. package/src/JBChainlinkV3PriceFeed.sol +1 -0
  10. package/src/JBController.sol +18 -3
  11. package/src/JBERC20.sol +12 -3
  12. package/src/JBFundAccessLimits.sol +12 -2
  13. package/src/JBMultiTerminal.sol +3 -1
  14. package/src/JBPermissions.sol +1 -0
  15. package/src/JBProjects.sol +1 -1
  16. package/src/JBRulesets.sol +11 -0
  17. package/src/JBSplits.sol +5 -0
  18. package/src/JBTerminalStore.sol +3 -0
  19. package/src/JBTokens.sol +40 -4
  20. package/src/interfaces/IJBController.sol +6 -0
  21. package/src/interfaces/IJBPermitTerminal.sol +1 -0
  22. package/src/interfaces/IJBToken.sol +5 -0
  23. package/src/interfaces/IJBTokens.sol +13 -0
  24. package/src/libraries/JBMetadataResolver.sol +7 -3
  25. package/src/libraries/JBRulesetMetadataResolver.sol +21 -21
  26. package/src/structs/JBAccountingContext.sol +1 -0
  27. package/src/structs/JBAfterCashOutRecordedContext.sol +1 -0
  28. package/src/structs/JBAfterPayRecordedContext.sol +1 -0
  29. package/src/structs/JBBeforeCashOutRecordedContext.sol +1 -0
  30. package/src/structs/JBBeforePayRecordedContext.sol +1 -0
  31. package/src/structs/JBCashOutHookSpecification.sol +1 -0
  32. package/src/structs/JBCurrencyAmount.sol +1 -0
  33. package/src/structs/JBFee.sol +1 -0
  34. package/src/structs/JBFundAccessLimitGroup.sol +1 -0
  35. package/src/structs/JBPayHookSpecification.sol +1 -0
  36. package/src/structs/JBPermissionsData.sol +1 -0
  37. package/src/structs/JBRuleset.sol +1 -0
  38. package/src/structs/JBRulesetConfig.sol +1 -0
  39. package/src/structs/JBRulesetMetadata.sol +1 -0
  40. package/src/structs/JBRulesetWeightCache.sol +1 -0
  41. package/src/structs/JBRulesetWithMetadata.sol +1 -0
  42. package/src/structs/JBSingleAllowance.sol +1 -0
  43. package/src/structs/JBSplit.sol +1 -0
  44. package/src/structs/JBSplitGroup.sol +1 -0
  45. package/src/structs/JBSplitHookContext.sol +1 -0
  46. package/src/structs/JBTerminalConfig.sol +1 -0
  47. package/src/structs/JBTokenAmount.sol +1 -0
  48. package/test/ComprehensiveInvariant.t.sol +15 -2
  49. package/test/CoreExploitTests.t.sol +34 -1
  50. package/test/EconomicSimulation.t.sol +10 -2
  51. package/test/EntryPointPermutations.t.sol +17 -3
  52. package/test/FlashLoanAttacks.t.sol +12 -1
  53. package/test/PermissionEscalation.t.sol +53 -10
  54. package/test/RulesetTransitions.t.sol +15 -1
  55. package/test/SplitLoopTests.t.sol +25 -2
  56. package/test/TestAccessToFunds.sol +17 -2
  57. package/test/TestCashOut.sol +15 -1
  58. package/test/TestCashOutCountFor.sol +1 -1
  59. package/test/TestCashOutHooks.sol +47 -25
  60. package/test/TestCashOutTimingEdge.sol +13 -1
  61. package/test/TestDurationUnderflow.sol +13 -1
  62. package/test/TestFeeProcessingFailure.sol +16 -1
  63. package/test/TestFees.sol +14 -1
  64. package/test/TestInterfaceSupport.sol +20 -1
  65. package/test/TestJBERC20Inheritance.sol +11 -1
  66. package/test/TestLaunchProject.sol +13 -1
  67. package/test/TestMetaTx.sol +15 -1
  68. package/test/TestMetadataParserLib.sol +37 -4
  69. package/test/TestMigrationHeldFees.sol +16 -1
  70. package/test/TestMintTokensOf.sol +14 -1
  71. package/test/TestMultiTokenSurplus.sol +14 -1
  72. package/test/TestMultipleAccessLimits.sol +23 -1
  73. package/test/TestPayBurnRedeemFlow.sol +16 -1
  74. package/test/TestPayHooks.sol +33 -14
  75. package/test/TestPermissions.sol +20 -1
  76. package/test/TestPermissionsEdge.sol +5 -1
  77. package/test/TestPermit2Terminal.sol +36 -3
  78. package/test/TestRulesetQueueing.sol +24 -1
  79. package/test/TestRulesetQueuingStress.sol +20 -1
  80. package/test/TestRulesetWeightCaching.sol +5 -1
  81. package/test/TestSplits.sol +23 -1
  82. package/test/TestTerminalMigration.sol +11 -1
  83. package/test/TestTokenFlow.sol +18 -1
  84. package/test/TestWeightCacheStaleAfterRejection.sol +15 -1
  85. package/test/WeirdTokenTests.t.sol +17 -1
  86. package/test/fork/TestChainlinkPriceFeedFork.sol +6 -1
  87. package/test/formal/BondingCurveProperties.t.sol +8 -1
  88. package/test/formal/FeeProperties.t.sol +7 -1
  89. package/test/helpers/JBTest.sol +1 -1
  90. package/test/helpers/TestBaseWorkflow.sol +84 -1
  91. package/test/invariants/Phase3DeepInvariant.t.sol +13 -2
  92. package/test/invariants/RulesetsInvariant.t.sol +12 -2
  93. package/test/invariants/TerminalStoreInvariant.t.sol +11 -2
  94. package/test/invariants/TokensInvariant.t.sol +13 -2
  95. package/test/invariants/handlers/ComprehensiveHandler.sol +19 -1
  96. package/test/invariants/handlers/EconomicHandler.sol +31 -1
  97. package/test/invariants/handlers/Phase3Handler.sol +31 -1
  98. package/test/invariants/handlers/RulesetsHandler.sol +5 -1
  99. package/test/invariants/handlers/TerminalStoreHandler.sol +6 -1
  100. package/test/invariants/handlers/TokensHandler.sol +1 -1
  101. package/test/mock/MockERC20.sol +0 -2
  102. package/test/mock/MockMaliciousBeneficiary.sol +2 -1
  103. package/test/mock/MockMaliciousSplitHook.sol +2 -1
  104. package/test/mock/MockPriceFeed.sol +1 -1
  105. package/test/units/static/JBChainlinkV3PriceFeed/TestPriceFeed.sol +0 -1
  106. package/test/units/static/JBController/JBControllerSetup.sol +10 -1
  107. package/test/units/static/JBController/TestBurnTokensOf.sol +8 -1
  108. package/test/units/static/JBController/TestClaimTokensFor.sol +4 -1
  109. package/test/units/static/JBController/TestDeployErc20For.sol +7 -1
  110. package/test/units/static/JBController/TestLaunchProjectFor.sol +21 -1
  111. package/test/units/static/JBController/TestLaunchRulesetsFor.sol +21 -1
  112. package/test/units/static/JBController/TestMigrateController.sol +10 -1
  113. package/test/units/static/JBController/TestMintTokensOfUnits.sol +10 -1
  114. package/test/units/static/JBController/TestPayReservedTokenToTerminal.sol +4 -1
  115. package/test/units/static/JBController/TestReceiveMigrationFrom.sol +5 -1
  116. package/test/units/static/JBController/TestRulesetViews.sol +7 -1
  117. package/test/units/static/JBController/TestSendReservedTokensToSplitsOf.sol +21 -1
  118. package/test/units/static/JBController/TestSetSplitGroupsOf.sol +6 -1
  119. package/test/units/static/JBController/TestSetTokenFor.sol +13 -1
  120. package/test/units/static/JBController/TestSetUriOf.sol +5 -1
  121. package/test/units/static/JBController/TestTransferCreditsFrom.sol +11 -1
  122. package/test/units/static/JBDeadline/TestDeadlineFuzz.sol +12 -1
  123. package/test/units/static/JBDirectory/JBDirectorySetup.sol +4 -1
  124. package/test/units/static/JBDirectory/TestPrimaryTerminalOf.sol +5 -1
  125. package/test/units/static/JBDirectory/TestSetControllerOf.sol +11 -1
  126. package/test/units/static/JBDirectory/TestSetControllerOfMigrationOrder.sol +7 -1
  127. package/test/units/static/JBDirectory/TestSetPrimaryTerminalOf.sol +11 -1
  128. package/test/units/static/JBDirectory/TestSetTerminalsOf.sol +10 -1
  129. package/test/units/static/JBERC20/JBERC20Setup.sol +2 -1
  130. package/test/units/static/JBERC20/SigUtils.sol +2 -0
  131. package/test/units/static/JBERC20/TestInitialize.sol +1 -1
  132. package/test/units/static/JBERC20/TestName.sol +1 -1
  133. package/test/units/static/JBERC20/TestNonces.sol +3 -1
  134. package/test/units/static/JBERC20/TestSymbol.sol +1 -1
  135. package/test/units/static/JBFeelessAdresses/JBFeelessSetup.sol +2 -1
  136. package/test/units/static/JBFeelessAdresses/TestInterfaces.sol +2 -1
  137. package/test/units/static/JBFeelessAdresses/TestSetFeelessAddress.sol +1 -1
  138. package/test/units/static/JBFees/TestFeesFuzz.sol +1 -1
  139. package/test/units/static/JBFixedPointNumber/TestAdjustDecimals.sol +0 -1
  140. package/test/units/static/JBFixedPointNumber/TestAdjustDecimalsFuzz.sol +0 -1
  141. package/test/units/static/JBFundAccessLimits/JBFundAccessSetup.sol +3 -1
  142. package/test/units/static/JBFundAccessLimits/TestFundAccessLimitsEdge.sol +4 -1
  143. package/test/units/static/JBFundAccessLimits/TestPayoutLimitOf.sol +4 -1
  144. package/test/units/static/JBFundAccessLimits/TestPayoutLimitsOf.sol +8 -1
  145. package/test/units/static/JBFundAccessLimits/TestSetFundAccessLimitsFor.sol +8 -1
  146. package/test/units/static/JBFundAccessLimits/TestSurplusAllowanceOf.sol +4 -1
  147. package/test/units/static/JBFundAccessLimits/TestSurplusAllowancesOf.sol +7 -1
  148. package/test/units/static/JBMetadataResolver/TestGetDataFor.sol +1 -1
  149. package/test/units/static/JBMetadataResolver/TestMetadataResolverEdgeCases.sol +2 -1
  150. package/test/units/static/JBMetadataResolver/TestMetadataResolverFuzz.sol +2 -1
  151. package/test/units/static/JBMultiTerminal/JBMultiTerminalSetup.sol +12 -1
  152. package/test/units/static/JBMultiTerminal/TestAccountingContextsOf.sol +9 -1
  153. package/test/units/static/JBMultiTerminal/TestAddAccountingContextsFor.sol +18 -2
  154. package/test/units/static/JBMultiTerminal/TestAddToBalanceOf.sol +42 -7
  155. package/test/units/static/JBMultiTerminal/TestCashOutTokensOf.sol +30 -6
  156. package/test/units/static/JBMultiTerminal/TestExecutePayout.sol +18 -2
  157. package/test/units/static/JBMultiTerminal/TestExecuteProcessFee.sol +13 -3
  158. package/test/units/static/JBMultiTerminal/TestMigrateBalanceOf.sol +21 -4
  159. package/test/units/static/JBMultiTerminal/TestPay.sol +32 -6
  160. package/test/units/static/JBMultiTerminal/TestProcessHeldFeesOf.sol +0 -1
  161. package/test/units/static/JBMultiTerminal/TestSendPayoutsOf.sol +15 -1
  162. package/test/units/static/JBMultiTerminal/TestUseAllowanceOf.sol +17 -1
  163. package/test/units/static/JBPermissions/JBPermissionsSetup.sol +2 -1
  164. package/test/units/static/JBPermissions/TestHasPermission.sol +1 -1
  165. package/test/units/static/JBPermissions/TestHasPermissions.sol +1 -1
  166. package/test/units/static/JBPermissions/TestSetPermissionsFor.sol +3 -1
  167. package/test/units/static/JBPrices/JBPricesSetup.sol +6 -1
  168. package/test/units/static/JBPrices/TestAddPriceFeedFor.sol +6 -1
  169. package/test/units/static/JBPrices/TestPricePerUnitOf.sol +4 -1
  170. package/test/units/static/JBPrices/TestPrices.sol +4 -1
  171. package/test/units/static/JBProjects/JBProjectsSetup.sol +2 -1
  172. package/test/units/static/JBProjects/TestCreateFor.sol +3 -1
  173. package/test/units/static/JBProjects/TestInitialProject.sol +2 -1
  174. package/test/units/static/JBProjects/TestInterfaces.sol +0 -1
  175. package/test/units/static/JBProjects/TestSetResolver.sol +2 -1
  176. package/test/units/static/JBProjects/TestTokenUri.sol +3 -1
  177. package/test/units/static/JBRulesetMetadataResolver/TestSetCashOutTaxRateTo.sol +9 -1
  178. package/test/units/static/JBRulesets/JBRulesetsSetup.sol +3 -1
  179. package/test/units/static/JBRulesets/TestCurrentApprovalStatusForLatestRulesetOf.sol +9 -1
  180. package/test/units/static/JBRulesets/TestCurrentOf.sol +10 -1
  181. package/test/units/static/JBRulesets/TestGetRulesetOf.sol +7 -1
  182. package/test/units/static/JBRulesets/TestLatestQueuedRulesetOf.sol +9 -1
  183. package/test/units/static/JBRulesets/TestRulesets.sol +12 -1
  184. package/test/units/static/JBRulesets/TestRulesetsOf.sol +1 -1
  185. package/test/units/static/JBRulesets/TestUpcomingRulesetOf.sol +10 -1
  186. package/test/units/static/JBRulesets/TestUpdateRulesetWeightCache.sol +6 -1
  187. package/test/units/static/JBSplits/JBSplitsSetup.sol +3 -1
  188. package/test/units/static/JBSplits/TestSelfManagedSplitGroups.sol +8 -1
  189. package/test/units/static/JBSplits/TestSetSplitGroupsOf.sol +8 -1
  190. package/test/units/static/JBSplits/TestSplitsLockedEdge.sol +6 -1
  191. package/test/units/static/JBSplits/TestSplitsOf.sol +1 -1
  192. package/test/units/static/JBSplits/TestSplitsPacking.sol +5 -2
  193. package/test/units/static/JBSurplus/TestSurplusFuzz.sol +3 -1
  194. package/test/units/static/JBTerminalStore/JBTerminalStoreSetup.sol +5 -1
  195. package/test/units/static/JBTerminalStore/TestCurrentReclaimableSurplusOf.sol +14 -1
  196. package/test/units/static/JBTerminalStore/TestCurrentSurplusOf.sol +14 -1
  197. package/test/units/static/JBTerminalStore/TestCurrentTotalSurplusOf.sol +3 -1
  198. package/test/units/static/JBTerminalStore/TestRecordCashOutsFor.sol +20 -1
  199. package/test/units/static/JBTerminalStore/TestRecordPaymentFrom.sol +15 -1
  200. package/test/units/static/JBTerminalStore/TestRecordPayoutFor.sol +13 -1
  201. package/test/units/static/JBTerminalStore/TestRecordTerminalMigration.sol +8 -1
  202. package/test/units/static/JBTerminalStore/TestRecordUsedAllowanceOf.sol +16 -1
  203. package/test/units/static/JBTerminalStore/TestUint224Overflow.sol +15 -1
  204. package/test/units/static/JBTokens/JBTokensSetup.sol +5 -1
  205. package/test/units/static/JBTokens/TestBurnFrom.sol +4 -1
  206. package/test/units/static/JBTokens/TestClaimTokensFor.sol +4 -1
  207. package/test/units/static/JBTokens/TestDeployERC20ForUnits.sol +4 -1
  208. package/test/units/static/JBTokens/TestMintFor.sol +4 -1
  209. package/test/units/static/JBTokens/TestSetTokenFor.sol +4 -1
  210. package/test/units/static/JBTokens/TestTotalBalanceOf.sol +1 -1
  211. package/test/units/static/JBTokens/TestTotalSupplyOf.sol +1 -1
  212. package/test/units/static/JBTokens/TestTransferCreditsFrom.sol +3 -1
@@ -1,7 +1,7 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  pragma solidity 0.8.26;
3
3
 
4
- import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
5
  import {JBERC20Setup} from "./JBERC20Setup.sol";
6
6
 
7
7
  contract TestName_Local is JBERC20Setup {
@@ -1,7 +1,7 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  pragma solidity 0.8.26;
3
3
 
4
- import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
4
+ import {IERC20Permit} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol";
5
5
  import {JBERC20Setup} from "./JBERC20Setup.sol";
6
6
  import {SigUtils} from "./SigUtils.sol";
7
7
 
@@ -9,7 +9,9 @@ contract TestNonces_Local is JBERC20Setup {
9
9
  IERC20Permit _token;
10
10
  SigUtils sigUtils;
11
11
 
12
+ // forge-lint: disable-next-line(screaming-snake-case-immutable)
12
13
  bytes32 private immutable _hashedName = keccak256(bytes("JBToken"));
14
+ // forge-lint: disable-next-line(screaming-snake-case-immutable)
13
15
  bytes32 private immutable _hashedVersion = keccak256(bytes("1"));
14
16
 
15
17
  bytes32 _domain;
@@ -1,7 +1,7 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  pragma solidity 0.8.26;
3
3
 
4
- import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
5
  import {JBERC20Setup} from "./JBERC20Setup.sol";
6
6
 
7
7
  contract TestSymbol_Local is JBERC20Setup {
@@ -1,7 +1,8 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  pragma solidity 0.8.26;
3
3
 
4
- import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
4
+ import {JBFeelessAddresses} from "../../../../src/JBFeelessAddresses.sol";
5
+ import {IJBFeelessAddresses} from "../../../../src/interfaces/IJBFeelessAddresses.sol";
5
6
  import {JBTest} from "../../../helpers/JBTest.sol";
6
7
 
7
8
  /*
@@ -1,7 +1,8 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  pragma solidity 0.8.26;
3
3
 
4
- import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
4
+ import {IJBFeelessAddresses} from "../../../../src/interfaces/IJBFeelessAddresses.sol";
5
+ import {IERC165} from "@openzeppelin/contracts/utils/introspection/ERC165.sol";
5
6
  import {JBFeelessSetup} from "./JBFeelessSetup.sol";
6
7
 
7
8
  contract TestSupportsInterface_Local is JBFeelessSetup {
@@ -1,7 +1,7 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  pragma solidity 0.8.26;
3
3
 
4
- import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
4
+ import {IJBFeelessAddresses} from "../../../../src/interfaces/IJBFeelessAddresses.sol";
5
5
  import {JBFeelessSetup} from "./JBFeelessSetup.sol";
6
6
 
7
7
  contract TestSetFeelessAddress_Local is JBFeelessSetup {
@@ -1,7 +1,7 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  pragma solidity 0.8.26;
3
3
 
4
- import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
4
+ import {JBConstants} from "../../../../src/libraries/JBConstants.sol";
5
5
  import {JBTest} from "../../../helpers/JBTest.sol";
6
6
  import {JBFees} from "../../../../src/libraries/JBFees.sol";
7
7
 
@@ -1,7 +1,6 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  pragma solidity 0.8.26;
3
3
 
4
- import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
5
4
  import {JBTest} from "../../../helpers/JBTest.sol";
6
5
  import {JBFixedPointNumber} from "../../../../src/libraries/JBFixedPointNumber.sol";
7
6
 
@@ -1,7 +1,6 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  pragma solidity 0.8.26;
3
3
 
4
- import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
5
4
  import {JBTest} from "../../../helpers/JBTest.sol";
6
5
  import {JBFixedPointNumber} from "../../../../src/libraries/JBFixedPointNumber.sol";
7
6
 
@@ -1,7 +1,9 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  pragma solidity 0.8.26;
3
3
 
4
- import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
4
+ import {JBFundAccessLimits} from "../../../../src/JBFundAccessLimits.sol";
5
+ import {IJBDirectory} from "../../../../src/interfaces/IJBDirectory.sol";
6
+ import {IJBFundAccessLimits} from "../../../../src/interfaces/IJBFundAccessLimits.sol";
5
7
  import {JBTest} from "../../../helpers/JBTest.sol";
6
8
 
7
9
  /*
@@ -1,7 +1,10 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  pragma solidity 0.8.26;
3
3
 
4
- import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
4
+ import {JBFundAccessLimits} from "../../../../src/JBFundAccessLimits.sol";
5
+ import {IJBDirectory} from "../../../../src/interfaces/IJBDirectory.sol";
6
+ import {JBCurrencyAmount} from "../../../../src/structs/JBCurrencyAmount.sol";
7
+ import {JBFundAccessLimitGroup} from "../../../../src/structs/JBFundAccessLimitGroup.sol";
5
8
  import {JBTest} from "../../../helpers/JBTest.sol";
6
9
 
7
10
  /// @notice Edge case tests for JBFundAccessLimits append behavior and packing.
@@ -1,7 +1,10 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  pragma solidity 0.8.26;
3
3
 
4
- import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
4
+ import {IJBDirectory} from "../../../../src/interfaces/IJBDirectory.sol";
5
+ import {JBConstants} from "../../../../src/libraries/JBConstants.sol";
6
+ import {JBCurrencyAmount} from "../../../../src/structs/JBCurrencyAmount.sol";
7
+ import {JBFundAccessLimitGroup} from "../../../../src/structs/JBFundAccessLimitGroup.sol";
5
8
  import {JBFundAccessSetup} from "./JBFundAccessSetup.sol";
6
9
 
7
10
  contract TestPayoutLimitOf_Local is JBFundAccessSetup {
@@ -1,7 +1,10 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  pragma solidity 0.8.26;
3
3
 
4
- import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
4
+ import {IJBDirectory} from "../../../../src/interfaces/IJBDirectory.sol";
5
+ import {JBConstants} from "../../../../src/libraries/JBConstants.sol";
6
+ import {JBCurrencyAmount} from "../../../../src/structs/JBCurrencyAmount.sol";
7
+ import {JBFundAccessLimitGroup} from "../../../../src/structs/JBFundAccessLimitGroup.sol";
5
8
  import {JBFundAccessSetup} from "./JBFundAccessSetup.sol";
6
9
 
7
10
  contract TestPayoutLimitsOf_Local is JBFundAccessSetup {
@@ -28,6 +31,7 @@ contract TestPayoutLimitsOf_Local is JBFundAccessSetup {
28
31
  JBCurrencyAmount({amount: _payoutLimit, currency: uint32(uint160(JBConstants.NATIVE_TOKEN))});
29
32
 
30
33
  // Specify a second payout limit.
34
+ // forge-lint: disable-next-line(unsafe-typecast)
31
35
  _payoutLimits[1] = JBCurrencyAmount({amount: _payoutLimit2, currency: uint32(uint160(_someToken))});
32
36
 
33
37
  // Specify a surplus allowance.
@@ -66,6 +70,7 @@ contract TestPayoutLimitsOf_Local is JBFundAccessSetup {
66
70
 
67
71
  assertEq(payoutLimits[0].currency, uint32(uint160(JBConstants.NATIVE_TOKEN)));
68
72
  assertEq(payoutLimits[0].amount, _payoutLimit);
73
+ // forge-lint: disable-next-line(unsafe-typecast)
69
74
  assertEq(payoutLimits[1].currency, uint32(uint160(_someToken)));
70
75
  assertEq(payoutLimits[1].amount, _payoutLimit2);
71
76
  }
@@ -77,6 +82,7 @@ contract TestPayoutLimitsOf_Local is JBFundAccessSetup {
77
82
 
78
83
  assertEq(payoutLimits[0].currency, uint32(uint160(JBConstants.NATIVE_TOKEN)));
79
84
  assertEq(payoutLimits[0].amount, _payoutLimit);
85
+ // forge-lint: disable-next-line(unsafe-typecast)
80
86
  assertEq(payoutLimits[1].currency, uint32(uint160(_someToken)));
81
87
  assertEq(payoutLimits[1].amount, _payoutLimit2);
82
88
  }
@@ -88,6 +94,7 @@ contract TestPayoutLimitsOf_Local is JBFundAccessSetup {
88
94
 
89
95
  assertEq(payoutLimits[0].currency, uint32(uint160(JBConstants.NATIVE_TOKEN)));
90
96
  assertEq(payoutLimits[0].amount, _payoutLimit);
97
+ // forge-lint: disable-next-line(unsafe-typecast)
91
98
  assertEq(payoutLimits[1].currency, uint32(uint160(_someToken)));
92
99
  assertEq(payoutLimits[1].amount, _payoutLimit2);
93
100
  }
@@ -1,7 +1,13 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  pragma solidity 0.8.26;
3
3
 
4
- import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
4
+ import {JBFundAccessLimits} from "../../../../src/JBFundAccessLimits.sol";
5
+ import {JBControlled} from "../../../../src/abstract/JBControlled.sol";
6
+ import {IJBDirectory} from "../../../../src/interfaces/IJBDirectory.sol";
7
+ import {IJBFundAccessLimits} from "../../../../src/interfaces/IJBFundAccessLimits.sol";
8
+ import {JBConstants} from "../../../../src/libraries/JBConstants.sol";
9
+ import {JBCurrencyAmount} from "../../../../src/structs/JBCurrencyAmount.sol";
10
+ import {JBFundAccessLimitGroup} from "../../../../src/structs/JBFundAccessLimitGroup.sol";
5
11
  import {JBFundAccessSetup} from "./JBFundAccessSetup.sol";
6
12
 
7
13
  contract TestSetFundAccessLimitsFor_Local is JBFundAccessSetup {
@@ -113,6 +119,7 @@ contract TestSetFundAccessLimitsFor_Local is JBFundAccessSetup {
113
119
  JBCurrencyAmount({amount: _validLimit, currency: uint32(uint160(JBConstants.NATIVE_TOKEN))});
114
120
 
115
121
  // Specify a second payout limit.
122
+ // forge-lint: disable-next-line(unsafe-typecast)
116
123
  _payoutLimits[1] = JBCurrencyAmount({amount: _validLimit, currency: uint32(uint160(_someToken))});
117
124
 
118
125
  // Specify a surplus allowance.
@@ -1,7 +1,10 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  pragma solidity 0.8.26;
3
3
 
4
- import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
4
+ import {IJBDirectory} from "../../../../src/interfaces/IJBDirectory.sol";
5
+ import {JBConstants} from "../../../../src/libraries/JBConstants.sol";
6
+ import {JBCurrencyAmount} from "../../../../src/structs/JBCurrencyAmount.sol";
7
+ import {JBFundAccessLimitGroup} from "../../../../src/structs/JBFundAccessLimitGroup.sol";
5
8
  import {JBFundAccessSetup} from "./JBFundAccessSetup.sol";
6
9
 
7
10
  contract TestSurplusAllowanceOf_Local is JBFundAccessSetup {
@@ -1,7 +1,10 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  pragma solidity 0.8.26;
3
3
 
4
- import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
4
+ import {IJBDirectory} from "../../../../src/interfaces/IJBDirectory.sol";
5
+ import {JBConstants} from "../../../../src/libraries/JBConstants.sol";
6
+ import {JBCurrencyAmount} from "../../../../src/structs/JBCurrencyAmount.sol";
7
+ import {JBFundAccessLimitGroup} from "../../../../src/structs/JBFundAccessLimitGroup.sol";
5
8
  import {JBFundAccessSetup} from "./JBFundAccessSetup.sol";
6
9
 
7
10
  contract TestSurplusAllowancesOf_Local is JBFundAccessSetup {
@@ -31,6 +34,7 @@ contract TestSurplusAllowancesOf_Local is JBFundAccessSetup {
31
34
  _surplusAllowances[0] =
32
35
  JBCurrencyAmount({amount: 1e18, currency: uint32(uint160(JBConstants.NATIVE_TOKEN))});
33
36
 
37
+ // forge-lint: disable-next-line(unsafe-typecast)
34
38
  _surplusAllowances[1] = JBCurrencyAmount({amount: 2e18, currency: uint32(uint160(_someToken))});
35
39
 
36
40
  _fundAccessLimitGroup[0] = JBFundAccessLimitGroup({
@@ -65,11 +69,13 @@ contract TestSurplusAllowancesOf_Local is JBFundAccessSetup {
65
69
 
66
70
  assertEq(surplusLimits[0].currency, uint32(uint160(JBConstants.NATIVE_TOKEN)));
67
71
  assertEq(surplusLimits[0].amount, 1e18);
72
+ // forge-lint: disable-next-line(unsafe-typecast)
68
73
  assertEq(surplusLimits[1].currency, uint32(uint160(_someToken)));
69
74
  assertEq(surplusLimits[1].amount, 2e18);
70
75
 
71
76
  assertEq(surplusLimits2[0].currency, uint32(uint160(JBConstants.NATIVE_TOKEN)));
72
77
  assertEq(surplusLimits2[0].amount, 1e18);
78
+ // forge-lint: disable-next-line(unsafe-typecast)
73
79
  assertEq(surplusLimits2[1].currency, uint32(uint160(_someToken)));
74
80
  assertEq(surplusLimits2[1].amount, 2e18);
75
81
  }
@@ -1,7 +1,6 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  pragma solidity 0.8.26;
3
3
 
4
- import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
5
4
  import {JBTest} from "../../../helpers/JBTest.sol";
6
5
  import {JBMetadataResolver} from "../../../../src/libraries/JBMetadataResolver.sol";
7
6
 
@@ -24,6 +23,7 @@ contract TestGetDataFor_Local is JBTest {
24
23
  assertEq("", _data);
25
24
  }
26
25
 
26
+ // forge-lint: disable-next-line(mixed-case-function)
27
27
  modifier whenMetadataLengthGTMIN_METADATA_LENGTH() {
28
28
  _;
29
29
  }
@@ -1,7 +1,6 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  pragma solidity 0.8.26;
3
3
 
4
- import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
5
4
  import {JBTest} from "../../../helpers/JBTest.sol";
6
5
  import {JBMetadataResolver} from "../../../../src/libraries/JBMetadataResolver.sol";
7
6
 
@@ -197,6 +196,7 @@ contract TestMetadataResolverEdgeCases is JBTest {
197
196
  // 5 entries of 42 words (1344 bytes) + 1 entry of 43 words (1376 bytes)
198
197
  for (uint256 i; i < 5; i++) {
199
198
  datas[i] = new bytes(1344);
199
+ // forge-lint: disable-next-line(unsafe-typecast)
200
200
  datas[i][0] = bytes1(uint8(i + 1));
201
201
  }
202
202
  datas[5] = new bytes(1376);
@@ -228,6 +228,7 @@ contract TestMetadataResolverEdgeCases is JBTest {
228
228
  bytes[] memory datas = new bytes[](6);
229
229
  for (uint256 i; i < 6; i++) {
230
230
  datas[i] = new bytes(1344); // 42 words each
231
+ // forge-lint: disable-next-line(unsafe-typecast)
231
232
  datas[i][0] = bytes1(uint8(i + 1));
232
233
  }
233
234
 
@@ -1,7 +1,6 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  pragma solidity 0.8.26;
3
3
 
4
- import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
5
4
  import {JBTest} from "../../../helpers/JBTest.sol";
6
5
  import {JBMetadataResolver} from "../../../../src/libraries/JBMetadataResolver.sol";
7
6
 
@@ -182,7 +181,9 @@ contract TestMetadataResolverFuzz_Local is JBTest {
182
181
  /// @dev Only tests addresses that differ in the first 4 bytes to avoid XOR collision.
183
182
  function testFuzz_getId_differentTargets(uint256 seed1, uint256 seed2) external view {
184
183
  vm.assume(seed1 != seed2);
184
+ // forge-lint: disable-next-line(unsafe-typecast)
185
185
  address target1 = address(uint160(seed1));
186
+ // forge-lint: disable-next-line(unsafe-typecast)
186
187
  address target2 = address(uint160(seed2));
187
188
  vm.assume(target1 != target2);
188
189
 
@@ -1,7 +1,18 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  pragma solidity 0.8.26;
3
3
 
4
- import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
4
+ import {MetadataResolverHelper} from "../../../helpers/MetadataResolverHelper.sol";
5
+ import {JBMultiTerminal} from "../../../../src/JBMultiTerminal.sol";
6
+ import {IJBDirectory} from "../../../../src/interfaces/IJBDirectory.sol";
7
+ import {IJBFeelessAddresses} from "../../../../src/interfaces/IJBFeelessAddresses.sol";
8
+ import {IJBMultiTerminal} from "../../../../src/interfaces/IJBMultiTerminal.sol";
9
+ import {IJBPermissions} from "../../../../src/interfaces/IJBPermissions.sol";
10
+ import {IJBProjects} from "../../../../src/interfaces/IJBProjects.sol";
11
+ import {IJBRulesets} from "../../../../src/interfaces/IJBRulesets.sol";
12
+ import {IJBSplits} from "../../../../src/interfaces/IJBSplits.sol";
13
+ import {IJBTerminalStore} from "../../../../src/interfaces/IJBTerminalStore.sol";
14
+ import {IJBTokens} from "../../../../src/interfaces/IJBTokens.sol";
15
+ import {IPermit2} from "@uniswap/permit2/src/interfaces/IPermit2.sol";
5
16
  import {JBTest} from "../../../helpers/JBTest.sol";
6
17
 
7
18
  /*
@@ -1,12 +1,19 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  pragma solidity 0.8.26;
3
3
 
4
- import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
4
+ import {IJBDirectory} from "../../../../src/interfaces/IJBDirectory.sol";
5
+ import {IJBRulesetApprovalHook} from "../../../../src/interfaces/IJBRulesetApprovalHook.sol";
6
+ import {IJBRulesets} from "../../../../src/interfaces/IJBRulesets.sol";
7
+ import {JBAccountingContext} from "../../../../src/structs/JBAccountingContext.sol";
8
+ import {JBRuleset} from "../../../../src/structs/JBRuleset.sol";
9
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
10
+ import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
5
11
  import {JBMultiTerminalSetup} from "./JBMultiTerminalSetup.sol";
6
12
 
7
13
  contract TestAccountingContextsOf_Local is JBMultiTerminalSetup {
8
14
  uint256 _projectId = 1;
9
15
  address _usdc = makeAddr("USDC");
16
+ // forge-lint: disable-next-line(unsafe-typecast)
10
17
  uint256 _usdcCurrency = uint32(uint160(_usdc));
11
18
 
12
19
  function setUp() public {
@@ -47,6 +54,7 @@ contract TestAccountingContextsOf_Local is JBMultiTerminalSetup {
47
54
 
48
55
  // call params
49
56
  JBAccountingContext[] memory _tokens = new JBAccountingContext[](1);
57
+ // forge-lint: disable-next-line(unsafe-typecast)
50
58
  _tokens[0] = JBAccountingContext({token: _usdc, decimals: 6, currency: uint32(uint160(_usdc))});
51
59
 
52
60
  _terminal.addAccountingContextsFor(_projectId, _tokens);
@@ -1,12 +1,21 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  pragma solidity 0.8.26;
3
3
 
4
- import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
4
+ import {JBMultiTerminal} from "../../../../src/JBMultiTerminal.sol";
5
+ import {IJBDirectory} from "../../../../src/interfaces/IJBDirectory.sol";
6
+ import {IJBRulesetApprovalHook} from "../../../../src/interfaces/IJBRulesetApprovalHook.sol";
7
+ import {IJBRulesets} from "../../../../src/interfaces/IJBRulesets.sol";
8
+ import {JBConstants} from "../../../../src/libraries/JBConstants.sol";
9
+ import {JBAccountingContext} from "../../../../src/structs/JBAccountingContext.sol";
10
+ import {JBRuleset} from "../../../../src/structs/JBRuleset.sol";
11
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
12
+ import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
5
13
  import {JBMultiTerminalSetup} from "./JBMultiTerminalSetup.sol";
6
14
 
7
15
  contract TestAddAccountingContextsFor_Local is JBMultiTerminalSetup {
8
16
  uint256 _projectId = 1;
9
17
  address _usdc = makeAddr("USDC");
18
+ // forge-lint: disable-next-line(unsafe-typecast)
10
19
  uint256 _usdcCurrency = uint32(uint160(_usdc));
11
20
 
12
21
  function setUp() public {
@@ -35,8 +44,10 @@ contract TestAddAccountingContextsFor_Local is JBMultiTerminalSetup {
35
44
  // it will revert ACCOUNTING_CONTEXT_ALREADY_SET
36
45
 
37
46
  // Accounting Context to set
47
+ // forge-lint: disable-next-line(unsafe-typecast)
38
48
  JBAccountingContext memory _context =
39
- JBAccountingContext({token: _usdc, decimals: 18, currency: uint32(_usdcCurrency)});
49
+ // forge-lint: disable-next-line(unsafe-typecast)
50
+ JBAccountingContext({token: _usdc, decimals: 18, currency: uint32(_usdcCurrency)});
40
51
 
41
52
  // Find the storage slot
42
53
  bytes32 contextSlot = keccak256(abi.encode(_projectId, uint256(0)));
@@ -65,6 +76,7 @@ contract TestAddAccountingContextsFor_Local is JBMultiTerminalSetup {
65
76
 
66
77
  // call params
67
78
  JBAccountingContext[] memory _tokens = new JBAccountingContext[](1);
79
+ // forge-lint: disable-next-line(unsafe-typecast)
68
80
  _tokens[0] = JBAccountingContext({token: _usdc, decimals: 6, currency: uint32(uint160(_usdc))});
69
81
 
70
82
  vm.expectRevert(
@@ -97,6 +109,7 @@ contract TestAddAccountingContextsFor_Local is JBMultiTerminalSetup {
97
109
 
98
110
  // call params
99
111
  JBAccountingContext[] memory _tokens = new JBAccountingContext[](1);
112
+ // forge-lint: disable-next-line(unsafe-typecast)
100
113
  _tokens[0] = JBAccountingContext({token: _usdc, decimals: 6, currency: uint32(uint160(_usdc))});
101
114
 
102
115
  _terminal.addAccountingContextsFor(_projectId, _tokens);
@@ -104,6 +117,7 @@ contract TestAddAccountingContextsFor_Local is JBMultiTerminalSetup {
104
117
  JBAccountingContext memory _storedContext = _terminal.accountingContextForTokenOf(_projectId, _usdc);
105
118
  assertEq(_storedContext.token, _usdc);
106
119
  assertEq(_storedContext.decimals, 6);
120
+ // forge-lint: disable-next-line(unsafe-typecast)
107
121
  assertEq(_storedContext.currency, uint32(uint160(_usdc)));
108
122
  }
109
123
 
@@ -263,6 +277,7 @@ contract TestAddAccountingContextsFor_Local is JBMultiTerminalSetup {
263
277
  _tokens[0] = JBAccountingContext({
264
278
  token: someToken,
265
279
  decimals: 17, // invalid- we will mock a return of 18 decimals
280
+ // forge-lint: disable-next-line(unsafe-typecast)
266
281
  currency: uint32(uint160(someToken))
267
282
  });
268
283
 
@@ -296,6 +311,7 @@ contract TestAddAccountingContextsFor_Local is JBMultiTerminalSetup {
296
311
 
297
312
  // call params
298
313
  JBAccountingContext[] memory _tokens = new JBAccountingContext[](1);
314
+ // forge-lint: disable-next-line(unsafe-typecast)
299
315
  _tokens[0] = JBAccountingContext({token: someToken, decimals: 18, currency: uint32(uint160(0))});
300
316
 
301
317
  // setup: return data
@@ -1,7 +1,16 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  pragma solidity 0.8.26;
3
3
 
4
- import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
4
+ import {JBMultiTerminal} from "../../../../src/JBMultiTerminal.sol";
5
+ import {IJBFeeTerminal} from "../../../../src/interfaces/IJBFeeTerminal.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 {JBFees} from "../../../../src/libraries/JBFees.sol";
10
+ import {JBAccountingContext} from "../../../../src/structs/JBAccountingContext.sol";
11
+ import {JBFee} from "../../../../src/structs/JBFee.sol";
12
+ import {JBSingleAllowance} from "../../../../src/structs/JBSingleAllowance.sol";
13
+ import {IAllowanceTransfer, IPermit2} from "@uniswap/permit2/src/interfaces/IPermit2.sol";
5
14
  import {JBMultiTerminalSetup} from "./JBMultiTerminalSetup.sol";
6
15
 
7
16
  contract TestAddToBalanceOf_Local is JBMultiTerminalSetup {
@@ -11,9 +20,12 @@ contract TestAddToBalanceOf_Local is JBMultiTerminalSetup {
11
20
  // global constants
12
21
  uint256 _projectId = 1;
13
22
  address _native = JBConstants.NATIVE_TOKEN;
23
+ // forge-lint: disable-next-line(unsafe-typecast)
14
24
  uint256 _nativeCurrency = uint32(uint160(_native));
15
25
  address _usdc = makeAddr("USDC");
26
+ // forge-lint: disable-next-line(unsafe-typecast)
16
27
  uint256 _usdcCurrency = uint32(uint160(_usdc));
28
+ // forge-lint: disable-next-line(mixed-case-variable)
17
29
  uint256 _terminalUSDCBalance = 1e18;
18
30
 
19
31
  // set by modifiers
@@ -25,6 +37,7 @@ contract TestAddToBalanceOf_Local is JBMultiTerminalSetup {
25
37
  bool _shouldReturnHeldFees;
26
38
 
27
39
  // Permit2 params.
40
+ // forge-lint: disable-next-line(mixed-case-variable)
28
41
  bytes32 DOMAIN_SEPARATOR;
29
42
  address from;
30
43
  uint256 fromPrivateKey = 0x12341234;
@@ -37,8 +50,10 @@ contract TestAddToBalanceOf_Local is JBMultiTerminalSetup {
37
50
 
38
51
  modifier whenNativeTokenIsAccepted() {
39
52
  // Accounting Context to set
53
+ // forge-lint: disable-next-line(unsafe-typecast)
40
54
  JBAccountingContext memory _context =
41
- JBAccountingContext({token: _native, decimals: 18, currency: uint32(_nativeCurrency)});
55
+ // forge-lint: disable-next-line(unsafe-typecast)
56
+ JBAccountingContext({token: _native, decimals: 18, currency: uint32(_nativeCurrency)});
42
57
 
43
58
  // Find the storage slot
44
59
  bytes32 contextSlot = keccak256(abi.encode(_projectId, uint256(0)));
@@ -55,8 +70,10 @@ contract TestAddToBalanceOf_Local is JBMultiTerminalSetup {
55
70
 
56
71
  modifier whenShouldReturnHeldFeesEqTrue() {
57
72
  // Accounting Context to set
73
+ // forge-lint: disable-next-line(unsafe-typecast)
58
74
  JBAccountingContext memory _context =
59
- JBAccountingContext({token: _native, decimals: 18, currency: uint32(_nativeCurrency)});
75
+ // forge-lint: disable-next-line(unsafe-typecast)
76
+ JBAccountingContext({token: _native, decimals: 18, currency: uint32(_nativeCurrency)});
60
77
 
61
78
  // Find the storage slot
62
79
  bytes32 contextSlot = keccak256(abi.encode(_projectId, uint256(0)));
@@ -222,8 +239,10 @@ contract TestAddToBalanceOf_Local is JBMultiTerminalSetup {
222
239
  // it will revert NO_MSG_VALUE_ALLOWED
223
240
 
224
241
  // Accounting Context to set
242
+ // forge-lint: disable-next-line(unsafe-typecast)
225
243
  JBAccountingContext memory _context =
226
- JBAccountingContext({token: _usdc, decimals: 18, currency: uint32(_usdcCurrency)});
244
+ // forge-lint: disable-next-line(unsafe-typecast)
245
+ JBAccountingContext({token: _usdc, decimals: 18, currency: uint32(_usdcCurrency)});
227
246
 
228
247
  // Find the storage slot
229
248
  bytes32 contextSlot = keccak256(abi.encode(_projectId, uint256(0)));
@@ -249,8 +268,10 @@ contract TestAddToBalanceOf_Local is JBMultiTerminalSetup {
249
268
 
250
269
  modifier whenPayMetadataContainsPermitData() {
251
270
  // Accounting Context to set
271
+ // forge-lint: disable-next-line(unsafe-typecast)
252
272
  JBAccountingContext memory _context =
253
- JBAccountingContext({token: _usdc, decimals: 18, currency: uint32(_usdcCurrency)});
273
+ // forge-lint: disable-next-line(unsafe-typecast)
274
+ JBAccountingContext({token: _usdc, decimals: 18, currency: uint32(_usdcCurrency)});
254
275
 
255
276
  // Find the storage slot
256
277
  bytes32 contextSlot = keccak256(abi.encode(_projectId, uint256(0)));
@@ -333,8 +354,15 @@ contract TestAddToBalanceOf_Local is JBMultiTerminalSetup {
333
354
  payAmount = 1e18;
334
355
 
335
356
  // Setup: prepare permit details for signing.
357
+ // forge-lint: disable-next-line(unsafe-typecast)
336
358
  IAllowanceTransfer.PermitDetails memory details = IAllowanceTransfer.PermitDetails({
337
- token: address(_usdc), amount: uint160(payAmount), expiration: uint48(expiration), nonce: 0
359
+ // forge-lint: disable-next-line(unsafe-typecast)
360
+ token: address(_usdc),
361
+ // forge-lint: disable-next-line(unsafe-typecast)
362
+ amount: uint160(payAmount),
363
+ // forge-lint: disable-next-line(unsafe-typecast)
364
+ expiration: uint48(expiration),
365
+ nonce: 0
338
366
  });
339
367
 
340
368
  IAllowanceTransfer.PermitSingle memory permit =
@@ -343,8 +371,15 @@ contract TestAddToBalanceOf_Local is JBMultiTerminalSetup {
343
371
  // Setup: sign permit details.
344
372
  bytes memory sig = getPermitSignature(permit, fromPrivateKey, DOMAIN_SEPARATOR);
345
373
 
374
+ // forge-lint: disable-next-line(unsafe-typecast)
346
375
  JBSingleAllowance memory permitData = JBSingleAllowance({
347
- sigDeadline: deadline, amount: uint160(1), expiration: uint48(expiration), nonce: uint48(0), signature: sig
376
+ // forge-lint: disable-next-line(unsafe-typecast)
377
+ sigDeadline: deadline,
378
+ amount: uint160(1),
379
+ // forge-lint: disable-next-line(unsafe-typecast)
380
+ expiration: uint48(expiration),
381
+ nonce: uint48(0),
382
+ signature: sig
348
383
  });
349
384
 
350
385
  // Setup: prepare data for metadata helper.
@@ -1,7 +1,26 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  pragma solidity 0.8.26;
3
3
 
4
- import /* {*} from */ "../../../helpers/TestBaseWorkflow.sol";
4
+ import {MockERC20} from "../../../mock/MockERC20.sol";
5
+ import {JBMultiTerminal} from "../../../../src/JBMultiTerminal.sol";
6
+ import {JBPermissioned} from "../../../../src/abstract/JBPermissioned.sol";
7
+ import {IJBCashOutHook} from "../../../../src/interfaces/IJBCashOutHook.sol";
8
+ import {IJBCashOutTerminal} from "../../../../src/interfaces/IJBCashOutTerminal.sol";
9
+ import {IJBController} from "../../../../src/interfaces/IJBController.sol";
10
+ import {IJBDirectory} from "../../../../src/interfaces/IJBDirectory.sol";
11
+ import {IJBFeelessAddresses} from "../../../../src/interfaces/IJBFeelessAddresses.sol";
12
+ import {IJBPermissions} from "../../../../src/interfaces/IJBPermissions.sol";
13
+ import {IJBRulesetApprovalHook} from "../../../../src/interfaces/IJBRulesetApprovalHook.sol";
14
+ import {IJBTerminalStore} from "../../../../src/interfaces/IJBTerminalStore.sol";
15
+ import {JBConstants} from "../../../../src/libraries/JBConstants.sol";
16
+ import {JBFees} from "../../../../src/libraries/JBFees.sol";
17
+ import {JBAccountingContext} from "../../../../src/structs/JBAccountingContext.sol";
18
+ import {JBAfterCashOutRecordedContext} from "../../../../src/structs/JBAfterCashOutRecordedContext.sol";
19
+ import {JBCashOutHookSpecification} from "../../../../src/structs/JBCashOutHookSpecification.sol";
20
+ import {JBRuleset} from "../../../../src/structs/JBRuleset.sol";
21
+ import {JBTokenAmount} from "../../../../src/structs/JBTokenAmount.sol";
22
+ import {JBPermissionIds} from "@bananapus/permission-ids-v6/src/JBPermissionIds.sol";
23
+ import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
5
24
  import {JBMultiTerminalSetup} from "./JBMultiTerminalSetup.sol";
6
25
 
7
26
  contract TestCashOutTokensOf_Local is JBMultiTerminalSetup {
@@ -329,8 +348,10 @@ contract TestCashOutTokensOf_Local is JBMultiTerminalSetup {
329
348
  abi.encode(true)
330
349
  );
331
350
 
332
- JBTokenAmount memory reclaimedAmount = JBTokenAmount(address(_mockToken2), 0, 0, reclaimAmount);
333
- JBTokenAmount memory forwardedAmount = JBTokenAmount(address(_mockToken2), 0, 0, _defaultAmount);
351
+ JBTokenAmount memory reclaimedAmount =
352
+ JBTokenAmount({token: address(_mockToken2), decimals: 0, currency: 0, value: reclaimAmount});
353
+ JBTokenAmount memory forwardedAmount =
354
+ JBTokenAmount({token: address(_mockToken2), decimals: 0, currency: 0, value: _defaultAmount});
334
355
 
335
356
  // needed for hook call
336
357
  JBAfterCashOutRecordedContext memory context = JBAfterCashOutRecordedContext({
@@ -433,9 +454,12 @@ contract TestCashOutTokensOf_Local is JBMultiTerminalSetup {
433
454
  uint256 hookTax = JBFees.feeAmountFrom(_defaultAmount, 25);
434
455
  uint256 passedAfterTax = _defaultAmount - hookTax;
435
456
 
436
- JBTokenAmount memory reclaimedAmount = JBTokenAmount(address(_mockToken2), 0, 0, reclaimAmount);
437
- JBTokenAmount memory forwardedAmount = JBTokenAmount(address(_mockToken2), 0, 0, passedAfterTax);
438
- JBTokenAmount memory feeRepayAmount = JBTokenAmount(address(_mockToken2), 0, 0, hookTax);
457
+ JBTokenAmount memory reclaimedAmount =
458
+ JBTokenAmount({token: address(_mockToken2), decimals: 0, currency: 0, value: reclaimAmount});
459
+ JBTokenAmount memory forwardedAmount =
460
+ JBTokenAmount({token: address(_mockToken2), decimals: 0, currency: 0, value: passedAfterTax});
461
+ JBTokenAmount memory feeRepayAmount =
462
+ JBTokenAmount({token: address(_mockToken2), decimals: 0, currency: 0, value: hookTax});
439
463
 
440
464
  // needed for hook call
441
465
  JBAfterCashOutRecordedContext memory context = JBAfterCashOutRecordedContext({