@bananapus/core-v6 0.0.14 → 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 (216) 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 +150 -43
  5. package/foundry.toml +3 -3
  6. package/package.json +4 -4
  7. package/remappings.txt +1 -1
  8. package/script/Deploy.s.sol +23 -16
  9. package/script/DeployPeriphery.s.sol +71 -66
  10. package/script/helpers/CoreDeploymentLib.sol +84 -37
  11. package/src/JBChainlinkV3PriceFeed.sol +1 -0
  12. package/src/JBController.sol +19 -4
  13. package/src/JBERC20.sol +12 -3
  14. package/src/JBFundAccessLimits.sol +12 -2
  15. package/src/JBMultiTerminal.sol +3 -1
  16. package/src/JBPermissions.sol +1 -0
  17. package/src/JBProjects.sol +1 -1
  18. package/src/JBRulesets.sol +11 -0
  19. package/src/JBSplits.sol +5 -0
  20. package/src/JBTerminalStore.sol +3 -0
  21. package/src/JBTokens.sol +40 -4
  22. package/src/interfaces/IJBController.sol +6 -1
  23. package/src/interfaces/IJBPayoutTerminal.sol +0 -1
  24. package/src/interfaces/IJBPermitTerminal.sol +1 -0
  25. package/src/interfaces/IJBToken.sol +5 -0
  26. package/src/interfaces/IJBTokens.sol +13 -0
  27. package/src/libraries/JBMetadataResolver.sol +7 -3
  28. package/src/libraries/JBRulesetMetadataResolver.sol +21 -21
  29. package/src/structs/JBAccountingContext.sol +1 -0
  30. package/src/structs/JBAfterCashOutRecordedContext.sol +1 -0
  31. package/src/structs/JBAfterPayRecordedContext.sol +1 -0
  32. package/src/structs/JBBeforeCashOutRecordedContext.sol +1 -0
  33. package/src/structs/JBBeforePayRecordedContext.sol +1 -0
  34. package/src/structs/JBCashOutHookSpecification.sol +1 -0
  35. package/src/structs/JBCurrencyAmount.sol +1 -0
  36. package/src/structs/JBFee.sol +1 -0
  37. package/src/structs/JBFundAccessLimitGroup.sol +1 -0
  38. package/src/structs/JBPayHookSpecification.sol +1 -0
  39. package/src/structs/JBPermissionsData.sol +1 -0
  40. package/src/structs/JBRuleset.sol +1 -0
  41. package/src/structs/JBRulesetConfig.sol +1 -0
  42. package/src/structs/JBRulesetMetadata.sol +1 -0
  43. package/src/structs/JBRulesetWeightCache.sol +1 -0
  44. package/src/structs/JBRulesetWithMetadata.sol +1 -0
  45. package/src/structs/JBSingleAllowance.sol +1 -0
  46. package/src/structs/JBSplit.sol +1 -0
  47. package/src/structs/JBSplitGroup.sol +1 -0
  48. package/src/structs/JBSplitHookContext.sol +1 -0
  49. package/src/structs/JBTerminalConfig.sol +1 -0
  50. package/src/structs/JBTokenAmount.sol +1 -0
  51. package/test/ComprehensiveInvariant.t.sol +15 -5
  52. package/test/{AuditExploits.t.sol → CoreExploitTests.t.sol} +35 -4
  53. package/test/EconomicSimulation.t.sol +10 -2
  54. package/test/EntryPointPermutations.t.sol +18 -5
  55. package/test/FlashLoanAttacks.t.sol +12 -2
  56. package/test/PermissionEscalation.t.sol +54 -22
  57. package/test/RulesetTransitions.t.sol +15 -1
  58. package/test/SplitLoopTests.t.sol +26 -5
  59. package/test/TestAccessToFunds.sol +17 -2
  60. package/test/TestCashOut.sol +15 -2
  61. package/test/TestCashOutCountFor.sol +1 -2
  62. package/test/TestCashOutHooks.sol +47 -25
  63. package/test/TestCashOutTimingEdge.sol +13 -1
  64. package/test/TestDurationUnderflow.sol +13 -1
  65. package/test/TestFeeProcessingFailure.sol +17 -7
  66. package/test/TestFees.sol +14 -1
  67. package/test/TestInterfaceSupport.sol +20 -1
  68. package/test/TestJBERC20Inheritance.sol +11 -1
  69. package/test/TestLaunchProject.sol +13 -1
  70. package/test/TestMetaTx.sol +15 -1
  71. package/test/TestMetadataParserLib.sol +37 -4
  72. package/test/TestMigrationHeldFees.sol +17 -11
  73. package/test/TestMintTokensOf.sol +14 -1
  74. package/test/TestMultiTokenSurplus.sol +14 -1
  75. package/test/TestMultipleAccessLimits.sol +23 -1
  76. package/test/TestPayBurnRedeemFlow.sol +16 -1
  77. package/test/TestPayHooks.sol +33 -14
  78. package/test/TestPermissions.sol +20 -1
  79. package/test/TestPermissionsEdge.sol +5 -1
  80. package/test/TestPermit2Terminal.sol +36 -3
  81. package/test/TestRulesetQueueing.sol +24 -1
  82. package/test/TestRulesetQueuingStress.sol +28 -2
  83. package/test/TestRulesetWeightCaching.sol +5 -2
  84. package/test/TestSplits.sol +23 -1
  85. package/test/TestTerminalMigration.sol +11 -1
  86. package/test/TestTokenFlow.sol +18 -1
  87. package/test/TestWeightCacheStaleAfterRejection.sol +15 -1
  88. package/test/WeirdTokenTests.t.sol +18 -2
  89. package/test/fork/TestChainlinkPriceFeedFork.sol +254 -0
  90. package/test/formal/BondingCurveProperties.t.sol +8 -2
  91. package/test/formal/FeeProperties.t.sol +7 -1
  92. package/test/helpers/JBTest.sol +7 -7
  93. package/test/helpers/TestBaseWorkflow.sol +84 -1
  94. package/test/invariants/Phase3DeepInvariant.t.sol +13 -5
  95. package/test/invariants/RulesetsInvariant.t.sol +12 -2
  96. package/test/invariants/TerminalStoreInvariant.t.sol +11 -2
  97. package/test/invariants/TokensInvariant.t.sol +13 -2
  98. package/test/invariants/handlers/ComprehensiveHandler.sol +19 -1
  99. package/test/invariants/handlers/EconomicHandler.sol +31 -1
  100. package/test/invariants/handlers/Phase3Handler.sol +31 -2
  101. package/test/invariants/handlers/RulesetsHandler.sol +5 -1
  102. package/test/invariants/handlers/TerminalStoreHandler.sol +6 -1
  103. package/test/invariants/handlers/TokensHandler.sol +1 -2
  104. package/test/mock/ERC2771ForwarderMock.sol +1 -1
  105. package/test/mock/MockERC20.sol +1 -3
  106. package/test/mock/MockMaliciousBeneficiary.sol +2 -2
  107. package/test/mock/MockMaliciousSplitHook.sol +2 -1
  108. package/test/mock/MockPriceFeed.sol +1 -1
  109. package/test/units/static/JBChainlinkV3PriceFeed/TestPriceFeed.sol +0 -1
  110. package/test/units/static/JBController/JBControllerSetup.sol +10 -1
  111. package/test/units/static/JBController/TestBurnTokensOf.sol +8 -1
  112. package/test/units/static/JBController/TestClaimTokensFor.sol +4 -1
  113. package/test/units/static/JBController/TestDeployErc20For.sol +7 -1
  114. package/test/units/static/JBController/TestLaunchProjectFor.sol +21 -1
  115. package/test/units/static/JBController/TestLaunchRulesetsFor.sol +21 -1
  116. package/test/units/static/JBController/TestMigrateController.sol +10 -1
  117. package/test/units/static/JBController/TestMintTokensOfUnits.sol +10 -1
  118. package/test/units/static/JBController/TestPayReservedTokenToTerminal.sol +4 -1
  119. package/test/units/static/JBController/TestReceiveMigrationFrom.sol +5 -1
  120. package/test/units/static/JBController/TestRulesetViews.sol +7 -1
  121. package/test/units/static/JBController/TestSendReservedTokensToSplitsOf.sol +21 -1
  122. package/test/units/static/JBController/TestSetSplitGroupsOf.sol +6 -1
  123. package/test/units/static/JBController/TestSetTokenFor.sol +13 -1
  124. package/test/units/static/JBController/TestSetUriOf.sol +5 -1
  125. package/test/units/static/JBController/TestTransferCreditsFrom.sol +11 -1
  126. package/test/units/static/JBDeadline/TestDeadlineFuzz.sol +15 -4
  127. package/test/units/static/JBDirectory/JBDirectorySetup.sol +4 -1
  128. package/test/units/static/JBDirectory/TestPrimaryTerminalOf.sol +5 -1
  129. package/test/units/static/JBDirectory/TestSetControllerOf.sol +11 -1
  130. package/test/units/static/JBDirectory/TestSetControllerOfMigrationOrder.sol +7 -1
  131. package/test/units/static/JBDirectory/TestSetPrimaryTerminalOf.sol +11 -1
  132. package/test/units/static/JBDirectory/TestSetTerminalsOf.sol +10 -1
  133. package/test/units/static/JBERC20/JBERC20Setup.sol +2 -1
  134. package/test/units/static/JBERC20/SigUtils.sol +2 -0
  135. package/test/units/static/JBERC20/TestInitialize.sol +1 -1
  136. package/test/units/static/JBERC20/TestName.sol +1 -1
  137. package/test/units/static/JBERC20/TestNonces.sol +3 -1
  138. package/test/units/static/JBERC20/TestSymbol.sol +1 -1
  139. package/test/units/static/JBFeelessAdresses/JBFeelessSetup.sol +2 -1
  140. package/test/units/static/JBFeelessAdresses/TestInterfaces.sol +2 -1
  141. package/test/units/static/JBFeelessAdresses/TestSetFeelessAddress.sol +1 -1
  142. package/test/units/static/JBFees/TestFeesFuzz.sol +1 -1
  143. package/test/units/static/JBFixedPointNumber/TestAdjustDecimals.sol +0 -1
  144. package/test/units/static/JBFixedPointNumber/TestAdjustDecimalsFuzz.sol +0 -1
  145. package/test/units/static/JBFundAccessLimits/JBFundAccessSetup.sol +3 -1
  146. package/test/units/static/JBFundAccessLimits/TestFundAccessLimitsEdge.sol +4 -1
  147. package/test/units/static/JBFundAccessLimits/TestPayoutLimitOf.sol +4 -1
  148. package/test/units/static/JBFundAccessLimits/TestPayoutLimitsOf.sol +8 -1
  149. package/test/units/static/JBFundAccessLimits/TestSetFundAccessLimitsFor.sol +8 -1
  150. package/test/units/static/JBFundAccessLimits/TestSurplusAllowanceOf.sol +4 -1
  151. package/test/units/static/JBFundAccessLimits/TestSurplusAllowancesOf.sol +7 -1
  152. package/test/units/static/JBMetadataResolver/TestGetDataFor.sol +1 -1
  153. package/test/units/static/JBMetadataResolver/{TestMetadataResolverM20M21.sol → TestMetadataResolverEdgeCases.sol} +6 -5
  154. package/test/units/static/JBMetadataResolver/TestMetadataResolverFuzz.sol +2 -1
  155. package/test/units/static/JBMultiTerminal/JBMultiTerminalSetup.sol +12 -1
  156. package/test/units/static/JBMultiTerminal/TestAccountingContextsOf.sol +9 -1
  157. package/test/units/static/JBMultiTerminal/TestAddAccountingContextsFor.sol +18 -2
  158. package/test/units/static/JBMultiTerminal/TestAddToBalanceOf.sol +42 -7
  159. package/test/units/static/JBMultiTerminal/TestCashOutTokensOf.sol +30 -6
  160. package/test/units/static/JBMultiTerminal/TestExecutePayout.sol +18 -2
  161. package/test/units/static/JBMultiTerminal/TestExecuteProcessFee.sol +13 -3
  162. package/test/units/static/JBMultiTerminal/TestMigrateBalanceOf.sol +21 -4
  163. package/test/units/static/JBMultiTerminal/TestPay.sol +32 -6
  164. package/test/units/static/JBMultiTerminal/TestProcessHeldFeesOf.sol +0 -1
  165. package/test/units/static/JBMultiTerminal/TestSendPayoutsOf.sol +15 -1
  166. package/test/units/static/JBMultiTerminal/TestUseAllowanceOf.sol +17 -1
  167. package/test/units/static/JBPermissions/JBPermissionsSetup.sol +2 -1
  168. package/test/units/static/JBPermissions/TestHasPermission.sol +1 -1
  169. package/test/units/static/JBPermissions/TestHasPermissions.sol +1 -1
  170. package/test/units/static/JBPermissions/TestSetPermissionsFor.sol +3 -1
  171. package/test/units/static/JBPrices/JBPricesSetup.sol +6 -1
  172. package/test/units/static/JBPrices/TestAddPriceFeedFor.sol +6 -1
  173. package/test/units/static/JBPrices/TestPricePerUnitOf.sol +4 -1
  174. package/test/units/static/JBPrices/TestPrices.sol +4 -1
  175. package/test/units/static/JBProjects/JBProjectsSetup.sol +2 -1
  176. package/test/units/static/JBProjects/TestCreateFor.sol +3 -1
  177. package/test/units/static/JBProjects/TestInitialProject.sol +2 -1
  178. package/test/units/static/JBProjects/TestInterfaces.sol +0 -1
  179. package/test/units/static/JBProjects/TestSetResolver.sol +2 -1
  180. package/test/units/static/JBProjects/TestTokenUri.sol +3 -1
  181. package/test/units/static/JBRulesetMetadataResolver/TestSetCashOutTaxRateTo.sol +9 -1
  182. package/test/units/static/JBRulesets/JBRulesetsSetup.sol +3 -1
  183. package/test/units/static/JBRulesets/TestCurrentApprovalStatusForLatestRulesetOf.sol +9 -1
  184. package/test/units/static/JBRulesets/TestCurrentOf.sol +10 -1
  185. package/test/units/static/JBRulesets/TestGetRulesetOf.sol +7 -1
  186. package/test/units/static/JBRulesets/TestLatestQueuedRulesetOf.sol +9 -1
  187. package/test/units/static/JBRulesets/TestRulesets.sol +12 -2
  188. package/test/units/static/JBRulesets/TestRulesetsOf.sol +1 -1
  189. package/test/units/static/JBRulesets/TestUpcomingRulesetOf.sol +10 -1
  190. package/test/units/static/JBRulesets/TestUpdateRulesetWeightCache.sol +6 -1
  191. package/test/units/static/JBSplits/JBSplitsSetup.sol +3 -1
  192. package/test/units/static/JBSplits/TestSelfManagedSplitGroups.sol +8 -1
  193. package/test/units/static/JBSplits/TestSetSplitGroupsOf.sol +8 -1
  194. package/test/units/static/JBSplits/TestSplitsLockedEdge.sol +6 -1
  195. package/test/units/static/JBSplits/TestSplitsOf.sol +1 -1
  196. package/test/units/static/JBSplits/TestSplitsPacking.sol +5 -2
  197. package/test/units/static/JBSurplus/TestSurplusFuzz.sol +4 -2
  198. package/test/units/static/JBTerminalStore/JBTerminalStoreSetup.sol +5 -1
  199. package/test/units/static/JBTerminalStore/TestCurrentReclaimableSurplusOf.sol +14 -1
  200. package/test/units/static/JBTerminalStore/TestCurrentSurplusOf.sol +14 -1
  201. package/test/units/static/JBTerminalStore/TestCurrentTotalSurplusOf.sol +3 -1
  202. package/test/units/static/JBTerminalStore/TestRecordCashOutsFor.sol +20 -1
  203. package/test/units/static/JBTerminalStore/TestRecordPaymentFrom.sol +15 -1
  204. package/test/units/static/JBTerminalStore/TestRecordPayoutFor.sol +13 -1
  205. package/test/units/static/JBTerminalStore/TestRecordTerminalMigration.sol +8 -1
  206. package/test/units/static/JBTerminalStore/TestRecordUsedAllowanceOf.sol +16 -1
  207. package/test/units/static/JBTerminalStore/TestUint224Overflow.sol +15 -1
  208. package/test/units/static/JBTokens/JBTokensSetup.sol +5 -1
  209. package/test/units/static/JBTokens/TestBurnFrom.sol +4 -1
  210. package/test/units/static/JBTokens/TestClaimTokensFor.sol +4 -1
  211. package/test/units/static/JBTokens/TestDeployERC20ForUnits.sol +4 -1
  212. package/test/units/static/JBTokens/TestMintFor.sol +4 -1
  213. package/test/units/static/JBTokens/TestSetTokenFor.sol +4 -1
  214. package/test/units/static/JBTokens/TestTotalBalanceOf.sol +1 -1
  215. package/test/units/static/JBTokens/TestTotalSupplyOf.sol +1 -1
  216. package/test/units/static/JBTokens/TestTransferCreditsFrom.sol +3 -1
@@ -1,13 +1,12 @@
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
 
8
7
  /// @notice Harness that exposes JBMetadataResolver internals and adds a combined operation
9
8
  /// to test memory corruption from _sliceBytes within a single execution context.
10
- contract M20M21Harness {
9
+ contract MetadataResolverEdgeCaseHarness {
11
10
  function createMetadata(bytes4[] memory ids, bytes[] memory datas) external pure returns (bytes memory) {
12
11
  return JBMetadataResolver.createMetadata(ids, datas);
13
12
  }
@@ -64,11 +63,11 @@ contract M20M21Harness {
64
63
  }
65
64
 
66
65
  /// @notice Tests for _sliceBytes over-copy and addToMetadata offset overflow.
67
- contract TestMetadataResolverM20M21 is JBTest {
68
- M20M21Harness harness;
66
+ contract TestMetadataResolverEdgeCases is JBTest {
67
+ MetadataResolverEdgeCaseHarness harness;
69
68
 
70
69
  function setUp() external {
71
- harness = new M20M21Harness();
70
+ harness = new MetadataResolverEdgeCaseHarness();
72
71
  }
73
72
 
74
73
  //*********************************************************************//
@@ -197,6 +196,7 @@ contract TestMetadataResolverM20M21 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 TestMetadataResolverM20M21 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({
@@ -1,7 +1,22 @@
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 {IJBFeelessAddresses} from "../../../../src/interfaces/IJBFeelessAddresses.sol";
7
+ import {IJBRulesetApprovalHook} from "../../../../src/interfaces/IJBRulesetApprovalHook.sol";
8
+ import {IJBSplitHook} from "../../../../src/interfaces/IJBSplitHook.sol";
9
+ import {IJBTerminal} from "../../../../src/interfaces/IJBTerminal.sol";
10
+ import {IJBTerminalStore} from "../../../../src/interfaces/IJBTerminalStore.sol";
11
+ import {JBConstants} from "../../../../src/libraries/JBConstants.sol";
12
+ import {JBFees} from "../../../../src/libraries/JBFees.sol";
13
+ import {JBPayHookSpecification} from "../../../../src/structs/JBPayHookSpecification.sol";
14
+ import {JBRuleset} from "../../../../src/structs/JBRuleset.sol";
15
+ import {JBSplit} from "../../../../src/structs/JBSplit.sol";
16
+ import {JBSplitHookContext} from "../../../../src/structs/JBSplitHookContext.sol";
17
+ import {JBTokenAmount} from "../../../../src/structs/JBTokenAmount.sol";
18
+ import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
19
+ import {IERC165} from "@openzeppelin/contracts/utils/introspection/ERC165.sol";
5
20
  import {JBMultiTerminalSetup} from "./JBMultiTerminalSetup.sol";
6
21
 
7
22
  contract TestExecutePayout_Local is JBMultiTerminalSetup {
@@ -344,7 +359,8 @@ contract TestExecutePayout_Local is JBMultiTerminalSetup {
344
359
  });
345
360
 
346
361
  // needed for next mock call returns
347
- JBTokenAmount memory tokenAmount = JBTokenAmount(_usdc, 0, 0, _defaultAmount);
362
+ JBTokenAmount memory tokenAmount =
363
+ JBTokenAmount({token: _usdc, decimals: 0, currency: 0, value: _defaultAmount});
348
364
  JBPayHookSpecification[] memory hookSpecifications = new JBPayHookSpecification[](0);
349
365
  JBRuleset memory returnedRuleset = JBRuleset({
350
366
  cycleNumber: 1,
@@ -1,7 +1,15 @@
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 {IJBRulesetApprovalHook} from "../../../../src/interfaces/IJBRulesetApprovalHook.sol";
6
+ import {IJBTerminal} from "../../../../src/interfaces/IJBTerminal.sol";
7
+ import {IJBTerminalStore} from "../../../../src/interfaces/IJBTerminalStore.sol";
8
+ import {JBConstants} from "../../../../src/libraries/JBConstants.sol";
9
+ import {JBPayHookSpecification} from "../../../../src/structs/JBPayHookSpecification.sol";
10
+ import {JBRuleset} from "../../../../src/structs/JBRuleset.sol";
11
+ import {JBTokenAmount} from "../../../../src/structs/JBTokenAmount.sol";
12
+ import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
5
13
  import {JBMultiTerminalSetup} from "./JBMultiTerminalSetup.sol";
6
14
 
7
15
  contract TestExecuteProcessFee_Local is JBMultiTerminalSetup {
@@ -80,7 +88,8 @@ contract TestExecuteProcessFee_Local is JBMultiTerminalSetup {
80
88
  // it will call internal _pay
81
89
 
82
90
  // needed for next mock call returns
83
- JBTokenAmount memory tokenAmount = JBTokenAmount(_native, 0, 0, _defaultAmount);
91
+ JBTokenAmount memory tokenAmount =
92
+ JBTokenAmount({token: _native, decimals: 0, currency: 0, value: _defaultAmount});
84
93
  JBPayHookSpecification[] memory hookSpecifications = new JBPayHookSpecification[](0);
85
94
  JBRuleset memory returnedRuleset = JBRuleset({
86
95
  cycleNumber: 1,
@@ -143,7 +152,8 @@ contract TestExecuteProcessFee_Local is JBMultiTerminalSetup {
143
152
  // it will call external pay with zero msgvalue
144
153
 
145
154
  // needed for next mock call returns
146
- JBTokenAmount memory tokenAmount = JBTokenAmount(_usdc, 0, 0, _defaultAmount);
155
+ JBTokenAmount memory tokenAmount =
156
+ JBTokenAmount({token: _usdc, decimals: 0, currency: 0, value: _defaultAmount});
147
157
  JBPayHookSpecification[] memory hookSpecifications = new JBPayHookSpecification[](0);
148
158
  JBRuleset memory returnedRuleset = JBRuleset({
149
159
  cycleNumber: 1,
@@ -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 {JBPermissioned} from "../../../../src/abstract/JBPermissioned.sol";
6
+ import {IJBPermissions} from "../../../../src/interfaces/IJBPermissions.sol";
7
+ import {IJBTerminal} from "../../../../src/interfaces/IJBTerminal.sol";
8
+ import {IJBTerminalStore} from "../../../../src/interfaces/IJBTerminalStore.sol";
9
+ import {JBConstants} from "../../../../src/libraries/JBConstants.sol";
10
+ import {JBAccountingContext} from "../../../../src/structs/JBAccountingContext.sol";
11
+ import {JBPermissionIds} from "@bananapus/permission-ids-v6/src/JBPermissionIds.sol";
12
+ import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
13
+ import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
5
14
  import {JBMultiTerminalSetup} from "./JBMultiTerminalSetup.sol";
6
15
 
7
16
  contract TestMigrateBalanceOf_Local is JBMultiTerminalSetup {
@@ -9,8 +18,10 @@ contract TestMigrateBalanceOf_Local is JBMultiTerminalSetup {
9
18
  uint256 _defaultAmount = 1e18;
10
19
  address _bene = makeAddr("beneficiary");
11
20
  address _native = JBConstants.NATIVE_TOKEN;
21
+ // forge-lint: disable-next-line(unsafe-typecast)
12
22
  uint256 _nativeCurrency = uint32(uint160(_native));
13
23
  address _usdc = makeAddr("USDC");
24
+ // forge-lint: disable-next-line(unsafe-typecast)
14
25
  uint256 _usdcCurrency = uint32(uint160(_usdc));
15
26
 
16
27
  IJBTerminal _newTerminal = IJBTerminal(makeAddr("newTerminal"));
@@ -94,8 +105,10 @@ contract TestMigrateBalanceOf_Local is JBMultiTerminalSetup {
94
105
  // it will safeIncreaseAllowance and addToBalanceOf
95
106
 
96
107
  // for next mock
108
+ // forge-lint: disable-next-line(unsafe-typecast)
97
109
  JBAccountingContext memory _context =
98
- JBAccountingContext({token: _usdc, decimals: 6, currency: uint32(_usdcCurrency)});
110
+ // forge-lint: disable-next-line(unsafe-typecast)
111
+ JBAccountingContext({token: _usdc, decimals: 6, currency: uint32(_usdcCurrency)});
99
112
 
100
113
  // mock call to the destination terminals accountingContextFor
101
114
  mockExpect(
@@ -131,8 +144,10 @@ contract TestMigrateBalanceOf_Local is JBMultiTerminalSetup {
131
144
  // it will addToBalanceOf with value in msgvalue
132
145
 
133
146
  // for next mock
147
+ // forge-lint: disable-next-line(unsafe-typecast)
134
148
  JBAccountingContext memory _context =
135
- JBAccountingContext({token: _native, decimals: 18, currency: uint32(_nativeCurrency)});
149
+ // forge-lint: disable-next-line(unsafe-typecast)
150
+ JBAccountingContext({token: _native, decimals: 18, currency: uint32(_nativeCurrency)});
136
151
 
137
152
  // mock call to the destination terminals accountingContextFor
138
153
  mockExpect(
@@ -165,8 +180,10 @@ contract TestMigrateBalanceOf_Local is JBMultiTerminalSetup {
165
180
  // it will not add to balance
166
181
 
167
182
  // for next mock
183
+ // forge-lint: disable-next-line(unsafe-typecast)
168
184
  JBAccountingContext memory _context =
169
- JBAccountingContext({token: _native, decimals: 18, currency: uint32(_nativeCurrency)});
185
+ // forge-lint: disable-next-line(unsafe-typecast)
186
+ JBAccountingContext({token: _native, decimals: 18, currency: uint32(_nativeCurrency)});
170
187
 
171
188
  // mock call to the destination terminals accountingContextFor
172
189
  mockExpect(
@@ -1,7 +1,24 @@
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 {IJBController} from "../../../../src/interfaces/IJBController.sol";
7
+ import {IJBDirectory} from "../../../../src/interfaces/IJBDirectory.sol";
8
+ import {IJBPayHook} from "../../../../src/interfaces/IJBPayHook.sol";
9
+ import {IJBRulesetApprovalHook} from "../../../../src/interfaces/IJBRulesetApprovalHook.sol";
10
+ import {IJBRulesets} from "../../../../src/interfaces/IJBRulesets.sol";
11
+ import {IJBTerminal} from "../../../../src/interfaces/IJBTerminal.sol";
12
+ import {IJBTerminalStore} from "../../../../src/interfaces/IJBTerminalStore.sol";
13
+ import {IJBTokens} from "../../../../src/interfaces/IJBTokens.sol";
14
+ import {JBConstants} from "../../../../src/libraries/JBConstants.sol";
15
+ import {JBAccountingContext} from "../../../../src/structs/JBAccountingContext.sol";
16
+ import {JBAfterPayRecordedContext} from "../../../../src/structs/JBAfterPayRecordedContext.sol";
17
+ import {JBPayHookSpecification} from "../../../../src/structs/JBPayHookSpecification.sol";
18
+ import {JBRuleset} from "../../../../src/structs/JBRuleset.sol";
19
+ import {JBTokenAmount} from "../../../../src/structs/JBTokenAmount.sol";
20
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
21
+ import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
5
22
  import {JBMultiTerminalSetup} from "./JBMultiTerminalSetup.sol";
6
23
 
7
24
  contract TestPay_Local is JBMultiTerminalSetup {
@@ -9,8 +26,10 @@ contract TestPay_Local is JBMultiTerminalSetup {
9
26
  uint256 _defaultAmount = 1e18;
10
27
  address _bene = makeAddr("beneficiary");
11
28
  address _native = JBConstants.NATIVE_TOKEN;
29
+ // forge-lint: disable-next-line(unsafe-typecast)
12
30
  uint32 _nativeCurrency = uint32(uint160(_native));
13
31
  address _usdc = makeAddr("USDC");
32
+ // forge-lint: disable-next-line(unsafe-typecast)
14
33
  uint32 _usdcCurrency = uint32(uint160(_usdc));
15
34
 
16
35
  address _mockController = makeAddr("mc");
@@ -102,7 +121,8 @@ contract TestPay_Local is JBMultiTerminalSetup {
102
121
  // it will revert UNDER_MIN_RETURNED_TOKENS
103
122
 
104
123
  // needed for next mock call returns
105
- JBTokenAmount memory tokenAmount = JBTokenAmount(_native, 18, uint32(_nativeCurrency), _defaultAmount);
124
+ JBTokenAmount memory tokenAmount =
125
+ JBTokenAmount({token: _native, decimals: 18, currency: uint32(_nativeCurrency), value: _defaultAmount});
106
126
  JBPayHookSpecification[] memory hookSpecifications = new JBPayHookSpecification[](0);
107
127
  JBRuleset memory returnedRuleset = JBRuleset({
108
128
  cycleNumber: 1,
@@ -143,7 +163,8 @@ contract TestPay_Local is JBMultiTerminalSetup {
143
163
  // it will mint tokens and emit Pay
144
164
 
145
165
  // needed for next mock call returns
146
- JBTokenAmount memory tokenAmount = JBTokenAmount(_native, 18, uint32(_nativeCurrency), _defaultAmount);
166
+ JBTokenAmount memory tokenAmount =
167
+ JBTokenAmount({token: _native, decimals: 18, currency: uint32(_nativeCurrency), value: _defaultAmount});
147
168
  JBPayHookSpecification[] memory hookSpecifications = new JBPayHookSpecification[](0);
148
169
  JBRuleset memory returnedRuleset = JBRuleset({
149
170
  cycleNumber: 1,
@@ -230,7 +251,10 @@ contract TestPay_Local is JBMultiTerminalSetup {
230
251
 
231
252
  // needed for next mock call returns
232
253
  JBTokenAmount memory tokenAmount =
233
- JBTokenAmount(address(_mockToken), 6, uint32(_mockTokenCurrency), _defaultAmount);
254
+ // forge-lint: disable-next-line(unsafe-typecast)
255
+ JBTokenAmount({
256
+ token: address(_mockToken), decimals: 6, currency: uint32(_mockTokenCurrency), value: _defaultAmount
257
+ });
234
258
  JBPayHookSpecification[] memory hookSpecifications = new JBPayHookSpecification[](1);
235
259
  hookSpecifications[0] = JBPayHookSpecification({hook: _mockHook, amount: _defaultAmount, metadata: ""});
236
260
 
@@ -320,7 +344,8 @@ contract TestPay_Local is JBMultiTerminalSetup {
320
344
  // it will send ETH to the hook and emit HookAfterRecordPay and Pay
321
345
 
322
346
  // needed for next mock call returns
323
- JBTokenAmount memory tokenAmount = JBTokenAmount(_native, 18, uint32(_nativeCurrency), _defaultAmount);
347
+ JBTokenAmount memory tokenAmount =
348
+ JBTokenAmount({token: _native, decimals: 18, currency: uint32(_nativeCurrency), value: _defaultAmount});
324
349
  JBPayHookSpecification[] memory hookSpecifications = new JBPayHookSpecification[](1);
325
350
  hookSpecifications[0] = JBPayHookSpecification({hook: _mockHook, amount: _defaultAmount, metadata: ""});
326
351
 
@@ -452,7 +477,8 @@ contract TestPay_Local is JBMultiTerminalSetup {
452
477
  // it will not transfer
453
478
 
454
479
  // needed for next mock call returns
455
- JBTokenAmount memory tokenAmount = JBTokenAmount(_native, 18, uint32(_nativeCurrency), _defaultAmount);
480
+ JBTokenAmount memory tokenAmount =
481
+ JBTokenAmount({token: _native, decimals: 18, currency: uint32(_nativeCurrency), value: _defaultAmount});
456
482
  JBPayHookSpecification[] memory hookSpecifications = new JBPayHookSpecification[](0);
457
483
 
458
484
  JBRuleset memory returnedRuleset = JBRuleset({
@@ -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 {JBMultiTerminalSetup} from "./JBMultiTerminalSetup.sol";
6
5
 
7
6
  contract TestProcessHeldFeesOf_Local is JBMultiTerminalSetup {
@@ -1,7 +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 {JBPermissioned} from "../../../../src/abstract/JBPermissioned.sol";
6
+ import {IJBDirectory} from "../../../../src/interfaces/IJBDirectory.sol";
7
+ import {IJBFeelessAddresses} from "../../../../src/interfaces/IJBFeelessAddresses.sol";
8
+ import {IJBPayoutTerminal} from "../../../../src/interfaces/IJBPayoutTerminal.sol";
9
+ import {IJBPermissions} from "../../../../src/interfaces/IJBPermissions.sol";
10
+ import {IJBRulesetApprovalHook} from "../../../../src/interfaces/IJBRulesetApprovalHook.sol";
11
+ import {IJBSplitHook} from "../../../../src/interfaces/IJBSplitHook.sol";
12
+ import {IJBSplits} from "../../../../src/interfaces/IJBSplits.sol";
13
+ import {IJBTerminalStore} from "../../../../src/interfaces/IJBTerminalStore.sol";
14
+ import {JBAccountingContext} from "../../../../src/structs/JBAccountingContext.sol";
15
+ import {JBRuleset} from "../../../../src/structs/JBRuleset.sol";
16
+ import {JBSplit} from "../../../../src/structs/JBSplit.sol";
17
+ import {JBPermissionIds} from "@bananapus/permission-ids-v6/src/JBPermissionIds.sol";
18
+ import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
5
19
  import {JBMultiTerminalSetup} from "./JBMultiTerminalSetup.sol";
6
20
 
7
21
  contract TestSendPayoutsOf_Local is JBMultiTerminalSetup {