@bananapus/core-v6 0.0.37 → 0.0.39

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 (324) hide show
  1. package/foundry.lock +1 -7
  2. package/foundry.toml +1 -1
  3. package/package.json +19 -7
  4. package/src/JBChainlinkV3PriceFeed.sol +4 -1
  5. package/src/JBChainlinkV3SequencerPriceFeed.sol +4 -2
  6. package/src/JBController.sol +71 -44
  7. package/src/JBDeadline.sol +4 -4
  8. package/src/JBDirectory.sol +34 -32
  9. package/src/JBERC20.sol +5 -4
  10. package/src/JBFeelessAddresses.sol +6 -3
  11. package/src/JBFundAccessLimits.sol +25 -21
  12. package/src/JBMultiTerminal.sol +121 -84
  13. package/src/JBPermissions.sol +34 -37
  14. package/src/JBPrices.sol +23 -18
  15. package/src/JBProjects.sol +6 -3
  16. package/src/JBRulesets.sol +44 -41
  17. package/src/JBSplits.sol +18 -16
  18. package/src/JBTerminalStore.sol +32 -25
  19. package/src/JBTokens.sol +36 -26
  20. package/src/abstract/JBControlled.sol +3 -1
  21. package/src/abstract/JBPermissioned.sol +3 -1
  22. package/src/enums/JBApprovalStatus.sol +7 -1
  23. package/src/interfaces/IJBController.sol +7 -3
  24. package/src/interfaces/IJBDirectory.sol +3 -1
  25. package/src/interfaces/IJBMultiTerminal.sol +3 -2
  26. package/src/interfaces/IJBPermissions.sol +2 -1
  27. package/src/interfaces/IJBPrices.sol +3 -1
  28. package/src/interfaces/IJBRulesets.sol +2 -1
  29. package/src/interfaces/IJBSplits.sol +2 -1
  30. package/src/interfaces/IJBTerminal.sol +3 -1
  31. package/src/interfaces/IJBTerminalStore.sol +3 -1
  32. package/src/interfaces/IJBTokens.sol +2 -1
  33. package/src/libraries/JBCashOuts.sol +6 -1
  34. package/src/libraries/JBConstants.sol +12 -3
  35. package/src/libraries/JBCurrencyIds.sol +2 -0
  36. package/src/libraries/JBFees.sol +52 -10
  37. package/src/libraries/JBFixedPointNumber.sol +2 -0
  38. package/src/libraries/JBPayoutSplitGroupLib.sol +7 -4
  39. package/src/libraries/JBRulesetMetadataResolver.sol +4 -0
  40. package/src/libraries/JBSplitGroupIds.sol +2 -1
  41. package/src/libraries/JBSurplus.sol +3 -1
  42. package/src/periphery/JBMatchingPriceFeed.sol +3 -1
  43. package/src/structs/JBAccountingContext.sol +7 -4
  44. package/src/structs/JBFundAccessLimitGroup.sol +10 -17
  45. package/src/structs/JBRuleset.sol +18 -26
  46. package/src/structs/JBRulesetConfig.sol +13 -25
  47. package/src/structs/JBRulesetMetadata.sol +25 -32
  48. package/test/mock/MockMaliciousBeneficiary.sol +15 -15
  49. package/ADMINISTRATION.md +0 -103
  50. package/ARCHITECTURE.md +0 -133
  51. package/AUDIT_INSTRUCTIONS.md +0 -139
  52. package/RISKS.md +0 -215
  53. package/SKILLS.md +0 -55
  54. package/STYLE_GUIDE.md +0 -610
  55. package/USER_JOURNEYS.md +0 -215
  56. package/script/Deploy.s.sol +0 -124
  57. package/script/DeployPeriphery.s.sol +0 -354
  58. package/slither-ci.config.json +0 -10
  59. package/test/AuditFixes.t.sol +0 -808
  60. package/test/ComprehensiveInvariant.t.sol +0 -306
  61. package/test/CoreExploitTests.t.sol +0 -2741
  62. package/test/EconomicSimulation.t.sol +0 -348
  63. package/test/EntryPointPermutations.t.sol +0 -684
  64. package/test/FlashLoanAttacks.t.sol +0 -797
  65. package/test/PermissionEscalation.t.sol +0 -711
  66. package/test/PermissionsInvariant.t.sol +0 -403
  67. package/test/RulesetTransitions.t.sol +0 -713
  68. package/test/SplitLoopTests.t.sol +0 -752
  69. package/test/TestAccessToFunds.sol +0 -2683
  70. package/test/TestAuditResponseDesignProofs.sol +0 -434
  71. package/test/TestCashOut.sol +0 -198
  72. package/test/TestCashOutCountFor.sol +0 -271
  73. package/test/TestCashOutHooks.sol +0 -351
  74. package/test/TestCashOutTimingEdge.sol +0 -241
  75. package/test/TestDataHookFuzzing.sol +0 -524
  76. package/test/TestDurationUnderflow.sol +0 -233
  77. package/test/TestFeeFreeCashOutBypass.sol +0 -949
  78. package/test/TestFeeProcessingFailure.sol +0 -218
  79. package/test/TestFees.sol +0 -619
  80. package/test/TestForwardedTokenConsumption.sol +0 -425
  81. package/test/TestInterfaceSupport.sol +0 -81
  82. package/test/TestJBERC20Inheritance.sol +0 -103
  83. package/test/TestL2SequencerPriceFeed.sol +0 -292
  84. package/test/TestLaunchProject.sol +0 -188
  85. package/test/TestMetaTx.sol +0 -217
  86. package/test/TestMetadataOffsetOverflow.sol +0 -179
  87. package/test/TestMetadataParserLib.sol +0 -471
  88. package/test/TestMigrationHeldFees.sol +0 -255
  89. package/test/TestMintTokensOf.sol +0 -185
  90. package/test/TestMultiTerminalSurplus.sol +0 -348
  91. package/test/TestMultiTokenSurplus.sol +0 -202
  92. package/test/TestMultipleAccessLimits.sol +0 -664
  93. package/test/TestPayBurnRedeemFlow.sol +0 -195
  94. package/test/TestPayHooks.sol +0 -209
  95. package/test/TestPermissions.sol +0 -324
  96. package/test/TestPermissionsEdge.sol +0 -290
  97. package/test/TestPermit2DataHook.t.sol +0 -360
  98. package/test/TestPermit2Terminal.sol +0 -372
  99. package/test/TestRulesetQueueing.sol +0 -1025
  100. package/test/TestRulesetQueuingStress.sol +0 -806
  101. package/test/TestRulesetWeightCaching.sol +0 -178
  102. package/test/TestSplits.sol +0 -391
  103. package/test/TestTerminalMigration.sol +0 -274
  104. package/test/TestTerminalPreviewParity.sol +0 -208
  105. package/test/TestTokenFlow.sol +0 -191
  106. package/test/TestWeightCacheStaleAfterRejection.sol +0 -303
  107. package/test/WeirdTokenTests.t.sol +0 -817
  108. package/test/audit/CashOutReenterPay.t.sol +0 -501
  109. package/test/audit/CodexHeldFeeRounding.t.sol +0 -159
  110. package/test/audit/CodexMigrationFeeFailure.t.sol +0 -163
  111. package/test/audit/CrossTerminalSurplusSpoof.t.sol +0 -140
  112. package/test/audit/CycledSurplusAllowanceReset.t.sol +0 -184
  113. package/test/audit/FeeFreeSurplusLifecycle.t.sol +0 -399
  114. package/test/audit/FeeFreeSurplusStale.t.sol +0 -248
  115. package/test/audit/USDTVoidReturnCompat.t.sol +0 -525
  116. package/test/fork/TestChainlinkPriceFeedFork.sol +0 -254
  117. package/test/fork/TestSequencerPriceFeedFork.sol +0 -168
  118. package/test/fork/TestTerminalPreviewParityFork.sol +0 -108
  119. package/test/formal/BondingCurveProperties.t.sol +0 -420
  120. package/test/formal/FeeProperties.t.sol +0 -252
  121. package/test/invariants/Phase3DeepInvariant.t.sol +0 -412
  122. package/test/invariants/RulesetsInvariant.t.sol +0 -125
  123. package/test/invariants/TerminalStoreInvariant.t.sol +0 -227
  124. package/test/invariants/TokensInvariant.t.sol +0 -195
  125. package/test/invariants/handlers/ComprehensiveHandler.sol +0 -303
  126. package/test/invariants/handlers/EconomicHandler.sol +0 -377
  127. package/test/invariants/handlers/Phase3Handler.sol +0 -443
  128. package/test/invariants/handlers/RulesetsHandler.sol +0 -115
  129. package/test/invariants/handlers/TerminalStoreHandler.sol +0 -151
  130. package/test/invariants/handlers/TokensHandler.sol +0 -126
  131. package/test/regression/HoldFeesCashOutReserved.t.sol +0 -415
  132. package/test/regression/WeightCacheBoundary.t.sol +0 -291
  133. package/test/trees/JBController/burnTokensOf.tree +0 -9
  134. package/test/trees/JBController/claimTokensFor.tree +0 -5
  135. package/test/trees/JBController/deployERC20For.tree +0 -5
  136. package/test/trees/JBController/getRulesetOf.tree +0 -5
  137. package/test/trees/JBController/launchProjectFor.tree +0 -12
  138. package/test/trees/JBController/launchRulesetsFor.tree +0 -8
  139. package/test/trees/JBController/migrateController.tree +0 -12
  140. package/test/trees/JBController/mintTokensOf.tree +0 -12
  141. package/test/trees/JBController/payReservedTokenToTerminal.tree +0 -8
  142. package/test/trees/JBController/receiveMigrationFrom.tree +0 -4
  143. package/test/trees/JBController/sendReservedTokensToSplitsOf.tree +0 -12
  144. package/test/trees/JBController/setMetadataOf.tree +0 -5
  145. package/test/trees/JBController/setSplitGroupsOf.tree +0 -5
  146. package/test/trees/JBController/setTokenFor.tree +0 -5
  147. package/test/trees/JBController/transferCreditsFrom.tree +0 -8
  148. package/test/trees/JBDirectory/primaryTerminalOf.tree +0 -8
  149. package/test/trees/JBDirectory/setControllerOf.tree +0 -11
  150. package/test/trees/JBDirectory/setPrimaryTerminalOf.tree +0 -15
  151. package/test/trees/JBDirectory/setTerminalsOf.tree +0 -11
  152. package/test/trees/JBERC20/initialize.tree +0 -7
  153. package/test/trees/JBERC20/name.tree +0 -5
  154. package/test/trees/JBERC20/nonces.tree +0 -5
  155. package/test/trees/JBERC20/symbol.tree +0 -5
  156. package/test/trees/JBFeelessAddresses/setFeelessAddress.tree +0 -5
  157. package/test/trees/JBFeelessAddresses/supportsInterface.tree +0 -5
  158. package/test/trees/JBFundAccessLimits/payoutLimitOf.tree +0 -5
  159. package/test/trees/JBFundAccessLimits/payoutLimitsOf.tree +0 -8
  160. package/test/trees/JBFundAccessLimits/setFundAccessLimitsFor.tree +0 -18
  161. package/test/trees/JBFundAccessLimits/surplusAllowanceOf.tree +0 -5
  162. package/test/trees/JBFundAccessLimits/surplusAllowancesOf.tree +0 -8
  163. package/test/trees/JBMetadataResolver/getDataFor.tree +0 -8
  164. package/test/trees/JBMultiTerminal/accountingContextsOf.tree +0 -5
  165. package/test/trees/JBMultiTerminal/addAccountingContextsFor.tree +0 -10
  166. package/test/trees/JBMultiTerminal/addToBalanceOf.tree +0 -23
  167. package/test/trees/JBMultiTerminal/cashOutTokensOf.tree +0 -23
  168. package/test/trees/JBMultiTerminal/executePayout.tree +0 -32
  169. package/test/trees/JBMultiTerminal/executeProcessFee.tree +0 -14
  170. package/test/trees/JBMultiTerminal/migrateBalanceOf.tree +0 -12
  171. package/test/trees/JBMultiTerminal/pay.tree +0 -23
  172. package/test/trees/JBMultiTerminal/processHeldFeesOf.tree +0 -8
  173. package/test/trees/JBMultiTerminal/sendPayoutsOf.tree +0 -34
  174. package/test/trees/JBMultiTerminal/useAllowanceOf.tree +0 -16
  175. package/test/trees/JBPermissions/hasPermission.tree +0 -8
  176. package/test/trees/JBPermissions/hasPermissions.tree +0 -8
  177. package/test/trees/JBPermissions/setPermissionsFor.tree +0 -5
  178. package/test/trees/JBPrices/addPriceFeedFor.tree +0 -14
  179. package/test/trees/JBPrices/pricePerUnitOf.tree +0 -11
  180. package/test/trees/JBProjects/createFor.tree +0 -11
  181. package/test/trees/JBProjects/setTokenUriResolver.tree +0 -5
  182. package/test/trees/JBProjects/supportsInterface.tree +0 -9
  183. package/test/trees/JBProjects/tokenURI.tree +0 -5
  184. package/test/trees/JBRulesets/currentApprovalStatusForLatestRulesetOf.tree +0 -8
  185. package/test/trees/JBRulesets/currentOf.tree +0 -12
  186. package/test/trees/JBRulesets/getRulesetOf.tree +0 -5
  187. package/test/trees/JBRulesets/latestQueuedRulesetOf.tree +0 -10
  188. package/test/trees/JBRulesets/rulesetsOf.tree +0 -11
  189. package/test/trees/JBRulesets/upcomingRulesetOf.tree +0 -20
  190. package/test/trees/JBRulesets/updateRulesetWeightCache.tree +0 -5
  191. package/test/trees/JBSplits/setSplitGroupsOf.tree +0 -17
  192. package/test/trees/JBSplits/splitsOf.tree +0 -5
  193. package/test/trees/JBTerminalStore/currentReclaimableSurplusOf.tree +0 -16
  194. package/test/trees/JBTerminalStore/currentSurplusOf.tree +0 -25
  195. package/test/trees/JBTerminalStore/currentTotalSurplusOf.tree +0 -5
  196. package/test/trees/JBTerminalStore/recordCashOutsFor.tree +0 -16
  197. package/test/trees/JBTerminalStore/recordPaymentFrom.tree +0 -14
  198. package/test/trees/JBTerminalStore/recordPayoutFor.tree +0 -10
  199. package/test/trees/JBTerminalStore/recordTerminalMigration.tree +0 -5
  200. package/test/trees/JBTerminalStore/recordUsedAllowanceOf.tree +0 -10
  201. package/test/trees/JBTokens/burnFrom.tree +0 -10
  202. package/test/trees/JBTokens/claimTokensFor.tree +0 -10
  203. package/test/trees/JBTokens/deployERC20For.tree +0 -12
  204. package/test/trees/JBTokens/mintFor.tree +0 -10
  205. package/test/trees/JBTokens/setTokenFor.tree +0 -11
  206. package/test/trees/JBTokens/totalBalanceOf.tree +0 -5
  207. package/test/trees/JBTokens/totalSupplyOf.tree +0 -5
  208. package/test/trees/JBTokens/transferCreditsFrom.tree +0 -8
  209. package/test/trees/mintTokensOf.tree +0 -12
  210. package/test/units/static/JBChainlinkV3PriceFeed/TestPriceFeed.sol +0 -223
  211. package/test/units/static/JBController/JBControllerSetup.sol +0 -50
  212. package/test/units/static/JBController/TestBurnTokensOf.sol +0 -114
  213. package/test/units/static/JBController/TestClaimTokensFor.sol +0 -63
  214. package/test/units/static/JBController/TestDeployErc20For.sol +0 -86
  215. package/test/units/static/JBController/TestLaunchProjectFor.sol +0 -302
  216. package/test/units/static/JBController/TestLaunchRulesetsFor.sol +0 -342
  217. package/test/units/static/JBController/TestMigrateController.sol +0 -157
  218. package/test/units/static/JBController/TestMintTokensOfUnits.sol +0 -111
  219. package/test/units/static/JBController/TestOmnichainRulesetOperator.sol +0 -324
  220. package/test/units/static/JBController/TestPayReservedTokenToTerminal.sol +0 -74
  221. package/test/units/static/JBController/TestPreviewMintOf.sol +0 -117
  222. package/test/units/static/JBController/TestReceiveMigrationFrom.sol +0 -99
  223. package/test/units/static/JBController/TestRulesetViews.sol +0 -225
  224. package/test/units/static/JBController/TestSendReservedTokensToSplitsOf.sol +0 -615
  225. package/test/units/static/JBController/TestSetSplitGroupsOf.sol +0 -68
  226. package/test/units/static/JBController/TestSetTokenFor.sol +0 -239
  227. package/test/units/static/JBController/TestSetUriOf.sol +0 -57
  228. package/test/units/static/JBController/TestTransferCreditsFrom.sol +0 -169
  229. package/test/units/static/JBDeadline/TestDeadlineFuzz.sol +0 -211
  230. package/test/units/static/JBDirectory/JBDirectorySetup.sol +0 -26
  231. package/test/units/static/JBDirectory/TestPrimaryTerminalOf.sol +0 -126
  232. package/test/units/static/JBDirectory/TestSetControllerOf.sol +0 -183
  233. package/test/units/static/JBDirectory/TestSetControllerOfMigrationOrder.sol +0 -104
  234. package/test/units/static/JBDirectory/TestSetPrimaryTerminalOf.sol +0 -179
  235. package/test/units/static/JBDirectory/TestSetTerminalsOf.sol +0 -137
  236. package/test/units/static/JBERC20/JBERC20Setup.sol +0 -34
  237. package/test/units/static/JBERC20/SigUtils.sol +0 -36
  238. package/test/units/static/JBERC20/TestInitialize.sol +0 -60
  239. package/test/units/static/JBERC20/TestName.sol +0 -30
  240. package/test/units/static/JBERC20/TestNonces.sol +0 -62
  241. package/test/units/static/JBERC20/TestSymbol.sol +0 -31
  242. package/test/units/static/JBFeelessAdresses/JBFeelessSetup.sol +0 -22
  243. package/test/units/static/JBFeelessAdresses/TestInterfaces.sol +0 -30
  244. package/test/units/static/JBFeelessAdresses/TestSetFeelessAddress.sol +0 -35
  245. package/test/units/static/JBFees/TestFeesFuzz.sol +0 -79
  246. package/test/units/static/JBFixedPointNumber/TestAdjustDecimals.sol +0 -16
  247. package/test/units/static/JBFixedPointNumber/TestAdjustDecimalsFuzz.sol +0 -71
  248. package/test/units/static/JBFundAccessLimits/JBFundAccessSetup.sol +0 -24
  249. package/test/units/static/JBFundAccessLimits/TestFundAccessLimitsEdge.sol +0 -163
  250. package/test/units/static/JBFundAccessLimits/TestPayoutLimitOf.sol +0 -59
  251. package/test/units/static/JBFundAccessLimits/TestPayoutLimitsOf.sol +0 -101
  252. package/test/units/static/JBFundAccessLimits/TestSetFundAccessLimitsFor.sol +0 -189
  253. package/test/units/static/JBFundAccessLimits/TestSurplusAllowanceOf.sol +0 -64
  254. package/test/units/static/JBFundAccessLimits/TestSurplusAllowancesOf.sol +0 -102
  255. package/test/units/static/JBMetadataResolver/TestGetDataFor.sol +0 -90
  256. package/test/units/static/JBMetadataResolver/TestMetadataResolverEdgeCases.sol +0 -247
  257. package/test/units/static/JBMetadataResolver/TestMetadataResolverFuzz.sol +0 -229
  258. package/test/units/static/JBMultiTerminal/JBMultiTerminalSetup.sol +0 -50
  259. package/test/units/static/JBMultiTerminal/TestAccountingContextsOf.sol +0 -72
  260. package/test/units/static/JBMultiTerminal/TestAddAccountingContextsFor.sol +0 -289
  261. package/test/units/static/JBMultiTerminal/TestAddToBalanceOf.sol +0 -474
  262. package/test/units/static/JBMultiTerminal/TestCashOutTokensOf.sol +0 -624
  263. package/test/units/static/JBMultiTerminal/TestExecutePayout.sol +0 -578
  264. package/test/units/static/JBMultiTerminal/TestExecuteProcessFee.sol +0 -202
  265. package/test/units/static/JBMultiTerminal/TestMigrateBalanceOf.sol +0 -222
  266. package/test/units/static/JBMultiTerminal/TestPay.sol +0 -604
  267. package/test/units/static/JBMultiTerminal/TestPreviewCashOutFrom.sol +0 -117
  268. package/test/units/static/JBMultiTerminal/TestPreviewPayFor.sol +0 -114
  269. package/test/units/static/JBMultiTerminal/TestProcessHeldFeesOf.sol +0 -228
  270. package/test/units/static/JBMultiTerminal/TestSelfPayRevert.sol +0 -55
  271. package/test/units/static/JBMultiTerminal/TestSendPayoutsOf.sol +0 -257
  272. package/test/units/static/JBMultiTerminal/TestUseAllowanceOf.sol +0 -611
  273. package/test/units/static/JBPermissions/JBPermissionsSetup.sol +0 -20
  274. package/test/units/static/JBPermissions/TestHasPermission.sol +0 -50
  275. package/test/units/static/JBPermissions/TestHasPermissions.sol +0 -93
  276. package/test/units/static/JBPermissions/TestSetPermissionsFor.sol +0 -64
  277. package/test/units/static/JBPrices/JBPricesSetup.sol +0 -32
  278. package/test/units/static/JBPrices/TestAddPriceFeedFor.sol +0 -107
  279. package/test/units/static/JBPrices/TestPricePerUnitOf.sol +0 -132
  280. package/test/units/static/JBPrices/TestPrices.sol +0 -265
  281. package/test/units/static/JBProjects/JBProjectsSetup.sol +0 -22
  282. package/test/units/static/JBProjects/TestCreateFor.sol +0 -71
  283. package/test/units/static/JBProjects/TestInitialProject.sol +0 -21
  284. package/test/units/static/JBProjects/TestInterfaces.sol +0 -26
  285. package/test/units/static/JBProjects/TestSetResolver.sol +0 -37
  286. package/test/units/static/JBProjects/TestTokenUri.sol +0 -40
  287. package/test/units/static/JBRulesetMetadataResolver/TestSetCashOutTaxRateTo.sol +0 -108
  288. package/test/units/static/JBRulesets/JBRulesetsSetup.sol +0 -24
  289. package/test/units/static/JBRulesets/TestCurrentApprovalStatusForLatestRulesetOf.sol +0 -265
  290. package/test/units/static/JBRulesets/TestCurrentOf.sol +0 -242
  291. package/test/units/static/JBRulesets/TestGetRulesetOf.sol +0 -100
  292. package/test/units/static/JBRulesets/TestLatestQueuedRulesetOf.sol +0 -260
  293. package/test/units/static/JBRulesets/TestRulesets.sol +0 -632
  294. package/test/units/static/JBRulesets/TestRulesetsOf.sol +0 -37
  295. package/test/units/static/JBRulesets/TestUpcomingRulesetOf.sol +0 -522
  296. package/test/units/static/JBRulesets/TestUpdateRulesetWeightCache.sol +0 -96
  297. package/test/units/static/JBSplits/JBSplitsSetup.sol +0 -26
  298. package/test/units/static/JBSplits/TestSelfManagedSplitGroups.sol +0 -552
  299. package/test/units/static/JBSplits/TestSetSplitGroupsOf.sol +0 -377
  300. package/test/units/static/JBSplits/TestSplitsLockedEdge.sol +0 -267
  301. package/test/units/static/JBSplits/TestSplitsOf.sol +0 -24
  302. package/test/units/static/JBSplits/TestSplitsPacking.sol +0 -36
  303. package/test/units/static/JBSurplus/TestSurplusFuzz.sol +0 -160
  304. package/test/units/static/JBTerminalStore/JBTerminalStoreSetup.sol +0 -45
  305. package/test/units/static/JBTerminalStore/TestCurrentReclaimableSurplusOf.sol +0 -536
  306. package/test/units/static/JBTerminalStore/TestCurrentSurplusOf.sol +0 -463
  307. package/test/units/static/JBTerminalStore/TestCurrentTotalSurplusOf.sol +0 -135
  308. package/test/units/static/JBTerminalStore/TestPreviewCashOutFrom.sol +0 -476
  309. package/test/units/static/JBTerminalStore/TestPreviewPayFrom.sol +0 -494
  310. package/test/units/static/JBTerminalStore/TestRecordCashOutsFor.sol +0 -652
  311. package/test/units/static/JBTerminalStore/TestRecordPaymentFrom.sol +0 -744
  312. package/test/units/static/JBTerminalStore/TestRecordPayoutFor.sol +0 -289
  313. package/test/units/static/JBTerminalStore/TestRecordTerminalMigration.sol +0 -138
  314. package/test/units/static/JBTerminalStore/TestRecordUsedAllowanceOf.sol +0 -415
  315. package/test/units/static/JBTerminalStore/TestUint224Overflow.sol +0 -219
  316. package/test/units/static/JBTokens/JBTokensSetup.sol +0 -32
  317. package/test/units/static/JBTokens/TestBurnFrom.sol +0 -107
  318. package/test/units/static/JBTokens/TestClaimTokensFor.sol +0 -110
  319. package/test/units/static/JBTokens/TestDeployERC20ForUnits.sol +0 -92
  320. package/test/units/static/JBTokens/TestMintFor.sol +0 -100
  321. package/test/units/static/JBTokens/TestSetTokenFor.sol +0 -98
  322. package/test/units/static/JBTokens/TestTotalBalanceOf.sol +0 -65
  323. package/test/units/static/JBTokens/TestTotalSupplyOf.sol +0 -56
  324. package/test/units/static/JBTokens/TestTransferCreditsFrom.sol +0 -56
@@ -1,93 +0,0 @@
1
- // SPDX-License-Identifier: MIT
2
- pragma solidity 0.8.28;
3
-
4
- import {JBPermissions} from "../../../../src/JBPermissions.sol";
5
- import {JBPermissionsSetup} from "./JBPermissionsSetup.sol";
6
-
7
- contract TestHasPermissions_Local is JBPermissionsSetup {
8
- address _op = makeAddr("operator");
9
- address _account = makeAddr("account");
10
- uint256 _projectId = 1;
11
- uint256[] _permissionsArray = [256, 256];
12
-
13
- function setUp() public {
14
- super.permissionsSetup();
15
- }
16
-
17
- function test_WhenAnyPermissionIdGt255() external {
18
- // it will revert with PERMISSION_ID_OUT_OF_BOUNDS
19
- vm.expectRevert(abi.encodeWithSelector(JBPermissions.JBPermissions_PermissionIdOutOfBounds.selector, 256));
20
- _permissions.hasPermissions(_op, _account, _projectId, _permissionsArray, true, true);
21
- }
22
-
23
- modifier whenAllPermissionIdsLt255() {
24
- _permissionsArray = [1, 2, 3];
25
- _;
26
- }
27
-
28
- function test_GivenOperatorDoesNotHaveAllPermissionsSpecified() external whenAllPermissionIdsLt255 {
29
- // it will return false
30
- uint256 permissions = 1 << 1;
31
-
32
- // Find the storage slot
33
- bytes32 permissionsOfSlot = keccak256(abi.encode(_op, uint256(0)));
34
- bytes32 accountSlot = keccak256(abi.encode(_account, uint256(permissionsOfSlot)));
35
- bytes32 slot = keccak256(abi.encode(_projectId, accountSlot));
36
-
37
- // Set storage
38
- vm.store(address(_permissions), slot, bytes32(permissions));
39
-
40
- bool hasAll = _permissions.hasPermissions(_op, _account, _projectId, _permissionsArray, false, true);
41
- assertEq(hasAll, false);
42
- }
43
-
44
- function test_GivenOperatorHasAllPermissionsSpecified() external whenAllPermissionIdsLt255 {
45
- // it will return true
46
- uint256 permissions = 1 << 1;
47
- permissions |= 1 << 2;
48
- permissions |= 1 << 3;
49
-
50
- // Find the storage slot
51
- bytes32 permissionsOfSlot = keccak256(abi.encode(_op, uint256(0)));
52
- bytes32 accountSlot = keccak256(abi.encode(_account, uint256(permissionsOfSlot)));
53
- bytes32 slot = keccak256(abi.encode(_projectId, accountSlot));
54
-
55
- // Set storage
56
- vm.store(address(_permissions), slot, bytes32(permissions));
57
-
58
- bool hasAll = _permissions.hasPermissions(_op, _account, _projectId, _permissionsArray, false, false);
59
- assertEq(hasAll, true);
60
- }
61
-
62
- function test_GivenOperatorHasAllPermissionsSpecifiedCounterCase() external whenAllPermissionIdsLt255 {
63
- // it will return false
64
- uint256 permissions = 1 << 1;
65
- permissions |= 1 << 5;
66
- permissions |= 1 << 7;
67
-
68
- // Find the storage slot
69
- bytes32 permissionsOfSlot = keccak256(abi.encode(_op, uint256(0)));
70
- bytes32 accountSlot = keccak256(abi.encode(_account, uint256(permissionsOfSlot)));
71
- bytes32 slot = keccak256(abi.encode(_projectId, accountSlot));
72
-
73
- // Set storage
74
- vm.store(address(_permissions), slot, bytes32(permissions));
75
-
76
- bool hasAll = _permissions.hasPermissions(_op, _account, _projectId, _permissionsArray, true, true);
77
- bool hasAll2 = _permissions.hasPermissions(_op, _account, _projectId, _permissionsArray, false, false);
78
- bool hasAll3 = _permissions.hasPermissions(_op, _account, _projectId, _permissionsArray, true, false);
79
- bool hasAll4 = _permissions.hasPermissions(_op, _account, _projectId, _permissionsArray, false, true);
80
-
81
- // True as it includes root
82
- assertEq(hasAll, true);
83
-
84
- // Does not include root
85
- assertEq(hasAll2, false);
86
-
87
- // True as it includes root
88
- assertEq(hasAll3, true);
89
-
90
- // Does not include root
91
- assertEq(hasAll4, false);
92
- }
93
- }
@@ -1,64 +0,0 @@
1
- // SPDX-License-Identifier: MIT
2
- pragma solidity 0.8.28;
3
-
4
- import {JBPermissions} from "../../../../src/JBPermissions.sol";
5
- import {JBPermissionsData} from "../../../../src/structs/JBPermissionsData.sol";
6
- import {JBPermissionIds} from "@bananapus/permission-ids-v6/src/JBPermissionIds.sol";
7
- import {JBPermissionsSetup} from "./JBPermissionsSetup.sol";
8
-
9
- contract TestSetPermissionsFor_Local is JBPermissionsSetup {
10
- address _op = makeAddr("operator");
11
- address _account = makeAddr("account");
12
- uint64 _projectId = 1;
13
-
14
- function setUp() public {
15
- super.permissionsSetup();
16
- }
17
-
18
- function test_WhenCallerDoesNotHavePermission() external {
19
- // it will revert UNAUTHORIZED
20
- JBPermissionsData memory emptyData;
21
-
22
- vm.expectRevert(
23
- abi.encodeWithSelector(
24
- JBPermissions.JBPermissions_Unauthorized.selector, _account, address(this), 0, JBPermissionIds.ROOT
25
- )
26
- );
27
- _permissions.setPermissionsFor(_account, emptyData);
28
- }
29
-
30
- function test_WhenCallerHasPermission() external {
31
- // it packs permissions into a bitfield, stores them, and emits OperatorPermissionsSet
32
-
33
- // used to set our root privelage and act as our counter case later
34
- uint256 permissions = 1 << 1;
35
-
36
- // Find the storage slot
37
- bytes32 permissionsOfSlot = keccak256(abi.encode(_op, uint256(0)));
38
- bytes32 accountSlot = keccak256(abi.encode(_account, uint256(permissionsOfSlot)));
39
- bytes32 slot = keccak256(abi.encode(_projectId, accountSlot));
40
-
41
- // Set storage: this contract can set permissions as ROOT
42
- vm.store(address(_permissions), slot, bytes32(permissions));
43
-
44
- uint8[] memory array = new uint8[](3);
45
- array[0] = 1;
46
- array[1] = 2;
47
- array[2] = 3;
48
-
49
- JBPermissionsData memory data = JBPermissionsData({operator: _op, projectId: _projectId, permissionIds: array});
50
-
51
- // call it
52
- vm.prank(_account);
53
- _permissions.setPermissionsFor(_account, data);
54
-
55
- // permissions that were set during the call
56
- uint256 afterSet = _permissions.permissionsOf(_op, _account, _projectId);
57
-
58
- // add missing permissions to our counter case "permissions" which we used to assign root access earlier
59
- permissions |= 1 << 2;
60
- permissions |= 1 << 3;
61
-
62
- assertEq(afterSet, permissions);
63
- }
64
- }
@@ -1,32 +0,0 @@
1
- // SPDX-License-Identifier: MIT
2
- pragma solidity 0.8.28;
3
-
4
- import {JBPrices} from "../../../../src/JBPrices.sol";
5
- import {IJBDirectory} from "../../../../src/interfaces/IJBDirectory.sol";
6
- import {IJBPermissions} from "../../../../src/interfaces/IJBPermissions.sol";
7
- import {IJBPrices} from "../../../../src/interfaces/IJBPrices.sol";
8
- import {IJBProjects} from "../../../../src/interfaces/IJBProjects.sol";
9
- import {IJBRulesets} from "../../../../src/interfaces/IJBRulesets.sol";
10
- import {JBTest} from "../../../helpers/JBTest.sol";
11
-
12
- /*
13
- Contract that deploys a target contract with other mock contracts to satisfy the constructor.
14
- Tests relative to this contract will be dependent on mock calls/emits and stdStorage.
15
- */
16
- contract JBPricesSetup is JBTest {
17
- address _owner = makeAddr("owner");
18
-
19
- // Mocks
20
- IJBPermissions public permissions = IJBPermissions(makeAddr("permissions"));
21
- IJBProjects public projects = IJBProjects(makeAddr("projects"));
22
- IJBDirectory public directory = IJBDirectory(makeAddr("directory"));
23
- IJBRulesets public rulesets = IJBRulesets(makeAddr("rulesets"));
24
-
25
- // Target Contract
26
- IJBPrices public _prices;
27
-
28
- function pricesSetup() public virtual {
29
- // Instantiate the contract being tested
30
- _prices = new JBPrices(directory, permissions, projects, _owner, address(0));
31
- }
32
- }
@@ -1,107 +0,0 @@
1
- // SPDX-License-Identifier: MIT
2
- pragma solidity 0.8.28;
3
-
4
- import {JBPrices} from "../../../../src/JBPrices.sol";
5
- import {IJBDirectory} from "../../../../src/interfaces/IJBDirectory.sol";
6
- import {IJBPriceFeed} from "../../../../src/interfaces/IJBPriceFeed.sol";
7
- import {IJBPrices} from "../../../../src/interfaces/IJBPrices.sol";
8
- import {JBConstants} from "../../../../src/libraries/JBConstants.sol";
9
- import {JBPricesSetup} from "./JBPricesSetup.sol";
10
-
11
- contract TestAddPriceFeedFor_Local is JBPricesSetup {
12
- IJBPriceFeed _feed = IJBPriceFeed(makeAddr("feed"));
13
- // forge-lint: disable-next-line(mixed-case-variable)
14
- uint256 DEFAULT_PROJECT_ID = 0;
15
- uint256 _projectId = 1;
16
- address _projectOneOwner = makeAddr("oneOwner");
17
- uint256 _pricingCurrency = uint32(uint160(JBConstants.NATIVE_TOKEN));
18
- uint256 _unitCurrency = uint32(uint160(makeAddr("someToken")));
19
- uint256 _invalidCurrency = 0;
20
-
21
- function setUp() public {
22
- super.pricesSetup();
23
- }
24
-
25
- function test_WhenProjectIdIsTheDEFAULT_PROJECT_IDAndMsgSenderIsTheOwnerOfJBPrices() external {
26
- // it should add the price feed without checking permissions
27
-
28
- vm.prank(_owner);
29
- _prices.addPriceFeedFor(DEFAULT_PROJECT_ID, _pricingCurrency, _unitCurrency, _feed);
30
- }
31
-
32
- function test_WhenProjectIdIsTheDEFAULT_PROJECT_IDAndMsgSenderIsTheOwnerOfProjectZero() external {
33
- // it should add the price feed
34
- vm.prank(_owner);
35
- _prices.addPriceFeedFor(DEFAULT_PROJECT_ID, _pricingCurrency, _unitCurrency, _feed);
36
- }
37
-
38
- function test_WhenProjectIdIsTheDEFAULT_PROJECT_IDAndMsgSenderIsNotTheOwnerOfProjectZero() external {
39
- // it should revert ONLY_OWNER()
40
-
41
- // encode custom error
42
- bytes4 selector = bytes4(keccak256("OwnableUnauthorizedAccount(address)"));
43
- bytes memory expectedError = abi.encodeWithSelector(selector, address(this));
44
-
45
- vm.expectRevert(expectedError);
46
- _prices.addPriceFeedFor(DEFAULT_PROJECT_ID, _pricingCurrency, _unitCurrency, _feed);
47
- }
48
-
49
- modifier whenProjectIsNotDefaultAndHasPermissions() {
50
- // mock controllerOf call
51
- mockExpect(
52
- address(directory), abi.encodeCall(IJBDirectory.controllerOf, (_projectId)), abi.encode(address(this))
53
- );
54
- _;
55
- }
56
-
57
- function test_WhenProjectIdIsNotTheDEFAULT_PROJECT_ID() external whenProjectIsNotDefaultAndHasPermissions {
58
- // it should require ADD_PRICE_FEED permission from the project's owner or an operator
59
-
60
- _prices.addPriceFeedFor(_projectId, _pricingCurrency, _unitCurrency, _feed);
61
- }
62
-
63
- function test_WhenPricingCurrencyOrUnitCurrencyIs0() external whenProjectIsNotDefaultAndHasPermissions {
64
- // it should revert with INVALID_CURRENCY
65
-
66
- vm.expectRevert(JBPrices.JBPrices_ZeroPricingCurrency.selector);
67
- _prices.addPriceFeedFor(_projectId, _invalidCurrency, _unitCurrency, _feed);
68
-
69
- vm.expectRevert(JBPrices.JBPrices_ZeroUnitCurrency.selector);
70
- _prices.addPriceFeedFor(_projectId, _pricingCurrency, _invalidCurrency, _feed);
71
- }
72
-
73
- function test_WhenADefaultFeedForTheCurrencyPairOrItsInverseAlreadyExists()
74
- external
75
- whenProjectIsNotDefaultAndHasPermissions
76
- {
77
- // it should revert with PRICE_FEED_ALREADY_EXISTS
78
-
79
- vm.prank(_owner);
80
- _prices.addPriceFeedFor(DEFAULT_PROJECT_ID, _pricingCurrency, _unitCurrency, _feed);
81
-
82
- vm.expectRevert(abi.encodeWithSelector(JBPrices.JBPrices_PriceFeedAlreadyExists.selector, _feed));
83
- _prices.addPriceFeedFor(_projectId, _pricingCurrency, _unitCurrency, _feed);
84
- }
85
-
86
- function test_WhenThisProjectAlreadyHasFeedsForTheCurrencyPairOrItsInverse()
87
- external
88
- whenProjectIsNotDefaultAndHasPermissions
89
- {
90
- // it should revert with PRICE_FEED_ALREADY_EXISTS
91
-
92
- _prices.addPriceFeedFor(_projectId, _pricingCurrency, _unitCurrency, _feed);
93
-
94
- vm.expectRevert(abi.encodeWithSelector(JBPrices.JBPrices_PriceFeedAlreadyExists.selector, _feed));
95
- _prices.addPriceFeedFor(_projectId, _pricingCurrency, _unitCurrency, _feed);
96
- }
97
-
98
- function test_HappyPath() external whenProjectIsNotDefaultAndHasPermissions {
99
- // it should store the feed for the project and currency pair
100
- // it should emit AddPriceFeed event with projectId, pricingCurrency, unitCurrency, and feed
101
-
102
- vm.expectEmit();
103
- emit IJBPrices.AddPriceFeed(_projectId, _pricingCurrency, _unitCurrency, _feed, address(this));
104
-
105
- _prices.addPriceFeedFor(_projectId, _pricingCurrency, _unitCurrency, _feed);
106
- }
107
- }
@@ -1,132 +0,0 @@
1
- // SPDX-License-Identifier: MIT
2
- pragma solidity 0.8.28;
3
-
4
- import {JBPrices} from "../../../../src/JBPrices.sol";
5
- import {IJBPriceFeed} from "../../../../src/interfaces/IJBPriceFeed.sol";
6
- import {JBConstants} from "../../../../src/libraries/JBConstants.sol";
7
- import {JBPricesSetup} from "./JBPricesSetup.sol";
8
-
9
- contract TestPricePerUnitOf_Local is JBPricesSetup {
10
- IJBPriceFeed _feed = IJBPriceFeed(makeAddr("priceFeed"));
11
- // forge-lint: disable-next-line(mixed-case-variable)
12
- uint256 DEFAULT_PROJECT_ID = 0;
13
- uint256 _projectId = 1;
14
- uint256 _defaultDirectPrice = 1_000_000_000;
15
- uint256 _directPrice = 2_000_000_000;
16
- uint256 _inversePrice = 1e18;
17
- uint256 _directDecimals = 18;
18
- uint256 _inverseDecimals = 6;
19
- uint256 _pricingCurrency = uint32(uint160(JBConstants.NATIVE_TOKEN));
20
- uint256 _unitCurrency = uint32(uint160(makeAddr("someToken")));
21
-
22
- function setUp() public {
23
- super.pricesSetup();
24
- }
25
-
26
- modifier givenDirectFeedExists() {
27
- // Find the storage slot
28
- bytes32 priceFeedForSlot = keccak256(abi.encode(_projectId, uint256(1)));
29
- bytes32 pricingSlot = keccak256(abi.encode(_pricingCurrency, uint256(priceFeedForSlot)));
30
- bytes32 slot = keccak256(abi.encode(_unitCurrency, uint256(pricingSlot)));
31
-
32
- bytes32 feedBytes = bytes32(uint256(uint160(address(_feed))));
33
-
34
- // Set direct price feed
35
- vm.store(address(_prices), slot, feedBytes);
36
-
37
- // Confirm price feed was set
38
- IJBPriceFeed feed = _prices.priceFeedFor(_projectId, _pricingCurrency, _unitCurrency);
39
- assertEq(address(feed), address(_feed));
40
-
41
- bytes memory currentUnitPriceCall = abi.encodeCall(IJBPriceFeed.currentUnitPrice, (_inverseDecimals));
42
- bytes memory directReturned = abi.encode(_directPrice);
43
-
44
- mockExpect(address(feed), currentUnitPriceCall, directReturned);
45
- _;
46
- }
47
-
48
- modifier givenIndirectFeedExists() {
49
- // Find the storage slot
50
- bytes32 priceFeedForSlot = keccak256(abi.encode(_projectId, uint256(1)));
51
- bytes32 pricingSlot = keccak256(abi.encode(_unitCurrency, uint256(priceFeedForSlot)));
52
- bytes32 slot = keccak256(abi.encode(_pricingCurrency, uint256(pricingSlot)));
53
-
54
- bytes32 feedBytes = bytes32(uint256(uint160(address(_feed))));
55
-
56
- // Set indirect price feed
57
- vm.store(address(_prices), slot, feedBytes);
58
-
59
- // Confirm price feed was set
60
- IJBPriceFeed feed = _prices.priceFeedFor(_projectId, _unitCurrency, _pricingCurrency);
61
- assertEq(address(feed), address(_feed));
62
-
63
- bytes memory currentUnitPriceCall = abi.encodeCall(IJBPriceFeed.currentUnitPrice, (_directDecimals));
64
- bytes memory directReturned = abi.encode(_inversePrice);
65
-
66
- mockExpect(address(feed), currentUnitPriceCall, directReturned);
67
- _;
68
- }
69
-
70
- modifier givenOnlyDefaultDirectFeedExists() {
71
- // Find the storage slot
72
- bytes32 priceFeedForSlot = keccak256(abi.encode(DEFAULT_PROJECT_ID, uint256(1)));
73
- bytes32 pricingSlot = keccak256(abi.encode(_pricingCurrency, uint256(priceFeedForSlot)));
74
- bytes32 slot = keccak256(abi.encode(_unitCurrency, uint256(pricingSlot)));
75
-
76
- bytes32 feedBytes = bytes32(uint256(uint160(address(_feed))));
77
-
78
- // Set direct price feed
79
- vm.store(address(_prices), slot, feedBytes);
80
-
81
- // Confirm price feed was set
82
- IJBPriceFeed feed = _prices.priceFeedFor(DEFAULT_PROJECT_ID, _pricingCurrency, _unitCurrency);
83
- assertEq(address(feed), address(_feed));
84
-
85
- bytes memory currentUnitPriceCall = abi.encodeCall(IJBPriceFeed.currentUnitPrice, (_inverseDecimals));
86
- bytes memory directReturned = abi.encode(_defaultDirectPrice);
87
-
88
- mockExpect(address(feed), currentUnitPriceCall, directReturned);
89
- _;
90
- }
91
-
92
- function test_WhenPricingCurrencyIsTheSameAsUnitCurrency() external view {
93
- // it should return 1 with requested decimals
94
-
95
- uint256 price = _prices.pricePerUnitOf(_projectId, _pricingCurrency, _pricingCurrency, 18);
96
- assertEq(price, 1e18);
97
- }
98
-
99
- function test_WhenPriceFeedExistsForProjectIdAndPricingCurrencyToUnitCurrency() external givenDirectFeedExists {
100
- // it should return the current price from price feed
101
-
102
- uint256 pricesPrice = _prices.pricePerUnitOf(_projectId, _pricingCurrency, _unitCurrency, 6);
103
- assertEq(pricesPrice, _directPrice);
104
- }
105
-
106
- function test_WhenInversePriceFeedExistsForProjectIdAndUnitCurrencyToPricingCurrency()
107
- external
108
- givenIndirectFeedExists
109
- {
110
- // it should return the inverse of the current price from inverse price feed
111
-
112
- uint256 inversePrice = _prices.pricePerUnitOf(_projectId, _pricingCurrency, _unitCurrency, 18);
113
- assertEq(inversePrice, _inversePrice);
114
- }
115
-
116
- function test_WhenProjectIdIsNotTheDEFAULT_PROJECT_IDAndNoDirectOrInversePriceFeedIsFound()
117
- external
118
- givenOnlyDefaultDirectFeedExists
119
- {
120
- // it should attempt to use the default price feed for DEFAULT_PROJECT_ID
121
-
122
- uint256 defaultPrice = _prices.pricePerUnitOf(_projectId, _pricingCurrency, _unitCurrency, 6);
123
- assertEq(defaultPrice, _defaultDirectPrice);
124
- }
125
-
126
- function test_WhenNoPriceFeedIsFoundOrExistsIncludingDefaultCase() external {
127
- // it should revert with PRICE_FEED_NOT_FOUND
128
-
129
- vm.expectRevert(JBPrices.JBPrices_PriceFeedNotFound.selector);
130
- _prices.pricePerUnitOf(_projectId, _pricingCurrency, _unitCurrency, 6);
131
- }
132
- }