@bananapus/core-v6 0.0.26 → 0.0.27

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 (163) hide show
  1. package/AUDIT_INSTRUCTIONS.md +2 -2
  2. package/CHANGE_LOG.md +2 -2
  3. package/README.md +1 -1
  4. package/SKILLS.md +1 -1
  5. package/STYLE_GUIDE.md +2 -2
  6. package/foundry.toml +1 -1
  7. package/package.json +3 -3
  8. package/script/Deploy.s.sol +1 -1
  9. package/script/DeployPeriphery.s.sol +1 -1
  10. package/script/helpers/CoreDeploymentLib.sol +1 -1
  11. package/src/JBChainlinkV3PriceFeed.sol +1 -1
  12. package/src/JBChainlinkV3SequencerPriceFeed.sol +1 -1
  13. package/src/JBController.sol +1 -1
  14. package/src/JBDeadline.sol +1 -1
  15. package/src/JBDirectory.sol +1 -1
  16. package/src/JBERC20.sol +1 -1
  17. package/src/JBFeelessAddresses.sol +1 -1
  18. package/src/JBFundAccessLimits.sol +1 -1
  19. package/src/JBMultiTerminal.sol +1 -1
  20. package/src/JBPermissions.sol +1 -1
  21. package/src/JBPrices.sol +1 -1
  22. package/src/JBProjects.sol +1 -1
  23. package/src/JBRulesets.sol +1 -1
  24. package/src/JBSplits.sol +1 -1
  25. package/src/JBTerminalStore.sol +1 -1
  26. package/src/JBTokens.sol +1 -1
  27. package/src/libraries/JBPayoutSplitGroupLib.sol +1 -1
  28. package/src/periphery/JBDeadline1Day.sol +1 -1
  29. package/src/periphery/JBDeadline3Days.sol +1 -1
  30. package/src/periphery/JBDeadline3Hours.sol +1 -1
  31. package/src/periphery/JBDeadline7Days.sol +1 -1
  32. package/src/periphery/JBMatchingPriceFeed.sol +1 -1
  33. package/test/TestJBERC20Inheritance.sol +1 -1
  34. package/test/TestMetadataOffsetOverflow.sol +1 -1
  35. package/test/TestMetadataParserLib.sol +1 -1
  36. package/test/TestTerminalPreviewParity.sol +1 -1
  37. package/test/audit/FeeFreeSurplusLifecycle.t.sol +6 -2
  38. package/test/audit/FeeFreeSurplusStale.t.sol +11 -5
  39. package/test/audit/USDTVoidReturnCompat.t.sol +6 -0
  40. package/test/fork/TestChainlinkPriceFeedFork.sol +1 -1
  41. package/test/fork/TestSequencerPriceFeedFork.sol +1 -1
  42. package/test/fork/TestTerminalPreviewParityFork.sol +1 -1
  43. package/test/helpers/JBTest.sol +1 -1
  44. package/test/helpers/MetadataResolverHelper.sol +1 -1
  45. package/test/mock/MockERC20.sol +1 -1
  46. package/test/mock/MockMaliciousBeneficiary.sol +1 -1
  47. package/test/mock/MockMaliciousSplitHook.sol +1 -1
  48. package/test/mock/MockPriceFeed.sol +1 -1
  49. package/test/mock/MockUSDT.sol +1 -1
  50. package/test/units/static/JBChainlinkV3PriceFeed/TestPriceFeed.sol +1 -1
  51. package/test/units/static/JBController/JBControllerSetup.sol +1 -1
  52. package/test/units/static/JBController/TestBurnTokensOf.sol +1 -1
  53. package/test/units/static/JBController/TestClaimTokensFor.sol +1 -1
  54. package/test/units/static/JBController/TestDeployErc20For.sol +1 -1
  55. package/test/units/static/JBController/TestLaunchProjectFor.sol +1 -1
  56. package/test/units/static/JBController/TestLaunchRulesetsFor.sol +1 -1
  57. package/test/units/static/JBController/TestMigrateController.sol +1 -1
  58. package/test/units/static/JBController/TestMintTokensOfUnits.sol +1 -1
  59. package/test/units/static/JBController/TestOmnichainRulesetOperator.sol +1 -1
  60. package/test/units/static/JBController/TestPayReservedTokenToTerminal.sol +1 -1
  61. package/test/units/static/JBController/TestPreviewMintOf.sol +1 -1
  62. package/test/units/static/JBController/TestReceiveMigrationFrom.sol +1 -1
  63. package/test/units/static/JBController/TestRulesetViews.sol +1 -1
  64. package/test/units/static/JBController/TestSendReservedTokensToSplitsOf.sol +1 -1
  65. package/test/units/static/JBController/TestSetSplitGroupsOf.sol +1 -1
  66. package/test/units/static/JBController/TestSetTokenFor.sol +1 -1
  67. package/test/units/static/JBController/TestSetUriOf.sol +1 -1
  68. package/test/units/static/JBController/TestTransferCreditsFrom.sol +1 -1
  69. package/test/units/static/JBDeadline/TestDeadlineFuzz.sol +1 -1
  70. package/test/units/static/JBDirectory/JBDirectorySetup.sol +1 -1
  71. package/test/units/static/JBDirectory/TestPrimaryTerminalOf.sol +1 -1
  72. package/test/units/static/JBDirectory/TestSetControllerOf.sol +1 -1
  73. package/test/units/static/JBDirectory/TestSetControllerOfMigrationOrder.sol +1 -1
  74. package/test/units/static/JBDirectory/TestSetPrimaryTerminalOf.sol +1 -1
  75. package/test/units/static/JBDirectory/TestSetTerminalsOf.sol +1 -1
  76. package/test/units/static/JBERC20/JBERC20Setup.sol +1 -1
  77. package/test/units/static/JBERC20/SigUtils.sol +1 -1
  78. package/test/units/static/JBERC20/TestInitialize.sol +1 -1
  79. package/test/units/static/JBERC20/TestName.sol +1 -1
  80. package/test/units/static/JBERC20/TestNonces.sol +1 -1
  81. package/test/units/static/JBERC20/TestSymbol.sol +1 -1
  82. package/test/units/static/JBFeelessAdresses/JBFeelessSetup.sol +1 -1
  83. package/test/units/static/JBFeelessAdresses/TestInterfaces.sol +1 -1
  84. package/test/units/static/JBFeelessAdresses/TestSetFeelessAddress.sol +1 -1
  85. package/test/units/static/JBFees/TestFeesFuzz.sol +1 -1
  86. package/test/units/static/JBFixedPointNumber/TestAdjustDecimals.sol +1 -1
  87. package/test/units/static/JBFixedPointNumber/TestAdjustDecimalsFuzz.sol +1 -1
  88. package/test/units/static/JBFundAccessLimits/JBFundAccessSetup.sol +1 -1
  89. package/test/units/static/JBFundAccessLimits/TestFundAccessLimitsEdge.sol +1 -1
  90. package/test/units/static/JBFundAccessLimits/TestPayoutLimitOf.sol +1 -1
  91. package/test/units/static/JBFundAccessLimits/TestPayoutLimitsOf.sol +1 -1
  92. package/test/units/static/JBFundAccessLimits/TestSetFundAccessLimitsFor.sol +1 -1
  93. package/test/units/static/JBFundAccessLimits/TestSurplusAllowanceOf.sol +1 -1
  94. package/test/units/static/JBFundAccessLimits/TestSurplusAllowancesOf.sol +1 -1
  95. package/test/units/static/JBMetadataResolver/TestGetDataFor.sol +1 -1
  96. package/test/units/static/JBMetadataResolver/TestMetadataResolverEdgeCases.sol +1 -1
  97. package/test/units/static/JBMetadataResolver/TestMetadataResolverFuzz.sol +1 -1
  98. package/test/units/static/JBMultiTerminal/JBMultiTerminalSetup.sol +1 -1
  99. package/test/units/static/JBMultiTerminal/TestAccountingContextsOf.sol +1 -1
  100. package/test/units/static/JBMultiTerminal/TestAddAccountingContextsFor.sol +1 -1
  101. package/test/units/static/JBMultiTerminal/TestAddToBalanceOf.sol +1 -1
  102. package/test/units/static/JBMultiTerminal/TestCashOutTokensOf.sol +1 -1
  103. package/test/units/static/JBMultiTerminal/TestExecutePayout.sol +1 -1
  104. package/test/units/static/JBMultiTerminal/TestExecuteProcessFee.sol +1 -1
  105. package/test/units/static/JBMultiTerminal/TestMigrateBalanceOf.sol +1 -1
  106. package/test/units/static/JBMultiTerminal/TestPay.sol +1 -1
  107. package/test/units/static/JBMultiTerminal/TestPreviewCashOutFrom.sol +1 -1
  108. package/test/units/static/JBMultiTerminal/TestPreviewPayFor.sol +1 -1
  109. package/test/units/static/JBMultiTerminal/TestProcessHeldFeesOf.sol +1 -1
  110. package/test/units/static/JBMultiTerminal/TestSendPayoutsOf.sol +1 -1
  111. package/test/units/static/JBMultiTerminal/TestUseAllowanceOf.sol +1 -1
  112. package/test/units/static/JBPermissions/JBPermissionsSetup.sol +1 -1
  113. package/test/units/static/JBPermissions/TestHasPermission.sol +1 -1
  114. package/test/units/static/JBPermissions/TestHasPermissions.sol +1 -1
  115. package/test/units/static/JBPermissions/TestSetPermissionsFor.sol +1 -1
  116. package/test/units/static/JBPrices/JBPricesSetup.sol +1 -1
  117. package/test/units/static/JBPrices/TestAddPriceFeedFor.sol +1 -1
  118. package/test/units/static/JBPrices/TestPricePerUnitOf.sol +1 -1
  119. package/test/units/static/JBPrices/TestPrices.sol +1 -1
  120. package/test/units/static/JBProjects/JBProjectsSetup.sol +1 -1
  121. package/test/units/static/JBProjects/TestCreateFor.sol +1 -1
  122. package/test/units/static/JBProjects/TestInitialProject.sol +1 -1
  123. package/test/units/static/JBProjects/TestInterfaces.sol +1 -1
  124. package/test/units/static/JBProjects/TestSetResolver.sol +1 -1
  125. package/test/units/static/JBProjects/TestTokenUri.sol +1 -1
  126. package/test/units/static/JBRulesetMetadataResolver/TestSetCashOutTaxRateTo.sol +1 -1
  127. package/test/units/static/JBRulesets/JBRulesetsSetup.sol +1 -1
  128. package/test/units/static/JBRulesets/TestCurrentApprovalStatusForLatestRulesetOf.sol +1 -1
  129. package/test/units/static/JBRulesets/TestCurrentOf.sol +1 -1
  130. package/test/units/static/JBRulesets/TestGetRulesetOf.sol +1 -1
  131. package/test/units/static/JBRulesets/TestLatestQueuedRulesetOf.sol +1 -1
  132. package/test/units/static/JBRulesets/TestRulesets.sol +1 -1
  133. package/test/units/static/JBRulesets/TestRulesetsOf.sol +1 -1
  134. package/test/units/static/JBRulesets/TestUpcomingRulesetOf.sol +1 -1
  135. package/test/units/static/JBRulesets/TestUpdateRulesetWeightCache.sol +1 -1
  136. package/test/units/static/JBSplits/JBSplitsSetup.sol +1 -1
  137. package/test/units/static/JBSplits/TestSelfManagedSplitGroups.sol +1 -1
  138. package/test/units/static/JBSplits/TestSetSplitGroupsOf.sol +1 -1
  139. package/test/units/static/JBSplits/TestSplitsLockedEdge.sol +1 -1
  140. package/test/units/static/JBSplits/TestSplitsOf.sol +1 -1
  141. package/test/units/static/JBSplits/TestSplitsPacking.sol +1 -1
  142. package/test/units/static/JBSurplus/TestSurplusFuzz.sol +1 -1
  143. package/test/units/static/JBTerminalStore/JBTerminalStoreSetup.sol +1 -1
  144. package/test/units/static/JBTerminalStore/TestCurrentReclaimableSurplusOf.sol +1 -1
  145. package/test/units/static/JBTerminalStore/TestCurrentSurplusOf.sol +1 -1
  146. package/test/units/static/JBTerminalStore/TestCurrentTotalSurplusOf.sol +1 -1
  147. package/test/units/static/JBTerminalStore/TestPreviewCashOutFrom.sol +1 -1
  148. package/test/units/static/JBTerminalStore/TestPreviewPayFrom.sol +1 -1
  149. package/test/units/static/JBTerminalStore/TestRecordCashOutsFor.sol +1 -1
  150. package/test/units/static/JBTerminalStore/TestRecordPaymentFrom.sol +1 -1
  151. package/test/units/static/JBTerminalStore/TestRecordPayoutFor.sol +1 -1
  152. package/test/units/static/JBTerminalStore/TestRecordTerminalMigration.sol +1 -1
  153. package/test/units/static/JBTerminalStore/TestRecordUsedAllowanceOf.sol +1 -1
  154. package/test/units/static/JBTerminalStore/TestUint224Overflow.sol +1 -1
  155. package/test/units/static/JBTokens/JBTokensSetup.sol +1 -1
  156. package/test/units/static/JBTokens/TestBurnFrom.sol +1 -1
  157. package/test/units/static/JBTokens/TestClaimTokensFor.sol +1 -1
  158. package/test/units/static/JBTokens/TestDeployERC20ForUnits.sol +1 -1
  159. package/test/units/static/JBTokens/TestMintFor.sol +1 -1
  160. package/test/units/static/JBTokens/TestSetTokenFor.sol +1 -1
  161. package/test/units/static/JBTokens/TestTotalBalanceOf.sol +1 -1
  162. package/test/units/static/JBTokens/TestTotalSupplyOf.sol +1 -1
  163. package/test/units/static/JBTokens/TestTransferCreditsFrom.sol +1 -1
@@ -6,7 +6,7 @@ Read [RISKS.md](./RISKS.md) for known risks, trust model, and reentrancy analysi
6
6
 
7
7
  ## Architecture Overview
8
8
 
9
- 16 contracts, ~8,100 lines in main contracts. All contracts use Solidity ^0.8.26.
9
+ 16 contracts, ~8,100 lines in main contracts. All contracts use Solidity 0.8.28.
10
10
 
11
11
  ```
12
12
  JBProjects (ERC-721)
@@ -420,7 +420,7 @@ The 185 test files cover most flows, but these areas have limited or no coverage
420
420
 
421
421
  ## Compiler and Version Info
422
422
 
423
- - **Solidity**: ^0.8.26
423
+ - **Solidity**: 0.8.28
424
424
  - **EVM target**: Cancun (uses transient storage opcodes)
425
425
  - **Optimizer**: 200 runs (no via-IR)
426
426
  - **Dependencies**: OpenZeppelin 5.x, Solady, forge-std
package/CHANGE_LOG.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # nana-core-v6 Changelog (v5 -> v6)
2
2
 
3
- This document describes all changes between `nana-core` (v5, Solidity 0.8.23) and `nana-core-v6` (v6, Solidity ^0.8.26).
3
+ This document describes all changes between `nana-core` (v5, Solidity 0.8.23) and `nana-core-v6` (v6, Solidity 0.8.28).
4
4
 
5
5
  ## Summary
6
6
 
@@ -375,7 +375,7 @@ No changes.
375
375
 
376
376
  ### 8.10 Solidity Version
377
377
 
378
- All contracts upgraded from `pragma solidity 0.8.23` to `pragma solidity ^0.8.26`.
378
+ All contracts upgraded from `pragma solidity 0.8.23` to `pragma solidity 0.8.28`.
379
379
 
380
380
  ### 8.11 Named Arguments
381
381
 
package/README.md CHANGED
@@ -100,7 +100,7 @@ Projects can migrate between controllers using the `IJBMigratable` interface. Th
100
100
 
101
101
  Juicebox V6 separates concerns across specialized contracts that coordinate through a central directory. Projects are represented as ERC-721 NFTs. Each project configures rulesets that dictate how payments, payouts, cash outs, and token minting behave over time.
102
102
 
103
- All contracts use Solidity `^0.8.26`.
103
+ All contracts use Solidity `0.8.28`.
104
104
 
105
105
  ```mermaid
106
106
  graph TD;
package/SKILLS.md CHANGED
@@ -417,7 +417,7 @@ Returns whether `addr` is allowed to mint tokens for the project. Called by `JBC
417
417
 
418
418
  ```solidity
419
419
  // SPDX-License-Identifier: MIT
420
- pragma solidity ^0.8.26;
420
+ pragma solidity 0.8.28;
421
421
 
422
422
  import {IJBController} from "@bananapus/core-v6/src/interfaces/IJBController.sol";
423
423
  import {IJBDirectory} from "@bananapus/core-v6/src/interfaces/IJBDirectory.sol";
package/STYLE_GUIDE.md CHANGED
@@ -21,7 +21,7 @@ One contract/interface/struct/enum per file. Name the file after the type it con
21
21
 
22
22
  ```solidity
23
23
  // Contracts — pin to exact version
24
- pragma solidity ^0.8.26;
24
+ pragma solidity 0.8.28;
25
25
 
26
26
  // Interfaces, structs, enums — caret for forward compatibility
27
27
  pragma solidity ^0.8.0;
@@ -331,7 +331,7 @@ Standard config across all repos:
331
331
 
332
332
  ```toml
333
333
  [profile.default]
334
- solc = '0.8.26'
334
+ solc = '0.8.28'
335
335
  evm_version = 'cancun'
336
336
  optimizer_runs = 200
337
337
  libs = ["node_modules", "lib"]
package/foundry.toml CHANGED
@@ -1,5 +1,5 @@
1
1
  [profile.default]
2
- solc = '0.8.26'
2
+ solc = '0.8.28'
3
3
  evm_version = 'cancun'
4
4
  optimizer_runs = 200
5
5
  libs = ["node_modules", "lib"]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bananapus/core-v6",
3
- "version": "0.0.26",
3
+ "version": "0.0.27",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -26,8 +26,8 @@
26
26
  "artifacts": "source ./.env && npx sphinx artifacts --org-id 'ea165b21-7cdc-4d7b-be59-ecdd4c26bee4' --project-name 'nana-core-v6'"
27
27
  },
28
28
  "dependencies": {
29
- "@bananapus/address-registry-v6": "^0.0.14",
30
- "@bananapus/permission-ids-v6": "^0.0.12",
29
+ "@bananapus/address-registry-v6": "^0.0.15",
30
+ "@bananapus/permission-ids-v6": "^0.0.14",
31
31
  "@chainlink/contracts": "^1.3.0",
32
32
  "@openzeppelin/contracts": "^5.6.1",
33
33
  "@prb/math": "^4.1.1",
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {Sphinx} from "@sphinx-labs/contracts/contracts/foundry/SphinxPlugin.sol";
5
5
  import {Script} from "forge-std/Script.sol";
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {Sphinx} from "@sphinx-labs/contracts/contracts/foundry/SphinxPlugin.sol";
5
5
  import {Script} from "forge-std/Script.sol";
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {stdJson} from "forge-std/Script.sol";
5
5
  import {Vm} from "forge-std/Vm.sol";
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {AggregatorV3Interface} from "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol";
5
5
 
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {AggregatorV2V3Interface} from "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV2V3Interface.sol";
5
5
  import {AggregatorV3Interface} from "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol";
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {JBPermissionIds} from "@bananapus/permission-ids-v6/src/JBPermissionIds.sol";
5
5
  import {ERC2771Context} from "@openzeppelin/contracts/metatx/ERC2771Context.sol";
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
5
 
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {JBPermissionIds} from "@bananapus/permission-ids-v6/src/JBPermissionIds.sol";
5
5
  import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
package/src/JBERC20.sol CHANGED
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
5
5
  import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
5
5
  import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {JBControlled} from "./abstract/JBControlled.sol";
5
5
  import {IJBDirectory} from "./interfaces/IJBDirectory.sol";
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {JBPermissionIds} from "@bananapus/permission-ids-v6/src/JBPermissionIds.sol";
5
5
  import {ERC2771Context} from "@openzeppelin/contracts/metatx/ERC2771Context.sol";
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {JBPermissionIds} from "@bananapus/permission-ids-v6/src/JBPermissionIds.sol";
5
5
  import {ERC2771Context} from "@openzeppelin/contracts/metatx/ERC2771Context.sol";
package/src/JBPrices.sol CHANGED
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
5
5
  import {ERC2771Context, Context} from "@openzeppelin/contracts/metatx/ERC2771Context.sol";
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
5
5
  import {ERC2771Context} from "@openzeppelin/contracts/metatx/ERC2771Context.sol";
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {mulDiv} from "@prb/math/src/Common.sol";
5
5
 
package/src/JBSplits.sol CHANGED
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {JBControlled} from "./abstract/JBControlled.sol";
5
5
  import {IJBDirectory} from "./interfaces/IJBDirectory.sol";
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {mulDiv} from "@prb/math/src/Common.sol";
5
5
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
package/src/JBTokens.sol CHANGED
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol";
5
5
 
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {mulDiv} from "@prb/math/src/Common.sol";
5
5
 
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {JBDeadline} from "../JBDeadline.sol";
5
5
 
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {JBDeadline} from "../JBDeadline.sol";
5
5
 
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {JBDeadline} from "../JBDeadline.sol";
5
5
 
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {JBDeadline} from "../JBDeadline.sol";
5
5
 
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {IJBPriceFeed} from "src/interfaces/IJBPriceFeed.sol";
5
5
 
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {TestBaseWorkflow} from "./helpers/TestBaseWorkflow.sol";
5
5
  import {JBERC20} from "../src/JBERC20.sol";
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {Test} from "forge-std/Test.sol";
5
5
  import {MetadataResolverHelper} from "./helpers/MetadataResolverHelper.sol";
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {Test} from "forge-std/Test.sol";
5
5
  import {MetadataResolverHelper} from "./helpers/MetadataResolverHelper.sol";
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {TestBaseWorkflow} from "./helpers/TestBaseWorkflow.sol";
5
5
  import {IJBController} from "../src/interfaces/IJBController.sol";
@@ -114,6 +114,7 @@ contract FeeFreeSurplusLifecycleTest is TestBaseWorkflow {
114
114
  splits[0] = JBSplit({
115
115
  preferAddToBalance: true,
116
116
  percent: JBConstants.SPLITS_TOTAL_PERCENT,
117
+ // forge-lint: disable-next-line(unsafe-typecast)
117
118
  projectId: uint64(_recipientProjectId),
118
119
  beneficiary: payable(address(0)),
119
120
  lockedUntil: 0,
@@ -126,8 +127,11 @@ contract FeeFreeSurplusLifecycleTest is TestBaseWorkflow {
126
127
 
127
128
  // Payout limit: allow paying out the full PAY_AMOUNT each cycle.
128
129
  JBCurrencyAmount[] memory payoutLimits = new JBCurrencyAmount[](1);
129
- payoutLimits[0] =
130
- JBCurrencyAmount({amount: uint224(PAY_AMOUNT), currency: uint32(uint160(JBConstants.NATIVE_TOKEN))});
130
+ payoutLimits[0] = JBCurrencyAmount({
131
+ // forge-lint: disable-next-line(unsafe-typecast)
132
+ amount: uint224(PAY_AMOUNT),
133
+ currency: uint32(uint160(JBConstants.NATIVE_TOKEN))
134
+ });
131
135
 
132
136
  // Fund access limits with the payout limit defined above.
133
137
  JBFundAccessLimitGroup[] memory payerLimits = new JBFundAccessLimitGroup[](1);
@@ -16,7 +16,6 @@ import {JBRulesetMetadata} from "../../src/structs/JBRulesetMetadata.sol";
16
16
  import {JBSplit} from "../../src/structs/JBSplit.sol";
17
17
  import {JBSplitGroup} from "../../src/structs/JBSplitGroup.sol";
18
18
  import {JBTerminalConfig} from "../../src/structs/JBTerminalConfig.sol";
19
- import {mulDiv} from "@prb/math/src/Common.sol";
20
19
 
21
20
  contract FeeFreeSurplusStaleTest is TestBaseWorkflow {
22
21
  IJBController private _controller;
@@ -63,8 +62,11 @@ contract FeeFreeSurplusStaleTest is TestBaseWorkflow {
63
62
  });
64
63
 
65
64
  JBCurrencyAmount[] memory surplusAllowances = new JBCurrencyAmount[](1);
66
- surplusAllowances[0] =
67
- JBCurrencyAmount({amount: uint224(PAY_AMOUNT), currency: uint32(uint160(JBConstants.NATIVE_TOKEN))});
65
+ surplusAllowances[0] = JBCurrencyAmount({
66
+ // forge-lint: disable-next-line(unsafe-typecast)
67
+ amount: uint224(PAY_AMOUNT),
68
+ currency: uint32(uint160(JBConstants.NATIVE_TOKEN))
69
+ });
68
70
 
69
71
  JBFundAccessLimitGroup[] memory fundAccessLimitGroups = new JBFundAccessLimitGroup[](1);
70
72
  fundAccessLimitGroups[0] = JBFundAccessLimitGroup({
@@ -91,6 +93,7 @@ contract FeeFreeSurplusStaleTest is TestBaseWorkflow {
91
93
  splits[0] = JBSplit({
92
94
  preferAddToBalance: true,
93
95
  percent: JBConstants.SPLITS_TOTAL_PERCENT,
96
+ // forge-lint: disable-next-line(unsafe-typecast)
94
97
  projectId: uint64(_projectIdB),
95
98
  beneficiary: payable(address(0)),
96
99
  lockedUntil: 0,
@@ -101,8 +104,11 @@ contract FeeFreeSurplusStaleTest is TestBaseWorkflow {
101
104
  splitGroups[0] = JBSplitGroup({groupId: uint32(uint160(JBConstants.NATIVE_TOKEN)), splits: splits});
102
105
 
103
106
  JBCurrencyAmount[] memory payoutLimits = new JBCurrencyAmount[](1);
104
- payoutLimits[0] =
105
- JBCurrencyAmount({amount: uint224(PAY_AMOUNT), currency: uint32(uint160(JBConstants.NATIVE_TOKEN))});
107
+ payoutLimits[0] = JBCurrencyAmount({
108
+ // forge-lint: disable-next-line(unsafe-typecast)
109
+ amount: uint224(PAY_AMOUNT),
110
+ currency: uint32(uint160(JBConstants.NATIVE_TOKEN))
111
+ });
106
112
 
107
113
  JBFundAccessLimitGroup[] memory projectALimits = new JBFundAccessLimitGroup[](1);
108
114
  projectALimits[0] = JBFundAccessLimitGroup({
@@ -150,6 +150,7 @@ contract USDTVoidReturnCompat is TestBaseWorkflow {
150
150
 
151
151
  // Grant Permit2 allowance for the terminal to pull tokens.
152
152
  vm.prank(payer);
153
+ // forge-lint: disable-next-line(unsafe-typecast)
153
154
  permit2().approve(address(usdt), address(jbMultiTerminal()), uint160(payAmount), type(uint48).max);
154
155
 
155
156
  // Execute the payment — this is the critical call that must handle void returns.
@@ -196,6 +197,7 @@ contract USDTVoidReturnCompat is TestBaseWorkflow {
196
197
 
197
198
  // Grant Permit2 allowance for the terminal.
198
199
  vm.prank(payer);
200
+ // forge-lint: disable-next-line(unsafe-typecast)
199
201
  permit2().approve(address(usdt), address(jbMultiTerminal()), uint160(payAmount), type(uint48).max);
200
202
 
201
203
  // Pay into the project to fund it.
@@ -254,6 +256,7 @@ contract USDTVoidReturnCompat is TestBaseWorkflow {
254
256
 
255
257
  // Grant Permit2 allowance for the terminal.
256
258
  vm.prank(payer);
259
+ // forge-lint: disable-next-line(unsafe-typecast)
257
260
  permit2().approve(address(usdt), address(jbMultiTerminal()), uint160(payAmount), type(uint48).max);
258
261
 
259
262
  // Pay into the project to receive project tokens.
@@ -316,6 +319,7 @@ contract USDTVoidReturnCompat is TestBaseWorkflow {
316
319
 
317
320
  // Grant Permit2 allowance for the terminal.
318
321
  vm.prank(payer);
322
+ // forge-lint: disable-next-line(unsafe-typecast)
319
323
  permit2().approve(address(usdt), address(jbMultiTerminal()), uint160(payAmount), type(uint48).max);
320
324
 
321
325
  // Step 1: Pay into the project.
@@ -367,6 +371,7 @@ contract USDTVoidReturnCompat is TestBaseWorkflow {
367
371
  // =========================================================================
368
372
 
369
373
  /// @notice Launches a project that accepts MockUSDT with no splits and no payout limits.
374
+ // forge-lint: disable-next-line(mixed-case-function)
370
375
  function _launchUSDTProject() internal returns (uint256) {
371
376
  // Create a single-element array for the ruleset configuration.
372
377
  JBRulesetConfig[] memory rulesetConfig = new JBRulesetConfig[](1);
@@ -428,6 +433,7 @@ contract USDTVoidReturnCompat is TestBaseWorkflow {
428
433
  }
429
434
 
430
435
  /// @notice Launches a project that accepts MockUSDT with a 100% split to splitBeneficiary.
436
+ // forge-lint: disable-next-line(mixed-case-function)
431
437
  function _launchUSDTProjectWithSplit() internal returns (uint256) {
432
438
  // Create a single-element array for the ruleset configuration.
433
439
  JBRulesetConfig[] memory rulesetConfig = new JBRulesetConfig[](1);
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {Test} from "forge-std/Test.sol";
5
5
 
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {Test} from "forge-std/Test.sol";
5
5
 
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {TestTerminalPreviewParity_Local} from "../TestTerminalPreviewParity.sol";
5
5
  import {IJBTerminal} from "../../src/interfaces/IJBTerminal.sol";
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {JBRuleset} from "../../src/structs/JBRuleset.sol";
5
5
  import {JBRulesetMetadata} from "../../src/structs/JBRulesetMetadata.sol";
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {JBMetadataResolver} from "../../src/libraries/JBMetadataResolver.sol";
5
5
 
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
5
5
 
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {Test} from "forge-std/Test.sol";
5
5
  import {JBTerminalStore} from "../../src/JBTerminalStore.sol";
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {IJBSplitHook} from "../../src/interfaces/IJBSplitHook.sol";
5
5
  import {JBSplitHookContext} from "../../src/structs/JBSplitHookContext.sol";
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {IJBPriceFeed} from "../../src/interfaces/IJBPriceFeed.sol";
5
5
 
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  /// @notice Mimics Tether (USDT) whose transfer/transferFrom/approve return void instead of bool.
5
5
  /// @dev Uses inline assembly to return empty data (no bool), matching USDT's on-chain behavior.
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {JBTest} from "../../../helpers/JBTest.sol";
5
5
  import {JBChainlinkV3PriceFeed} from "../../../../src/JBChainlinkV3PriceFeed.sol";
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {JBController} from "../../../../src/JBController.sol";
5
5
  import {IJBController} from "../../../../src/interfaces/IJBController.sol";
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {JBController} from "../../../../src/JBController.sol";
5
5
  import {JBPermissioned} from "../../../../src/abstract/JBPermissioned.sol";
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {JBPermissioned} from "../../../../src/abstract/JBPermissioned.sol";
5
5
  import {IJBPermissions} from "../../../../src/interfaces/IJBPermissions.sol";
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {JBPermissioned} from "../../../../src/abstract/JBPermissioned.sol";
5
5
  import {IJBPermissions} from "../../../../src/interfaces/IJBPermissions.sol";
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {JBController} from "../../../../src/JBController.sol";
5
5
  import {IJBController} from "../../../../src/interfaces/IJBController.sol";
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {JBController} from "../../../../src/JBController.sol";
5
5
  import {JBPermissioned} from "../../../../src/abstract/JBPermissioned.sol";
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {StdStorage, stdStorage} from "forge-std/StdStorage.sol";
5
5
  import {JBController} from "../../../../src/JBController.sol";
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {JBController} from "../../../../src/JBController.sol";
5
5
  import {IJBDirectory} from "../../../../src/interfaces/IJBDirectory.sol";
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {JBController} from "../../../../src/JBController.sol";
5
5
  import {JBPermissioned} from "../../../../src/abstract/JBPermissioned.sol";
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.26;
2
+ pragma solidity 0.8.28;
3
3
 
4
4
  import {JBController} from "../../../../src/JBController.sol";
5
5
  import {IJBTerminal} from "../../../../src/interfaces/IJBTerminal.sol";