@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,280 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
+
6
+ import {IJBDirectory} from "./IJBDirectory.sol";
7
+ import {IJBDirectoryAccessControl} from "./IJBDirectoryAccessControl.sol";
8
+ import {IJBFundAccessLimits} from "./IJBFundAccessLimits.sol";
9
+ import {IJBPriceFeed} from "./IJBPriceFeed.sol";
10
+ import {IJBPrices} from "./IJBPrices.sol";
11
+ import {IJBProjects} from "./IJBProjects.sol";
12
+ import {IJBProjectUriRegistry} from "./IJBProjectUriRegistry.sol";
13
+ import {IJBRulesets} from "./IJBRulesets.sol";
14
+ import {IJBSplits} from "./IJBSplits.sol";
15
+ import {IJBTerminal} from "./IJBTerminal.sol";
16
+ import {IJBToken} from "./IJBToken.sol";
17
+ import {IJBTokens} from "./IJBTokens.sol";
18
+ import {JBApprovalStatus} from "./../enums/JBApprovalStatus.sol";
19
+ import {JBRuleset} from "./../structs/JBRuleset.sol";
20
+ import {JBRulesetConfig} from "./../structs/JBRulesetConfig.sol";
21
+ import {JBRulesetMetadata} from "./../structs/JBRulesetMetadata.sol";
22
+ import {JBRulesetWithMetadata} from "./../structs/JBRulesetWithMetadata.sol";
23
+ import {JBSplit} from "./../structs/JBSplit.sol";
24
+ import {JBSplitGroup} from "./../structs/JBSplitGroup.sol";
25
+ import {JBTerminalConfig} from "./../structs/JBTerminalConfig.sol";
26
+
27
+ /// @notice Coordinates rulesets and project tokens, and is the entry point for most operations related to rulesets and
28
+ /// project tokens.
29
+ interface IJBController is IERC165, IJBProjectUriRegistry, IJBDirectoryAccessControl {
30
+ event BurnTokens(
31
+ address indexed holder, uint256 indexed projectId, uint256 tokenCount, string memo, address caller
32
+ );
33
+ event DeployERC20(
34
+ uint256 indexed projectId, address indexed deployer, bytes32 salt, bytes32 saltHash, address caller
35
+ );
36
+ event LaunchProject(uint256 rulesetId, uint256 projectId, string projectUri, string memo, address caller);
37
+ event LaunchRulesets(uint256 rulesetId, uint256 projectId, string memo, address caller);
38
+ event MintTokens(
39
+ address indexed beneficiary,
40
+ uint256 indexed projectId,
41
+ uint256 tokenCount,
42
+ uint256 beneficiaryTokenCount,
43
+ string memo,
44
+ uint256 reservedPercent,
45
+ address caller
46
+ );
47
+ event PrepMigration(uint256 indexed projectId, address from, address caller);
48
+ event QueueRulesets(uint256 rulesetId, uint256 projectId, string memo, address caller);
49
+ event ReservedDistributionReverted(
50
+ uint256 indexed projectId, JBSplit split, uint256 tokenCount, bytes reason, address caller
51
+ );
52
+ event SendReservedTokensToSplit(
53
+ uint256 indexed projectId,
54
+ uint256 indexed rulesetId,
55
+ uint256 indexed groupId,
56
+ JBSplit split,
57
+ uint256 tokenCount,
58
+ address caller
59
+ );
60
+ event SendReservedTokensToSplits(
61
+ uint256 indexed rulesetId,
62
+ uint256 indexed rulesetCycleNumber,
63
+ uint256 indexed projectId,
64
+ address owner,
65
+ uint256 tokenCount,
66
+ uint256 leftoverAmount,
67
+ address caller
68
+ );
69
+ event SetUri(uint256 indexed projectId, string uri, address caller);
70
+
71
+ /// @notice The directory of terminals and controllers for projects.
72
+ function DIRECTORY() external view returns (IJBDirectory);
73
+
74
+ /// @notice The contract that stores fund access limits for each project.
75
+ function FUND_ACCESS_LIMITS() external view returns (IJBFundAccessLimits);
76
+
77
+ /// @notice The contract that stores prices for each project.
78
+ function PRICES() external view returns (IJBPrices);
79
+
80
+ /// @notice Mints ERC-721s that represent project ownership and transfers.
81
+ function PROJECTS() external view returns (IJBProjects);
82
+
83
+ /// @notice The contract storing and managing project rulesets.
84
+ function RULESETS() external view returns (IJBRulesets);
85
+
86
+ /// @notice The contract that stores splits for each project.
87
+ function SPLITS() external view returns (IJBSplits);
88
+
89
+ /// @notice The contract that manages token minting and burning.
90
+ function TOKENS() external view returns (IJBTokens);
91
+
92
+ /// @notice The address of the contract that manages omnichain ruleset ops.
93
+ function OMNICHAIN_RULESET_OPERATOR() external view returns (address);
94
+
95
+ /// @notice Returns an array of a project's rulesets with metadata, sorted from latest to earliest.
96
+ /// @param projectId The ID of the project to get the rulesets of.
97
+ /// @param startingId The ID of the ruleset to begin with. If 0, the project's latest ruleset is used.
98
+ /// @param size The maximum number of rulesets to return.
99
+ /// @return rulesets The array of rulesets with their metadata.
100
+ function allRulesetsOf(
101
+ uint256 projectId,
102
+ uint256 startingId,
103
+ uint256 size
104
+ )
105
+ external
106
+ view
107
+ returns (JBRulesetWithMetadata[] memory rulesets);
108
+
109
+ /// @notice Returns a project's currently active ruleset and its metadata.
110
+ /// @param projectId The ID of the project to get the current ruleset of.
111
+ /// @return ruleset The current ruleset.
112
+ /// @return metadata The current ruleset's metadata.
113
+ function currentRulesetOf(uint256 projectId)
114
+ external
115
+ view
116
+ returns (JBRuleset memory ruleset, JBRulesetMetadata memory metadata);
117
+
118
+ /// @notice Returns the ruleset and metadata for a specific ruleset ID.
119
+ /// @param projectId The ID of the project the ruleset belongs to.
120
+ /// @param rulesetId The ID of the ruleset to look up.
121
+ /// @return ruleset The ruleset.
122
+ /// @return metadata The ruleset's metadata.
123
+ function getRulesetOf(
124
+ uint256 projectId,
125
+ uint256 rulesetId
126
+ )
127
+ external
128
+ view
129
+ returns (JBRuleset memory ruleset, JBRulesetMetadata memory metadata);
130
+
131
+ /// @notice Returns the latest queued ruleset for a project, its metadata, and its approval status.
132
+ /// @param projectId The ID of the project to get the latest queued ruleset of.
133
+ /// @return ruleset The latest queued ruleset.
134
+ /// @return metadata The ruleset's metadata.
135
+ /// @return approvalStatus The ruleset's approval status.
136
+ function latestQueuedRulesetOf(uint256 projectId)
137
+ external
138
+ view
139
+ returns (JBRuleset memory ruleset, JBRulesetMetadata memory metadata, JBApprovalStatus approvalStatus);
140
+
141
+ /// @notice Returns a project's unrealized reserved token balance.
142
+ /// @param projectId The ID of the project to get the pending reserved token balance of.
143
+ /// @return The pending reserved token balance.
144
+ function pendingReservedTokenBalanceOf(uint256 projectId) external view returns (uint256);
145
+
146
+ /// @notice Returns a project's total token supply including pending reserved tokens.
147
+ /// @param projectId The ID of the project to get the total token supply of.
148
+ /// @return The total supply including pending reserved tokens.
149
+ function totalTokenSupplyWithReservedTokensOf(uint256 projectId) external view returns (uint256);
150
+
151
+ /// @notice Returns a project's upcoming ruleset and its metadata.
152
+ /// @param projectId The ID of the project to get the upcoming ruleset of.
153
+ /// @return ruleset The upcoming ruleset.
154
+ /// @return metadata The upcoming ruleset's metadata.
155
+ function upcomingRulesetOf(uint256 projectId)
156
+ external
157
+ view
158
+ returns (JBRuleset memory ruleset, JBRulesetMetadata memory metadata);
159
+
160
+ /// @notice Adds a price feed for a project.
161
+ /// @param projectId The ID of the project to add the feed for.
162
+ /// @param pricingCurrency The currency the feed's output price is in terms of.
163
+ /// @param unitCurrency The currency being priced by the feed.
164
+ /// @param feed The price feed to add.
165
+ function addPriceFeed(uint256 projectId, uint256 pricingCurrency, uint256 unitCurrency, IJBPriceFeed feed) external;
166
+
167
+ /// @notice Burns a holder's project tokens or credits.
168
+ /// @param holder The address whose tokens are being burned.
169
+ /// @param projectId The ID of the project whose tokens are being burned.
170
+ /// @param tokenCount The number of tokens to burn.
171
+ /// @param memo A memo to pass along to the emitted event.
172
+ function burnTokensOf(address holder, uint256 projectId, uint256 tokenCount, string calldata memo) external;
173
+
174
+ /// @notice Redeems credits to claim tokens into a beneficiary's account.
175
+ /// @param holder The address to redeem credits from.
176
+ /// @param projectId The ID of the project whose tokens are being claimed.
177
+ /// @param tokenCount The number of tokens to claim.
178
+ /// @param beneficiary The account the claimed tokens will go to.
179
+ function claimTokensFor(address holder, uint256 projectId, uint256 tokenCount, address beneficiary) external;
180
+
181
+ /// @notice Deploys an ERC-20 token for a project.
182
+ /// @param projectId The ID of the project to deploy the ERC-20 for.
183
+ /// @param name The ERC-20's name.
184
+ /// @param symbol The ERC-20's symbol.
185
+ /// @param salt The salt used for deterministic ERC-1167 clone deployment.
186
+ /// @return token The address of the deployed token.
187
+ function deployERC20For(
188
+ uint256 projectId,
189
+ string calldata name,
190
+ string calldata symbol,
191
+ bytes32 salt
192
+ )
193
+ external
194
+ returns (IJBToken token);
195
+
196
+ /// @notice Creates a project, queues its initial rulesets, and sets up its terminals.
197
+ /// @param owner The project's owner. The project ERC-721 will be minted to this address.
198
+ /// @param projectUri The project's metadata URI.
199
+ /// @param rulesetConfigurations The rulesets to queue.
200
+ /// @param terminalConfigurations The terminals to set up for the project.
201
+ /// @param memo A memo to pass along to the emitted event.
202
+ /// @return projectId The project's ID.
203
+ function launchProjectFor(
204
+ address owner,
205
+ string calldata projectUri,
206
+ JBRulesetConfig[] calldata rulesetConfigurations,
207
+ JBTerminalConfig[] calldata terminalConfigurations,
208
+ string calldata memo
209
+ )
210
+ external
211
+ returns (uint256 projectId);
212
+
213
+ /// @notice Queues a project's initial rulesets and sets up terminals for it.
214
+ /// @param projectId The ID of the project to launch rulesets for.
215
+ /// @param rulesetConfigurations The rulesets to queue.
216
+ /// @param terminalConfigurations The terminals to set up.
217
+ /// @param memo A memo to pass along to the emitted event.
218
+ /// @return rulesetId The ID of the last successfully queued ruleset.
219
+ function launchRulesetsFor(
220
+ uint256 projectId,
221
+ JBRulesetConfig[] calldata rulesetConfigurations,
222
+ JBTerminalConfig[] calldata terminalConfigurations,
223
+ string calldata memo
224
+ )
225
+ external
226
+ returns (uint256 rulesetId);
227
+
228
+ /// @notice Mints new project tokens or credits to a beneficiary, optionally reserving a portion.
229
+ /// @param projectId The ID of the project whose tokens are being minted.
230
+ /// @param tokenCount The number of tokens to mint, including any reserved tokens.
231
+ /// @param beneficiary The address which will receive the non-reserved tokens.
232
+ /// @param memo A memo to pass along to the emitted event.
233
+ /// @param useReservedPercent Whether to apply the ruleset's reserved percent.
234
+ /// @return beneficiaryTokenCount The number of tokens minted for the beneficiary.
235
+ function mintTokensOf(
236
+ uint256 projectId,
237
+ uint256 tokenCount,
238
+ address beneficiary,
239
+ string calldata memo,
240
+ bool useReservedPercent
241
+ )
242
+ external
243
+ returns (uint256 beneficiaryTokenCount);
244
+
245
+ /// @notice Queues one or more rulesets to the end of a project's ruleset queue.
246
+ /// @param projectId The ID of the project to queue rulesets for.
247
+ /// @param rulesetConfigurations The rulesets to queue.
248
+ /// @param memo A memo to pass along to the emitted event.
249
+ /// @return rulesetId The ID of the last successfully queued ruleset.
250
+ function queueRulesetsOf(
251
+ uint256 projectId,
252
+ JBRulesetConfig[] calldata rulesetConfigurations,
253
+ string calldata memo
254
+ )
255
+ external
256
+ returns (uint256 rulesetId);
257
+
258
+ /// @notice Sends a project's pending reserved tokens to its reserved token splits.
259
+ /// @param projectId The ID of the project to send reserved tokens for.
260
+ /// @return The amount of reserved tokens minted and sent.
261
+ function sendReservedTokensToSplitsOf(uint256 projectId) external returns (uint256);
262
+
263
+ /// @notice Sets a project's split groups.
264
+ /// @param projectId The ID of the project to set the split groups of.
265
+ /// @param rulesetId The ID of the ruleset the split groups should be active in.
266
+ /// @param splitGroups An array of split groups to set.
267
+ function setSplitGroupsOf(uint256 projectId, uint256 rulesetId, JBSplitGroup[] calldata splitGroups) external;
268
+
269
+ /// @notice Sets a project's token.
270
+ /// @param projectId The ID of the project to set the token of.
271
+ /// @param token The new token's address.
272
+ function setTokenFor(uint256 projectId, IJBToken token) external;
273
+
274
+ /// @notice Transfers credits from one address to another.
275
+ /// @param holder The address to transfer credits from.
276
+ /// @param projectId The ID of the project whose credits are being transferred.
277
+ /// @param recipient The address to transfer credits to.
278
+ /// @param creditCount The number of credits to transfer.
279
+ function transferCreditsFrom(address holder, uint256 projectId, address recipient, uint256 creditCount) external;
280
+ }
@@ -0,0 +1,69 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
+
6
+ import {IJBProjects} from "./IJBProjects.sol";
7
+ import {IJBTerminal} from "./IJBTerminal.sol";
8
+
9
+ /// @notice Tracks the terminals and the controller used by each project.
10
+ interface IJBDirectory {
11
+ event AddTerminal(uint256 indexed projectId, IJBTerminal indexed terminal, address caller);
12
+ event SetController(uint256 indexed projectId, IERC165 indexed controller, address caller);
13
+ event SetIsAllowedToSetFirstController(address indexed addr, bool indexed isAllowed, address caller);
14
+ event SetPrimaryTerminal(
15
+ uint256 indexed projectId, address indexed token, IJBTerminal indexed terminal, address caller
16
+ );
17
+ event SetTerminals(uint256 indexed projectId, IJBTerminal[] terminals, address caller);
18
+
19
+ /// @notice Mints ERC-721s that represent project ownership and transfers.
20
+ function PROJECTS() external view returns (IJBProjects);
21
+
22
+ /// @notice Returns the controller for a project.
23
+ /// @param projectId The ID of the project to get the controller of.
24
+ /// @return The project's controller.
25
+ function controllerOf(uint256 projectId) external view returns (IERC165);
26
+
27
+ /// @notice Returns whether an address is allowed to set a project's first controller on its behalf.
28
+ /// @param addr The address to check.
29
+ /// @return A flag indicating whether the address is allowed.
30
+ function isAllowedToSetFirstController(address addr) external view returns (bool);
31
+
32
+ /// @notice Returns whether a terminal is one of a project's terminals.
33
+ /// @param projectId The ID of the project to check.
34
+ /// @param terminal The terminal to check.
35
+ /// @return A flag indicating whether the terminal belongs to the project.
36
+ function isTerminalOf(uint256 projectId, IJBTerminal terminal) external view returns (bool);
37
+
38
+ /// @notice Returns the primary terminal for a project's token.
39
+ /// @param projectId The ID of the project to get the primary terminal of.
40
+ /// @param token The token to get the primary terminal for.
41
+ /// @return The primary terminal for the project's token.
42
+ function primaryTerminalOf(uint256 projectId, address token) external view returns (IJBTerminal);
43
+
44
+ /// @notice Returns a project's terminals.
45
+ /// @param projectId The ID of the project to get the terminals of.
46
+ /// @return The project's terminals.
47
+ function terminalsOf(uint256 projectId) external view returns (IJBTerminal[] memory);
48
+
49
+ /// @notice Sets a project's controller.
50
+ /// @param projectId The ID of the project to set the controller of.
51
+ /// @param controller The controller to set.
52
+ function setControllerOf(uint256 projectId, IERC165 controller) external;
53
+
54
+ /// @notice Sets whether an address is allowed to set a project's first controller on its behalf.
55
+ /// @param addr The address to set the permission for.
56
+ /// @param flag A flag indicating whether the address is allowed.
57
+ function setIsAllowedToSetFirstController(address addr, bool flag) external;
58
+
59
+ /// @notice Sets a project's primary terminal for a specific token.
60
+ /// @param projectId The ID of the project to set the primary terminal of.
61
+ /// @param token The token to set the primary terminal for.
62
+ /// @param terminal The terminal to set as primary.
63
+ function setPrimaryTerminalOf(uint256 projectId, address token, IJBTerminal terminal) external;
64
+
65
+ /// @notice Sets a project's terminals.
66
+ /// @param projectId The ID of the project to set the terminals of.
67
+ /// @param terminals The terminals to set.
68
+ function setTerminalsOf(uint256 projectId, IJBTerminal[] calldata terminals) external;
69
+ }
@@ -0,0 +1,15 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ /// @notice Provides the directory with access control checks for setting a project's controller and terminals.
5
+ interface IJBDirectoryAccessControl {
6
+ /// @notice Returns whether a project's controller can currently be set.
7
+ /// @param projectId The ID of the project to check.
8
+ /// @return A flag indicating whether setting the controller is allowed.
9
+ function setControllerAllowed(uint256 projectId) external view returns (bool);
10
+
11
+ /// @notice Returns whether a project's terminals can currently be set.
12
+ /// @param projectId The ID of the project to check.
13
+ /// @return A flag indicating whether setting the terminals is allowed.
14
+ function setTerminalsAllowed(uint256 projectId) external view returns (bool);
15
+ }
@@ -0,0 +1,61 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ import {IJBFeelessAddresses} from "./IJBFeelessAddresses.sol";
5
+ import {IJBTerminal} from "./IJBTerminal.sol";
6
+ import {JBFee} from "../structs/JBFee.sol";
7
+
8
+ /// @notice A terminal that can process and hold fees.
9
+ interface IJBFeeTerminal is IJBTerminal {
10
+ event FeeReverted(
11
+ uint256 indexed projectId,
12
+ address indexed token,
13
+ uint256 indexed feeProjectId,
14
+ uint256 amount,
15
+ bytes reason,
16
+ address caller
17
+ );
18
+ event HoldFee(
19
+ uint256 indexed projectId,
20
+ address indexed token,
21
+ uint256 indexed amount,
22
+ uint256 fee,
23
+ address beneficiary,
24
+ address caller
25
+ );
26
+ event ProcessFee(
27
+ uint256 indexed projectId,
28
+ address indexed token,
29
+ uint256 indexed amount,
30
+ bool wasHeld,
31
+ address beneficiary,
32
+ address caller
33
+ );
34
+ event ReturnHeldFees(
35
+ uint256 indexed projectId,
36
+ address indexed token,
37
+ uint256 indexed amount,
38
+ uint256 returnedFees,
39
+ uint256 leftoverAmount,
40
+ address caller
41
+ );
42
+
43
+ /// @notice The terminal's fee as a fraction of `JBConstants.MAX_FEE`.
44
+ function FEE() external view returns (uint256);
45
+
46
+ /// @notice The contract that tracks feeless addresses.
47
+ function FEELESS_ADDRESSES() external view returns (IJBFeelessAddresses);
48
+
49
+ /// @notice Returns the held fees for a project and token.
50
+ /// @param projectId The ID of the project to get held fees for.
51
+ /// @param token The token the fees are denominated in.
52
+ /// @param count The maximum number of held fees to return.
53
+ /// @return An array of held fee structs.
54
+ function heldFeesOf(uint256 projectId, address token, uint256 count) external view returns (JBFee[] memory);
55
+
56
+ /// @notice Processes held fees for a project.
57
+ /// @param projectId The ID of the project to process held fees for.
58
+ /// @param token The token the fees are denominated in.
59
+ /// @param count The number of held fees to process.
60
+ function processHeldFeesOf(uint256 projectId, address token, uint256 count) external;
61
+ }
@@ -0,0 +1,17 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ /// @notice Tracks addresses that are exempt from fees.
5
+ interface IJBFeelessAddresses {
6
+ event SetFeelessAddress(address indexed addr, bool indexed isFeeless, address caller);
7
+
8
+ /// @notice Returns whether the specified address is feeless.
9
+ /// @param addr The address to check.
10
+ /// @return A flag indicating whether the address is feeless.
11
+ function isFeeless(address addr) external view returns (bool);
12
+
13
+ /// @notice Sets whether an address is feeless.
14
+ /// @param addr The address to set the feeless status of.
15
+ /// @param flag A flag indicating whether the address should be feeless.
16
+ function setFeelessAddress(address addr, bool flag) external;
17
+ }
@@ -0,0 +1,94 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ import {JBCurrencyAmount} from "./../structs/JBCurrencyAmount.sol";
5
+ import {JBFundAccessLimitGroup} from "./../structs/JBFundAccessLimitGroup.sol";
6
+
7
+ /// @notice Stores fund access limits (payout limits and surplus allowances) for each project.
8
+ interface IJBFundAccessLimits {
9
+ event SetFundAccessLimits(
10
+ uint256 indexed rulesetId,
11
+ uint256 indexed projectId,
12
+ JBFundAccessLimitGroup fundAccessLimitGroup,
13
+ address caller
14
+ );
15
+
16
+ /// @notice Returns the payout limit for a project, ruleset, terminal, token, and currency.
17
+ /// @param projectId The ID of the project to get the payout limit of.
18
+ /// @param rulesetId The ID of the ruleset the limit applies within.
19
+ /// @param terminal The terminal the limit applies to.
20
+ /// @param token The token the limit is denominated in.
21
+ /// @param currency The currency the limit is denominated in.
22
+ /// @return payoutLimit The payout limit.
23
+ function payoutLimitOf(
24
+ uint256 projectId,
25
+ uint256 rulesetId,
26
+ address terminal,
27
+ address token,
28
+ uint256 currency
29
+ )
30
+ external
31
+ view
32
+ returns (uint256 payoutLimit);
33
+
34
+ /// @notice Returns all payout limits for a project, ruleset, terminal, and token.
35
+ /// @param projectId The ID of the project to get the payout limits of.
36
+ /// @param rulesetId The ID of the ruleset the limits apply within.
37
+ /// @param terminal The terminal the limits apply to.
38
+ /// @param token The token the limits are denominated in.
39
+ /// @return payoutLimits The payout limits as an array of currency-amount pairs.
40
+ function payoutLimitsOf(
41
+ uint256 projectId,
42
+ uint256 rulesetId,
43
+ address terminal,
44
+ address token
45
+ )
46
+ external
47
+ view
48
+ returns (JBCurrencyAmount[] memory payoutLimits);
49
+
50
+ /// @notice Returns the surplus allowance for a project, ruleset, terminal, token, and currency.
51
+ /// @param projectId The ID of the project to get the surplus allowance of.
52
+ /// @param rulesetId The ID of the ruleset the allowance applies within.
53
+ /// @param terminal The terminal the allowance applies to.
54
+ /// @param token The token the allowance is denominated in.
55
+ /// @param currency The currency the allowance is denominated in.
56
+ /// @return surplusAllowance The surplus allowance.
57
+ function surplusAllowanceOf(
58
+ uint256 projectId,
59
+ uint256 rulesetId,
60
+ address terminal,
61
+ address token,
62
+ uint256 currency
63
+ )
64
+ external
65
+ view
66
+ returns (uint256 surplusAllowance);
67
+
68
+ /// @notice Returns all surplus allowances for a project, ruleset, terminal, and token.
69
+ /// @param projectId The ID of the project to get the surplus allowances of.
70
+ /// @param rulesetId The ID of the ruleset the allowances apply within.
71
+ /// @param terminal The terminal the allowances apply to.
72
+ /// @param token The token the allowances are denominated in.
73
+ /// @return surplusAllowances The surplus allowances as an array of currency-amount pairs.
74
+ function surplusAllowancesOf(
75
+ uint256 projectId,
76
+ uint256 rulesetId,
77
+ address terminal,
78
+ address token
79
+ )
80
+ external
81
+ view
82
+ returns (JBCurrencyAmount[] memory surplusAllowances);
83
+
84
+ /// @notice Sets the fund access limits for a project's ruleset.
85
+ /// @param projectId The ID of the project to set the fund access limits of.
86
+ /// @param rulesetId The ID of the ruleset the limits apply within.
87
+ /// @param fundAccessLimitGroups An array of payout limits and surplus allowances for each terminal.
88
+ function setFundAccessLimitsFor(
89
+ uint256 projectId,
90
+ uint256 rulesetId,
91
+ JBFundAccessLimitGroup[] calldata fundAccessLimitGroups
92
+ )
93
+ external;
94
+ }
@@ -0,0 +1,24 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
+
6
+ /// @notice A controller that supports project migration to and from other controllers.
7
+ interface IJBMigratable is IERC165 {
8
+ event Migrate(uint256 indexed projectId, IERC165 to, address caller);
9
+
10
+ /// @notice Migrates a project from this controller to another.
11
+ /// @param projectId The ID of the project being migrated.
12
+ /// @param to The controller to migrate the project to.
13
+ function migrate(uint256 projectId, IERC165 to) external;
14
+
15
+ /// @notice Prepares this controller to receive a project being migrated from another controller.
16
+ /// @param from The controller being migrated from.
17
+ /// @param projectId The ID of the project being migrated.
18
+ function beforeReceiveMigrationFrom(IERC165 from, uint256 projectId) external;
19
+
20
+ /// @notice Called after this controller has been set as the project's controller in the directory.
21
+ /// @param from The controller being migrated from.
22
+ /// @param projectId The ID of the project that was migrated.
23
+ function afterReceiveMigrationFrom(IERC165 from, uint256 projectId) external;
24
+ }
@@ -0,0 +1,36 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ import {IJBCashOutTerminal} from "./IJBCashOutTerminal.sol";
5
+ import {IJBDirectory} from "./IJBDirectory.sol";
6
+ import {IJBFeeTerminal} from "./IJBFeeTerminal.sol";
7
+ import {IJBPayoutTerminal} from "./IJBPayoutTerminal.sol";
8
+ import {IJBPermitTerminal} from "./IJBPermitTerminal.sol";
9
+ import {IJBProjects} from "./IJBProjects.sol";
10
+ import {IJBRulesets} from "./IJBRulesets.sol";
11
+ import {IJBSplits} from "./IJBSplits.sol";
12
+ import {IJBTerminal} from "./IJBTerminal.sol";
13
+ import {IJBTerminalStore} from "./IJBTerminalStore.sol";
14
+ import {IJBTokens} from "./IJBTokens.sol";
15
+
16
+ /// @notice A terminal that manages native/ERC-20 payments, cash outs, and surplus allowance usage for any number of
17
+ /// projects.
18
+ interface IJBMultiTerminal is IJBTerminal, IJBFeeTerminal, IJBCashOutTerminal, IJBPayoutTerminal, IJBPermitTerminal {
19
+ /// @notice The directory of terminals and controllers for projects.
20
+ function DIRECTORY() external view returns (IJBDirectory);
21
+
22
+ /// @notice Mints ERC-721s that represent project ownership and transfers.
23
+ function PROJECTS() external view returns (IJBProjects);
24
+
25
+ /// @notice The contract storing and managing project rulesets.
26
+ function RULESETS() external view returns (IJBRulesets);
27
+
28
+ /// @notice The contract that stores splits for each project.
29
+ function SPLITS() external view returns (IJBSplits);
30
+
31
+ /// @notice The terminal store that manages this terminal's data.
32
+ function STORE() external view returns (IJBTerminalStore);
33
+
34
+ /// @notice The contract that manages token minting and burning.
35
+ function TOKENS() external view returns (IJBTokens);
36
+ }
@@ -0,0 +1,14 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
+
6
+ import {JBAfterPayRecordedContext} from "./../structs/JBAfterPayRecordedContext.sol";
7
+
8
+ /// @notice Hook called after a terminal's `pay(...)` logic completes (if passed by the ruleset's data hook).
9
+ interface IJBPayHook is IERC165 {
10
+ /// @notice Called by the terminal after a payment has been recorded in the terminal store.
11
+ /// @dev Critical business logic should be protected by appropriate access control.
12
+ /// @param context The context passed in by the terminal, as a `JBAfterPayRecordedContext` struct.
13
+ function afterPayRecordedWith(JBAfterPayRecordedContext calldata context) external payable;
14
+ }