@bananapus/core-v6 0.0.1

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 (436) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +112 -0
  3. package/SKILLS.md +151 -0
  4. package/docs/book.css +13 -0
  5. package/docs/book.toml +12 -0
  6. package/docs/solidity.min.js +74 -0
  7. package/docs/src/README.md +703 -0
  8. package/docs/src/SUMMARY.md +94 -0
  9. package/docs/src/src/JBChainlinkV3PriceFeed.sol/contract.JBChainlinkV3PriceFeed.md +83 -0
  10. package/docs/src/src/JBChainlinkV3SequencerPriceFeed.sol/contract.JBChainlinkV3SequencerPriceFeed.md +88 -0
  11. package/docs/src/src/JBController.sol/contract.JBController.md +1121 -0
  12. package/docs/src/src/JBDeadline.sol/contract.JBDeadline.md +84 -0
  13. package/docs/src/src/JBDirectory.sol/contract.JBDirectory.md +294 -0
  14. package/docs/src/src/JBERC20.sol/contract.JBERC20.md +190 -0
  15. package/docs/src/src/JBFeelessAddresses.sol/contract.JBFeelessAddresses.md +80 -0
  16. package/docs/src/src/JBFundAccessLimits.sol/contract.JBFundAccessLimits.md +253 -0
  17. package/docs/src/src/JBMultiTerminal.sol/contract.JBMultiTerminal.md +1472 -0
  18. package/docs/src/src/JBPermissions.sol/contract.JBPermissions.md +199 -0
  19. package/docs/src/src/JBPrices.sol/contract.JBPrices.md +154 -0
  20. package/docs/src/src/JBProjects.sol/contract.JBProjects.md +131 -0
  21. package/docs/src/src/JBRulesets.sol/contract.JBRulesets.md +677 -0
  22. package/docs/src/src/JBSplits.sol/contract.JBSplits.md +237 -0
  23. package/docs/src/src/JBTerminalStore.sol/contract.JBTerminalStore.md +591 -0
  24. package/docs/src/src/JBTokens.sol/contract.JBTokens.md +353 -0
  25. package/docs/src/src/README.md +25 -0
  26. package/docs/src/src/abstract/JBControlled.sol/abstract.JBControlled.md +64 -0
  27. package/docs/src/src/abstract/JBPermissioned.sol/abstract.JBPermissioned.md +84 -0
  28. package/docs/src/src/abstract/README.md +5 -0
  29. package/docs/src/src/enums/JBApprovalStatus.sol/enum.JBApprovalStatus.md +17 -0
  30. package/docs/src/src/enums/README.md +4 -0
  31. package/docs/src/src/interfaces/IJBCashOutHook.sol/interface.IJBCashOutHook.md +29 -0
  32. package/docs/src/src/interfaces/IJBCashOutTerminal.sol/interface.IJBCashOutTerminal.md +57 -0
  33. package/docs/src/src/interfaces/IJBControlled.sol/interface.IJBControlled.md +12 -0
  34. package/docs/src/src/interfaces/IJBController.sol/interface.IJBController.md +334 -0
  35. package/docs/src/src/interfaces/IJBDirectory.sol/interface.IJBDirectory.md +108 -0
  36. package/docs/src/src/interfaces/IJBDirectoryAccessControl.sol/interface.IJBDirectoryAccessControl.md +19 -0
  37. package/docs/src/src/interfaces/IJBFeeTerminal.sol/interface.IJBFeeTerminal.md +91 -0
  38. package/docs/src/src/interfaces/IJBFeelessAddresses.sol/interface.IJBFeelessAddresses.md +26 -0
  39. package/docs/src/src/interfaces/IJBFundAccessLimits.sol/interface.IJBFundAccessLimits.md +88 -0
  40. package/docs/src/src/interfaces/IJBMigratable.sol/interface.IJBMigratable.md +29 -0
  41. package/docs/src/src/interfaces/IJBMultiTerminal.sol/interface.IJBMultiTerminal.md +50 -0
  42. package/docs/src/src/interfaces/IJBPayHook.sol/interface.IJBPayHook.md +28 -0
  43. package/docs/src/src/interfaces/IJBPayoutTerminal.sol/interface.IJBPayoutTerminal.md +105 -0
  44. package/docs/src/src/interfaces/IJBPermissioned.sol/interface.IJBPermissioned.md +12 -0
  45. package/docs/src/src/interfaces/IJBPermissions.sol/interface.IJBPermissions.md +74 -0
  46. package/docs/src/src/interfaces/IJBPermitTerminal.sol/interface.IJBPermitTerminal.md +15 -0
  47. package/docs/src/src/interfaces/IJBPriceFeed.sol/interface.IJBPriceFeed.md +12 -0
  48. package/docs/src/src/interfaces/IJBPrices.sol/interface.IJBPrices.md +74 -0
  49. package/docs/src/src/interfaces/IJBProjectUriRegistry.sol/interface.IJBProjectUriRegistry.md +19 -0
  50. package/docs/src/src/interfaces/IJBProjects.sol/interface.IJBProjects.md +49 -0
  51. package/docs/src/src/interfaces/IJBRulesetApprovalHook.sol/interface.IJBRulesetApprovalHook.md +35 -0
  52. package/docs/src/src/interfaces/IJBRulesetDataHook.sol/interface.IJBRulesetDataHook.md +97 -0
  53. package/docs/src/src/interfaces/IJBRulesets.sol/interface.IJBRulesets.md +165 -0
  54. package/docs/src/src/interfaces/IJBSplitHook.sol/interface.IJBSplitHook.md +31 -0
  55. package/docs/src/src/interfaces/IJBSplits.sol/interface.IJBSplits.md +35 -0
  56. package/docs/src/src/interfaces/IJBTerminal.sol/interface.IJBTerminal.md +141 -0
  57. package/docs/src/src/interfaces/IJBTerminalStore.sol/interface.IJBTerminalStore.md +198 -0
  58. package/docs/src/src/interfaces/IJBToken.sol/interface.IJBToken.md +54 -0
  59. package/docs/src/src/interfaces/IJBTokenUriResolver.sol/interface.IJBTokenUriResolver.md +12 -0
  60. package/docs/src/src/interfaces/IJBTokens.sol/interface.IJBTokens.md +151 -0
  61. package/docs/src/src/interfaces/README.md +33 -0
  62. package/docs/src/src/libraries/JBCashOuts.sol/library.JBCashOuts.md +40 -0
  63. package/docs/src/src/libraries/JBConstants.sol/library.JBConstants.md +52 -0
  64. package/docs/src/src/libraries/JBCurrencyIds.sol/library.JBCurrencyIds.md +19 -0
  65. package/docs/src/src/libraries/JBFees.sol/library.JBFees.md +52 -0
  66. package/docs/src/src/libraries/JBFixedPointNumber.sol/library.JBFixedPointNumber.md +12 -0
  67. package/docs/src/src/libraries/JBMetadataResolver.sol/library.JBMetadataResolver.md +242 -0
  68. package/docs/src/src/libraries/JBRulesetMetadataResolver.sol/library.JBRulesetMetadataResolver.md +180 -0
  69. package/docs/src/src/libraries/JBSplitGroupIds.sol/library.JBSplitGroupIds.md +14 -0
  70. package/docs/src/src/libraries/JBSurplus.sol/library.JBSurplus.md +44 -0
  71. package/docs/src/src/libraries/README.md +12 -0
  72. package/docs/src/src/periphery/JBDeadline1Day.sol/contract.JBDeadline1Day.md +15 -0
  73. package/docs/src/src/periphery/JBDeadline3Days.sol/contract.JBDeadline3Days.md +15 -0
  74. package/docs/src/src/periphery/JBDeadline3Hours.sol/contract.JBDeadline3Hours.md +15 -0
  75. package/docs/src/src/periphery/JBDeadline7Days.sol/contract.JBDeadline7Days.md +15 -0
  76. package/docs/src/src/periphery/JBMatchingPriceFeed.sol/contract.JBMatchingPriceFeed.md +22 -0
  77. package/docs/src/src/periphery/README.md +8 -0
  78. package/docs/src/src/structs/JBAccountingContext.sol/struct.JBAccountingContext.md +20 -0
  79. package/docs/src/src/structs/JBAfterCashOutRecordedContext.sol/struct.JBAfterCashOutRecordedContext.md +43 -0
  80. package/docs/src/src/structs/JBAfterPayRecordedContext.sol/struct.JBAfterPayRecordedContext.md +42 -0
  81. package/docs/src/src/structs/JBBeforeCashOutRecordedContext.sol/struct.JBBeforeCashOutRecordedContext.md +45 -0
  82. package/docs/src/src/structs/JBBeforePayRecordedContext.sol/struct.JBBeforePayRecordedContext.md +41 -0
  83. package/docs/src/src/structs/JBCashOutHookSpecification.sol/struct.JBCashOutHookSpecification.md +22 -0
  84. package/docs/src/src/structs/JBCurrencyAmount.sol/struct.JBCurrencyAmount.md +17 -0
  85. package/docs/src/src/structs/JBFee.sol/struct.JBFee.md +20 -0
  86. package/docs/src/src/structs/JBFundAccessLimitGroup.sol/struct.JBFundAccessLimitGroup.md +39 -0
  87. package/docs/src/src/structs/JBPayHookSpecification.sol/struct.JBPayHookSpecification.md +22 -0
  88. package/docs/src/src/structs/JBPermissionsData.sol/struct.JBPermissionsData.md +21 -0
  89. package/docs/src/src/structs/JBRuleset.sol/struct.JBRuleset.md +55 -0
  90. package/docs/src/src/structs/JBRulesetConfig.sol/struct.JBRulesetConfig.md +51 -0
  91. package/docs/src/src/structs/JBRulesetMetadata.sol/struct.JBRulesetMetadata.md +79 -0
  92. package/docs/src/src/structs/JBRulesetWeightCache.sol/struct.JBRulesetWeightCache.md +16 -0
  93. package/docs/src/src/structs/JBRulesetWithMetadata.sol/struct.JBRulesetWithMetadata.md +16 -0
  94. package/docs/src/src/structs/JBSingleAllowance.sol/struct.JBSingleAllowance.md +26 -0
  95. package/docs/src/src/structs/JBSplit.sol/struct.JBSplit.md +49 -0
  96. package/docs/src/src/structs/JBSplitGroup.sol/struct.JBSplitGroup.md +17 -0
  97. package/docs/src/src/structs/JBSplitHookContext.sol/struct.JBSplitHookContext.md +29 -0
  98. package/docs/src/src/structs/JBTerminalConfig.sol/struct.JBTerminalConfig.md +16 -0
  99. package/docs/src/src/structs/JBTokenAmount.sol/struct.JBTokenAmount.md +23 -0
  100. package/docs/src/src/structs/README.md +25 -0
  101. package/foundry.lock +11 -0
  102. package/foundry.toml +41 -0
  103. package/package.json +38 -0
  104. package/remappings.txt +1 -0
  105. package/script/Deploy.s.sol +111 -0
  106. package/script/DeployPeriphery.s.sol +287 -0
  107. package/script/helpers/CoreDeploymentLib.sol +121 -0
  108. package/slither-ci.config.json +10 -0
  109. package/sphinx.lock +507 -0
  110. package/src/JBChainlinkV3PriceFeed.sol +77 -0
  111. package/src/JBChainlinkV3SequencerPriceFeed.sol +75 -0
  112. package/src/JBController.sol +1186 -0
  113. package/src/JBDeadline.sol +73 -0
  114. package/src/JBDirectory.sol +343 -0
  115. package/src/JBERC20.sol +131 -0
  116. package/src/JBFeelessAddresses.sol +54 -0
  117. package/src/JBFundAccessLimits.sol +308 -0
  118. package/src/JBMultiTerminal.sol +2024 -0
  119. package/src/JBPermissions.sol +252 -0
  120. package/src/JBPrices.sol +227 -0
  121. package/src/JBProjects.sol +126 -0
  122. package/src/JBRulesets.sol +1093 -0
  123. package/src/JBSplits.sol +324 -0
  124. package/src/JBTerminalStore.sol +908 -0
  125. package/src/JBTokens.sol +376 -0
  126. package/src/abstract/JBControlled.sol +48 -0
  127. package/src/abstract/JBPermissioned.sol +77 -0
  128. package/src/enums/JBApprovalStatus.sol +12 -0
  129. package/src/interfaces/IJBCashOutHook.sol +15 -0
  130. package/src/interfaces/IJBCashOutTerminal.sol +51 -0
  131. package/src/interfaces/IJBControlled.sol +10 -0
  132. package/src/interfaces/IJBController.sol +280 -0
  133. package/src/interfaces/IJBDirectory.sol +69 -0
  134. package/src/interfaces/IJBDirectoryAccessControl.sol +15 -0
  135. package/src/interfaces/IJBFeeTerminal.sol +61 -0
  136. package/src/interfaces/IJBFeelessAddresses.sol +17 -0
  137. package/src/interfaces/IJBFundAccessLimits.sol +94 -0
  138. package/src/interfaces/IJBMigratable.sol +24 -0
  139. package/src/interfaces/IJBMultiTerminal.sol +36 -0
  140. package/src/interfaces/IJBPayHook.sol +14 -0
  141. package/src/interfaces/IJBPayoutTerminal.sol +92 -0
  142. package/src/interfaces/IJBPermissioned.sol +10 -0
  143. package/src/interfaces/IJBPermissions.sol +71 -0
  144. package/src/interfaces/IJBPermitTerminal.sol +14 -0
  145. package/src/interfaces/IJBPriceFeed.sol +10 -0
  146. package/src/interfaces/IJBPrices.sol +65 -0
  147. package/src/interfaces/IJBProjectUriRegistry.sol +15 -0
  148. package/src/interfaces/IJBProjects.sol +27 -0
  149. package/src/interfaces/IJBRulesetApprovalHook.sol +21 -0
  150. package/src/interfaces/IJBRulesetDataHook.sol +56 -0
  151. package/src/interfaces/IJBRulesets.sol +151 -0
  152. package/src/interfaces/IJBSplitHook.sol +16 -0
  153. package/src/interfaces/IJBSplits.sol +28 -0
  154. package/src/interfaces/IJBTerminal.sol +120 -0
  155. package/src/interfaces/IJBTerminalStore.sol +225 -0
  156. package/src/interfaces/IJBToken.sol +39 -0
  157. package/src/interfaces/IJBTokenUriResolver.sol +10 -0
  158. package/src/interfaces/IJBTokens.sol +113 -0
  159. package/src/libraries/JBCashOuts.sol +120 -0
  160. package/src/libraries/JBConstants.sol +14 -0
  161. package/src/libraries/JBCurrencyIds.sol +7 -0
  162. package/src/libraries/JBFees.sol +28 -0
  163. package/src/libraries/JBFixedPointNumber.sol +12 -0
  164. package/src/libraries/JBMetadataResolver.sol +306 -0
  165. package/src/libraries/JBRulesetMetadataResolver.sol +160 -0
  166. package/src/libraries/JBSplitGroupIds.sol +7 -0
  167. package/src/libraries/JBSurplus.sol +40 -0
  168. package/src/periphery/JBDeadline1Day.sol +8 -0
  169. package/src/periphery/JBDeadline3Days.sol +8 -0
  170. package/src/periphery/JBDeadline3Hours.sol +8 -0
  171. package/src/periphery/JBDeadline7Days.sol +8 -0
  172. package/src/periphery/JBMatchingPriceFeed.sol +13 -0
  173. package/src/structs/JBAccountingContext.sol +12 -0
  174. package/src/structs/JBAfterCashOutRecordedContext.sol +30 -0
  175. package/src/structs/JBAfterPayRecordedContext.sol +29 -0
  176. package/src/structs/JBBeforeCashOutRecordedContext.sol +31 -0
  177. package/src/structs/JBBeforePayRecordedContext.sol +28 -0
  178. package/src/structs/JBCashOutHookSpecification.sol +15 -0
  179. package/src/structs/JBCurrencyAmount.sol +10 -0
  180. package/src/structs/JBFee.sol +12 -0
  181. package/src/structs/JBFundAccessLimitGroup.sol +28 -0
  182. package/src/structs/JBPayHookSpecification.sol +15 -0
  183. package/src/structs/JBPermissionsData.sol +13 -0
  184. package/src/structs/JBRuleset.sol +42 -0
  185. package/src/structs/JBRulesetConfig.sol +43 -0
  186. package/src/structs/JBRulesetMetadata.sol +56 -0
  187. package/src/structs/JBRulesetWeightCache.sol +9 -0
  188. package/src/structs/JBRulesetWithMetadata.sol +12 -0
  189. package/src/structs/JBSingleAllowance.sol +16 -0
  190. package/src/structs/JBSplit.sol +37 -0
  191. package/src/structs/JBSplitGroup.sol +12 -0
  192. package/src/structs/JBSplitHookContext.sol +20 -0
  193. package/src/structs/JBTerminalConfig.sol +12 -0
  194. package/src/structs/JBTokenAmount.sol +14 -0
  195. package/test/AuditExploits.t.sol +2710 -0
  196. package/test/ComprehensiveInvariant.t.sol +298 -0
  197. package/test/EconomicSimulation.t.sol +340 -0
  198. package/test/EntryPointPermutations.t.sol +671 -0
  199. package/test/FlashLoanAttacks.t.sol +792 -0
  200. package/test/PermissionEscalation.t.sol +679 -0
  201. package/test/RulesetTransitions.t.sol +699 -0
  202. package/test/SplitLoopTests.t.sol +731 -0
  203. package/test/TestAccessToFunds.sol +2644 -0
  204. package/test/TestCashOut.sol +185 -0
  205. package/test/TestCashOutCountFor.sol +272 -0
  206. package/test/TestCashOutHooks.sol +317 -0
  207. package/test/TestCashOutTimingEdge.sol +229 -0
  208. package/test/TestDurationUnderflow.sol +220 -0
  209. package/test/TestFeeProcessingFailure.sol +208 -0
  210. package/test/TestFees.sol +604 -0
  211. package/test/TestInterfaceSupport.sol +62 -0
  212. package/test/TestJBERC20Inheritance.sol +91 -0
  213. package/test/TestLaunchProject.sol +176 -0
  214. package/test/TestMetaTx.sol +203 -0
  215. package/test/TestMetadataParserLib.sol +438 -0
  216. package/test/TestMigrationHeldFees.sol +249 -0
  217. package/test/TestMintTokensOf.sol +172 -0
  218. package/test/TestMultiTokenSurplus.sol +206 -0
  219. package/test/TestMultipleAccessLimits.sol +642 -0
  220. package/test/TestPayBurnRedeemFlow.sol +180 -0
  221. package/test/TestPayHooks.sol +190 -0
  222. package/test/TestPermissions.sol +305 -0
  223. package/test/TestPermissionsEdge.sol +286 -0
  224. package/test/TestPermit2Terminal.sol +339 -0
  225. package/test/TestRulesetQueueing.sol +1001 -0
  226. package/test/TestRulesetQueuingStress.sol +778 -0
  227. package/test/TestRulesetWeightCaching.sol +177 -0
  228. package/test/TestSplits.sol +369 -0
  229. package/test/TestTerminalMigration.sol +167 -0
  230. package/test/TestTokenFlow.sol +174 -0
  231. package/test/WeirdTokenTests.t.sol +764 -0
  232. package/test/formal/BondingCurveProperties.t.sol +411 -0
  233. package/test/formal/FeeProperties.t.sol +246 -0
  234. package/test/helpers/JBTest.sol +129 -0
  235. package/test/helpers/MetadataResolverHelper.sol +116 -0
  236. package/test/helpers/TestBaseWorkflow.sol +317 -0
  237. package/test/invariants/Phase3DeepInvariant.t.sol +404 -0
  238. package/test/invariants/RulesetsInvariant.t.sol +115 -0
  239. package/test/invariants/TerminalStoreInvariant.t.sol +220 -0
  240. package/test/invariants/TokensInvariant.t.sol +184 -0
  241. package/test/invariants/handlers/ComprehensiveHandler.sol +285 -0
  242. package/test/invariants/handlers/EconomicHandler.sol +347 -0
  243. package/test/invariants/handlers/Phase3Handler.sol +414 -0
  244. package/test/invariants/handlers/RulesetsHandler.sol +111 -0
  245. package/test/invariants/handlers/TerminalStoreHandler.sol +146 -0
  246. package/test/invariants/handlers/TokensHandler.sol +127 -0
  247. package/test/mock/ERC2771ForwarderMock.sol +37 -0
  248. package/test/mock/MockERC20.sol +18 -0
  249. package/test/mock/MockMaliciousBeneficiary.sol +67 -0
  250. package/test/mock/MockMaliciousSplitHook.sol +42 -0
  251. package/test/mock/MockPriceFeed.sol +20 -0
  252. package/test/trees/JBController/burnTokensOf.tree +9 -0
  253. package/test/trees/JBController/claimTokensFor.tree +5 -0
  254. package/test/trees/JBController/deployERC20For.tree +5 -0
  255. package/test/trees/JBController/getRulesetOf.tree +5 -0
  256. package/test/trees/JBController/launchProjectFor.tree +12 -0
  257. package/test/trees/JBController/launchRulesetsFor.tree +8 -0
  258. package/test/trees/JBController/migrateController.tree +12 -0
  259. package/test/trees/JBController/mintTokensOf.tree +12 -0
  260. package/test/trees/JBController/payReservedTokenToTerminal.tree +8 -0
  261. package/test/trees/JBController/receiveMigrationFrom.tree +4 -0
  262. package/test/trees/JBController/sendReservedTokensToSplitsOf.tree +12 -0
  263. package/test/trees/JBController/setMetadataOf.tree +5 -0
  264. package/test/trees/JBController/setSplitGroupsOf.tree +5 -0
  265. package/test/trees/JBController/setTokenFor.tree +5 -0
  266. package/test/trees/JBController/transferCreditsFrom.tree +8 -0
  267. package/test/trees/JBDirectory/primaryTerminalOf.tree +8 -0
  268. package/test/trees/JBDirectory/setControllerOf.tree +11 -0
  269. package/test/trees/JBDirectory/setPrimaryTerminalOf.tree +15 -0
  270. package/test/trees/JBDirectory/setTerminalsOf.tree +11 -0
  271. package/test/trees/JBERC20/initialize.tree +7 -0
  272. package/test/trees/JBERC20/name.tree +5 -0
  273. package/test/trees/JBERC20/nonces.tree +5 -0
  274. package/test/trees/JBERC20/symbol.tree +5 -0
  275. package/test/trees/JBFeelessAddresses/setFeelessAddress.tree +5 -0
  276. package/test/trees/JBFeelessAddresses/supportsInterface.tree +5 -0
  277. package/test/trees/JBFundAccessLimits/payoutLimitOf.tree +5 -0
  278. package/test/trees/JBFundAccessLimits/payoutLimitsOf.tree +8 -0
  279. package/test/trees/JBFundAccessLimits/setFundAccessLimitsFor.tree +18 -0
  280. package/test/trees/JBFundAccessLimits/surplusAllowanceOf.tree +5 -0
  281. package/test/trees/JBFundAccessLimits/surplusAllowancesOf.tree +8 -0
  282. package/test/trees/JBMetadataResolver/getDataFor.tree +8 -0
  283. package/test/trees/JBMultiTerminal/accountingContextsOf.tree +5 -0
  284. package/test/trees/JBMultiTerminal/addAccountingContextsFor.tree +10 -0
  285. package/test/trees/JBMultiTerminal/addToBalanceOf.tree +23 -0
  286. package/test/trees/JBMultiTerminal/cashOutTokensOf.tree +23 -0
  287. package/test/trees/JBMultiTerminal/executePayout.tree +32 -0
  288. package/test/trees/JBMultiTerminal/executeProcessFee.tree +14 -0
  289. package/test/trees/JBMultiTerminal/migrateBalanceOf.tree +12 -0
  290. package/test/trees/JBMultiTerminal/pay.tree +23 -0
  291. package/test/trees/JBMultiTerminal/processHeldFeesOf.tree +8 -0
  292. package/test/trees/JBMultiTerminal/sendPayoutsOf.tree +34 -0
  293. package/test/trees/JBMultiTerminal/useAllowanceOf.tree +16 -0
  294. package/test/trees/JBPermissions/hasPermission.tree +8 -0
  295. package/test/trees/JBPermissions/hasPermissions.tree +8 -0
  296. package/test/trees/JBPermissions/setPermissionsFor.tree +5 -0
  297. package/test/trees/JBPrices/addPriceFeedFor.tree +14 -0
  298. package/test/trees/JBPrices/pricePerUnitOf.tree +11 -0
  299. package/test/trees/JBProjects/createFor.tree +11 -0
  300. package/test/trees/JBProjects/setTokenUriResolver.tree +5 -0
  301. package/test/trees/JBProjects/supportsInterface.tree +9 -0
  302. package/test/trees/JBProjects/tokenURI.tree +5 -0
  303. package/test/trees/JBRulesets/currentApprovalStatusForLatestRulesetOf.tree +8 -0
  304. package/test/trees/JBRulesets/currentOf.tree +12 -0
  305. package/test/trees/JBRulesets/getRulesetOf.tree +5 -0
  306. package/test/trees/JBRulesets/latestQueuedRulesetOf.tree +10 -0
  307. package/test/trees/JBRulesets/rulesetsOf.tree +11 -0
  308. package/test/trees/JBRulesets/upcomingRulesetOf.tree +20 -0
  309. package/test/trees/JBRulesets/updateRulesetWeightCache.tree +5 -0
  310. package/test/trees/JBSplits/setSplitGroupsOf.tree +17 -0
  311. package/test/trees/JBSplits/splitsOf.tree +5 -0
  312. package/test/trees/JBTerminalStore/currentReclaimableSurplusOf.tree +16 -0
  313. package/test/trees/JBTerminalStore/currentSurplusOf.tree +25 -0
  314. package/test/trees/JBTerminalStore/currentTotalSurplusOf.tree +5 -0
  315. package/test/trees/JBTerminalStore/recordCashOutsFor.tree +16 -0
  316. package/test/trees/JBTerminalStore/recordPaymentFrom.tree +14 -0
  317. package/test/trees/JBTerminalStore/recordPayoutFor.tree +10 -0
  318. package/test/trees/JBTerminalStore/recordTerminalMigration.tree +5 -0
  319. package/test/trees/JBTerminalStore/recordUsedAllowanceOf.tree +10 -0
  320. package/test/trees/JBTokens/burnFrom.tree +10 -0
  321. package/test/trees/JBTokens/claimTokensFor.tree +10 -0
  322. package/test/trees/JBTokens/deployERC20For.tree +12 -0
  323. package/test/trees/JBTokens/mintFor.tree +10 -0
  324. package/test/trees/JBTokens/setTokenFor.tree +11 -0
  325. package/test/trees/JBTokens/totalBalanceOf.tree +5 -0
  326. package/test/trees/JBTokens/totalSupplyOf.tree +5 -0
  327. package/test/trees/JBTokens/transferCreditsFrom.tree +8 -0
  328. package/test/trees/mintTokensOf.tree +12 -0
  329. package/test/units/static/JBChainlinkV3PriceFeed/TestPriceFeed.sol +220 -0
  330. package/test/units/static/JBController/JBControllerSetup.sol +40 -0
  331. package/test/units/static/JBController/TestBurnTokensOf.sol +107 -0
  332. package/test/units/static/JBController/TestClaimTokensFor.sol +60 -0
  333. package/test/units/static/JBController/TestDeployErc20For.sol +80 -0
  334. package/test/units/static/JBController/TestLaunchProjectFor.sol +282 -0
  335. package/test/units/static/JBController/TestLaunchRulesetsFor.sol +322 -0
  336. package/test/units/static/JBController/TestMigrateController.sol +148 -0
  337. package/test/units/static/JBController/TestMintTokensOfUnits.sol +102 -0
  338. package/test/units/static/JBController/TestPayReservedTokenToTerminal.sol +71 -0
  339. package/test/units/static/JBController/TestReceiveMigrationFrom.sol +95 -0
  340. package/test/units/static/JBController/TestRulesetViews.sol +219 -0
  341. package/test/units/static/JBController/TestSendReservedTokensToSplitsOf.sol +595 -0
  342. package/test/units/static/JBController/TestSetSplitGroupsOf.sol +63 -0
  343. package/test/units/static/JBController/TestSetTokenFor.sol +227 -0
  344. package/test/units/static/JBController/TestSetUriOf.sol +53 -0
  345. package/test/units/static/JBController/TestTransferCreditsFrom.sol +159 -0
  346. package/test/units/static/JBDeadline/TestDeadlineFuzz.sol +194 -0
  347. package/test/units/static/JBDirectory/JBDirectorySetup.sol +22 -0
  348. package/test/units/static/JBDirectory/TestPrimaryTerminalOf.sol +122 -0
  349. package/test/units/static/JBDirectory/TestSetControllerOf.sol +173 -0
  350. package/test/units/static/JBDirectory/TestSetControllerOfMigrationOrder.sol +98 -0
  351. package/test/units/static/JBDirectory/TestSetPrimaryTerminalOf.sol +169 -0
  352. package/test/units/static/JBDirectory/TestSetTerminalsOf.sol +128 -0
  353. package/test/units/static/JBERC20/JBERC20Setup.sol +20 -0
  354. package/test/units/static/JBERC20/SigUtils.sol +34 -0
  355. package/test/units/static/JBERC20/TestInitialize.sol +54 -0
  356. package/test/units/static/JBERC20/TestName.sol +30 -0
  357. package/test/units/static/JBERC20/TestNonces.sol +59 -0
  358. package/test/units/static/JBERC20/TestSymbol.sol +31 -0
  359. package/test/units/static/JBFeelessAdresses/JBFeelessSetup.sol +20 -0
  360. package/test/units/static/JBFeelessAdresses/TestInterfaces.sol +29 -0
  361. package/test/units/static/JBFeelessAdresses/TestSetFeelessAddress.sol +35 -0
  362. package/test/units/static/JBFees/TestFeesFuzz.sol +78 -0
  363. package/test/units/static/JBFixedPointNumber/TestAdjustDecimals.sol +16 -0
  364. package/test/units/static/JBFixedPointNumber/TestAdjustDecimalsFuzz.sol +71 -0
  365. package/test/units/static/JBFundAccessLimits/JBFundAccessSetup.sol +21 -0
  366. package/test/units/static/JBFundAccessLimits/TestFundAccessLimitsEdge.sol +159 -0
  367. package/test/units/static/JBFundAccessLimits/TestPayoutLimitOf.sol +56 -0
  368. package/test/units/static/JBFundAccessLimits/TestPayoutLimitsOf.sol +94 -0
  369. package/test/units/static/JBFundAccessLimits/TestSetFundAccessLimitsFor.sol +182 -0
  370. package/test/units/static/JBFundAccessLimits/TestSurplusAllowanceOf.sol +61 -0
  371. package/test/units/static/JBFundAccessLimits/TestSurplusAllowancesOf.sol +96 -0
  372. package/test/units/static/JBMetadataResolver/TestGetDataFor.sol +89 -0
  373. package/test/units/static/JBMetadataResolver/TestMetadataResolverFuzz.sol +227 -0
  374. package/test/units/static/JBMetadataResolver/TestMetadataResolverM20M21.sol +245 -0
  375. package/test/units/static/JBMultiTerminal/JBMultiTerminalSetup.sol +39 -0
  376. package/test/units/static/JBMultiTerminal/TestAccountingContextsOf.sol +65 -0
  377. package/test/units/static/JBMultiTerminal/TestAddAccountingContextsFor.sol +313 -0
  378. package/test/units/static/JBMultiTerminal/TestAddToBalanceOf.sol +432 -0
  379. package/test/units/static/JBMultiTerminal/TestCashOutTokensOf.sol +478 -0
  380. package/test/units/static/JBMultiTerminal/TestExecutePayout.sol +577 -0
  381. package/test/units/static/JBMultiTerminal/TestExecuteProcessFee.sol +176 -0
  382. package/test/units/static/JBMultiTerminal/TestMigrateBalanceOf.sol +190 -0
  383. package/test/units/static/JBMultiTerminal/TestPay.sol +514 -0
  384. package/test/units/static/JBMultiTerminal/TestProcessHeldFeesOf.sol +29 -0
  385. package/test/units/static/JBMultiTerminal/TestSendPayoutsOf.sol +243 -0
  386. package/test/units/static/JBMultiTerminal/TestUseAllowanceOf.sol +310 -0
  387. package/test/units/static/JBPermissions/JBPermissionsSetup.sol +18 -0
  388. package/test/units/static/JBPermissions/TestHasPermission.sol +50 -0
  389. package/test/units/static/JBPermissions/TestHasPermissions.sol +93 -0
  390. package/test/units/static/JBPermissions/TestSetPermissionsFor.sol +62 -0
  391. package/test/units/static/JBPrices/JBPricesSetup.sol +26 -0
  392. package/test/units/static/JBPrices/TestAddPriceFeedFor.sol +102 -0
  393. package/test/units/static/JBPrices/TestPricePerUnitOf.sol +129 -0
  394. package/test/units/static/JBPrices/TestPrices.sol +262 -0
  395. package/test/units/static/JBProjects/JBProjectsSetup.sol +20 -0
  396. package/test/units/static/JBProjects/TestCreateFor.sol +69 -0
  397. package/test/units/static/JBProjects/TestInitialProject.sol +19 -0
  398. package/test/units/static/JBProjects/TestInterfaces.sol +27 -0
  399. package/test/units/static/JBProjects/TestSetResolver.sol +36 -0
  400. package/test/units/static/JBProjects/TestTokenUri.sol +38 -0
  401. package/test/units/static/JBRulesetMetadataResolver/TestSetCashOutTaxRateTo.sol +99 -0
  402. package/test/units/static/JBRulesets/JBRulesetsSetup.sol +21 -0
  403. package/test/units/static/JBRulesets/TestCurrentApprovalStatusForLatestRulesetOf.sol +257 -0
  404. package/test/units/static/JBRulesets/TestCurrentOf.sol +231 -0
  405. package/test/units/static/JBRulesets/TestGetRulesetOf.sol +94 -0
  406. package/test/units/static/JBRulesets/TestLatestQueuedRulesetOf.sol +252 -0
  407. package/test/units/static/JBRulesets/TestRulesets.sol +617 -0
  408. package/test/units/static/JBRulesets/TestRulesetsOf.sol +37 -0
  409. package/test/units/static/JBRulesets/TestUpcomingRulesetOf.sol +526 -0
  410. package/test/units/static/JBRulesets/TestUpdateRulesetWeightCache.sol +91 -0
  411. package/test/units/static/JBSplits/JBSplitsSetup.sol +23 -0
  412. package/test/units/static/JBSplits/TestSelfManagedSplitGroups.sol +502 -0
  413. package/test/units/static/JBSplits/TestSetSplitGroupsOf.sol +370 -0
  414. package/test/units/static/JBSplits/TestSplitsLockedEdge.sol +262 -0
  415. package/test/units/static/JBSplits/TestSplitsOf.sol +24 -0
  416. package/test/units/static/JBSplits/TestSplitsPacking.sol +33 -0
  417. package/test/units/static/JBSurplus/TestSurplusFuzz.sol +125 -0
  418. package/test/units/static/JBTerminalStore/JBTerminalStoreSetup.sol +23 -0
  419. package/test/units/static/JBTerminalStore/TestCurrentReclaimableSurplusOf.sol +434 -0
  420. package/test/units/static/JBTerminalStore/TestCurrentSurplusOf.sol +428 -0
  421. package/test/units/static/JBTerminalStore/TestCurrentTotalSurplusOf.sol +65 -0
  422. package/test/units/static/JBTerminalStore/TestRecordCashOutsFor.sol +479 -0
  423. package/test/units/static/JBTerminalStore/TestRecordPaymentFrom.sol +508 -0
  424. package/test/units/static/JBTerminalStore/TestRecordPayoutFor.sol +257 -0
  425. package/test/units/static/JBTerminalStore/TestRecordTerminalMigration.sol +131 -0
  426. package/test/units/static/JBTerminalStore/TestRecordUsedAllowanceOf.sol +390 -0
  427. package/test/units/static/JBTerminalStore/TestUint224Overflow.sol +187 -0
  428. package/test/units/static/JBTokens/JBTokensSetup.sol +23 -0
  429. package/test/units/static/JBTokens/TestBurnFrom.sol +104 -0
  430. package/test/units/static/JBTokens/TestClaimTokensFor.sol +107 -0
  431. package/test/units/static/JBTokens/TestDeployERC20ForUnits.sol +89 -0
  432. package/test/units/static/JBTokens/TestMintFor.sol +97 -0
  433. package/test/units/static/JBTokens/TestSetTokenFor.sol +95 -0
  434. package/test/units/static/JBTokens/TestTotalBalanceOf.sol +65 -0
  435. package/test/units/static/JBTokens/TestTotalSupplyOf.sol +56 -0
  436. package/test/units/static/JBTokens/TestTransferCreditsFrom.sol +54 -0
@@ -0,0 +1,23 @@
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
@@ -0,0 +1,23 @@
1
+ TestCashOutTokensOf_Local
2
+ ├── when caller DN have permission
3
+ │ └── it will revert UNAUTHORIZED
4
+ ├── when caller has permission
5
+ │ ├── given cashOutCount gt zero
6
+ │ │ └── it will call directory controller of and burnTokensOf
7
+ │ ├── given reclaimAmount gt zero beneficiary is not feeless and cashOutTaxRate dneq MAX_CASH_OUT_TAX_RATE
8
+ │ │ └── it will subtract the fee for the reclaim
9
+ │ ├── given the token is native
10
+ │ │ └── it will sendValue
11
+ │ ├── given the token is erc20
12
+ │ │ └── it will safeTransfer tokens
13
+ │ └── given amountEligibleForFees dneq zero
14
+ │ └── it will call directory primaryTerminalOf and process the fee
15
+ └── when a data hook is configured
16
+ ├── given data hook returns cash out hook specs hook is feeless and token is native
17
+ │ └── it will pass the full amount to the hook and emit HookAfterRecordCashOut
18
+ ├── given data hook returns cash out hook specs hook is feeless and token is erc20
19
+ │ └── it will safeIncreaseAllowance pass the full amount to the hook and emit HookAfterRecordCashOut
20
+ ├── given data hook returns cash out hook specs hook is not feeless and token is native
21
+ │ └── it will calculate the fee pass the amount to the hook and emit HookAfterRecordCashOut
22
+ └── given data hook returns cash out hook specs hook is not feeless and token is erc20
23
+ └── it will safeIncreaseAllowance pass the amount to the hook and emit HookAfterRecordCashOut
@@ -0,0 +1,32 @@
1
+ TestExecutePayout_Local
2
+ ├── when a split hook is configured
3
+ │ ├── given the split hook EQ feeless
4
+ │ │ └── it will not process a fee
5
+ │ ├── given the split hook DNEQ feeless
6
+ │ │ └── it will process a fee
7
+ │ ├── given the split hook DN support split hook interface
8
+ │ │ └── it will revert 400_1
9
+ │ ├── given the payout token is erc20
10
+ │ │ └── it will safe increase allowance
11
+ │ └── given the payout token is native
12
+ │ └── it will send eth in msgvalue
13
+ ├── when a split projectId is configured
14
+ │ ├── given the projects terminal EQ zero address
15
+ │ │ └── it will revert 404_2
16
+ │ ├── given preferAddToBalance EQ true and terminal EQ this address
17
+ │ │ └── it will call _addToBalanceOf internal
18
+ │ ├── given preferAddToBalance EQ true and terminal EQ another address
19
+ │ │ └── it will call that terminals addToBalanceOf
20
+ │ ├── given preferAddToBalance DNEQ true and terminal EQ this address
21
+ │ │ └── it will call internal _pay
22
+ │ └── given preferAddToBalance DNEQ true and terminal EQ another address
23
+ │ └── it will call that terminals pay function
24
+ ├── when a beneficiary is configured
25
+ │ ├── given beneficiary EQ feeless
26
+ │ │ └── it will payout to the beneficiary without taking fees
27
+ │ └── given beneficiary DNEQ feeless
28
+ │ └── it will payout to the beneficiary incurring fee
29
+ ├── when there is no beneficiary split hook or project to pay
30
+ │ └── it will payout msgSender
31
+ └── when there are leftover payout funds
32
+ └── it will payout the rest to the project owner
@@ -0,0 +1,14 @@
1
+ TestExecuteProcessFee_Local
2
+ ├── when caller is not itself
3
+ │ └── it will revert
4
+ ├── when feeTerminal EQ zero address
5
+ │ └── it will revert 404_1
6
+ ├── when token is erc20
7
+ │ └── it will safeIncreaseAllowance
8
+ ├── when feeTerminal EQ this address
9
+ │ └── it will call internal _pay
10
+ └── when feeTerminal DNEQ this address
11
+ ├── given token EQ NATIVE_TOKEN
12
+ │ └── it will call external pay with msgvalue
13
+ └── given token DNEQ NATIVE_TOKEN
14
+ └── it will call external pay with zero msgvalue
@@ -0,0 +1,12 @@
1
+ TestMigrateBalanceOf_Local
2
+ ├── when caller does not have permission
3
+ │ └── it will revert UNAUTHORIZED
4
+ ├── when the terminal to does not accept the token
5
+ │ └── it will revert TERMINAL_TOKENS_INCOMPATIBLE
6
+ └── when balance GT zero and caller is permissioned
7
+ ├── given there are held fees
8
+ │ └── it will process held fees
9
+ ├── given token is ERC20
10
+ │ └── it will safeIncreaseAllowance and addToBalanceOf
11
+ └── given token is native
12
+ └── it will addToBalanceOf with value in msgvalue
@@ -0,0 +1,23 @@
1
+ TestPay_Local
2
+ ├── when tokens returned LT minReturnedTokens
3
+ │ └── it will revert UNDER_MIN_RETURNED_TOKENS
4
+ ├── when terminalStore returns tokenCount GT zero and happypath
5
+ │ └── it will mint tokens and emit Pay
6
+ ├── when a pay hook is configured and happypath
7
+ │ ├── given the paid token is an ERC20
8
+ │ │ └── it will increase allowance to the hook and emit HookAfterRecordPay and Pay
9
+ │ └── given the paid token is native
10
+ │ └── it will send ETH to the hook and emit HookAfterRecordPay and Pay
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
@@ -0,0 +1,8 @@
1
+ TestProcessHeldFeesOf_Local
2
+ ├── when held fee unlockTimestamp GT blocktimestamp
3
+ │ └── it will add the fee back to _heldFeesOf
4
+ └── when held fee is unlocked
5
+ ├── given executeProcessFee succeeds
6
+ │ └── it will process the fee and emit ProcessFee
7
+ └── given executeProcessFee fails
8
+ └── it will readd balance and emit FeeReverted
@@ -0,0 +1,34 @@
1
+ TestPayoutsOf_Local
2
+ ├── when amountPaidOut lt minTokensPaidOut
3
+ │ └── it will revert UNDER_MIN_TOKENS_PAID_OUT
4
+ ├── when a split hook is configured
5
+ │ ├── given the split hook is feeless
6
+ │ │ └── it will not process a fee
7
+ │ ├── given the split hook DNEQ feeless
8
+ │ │ └── it will process a fee
9
+ │ ├── given the split hook DN support split hook interface
10
+ │ │ └── it will revert 400_1
11
+ │ ├── given the payout token is erc20
12
+ │ │ └── it will safe increase allowance
13
+ │ └── given the payout token is native
14
+ │ └── it will send eth in msgvalue
15
+ ├── when a split projectId is configured
16
+ │ ├── given the projects terminal EQ zero address
17
+ │ │ └── it will revert 404_2
18
+ │ ├── given preferAddToBalance EQ true and terminal EQ this address
19
+ │ │ └── it will call _addToBalanceOf internal
20
+ │ ├── given preferAddToBalance EQ true and terminal EQ another address
21
+ │ │ └── it will call that terminals addToBalanceOf
22
+ │ ├── given preferAddToBalance DNEQ true and terminal EQ this address
23
+ │ │ └── it will call internal _pay
24
+ │ └── given preferAddToBalance DNEQ true and terminal EQ another address
25
+ │ └── it will call that terminals pay function
26
+ ├── when a beneficiary is configured
27
+ │ ├── given beneficiary EQ feeless
28
+ │ │ └── it will payout to the beneficiary without taking fees
29
+ │ └── given beneficiary DNEQ feeless
30
+ │ └── it will payout to the beneficiary incurring fee
31
+ ├── when there is no beneficiary split hook or project to pay
32
+ │ └── it will payout msgSender
33
+ └── when there are leftover payout funds
34
+ └── it will payout the rest to the project owner
@@ -0,0 +1,16 @@
1
+ TestUseAllowanceOf_Local
2
+ ├── when caller does not have permission
3
+ │ └── it will revert UNAUTHORIZED
4
+ ├── when amountPaidOut LT minTokensPaidOut
5
+ │ └── it will revert UNDER_MIN_TOKENS_PAID_OUT
6
+ ├── when msgSender EQ feeless
7
+ │ └── it will not incur fees
8
+ ├── when msgSender DNEQ feeless
9
+ │ ├── given ruleset holdFees EQ true
10
+ │ │ └── it will hold fees and emit HoldFee
11
+ │ └── given ruleset holdFees DNEQ true
12
+ │ └── it will not hold fees and emit ProcessFee
13
+ ├── when token EQ NATIVE_TOKEN
14
+ │ └── it will send ETH via sendValue
15
+ └── when token EQ ERC20
16
+ └── it will call safeTransfer
@@ -0,0 +1,8 @@
1
+ TestHasPermissions_Local
2
+ ├── when permissionId gt 255
3
+ │ └── it will revert with PERMISSION_ID_OUT_OF_BOUNDS
4
+ └── when permissionId lt 255
5
+ ├── given operator has permission for account of project
6
+ │ └── it will return true
7
+ └── given operator doesn't have permission for account of project
8
+ └── it will return false
@@ -0,0 +1,8 @@
1
+ TestHasPermissions_Local
2
+ ├── when any permissionId gt 255
3
+ │ └── it will revert with PERMISSION_ID_OUT_OF_BOUNDS
4
+ └── when all permissionIds lt 255
5
+ ├── given operator does not have all permissions specified
6
+ │ └── it will return false
7
+ └── given operator has all permissions specified
8
+ └── it will return true
@@ -0,0 +1,5 @@
1
+ TestSetPermissionsFor_Local
2
+ ├── when caller does not have ROOT permission
3
+ │ └── it will revert UNAUTHORIZED
4
+ └── when caller has ROOT permission
5
+ └── it packs permissions into a bitfield, stores them, and emits OperatorPermissionsSet
@@ -0,0 +1,14 @@
1
+ TestAddPriceFeedFor_Local
2
+ ├── when projectId is the DEFAULT_PROJECT_ID and msg sender is the owner
3
+ │ └── it should add the price feed without checking permissions
4
+ ├── when projectId is not the DEFAULT_PROJECT_ID
5
+ │ └── it should require ADD_PRICE_FEED permission from the project's owner or an operator
6
+ ├── when pricingCurrency or unitCurrency is 0
7
+ │ └── it should revert with INVALID_CURRENCY
8
+ ├── when a default feed for the currency pair or its inverse already exists
9
+ │ └── it should revert with PRICE_FEED_ALREADY_EXISTS
10
+ ├── when this project already has feeds for the currency pair or its inverse
11
+ │ └── it should revert with PRICE_FEED_ALREADY_EXISTS
12
+ └── given the above conditions are met
13
+ ├── it should store the feed for the project and currency pair
14
+ └── it should emit AddPriceFeed event with projectId, pricingCurrency, unitCurrency, and feed
@@ -0,0 +1,11 @@
1
+ TestPricePerUnitOf_Local
2
+ ├── when pricingCurrency is the same as unitCurrency
3
+ │ └── it should return 1 with requested decimals
4
+ ├── when price feed exists for projectId and pricingCurrency to unitCurrency
5
+ │ └── it should return the current price from price feed
6
+ ├── when inverse price feed exists for projectId and unitCurrency to pricingCurrency
7
+ │ └── it should return the inverse of the current price from inverse price feed
8
+ ├── when projectId is not the DEFAULT_PROJECT_ID and no direct or inverse price feed is found
9
+ │ └── it should attempt to use the default price feed for DEFAULT_PROJECT_ID
10
+ └── when no price feed is found or exists including default case
11
+ └── it should revert with PRICE_FEED_NOT_FOUND
@@ -0,0 +1,11 @@
1
+ TestCreateFor_Local
2
+ ├── when projectId plus one is gt uint256 max
3
+ │ └── it will revert
4
+ └── when projectId plus one is lt or eq to uint256 max
5
+ ├── given owner is not a contract
6
+ │ └── it will mint and emit Create
7
+ └── given owner is a contract
8
+ ├── given it is IERC721Receiver
9
+ │ └── it will mint and emit Create
10
+ └── given it does not support IERC721Receiver
11
+ └── it will revert
@@ -0,0 +1,5 @@
1
+ TestSetTokenURIResolver_Local
2
+ ├── when caller is owner
3
+ │ └── it will set resolver and emit SetTokenUriResolver
4
+ └── when caller is not owner
5
+ └── it will revert
@@ -0,0 +1,9 @@
1
+ TestSupportsInterface_Local
2
+ ├── when interfaceId is IJBProjects
3
+ │ └── it will return true
4
+ ├── when interfaceId is IERC721
5
+ │ └── it will return true
6
+ ├── when interfaceId is IERC721Metadata
7
+ │ └── it will return true
8
+ └── when interfaceId is anything else
9
+ └── it will return false
@@ -0,0 +1,5 @@
1
+ TestTokenURI_Local
2
+ ├── when there's no resolver
3
+ │ └── it will return empty string
4
+ └── when there's a resolver
5
+ └── it will return the resolved URI
@@ -0,0 +1,8 @@
1
+ TestCurrentApprovalStatusForLatestRulesetOf_Local
2
+ └── when a ruleset is configured
3
+ ├── given the basedOn ruleset eq zero
4
+ │ └── it will return status Empty
5
+ ├── given there is no approval hook
6
+ │ └── it will return status Empty
7
+ └── given basedOn DNEQ zero and there is an approval hook
8
+ └── it will return the approval status
@@ -0,0 +1,12 @@
1
+ TestCurrentOf_Local
2
+ ├── when latestrulesetOf project EQ zero
3
+ │ └── it will return an empty ruleset
4
+ ├── when latest rulesetId DNEQ zero
5
+ │ ├── given the currentlyApprovableRulesetIdOf approval status EQ Approved or Empty
6
+ │ │ └── it will return the latest approved ruleset
7
+ │ ├── given the currentlyApprovableRulesetIdOf approval status DNEQ Approved or Empty
8
+ │ │ └── it will return the ruleset the pending approval ruleset is basedOn
9
+ │ └── given the currentlyApprovableRulesetIdOf EQ zero and approval status of the latest ruleset DNEQ Approved or Empty
10
+ │ └── it will return the basedOn of the latest ruleset
11
+ └── when base of the currentlyApprovableRulesetIdOf duration EQ zero
12
+ └── it will return simulateCycledRulesetBasedOn with allowMidRuleset true
@@ -0,0 +1,5 @@
1
+ TestGetRulesetOf_Local
2
+ ├── when rulesetId dneq zero
3
+ │ └── it will return a JBRuleset derived from _packedIntrinsicPropertiesOf
4
+ └── when rulesetId eq zero
5
+ └── it will return an empty ruleset
@@ -0,0 +1,10 @@
1
+ TestLatestQueuedRulesetOf_Local
2
+ ├── when the latest rulesetId dneq zero
3
+ │ ├── given the ruleset is based on ruleset zero
4
+ │ │ └── it will return JBApprovalStatus.Empty
5
+ │ ├── given the ruleset is based on nonzero ruleset and the basedOn approvalhook dneq zero address
6
+ │ │ └── it will return the approvalHooks approvalStatusOf
7
+ │ └── given the ruleset is based on nonzero ruleset and the basedOn approvalhook eq zero address
8
+ │ └── it will return JBApprovalStatus.Empty
9
+ └── when the latest rulesetId eq zero
10
+ └── it will return empty ruleset and JBApprovalStatus.Empty
@@ -0,0 +1,11 @@
1
+ TestRulesetsOf_Local
2
+ ├── when startingId eq zero
3
+ │ └── it will return latest ruleset
4
+ ├── when startingId dneq zero
5
+ │ └── it will return predecessors up to latest ruleset
6
+ ├── when size is zero
7
+ │ └── it will return an empty array
8
+ ├── when there are no rulesets
9
+ │ └── it will return an empty array
10
+ └── when size is gt configured rulesets
11
+ └── it will return up to latest ruleset
@@ -0,0 +1,20 @@
1
+ TestUpcomingOf_Local
2
+ ├── when latest ruleset Id EQ zero
3
+ │ └── it will return an empty ruleset
4
+ ├── when upcoming ruleset Id DNEQ zero
5
+ │ ├── given status EQ Approved or ApprovalExpected or Empty
6
+ │ │ └── it will return that ruleset
7
+ │ └── given status DNEQ Approved or ApprovalExpected or Empty
8
+ │ └── it will return the ruleset upcoming was based on
9
+ ├── when upcoming ruleset Id EQ zero
10
+ │ └── given the latest ruleset starts in the future
11
+ │ └── it will return the ruleset that latestRuleset is based on
12
+ ├── when latest ruleset has duration eq zero
13
+ │ └── it will return an empty ruleset
14
+ └── when ruleset duration dneq zero
15
+ ├── given approval status is approved or empty
16
+ │ └── it will return a simulatedCycledRulesetBasedOn
17
+ ├── given the rulesets approval failed and it's basedOn duration DNEQ zero
18
+ │ └── it will return the simulatedCycledRulesetBasedOn it was based on
19
+ └── given the rulesets approval failed and it's basedOn duration EQ zero
20
+ └── it will return an empty ruleset
@@ -0,0 +1,5 @@
1
+ TestUpdateRulesetWeightCache_Local
2
+ ├── when latest ruleset of project duration or weightCutPercent EQ zero
3
+ │ └── it will return without updating
4
+ └── when latest ruleset has proper duration and weightCutPercent
5
+ └── it will store a new derivedWeightFrom and weightCutMultiple in storage
@@ -0,0 +1,17 @@
1
+ TestSetSplitGroupsOf_Local
2
+ ├── when caller is not controller
3
+ │ └── it will revert with CONTROLLER_UNAUTHORIZED
4
+ └── when caller is controller
5
+ ├── given previously locked splits are included
6
+ │ └── it will revert with PREVIOUS_LOCKED_SPLITS_NOT_INCLUDED
7
+ └── given previously locked splits are not included
8
+ ├── given any configured split percent is zero
9
+ │ └── it will revert with INVALID_SPLIT_PERCENT
10
+ ├── given projectId gt uint64 max
11
+ │ └── it will revert with INVALID_PROJECT_ID
12
+ ├── given splits total to over SPLITS_TOTAL_PERCENT
13
+ │ └── it will revert with INVALID_TOTAL_PERCENT
14
+ ├── given lockedUntil gt uint48 max
15
+ │ └── it will revert with INVALID_LOCKED_UNTIL
16
+ └── given all conditions are satisfied
17
+ └── it will store splits and emit SetSplit for each configured
@@ -0,0 +1,5 @@
1
+ TestSplitsOf_Local
2
+ ├── when there are defined splits
3
+ │ └── it should return the defined splits
4
+ └── when there are no splits defined
5
+ └── it should return the default splits for FALLBACK_RULESET_ID
@@ -0,0 +1,16 @@
1
+ TestCurrentReclaimableSurplusOf_Local
2
+ ├── when useTotalSurplus eq true
3
+ │ └── it will use the total surplus of all terminals
4
+ └── when useTotalSurplus eq false
5
+ ├── given currentSurplus eq zero
6
+ │ └── it will return zero
7
+ ├── given currentSurplus gt zero
8
+ │ └── it will get the number of outstanding tokens and return the reclaimable surplus
9
+ ├── given tokenCount is eq to totalSupply
10
+ │ └── it will return the rest of the surplus
11
+ ├── given cash out tax rate eq zero
12
+ │ └── it will return zero
13
+ ├── given cash out tax rate eq MAX_CASH_OUT_TAX_RATE
14
+ │ └── it will return the linear proportion
15
+ └── given cash out tax rate dneq MAX_CASH_OUT_TAX_RATE
16
+ └── it will return the calculated proportion
@@ -0,0 +1,25 @@
1
+ TestCurrentSurplusOf_Local
2
+ ├── when surplus requires decimal adjustment
3
+ │ ├── given surplus requires decimal adjustment and accounting currency matches target currency
4
+ │ │ └── it will adjust surplus to target decimals without conversion
5
+ │ └── given surplus requires decimal adjustment and accounting currency does not match target currency
6
+ │ └── it will convert surplus to target currency with decimal adjustment
7
+ ├── when surplus does not require decimal adjustment
8
+ │ ├── given accounting currency matches target currency
9
+ │ │ └── it will return standard surplus
10
+ │ └── given accounting currency does not match target currency
11
+ │ └── it will convert surplus to target currency without decimal adjustment
12
+ ├── given a payout limit requires decimal adjustment
13
+ │ ├── given a payout limit requires decimal adjustment and payout limit currency matches target currency
14
+ │ │ └── it will adjust payout limit to target decimals without conversion
15
+ │ └── given payout limit currency that requires decimal adjustment does not match target currency
16
+ │ └── it will convert payout limit to target currency with decimal adjustment
17
+ ├── given a payout limit does not require decimal adjustment
18
+ │ ├── given payout limit currency matches target currency
19
+ │ │ └── it will return standard surplus
20
+ │ └── given payout limit currency does not match target currency
21
+ │ └── it will convert payout limit target currency without decimal adjustment
22
+ ├── given cumulative payout limit greater than surplus
23
+ │ └── it will decrease surplus by payout limit amount
24
+ └── given cumulative payout limit not greater than surplus
25
+ └── it will return zero
@@ -0,0 +1,5 @@
1
+ TestCurrentTotalSurplusOf_Local
2
+ ├── when terminals are configured in JBDirectory
3
+ │ └── it will return the cumulative surplus
4
+ └── when terminals are not configured in JBDirectory
5
+ └── it will return zero
@@ -0,0 +1,16 @@
1
+ TestRecordCashOutFor_Local
2
+ ├── when current ruleset useTotalSurplusForCashOuts eq true
3
+ │ ├── given the cashOutCount gt totalSupply
4
+ │ │ └── it will revert INSUFFICIENT_TOKENS
5
+ │ ├── given the currentSurplus gt zero
6
+ │ │ └── it will set reclaim amount using the currentSurplus
7
+ │ ├── given current ruleset useDataHookForCashOut eq true
8
+ │ │ └── it will call the dataHook for the reclaim amount and hookSpecs
9
+ │ ├── given the amount reclaimed gt projects balance
10
+ │ │ └── it will revert INADEQUATE_TERMINAL_STORE_BALANCE
11
+ │ ├── given the balance diff gt zero
12
+ │ │ └── it will deduct from the projects balance
13
+ │ └── given the balance diff eq zero
14
+ │ └── it will not deduct
15
+ └── when the current ruleset useTotalSurplusForCashOuts eq false
16
+ └── it will use the standard surplus calculation
@@ -0,0 +1,14 @@
1
+ TestRecordPaymentFrom_Local
2
+ ├── when current ruleset cycleNumber is zero
3
+ │ └── it will revert INVALID_RULESET
4
+ ├── when current ruleset pausePay eq true
5
+ │ └── it will revert RULESET_PAYMENT_PAUSED
6
+ ├── when current ruleset useDataHookForPay eq true and the hook dneq zero address
7
+ │ ├── given the hook returns a non zero specifiedAmount
8
+ │ │ └── it will decrement the amount being added to the local balance
9
+ │ └── given weight returned by the hook is zero
10
+ │ └── it will return zero as the tokenCount
11
+ ├── when a hook is not configured
12
+ │ └── it will derive weight from the ruleset
13
+ └── when the terminal should base its weight on a currency other than the ruleset baseCurrency
14
+ └── it will return an adjusted weightRatio
@@ -0,0 +1,10 @@
1
+ TestRecordPayoutFor_Local
2
+ └── when there is a used payout limit of the current ruleset
3
+ ├── given the calling amount gt what is available to payout
4
+ │ └── it will revert PAYOUT_LIMIT_EXCEEDED
5
+ ├── given the calling currency eq the context currency
6
+ │ └── it will not convert prices and return
7
+ ├── given the calling currency dneq the context currency
8
+ │ └── it will convert prices and return
9
+ └── given the amountPaidOut exceeds balance
10
+ └── it will revert INADEQUATE_TERMINAL_STORE_BALANCE
@@ -0,0 +1,5 @@
1
+ TestRecordTerminalMigration_Local
2
+ ├── when ruleset allows migration
3
+ │ └── it will return the current balance and set balance to zero
4
+ └── when ruleset dn allow migration
5
+ └── it will revert TERMINAL_MIGRATION_NOT_ALLOWED
@@ -0,0 +1,10 @@
1
+ TestRecordUsedAllowanceOf_Local
2
+ ├── when amount is within range to use surplus allowance
3
+ │ ├── given calling currency eq accounting currency
4
+ │ │ └── it will not convert prices
5
+ │ ├── given calling currency dneq accounting currency
6
+ │ │ └── it will convert prices
7
+ │ └── given there is inadequate balance after price conversion
8
+ │ └── it will revert INADEQUATE_TERMINAL_STORE_BALANCE
9
+ └── when amount is not within range to use surplus allowance
10
+ └── it will revert INADEQUATE_CONTROLLER_ALLOWANCE
@@ -0,0 +1,10 @@
1
+ TestBurnFrom_Local
2
+ ├── when caller is controller
3
+ │ ├── given the calling amount GT tokenbalance plus creditbalance of holder
4
+ │ │ └── it will revert INSUFFICIENT_FUNDS
5
+ │ ├── given there is a credit balance
6
+ │ │ └── it will subtract credits from creditBalanceOf and totalCreditSupplyOf
7
+ │ └── given there is erc20 token balance
8
+ │ └── it will burn tokens
9
+ └── when caller DNEQ controller
10
+ └── it will revert CONTROLLER_UNAUTHORIZED
@@ -0,0 +1,10 @@
1
+ TestClaimTokensFor_Local
2
+ ├── when caller is controller
3
+ │ ├── given token address EQ zero
4
+ │ │ └── it will revert TOKEN_NOT_FOUND
5
+ │ ├── given creditBalanceOf GT calling amount
6
+ │ │ └── it will revert INSUFFICIENT_CREDITS
7
+ │ └── given happy path
8
+ │ └── it will mint to the beneficiary and emit ClaimTokens
9
+ └── when caller is not controller
10
+ └── it will revert CONTROLLER_UNAUTHORIZED
@@ -0,0 +1,12 @@
1
+ TestDeployERC20For_Local
2
+ ├── when bytes length EQ zero
3
+ │ └── it will revert EMPTY_NAME
4
+ ├── when symbol length EQ zero
5
+ │ └── it will revert EMPTY_SYMBOL
6
+ ├── when project already has a configured token
7
+ │ └── it will revert PROJECT_ALREADY_HAS_TOKEN
8
+ └── when happy path
9
+ ├── given a salt is provided
10
+ │ └── it will create and initialize a deterministic clone based on the msgsender and salt
11
+ └── given a salt is not provided
12
+ └── it will clone and initialize a indeterministically generated clone
@@ -0,0 +1,10 @@
1
+ TestMintFor_Local
2
+ ├── when caller is controller of project
3
+ │ ├── given token of the project EQ zero address
4
+ │ │ └── it will add tokens to credit balances and total credit supply
5
+ │ ├── given token DNEQ zero address
6
+ │ │ └── it will call token mint
7
+ │ └── given total supply after mint or credits GT uint208 max
8
+ │ └── it will revert OVERFLOW_ALERT
9
+ └── when caller is not controller
10
+ └── it will revert CONTROLLER_UNAUTHORIZED
@@ -0,0 +1,11 @@
1
+ TestSetTokenFor_Local
2
+ ├── when token is the zero address
3
+ │ └── it will revert EMPTY_TOKEN
4
+ ├── when a token is already set
5
+ │ └── it will revert TOKEN_ALREADY_SET
6
+ ├── when a token is associated with another project
7
+ │ └── it will revert TOKEN_ALREADY_SET
8
+ ├── when a tokens decimals DNEQ 18
9
+ │ └── it will revert TOKENS_MUST_HAVE_18_DECIMALS
10
+ └── when happy path
11
+ └── it will set token states and emit SetToken
@@ -0,0 +1,5 @@
1
+ TestTotalBalanceOf_Local
2
+ ├── when a projects token DNEQ zero address
3
+ │ └── it will return creditBalanceOf plus token balance of holder
4
+ └── when a projects token EQ zero address
5
+ └── it will return zero
@@ -0,0 +1,5 @@
1
+ TestTotalSupplyOf_Local
2
+ ├── when a projects token DNEQ zero address
3
+ │ └── it will return totalCreditSupplyOf plus token total supply
4
+ └── when a projects token EQ zero address
5
+ └── it will return zero
@@ -0,0 +1,8 @@
1
+ TestTransferCreditsFrom_Local
2
+ └── when caller is controller
3
+ ├── given recipient EQ zero address
4
+ │ └── it will revert RECIPIENT_ZERO_ADDRESS
5
+ ├── given calling amount GT creditBalance
6
+ │ └── it will revert INSUFFICIENT_CREDITS
7
+ └── given happy path
8
+ └── it will subtract creditBalanceOf from holder to recipient and emit TransferCredits
@@ -0,0 +1,12 @@
1
+ TestMintTokensOf
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