@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,1121 @@
1
+ # JBController
2
+ [Git Source](https://github.com/Bananapus/nana-core/blob/2998dca2fbd2658e2c8791d6dc8348147d69e28e/src/JBController.sol)
3
+
4
+ **Inherits:**
5
+ [JBPermissioned](/src/abstract/JBPermissioned.sol/abstract.JBPermissioned.md), ERC2771Context, [IJBController](/src/interfaces/IJBController.sol/interface.IJBController.md), [IJBMigratable](/src/interfaces/IJBMigratable.sol/interface.IJBMigratable.md)
6
+
7
+ `JBController` coordinates rulesets and project tokens, and is the entry point for most operations related
8
+ to rulesets and project tokens.
9
+
10
+
11
+ ## State Variables
12
+ ### DIRECTORY
13
+ The directory of terminals and controllers for projects.
14
+
15
+
16
+ ```solidity
17
+ IJBDirectory public immutable override DIRECTORY;
18
+ ```
19
+
20
+
21
+ ### FUND_ACCESS_LIMITS
22
+ A contract that stores fund access limits for each project.
23
+
24
+
25
+ ```solidity
26
+ IJBFundAccessLimits public immutable override FUND_ACCESS_LIMITS;
27
+ ```
28
+
29
+
30
+ ### PRICES
31
+ A contract that stores prices for each project.
32
+
33
+
34
+ ```solidity
35
+ IJBPrices public immutable override PRICES;
36
+ ```
37
+
38
+
39
+ ### PROJECTS
40
+ Mints ERC-721s that represent project ownership and transfers.
41
+
42
+
43
+ ```solidity
44
+ IJBProjects public immutable override PROJECTS;
45
+ ```
46
+
47
+
48
+ ### RULESETS
49
+ The contract storing and managing project rulesets.
50
+
51
+
52
+ ```solidity
53
+ IJBRulesets public immutable override RULESETS;
54
+ ```
55
+
56
+
57
+ ### SPLITS
58
+ The contract that stores splits for each project.
59
+
60
+
61
+ ```solidity
62
+ IJBSplits public immutable override SPLITS;
63
+ ```
64
+
65
+
66
+ ### TOKENS
67
+ The contract that manages token minting and burning.
68
+
69
+
70
+ ```solidity
71
+ IJBTokens public immutable override TOKENS;
72
+ ```
73
+
74
+
75
+ ### pendingReservedTokenBalanceOf
76
+ A project's unrealized reserved token balance (i.e. reserved tokens which haven't been sent out to the
77
+ reserved token split group yet).
78
+
79
+
80
+ ```solidity
81
+ mapping(uint256 projectId => uint256) public override pendingReservedTokenBalanceOf;
82
+ ```
83
+
84
+
85
+ ### uriOf
86
+ The metadata URI for each project. This is typically an IPFS hash, optionally with an `ipfs://` prefix.
87
+
88
+
89
+ ```solidity
90
+ mapping(uint256 projectId => string) public override uriOf;
91
+ ```
92
+
93
+
94
+ ## Functions
95
+ ### constructor
96
+
97
+
98
+ ```solidity
99
+ constructor(
100
+ IJBDirectory directory,
101
+ IJBFundAccessLimits fundAccessLimits,
102
+ IJBPermissions permissions,
103
+ IJBPrices prices,
104
+ IJBProjects projects,
105
+ IJBRulesets rulesets,
106
+ IJBSplits splits,
107
+ IJBTokens tokens,
108
+ address trustedForwarder
109
+ )
110
+ JBPermissioned(permissions)
111
+ ERC2771Context(trustedForwarder);
112
+ ```
113
+ **Parameters**
114
+
115
+ |Name|Type|Description|
116
+ |----|----|-----------|
117
+ |`directory`|`IJBDirectory`|A contract storing directories of terminals and controllers for each project.|
118
+ |`fundAccessLimits`|`IJBFundAccessLimits`|A contract that stores fund access limits for each project.|
119
+ |`permissions`|`IJBPermissions`|A contract storing permissions.|
120
+ |`prices`|`IJBPrices`|A contract that stores prices for each project.|
121
+ |`projects`|`IJBProjects`|A contract which mints ERC-721s that represent project ownership and transfers.|
122
+ |`rulesets`|`IJBRulesets`|A contract storing and managing project rulesets.|
123
+ |`splits`|`IJBSplits`|A contract that stores splits for each project.|
124
+ |`tokens`|`IJBTokens`|A contract that manages token minting and burning.|
125
+ |`trustedForwarder`|`address`|The trusted forwarder for the ERC2771Context.|
126
+
127
+
128
+ ### allRulesetsOf
129
+
130
+ Get an array of a project's rulesets (with metadata) up to a maximum array size, sorted from latest to
131
+ earliest.
132
+
133
+
134
+ ```solidity
135
+ function allRulesetsOf(
136
+ uint256 projectId,
137
+ uint256 startingId,
138
+ uint256 size
139
+ )
140
+ external
141
+ view
142
+ override
143
+ returns (JBRulesetWithMetadata[] memory rulesets);
144
+ ```
145
+ **Parameters**
146
+
147
+ |Name|Type|Description|
148
+ |----|----|-----------|
149
+ |`projectId`|`uint256`|The ID of the project to get the rulesets of.|
150
+ |`startingId`|`uint256`|The ID of the ruleset to begin with. This will be the latest ruleset in the result. If the `startingId` is 0, passed, the project's latest ruleset will be used.|
151
+ |`size`|`uint256`|The maximum number of rulesets to return.|
152
+
153
+ **Returns**
154
+
155
+ |Name|Type|Description|
156
+ |----|----|-----------|
157
+ |`rulesets`|`JBRulesetWithMetadata[]`|The array of rulesets with their metadata.|
158
+
159
+
160
+ ### currentRulesetOf
161
+
162
+ A project's currently active ruleset and its metadata.
163
+
164
+
165
+ ```solidity
166
+ function currentRulesetOf(uint256 projectId)
167
+ external
168
+ view
169
+ override
170
+ returns (JBRuleset memory ruleset, JBRulesetMetadata memory metadata);
171
+ ```
172
+ **Parameters**
173
+
174
+ |Name|Type|Description|
175
+ |----|----|-----------|
176
+ |`projectId`|`uint256`|The ID of the project to get the current ruleset of.|
177
+
178
+ **Returns**
179
+
180
+ |Name|Type|Description|
181
+ |----|----|-----------|
182
+ |`ruleset`|`JBRuleset`|The current ruleset's struct.|
183
+ |`metadata`|`JBRulesetMetadata`|The current ruleset's metadata.|
184
+
185
+
186
+ ### getRulesetOf
187
+
188
+ Get the `JBRuleset` and `JBRulesetMetadata` corresponding to the specified `rulesetId`.
189
+
190
+
191
+ ```solidity
192
+ function getRulesetOf(
193
+ uint256 projectId,
194
+ uint256 rulesetId
195
+ )
196
+ external
197
+ view
198
+ override
199
+ returns (JBRuleset memory ruleset, JBRulesetMetadata memory metadata);
200
+ ```
201
+ **Parameters**
202
+
203
+ |Name|Type|Description|
204
+ |----|----|-----------|
205
+ |`projectId`|`uint256`|The ID of the project the ruleset belongs to.|
206
+ |`rulesetId`|`uint256`||
207
+
208
+ **Returns**
209
+
210
+ |Name|Type|Description|
211
+ |----|----|-----------|
212
+ |`ruleset`|`JBRuleset`|The ruleset's struct.|
213
+ |`metadata`|`JBRulesetMetadata`|The ruleset's metadata.|
214
+
215
+
216
+ ### latestQueuedRulesetOf
217
+
218
+ Gets the latest ruleset queued for a project, its approval status, and its metadata.
219
+
220
+ *The 'latest queued ruleset' is the ruleset initialized furthest in the future (at the end of the ruleset
221
+ queue).*
222
+
223
+
224
+ ```solidity
225
+ function latestQueuedRulesetOf(uint256 projectId)
226
+ external
227
+ view
228
+ override
229
+ returns (JBRuleset memory ruleset, JBRulesetMetadata memory metadata, JBApprovalStatus approvalStatus);
230
+ ```
231
+ **Parameters**
232
+
233
+ |Name|Type|Description|
234
+ |----|----|-----------|
235
+ |`projectId`|`uint256`|The ID of the project to get the latest ruleset of.|
236
+
237
+ **Returns**
238
+
239
+ |Name|Type|Description|
240
+ |----|----|-----------|
241
+ |`ruleset`|`JBRuleset`|The struct for the project's latest queued ruleset.|
242
+ |`metadata`|`JBRulesetMetadata`|The ruleset's metadata.|
243
+ |`approvalStatus`|`JBApprovalStatus`|The ruleset's approval status.|
244
+
245
+
246
+ ### setTerminalsAllowed
247
+
248
+ Check whether the project's terminals can currently be set.
249
+
250
+
251
+ ```solidity
252
+ function setTerminalsAllowed(uint256 projectId) external view returns (bool);
253
+ ```
254
+ **Parameters**
255
+
256
+ |Name|Type|Description|
257
+ |----|----|-----------|
258
+ |`projectId`|`uint256`|The ID of the project to check.|
259
+
260
+ **Returns**
261
+
262
+ |Name|Type|Description|
263
+ |----|----|-----------|
264
+ |`<none>`|`bool`|A `bool` which is true if the project allows terminals to be set.|
265
+
266
+
267
+ ### setControllerAllowed
268
+
269
+ Check whether the project's controller can currently be set.
270
+
271
+
272
+ ```solidity
273
+ function setControllerAllowed(uint256 projectId) external view returns (bool);
274
+ ```
275
+ **Parameters**
276
+
277
+ |Name|Type|Description|
278
+ |----|----|-----------|
279
+ |`projectId`|`uint256`|The ID of the project to check.|
280
+
281
+ **Returns**
282
+
283
+ |Name|Type|Description|
284
+ |----|----|-----------|
285
+ |`<none>`|`bool`|A `bool` which is true if the project allows controllers to be set.|
286
+
287
+
288
+ ### totalTokenSupplyWithReservedTokensOf
289
+
290
+ Gets the a project token's total supply, including pending reserved tokens.
291
+
292
+
293
+ ```solidity
294
+ function totalTokenSupplyWithReservedTokensOf(uint256 projectId) external view override returns (uint256);
295
+ ```
296
+ **Parameters**
297
+
298
+ |Name|Type|Description|
299
+ |----|----|-----------|
300
+ |`projectId`|`uint256`|The ID of the project to get the total token supply of.|
301
+
302
+ **Returns**
303
+
304
+ |Name|Type|Description|
305
+ |----|----|-----------|
306
+ |`<none>`|`uint256`|The total supply of the project's token, including pending reserved tokens.|
307
+
308
+
309
+ ### upcomingRulesetOf
310
+
311
+ A project's next ruleset along with its metadata.
312
+
313
+ *If an upcoming ruleset isn't found, returns an empty ruleset with all properties set to 0.*
314
+
315
+
316
+ ```solidity
317
+ function upcomingRulesetOf(uint256 projectId)
318
+ external
319
+ view
320
+ override
321
+ returns (JBRuleset memory ruleset, JBRulesetMetadata memory metadata);
322
+ ```
323
+ **Parameters**
324
+
325
+ |Name|Type|Description|
326
+ |----|----|-----------|
327
+ |`projectId`|`uint256`|The ID of the project to get the next ruleset of.|
328
+
329
+ **Returns**
330
+
331
+ |Name|Type|Description|
332
+ |----|----|-----------|
333
+ |`ruleset`|`JBRuleset`|The upcoming ruleset's struct.|
334
+ |`metadata`|`JBRulesetMetadata`|The upcoming ruleset's metadata.|
335
+
336
+
337
+ ### supportsInterface
338
+
339
+ Indicates whether this contract adheres to the specified interface.
340
+
341
+ *See [IERC165-supportsInterface](/src/JBProjects.sol/contract.JBProjects.md#supportsinterface).*
342
+
343
+
344
+ ```solidity
345
+ function supportsInterface(bytes4 interfaceId) public pure override returns (bool);
346
+ ```
347
+ **Parameters**
348
+
349
+ |Name|Type|Description|
350
+ |----|----|-----------|
351
+ |`interfaceId`|`bytes4`|The ID of the interface to check for adherence to.|
352
+
353
+ **Returns**
354
+
355
+ |Name|Type|Description|
356
+ |----|----|-----------|
357
+ |`<none>`|`bool`|A flag indicating if the provided interface ID is supported.|
358
+
359
+
360
+ ### _contextSuffixLength
361
+
362
+ *`ERC-2771` specifies the context as being a single address (20 bytes).*
363
+
364
+
365
+ ```solidity
366
+ function _contextSuffixLength() internal view override(ERC2771Context, Context) returns (uint256);
367
+ ```
368
+
369
+ ### _currentRulesetOf
370
+
371
+ The project's current ruleset.
372
+
373
+
374
+ ```solidity
375
+ function _currentRulesetOf(uint256 projectId) internal view returns (JBRuleset memory);
376
+ ```
377
+ **Parameters**
378
+
379
+ |Name|Type|Description|
380
+ |----|----|-----------|
381
+ |`projectId`|`uint256`|The ID of the project to check.|
382
+
383
+ **Returns**
384
+
385
+ |Name|Type|Description|
386
+ |----|----|-----------|
387
+ |`<none>`|`JBRuleset`|The project's current ruleset.|
388
+
389
+
390
+ ### _isTerminalOf
391
+
392
+ Indicates whether the provided address is a terminal for the project.
393
+
394
+
395
+ ```solidity
396
+ function _isTerminalOf(uint256 projectId, address terminal) internal view returns (bool);
397
+ ```
398
+ **Parameters**
399
+
400
+ |Name|Type|Description|
401
+ |----|----|-----------|
402
+ |`projectId`|`uint256`|The ID of the project to check.|
403
+ |`terminal`|`address`|The address to check.|
404
+
405
+ **Returns**
406
+
407
+ |Name|Type|Description|
408
+ |----|----|-----------|
409
+ |`<none>`|`bool`|A flag indicating if the provided address is a terminal for the project.|
410
+
411
+
412
+ ### _hasDataHookMintPermissionFor
413
+
414
+ Indicates whether the provided address has mint permission for the project byway of the data hook.
415
+
416
+
417
+ ```solidity
418
+ function _hasDataHookMintPermissionFor(
419
+ uint256 projectId,
420
+ JBRuleset memory ruleset,
421
+ address addrs
422
+ )
423
+ internal
424
+ view
425
+ returns (bool);
426
+ ```
427
+ **Parameters**
428
+
429
+ |Name|Type|Description|
430
+ |----|----|-----------|
431
+ |`projectId`|`uint256`|The ID of the project to check.|
432
+ |`ruleset`|`JBRuleset`|The ruleset to check.|
433
+ |`addrs`|`address`|The address to check.|
434
+
435
+ **Returns**
436
+
437
+ |Name|Type|Description|
438
+ |----|----|-----------|
439
+ |`<none>`|`bool`|A flag indicating if the provided address has mint permission for the project.|
440
+
441
+
442
+ ### _msgData
443
+
444
+ The calldata. Preferred to use over `msg.data`.
445
+
446
+
447
+ ```solidity
448
+ function _msgData() internal view override(ERC2771Context, Context) returns (bytes calldata);
449
+ ```
450
+ **Returns**
451
+
452
+ |Name|Type|Description|
453
+ |----|----|-----------|
454
+ |`<none>`|`bytes`|calldata The `msg.data` of this call.|
455
+
456
+
457
+ ### _msgSender
458
+
459
+ The message's sender. Preferred to use over `msg.sender`.
460
+
461
+
462
+ ```solidity
463
+ function _msgSender() internal view override(ERC2771Context, Context) returns (address sender);
464
+ ```
465
+ **Returns**
466
+
467
+ |Name|Type|Description|
468
+ |----|----|-----------|
469
+ |`sender`|`address`|The address which sent this call.|
470
+
471
+
472
+ ### _upcomingRulesetOf
473
+
474
+ The project's upcoming ruleset.
475
+
476
+
477
+ ```solidity
478
+ function _upcomingRulesetOf(uint256 projectId) internal view returns (JBRuleset memory);
479
+ ```
480
+ **Parameters**
481
+
482
+ |Name|Type|Description|
483
+ |----|----|-----------|
484
+ |`projectId`|`uint256`|The ID of the project to check.|
485
+
486
+ **Returns**
487
+
488
+ |Name|Type|Description|
489
+ |----|----|-----------|
490
+ |`<none>`|`JBRuleset`|The project's upcoming ruleset.|
491
+
492
+
493
+ ### addPriceFeed
494
+
495
+ Add a price feed for a project.
496
+
497
+ *Can only be called by the project's owner or an address with the owner's permission to `ADD_PRICE_FEED`.*
498
+
499
+
500
+ ```solidity
501
+ function addPriceFeed(
502
+ uint256 projectId,
503
+ uint256 pricingCurrency,
504
+ uint256 unitCurrency,
505
+ IJBPriceFeed feed
506
+ )
507
+ external
508
+ override;
509
+ ```
510
+ **Parameters**
511
+
512
+ |Name|Type|Description|
513
+ |----|----|-----------|
514
+ |`projectId`|`uint256`|The ID of the project to add the feed for.|
515
+ |`pricingCurrency`|`uint256`|The currency the feed's output price is in terms of.|
516
+ |`unitCurrency`|`uint256`|The currency being priced by the feed.|
517
+ |`feed`|`IJBPriceFeed`|The address of the price feed to add.|
518
+
519
+
520
+ ### burnTokensOf
521
+
522
+ Burns a project's tokens or credits from the specific holder's balance.
523
+
524
+ *Can only be called by the holder, an address with the holder's permission to `BURN_TOKENS`, or a project's
525
+ terminal.*
526
+
527
+
528
+ ```solidity
529
+ function burnTokensOf(address holder, uint256 projectId, uint256 tokenCount, string calldata memo) external override;
530
+ ```
531
+ **Parameters**
532
+
533
+ |Name|Type|Description|
534
+ |----|----|-----------|
535
+ |`holder`|`address`|The address whose tokens are being burned.|
536
+ |`projectId`|`uint256`|The ID of the project whose tokens are being burned.|
537
+ |`tokenCount`|`uint256`|The number of tokens to burn.|
538
+ |`memo`|`string`|A memo to pass along to the emitted event.|
539
+
540
+
541
+ ### claimTokensFor
542
+
543
+ Redeem credits to claim tokens into a `beneficiary`'s account.
544
+
545
+ *Can only be called by the credit holder or an address with the holder's permission to `CLAIM_TOKENS`.*
546
+
547
+
548
+ ```solidity
549
+ function claimTokensFor(address holder, uint256 projectId, uint256 tokenCount, address beneficiary) external override;
550
+ ```
551
+ **Parameters**
552
+
553
+ |Name|Type|Description|
554
+ |----|----|-----------|
555
+ |`holder`|`address`|The address to redeem credits from.|
556
+ |`projectId`|`uint256`|The ID of the project whose tokens are being claimed.|
557
+ |`tokenCount`|`uint256`|The number of tokens to claim.|
558
+ |`beneficiary`|`address`|The account the claimed tokens will go to.|
559
+
560
+
561
+ ### deployERC20For
562
+
563
+ Deploys an ERC-20 token for a project. It will be used when claiming tokens (with credits).
564
+
565
+ *Deploys the project's ERC-20 contract.*
566
+
567
+ *Can only be called by the project's owner or an address with the owner's permission to `DEPLOY_ERC20`.*
568
+
569
+
570
+ ```solidity
571
+ function deployERC20For(
572
+ uint256 projectId,
573
+ string calldata name,
574
+ string calldata symbol,
575
+ bytes32 salt
576
+ )
577
+ external
578
+ override
579
+ returns (IJBToken token);
580
+ ```
581
+ **Parameters**
582
+
583
+ |Name|Type|Description|
584
+ |----|----|-----------|
585
+ |`projectId`|`uint256`|The ID of the project to deploy the ERC-20 for.|
586
+ |`name`|`string`|The ERC-20's name.|
587
+ |`symbol`|`string`|The ERC-20's symbol.|
588
+ |`salt`|`bytes32`|The salt used for ERC-1167 clone deployment. Pass a non-zero salt for deterministic deployment based on `msg.sender` and the `TOKEN` implementation address.|
589
+
590
+ **Returns**
591
+
592
+ |Name|Type|Description|
593
+ |----|----|-----------|
594
+ |`token`|`IJBToken`|The address of the token that was deployed.|
595
+
596
+
597
+ ### executePayReservedTokenToTerminal
598
+
599
+ When a project receives reserved tokens, if it has a terminal for the token, this is used to pay the
600
+ terminal.
601
+
602
+ *Can only be called by this controller.*
603
+
604
+
605
+ ```solidity
606
+ function executePayReservedTokenToTerminal(
607
+ IJBTerminal terminal,
608
+ uint256 projectId,
609
+ IJBToken token,
610
+ uint256 splitTokenCount,
611
+ address beneficiary,
612
+ bytes calldata metadata
613
+ )
614
+ external;
615
+ ```
616
+ **Parameters**
617
+
618
+ |Name|Type|Description|
619
+ |----|----|-----------|
620
+ |`terminal`|`IJBTerminal`|The terminal to pay.|
621
+ |`projectId`|`uint256`|The ID of the project being paid.|
622
+ |`token`|`IJBToken`|The token being paid with.|
623
+ |`splitTokenCount`|`uint256`|The number of tokens being paid.|
624
+ |`beneficiary`|`address`|The payment's beneficiary.|
625
+ |`metadata`|`bytes`|The pay metadata sent to the terminal.|
626
+
627
+
628
+ ### launchProjectFor
629
+
630
+ Creates a project.
631
+
632
+ *This will mint the project's ERC-721 to the `owner`'s address, queue the specified rulesets, and set up the
633
+ specified splits and terminals. Each operation within this transaction can be done in sequence separately.*
634
+
635
+ *Anyone can deploy a project to any `owner`'s address.*
636
+
637
+
638
+ ```solidity
639
+ function launchProjectFor(
640
+ address owner,
641
+ string calldata projectUri,
642
+ JBRulesetConfig[] calldata rulesetConfigurations,
643
+ JBTerminalConfig[] calldata terminalConfigurations,
644
+ string calldata memo
645
+ )
646
+ external
647
+ override
648
+ returns (uint256 projectId);
649
+ ```
650
+ **Parameters**
651
+
652
+ |Name|Type|Description|
653
+ |----|----|-----------|
654
+ |`owner`|`address`|The project's owner. The project ERC-721 will be minted to this address.|
655
+ |`projectUri`|`string`|The project's metadata URI. This is typically an IPFS hash, optionally with the `ipfs://` prefix. This can be updated by the project's owner.|
656
+ |`rulesetConfigurations`|`JBRulesetConfig[]`|The rulesets to queue.|
657
+ |`terminalConfigurations`|`JBTerminalConfig[]`|The terminals to set up for the project.|
658
+ |`memo`|`string`|A memo to pass along to the emitted event.|
659
+
660
+ **Returns**
661
+
662
+ |Name|Type|Description|
663
+ |----|----|-----------|
664
+ |`projectId`|`uint256`|The project's ID.|
665
+
666
+
667
+ ### launchRulesetsFor
668
+
669
+ Queue a project's initial rulesets and set up terminals for it. Projects which already have rulesets
670
+ should use `queueRulesetsOf(...)`.
671
+
672
+ *Each operation within this transaction can be done in sequence separately.*
673
+
674
+ *Can only be called by the project's owner or an address with the owner's permission to `QUEUE_RULESETS`.*
675
+
676
+
677
+ ```solidity
678
+ function launchRulesetsFor(
679
+ uint256 projectId,
680
+ JBRulesetConfig[] calldata rulesetConfigurations,
681
+ JBTerminalConfig[] calldata terminalConfigurations,
682
+ string calldata memo
683
+ )
684
+ external
685
+ override
686
+ returns (uint256 rulesetId);
687
+ ```
688
+ **Parameters**
689
+
690
+ |Name|Type|Description|
691
+ |----|----|-----------|
692
+ |`projectId`|`uint256`|The ID of the project to launch rulesets for.|
693
+ |`rulesetConfigurations`|`JBRulesetConfig[]`|The rulesets to queue.|
694
+ |`terminalConfigurations`|`JBTerminalConfig[]`|The terminals to set up.|
695
+ |`memo`|`string`|A memo to pass along to the emitted event.|
696
+
697
+ **Returns**
698
+
699
+ |Name|Type|Description|
700
+ |----|----|-----------|
701
+ |`rulesetId`|`uint256`|The ID of the last successfully queued ruleset.|
702
+
703
+
704
+ ### migrate
705
+
706
+ Migrate a project from this controller to another one.
707
+
708
+ *Can only be called by the directory.*
709
+
710
+
711
+ ```solidity
712
+ function migrate(uint256 projectId, IERC165 to) external override;
713
+ ```
714
+ **Parameters**
715
+
716
+ |Name|Type|Description|
717
+ |----|----|-----------|
718
+ |`projectId`|`uint256`|The ID of the project to migrate.|
719
+ |`to`|`IERC165`|The controller to migrate the project to.|
720
+
721
+
722
+ ### mintTokensOf
723
+
724
+ Add new project tokens or credits to the specified beneficiary's balance. Optionally, reserve a portion
725
+ according to the ruleset's reserved percent.
726
+
727
+ *Can only be called by the project's owner, an address with the owner's permission to `MINT_TOKENS`, one of
728
+ the project's terminals, or the project's data hook.*
729
+
730
+ *If the ruleset's metadata has `allowOwnerMinting` set to `false`, this function can only be called by the
731
+ project's terminals or data hook.*
732
+
733
+
734
+ ```solidity
735
+ function mintTokensOf(
736
+ uint256 projectId,
737
+ uint256 tokenCount,
738
+ address beneficiary,
739
+ string calldata memo,
740
+ bool useReservedPercent
741
+ )
742
+ external
743
+ override
744
+ returns (uint256 beneficiaryTokenCount);
745
+ ```
746
+ **Parameters**
747
+
748
+ |Name|Type|Description|
749
+ |----|----|-----------|
750
+ |`projectId`|`uint256`|The ID of the project whose tokens are being minted.|
751
+ |`tokenCount`|`uint256`|The number of tokens to mint, including any reserved tokens.|
752
+ |`beneficiary`|`address`|The address which will receive the (non-reserved) tokens.|
753
+ |`memo`|`string`|A memo to pass along to the emitted event.|
754
+ |`useReservedPercent`|`bool`|Whether to apply the ruleset's reserved percent.|
755
+
756
+ **Returns**
757
+
758
+ |Name|Type|Description|
759
+ |----|----|-----------|
760
+ |`beneficiaryTokenCount`|`uint256`|The number of tokens minted for the `beneficiary`.|
761
+
762
+
763
+ ### queueRulesetsOf
764
+
765
+ Add one or more rulesets to the end of a project's ruleset queue. Rulesets take effect after the
766
+ previous ruleset in the queue ends, and only if they are approved by the previous ruleset's approval hook.
767
+
768
+ *Can only be called by the project's owner or an address with the owner's permission to `QUEUE_RULESETS`.*
769
+
770
+
771
+ ```solidity
772
+ function queueRulesetsOf(
773
+ uint256 projectId,
774
+ JBRulesetConfig[] calldata rulesetConfigurations,
775
+ string calldata memo
776
+ )
777
+ external
778
+ override
779
+ returns (uint256 rulesetId);
780
+ ```
781
+ **Parameters**
782
+
783
+ |Name|Type|Description|
784
+ |----|----|-----------|
785
+ |`projectId`|`uint256`|The ID of the project to queue rulesets for.|
786
+ |`rulesetConfigurations`|`JBRulesetConfig[]`|The rulesets to queue.|
787
+ |`memo`|`string`|A memo to pass along to the emitted event.|
788
+
789
+ **Returns**
790
+
791
+ |Name|Type|Description|
792
+ |----|----|-----------|
793
+ |`rulesetId`|`uint256`|The ID of the last ruleset which was successfully queued.|
794
+
795
+
796
+ ### beforeReceiveMigrationFrom
797
+
798
+ Prepares this controller to receive a project being migrated from another controller.
799
+
800
+ *This controller should not be the project's controller yet.*
801
+
802
+
803
+ ```solidity
804
+ function beforeReceiveMigrationFrom(IERC165 from, uint256 projectId) external override;
805
+ ```
806
+ **Parameters**
807
+
808
+ |Name|Type|Description|
809
+ |----|----|-----------|
810
+ |`from`|`IERC165`|The controller being migrated from.|
811
+ |`projectId`|`uint256`|The ID of the project that will migrate to this controller.|
812
+
813
+
814
+ ### sendReservedTokensToSplitsOf
815
+
816
+ Sends a project's pending reserved tokens to its reserved token splits.
817
+
818
+ *If the project has no reserved token splits, or if they don't add up to 100%, leftover tokens are sent to
819
+ the project's owner.*
820
+
821
+
822
+ ```solidity
823
+ function sendReservedTokensToSplitsOf(uint256 projectId) external override returns (uint256);
824
+ ```
825
+ **Parameters**
826
+
827
+ |Name|Type|Description|
828
+ |----|----|-----------|
829
+ |`projectId`|`uint256`|The ID of the project to send reserved tokens for.|
830
+
831
+ **Returns**
832
+
833
+ |Name|Type|Description|
834
+ |----|----|-----------|
835
+ |`<none>`|`uint256`|The amount of reserved tokens minted and sent.|
836
+
837
+
838
+ ### setSplitGroupsOf
839
+
840
+ Sets a project's split groups. The new split groups must include any current splits which are locked.
841
+
842
+ *Can only be called by the project's owner or an address with the owner's permission to `SET_SPLIT_GROUPS`.*
843
+
844
+
845
+ ```solidity
846
+ function setSplitGroupsOf(
847
+ uint256 projectId,
848
+ uint256 rulesetId,
849
+ JBSplitGroup[] calldata splitGroups
850
+ )
851
+ external
852
+ override;
853
+ ```
854
+ **Parameters**
855
+
856
+ |Name|Type|Description|
857
+ |----|----|-----------|
858
+ |`projectId`|`uint256`|The ID of the project to set the split groups of.|
859
+ |`rulesetId`|`uint256`|The ID of the ruleset the split groups should be active in. Use a `rulesetId` of 0 to set the default split groups, which are used when a ruleset has no splits set. If there are no default splits and no splits are set, all splits are sent to the project's owner.|
860
+ |`splitGroups`|`JBSplitGroup[]`|An array of split groups to set.|
861
+
862
+
863
+ ### setTokenFor
864
+
865
+ Set a project's token. If the project's token is already set, this will revert.
866
+
867
+ *Can only be called by the project's owner or an address with the owner's permission to `SET_TOKEN`.*
868
+
869
+
870
+ ```solidity
871
+ function setTokenFor(uint256 projectId, IJBToken token) external override;
872
+ ```
873
+ **Parameters**
874
+
875
+ |Name|Type|Description|
876
+ |----|----|-----------|
877
+ |`projectId`|`uint256`|The ID of the project to set the token of.|
878
+ |`token`|`IJBToken`|The new token's address.|
879
+
880
+
881
+ ### setUriOf
882
+
883
+ Set a project's metadata URI.
884
+
885
+ *This is typically an IPFS hash, optionally with an `ipfs://` prefix.*
886
+
887
+ *Can only be called by the project's owner or an address with the owner's permission to
888
+ `SET_PROJECT_URI`.*
889
+
890
+
891
+ ```solidity
892
+ function setUriOf(uint256 projectId, string calldata uri) external override;
893
+ ```
894
+ **Parameters**
895
+
896
+ |Name|Type|Description|
897
+ |----|----|-----------|
898
+ |`projectId`|`uint256`|The ID of the project to set the metadata URI of.|
899
+ |`uri`|`string`|The metadata URI to set.|
900
+
901
+
902
+ ### transferCreditsFrom
903
+
904
+ Allows a credit holder to transfer credits to another address.
905
+
906
+ *Can only be called by the credit holder or an address with the holder's permission to `TRANSFER_CREDITS`.*
907
+
908
+
909
+ ```solidity
910
+ function transferCreditsFrom(
911
+ address holder,
912
+ uint256 projectId,
913
+ address recipient,
914
+ uint256 creditCount
915
+ )
916
+ external
917
+ override;
918
+ ```
919
+ **Parameters**
920
+
921
+ |Name|Type|Description|
922
+ |----|----|-----------|
923
+ |`holder`|`address`|The address to transfer credits from.|
924
+ |`projectId`|`uint256`|The ID of the project whose credits are being transferred.|
925
+ |`recipient`|`address`|The address to transfer credits to.|
926
+ |`creditCount`|`uint256`|The number of credits to transfer.|
927
+
928
+
929
+ ### _configureTerminals
930
+
931
+ Set up a project's terminals.
932
+
933
+
934
+ ```solidity
935
+ function _configureTerminals(uint256 projectId, JBTerminalConfig[] calldata terminalConfigs) internal;
936
+ ```
937
+ **Parameters**
938
+
939
+ |Name|Type|Description|
940
+ |----|----|-----------|
941
+ |`projectId`|`uint256`|The ID of the project to set up terminals for.|
942
+ |`terminalConfigs`|`JBTerminalConfig[]`|The terminals to set up.|
943
+
944
+
945
+ ### _queueRulesets
946
+
947
+ Queues one or more rulesets and stores information pertinent to the configuration.
948
+
949
+
950
+ ```solidity
951
+ function _queueRulesets(
952
+ uint256 projectId,
953
+ JBRulesetConfig[] calldata rulesetConfigurations
954
+ )
955
+ internal
956
+ returns (uint256 rulesetId);
957
+ ```
958
+ **Parameters**
959
+
960
+ |Name|Type|Description|
961
+ |----|----|-----------|
962
+ |`projectId`|`uint256`|The ID of the project to queue rulesets for.|
963
+ |`rulesetConfigurations`|`JBRulesetConfig[]`|The rulesets being queued.|
964
+
965
+ **Returns**
966
+
967
+ |Name|Type|Description|
968
+ |----|----|-----------|
969
+ |`rulesetId`|`uint256`|The ID of the last ruleset that was successfully queued.|
970
+
971
+
972
+ ### _sendReservedTokensToSplitsOf
973
+
974
+ Sends pending reserved tokens to the project's reserved token splits.
975
+
976
+ *If the project has no reserved token splits, or if they don't add up to 100%, leftover tokens are sent to
977
+ the project's owner.*
978
+
979
+
980
+ ```solidity
981
+ function _sendReservedTokensToSplitsOf(uint256 projectId) internal returns (uint256 tokenCount);
982
+ ```
983
+ **Parameters**
984
+
985
+ |Name|Type|Description|
986
+ |----|----|-----------|
987
+ |`projectId`|`uint256`|The ID of the project to send reserved tokens for.|
988
+
989
+ **Returns**
990
+
991
+ |Name|Type|Description|
992
+ |----|----|-----------|
993
+ |`tokenCount`|`uint256`|The amount of reserved tokens minted and sent.|
994
+
995
+
996
+ ### _sendReservedTokensToSplitGroupOf
997
+
998
+ Send project tokens to a split group.
999
+
1000
+ *This is used to send reserved tokens to the reserved token split group.*
1001
+
1002
+
1003
+ ```solidity
1004
+ function _sendReservedTokensToSplitGroupOf(
1005
+ uint256 projectId,
1006
+ uint256 rulesetId,
1007
+ uint256 groupId,
1008
+ uint256 tokenCount,
1009
+ IJBToken token
1010
+ )
1011
+ internal
1012
+ returns (uint256 leftoverTokenCount);
1013
+ ```
1014
+ **Parameters**
1015
+
1016
+ |Name|Type|Description|
1017
+ |----|----|-----------|
1018
+ |`projectId`|`uint256`|The ID of the project the splits belong to.|
1019
+ |`rulesetId`|`uint256`|The ID of the split group's ruleset.|
1020
+ |`groupId`|`uint256`|The ID of the split group.|
1021
+ |`tokenCount`|`uint256`|The number of tokens to send.|
1022
+ |`token`|`IJBToken`|The token to send.|
1023
+
1024
+ **Returns**
1025
+
1026
+ |Name|Type|Description|
1027
+ |----|----|-----------|
1028
+ |`leftoverTokenCount`|`uint256`|If the split percents don't add up to 100%, the leftover amount is returned.|
1029
+
1030
+
1031
+ ### _sendTokens
1032
+
1033
+ Send tokens from this contract to a recipient.
1034
+
1035
+
1036
+ ```solidity
1037
+ function _sendTokens(uint256 projectId, uint256 tokenCount, address recipient, IJBToken token) internal;
1038
+ ```
1039
+ **Parameters**
1040
+
1041
+ |Name|Type|Description|
1042
+ |----|----|-----------|
1043
+ |`projectId`|`uint256`|The ID of the project the tokens belong to.|
1044
+ |`tokenCount`|`uint256`|The number of tokens to send.|
1045
+ |`recipient`|`address`|The address to send the tokens to.|
1046
+ |`token`|`IJBToken`|The token to send, if one exists|
1047
+
1048
+
1049
+ ## Errors
1050
+ ### JBController_AddingPriceFeedNotAllowed
1051
+
1052
+ ```solidity
1053
+ error JBController_AddingPriceFeedNotAllowed();
1054
+ ```
1055
+
1056
+ ### JBController_CreditTransfersPaused
1057
+
1058
+ ```solidity
1059
+ error JBController_CreditTransfersPaused();
1060
+ ```
1061
+
1062
+ ### JBController_InvalidCashOutTaxRate
1063
+
1064
+ ```solidity
1065
+ error JBController_InvalidCashOutTaxRate(uint256 rate, uint256 limit);
1066
+ ```
1067
+
1068
+ ### JBController_InvalidReservedPercent
1069
+
1070
+ ```solidity
1071
+ error JBController_InvalidReservedPercent(uint256 percent, uint256 limit);
1072
+ ```
1073
+
1074
+ ### JBController_MintNotAllowedAndNotTerminalOrHook
1075
+
1076
+ ```solidity
1077
+ error JBController_MintNotAllowedAndNotTerminalOrHook();
1078
+ ```
1079
+
1080
+ ### JBController_NoReservedTokens
1081
+
1082
+ ```solidity
1083
+ error JBController_NoReservedTokens();
1084
+ ```
1085
+
1086
+ ### JBController_OnlyDirectory
1087
+
1088
+ ```solidity
1089
+ error JBController_OnlyDirectory(address sender, IJBDirectory directory);
1090
+ ```
1091
+
1092
+ ### JBController_RulesetsAlreadyLaunched
1093
+
1094
+ ```solidity
1095
+ error JBController_RulesetsAlreadyLaunched();
1096
+ ```
1097
+
1098
+ ### JBController_RulesetsArrayEmpty
1099
+
1100
+ ```solidity
1101
+ error JBController_RulesetsArrayEmpty();
1102
+ ```
1103
+
1104
+ ### JBController_RulesetSetTokenNotAllowed
1105
+
1106
+ ```solidity
1107
+ error JBController_RulesetSetTokenNotAllowed();
1108
+ ```
1109
+
1110
+ ### JBController_ZeroTokensToBurn
1111
+
1112
+ ```solidity
1113
+ error JBController_ZeroTokensToBurn();
1114
+ ```
1115
+
1116
+ ### JBController_ZeroTokensToMint
1117
+
1118
+ ```solidity
1119
+ error JBController_ZeroTokensToMint();
1120
+ ```
1121
+