@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,84 @@
1
+ # JBDeadline
2
+ [Git Source](https://github.com/Bananapus/nana-core/blob/2998dca2fbd2658e2c8791d6dc8348147d69e28e/src/JBDeadline.sol)
3
+
4
+ **Inherits:**
5
+ [IJBRulesetApprovalHook](/src/interfaces/IJBRulesetApprovalHook.sol/interface.IJBRulesetApprovalHook.md)
6
+
7
+ `JBDeadline` is a ruleset approval hook which rejects rulesets if they are not queued at least `duration`
8
+ seconds before the current ruleset ends. In other words, rulesets must be queued before the deadline to take effect.
9
+
10
+ *Project rulesets are stored in a queue. Rulesets take effect after the previous ruleset in the queue ends, and
11
+ only if they are approved by the previous ruleset's approval hook.*
12
+
13
+
14
+ ## State Variables
15
+ ### DURATION
16
+ The minimum number of seconds between the time a ruleset is queued and the time it starts. If the
17
+ difference is greater than this number, the ruleset is `Approved`.
18
+
19
+
20
+ ```solidity
21
+ uint256 public immutable override DURATION;
22
+ ```
23
+
24
+
25
+ ## Functions
26
+ ### constructor
27
+
28
+
29
+ ```solidity
30
+ constructor(uint256 duration);
31
+ ```
32
+ **Parameters**
33
+
34
+ |Name|Type|Description|
35
+ |----|----|-----------|
36
+ |`duration`|`uint256`|The minimum number of seconds between the time a ruleset is queued and the time it starts for it to be `Approved`.|
37
+
38
+
39
+ ### approvalStatusOf
40
+
41
+ The approval status of a given ruleset.
42
+
43
+
44
+ ```solidity
45
+ function approvalStatusOf(uint256, uint256 rulesetId, uint256 start) public view override returns (JBApprovalStatus);
46
+ ```
47
+ **Parameters**
48
+
49
+ |Name|Type|Description|
50
+ |----|----|-----------|
51
+ |`<none>`|`uint256`||
52
+ |`rulesetId`|`uint256`|The ID of the ruleset to check the status of.|
53
+ |`start`|`uint256`|The start timestamp of the ruleset to check the status of.|
54
+
55
+ **Returns**
56
+
57
+ |Name|Type|Description|
58
+ |----|----|-----------|
59
+ |`<none>`|`JBApprovalStatus`|The ruleset's approval status.|
60
+
61
+
62
+ ### supportsInterface
63
+
64
+ Indicates whether this contract adheres to the specified interface.
65
+
66
+ *See [IERC165-supportsInterface](/lib/forge-std/src/mocks/MockERC721.sol/contract.MockERC721.md#supportsinterface).*
67
+
68
+
69
+ ```solidity
70
+ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool);
71
+ ```
72
+ **Parameters**
73
+
74
+ |Name|Type|Description|
75
+ |----|----|-----------|
76
+ |`interfaceId`|`bytes4`|The ID of the interface to check for adherence to.|
77
+
78
+ **Returns**
79
+
80
+ |Name|Type|Description|
81
+ |----|----|-----------|
82
+ |`<none>`|`bool`|A flag indicating if this contract adheres to the specified interface.|
83
+
84
+
@@ -0,0 +1,294 @@
1
+ # JBDirectory
2
+ [Git Source](https://github.com/Bananapus/nana-core/blob/2998dca2fbd2658e2c8791d6dc8348147d69e28e/src/JBDirectory.sol)
3
+
4
+ **Inherits:**
5
+ [JBPermissioned](/src/abstract/JBPermissioned.sol/abstract.JBPermissioned.md), Ownable, [IJBDirectory](/src/interfaces/IJBDirectory.sol/interface.IJBDirectory.md)
6
+
7
+ `JBDirectory` tracks the terminals and the controller used by each project.
8
+
9
+ *Tracks which `IJBTerminal`s each project is currently accepting funds through, and which `IJBController` is
10
+ managing each project's tokens and rulesets.*
11
+
12
+
13
+ ## State Variables
14
+ ### PROJECTS
15
+ Mints ERC-721s that represent project ownership and transfers.
16
+
17
+
18
+ ```solidity
19
+ IJBProjects public immutable override PROJECTS;
20
+ ```
21
+
22
+
23
+ ### controllerOf
24
+ The specified project's controller, which dictates how its terminals interact with its tokens and
25
+ rulesets.
26
+
27
+
28
+ ```solidity
29
+ mapping(uint256 projectId => IERC165) public override controllerOf;
30
+ ```
31
+
32
+
33
+ ### isAllowedToSetFirstController
34
+ Whether the specified address is allowed to set a project's first controller on their behalf.
35
+
36
+ *These addresses/contracts have been vetted by this contract's owner.*
37
+
38
+
39
+ ```solidity
40
+ mapping(address addr => bool) public override isAllowedToSetFirstController;
41
+ ```
42
+
43
+
44
+ ### _primaryTerminalOf
45
+ The primary terminal that a project uses for the specified token.
46
+
47
+
48
+ ```solidity
49
+ mapping(uint256 projectId => mapping(address token => IJBTerminal)) internal _primaryTerminalOf;
50
+ ```
51
+
52
+
53
+ ### _terminalsOf
54
+ The specified project's terminals.
55
+
56
+
57
+ ```solidity
58
+ mapping(uint256 projectId => IJBTerminal[]) internal _terminalsOf;
59
+ ```
60
+
61
+
62
+ ## Functions
63
+ ### constructor
64
+
65
+
66
+ ```solidity
67
+ constructor(
68
+ IJBPermissions permissions,
69
+ IJBProjects projects,
70
+ address owner
71
+ )
72
+ JBPermissioned(permissions)
73
+ Ownable(owner);
74
+ ```
75
+ **Parameters**
76
+
77
+ |Name|Type|Description|
78
+ |----|----|-----------|
79
+ |`permissions`|`IJBPermissions`|A contract storing permissions.|
80
+ |`projects`|`IJBProjects`|A contract which mints ERC-721s that represent project ownership and transfers.|
81
+ |`owner`|`address`|The address that will own the contract.|
82
+
83
+
84
+ ### primaryTerminalOf
85
+
86
+ The primary terminal that a project uses for the specified token.
87
+
88
+ *Returns the first terminal that accepts the token if the project hasn't explicitly set a primary terminal
89
+ for it.*
90
+
91
+ *Returns the zero address if no terminal accepts the token.*
92
+
93
+
94
+ ```solidity
95
+ function primaryTerminalOf(uint256 projectId, address token) external view override returns (IJBTerminal);
96
+ ```
97
+ **Parameters**
98
+
99
+ |Name|Type|Description|
100
+ |----|----|-----------|
101
+ |`projectId`|`uint256`|The ID of the project to get the primary terminal of.|
102
+ |`token`|`address`|The token that the terminal accepts.|
103
+
104
+ **Returns**
105
+
106
+ |Name|Type|Description|
107
+ |----|----|-----------|
108
+ |`<none>`|`IJBTerminal`|The primary terminal's address.|
109
+
110
+
111
+ ### terminalsOf
112
+
113
+ The specified project's terminals.
114
+
115
+
116
+ ```solidity
117
+ function terminalsOf(uint256 projectId) external view override returns (IJBTerminal[] memory);
118
+ ```
119
+ **Parameters**
120
+
121
+ |Name|Type|Description|
122
+ |----|----|-----------|
123
+ |`projectId`|`uint256`|The ID of the project to get the terminals of.|
124
+
125
+ **Returns**
126
+
127
+ |Name|Type|Description|
128
+ |----|----|-----------|
129
+ |`<none>`|`IJBTerminal[]`|An array of the project's terminal addresses.|
130
+
131
+
132
+ ### isTerminalOf
133
+
134
+ Check if a project uses a specific terminal.
135
+
136
+
137
+ ```solidity
138
+ function isTerminalOf(uint256 projectId, IJBTerminal terminal) public view override returns (bool);
139
+ ```
140
+ **Parameters**
141
+
142
+ |Name|Type|Description|
143
+ |----|----|-----------|
144
+ |`projectId`|`uint256`|The ID of the project to check.|
145
+ |`terminal`|`IJBTerminal`|The terminal to check for.|
146
+
147
+ **Returns**
148
+
149
+ |Name|Type|Description|
150
+ |----|----|-----------|
151
+ |`<none>`|`bool`|A flag indicating whether the project uses the terminal.|
152
+
153
+
154
+ ### setIsAllowedToSetFirstController
155
+
156
+ Add or remove an address/contract from a list of trusted addresses which are allowed to set a first
157
+ controller for projects.
158
+
159
+ *Only this contract's owner can call this function.*
160
+
161
+ *These addresses are vetted controllers as well as contracts designed to launch new projects.*
162
+
163
+ *A project can set its own controller without being on this list.*
164
+
165
+ *If you would like to add an address/contract to this list, please reach out to this contract's owner.*
166
+
167
+
168
+ ```solidity
169
+ function setIsAllowedToSetFirstController(address addr, bool flag) external override onlyOwner;
170
+ ```
171
+ **Parameters**
172
+
173
+ |Name|Type|Description|
174
+ |----|----|-----------|
175
+ |`addr`|`address`|The address to allow or not allow.|
176
+ |`flag`|`bool`|Whether the address is allowed to set first controllers for projects. Use `true` to allow and `false` to not allow.|
177
+
178
+
179
+ ### setControllerOf
180
+
181
+ Set a project's controller. Controllers manage how terminals interact with tokens and rulesets.
182
+
183
+ *Can only be called if:
184
+ - The ruleset's metadata has `allowSetController` enabled, and the message's sender is the project's owner or an
185
+ address with the owner's permission to `SET_CONTROLLER`.
186
+ - OR the message's sender is the project's current controller.
187
+ - OR an address which `isAllowedToSetFirstController` is setting a project's first controller.*
188
+
189
+
190
+ ```solidity
191
+ function setControllerOf(uint256 projectId, IERC165 controller) external override;
192
+ ```
193
+ **Parameters**
194
+
195
+ |Name|Type|Description|
196
+ |----|----|-----------|
197
+ |`projectId`|`uint256`|The ID of the project whose controller is being set.|
198
+ |`controller`|`IERC165`|The address of the controller to set.|
199
+
200
+
201
+ ### setPrimaryTerminalOf
202
+
203
+ Set a project's primary terminal for a token.
204
+
205
+ *The primary terminal for a token is where payments in that token are routed to by default.*
206
+
207
+ *This is useful in cases where a project has multiple terminals which accept the same token.*
208
+
209
+ *Can only be called by the project's owner, or an address with the owner's permission to
210
+ `SET_PRIMARY_TERMINAL`.*
211
+
212
+
213
+ ```solidity
214
+ function setPrimaryTerminalOf(uint256 projectId, address token, IJBTerminal terminal) external override;
215
+ ```
216
+ **Parameters**
217
+
218
+ |Name|Type|Description|
219
+ |----|----|-----------|
220
+ |`projectId`|`uint256`|The ID of the project whose primary terminal is being set.|
221
+ |`token`|`address`|The token to set the primary terminal for.|
222
+ |`terminal`|`IJBTerminal`|The terminal being set as the primary terminal.|
223
+
224
+
225
+ ### setTerminalsOf
226
+
227
+ Set a project's terminals.
228
+
229
+ *Can only be called by the project's owner, an address with the owner's permission to `SET_TERMINALS`, or
230
+ the project's controller.*
231
+
232
+ *Unless the caller is the project's controller, the project's ruleset must allow setting terminals.*
233
+
234
+
235
+ ```solidity
236
+ function setTerminalsOf(uint256 projectId, IJBTerminal[] calldata terminals) external override;
237
+ ```
238
+ **Parameters**
239
+
240
+ |Name|Type|Description|
241
+ |----|----|-----------|
242
+ |`projectId`|`uint256`|The ID of the project whose terminals are being set.|
243
+ |`terminals`|`IJBTerminal[]`|An array of terminal addresses to set for the project.|
244
+
245
+
246
+ ### _addTerminalIfNeeded
247
+
248
+ If a terminal hasn't already been added to a project's list of terminals, add it.
249
+
250
+ *The project's ruleset must have `allowSetTerminals` set to `true`.*
251
+
252
+
253
+ ```solidity
254
+ function _addTerminalIfNeeded(uint256 projectId, IJBTerminal terminal) internal;
255
+ ```
256
+ **Parameters**
257
+
258
+ |Name|Type|Description|
259
+ |----|----|-----------|
260
+ |`projectId`|`uint256`|The ID of the project to add the terminal to.|
261
+ |`terminal`|`IJBTerminal`|The terminal to add.|
262
+
263
+
264
+ ## Errors
265
+ ### JBDirectory_DuplicateTerminals
266
+
267
+ ```solidity
268
+ error JBDirectory_DuplicateTerminals(IJBTerminal terminal);
269
+ ```
270
+
271
+ ### JBDirectory_InvalidProjectIdInDirectory
272
+
273
+ ```solidity
274
+ error JBDirectory_InvalidProjectIdInDirectory(uint256 projectId, uint256 limit);
275
+ ```
276
+
277
+ ### JBDirectory_SetControllerNotAllowed
278
+
279
+ ```solidity
280
+ error JBDirectory_SetControllerNotAllowed();
281
+ ```
282
+
283
+ ### JBDirectory_SetTerminalsNotAllowed
284
+
285
+ ```solidity
286
+ error JBDirectory_SetTerminalsNotAllowed();
287
+ ```
288
+
289
+ ### JBDirectory_TokenNotAccepted
290
+
291
+ ```solidity
292
+ error JBDirectory_TokenNotAccepted(uint256 projectId, address token, IJBTerminal terminal);
293
+ ```
294
+
@@ -0,0 +1,190 @@
1
+ # JBERC20
2
+ [Git Source](https://github.com/Bananapus/nana-core/blob/2998dca2fbd2658e2c8791d6dc8348147d69e28e/src/JBERC20.sol)
3
+
4
+ **Inherits:**
5
+ ERC20Votes, ERC20Permit, Ownable, [IJBToken](/src/interfaces/IJBToken.sol/interface.IJBToken.md)
6
+
7
+ An ERC-20 token that can be used by a project in `JBTokens` and `JBController`.
8
+
9
+ *By default, a project uses "credits" to track balances. Once a project sets their `IJBToken` using
10
+ `JBController.deployERC20For(...)` or `JBController.setTokenFor(...)`, credits can be redeemed to claim tokens.*
11
+
12
+ *`JBController.deployERC20For(...)` deploys a `JBERC20` contract and sets it as the project's token.*
13
+
14
+
15
+ ## State Variables
16
+ ### _name
17
+ The token's name.
18
+
19
+
20
+ ```solidity
21
+ string private _name;
22
+ ```
23
+
24
+
25
+ ### _symbol
26
+ The token's symbol.
27
+
28
+
29
+ ```solidity
30
+ string private _symbol;
31
+ ```
32
+
33
+
34
+ ## Functions
35
+ ### constructor
36
+
37
+
38
+ ```solidity
39
+ constructor() Ownable(address(this)) ERC20("invalid", "invalid") ERC20Permit("JBToken");
40
+ ```
41
+
42
+ ### balanceOf
43
+
44
+ The balance of the given address.
45
+
46
+
47
+ ```solidity
48
+ function balanceOf(address account) public view override(ERC20, IJBToken) returns (uint256);
49
+ ```
50
+ **Parameters**
51
+
52
+ |Name|Type|Description|
53
+ |----|----|-----------|
54
+ |`account`|`address`|The account to get the balance of.|
55
+
56
+ **Returns**
57
+
58
+ |Name|Type|Description|
59
+ |----|----|-----------|
60
+ |`<none>`|`uint256`|The number of tokens owned by the `account`, as a fixed point number with 18 decimals.|
61
+
62
+
63
+ ### canBeAddedTo
64
+
65
+ This token can only be added to a project when its created by the `JBTokens` contract.
66
+
67
+
68
+ ```solidity
69
+ function canBeAddedTo(uint256) external pure override returns (bool);
70
+ ```
71
+
72
+ ### decimals
73
+
74
+ The number of decimals used for this token's fixed point accounting.
75
+
76
+
77
+ ```solidity
78
+ function decimals() public view override(ERC20, IJBToken) returns (uint8);
79
+ ```
80
+ **Returns**
81
+
82
+ |Name|Type|Description|
83
+ |----|----|-----------|
84
+ |`<none>`|`uint8`|The number of decimals.|
85
+
86
+
87
+ ### name
88
+
89
+ The token's name.
90
+
91
+
92
+ ```solidity
93
+ function name() public view virtual override returns (string memory);
94
+ ```
95
+
96
+ ### symbol
97
+
98
+ The token's symbol.
99
+
100
+
101
+ ```solidity
102
+ function symbol() public view virtual override returns (string memory);
103
+ ```
104
+
105
+ ### totalSupply
106
+
107
+ The total supply of this ERC20 i.e. the total number of tokens in existence.
108
+
109
+
110
+ ```solidity
111
+ function totalSupply() public view override(ERC20, IJBToken) returns (uint256);
112
+ ```
113
+ **Returns**
114
+
115
+ |Name|Type|Description|
116
+ |----|----|-----------|
117
+ |`<none>`|`uint256`|The total supply of this ERC20, as a fixed point number.|
118
+
119
+
120
+ ### burn
121
+
122
+ Burn some outstanding tokens.
123
+
124
+ *Can only be called by this contract's owner.*
125
+
126
+
127
+ ```solidity
128
+ function burn(address account, uint256 amount) external override onlyOwner;
129
+ ```
130
+ **Parameters**
131
+
132
+ |Name|Type|Description|
133
+ |----|----|-----------|
134
+ |`account`|`address`|The address to burn tokens from.|
135
+ |`amount`|`uint256`|The amount of tokens to burn, as a fixed point number with 18 decimals.|
136
+
137
+
138
+ ### mint
139
+
140
+ Mints more of this token.
141
+
142
+ *Can only be called by this contract's owner.*
143
+
144
+
145
+ ```solidity
146
+ function mint(address account, uint256 amount) external override onlyOwner;
147
+ ```
148
+ **Parameters**
149
+
150
+ |Name|Type|Description|
151
+ |----|----|-----------|
152
+ |`account`|`address`|The address to mint the new tokens to.|
153
+ |`amount`|`uint256`|The amount of tokens to mint, as a fixed point number with 18 decimals.|
154
+
155
+
156
+ ### initialize
157
+
158
+ Initializes the token.
159
+
160
+
161
+ ```solidity
162
+ function initialize(string memory name_, string memory symbol_, address owner) public override;
163
+ ```
164
+ **Parameters**
165
+
166
+ |Name|Type|Description|
167
+ |----|----|-----------|
168
+ |`name_`|`string`|The token's name.|
169
+ |`symbol_`|`string`|The token's symbol.|
170
+ |`owner`|`address`|The token contract's owner.|
171
+
172
+
173
+ ### nonces
174
+
175
+ Required override.
176
+
177
+
178
+ ```solidity
179
+ function nonces(address owner) public view virtual override(ERC20Permit, Nonces) returns (uint256);
180
+ ```
181
+
182
+ ### _update
183
+
184
+ Required override.
185
+
186
+
187
+ ```solidity
188
+ function _update(address from, address to, uint256 value) internal virtual override(ERC20, ERC20Votes);
189
+ ```
190
+
@@ -0,0 +1,80 @@
1
+ # JBFeelessAddresses
2
+ [Git Source](https://github.com/Bananapus/nana-core/blob/2998dca2fbd2658e2c8791d6dc8348147d69e28e/src/JBFeelessAddresses.sol)
3
+
4
+ **Inherits:**
5
+ Ownable, [IJBFeelessAddresses](/src/interfaces/IJBFeelessAddresses.sol/interface.IJBFeelessAddresses.md), IERC165
6
+
7
+ Stores a list of addresses that shouldn't incur fees when sending or receiving payments.
8
+
9
+
10
+ ## State Variables
11
+ ### isFeeless
12
+ Check if the specified address is feeless.
13
+
14
+ *Feeless addresses can receive payouts without incurring a fee.*
15
+
16
+ *Feeless addresses can use the surplus allowance without incurring a fee.*
17
+
18
+ *Feeless addresses can be the beneficary of cash outs without incurring a fee.*
19
+
20
+
21
+ ```solidity
22
+ mapping(address addr => bool) public override isFeeless;
23
+ ```
24
+
25
+
26
+ ## Functions
27
+ ### constructor
28
+
29
+
30
+ ```solidity
31
+ constructor(address owner) Ownable(owner);
32
+ ```
33
+ **Parameters**
34
+
35
+ |Name|Type|Description|
36
+ |----|----|-----------|
37
+ |`owner`|`address`|This contract's owner.|
38
+
39
+
40
+ ### supportsInterface
41
+
42
+ Indicates whether this contract adheres to the specified interface.
43
+
44
+ *See [IERC165-supportsInterface](/src/JBDeadline.sol/contract.JBDeadline.md#supportsinterface).*
45
+
46
+
47
+ ```solidity
48
+ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool);
49
+ ```
50
+ **Parameters**
51
+
52
+ |Name|Type|Description|
53
+ |----|----|-----------|
54
+ |`interfaceId`|`bytes4`|The ID of the interface to check for adherence to.|
55
+
56
+ **Returns**
57
+
58
+ |Name|Type|Description|
59
+ |----|----|-----------|
60
+ |`<none>`|`bool`|A flag indicating if the provided interface ID is supported.|
61
+
62
+
63
+ ### setFeelessAddress
64
+
65
+ Sets whether an address is feeless.
66
+
67
+ *Can only be called by this contract's owner.*
68
+
69
+
70
+ ```solidity
71
+ function setFeelessAddress(address addr, bool flag) external virtual override onlyOwner;
72
+ ```
73
+ **Parameters**
74
+
75
+ |Name|Type|Description|
76
+ |----|----|-----------|
77
+ |`addr`|`address`|The address to set as feeless or not feeless.|
78
+ |`flag`|`bool`|Whether the address should be feeless (`true`) or not feeless (`false`).|
79
+
80
+