@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,92 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ import {IJBSplits} from "./IJBSplits.sol";
5
+ import {IJBTerminal} from "./IJBTerminal.sol";
6
+ import {JBSplit} from "../structs/JBSplit.sol";
7
+
8
+ /// @notice A terminal that can send payouts.
9
+ interface IJBPayoutTerminal is IJBTerminal {
10
+ event PayoutReverted(uint256 indexed projectId, JBSplit split, uint256 amount, bytes reason, address caller);
11
+ event PayoutTransferReverted(
12
+ uint256 indexed projectId,
13
+ address addr,
14
+ address token,
15
+ uint256 amount,
16
+ uint256 fee,
17
+ bytes reason,
18
+ address caller
19
+ );
20
+ event SendPayouts(
21
+ uint256 indexed rulesetId,
22
+ uint256 indexed rulesetCycleNumber,
23
+ uint256 indexed projectId,
24
+ address projectOwner,
25
+ uint256 amount,
26
+ uint256 amountPaidOut,
27
+ uint256 fee,
28
+ uint256 netLeftoverPayoutAmount,
29
+ address caller
30
+ );
31
+ event SendPayoutToSplit(
32
+ uint256 indexed projectId,
33
+ uint256 indexed rulesetId,
34
+ uint256 indexed group,
35
+ JBSplit split,
36
+ uint256 amount,
37
+ uint256 netAmount,
38
+ address caller
39
+ );
40
+ event UseAllowance(
41
+ uint256 indexed rulesetId,
42
+ uint256 indexed rulesetCycleNumber,
43
+ uint256 indexed projectId,
44
+ address beneficiary,
45
+ address feeBeneficiary,
46
+ uint256 amount,
47
+ uint256 amountPaidOut,
48
+ uint256 netAmountPaidOut,
49
+ string memo,
50
+ address caller
51
+ );
52
+
53
+ /// @notice Sends a project's payouts to its payout split group according to its ruleset's payout limits.
54
+ /// @param projectId The ID of the project to send payouts for.
55
+ /// @param token The token being paid out.
56
+ /// @param amount The total amount of tokens to pay out.
57
+ /// @param currency The currency the amount is denominated in.
58
+ /// @param minTokensPaidOut The minimum number of terminal tokens expected to be paid out.
59
+ /// @return amountPaidOut The total amount paid out.
60
+ function sendPayoutsOf(
61
+ uint256 projectId,
62
+ address token,
63
+ uint256 amount,
64
+ uint256 currency,
65
+ uint256 minTokensPaidOut
66
+ )
67
+ external
68
+ returns (uint256 amountPaidOut);
69
+
70
+ /// @notice Uses a project's surplus allowance to send funds to a beneficiary.
71
+ /// @param projectId The ID of the project to use the surplus allowance of.
72
+ /// @param token The token being paid out.
73
+ /// @param amount The amount of the surplus allowance to use.
74
+ /// @param currency The currency the amount is denominated in.
75
+ /// @param minTokensPaidOut The minimum number of terminal tokens expected to be paid out.
76
+ /// @param beneficiary The address to send the funds to.
77
+ /// @param feeBeneficiary The address that will receive any project tokens minted from fees.
78
+ /// @param memo A memo to pass along to the emitted event.
79
+ /// @return netAmountPaidOut The net amount paid out to the beneficiary after fees.
80
+ function useAllowanceOf(
81
+ uint256 projectId,
82
+ address token,
83
+ uint256 amount,
84
+ uint256 currency,
85
+ uint256 minTokensPaidOut,
86
+ address payable beneficiary,
87
+ address payable feeBeneficiary,
88
+ string calldata memo
89
+ )
90
+ external
91
+ returns (uint256 netAmountPaidOut);
92
+ }
@@ -0,0 +1,10 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ import {IJBPermissions} from "./IJBPermissions.sol";
5
+
6
+ /// @notice A contract that uses the permissions contract for access control.
7
+ interface IJBPermissioned {
8
+ /// @notice The permissions contract used for access control.
9
+ function PERMISSIONS() external view returns (IJBPermissions);
10
+ }
@@ -0,0 +1,71 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ import {JBPermissionsData} from "./../structs/JBPermissionsData.sol";
5
+
6
+ /// @notice Stores permissions for all addresses and operators.
7
+ interface IJBPermissions {
8
+ event OperatorPermissionsSet(
9
+ address indexed operator,
10
+ address indexed account,
11
+ uint256 indexed projectId,
12
+ uint8[] permissionIds,
13
+ uint256 packed,
14
+ address caller
15
+ );
16
+
17
+ /// @notice The project ID considered a wildcard, granting permissions to all projects.
18
+ function WILDCARD_PROJECT_ID() external view returns (uint256);
19
+
20
+ /// @notice Returns the packed permissions that an operator has for an account and project.
21
+ /// @param operator The address of the operator.
22
+ /// @param account The address of the account being operated on behalf of.
23
+ /// @param projectId The project ID the permissions are scoped to. 0 is a wildcard for all projects.
24
+ /// @return The packed permissions as a uint256 bitmap.
25
+ function permissionsOf(address operator, address account, uint256 projectId) external view returns (uint256);
26
+
27
+ /// @notice Checks if an operator has a specific permission for an account and project.
28
+ /// @param operator The operator to check.
29
+ /// @param account The account being operated on behalf of.
30
+ /// @param projectId The project ID the permission is scoped to. 0 represents all projects.
31
+ /// @param permissionId The permission ID to check for.
32
+ /// @param includeRoot Whether to return true if the operator has the ROOT permission.
33
+ /// @param includeWildcardProjectId Whether to return true if the operator has the permission on project ID 0.
34
+ /// @return A flag indicating whether the operator has the specified permission.
35
+ function hasPermission(
36
+ address operator,
37
+ address account,
38
+ uint256 projectId,
39
+ uint256 permissionId,
40
+ bool includeRoot,
41
+ bool includeWildcardProjectId
42
+ )
43
+ external
44
+ view
45
+ returns (bool);
46
+
47
+ /// @notice Checks if an operator has all of the specified permissions for an account and project.
48
+ /// @param operator The operator to check.
49
+ /// @param account The account being operated on behalf of.
50
+ /// @param projectId The project ID the permissions are scoped to. 0 represents all projects.
51
+ /// @param permissionIds An array of permission IDs to check for.
52
+ /// @param includeRoot Whether to return true if the operator has the ROOT permission.
53
+ /// @param includeWildcardProjectId Whether to return true if the operator has the permissions on project ID 0.
54
+ /// @return A flag indicating whether the operator has all of the specified permissions.
55
+ function hasPermissions(
56
+ address operator,
57
+ address account,
58
+ uint256 projectId,
59
+ uint256[] calldata permissionIds,
60
+ bool includeRoot,
61
+ bool includeWildcardProjectId
62
+ )
63
+ external
64
+ view
65
+ returns (bool);
66
+
67
+ /// @notice Sets permissions for an operator on behalf of an account.
68
+ /// @param account The account setting its operator's permissions.
69
+ /// @param permissionsData The data specifying the permissions the operator is being given.
70
+ function setPermissionsFor(address account, JBPermissionsData calldata permissionsData) external;
71
+ }
@@ -0,0 +1,14 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ import {IPermit2} from "@uniswap/permit2/src/interfaces/IPermit2.sol";
5
+
6
+ import {IJBTerminal} from "./IJBTerminal.sol";
7
+
8
+ /// @notice A terminal that supports Permit2 token approvals.
9
+ interface IJBPermitTerminal is IJBTerminal {
10
+ event Permit2AllowanceFailed(address indexed token, address indexed owner, bytes reason);
11
+
12
+ /// @notice The Permit2 contract used for token approvals.
13
+ function PERMIT2() external returns (IPermit2);
14
+ }
@@ -0,0 +1,10 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ /// @notice A price feed that returns a current unit price.
5
+ interface IJBPriceFeed {
6
+ /// @notice Gets the current price (per 1 unit) from the feed.
7
+ /// @param decimals The number of decimals the return value should use.
8
+ /// @return The current unit price from the feed, as a fixed point number with the specified number of decimals.
9
+ function currentUnitPrice(uint256 decimals) external view returns (uint256);
10
+ }
@@ -0,0 +1,65 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ import {IJBPriceFeed} from "./IJBPriceFeed.sol";
5
+ import {IJBProjects} from "./IJBProjects.sol";
6
+
7
+ /// @notice Manages price feeds and provides unit prices for currency conversions.
8
+ interface IJBPrices {
9
+ event AddPriceFeed(
10
+ uint256 indexed projectId,
11
+ uint256 indexed pricingCurrency,
12
+ uint256 indexed unitCurrency,
13
+ IJBPriceFeed feed,
14
+ address caller
15
+ );
16
+
17
+ /// @notice The project ID used as a fallback when no project-specific price feed is set.
18
+ function DEFAULT_PROJECT_ID() external view returns (uint256);
19
+
20
+ /// @notice Mints ERC-721s that represent project ownership and transfers.
21
+ function PROJECTS() external view returns (IJBProjects);
22
+
23
+ /// @notice Returns the price feed for a project's currency pair.
24
+ /// @param projectId The ID of the project to get the price feed of.
25
+ /// @param pricingCurrency The currency the feed's output price is in terms of.
26
+ /// @param unitCurrency The currency being priced by the feed.
27
+ /// @return The price feed for the currency pair.
28
+ function priceFeedFor(
29
+ uint256 projectId,
30
+ uint256 pricingCurrency,
31
+ uint256 unitCurrency
32
+ )
33
+ external
34
+ view
35
+ returns (IJBPriceFeed);
36
+
37
+ /// @notice Returns the unit price for a currency pair.
38
+ /// @param projectId The ID of the project to get the price for.
39
+ /// @param pricingCurrency The currency the returned price is in terms of.
40
+ /// @param unitCurrency The currency being priced.
41
+ /// @param decimals The number of decimals the returned price should use.
42
+ /// @return The unit price.
43
+ function pricePerUnitOf(
44
+ uint256 projectId,
45
+ uint256 pricingCurrency,
46
+ uint256 unitCurrency,
47
+ uint256 decimals
48
+ )
49
+ external
50
+ view
51
+ returns (uint256);
52
+
53
+ /// @notice Adds a price feed for a project's currency pair.
54
+ /// @param projectId The ID of the project to add the price feed for.
55
+ /// @param pricingCurrency The currency the feed's output price is in terms of.
56
+ /// @param unitCurrency The currency being priced by the feed.
57
+ /// @param feed The price feed to add.
58
+ function addPriceFeedFor(
59
+ uint256 projectId,
60
+ uint256 pricingCurrency,
61
+ uint256 unitCurrency,
62
+ IJBPriceFeed feed
63
+ )
64
+ external;
65
+ }
@@ -0,0 +1,15 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ /// @notice A registry of metadata URIs for projects.
5
+ interface IJBProjectUriRegistry {
6
+ /// @notice Returns the metadata URI for a project.
7
+ /// @param projectId The ID of the project to get the metadata URI of.
8
+ /// @return The project's metadata URI.
9
+ function uriOf(uint256 projectId) external view returns (string memory);
10
+
11
+ /// @notice Sets the metadata URI for a project.
12
+ /// @param projectId The ID of the project to set the metadata URI of.
13
+ /// @param uri The metadata URI to set.
14
+ function setUriOf(uint256 projectId, string calldata uri) external;
15
+ }
@@ -0,0 +1,27 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
5
+
6
+ import {IJBTokenUriResolver} from "./IJBTokenUriResolver.sol";
7
+
8
+ /// @notice Mints ERC-721s that represent project ownership and transfers.
9
+ interface IJBProjects is IERC721 {
10
+ event Create(uint256 indexed projectId, address indexed owner, address caller);
11
+ event SetTokenUriResolver(IJBTokenUriResolver indexed resolver, address caller);
12
+
13
+ /// @notice Returns the total number of projects that have been created.
14
+ function count() external view returns (uint256);
15
+
16
+ /// @notice Returns the token URI resolver.
17
+ function tokenUriResolver() external view returns (IJBTokenUriResolver);
18
+
19
+ /// @notice Creates a new project and mints the project's ERC-721 to the specified owner.
20
+ /// @param owner The address that will own the new project's ERC-721.
21
+ /// @return projectId The ID of the newly created project.
22
+ function createFor(address owner) external returns (uint256 projectId);
23
+
24
+ /// @notice Sets the token URI resolver used to retrieve project token URIs.
25
+ /// @param resolver The new token URI resolver.
26
+ function setTokenUriResolver(IJBTokenUriResolver resolver) external;
27
+ }
@@ -0,0 +1,21 @@
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 {JBRuleset} from "./../structs/JBRuleset.sol";
7
+ import {JBApprovalStatus} from "./../enums/JBApprovalStatus.sol";
8
+
9
+ /// @notice Determines whether the next ruleset in a project's queue is approved or rejected.
10
+ /// @dev Project rulesets are stored in a queue. Rulesets take effect after the previous ruleset in the queue ends, and
11
+ /// only if they are approved by the previous ruleset's approval hook.
12
+ interface IJBRulesetApprovalHook is IERC165 {
13
+ /// @notice The minimum number of seconds that must pass for a queued ruleset to be considered approved.
14
+ function DURATION() external view returns (uint256);
15
+
16
+ /// @notice Returns the approval status of a given ruleset.
17
+ /// @param projectId The ID of the project the ruleset belongs to.
18
+ /// @param ruleset The ruleset to check the approval status of.
19
+ /// @return The ruleset's approval status.
20
+ function approvalStatusOf(uint256 projectId, JBRuleset memory ruleset) external view returns (JBApprovalStatus);
21
+ }
@@ -0,0 +1,56 @@
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 {JBBeforeCashOutRecordedContext} from "./../structs/JBBeforeCashOutRecordedContext.sol";
7
+ import {JBBeforePayRecordedContext} from "./../structs/JBBeforePayRecordedContext.sol";
8
+ import {JBCashOutHookSpecification} from "./../structs/JBCashOutHookSpecification.sol";
9
+ import {JBPayHookSpecification} from "./../structs/JBPayHookSpecification.sol";
10
+ import {JBRuleset} from "./../structs/JBRuleset.sol";
11
+
12
+ /// @notice Data hooks extend a terminal's pay/cash-out functionality by overriding the weight or memo, specifying
13
+ /// pay/cash-out hooks, or allowing addresses to mint a project's tokens on-demand.
14
+ /// @dev If a project's ruleset has `useDataHookForPay` or `useDataHookForCashOut` enabled, its `dataHook` is called by
15
+ /// the terminal upon payments/cash outs (respectively).
16
+ interface IJBRulesetDataHook is IERC165 {
17
+ /// @notice Returns whether an address has permission to mint a project's tokens on-demand.
18
+ /// @param projectId The ID of the project whose token can be minted.
19
+ /// @param ruleset The ruleset to check the token minting permission of.
20
+ /// @param addr The address to check the token minting permission of.
21
+ /// @return flag A flag indicating whether the address has permission.
22
+ function hasMintPermissionFor(
23
+ uint256 projectId,
24
+ JBRuleset memory ruleset,
25
+ address addr
26
+ )
27
+ external
28
+ view
29
+ returns (bool flag);
30
+
31
+ /// @notice Calculates data before a payment is recorded in the terminal store.
32
+ /// @param context The context passed to this data hook by the `pay(...)` function.
33
+ /// @return weight The new weight to use, overriding the ruleset's weight.
34
+ /// @return hookSpecifications The amount and data to send to pay hooks instead of adding to the terminal's balance.
35
+ function beforePayRecordedWith(JBBeforePayRecordedContext calldata context)
36
+ external
37
+ view
38
+ returns (uint256 weight, JBPayHookSpecification[] memory hookSpecifications);
39
+
40
+ /// @notice Calculates data before a cash out is recorded in the terminal store.
41
+ /// @param context The context passed to this data hook by the `cashOutTokensOf(...)` function.
42
+ /// @return cashOutTaxRate The rate determining the reclaimable amount for a given surplus and token supply.
43
+ /// @return cashOutCount The number of tokens to consider cashed out.
44
+ /// @return totalSupply The total number of tokens to consider existing.
45
+ /// @return hookSpecifications The amount and data to send to cash out hooks instead of returning to the
46
+ /// beneficiary.
47
+ function beforeCashOutRecordedWith(JBBeforeCashOutRecordedContext calldata context)
48
+ external
49
+ view
50
+ returns (
51
+ uint256 cashOutTaxRate,
52
+ uint256 cashOutCount,
53
+ uint256 totalSupply,
54
+ JBCashOutHookSpecification[] memory hookSpecifications
55
+ );
56
+ }
@@ -0,0 +1,151 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ import {JBApprovalStatus} from "./../enums/JBApprovalStatus.sol";
5
+ import {JBRuleset} from "./../structs/JBRuleset.sol";
6
+ import {IJBRulesetApprovalHook} from "./IJBRulesetApprovalHook.sol";
7
+
8
+ /// @notice Manages rulesets and queuing for projects.
9
+ interface IJBRulesets {
10
+ event RulesetInitialized(
11
+ uint256 indexed rulesetId, uint256 indexed projectId, uint256 indexed basedOnId, address caller
12
+ );
13
+ event RulesetQueued(
14
+ uint256 indexed rulesetId,
15
+ uint256 indexed projectId,
16
+ uint256 duration,
17
+ uint256 weight,
18
+ uint256 weightCutPercent,
19
+ IJBRulesetApprovalHook approvalHook,
20
+ uint256 metadata,
21
+ uint256 mustStartAtOrAfter,
22
+ address caller
23
+ );
24
+
25
+ event WeightCacheUpdated(uint256 projectId, uint112 weight, uint256 weightCutMultiple, address caller);
26
+
27
+ /// @notice Returns the ID of the latest ruleset queued for a project.
28
+ /// @param projectId The ID of the project to get the latest ruleset ID of.
29
+ /// @return The latest ruleset ID.
30
+ function latestRulesetIdOf(uint256 projectId) external view returns (uint256);
31
+
32
+ /// @notice Returns the approval status of the latest queued ruleset relative to the current ruleset.
33
+ /// @param projectId The ID of the project to check.
34
+ /// @return The approval status of the latest queued ruleset.
35
+ function currentApprovalStatusForLatestRulesetOf(uint256 projectId) external view returns (JBApprovalStatus);
36
+
37
+ /// @notice Returns the current ruleset for a project, deriving its properties from the base ruleset.
38
+ /// @param projectId The ID of the project to get the current ruleset of.
39
+ /// @return ruleset The current ruleset.
40
+ function currentOf(uint256 projectId) external view returns (JBRuleset memory ruleset);
41
+
42
+ /// @notice Derives the cycle number from the base ruleset's parameters and a given start time.
43
+ /// @param baseRulesetCycleNumber The cycle number of the base ruleset.
44
+ /// @param baseRulesetStart The start time of the base ruleset.
45
+ /// @param baseRulesetDuration The duration of the base ruleset.
46
+ /// @param start The start time to derive the cycle number for.
47
+ /// @return The derived cycle number.
48
+ function deriveCycleNumberFrom(
49
+ uint256 baseRulesetCycleNumber,
50
+ uint256 baseRulesetStart,
51
+ uint256 baseRulesetDuration,
52
+ uint256 start
53
+ )
54
+ external
55
+ returns (uint256);
56
+
57
+ /// @notice Derives the start time from the base ruleset's parameters.
58
+ /// @param baseRulesetStart The start time of the base ruleset.
59
+ /// @param baseRulesetDuration The duration of the base ruleset.
60
+ /// @param mustStartAtOrAfter The earliest time the derived ruleset can start.
61
+ /// @return start The derived start time.
62
+ function deriveStartFrom(
63
+ uint256 baseRulesetStart,
64
+ uint256 baseRulesetDuration,
65
+ uint256 mustStartAtOrAfter
66
+ )
67
+ external
68
+ view
69
+ returns (uint256 start);
70
+
71
+ /// @notice Derives the weight from the base ruleset's parameters, accounting for weight cuts over elapsed cycles.
72
+ /// @param projectId The ID of the project.
73
+ /// @param baseRulesetStart The start time of the base ruleset.
74
+ /// @param baseRulesetDuration The duration of the base ruleset.
75
+ /// @param baseRulesetWeight The weight of the base ruleset.
76
+ /// @param baseRulesetWeightCutPercent The weight cut percent of the base ruleset.
77
+ /// @param baseRulesetCacheId The cache ID of the base ruleset.
78
+ /// @param start The start time to derive the weight for.
79
+ /// @return weight The derived weight.
80
+ function deriveWeightFrom(
81
+ uint256 projectId,
82
+ uint256 baseRulesetStart,
83
+ uint256 baseRulesetDuration,
84
+ uint256 baseRulesetWeight,
85
+ uint256 baseRulesetWeightCutPercent,
86
+ uint256 baseRulesetCacheId,
87
+ uint256 start
88
+ )
89
+ external
90
+ view
91
+ returns (uint256 weight);
92
+
93
+ /// @notice Returns a specific ruleset for a project by its ID.
94
+ /// @param projectId The ID of the project the ruleset belongs to.
95
+ /// @param rulesetId The ID of the ruleset to retrieve.
96
+ /// @return The ruleset.
97
+ function getRulesetOf(uint256 projectId, uint256 rulesetId) external view returns (JBRuleset memory);
98
+
99
+ /// @notice Returns the latest queued ruleset for a project and its approval status.
100
+ /// @param projectId The ID of the project to get the latest queued ruleset of.
101
+ /// @return ruleset The latest queued ruleset.
102
+ /// @return approvalStatus The ruleset's approval status.
103
+ function latestQueuedOf(uint256 projectId)
104
+ external
105
+ view
106
+ returns (JBRuleset memory ruleset, JBApprovalStatus approvalStatus);
107
+
108
+ /// @notice Returns an array of rulesets for a project, sorted from latest to earliest.
109
+ /// @param projectId The ID of the project to get rulesets of.
110
+ /// @param startingId The ID of the ruleset to begin with. If 0, the latest ruleset is used.
111
+ /// @param size The maximum number of rulesets to return.
112
+ /// @return rulesets The array of rulesets.
113
+ function allOf(
114
+ uint256 projectId,
115
+ uint256 startingId,
116
+ uint256 size
117
+ )
118
+ external
119
+ view
120
+ returns (JBRuleset[] memory rulesets);
121
+
122
+ /// @notice Returns the upcoming ruleset for a project.
123
+ /// @param projectId The ID of the project to get the upcoming ruleset of.
124
+ /// @return ruleset The upcoming ruleset.
125
+ function upcomingOf(uint256 projectId) external view returns (JBRuleset memory ruleset);
126
+
127
+ /// @notice Queues a new ruleset for a project.
128
+ /// @param projectId The ID of the project to queue the ruleset for.
129
+ /// @param duration The duration of the ruleset in seconds.
130
+ /// @param weight The weight of the ruleset.
131
+ /// @param weightCutPercent The percent by which the weight decreases each cycle.
132
+ /// @param approvalHook The approval hook for the ruleset.
133
+ /// @param metadata The packed ruleset metadata.
134
+ /// @param mustStartAtOrAfter The earliest time the ruleset can start.
135
+ /// @return ruleset The queued ruleset.
136
+ function queueFor(
137
+ uint256 projectId,
138
+ uint256 duration,
139
+ uint256 weight,
140
+ uint256 weightCutPercent,
141
+ IJBRulesetApprovalHook approvalHook,
142
+ uint256 metadata,
143
+ uint256 mustStartAtOrAfter
144
+ )
145
+ external
146
+ returns (JBRuleset memory ruleset);
147
+
148
+ /// @notice Updates the weight cache for a project to allow efficient weight derivation over many cycles.
149
+ /// @param projectId The ID of the project to update the weight cache for.
150
+ function updateRulesetWeightCache(uint256 projectId) external;
151
+ }
@@ -0,0 +1,16 @@
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 {JBSplitHookContext} from "../structs/JBSplitHookContext.sol";
7
+
8
+ /// @notice Allows processing a single split with custom logic.
9
+ /// @dev The split hook's address should be set as the `hook` in the relevant split.
10
+ interface IJBSplitHook is IERC165 {
11
+ /// @notice Called by terminals and controllers while processing a split.
12
+ /// @dev Critical business logic should be protected by appropriate access control. The tokens and/or native tokens
13
+ /// are optimistically transferred to the split hook when this function is called.
14
+ /// @param context The context passed by the terminal/controller to the split hook.
15
+ function processSplitWith(JBSplitHookContext calldata context) external payable;
16
+ }
@@ -0,0 +1,28 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ import {JBSplit} from "./../structs/JBSplit.sol";
5
+ import {JBSplitGroup} from "./../structs/JBSplitGroup.sol";
6
+
7
+ /// @notice Stores and manages splits for each project.
8
+ interface IJBSplits {
9
+ event SetSplit(
10
+ uint256 indexed projectId, uint256 indexed rulesetId, uint256 indexed groupId, JBSplit split, address caller
11
+ );
12
+
13
+ /// @notice The ruleset ID used as a fallback when no splits are set for a specific ruleset.
14
+ function FALLBACK_RULESET_ID() external view returns (uint256);
15
+
16
+ /// @notice Returns the splits for a project, ruleset, and group.
17
+ /// @param projectId The ID of the project to get the splits of.
18
+ /// @param rulesetId The ID of the ruleset the splits should be active in.
19
+ /// @param groupId The ID of the group to get the splits of.
20
+ /// @return The splits.
21
+ function splitsOf(uint256 projectId, uint256 rulesetId, uint256 groupId) external view returns (JBSplit[] memory);
22
+
23
+ /// @notice Sets a project's split groups.
24
+ /// @param projectId The ID of the project to set the split groups of.
25
+ /// @param rulesetId The ID of the ruleset the split groups should be active in.
26
+ /// @param splitGroups An array of split groups to set.
27
+ function setSplitGroupsOf(uint256 projectId, uint256 rulesetId, JBSplitGroup[] calldata splitGroups) external;
28
+ }