@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,291 +0,0 @@
1
- // SPDX-License-Identifier: MIT
2
- pragma solidity >=0.8.6;
3
-
4
- import {TestBaseWorkflow} from "../helpers/TestBaseWorkflow.sol";
5
- import {IJBController} from "../../src/interfaces/IJBController.sol";
6
- import {IJBRulesets} from "../../src/interfaces/IJBRulesets.sol";
7
- import {IJBRulesetApprovalHook} from "../../src/interfaces/IJBRulesetApprovalHook.sol";
8
- import {JBConstants} from "../../src/libraries/JBConstants.sol";
9
- import {JBRulesetMetadata} from "../../src/structs/JBRulesetMetadata.sol";
10
- import {JBRulesetConfig} from "../../src/structs/JBRulesetConfig.sol";
11
- import {JBRuleset} from "../../src/structs/JBRuleset.sol";
12
- import {JBSplitGroup} from "../../src/structs/JBSplitGroup.sol";
13
- import {JBFundAccessLimitGroup} from "../../src/structs/JBFundAccessLimitGroup.sol";
14
- import {JBTerminalConfig} from "../../src/structs/JBTerminalConfig.sol";
15
- import {JBRulesets} from "../../src/JBRulesets.sol";
16
-
17
- import {mulDiv} from "@prb/math/src/Common.sol";
18
-
19
- /// @notice Deterministic (non-fuzz) tests for the JBRulesets weight cache at the 20,000 iteration boundary.
20
- /// The contract reverts with `JBRulesets_WeightCacheRequired` when the cycle gap exceeds the threshold
21
- /// and the cache has not been populated. These tests verify:
22
- /// 1. Exactly 20,000 cycles work without cache.
23
- /// 2. 20,001 cycles revert without cache.
24
- /// 3. Progressive `updateRulesetWeightCache()` calls unblock the revert.
25
- /// 4. The cached weight equals the iteratively computed weight.
26
- contract WeightCacheBoundary_Local is TestBaseWorkflow {
27
- uint256 private constant _THRESHOLD = 20_000;
28
-
29
- /// @dev 1-second duration makes each cycle = 1 second, so we can hit the boundary fast.
30
- uint32 private constant _DURATION = 1;
31
-
32
- /// @dev Tiny weight cut (0.1%) so the weight doesn't decay to zero over 20k cycles.
33
- uint32 private constant _WEIGHT_CUT_PERCENT = 1_000_000; // 0.1% of MAX_WEIGHT_CUT_PERCENT (1e9)
34
-
35
- uint112 private constant _INITIAL_WEIGHT = 1000e18;
36
-
37
- IJBController private _controller;
38
- IJBRulesets private _rulesets;
39
- address private _projectOwner;
40
-
41
- JBRulesetMetadata private _metadata;
42
-
43
- function setUp() public override {
44
- super.setUp();
45
-
46
- _projectOwner = multisig();
47
- _rulesets = jbRulesets();
48
- _controller = jbController();
49
-
50
- _metadata = JBRulesetMetadata({
51
- reservedPercent: 0,
52
- cashOutTaxRate: 0,
53
- baseCurrency: uint32(uint160(JBConstants.NATIVE_TOKEN)),
54
- pausePay: false,
55
- pauseCreditTransfers: false,
56
- allowOwnerMinting: false,
57
- allowSetCustomToken: false,
58
- allowTerminalMigration: false,
59
- allowSetTerminals: false,
60
- ownerMustSendPayouts: false,
61
- allowSetController: false,
62
- allowAddAccountingContext: true,
63
- allowAddPriceFeed: false,
64
- holdFees: false,
65
- useTotalSurplusForCashOuts: true,
66
- useDataHookForPay: false,
67
- useDataHookForCashOut: false,
68
- dataHook: address(0),
69
- metadata: 0
70
- });
71
- }
72
-
73
- /// @dev Helper: launch a project with a 1-second duration and the given weight cut percent.
74
- function _launchProject() internal returns (uint256 projectId) {
75
- JBRulesetConfig[] memory configs = new JBRulesetConfig[](1);
76
- configs[0].mustStartAtOrAfter = 0;
77
- configs[0].duration = _DURATION;
78
- configs[0].weight = _INITIAL_WEIGHT;
79
- configs[0].weightCutPercent = _WEIGHT_CUT_PERCENT;
80
- configs[0].approvalHook = IJBRulesetApprovalHook(address(0));
81
- configs[0].metadata = _metadata;
82
- configs[0].splitGroups = new JBSplitGroup[](0);
83
- configs[0].fundAccessLimitGroups = new JBFundAccessLimitGroup[](0);
84
-
85
- projectId = _controller.launchProjectFor({
86
- owner: _projectOwner,
87
- projectUri: "weightCacheBoundary",
88
- rulesetConfigurations: configs,
89
- terminalConfigurations: new JBTerminalConfig[](0),
90
- memo: ""
91
- });
92
- }
93
-
94
- /// @dev Compute expected weight by iterating the cut percent `n` times on the initial weight.
95
- function _expectedWeight(uint256 n) internal pure returns (uint256 weight) {
96
- weight = _INITIAL_WEIGHT;
97
- for (uint256 i; i < n; i++) {
98
- weight = mulDiv(
99
- weight, JBConstants.MAX_WEIGHT_CUT_PERCENT - _WEIGHT_CUT_PERCENT, JBConstants.MAX_WEIGHT_CUT_PERCENT
100
- );
101
- if (weight == 0) break;
102
- }
103
- }
104
-
105
- // ═══════════════════════════════════════════════════════════════════
106
- // Test 1: Exactly 20,000 cycles works without cache
107
- // ═══════════════════════════════════════════════════════════════════
108
-
109
- function test_exactlyAtThreshold_noCache_succeeds() public {
110
- uint256 projectId = _launchProject();
111
-
112
- // Warp forward exactly 20,000 durations.
113
- vm.warp(block.timestamp + _DURATION * _THRESHOLD);
114
-
115
- // currentOf should succeed — still within the iteration limit.
116
- JBRuleset memory ruleset = _rulesets.currentOf(projectId);
117
-
118
- // Verify weight matches the iterative calculation.
119
- uint256 expected = _expectedWeight(_THRESHOLD);
120
- assertEq(ruleset.weight, expected, "Weight at exactly 20,000 cycles should match iterative calculation");
121
- assertTrue(ruleset.weight > 0, "Weight should not have decayed to zero at 20k cycles with 0.1% cut");
122
- }
123
-
124
- // ═══════════════════════════════════════════════════════════════════
125
- // Test 2: 20,001 cycles reverts without cache
126
- // ═══════════════════════════════════════════════════════════════════
127
-
128
- function test_aboveThreshold_noCache_reverts() public {
129
- uint256 projectId = _launchProject();
130
-
131
- // Warp forward 20,001 durations.
132
- vm.warp(block.timestamp + _DURATION * (_THRESHOLD + 1));
133
-
134
- // currentOf should revert because the iteration count exceeds the threshold.
135
- vm.expectRevert(abi.encodeWithSelector(JBRulesets.JBRulesets_WeightCacheRequired.selector, projectId));
136
- _rulesets.currentOf(projectId);
137
- }
138
-
139
- // ═══════════════════════════════════════════════════════════════════
140
- // Test 3: Single cache call unblocks 20,001 cycles
141
- // ═══════════════════════════════════════════════════════════════════
142
-
143
- function test_aboveThreshold_singleCacheCall_succeeds() public {
144
- uint256 projectId = _launchProject();
145
- uint256 rulesetId = _rulesets.latestRulesetIdOf(projectId);
146
-
147
- // Warp forward 20,001 durations.
148
- vm.warp(block.timestamp + _DURATION * (_THRESHOLD + 1));
149
-
150
- // Without cache, this reverts.
151
- vm.expectRevert(abi.encodeWithSelector(JBRulesets.JBRulesets_WeightCacheRequired.selector, projectId));
152
- _rulesets.currentOf(projectId);
153
-
154
- // Populate the cache.
155
- _rulesets.updateRulesetWeightCache(projectId, rulesetId);
156
-
157
- // Now currentOf should succeed.
158
- JBRuleset memory ruleset = _rulesets.currentOf(projectId);
159
-
160
- // Verify weight matches iterative calculation.
161
- uint256 expected = _expectedWeight(_THRESHOLD + 1);
162
- assertEq(ruleset.weight, expected, "Weight at 20,001 cycles should match after single cache call");
163
- }
164
-
165
- // ═══════════════════════════════════════════════════════════════════
166
- // Test 4: Progressive caching for large gaps (40,001 cycles)
167
- // ═══════════════════════════════════════════════════════════════════
168
-
169
- function test_largeGap_progressiveCaching_succeeds() public {
170
- uint256 projectId = _launchProject();
171
- uint256 rulesetId = _rulesets.latestRulesetIdOf(projectId);
172
-
173
- // Warp forward 40,001 durations (needs 2 cache calls).
174
- vm.warp(block.timestamp + _DURATION * (_THRESHOLD * 2 + 1));
175
-
176
- // Without cache, reverts.
177
- vm.expectRevert(abi.encodeWithSelector(JBRulesets.JBRulesets_WeightCacheRequired.selector, projectId));
178
- _rulesets.currentOf(projectId);
179
-
180
- // First cache call: advances cache by up to 20,000 iterations.
181
- _rulesets.updateRulesetWeightCache(projectId, rulesetId);
182
-
183
- // Still reverts — we need another cache call to cover the remaining gap.
184
- vm.expectRevert(abi.encodeWithSelector(JBRulesets.JBRulesets_WeightCacheRequired.selector, projectId));
185
- _rulesets.currentOf(projectId);
186
-
187
- // Second cache call: covers the rest.
188
- _rulesets.updateRulesetWeightCache(projectId, rulesetId);
189
-
190
- // Now it should succeed.
191
- JBRuleset memory ruleset = _rulesets.currentOf(projectId);
192
-
193
- // Verify weight matches iterative calculation.
194
- uint256 expected = _expectedWeight(_THRESHOLD * 2 + 1);
195
- assertEq(ruleset.weight, expected, "Weight at 40,001 cycles should match after two cache calls");
196
- }
197
-
198
- // ═══════════════════════════════════════════════════════════════════
199
- // Test 5: Cache produces same weight as direct iteration
200
- // ═══════════════════════════════════════════════════════════════════
201
-
202
- function test_cachedWeight_matchesDirect_atBoundary() public {
203
- // Launch two identical projects.
204
- uint256 projectA = _launchProject();
205
- uint256 projectB = _launchProject();
206
-
207
- uint256 rulesetIdB = _rulesets.latestRulesetIdOf(projectB);
208
-
209
- // Warp to exactly 20,000 cycles (within threshold for both).
210
- vm.warp(block.timestamp + _DURATION * _THRESHOLD);
211
-
212
- // Project A: no cache, direct iteration.
213
- JBRuleset memory rulesetA = _rulesets.currentOf(projectA);
214
-
215
- // Project B: populate cache first, then query.
216
- _rulesets.updateRulesetWeightCache(projectB, rulesetIdB);
217
- JBRuleset memory rulesetB = _rulesets.currentOf(projectB);
218
-
219
- // Both should produce identical weights.
220
- assertEq(rulesetA.weight, rulesetB.weight, "Cached and uncached weights should be identical at threshold");
221
- }
222
-
223
- // ═══════════════════════════════════════════════════════════════════
224
- // Test 6: Zero weightCutPercent — cache is no-op
225
- // ═══════════════════════════════════════════════════════════════════
226
-
227
- function test_zeroWeightCut_cacheNoOp() public {
228
- // Launch a project with zero weight cut.
229
- JBRulesetConfig[] memory configs = new JBRulesetConfig[](1);
230
- configs[0].mustStartAtOrAfter = 0;
231
- configs[0].duration = _DURATION;
232
- configs[0].weight = _INITIAL_WEIGHT;
233
- configs[0].weightCutPercent = 0; // No decay
234
- configs[0].approvalHook = IJBRulesetApprovalHook(address(0));
235
- configs[0].metadata = _metadata;
236
- configs[0].splitGroups = new JBSplitGroup[](0);
237
- configs[0].fundAccessLimitGroups = new JBFundAccessLimitGroup[](0);
238
-
239
- uint256 projectId = _controller.launchProjectFor({
240
- owner: _projectOwner,
241
- projectUri: "zeroCut",
242
- rulesetConfigurations: configs,
243
- terminalConfigurations: new JBTerminalConfig[](0),
244
- memo: ""
245
- });
246
-
247
- // Warp far beyond the threshold — since weightCutPercent = 0, no iterations needed.
248
- vm.warp(block.timestamp + _DURATION * (_THRESHOLD * 5));
249
-
250
- // Should succeed without any cache because the weight cut loop is skipped.
251
- JBRuleset memory ruleset = _rulesets.currentOf(projectId);
252
- assertEq(ruleset.weight, _INITIAL_WEIGHT, "Weight should remain unchanged with zero cut percent");
253
- }
254
-
255
- // ═══════════════════════════════════════════════════════════════════
256
- // Test 7: Cache with zero duration — updateRulesetWeightCache is no-op
257
- // ═══════════════════════════════════════════════════════════════════
258
-
259
- function test_zeroDuration_cacheNoOp() public {
260
- // Launch a project with zero duration.
261
- JBRulesetConfig[] memory configs = new JBRulesetConfig[](1);
262
- configs[0].mustStartAtOrAfter = 0;
263
- configs[0].duration = 0; // Never expires
264
- configs[0].weight = _INITIAL_WEIGHT;
265
- configs[0].weightCutPercent = _WEIGHT_CUT_PERCENT;
266
- configs[0].approvalHook = IJBRulesetApprovalHook(address(0));
267
- configs[0].metadata = _metadata;
268
- configs[0].splitGroups = new JBSplitGroup[](0);
269
- configs[0].fundAccessLimitGroups = new JBFundAccessLimitGroup[](0);
270
-
271
- uint256 projectId = _controller.launchProjectFor({
272
- owner: _projectOwner,
273
- projectUri: "zeroDuration",
274
- rulesetConfigurations: configs,
275
- terminalConfigurations: new JBTerminalConfig[](0),
276
- memo: ""
277
- });
278
-
279
- uint256 rulesetId = _rulesets.latestRulesetIdOf(projectId);
280
-
281
- // Warp far ahead.
282
- vm.warp(block.timestamp + 1_000_000);
283
-
284
- // updateRulesetWeightCache should be a no-op (returns without caching).
285
- _rulesets.updateRulesetWeightCache(projectId, rulesetId);
286
-
287
- // currentOf should succeed — zero duration means the same ruleset is always current.
288
- JBRuleset memory ruleset = _rulesets.currentOf(projectId);
289
- assertEq(ruleset.weight, _INITIAL_WEIGHT, "Weight should remain unchanged with zero duration");
290
- }
291
- }
@@ -1,9 +0,0 @@
1
- TestBurnTokensOf_Local
2
- ├── when caller is not permissioned or terminal
3
- │ └── it should revert UNAUTHORIZED()
4
- ├── when caller is terminal and tokenCount gt zero
5
- │ └── it should burn and emit BurnTokens
6
- ├── when caller has permission and tokenCount gt zero
7
- │ └── it should burn and emit BurnTokens
8
- └── when tokenCount eq zero
9
- └── it should revert NO_BURNABLE_TOKENS
@@ -1,5 +0,0 @@
1
- TestClaimTokensFor_Local
2
- ├── when caller is permissioned
3
- │ └── it should call JBTokens to claim on behalf of holder
4
- └── when caller is not permissioned
5
- └── it should revert UNAUTHORIZED
@@ -1,5 +0,0 @@
1
- TestDeployERC20For_Local
2
- ├── when caller is permissioned
3
- │ └── it will deploy ERC20 and return IJBToken
4
- └── when caller is not permissioned
5
- └── it will revert UNAUTHORIZED
@@ -1,5 +0,0 @@
1
- TestGetRulesetOf
2
- ├── when rulesetId is zero
3
- │ └── it should return empty ruleset and metadata
4
- └── when rulesetID is non-zero
5
- └── it should return populated ruleset and metadata
@@ -1,12 +0,0 @@
1
- TestLaunchProjectFor_Local
2
- └── when called
3
- ├── given metadata is provided
4
- │ └── it will set metadata
5
- ├── given rulesets are provided
6
- │ └── it will set rulesets
7
- ├── given terminals are provided
8
- │ └── it will set terminals
9
- ├── given memo is provided
10
- │ └── it will be included in the emit
11
- └── given Directory exists
12
- └── it will setControllerOf to itself
@@ -1,8 +0,0 @@
1
- TestLaunchRulesetsFor
2
- ├── when caller does not have permission
3
- │ └── it should revert
4
- └── when caller has permission
5
- ├── given the project already has rulesets
6
- │ └── it should revert
7
- └── given the project does not yet have rulesets
8
- └── it should set the controller, queue the rulesets, configure terminals, and emit LaunchRulesets
@@ -1,12 +0,0 @@
1
- TestMigrateController
2
- ├── when caller does not have MIGRATE_CONTROLLER permission
3
- │ └── it should revert
4
- └── when caller has MIGRATE_CONTROLLER permission
5
- ├── given migration is not allowed by ruleset
6
- │ └── it should revert
7
- └── given migration is allowed by ruleset
8
- ├── given reserved token balance is pending
9
- │ └── it should send reserved tokens to splits
10
- └── given no reserved token balance is pending
11
- ├── it should prepare new controller for migration
12
- └── it should emit MigrateController event
@@ -1,12 +0,0 @@
1
- TestMintTokensOf_Local
2
- ├── when no ruleset is active
3
- │ └── it should be able to mint
4
- ├── when minting is disabled in the funding cycle ruleset
5
- │ └── it should revert
6
- └── when minting is enabled in the funding cycle ruleset
7
- ├── given that there are tokens available to mint
8
- │ └── it should be possible to mint
9
- ├── given that a data source is configured
10
- │ └── it should be able to mint
11
- └── given that a data source has permissioned another contract to mint
12
- └── it should be able to mint
@@ -1,8 +0,0 @@
1
- TestExecutePayReservedTokenToTerminal_Local
2
- ├── when caller is not itself
3
- │ └── it will revert
4
- └── when caller is itself
5
- ├── given allowance EQ zero after pay
6
- │ └── it will not revert
7
- └── given allowance DNEQ zero after pay
8
- └── it will revert
@@ -1,4 +0,0 @@
1
- TestReceiveMigrationFrom
2
- └── when caller supports the correct interface
3
- └── given that the caller is also controllerOf projectId
4
- └── it should set metadata
@@ -1,12 +0,0 @@
1
- TestSendReservedTokensToSplitsOf_Local
2
- ├── when the project has no reserved token splits
3
- │ └── it will mint to the project owner
4
- └── when the project has reserved token splits
5
- ├── given a hook is configured
6
- │ └── it will mint to hook and call its processSplitWith function
7
- ├── given a beneficiary is configured
8
- │ └── it will mint for the beneficiary
9
- ├── given the projectId of split is nonzero and a beneficiary and hook are not configured
10
- │ └── it will mint to the owner of the project
11
- └── given projectId is zero and nothing is configured
12
- └── it will mint to whoever called sendReservedTokens
@@ -1,5 +0,0 @@
1
- TestSetMetadataOf_Local
2
- ├── when caller is owner or has permission
3
- │ └── it should set metadata and emit SetMetadata
4
- └── when caller is not owner or has permission
5
- └── it should revert
@@ -1,5 +0,0 @@
1
- TestSetSplitGroupsOf_Local
2
- ├── when caller is permissioned
3
- │ └── it will set splits
4
- └── when caller is not permissioned
5
- └── it will revert UNAUTHORIZED
@@ -1,5 +0,0 @@
1
- TestSetTokenFor_Local
2
- ├── when caller is permissioned
3
- │ └── it will set token
4
- └── when caller is not permissioned
5
- └── it will revert UNAUTHORIZED
@@ -1,8 +0,0 @@
1
- TestTransferCreditsFrom_Local
2
- ├── when caller is permissioned
3
- │ ├── given ruleset allows credit transfers
4
- │ │ └── it will call JBTokens to transfer the credits
5
- │ └── given ruleset does not allow credit transfers
6
- │ └── it will revert CREDIT_TRANSFERS_PAUSED
7
- └── when caller is not permissioned
8
- └── it will revert UNAUTHORIZED
@@ -1,8 +0,0 @@
1
- TestPrimaryTerminalOf_Local
2
- ├── when there are no terminals supporting the input token
3
- │ └── it will return the zero address
4
- └── when there is at least one supporting terminal
5
- ├── given there are multiple terminals with proper accountingContextForTokenOf
6
- │ └── it will check each terminals accountingContextForTokenOf and return the first
7
- └── given there are multiple terminals but none with the proper accountingContextForTokenOf
8
- └── it will return the zero address
@@ -1,11 +0,0 @@
1
- TestSetControllerOf_Local
2
- ├── when caller does not have any permission
3
- │ └── it should revert
4
- └── when caller isAllowedToSetFirstController or has permission
5
- ├── given that a project doesn't exist
6
- │ └── it should revert
7
- └── given that the project exists
8
- ├── given that the current controller is not setControllerAllowed
9
- │ └── it should revert
10
- └── given that the current controller is setControllerAllowed
11
- └── it should set controllerOf and emit SetController
@@ -1,15 +0,0 @@
1
- TestSetPrimaryTerminalOf_Local
2
- ├── when caller has no permission
3
- │ └── it should revert with UNAUTHORIZED()
4
- └── when caller has permission
5
- ├── given that there is no accountingContextForTokenOf
6
- │ └── it should revert with TOKEN_NOT_ACCEPTED
7
- └── given that there is an accountingContextForTokenOf
8
- ├── given that the terminal has already been added
9
- │ └── it should not add the terminal
10
- └── given that the terminal has not been added
11
- ├── given that the project is not allowed to set terminals
12
- │ └── it should revert with SET_TERMINALS_NOT_ALLOWED
13
- └── given that the project is allowed to set terminals
14
- ├── it should set the terminal and emit AddTerminal
15
- └── it should set the terminal as primary and emit SetPrimaryTerminal
@@ -1,11 +0,0 @@
1
- TestSetTerminalsOf_Local
2
- ├── when caller has no permission
3
- │ └── it should revert with UNAUTHORIZED()
4
- └── when caller has permission
5
- ├── given that not setTerminalsAllowed
6
- │ └── it should revert with revert SET_TERMINALS_NOT_ALLOWED()
7
- └── given that setTerminalsAllowed
8
- ├── given that duplicate terminals were added
9
- │ └── it should revert with DUPLICATE_TERMINALS()
10
- └── given that duplicate terminals were not added
11
- └── it should set terminals and emit SetTerminals
@@ -1,7 +0,0 @@
1
- TestInitialize_Local
2
- ├── when a name is already set
3
- │ └── it will revert
4
- ├── when name_ EQ nothing
5
- │ └── it will revert
6
- └── when name is valid and not already set
7
- └── it will set the name and symbol and transfer ownership
@@ -1,5 +0,0 @@
1
- TestName_Local
2
- ├── When a name is set
3
- │ └── it will return the name
4
- └── When a name is not set
5
- └── it will return an empty string
@@ -1,5 +0,0 @@
1
- TestNonces_Local
2
- ├── When a user has not called permit
3
- │ └── it will return zero
4
- └── When a user has called permit
5
- └── it will return a nonce GT zero
@@ -1,5 +0,0 @@
1
- TestSymbol_Local
2
- ├── When a symbol is set
3
- │ └── it will return a non-empty string
4
- └── When a symbol is not set
5
- └── it will return an empty string
@@ -1,5 +0,0 @@
1
- TestSetFeelessAddress_Local
2
- ├── when caller is owner
3
- │ └── it should set isFeeless and emit SetFeelessAddress
4
- └── when caller is not owner
5
- └── it should revert
@@ -1,5 +0,0 @@
1
- TestSupportsInterface_Local
2
- ├── when it supports either IJBFeelessAddresses or IERC165
3
- │ └── it should return true
4
- └── when it doesnt support either IJBFeelessAddresses or IERC165
5
- └── it should return false
@@ -1,5 +0,0 @@
1
- TestPayoutLimitOf_Local
2
- ├── when the project has the specific payout limit
3
- │ └── it will return the uint256 payoutLimit
4
- └── when the project doesnt have the specific payout limit
5
- └── it will return 0
@@ -1,8 +0,0 @@
1
- TestPayoutLimitsOf_Local
2
- └── when a project has payout limits
3
- ├── given they are configured for a specific token
4
- │ └── it will return them
5
- ├── given they are configured for a specific terminal
6
- │ └── it will return them
7
- └── given they are configured for a specific rulesetId
8
- └── it will return them
@@ -1,18 +0,0 @@
1
- TestSetFundAccessLimitsFor_Local
2
- ├── when caller is not controller
3
- │ └── it will revert
4
- └── when caller is controller of project
5
- ├── given payoutLimit amount is gt uint224
6
- │ └── it will revert INVALID_PAYOUT_LIMIT
7
- ├── given payoutLimit currency is gt uint32
8
- │ └── it will revert INVALID_PAYOUT_LIMIT_CURRENCY
9
- ├── given payoutLimit currency is not given in ascending order
10
- │ └── it will revert INVALID_PAYOUT_LIMIT_CURRENCY_ORDERING
11
- ├── given surplusAllowance amount gt uint224
12
- │ └── it will revert INVALID_SURPLUS_ALLOWANCE
13
- ├── given surplusAllowance currency gt uint32
14
- │ └── it will revert INVALID_PAYOUT_LIMIT_CURRENCY
15
- ├── given surplus allowance currencies are not ascending order
16
- │ └── it will revert INVALID_SURPLUS_ALLOWANCE_CURRENCY_ORDERING
17
- └── given valid config
18
- └── it will set packed properties and emit SetFundAccessLimits
@@ -1,5 +0,0 @@
1
- TestSurplusAllowanceOf_Local
2
- ├── when a project has the specific surplus configured
3
- │ └── it will return uin256 surplusAllowance
4
- └── when it doesnt have the specific surplus configured
5
- └── it will return 0
@@ -1,8 +0,0 @@
1
- TestSurplusAllowancesOf_Local
2
- └── when a project has specified surplus allowances
3
- ├── given they are specified for a specific ruleset
4
- │ └── it will return them
5
- ├── given they are specified for a specific terminal
6
- │ └── it will return them
7
- └── given they are specified for a specific token
8
- └── it will return them
@@ -1,8 +0,0 @@
1
- TestGetDataFor_Local
2
- ├── when metadata length LTEQ MIN_METADATA_LENGTH
3
- │ └── it will return false and empty bytes
4
- └── when metadata length GT MIN_METADATA_LENGTH
5
- ├── given id is found
6
- │ └── it will return found EQ true and targetData
7
- └── given id is not found
8
- └── it will return found EQ false and empty bytes targetData
@@ -1,5 +0,0 @@
1
- TestAccountingContextsFor_Local
2
- ├── when accounting contexts are set
3
- │ └── it will return contexts
4
- └── when accounting contexts are not set
5
- └── it will return an empty array
@@ -1,10 +0,0 @@
1
- TestAddAccountingContextsFor_Local
2
- ├── when caller is not permissioned
3
- │ └── it will revert UNAUTHORIZED
4
- ├── when caller is permissioned
5
- │ ├── given the context is already set
6
- │ │ └── it will revert ACCOUNTING_CONTEXT_ALREADY_SET
7
- │ └── given happypath
8
- │ └── it will set the context and emit SetAccountingContext
9
- └── when caller is controller
10
- └── it will alsoGrantAccess
@@ -1,23 +0,0 @@
1
- TestAddToBalanceOf_Local
2
- ├── when shouldReturnHeldFees eq true
3
- │ ├── given return amount is zero
4
- │ │ └── it will set heldFeesOf project to zero
5
- │ ├── given return amount is non-zero and leftoverAmount GTEQ amountFromFee
6
- │ │ └── it will return feeAmountResultingIn
7
- │ └── given return amount is non-zero and leftoverAmount LT amountFromFee
8
- │ └── it will set heldFeesOf return feeAmountFrom and set leftoverAmount to zero
9
- ├── when shouldReturnHeldFees eq false
10
- │ └── it will call terminalstore recordAddedBalanceFor and emit AddToBalance
11
- ├── when the project DNH accounting context for the token
12
- │ └── it will revert TOKEN_NOT_ACCEPTED
13
- ├── when the terminals token eq native token
14
- │ └── it will use msg.value
15
- ├── when the terminals token eq native token and msgvalue eq zero
16
- │ └── it will revert NO_MSG_VALUE_ALLOWED
17
- ├── when the terminal is calling itself
18
- │ └── it will not transfer
19
- └── when pay metadata contains permit data
20
- ├── given the permit allowance lt amount
21
- │ └── it will revert PERMIT_ALLOWANCE_NOT_ENOUGH
22
- └── given permit allowance is good
23
- └── it will set permit allowance to spend tokens for user via permit2