@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,29 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ import {JBTokenAmount} from "./JBTokenAmount.sol";
5
+
6
+ /// @custom:member payer The address the payment originated from.
7
+ /// @custom:member projectId The ID of the project being paid.
8
+ /// @custom:member rulesetId The ID of the ruleset the payment is being made during.
9
+ /// @custom:member amount The payment's token amount. Includes the token being paid, the value, the number of decimals
10
+ /// included, and the currency of the amount.
11
+ /// @custom:member forwardedAmount The token amount being forwarded to the pay hook. Includes the token
12
+ /// being paid, the value, the number of decimals included, and the currency of the amount.
13
+ /// @custom:member weight The current ruleset's weight (used to determine how many tokens should be minted).
14
+ /// @custom:member newlyIssuedTokenCount The number of project tokens minted for the beneficiary.
15
+ /// @custom:member beneficiary The address which receives any tokens this payment yields.
16
+ /// @custom:member hookMetadata Extra data specified by the data hook, which is sent to the pay hook.
17
+ /// @custom:member payerMetadata Extra data specified by the payer, which is sent to the pay hook.
18
+ struct JBAfterPayRecordedContext {
19
+ address payer;
20
+ uint256 projectId;
21
+ uint256 rulesetId;
22
+ JBTokenAmount amount;
23
+ JBTokenAmount forwardedAmount;
24
+ uint256 weight;
25
+ uint256 newlyIssuedTokenCount;
26
+ address beneficiary;
27
+ bytes hookMetadata;
28
+ bytes payerMetadata;
29
+ }
@@ -0,0 +1,31 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ import {JBTokenAmount} from "./JBTokenAmount.sol";
5
+
6
+ /// @notice Context sent from the terminal to the ruleset's data hook upon cash out.
7
+ /// @custom:member terminal The terminal that is facilitating the cash out.
8
+ /// @custom:member holder The holder of the tokens being cashed out.
9
+ /// @custom:member projectId The ID of the project whose tokens are being cashed out.
10
+ /// @custom:member rulesetId The ID of the ruleset the cash out is being made during.
11
+ /// @custom:member cashOutCount The number of tokens being cashed out, as a fixed point number with 18 decimals.
12
+ /// @custom:member totalSupply The total token supply being used for the calculation, as a fixed point number with 18
13
+ /// decimals.
14
+ /// @custom:member surplus The surplus amount used for the calculation, as a fixed point number with 18 decimals.
15
+ /// Includes the token of the surplus, the surplus value, the number of decimals
16
+ /// included, and the currency of the surplus.
17
+ /// @custom:member useTotalSurplus If surplus across all of a project's terminals is being used when making cash outs.
18
+ /// @custom:member cashOutTaxRate The cash out tax rate of the ruleset the cash out is being made during.
19
+ /// @custom:member metadata Extra data provided by the casher.
20
+ struct JBBeforeCashOutRecordedContext {
21
+ address terminal;
22
+ address holder;
23
+ uint256 projectId;
24
+ uint256 rulesetId;
25
+ uint256 cashOutCount;
26
+ uint256 totalSupply;
27
+ JBTokenAmount surplus;
28
+ bool useTotalSurplus;
29
+ uint256 cashOutTaxRate;
30
+ bytes metadata;
31
+ }
@@ -0,0 +1,28 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ import {JBTokenAmount} from "./JBTokenAmount.sol";
5
+
6
+ /// @notice Context sent from the terminal to the ruleset's data hook upon payment.
7
+ /// @custom:member terminal The terminal that is facilitating the payment.
8
+ /// @custom:member payer The address that the payment originated from.
9
+ /// @custom:member amount The payment's token amount, including the token being paid, the value, the number of decimals
10
+ /// included, and the currency of the amount.
11
+ /// @custom:member projectId The ID of the project being paid.
12
+ /// @custom:member rulesetId The ID of the ruleset the payment is being made during.
13
+ /// @custom:member beneficiary The specified address that should be the beneficiary of anything that this payment
14
+ /// yields.
15
+ /// @custom:member weight The weight of the ruleset during which the payment is being made.
16
+ /// @custom:member reservedPercent The reserved percent of the ruleset the payment is being made during.
17
+ /// @custom:member metadata Extra data specified by the payer.
18
+ struct JBBeforePayRecordedContext {
19
+ address terminal;
20
+ address payer;
21
+ JBTokenAmount amount;
22
+ uint256 projectId;
23
+ uint256 rulesetId;
24
+ address beneficiary;
25
+ uint256 weight;
26
+ uint256 reservedPercent;
27
+ bytes metadata;
28
+ }
@@ -0,0 +1,15 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ import {IJBCashOutHook} from "../interfaces/IJBCashOutHook.sol";
5
+
6
+ /// @notice A cash out hook specification sent from the ruleset's data hook back to the terminal. This specification is
7
+ /// fulfilled by the terminal.
8
+ /// @custom:member hook The cash out hook to use when fulfilling this specification.
9
+ /// @custom:member amount The amount to send to the hook.
10
+ /// @custom:member metadata Metadata to pass to the hook.
11
+ struct JBCashOutHookSpecification {
12
+ IJBCashOutHook hook;
13
+ uint256 amount;
14
+ bytes metadata;
15
+ }
@@ -0,0 +1,10 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ /// @custom:member amount The amount of the currency.
5
+ /// @custom:member currency The currency. By convention, this is `uint32(uint160(tokenAddress))` for tokens, or a
6
+ /// constant ID from e.g. `JBCurrencyIds` for other currencies.
7
+ struct JBCurrencyAmount {
8
+ uint224 amount;
9
+ uint32 currency;
10
+ }
@@ -0,0 +1,12 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ /// @custom:member amount The total amount the fee was taken from, as a fixed point number with the same number of
5
+ /// decimals as the terminal in which this struct was created.
6
+ /// @custom:member beneficiary The address that will receive the tokens that are minted as a result of the fee payment.
7
+ /// @custom:member unlockTimestamp The timestamp at which the fee is unlocked and can be processed.
8
+ struct JBFee {
9
+ uint256 amount;
10
+ address beneficiary;
11
+ uint48 unlockTimestamp;
12
+ }
@@ -0,0 +1,28 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ import {JBCurrencyAmount} from "./JBCurrencyAmount.sol";
5
+
6
+ /// @dev Payout limit example: if the `amount` is 5, the `currency` is 1 (USD), and the terminal's token is ETH, then
7
+ /// the project can pay out 5 USD worth of ETH during a ruleset.
8
+ /// @dev Surplus allowance example: if the `amount` is 5, the `currency` is 1 (USD), and the terminal's token is ETH,
9
+ /// then the project can pay out 5 USD worth of ETH from its surplus during a ruleset. A project's surplus is its
10
+ /// balance minus its current combined payout limit.
11
+ /// @dev If a project has multiple payout limits or surplus allowances, they are all available. They can all be used
12
+ /// during a single ruleset.
13
+ /// @dev The payout limits' and surplus allowances' fixed point amounts have the same number of decimals as the
14
+ /// terminal.
15
+ /// @custom:member terminal The terminal that the payout limits and surplus allowances apply to.
16
+ /// @custom:member token The token that the payout limits and surplus allowances apply to within the `terminal`.
17
+ /// @custom:member payoutLimits An array of payout limits. The payout limits cumulatively dictate the maximum value of
18
+ /// `token`s a project can pay out from its balance in a terminal during a ruleset. Each payout limit can have a unique
19
+ /// currency and amount.
20
+ /// @custom:member surplusAllowances An array of surplus allowances. The surplus allowances cumulatively dictates the
21
+ /// maximum value of `token`s a project can pay out from its surplus (balance less payouts) in a terminal during a
22
+ /// ruleset. Each surplus allowance can have a unique currency and amount.
23
+ struct JBFundAccessLimitGroup {
24
+ address terminal;
25
+ address token;
26
+ JBCurrencyAmount[] payoutLimits;
27
+ JBCurrencyAmount[] surplusAllowances;
28
+ }
@@ -0,0 +1,15 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ import {IJBPayHook} from "../interfaces/IJBPayHook.sol";
5
+
6
+ /// @notice A pay hook specification sent from the ruleset's data hook back to the terminal. This specification is
7
+ /// fulfilled by the terminal.
8
+ /// @custom:member hook The pay hook to use when fulfilling this specification.
9
+ /// @custom:member amount The amount to send to the hook.
10
+ /// @custom:member metadata Metadata to pass the hook.
11
+ struct JBPayHookSpecification {
12
+ IJBPayHook hook;
13
+ uint256 amount;
14
+ bytes metadata;
15
+ }
@@ -0,0 +1,13 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ /// @custom:member operator The address that permissions are being given to.
5
+ /// @custom:member projectId The ID of the project the operator is being given permissions for. Operators only have
6
+ /// permissions under this project's scope. An ID of 0 is a wildcard, which gives an operator permissions across all
7
+ /// projects.
8
+ /// @custom:member permissionIds The IDs of the permissions being given. See the `JBPermissionIds` library.
9
+ struct JBPermissionsData {
10
+ address operator;
11
+ uint64 projectId;
12
+ uint8[] permissionIds;
13
+ }
@@ -0,0 +1,42 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ import {IJBRulesetApprovalHook} from "./../interfaces/IJBRulesetApprovalHook.sol";
5
+
6
+ /// @dev `JBRuleset` timestamps are unix timestamps (seconds since 00:00 January 1st, 1970 UTC).
7
+ /// @custom:member cycleNumber The ruleset's cycle number. Each ruleset's `cycleNumber` is the previous ruleset's
8
+ /// `cycleNumber` plus one. Each project's first ruleset has a `cycleNumber` of 1.
9
+ /// @custom:member id The ruleset's ID, which is a timestamp of when this ruleset's rules were initialized. The
10
+ /// `rulesetId` stays the same for rulesets that automatically cycle over from a manually queued ruleset.
11
+ /// @custom:member basedOnId The `rulesetId` of the ruleset which was active when this ruleset was created.
12
+ /// @custom:member start The timestamp from which this ruleset is considered active.
13
+ /// @custom:member duration The number of seconds the ruleset lasts for. After this duration, a new ruleset will start.
14
+ /// The project owner can queue new rulesets at any time, which will take effect once the current ruleset's duration is
15
+ /// over. If the `duration` is 0, newly queued rulesets will take effect immediately. If a ruleset ends and there are no
16
+ /// new rulesets queued, the current ruleset cycles over to another one with the same properties but a new `start`
17
+ /// timestamp and a `weight` reduced by the ruleset's `weightCutPercent`.
18
+ /// @custom:member weight A fixed point number with 18 decimals which is typically used by payment terminals to
19
+ /// determine how many tokens should be minted when a payment is received. This can be used by other contracts for
20
+ /// arbitrary calculations.
21
+ /// @custom:member weightCutPercent The percentage by which to reduce the `weight` each time a new ruleset starts.
22
+ /// `weight`
23
+ /// is
24
+ /// a percentage out of `JBConstants.MAX_WEIGHT_CUT_PERCENT`. If it's 0, the next ruleset will have the same `weight` by
25
+ /// default. If it's 90%, the next ruleset's `weight` will be 10% smaller. If a ruleset explicitly sets a new `weight`,
26
+ /// the `weightCutPercent` doesn't apply.
27
+ /// @custom:member approvalHook An address of a contract that says whether a queued ruleset should be approved or
28
+ /// rejected. If a
29
+ /// ruleset is rejected, it won't go into effect. An approval hook can be used to create rules which dictate how a
30
+ /// project owner can change their ruleset over time.
31
+ /// @custom:member metadata Extra data associated with a ruleset which can be used by other contracts.
32
+ struct JBRuleset {
33
+ uint48 cycleNumber;
34
+ uint48 id;
35
+ uint48 basedOnId;
36
+ uint48 start;
37
+ uint32 duration;
38
+ uint112 weight;
39
+ uint32 weightCutPercent;
40
+ IJBRulesetApprovalHook approvalHook;
41
+ uint256 metadata;
42
+ }
@@ -0,0 +1,43 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ import {IJBRulesetApprovalHook} from "../interfaces/IJBRulesetApprovalHook.sol";
5
+ import {JBFundAccessLimitGroup} from "./JBFundAccessLimitGroup.sol";
6
+ import {JBRulesetMetadata} from "./JBRulesetMetadata.sol";
7
+ import {JBSplitGroup} from "./JBSplitGroup.sol";
8
+
9
+ /// @custom:member mustStartAtOrAfter The earliest time the ruleset can start.
10
+ /// @custom:member duration The number of seconds the ruleset lasts for, after which a new ruleset will start. A
11
+ /// duration of 0 means that the ruleset will stay active until the project owner explicitly issues a reconfiguration,
12
+ /// at which point a new ruleset will immediately start with the updated properties. If the duration is greater than 0,
13
+ /// a project owner cannot make changes to a ruleset's parameters while it is active – any proposed changes will apply
14
+ /// to the subsequent ruleset. If no changes are proposed, a ruleset rolls over to another one with the same properties
15
+ /// but new `start` timestamp and a cut `weight`.
16
+ /// @custom:member weight A fixed point number with 18 decimals that contracts can use to base arbitrary calculations
17
+ /// on. For example, payment terminals can use this to determine how many tokens should be minted when a payment is
18
+ /// received.
19
+ /// @custom:member weightCutPercent A percent by how much the `weight` of the subsequent ruleset should be reduced, if
20
+ /// the
21
+ /// project owner hasn't queued the subsequent ruleset with an explicit `weight`. If it's 0, each ruleset will have
22
+ /// equal weight. If the number is 90%, the next ruleset will have a 10% smaller weight. This weight is out of
23
+ /// `JBConstants.MAX_WEIGHT_CUT_PERCENT`.
24
+ /// @custom:member approvalHook An address of a contract that says whether a proposed ruleset should be accepted or
25
+ /// rejected. It
26
+ /// can be used to create rules around how a project owner can change ruleset parameters over time.
27
+ /// @custom:member metadata Metadata specifying the controller-specific parameters that a ruleset can have. These
28
+ /// properties cannot change until the next ruleset starts.
29
+ /// @custom:member splitGroups An array of splits to use for any number of groups while the ruleset is active.
30
+ /// @custom:member fundAccessLimitGroups An array of structs which dictate the amount of funds a project can access from
31
+ /// its balance in each payment terminal while the ruleset is active. Amounts are fixed point numbers using the same
32
+ /// number of decimals as the corresponding terminal. The `_payoutLimit` and `_surplusAllowance` parameters must fit in
33
+ /// a `uint232`.
34
+ struct JBRulesetConfig {
35
+ uint48 mustStartAtOrAfter;
36
+ uint32 duration;
37
+ uint112 weight;
38
+ uint32 weightCutPercent;
39
+ IJBRulesetApprovalHook approvalHook;
40
+ JBRulesetMetadata metadata;
41
+ JBSplitGroup[] splitGroups;
42
+ JBFundAccessLimitGroup[] fundAccessLimitGroups;
43
+ }
@@ -0,0 +1,56 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ /// @custom:member reservedPercent The reserved percent of the ruleset. This number is a percentage calculated out of
5
+ /// `JBConstants.MAX_RESERVED_PERCENT`.
6
+ /// @custom:member cashOutTaxRate The cash out tax rate of the ruleset. This number is a percentage calculated out of
7
+ /// `JBConstants.MAX_CASH_OUT_TAX_RATE`.
8
+ /// @custom:member baseCurrency The currency on which to base the ruleset's weight. By convention, this is
9
+ /// `uint32(uint160(tokenAddress))` for tokens, or a constant ID from e.g. `JBCurrencyIds` for other currencies.
10
+ /// @custom:member pausePay A flag indicating if the pay functionality should be paused during the ruleset.
11
+ /// @custom:member pauseCreditTransfers A flag indicating if the project token transfer functionality should be paused
12
+ /// during the funding cycle.
13
+ /// @custom:member allowOwnerMinting A flag indicating if the project owner or an operator with the `MINT_TOKENS`
14
+ /// permission from the owner should be allowed to mint project tokens on demand during this ruleset.
15
+ /// @custom:member allowTerminalMigration A flag indicating if migrating terminals should be allowed during this
16
+ /// ruleset.
17
+ /// @custom:member allowSetTerminals A flag indicating if a project's terminals can be added or removed.
18
+ /// @custom:member allowSetController A flag indicating if a project's controller can be changed.
19
+ /// @custom:member allowAddAccountingContext A flag indicating if a project can add new accounting contexts for its
20
+ /// terminals to use.
21
+ /// @custom:member allowAddPriceFeed A flag indicating if a project can add new price feeds to calculate exchange rates
22
+ /// between its tokens.
23
+ /// @custom:member ownerMustSendPayouts A flag indicating if privileged payout distribution should be
24
+ /// enforced, otherwise payouts can be distributed by anyone.
25
+ /// @custom:member holdFees A flag indicating if fees should be held during this ruleset.
26
+ /// @custom:member useTotalSurplusForCashOuts A flag indicating if cash outs should use the project's balance held
27
+ /// in all terminals instead of the project's local terminal balance from which the cash out is being fulfilled.
28
+ /// @custom:member useDataHookForPay A flag indicating if the data hook should be used for pay transactions during this
29
+ /// ruleset.
30
+ /// @custom:member useDataHookForCashOut A flag indicating if the data hook should be used for cash out transactions
31
+ /// during
32
+ /// this ruleset.
33
+ /// @custom:member dataHook The data hook to use during this ruleset.
34
+ /// @custom:member metadata Metadata of the metadata, only the 14 least significant bits can be used, the 2 most
35
+ /// significant bits are disregarded.
36
+ struct JBRulesetMetadata {
37
+ uint16 reservedPercent;
38
+ uint16 cashOutTaxRate;
39
+ uint32 baseCurrency;
40
+ bool pausePay;
41
+ bool pauseCreditTransfers;
42
+ bool allowOwnerMinting;
43
+ bool allowSetCustomToken;
44
+ bool allowTerminalMigration;
45
+ bool allowSetTerminals;
46
+ bool allowSetController;
47
+ bool allowAddAccountingContext;
48
+ bool allowAddPriceFeed;
49
+ bool ownerMustSendPayouts;
50
+ bool holdFees;
51
+ bool useTotalSurplusForCashOuts;
52
+ bool useDataHookForPay;
53
+ bool useDataHookForCashOut;
54
+ address dataHook;
55
+ uint16 metadata;
56
+ }
@@ -0,0 +1,9 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ /// @custom:member weight The cached weight value.
5
+ /// @custom:member weightCutMultiple The weight cut multiple that produces the given weight.
6
+ struct JBRulesetWeightCache {
7
+ uint112 weight;
8
+ uint168 weightCutMultiple;
9
+ }
@@ -0,0 +1,12 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ import {JBRuleset} from "./JBRuleset.sol";
5
+ import {JBRulesetMetadata} from "./JBRulesetMetadata.sol";
6
+
7
+ /// @custom:member ruleset The ruleset.
8
+ /// @custom:member metadata The ruleset's metadata.
9
+ struct JBRulesetWithMetadata {
10
+ JBRuleset ruleset;
11
+ JBRulesetMetadata metadata;
12
+ }
@@ -0,0 +1,16 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ /// @custom:member sigDeadline Deadline on the permit signature.
5
+ /// @custom:member amount The maximum amount allowed to spend.
6
+ /// @custom:member expiration Timestamp at which a spender's token allowances become invalid.
7
+ /// @custom:member nonce An incrementing value indexed per owner,token,and spender for each signature.
8
+ /// @custom:member signature The signature over the permit data. Supports EOA signatures, compact signatures defined by
9
+ /// EIP-2098, and contract signatures defined by EIP-1271.
10
+ struct JBSingleAllowance {
11
+ uint256 sigDeadline;
12
+ uint160 amount;
13
+ uint48 expiration;
14
+ uint48 nonce;
15
+ bytes signature;
16
+ }
@@ -0,0 +1,37 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ import {IJBSplitHook} from "./../interfaces/IJBSplitHook.sol";
5
+
6
+ /// @notice Splits are used to send a percentage of a total token amount to a specific contract, project, or address.
7
+ /// Splits are used to send payouts and reserved tokens.
8
+ /// @dev 1. If a non-zero split hook contract is specified, this split's tokens are sent there along with this split's
9
+ /// properties.
10
+ /// @dev 2. Otherwise, if a non-zero project ID is specified, this split's tokens are used to `pay` it through its
11
+ /// terminal if possible, or sent to the project's owner if not. If this payment yields tokens, those go to the split's
12
+ /// `beneficiary`.
13
+ /// @dev 3. Otherwise, this split's tokens are sent directly to the `beneficiary`.
14
+ /// @dev To summarize, this split's tokens are sent according to the following priority: `split hook` > `projectId` >
15
+ /// `beneficiary`.
16
+ /// @custom:member percent The percent of the total token amount that this split sends. This number is out of
17
+ /// `JBConstants.SPLITS_TOTAL_PERCENT`.
18
+ /// @custom:member projectId The ID of a project to `pay`, if applicable. Resulting tokens will be routed to the
19
+ /// `beneficiary`.
20
+ /// @custom:member beneficiary Receives this split's tokens if the `hook` and `projectId` are zero. If the `projectId`
21
+ /// is specified, the `beneficiary` receives any project tokens minted by this split. If `beneficiary` is `address(0)`,
22
+ /// the application processing the split decides on the recipient. For example, the terminal uses `msg.sender` for
23
+ /// payout splits, and the controller uses `msg.sender` for reserved token splits.
24
+ /// @custom:member preferAddToBalance If this split were to `pay` a project through its terminal, this flag indicates
25
+ /// whether it should prefer using the terminal's `addToBalance` function instead.
26
+ /// @custom:member lockedUntil The split cannot be changed until this timestamp. The `lockedUntil` timestamp can be
27
+ /// increased while a split is locked. If `lockedUntil` is zero, this split can be changed at any time.
28
+ /// @custom:member hook A contract which will receive this split's tokens and properties, and can define custom
29
+ /// behavior.
30
+ struct JBSplit {
31
+ uint32 percent;
32
+ uint64 projectId;
33
+ address payable beneficiary;
34
+ bool preferAddToBalance;
35
+ uint48 lockedUntil;
36
+ IJBSplitHook hook;
37
+ }
@@ -0,0 +1,12 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ import {JBSplit} from "./JBSplit.sol";
5
+
6
+ /// @custom:member groupId An identifier for the group. By convention, this ID is `uint256(uint160(tokenAddress))` for
7
+ /// payouts and `1` for reserved tokens.
8
+ /// @custom:member splits The splits in the group.
9
+ struct JBSplitGroup {
10
+ uint256 groupId;
11
+ JBSplit[] splits;
12
+ }
@@ -0,0 +1,20 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ import {JBSplit} from "./JBSplit.sol";
5
+
6
+ /// @custom:member token The token being sent to the split hook.
7
+ /// @custom:member amount The amount being sent to the split hook, as a fixed point number.
8
+ /// @custom:member decimals The number of decimals in the amount.
9
+ /// @custom:member projectId The project the split belongs to.
10
+ /// @custom:member groupId The group the split belongs to. By convention, this ID is `uint256(uint160(tokenAddress))`
11
+ /// for payouts and `1` for reserved tokens.
12
+ /// @custom:member split The split which specified the hook.
13
+ struct JBSplitHookContext {
14
+ address token;
15
+ uint256 amount;
16
+ uint256 decimals;
17
+ uint256 projectId;
18
+ uint256 groupId;
19
+ JBSplit split;
20
+ }
@@ -0,0 +1,12 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ import {JBAccountingContext} from "./JBAccountingContext.sol";
5
+ import {IJBTerminal} from "./../interfaces/IJBTerminal.sol";
6
+
7
+ /// @custom:member terminal The terminal to configure.
8
+ /// @custom:member accountingContextsToAccept The accounting contexts to accept from the terminal.
9
+ struct JBTerminalConfig {
10
+ IJBTerminal terminal;
11
+ JBAccountingContext[] accountingContextsToAccept;
12
+ }
@@ -0,0 +1,14 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ /// @custom:member token The token the payment was made in.
5
+ /// @custom:member decimals The number of decimals included in the value fixed point number.
6
+ /// @custom:member currency The currency. By convention, this is `uint32(uint160(tokenAddress))` for tokens, or a
7
+ /// constant ID from e.g. `JBCurrencyIds` for other currencies.
8
+ /// @custom:member value The amount of tokens that was paid, as a fixed point number.
9
+ struct JBTokenAmount {
10
+ address token;
11
+ uint8 decimals;
12
+ uint32 currency;
13
+ uint256 value;
14
+ }