@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,677 @@
1
+ # JBRulesets
2
+ [Git Source](https://github.com/Bananapus/nana-core/blob/2998dca2fbd2658e2c8791d6dc8348147d69e28e/src/JBRulesets.sol)
3
+
4
+ **Inherits:**
5
+ [JBControlled](/src/abstract/JBControlled.sol/abstract.JBControlled.md), [IJBRulesets](/src/interfaces/IJBRulesets.sol/interface.IJBRulesets.md)
6
+
7
+ Manages rulesets and queuing.
8
+
9
+ *Rulesets dictate how a project behaves for a period of time. To learn more about their functionality, see the
10
+ `JBRuleset` data structure.*
11
+
12
+ *Throughout this contract, `rulesetId` is an identifier for each ruleset. The `rulesetId` is the unix timestamp
13
+ when the ruleset was initialized.*
14
+
15
+ *`approvable` means a ruleset which may or may not be approved.*
16
+
17
+
18
+ ## State Variables
19
+ ### _WEIGHT_CUT_MULTIPLE_CACHE_LOOKUP_THRESHOLD
20
+ The number of weight cut percent multiples before a cached value is sought.
21
+
22
+
23
+ ```solidity
24
+ uint256 internal constant _WEIGHT_CUT_MULTIPLE_CACHE_LOOKUP_THRESHOLD = 1000;
25
+ ```
26
+
27
+
28
+ ### _MAX_WEIGHT_CUT_MULTIPLE_CACHE_THRESHOLD
29
+ The maximum number of weight cut percent multiples that can be cached at a time.
30
+
31
+
32
+ ```solidity
33
+ uint256 internal constant _MAX_WEIGHT_CUT_MULTIPLE_CACHE_THRESHOLD = 50_000;
34
+ ```
35
+
36
+
37
+ ### latestRulesetIdOf
38
+ The ID of the ruleset with the latest start time for a specific project, whether the ruleset has been
39
+ approved or not.
40
+
41
+ *If a project has multiple rulesets queued, the `latestRulesetIdOf` will be the last one. This is the
42
+ "changeable" cycle.*
43
+
44
+
45
+ ```solidity
46
+ mapping(uint256 projectId => uint256) public override latestRulesetIdOf;
47
+ ```
48
+
49
+
50
+ ### _metadataOf
51
+ The metadata for each ruleset, packed into one storage slot.
52
+
53
+
54
+ ```solidity
55
+ mapping(uint256 projectId => mapping(uint256 rulesetId => uint256)) internal _metadataOf;
56
+ ```
57
+
58
+
59
+ ### _packedIntrinsicPropertiesOf
60
+ The mechanism-added properties to manage and schedule each ruleset, packed into one storage slot.
61
+
62
+
63
+ ```solidity
64
+ mapping(uint256 projectId => mapping(uint256 rulesetId => uint256)) internal _packedIntrinsicPropertiesOf;
65
+ ```
66
+
67
+
68
+ ### _packedUserPropertiesOf
69
+ The user-defined properties of each ruleset, packed into one storage slot.
70
+
71
+
72
+ ```solidity
73
+ mapping(uint256 projectId => mapping(uint256 rulesetId => uint256)) internal _packedUserPropertiesOf;
74
+ ```
75
+
76
+
77
+ ### _weightCacheOf
78
+ Cached weight values to derive rulesets from.
79
+
80
+
81
+ ```solidity
82
+ mapping(uint256 projectId => mapping(uint256 rulesetId => JBRulesetWeightCache)) internal _weightCacheOf;
83
+ ```
84
+
85
+
86
+ ## Functions
87
+ ### constructor
88
+
89
+
90
+ ```solidity
91
+ constructor(IJBDirectory directory) JBControlled(directory);
92
+ ```
93
+ **Parameters**
94
+
95
+ |Name|Type|Description|
96
+ |----|----|-----------|
97
+ |`directory`|`IJBDirectory`|A contract storing directories of terminals and controllers for each project.|
98
+
99
+
100
+ ### allOf
101
+
102
+ Get an array of a project's rulesets up to a maximum array size, sorted from latest to earliest.
103
+
104
+
105
+ ```solidity
106
+ function allOf(
107
+ uint256 projectId,
108
+ uint256 startingId,
109
+ uint256 size
110
+ )
111
+ external
112
+ view
113
+ override
114
+ returns (JBRuleset[] memory rulesets);
115
+ ```
116
+ **Parameters**
117
+
118
+ |Name|Type|Description|
119
+ |----|----|-----------|
120
+ |`projectId`|`uint256`|The ID of the project to get the rulesets of.|
121
+ |`startingId`|`uint256`|The ID of the ruleset to begin with. This will be the latest ruleset in the result. If 0 is passed, the project's latest ruleset will be used.|
122
+ |`size`|`uint256`|The maximum number of rulesets to return.|
123
+
124
+ **Returns**
125
+
126
+ |Name|Type|Description|
127
+ |----|----|-----------|
128
+ |`rulesets`|`JBRuleset[]`|The rulesets as an array of `JBRuleset` structs.|
129
+
130
+
131
+ ### currentApprovalStatusForLatestRulesetOf
132
+
133
+ The current approval status of a given project's latest ruleset.
134
+
135
+
136
+ ```solidity
137
+ function currentApprovalStatusForLatestRulesetOf(uint256 projectId) external view override returns (JBApprovalStatus);
138
+ ```
139
+ **Parameters**
140
+
141
+ |Name|Type|Description|
142
+ |----|----|-----------|
143
+ |`projectId`|`uint256`|The ID of the project to check the approval status of.|
144
+
145
+ **Returns**
146
+
147
+ |Name|Type|Description|
148
+ |----|----|-----------|
149
+ |`<none>`|`JBApprovalStatus`|The project's current approval status.|
150
+
151
+
152
+ ### currentOf
153
+
154
+ The ruleset that is currently active for the specified project.
155
+
156
+ *If a current ruleset of the project is not found, returns an empty ruleset with all properties set to 0.*
157
+
158
+
159
+ ```solidity
160
+ function currentOf(uint256 projectId) external view override returns (JBRuleset memory ruleset);
161
+ ```
162
+ **Parameters**
163
+
164
+ |Name|Type|Description|
165
+ |----|----|-----------|
166
+ |`projectId`|`uint256`|The ID of the project to get the current ruleset of.|
167
+
168
+ **Returns**
169
+
170
+ |Name|Type|Description|
171
+ |----|----|-----------|
172
+ |`ruleset`|`JBRuleset`|The project's current ruleset.|
173
+
174
+
175
+ ### getRulesetOf
176
+
177
+ Get the ruleset struct for a given `rulesetId` and `projectId`.
178
+
179
+
180
+ ```solidity
181
+ function getRulesetOf(uint256 projectId, uint256 rulesetId) external view override returns (JBRuleset memory ruleset);
182
+ ```
183
+ **Parameters**
184
+
185
+ |Name|Type|Description|
186
+ |----|----|-----------|
187
+ |`projectId`|`uint256`|The ID of the project to which the ruleset belongs.|
188
+ |`rulesetId`|`uint256`|The ID of the ruleset to get the struct of.|
189
+
190
+ **Returns**
191
+
192
+ |Name|Type|Description|
193
+ |----|----|-----------|
194
+ |`ruleset`|`JBRuleset`|The ruleset struct.|
195
+
196
+
197
+ ### latestQueuedOf
198
+
199
+ The latest ruleset queued for a project. Returns the ruleset's struct and its current approval status.
200
+
201
+ *Returns struct and status for the ruleset initialized furthest in the future (at the end of the ruleset
202
+ queue).*
203
+
204
+
205
+ ```solidity
206
+ function latestQueuedOf(uint256 projectId)
207
+ external
208
+ view
209
+ override
210
+ returns (JBRuleset memory ruleset, JBApprovalStatus approvalStatus);
211
+ ```
212
+ **Parameters**
213
+
214
+ |Name|Type|Description|
215
+ |----|----|-----------|
216
+ |`projectId`|`uint256`|The ID of the project to get the latest queued ruleset of.|
217
+
218
+ **Returns**
219
+
220
+ |Name|Type|Description|
221
+ |----|----|-----------|
222
+ |`ruleset`|`JBRuleset`|The project's latest queued ruleset's struct.|
223
+ |`approvalStatus`|`JBApprovalStatus`|The approval hook's status for the ruleset.|
224
+
225
+
226
+ ### upcomingOf
227
+
228
+ The ruleset that's up next for a project.
229
+
230
+ *If an upcoming ruleset is not found for the project, returns an empty ruleset with all properties set to 0.*
231
+
232
+
233
+ ```solidity
234
+ function upcomingOf(uint256 projectId) external view override returns (JBRuleset memory ruleset);
235
+ ```
236
+ **Parameters**
237
+
238
+ |Name|Type|Description|
239
+ |----|----|-----------|
240
+ |`projectId`|`uint256`|The ID of the project to get the upcoming ruleset of.|
241
+
242
+ **Returns**
243
+
244
+ |Name|Type|Description|
245
+ |----|----|-----------|
246
+ |`ruleset`|`JBRuleset`|The struct for the project's upcoming ruleset.|
247
+
248
+
249
+ ### deriveCycleNumberFrom
250
+
251
+ The cycle number of the next ruleset given the specified ruleset.
252
+
253
+ *Each time a ruleset starts, whether it was queued or cycled over, the cycle number is incremented by 1.*
254
+
255
+
256
+ ```solidity
257
+ function deriveCycleNumberFrom(
258
+ uint256 baseRulesetCycleNumber,
259
+ uint256 baseRulesetStart,
260
+ uint256 baseRulesetDuration,
261
+ uint256 start
262
+ )
263
+ public
264
+ pure
265
+ returns (uint256);
266
+ ```
267
+ **Parameters**
268
+
269
+ |Name|Type|Description|
270
+ |----|----|-----------|
271
+ |`baseRulesetCycleNumber`|`uint256`|The cycle number of the base ruleset.|
272
+ |`baseRulesetStart`|`uint256`|The start time of the base ruleset.|
273
+ |`baseRulesetDuration`|`uint256`|The duration of the base ruleset.|
274
+ |`start`|`uint256`|The start time of the ruleset to derive a cycle number for.|
275
+
276
+ **Returns**
277
+
278
+ |Name|Type|Description|
279
+ |----|----|-----------|
280
+ |`<none>`|`uint256`|The ruleset's cycle number.|
281
+
282
+
283
+ ### deriveStartFrom
284
+
285
+ The date that is the nearest multiple of the base ruleset's duration from the start of the next cycle.
286
+
287
+
288
+ ```solidity
289
+ function deriveStartFrom(
290
+ uint256 baseRulesetStart,
291
+ uint256 baseRulesetDuration,
292
+ uint256 mustStartAtOrAfter
293
+ )
294
+ public
295
+ pure
296
+ returns (uint256 start);
297
+ ```
298
+ **Parameters**
299
+
300
+ |Name|Type|Description|
301
+ |----|----|-----------|
302
+ |`baseRulesetStart`|`uint256`|The start time of the base ruleset.|
303
+ |`baseRulesetDuration`|`uint256`|The duration of the base ruleset.|
304
+ |`mustStartAtOrAfter`|`uint256`|The earliest time the next ruleset can start. The ruleset cannot start before this timestamp.|
305
+
306
+ **Returns**
307
+
308
+ |Name|Type|Description|
309
+ |----|----|-----------|
310
+ |`start`|`uint256`|The next start time.|
311
+
312
+
313
+ ### deriveWeightFrom
314
+
315
+ The accumulated weight change since the specified ruleset.
316
+
317
+
318
+ ```solidity
319
+ function deriveWeightFrom(
320
+ uint256 projectId,
321
+ uint256 baseRulesetStart,
322
+ uint256 baseRulesetDuration,
323
+ uint256 baseRulesetWeight,
324
+ uint256 baseRulesetWeightCutPercent,
325
+ uint256 baseRulesetCacheId,
326
+ uint256 start
327
+ )
328
+ public
329
+ view
330
+ returns (uint256 weight);
331
+ ```
332
+ **Parameters**
333
+
334
+ |Name|Type|Description|
335
+ |----|----|-----------|
336
+ |`projectId`|`uint256`|The ID of the project to which the ruleset weights apply.|
337
+ |`baseRulesetStart`|`uint256`|The start time of the base ruleset.|
338
+ |`baseRulesetDuration`|`uint256`|The duration of the base ruleset.|
339
+ |`baseRulesetWeight`|`uint256`|The weight of the base ruleset.|
340
+ |`baseRulesetWeightCutPercent`|`uint256`|The weight cut percent of the base ruleset.|
341
+ |`baseRulesetCacheId`|`uint256`|The ID of the ruleset to base the calculation on (the previous ruleset).|
342
+ |`start`|`uint256`|The start time of the ruleset to derive a weight for.|
343
+
344
+ **Returns**
345
+
346
+ |Name|Type|Description|
347
+ |----|----|-----------|
348
+ |`weight`|`uint256`|The derived weight, as a fixed point number with 18 decimals.|
349
+
350
+
351
+ ### _approvalStatusOf
352
+
353
+ The approval status of a given project and ruleset struct according to the relevant approval hook.
354
+
355
+
356
+ ```solidity
357
+ function _approvalStatusOf(uint256 projectId, JBRuleset memory ruleset) internal view returns (JBApprovalStatus);
358
+ ```
359
+ **Parameters**
360
+
361
+ |Name|Type|Description|
362
+ |----|----|-----------|
363
+ |`projectId`|`uint256`|The ID of the project that the ruleset belongs to.|
364
+ |`ruleset`|`JBRuleset`|The ruleset to get an approval flag for.|
365
+
366
+ **Returns**
367
+
368
+ |Name|Type|Description|
369
+ |----|----|-----------|
370
+ |`<none>`|`JBApprovalStatus`|The approval status of the project's ruleset.|
371
+
372
+
373
+ ### _approvalStatusOf
374
+
375
+ The approval status of a given ruleset (ID) for a given project (ID).
376
+
377
+
378
+ ```solidity
379
+ function _approvalStatusOf(
380
+ uint256 projectId,
381
+ uint256 rulesetId,
382
+ uint256 start,
383
+ uint256 approvalHookRulesetId
384
+ )
385
+ internal
386
+ view
387
+ returns (JBApprovalStatus);
388
+ ```
389
+ **Parameters**
390
+
391
+ |Name|Type|Description|
392
+ |----|----|-----------|
393
+ |`projectId`|`uint256`|The ID of the project the ruleset belongs to.|
394
+ |`rulesetId`|`uint256`|The ID of the ruleset to get the approval status of.|
395
+ |`start`|`uint256`|The start time of the ruleset to get the approval status of.|
396
+ |`approvalHookRulesetId`|`uint256`|The ID of the ruleset with the approval hook that should be checked against.|
397
+
398
+ **Returns**
399
+
400
+ |Name|Type|Description|
401
+ |----|----|-----------|
402
+ |`<none>`|`JBApprovalStatus`|The approval status of the project.|
403
+
404
+
405
+ ### _currentlyApprovableRulesetIdOf
406
+
407
+ The ID of the ruleset which has started and hasn't expired yet, whether or not it has been approved, for
408
+ a given project. If approved, this is the active ruleset.
409
+
410
+ *A value of 0 is returned if no ruleset was found.*
411
+
412
+ *Assumes the project has a latest ruleset.*
413
+
414
+
415
+ ```solidity
416
+ function _currentlyApprovableRulesetIdOf(uint256 projectId) internal view returns (uint256);
417
+ ```
418
+ **Parameters**
419
+
420
+ |Name|Type|Description|
421
+ |----|----|-----------|
422
+ |`projectId`|`uint256`|The ID of the project to check for a currently approvable ruleset.|
423
+
424
+ **Returns**
425
+
426
+ |Name|Type|Description|
427
+ |----|----|-----------|
428
+ |`<none>`|`uint256`|The ID of a currently approvable ruleset if one exists, or 0 if one doesn't exist.|
429
+
430
+
431
+ ### _getStructFor
432
+
433
+ Unpack a ruleset's packed stored values into an easy-to-work-with ruleset struct.
434
+
435
+
436
+ ```solidity
437
+ function _getStructFor(uint256 projectId, uint256 rulesetId) internal view returns (JBRuleset memory ruleset);
438
+ ```
439
+ **Parameters**
440
+
441
+ |Name|Type|Description|
442
+ |----|----|-----------|
443
+ |`projectId`|`uint256`|The ID of the project the ruleset belongs to.|
444
+ |`rulesetId`|`uint256`|The ID of the ruleset to get the full struct for.|
445
+
446
+ **Returns**
447
+
448
+ |Name|Type|Description|
449
+ |----|----|-----------|
450
+ |`ruleset`|`JBRuleset`|A ruleset struct.|
451
+
452
+
453
+ ### _simulateCycledRulesetBasedOn
454
+
455
+ A simulated view of the ruleset that would be created if the provided one cycled over (if the project
456
+ doesn't queue a new ruleset).
457
+
458
+ *Returns an empty ruleset if a ruleset can't be simulated based on the provided one.*
459
+
460
+ *Assumes a simulated ruleset will never be based on a ruleset with a duration of 0.*
461
+
462
+
463
+ ```solidity
464
+ function _simulateCycledRulesetBasedOn(
465
+ uint256 projectId,
466
+ JBRuleset memory baseRuleset,
467
+ bool allowMidRuleset
468
+ )
469
+ internal
470
+ view
471
+ returns (JBRuleset memory);
472
+ ```
473
+ **Parameters**
474
+
475
+ |Name|Type|Description|
476
+ |----|----|-----------|
477
+ |`projectId`|`uint256`|The ID of the project of the ruleset.|
478
+ |`baseRuleset`|`JBRuleset`|The ruleset that the simulated ruleset should be based on.|
479
+ |`allowMidRuleset`|`bool`|A flag indicating if the simulated ruleset is allowed to already be mid ruleset.|
480
+
481
+ **Returns**
482
+
483
+ |Name|Type|Description|
484
+ |----|----|-----------|
485
+ |`<none>`|`JBRuleset`|A simulated ruleset struct: the next ruleset by default. This will be overwritten if a new ruleset is queued for the project.|
486
+
487
+
488
+ ### _upcomingApprovableRulesetIdOf
489
+
490
+ The ruleset up next for a project, if one exists, whether or not that ruleset has been approved.
491
+
492
+ *A value of 0 is returned if no ruleset was found.*
493
+
494
+ *Assumes the project has a `latestRulesetIdOf` value.*
495
+
496
+
497
+ ```solidity
498
+ function _upcomingApprovableRulesetIdOf(uint256 projectId) internal view returns (uint256 rulesetId);
499
+ ```
500
+ **Parameters**
501
+
502
+ |Name|Type|Description|
503
+ |----|----|-----------|
504
+ |`projectId`|`uint256`|The ID of the project to check for an upcoming approvable ruleset.|
505
+
506
+ **Returns**
507
+
508
+ |Name|Type|Description|
509
+ |----|----|-----------|
510
+ |`rulesetId`|`uint256`|The `rulesetId` of the upcoming approvable ruleset if one exists, or 0 if one doesn't exist.|
511
+
512
+
513
+ ### queueFor
514
+
515
+ Queues the upcoming approvable ruleset for the specified project.
516
+
517
+ *Only a project's current controller can queue its rulesets.*
518
+
519
+
520
+ ```solidity
521
+ function queueFor(
522
+ uint256 projectId,
523
+ uint256 duration,
524
+ uint256 weight,
525
+ uint256 weightCutPercent,
526
+ IJBRulesetApprovalHook approvalHook,
527
+ uint256 metadata,
528
+ uint256 mustStartAtOrAfter
529
+ )
530
+ external
531
+ override
532
+ onlyControllerOf(projectId)
533
+ returns (JBRuleset memory);
534
+ ```
535
+ **Parameters**
536
+
537
+ |Name|Type|Description|
538
+ |----|----|-----------|
539
+ |`projectId`|`uint256`|The ID of the project to queue the ruleset for.|
540
+ |`duration`|`uint256`|The number of seconds the ruleset lasts for, after which a new ruleset starts. - A `duration` of 0 means this ruleset will remain active until the project owner queues a new ruleset. That new ruleset will start immediately. - A ruleset with a non-zero `duration` applies until the duration ends – any newly queued rulesets will be *queued* to take effect afterwards. - If a duration ends and no new rulesets are queued, the ruleset rolls over to a new ruleset with the same rules (except for a new `start` timestamp and a cut `weight`).|
541
+ |`weight`|`uint256`|A fixed point number with 18 decimals that contracts can use to base arbitrary calculations on. Payment terminals generally use this to determine how many tokens should be minted when the project is paid.|
542
+ |`weightCutPercent`|`uint256`|A fraction (out of `JBConstants.MAX_WEIGHT_CUT_PERCENT`) to reduce the next ruleset's `weight` by. - If a ruleset specifies a non-zero `weight`, the `weightCutPercent` does not apply. - If the `weightCutPercent` is 0, the `weight` stays the same. - If the `weightCutPercent` is 10% of `JBConstants.MAX_WEIGHT_CUT_PERCENT`, next ruleset's `weight` will be 90% of the current one.|
543
+ |`approvalHook`|`IJBRulesetApprovalHook`|A contract which dictates whether a proposed ruleset should be accepted or rejected. It can be used to constrain a project owner's ability to change ruleset parameters over time.|
544
+ |`metadata`|`uint256`|Arbitrary extra data to associate with this ruleset. This metadata is not used by `JBRulesets`.|
545
+ |`mustStartAtOrAfter`|`uint256`|The earliest time the ruleset can start. The ruleset cannot start before this timestamp.|
546
+
547
+ **Returns**
548
+
549
+ |Name|Type|Description|
550
+ |----|----|-----------|
551
+ |`<none>`|`JBRuleset`|The struct of the new ruleset.|
552
+
553
+
554
+ ### updateRulesetWeightCache
555
+
556
+ Cache the value of the ruleset weight.
557
+
558
+
559
+ ```solidity
560
+ function updateRulesetWeightCache(uint256 projectId) external override;
561
+ ```
562
+ **Parameters**
563
+
564
+ |Name|Type|Description|
565
+ |----|----|-----------|
566
+ |`projectId`|`uint256`|The ID of the project having its ruleset weight cached.|
567
+
568
+
569
+ ### _configureIntrinsicPropertiesFor
570
+
571
+ Updates the latest ruleset for this project if it exists. If there is no ruleset, initializes one.
572
+
573
+
574
+ ```solidity
575
+ function _configureIntrinsicPropertiesFor(
576
+ uint256 projectId,
577
+ uint256 rulesetId,
578
+ uint256 weight,
579
+ uint256 mustStartAtOrAfter
580
+ )
581
+ internal;
582
+ ```
583
+ **Parameters**
584
+
585
+ |Name|Type|Description|
586
+ |----|----|-----------|
587
+ |`projectId`|`uint256`|The ID of the project to update the latest ruleset for.|
588
+ |`rulesetId`|`uint256`|The timestamp of when the ruleset was queued.|
589
+ |`weight`|`uint256`|The weight to store in the queued ruleset.|
590
+ |`mustStartAtOrAfter`|`uint256`|The earliest time the ruleset can start. The ruleset cannot start before this timestamp.|
591
+
592
+
593
+ ### _initializeRulesetFor
594
+
595
+ Initializes a ruleset with the specified properties.
596
+
597
+
598
+ ```solidity
599
+ function _initializeRulesetFor(
600
+ uint256 projectId,
601
+ JBRuleset memory baseRuleset,
602
+ uint256 rulesetId,
603
+ uint256 mustStartAtOrAfter,
604
+ uint256 weight
605
+ )
606
+ internal;
607
+ ```
608
+ **Parameters**
609
+
610
+ |Name|Type|Description|
611
+ |----|----|-----------|
612
+ |`projectId`|`uint256`|The ID of the project to initialize the ruleset for.|
613
+ |`baseRuleset`|`JBRuleset`|The ruleset struct to base the newly initialized one on.|
614
+ |`rulesetId`|`uint256`|The `rulesetId` for the ruleset being initialized.|
615
+ |`mustStartAtOrAfter`|`uint256`|The earliest time the ruleset can start. The ruleset cannot start before this timestamp.|
616
+ |`weight`|`uint256`|The weight to give the newly initialized ruleset.|
617
+
618
+
619
+ ### _packAndStoreIntrinsicPropertiesOf
620
+
621
+ Efficiently stores the provided intrinsic properties of a ruleset.
622
+
623
+
624
+ ```solidity
625
+ function _packAndStoreIntrinsicPropertiesOf(
626
+ uint256 rulesetId,
627
+ uint256 projectId,
628
+ uint256 rulesetCycleNumber,
629
+ uint256 weight,
630
+ uint256 basedOnId,
631
+ uint256 start
632
+ )
633
+ internal;
634
+ ```
635
+ **Parameters**
636
+
637
+ |Name|Type|Description|
638
+ |----|----|-----------|
639
+ |`rulesetId`|`uint256`|The `rulesetId` of the ruleset to pack and store for.|
640
+ |`projectId`|`uint256`|The ID of the project the ruleset belongs to.|
641
+ |`rulesetCycleNumber`|`uint256`|The cycle number of the ruleset.|
642
+ |`weight`|`uint256`|The weight of the ruleset.|
643
+ |`basedOnId`|`uint256`|The `rulesetId` of the ruleset this ruleset was based on.|
644
+ |`start`|`uint256`|The start time of this ruleset.|
645
+
646
+
647
+ ## Errors
648
+ ### JBRulesets_InvalidWeightCutPercent
649
+
650
+ ```solidity
651
+ error JBRulesets_InvalidWeightCutPercent(uint256 percent);
652
+ ```
653
+
654
+ ### JBRulesets_InvalidRulesetApprovalHook
655
+
656
+ ```solidity
657
+ error JBRulesets_InvalidRulesetApprovalHook(IJBRulesetApprovalHook hook);
658
+ ```
659
+
660
+ ### JBRulesets_InvalidRulesetDuration
661
+
662
+ ```solidity
663
+ error JBRulesets_InvalidRulesetDuration(uint256 duration, uint256 limit);
664
+ ```
665
+
666
+ ### JBRulesets_InvalidRulesetEndTime
667
+
668
+ ```solidity
669
+ error JBRulesets_InvalidRulesetEndTime(uint256 timestamp, uint256 limit);
670
+ ```
671
+
672
+ ### JBRulesets_InvalidWeight
673
+
674
+ ```solidity
675
+ error JBRulesets_InvalidWeight(uint256 weight, uint256 limit);
676
+ ```
677
+