@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,591 @@
1
+ # JBTerminalStore
2
+ [Git Source](https://github.com/Bananapus/nana-core/blob/2998dca2fbd2658e2c8791d6dc8348147d69e28e/src/JBTerminalStore.sol)
3
+
4
+ **Inherits:**
5
+ [IJBTerminalStore](/src/interfaces/IJBTerminalStore.sol/interface.IJBTerminalStore.md)
6
+
7
+ Manages all bookkeeping for inflows and outflows of funds from any terminal address.
8
+
9
+ *This contract expects a project's controller to be an `IJBController`.*
10
+
11
+
12
+ ## State Variables
13
+ ### _MAX_FIXED_POINT_FIDELITY
14
+ Constrains `mulDiv` operations on fixed point numbers to a maximum number of decimal points of persisted
15
+ fidelity.
16
+
17
+
18
+ ```solidity
19
+ uint256 internal constant _MAX_FIXED_POINT_FIDELITY = 18;
20
+ ```
21
+
22
+
23
+ ### DIRECTORY
24
+ The directory of terminals and controllers for projects.
25
+
26
+
27
+ ```solidity
28
+ IJBDirectory public immutable override DIRECTORY;
29
+ ```
30
+
31
+
32
+ ### PRICES
33
+ The contract that exposes price feeds.
34
+
35
+
36
+ ```solidity
37
+ IJBPrices public immutable override PRICES;
38
+ ```
39
+
40
+
41
+ ### RULESETS
42
+ The contract storing and managing project rulesets.
43
+
44
+
45
+ ```solidity
46
+ IJBRulesets public immutable override RULESETS;
47
+ ```
48
+
49
+
50
+ ### balanceOf
51
+ A project's balance of a specific token within a terminal.
52
+
53
+ *The balance is represented as a fixed point number with the same amount of decimals as its relative
54
+ terminal.*
55
+
56
+
57
+ ```solidity
58
+ mapping(address terminal => mapping(uint256 projectId => mapping(address token => uint256))) public override balanceOf;
59
+ ```
60
+
61
+
62
+ ### usedPayoutLimitOf
63
+ The currency-denominated amount of funds that a project has already paid out from its payout limit
64
+ during the current ruleset for each terminal, in terms of the payout limit's currency.
65
+
66
+ *Increases as projects pay out funds.*
67
+
68
+ *The used payout limit is represented as a fixed point number with the same amount of decimals as the
69
+ terminal it applies to.*
70
+
71
+
72
+ ```solidity
73
+ mapping(
74
+ address terminal
75
+ => mapping(
76
+ uint256 projectId
77
+ => mapping(address token => mapping(uint256 rulesetCycleNumber => mapping(uint256 currency => uint256)))
78
+ )
79
+ ) public override usedPayoutLimitOf;
80
+ ```
81
+
82
+
83
+ ### usedSurplusAllowanceOf
84
+ The currency-denominated amounts of funds that a project has used from its surplus allowance during the
85
+ current ruleset for each terminal, in terms of the surplus allowance's currency.
86
+
87
+ *Increases as projects use their allowance.*
88
+
89
+ *The used surplus allowance is represented as a fixed point number with the same amount of decimals as the
90
+ terminal it applies to.*
91
+
92
+
93
+ ```solidity
94
+ mapping(
95
+ address terminal
96
+ => mapping(
97
+ uint256 projectId
98
+ => mapping(address token => mapping(uint256 rulesetId => mapping(uint256 currency => uint256)))
99
+ )
100
+ ) public override usedSurplusAllowanceOf;
101
+ ```
102
+
103
+
104
+ ## Functions
105
+ ### constructor
106
+
107
+
108
+ ```solidity
109
+ constructor(IJBDirectory directory, IJBPrices prices, IJBRulesets rulesets);
110
+ ```
111
+ **Parameters**
112
+
113
+ |Name|Type|Description|
114
+ |----|----|-----------|
115
+ |`directory`|`IJBDirectory`|A contract storing directories of terminals and controllers for each project.|
116
+ |`prices`|`IJBPrices`|A contract that exposes price feeds.|
117
+ |`rulesets`|`IJBRulesets`|A contract storing and managing project rulesets.|
118
+
119
+
120
+ ### currentReclaimableSurplusOf
121
+
122
+ Returns the number of surplus terminal tokens that would be reclaimed by cashing out a given project's
123
+ tokens based on its current ruleset and the given total project token supply and total terminal token surplus.
124
+
125
+
126
+ ```solidity
127
+ function currentReclaimableSurplusOf(
128
+ uint256 projectId,
129
+ uint256 cashOutCount,
130
+ uint256 totalSupply,
131
+ uint256 surplus
132
+ )
133
+ external
134
+ view
135
+ override
136
+ returns (uint256);
137
+ ```
138
+ **Parameters**
139
+
140
+ |Name|Type|Description|
141
+ |----|----|-----------|
142
+ |`projectId`|`uint256`|The ID of the project whose project tokens would be cashed out.|
143
+ |`cashOutCount`|`uint256`|The number of project tokens that would be cashed out, as a fixed point number with 18 decimals.|
144
+ |`totalSupply`|`uint256`|The total project token supply, as a fixed point number with 18 decimals.|
145
+ |`surplus`|`uint256`|The total terminal token surplus amount, as a fixed point number.|
146
+
147
+ **Returns**
148
+
149
+ |Name|Type|Description|
150
+ |----|----|-----------|
151
+ |`<none>`|`uint256`|The number of surplus terminal tokens that would be reclaimed, as a fixed point number with the same number of decimals as the provided `surplus`.|
152
+
153
+
154
+ ### currentReclaimableSurplusOf
155
+
156
+ Returns the number of surplus terminal tokens that would be reclaimed from a terminal by cashing out a
157
+ given number of tokens, based on the total token supply and total surplus.
158
+
159
+ *The returned amount in terms of the specified `terminal`'s base currency.*
160
+
161
+ *The returned amount is represented as a fixed point number with the same amount of decimals as the
162
+ specified terminal.*
163
+
164
+
165
+ ```solidity
166
+ function currentReclaimableSurplusOf(
167
+ uint256 projectId,
168
+ uint256 cashOutCount,
169
+ IJBTerminal[] calldata terminals,
170
+ JBAccountingContext[] calldata accountingContexts,
171
+ uint256 decimals,
172
+ uint256 currency
173
+ )
174
+ external
175
+ view
176
+ override
177
+ returns (uint256);
178
+ ```
179
+ **Parameters**
180
+
181
+ |Name|Type|Description|
182
+ |----|----|-----------|
183
+ |`projectId`|`uint256`|The ID of the project whose tokens would be cashed out.|
184
+ |`cashOutCount`|`uint256`|The number of tokens that would be cashed out, as a fixed point number with 18 decimals.|
185
+ |`terminals`|`IJBTerminal[]`|The terminals that would be cashed out from. If this is an empty array, surplus within all the project's terminals are considered.|
186
+ |`accountingContexts`|`JBAccountingContext[]`|The accounting contexts of the surplus terminal tokens that would be reclaimed. Pass an empty array to use all of the project's accounting contexts.|
187
+ |`decimals`|`uint256`|The number of decimals to include in the resulting fixed point number.|
188
+ |`currency`|`uint256`|The currency that the resulting number will be in terms of.|
189
+
190
+ **Returns**
191
+
192
+ |Name|Type|Description|
193
+ |----|----|-----------|
194
+ |`<none>`|`uint256`|The amount of surplus terminal tokens that would be reclaimed by cashing out `cashOutCount` tokens.|
195
+
196
+
197
+ ### currentSurplusOf
198
+
199
+ Gets the current surplus amount in a terminal for a specified project.
200
+
201
+ *The surplus is the amount of funds a project has in a terminal in excess of its payout limit.*
202
+
203
+ *The surplus is represented as a fixed point number with the same amount of decimals as the specified
204
+ terminal.*
205
+
206
+
207
+ ```solidity
208
+ function currentSurplusOf(
209
+ address terminal,
210
+ uint256 projectId,
211
+ JBAccountingContext[] calldata accountingContexts,
212
+ uint256 decimals,
213
+ uint256 currency
214
+ )
215
+ external
216
+ view
217
+ override
218
+ returns (uint256);
219
+ ```
220
+ **Parameters**
221
+
222
+ |Name|Type|Description|
223
+ |----|----|-----------|
224
+ |`terminal`|`address`|The terminal the surplus is being calculated for.|
225
+ |`projectId`|`uint256`|The ID of the project to get surplus for.|
226
+ |`accountingContexts`|`JBAccountingContext[]`|The accounting contexts of tokens whose balances should contribute to the surplus being calculated.|
227
+ |`decimals`|`uint256`|The number of decimals to expect in the resulting fixed point number.|
228
+ |`currency`|`uint256`|The currency the resulting amount should be in terms of.|
229
+
230
+ **Returns**
231
+
232
+ |Name|Type|Description|
233
+ |----|----|-----------|
234
+ |`<none>`|`uint256`|The current surplus amount the project has in the specified terminal.|
235
+
236
+
237
+ ### currentTotalSurplusOf
238
+
239
+ Gets the current surplus amount for a specified project across all terminals.
240
+
241
+
242
+ ```solidity
243
+ function currentTotalSurplusOf(
244
+ uint256 projectId,
245
+ uint256 decimals,
246
+ uint256 currency
247
+ )
248
+ external
249
+ view
250
+ override
251
+ returns (uint256);
252
+ ```
253
+ **Parameters**
254
+
255
+ |Name|Type|Description|
256
+ |----|----|-----------|
257
+ |`projectId`|`uint256`|The ID of the project to get the total surplus for.|
258
+ |`decimals`|`uint256`|The number of decimals that the fixed point surplus should include.|
259
+ |`currency`|`uint256`|The currency that the total surplus should be in terms of.|
260
+
261
+ **Returns**
262
+
263
+ |Name|Type|Description|
264
+ |----|----|-----------|
265
+ |`<none>`|`uint256`|The current total surplus amount that the project has across all terminals.|
266
+
267
+
268
+ ### _surplusFrom
269
+
270
+ Gets a project's surplus amount in a terminal as measured by a given ruleset, across multiple accounting
271
+ contexts.
272
+
273
+ *This amount changes as the value of the balance changes in relation to the currency being used to measure
274
+ various payout limits.*
275
+
276
+
277
+ ```solidity
278
+ function _surplusFrom(
279
+ address terminal,
280
+ uint256 projectId,
281
+ JBAccountingContext[] memory accountingContexts,
282
+ JBRuleset memory ruleset,
283
+ uint256 targetDecimals,
284
+ uint256 targetCurrency
285
+ )
286
+ internal
287
+ view
288
+ returns (uint256 surplus);
289
+ ```
290
+ **Parameters**
291
+
292
+ |Name|Type|Description|
293
+ |----|----|-----------|
294
+ |`terminal`|`address`|The terminal the surplus is being calculated for.|
295
+ |`projectId`|`uint256`|The ID of the project to get the surplus for.|
296
+ |`accountingContexts`|`JBAccountingContext[]`|The accounting contexts of tokens whose balances should contribute to the surplus being calculated.|
297
+ |`ruleset`|`JBRuleset`|The ID of the ruleset to base the surplus on.|
298
+ |`targetDecimals`|`uint256`|The number of decimals to include in the resulting fixed point number.|
299
+ |`targetCurrency`|`uint256`|The currency that the reported surplus is expected to be in terms of.|
300
+
301
+ **Returns**
302
+
303
+ |Name|Type|Description|
304
+ |----|----|-----------|
305
+ |`surplus`|`uint256`|The surplus of funds in terms of `targetCurrency`, as a fixed point number with `targetDecimals` decimals.|
306
+
307
+
308
+ ### _tokenSurplusFrom
309
+
310
+ Get a project's surplus amount of a specific token in a given terminal as measured by a given ruleset
311
+ (one specific accounting context).
312
+
313
+ *This amount changes as the value of the balance changes in relation to the currency being used to measure
314
+ the payout limits.*
315
+
316
+
317
+ ```solidity
318
+ function _tokenSurplusFrom(
319
+ address terminal,
320
+ uint256 projectId,
321
+ JBAccountingContext memory accountingContext,
322
+ JBRuleset memory ruleset,
323
+ uint256 targetDecimals,
324
+ uint256 targetCurrency
325
+ )
326
+ internal
327
+ view
328
+ returns (uint256 surplus);
329
+ ```
330
+ **Parameters**
331
+
332
+ |Name|Type|Description|
333
+ |----|----|-----------|
334
+ |`terminal`|`address`|The terminal the surplus is being calculated for.|
335
+ |`projectId`|`uint256`|The ID of the project to get the surplus of.|
336
+ |`accountingContext`|`JBAccountingContext`|The accounting context of the token whose balance should contribute to the surplus being measured.|
337
+ |`ruleset`|`JBRuleset`|The ID of the ruleset to base the surplus calculation on.|
338
+ |`targetDecimals`|`uint256`|The number of decimals to include in the resulting fixed point number.|
339
+ |`targetCurrency`|`uint256`|The currency that the reported surplus is expected to be in terms of.|
340
+
341
+ **Returns**
342
+
343
+ |Name|Type|Description|
344
+ |----|----|-----------|
345
+ |`surplus`|`uint256`|The surplus of funds in terms of `targetCurrency`, as a fixed point number with `targetDecimals` decimals.|
346
+
347
+
348
+ ### recordAddedBalanceFor
349
+
350
+ Records funds being added to a project's balance.
351
+
352
+
353
+ ```solidity
354
+ function recordAddedBalanceFor(uint256 projectId, address token, uint256 amount) external override;
355
+ ```
356
+ **Parameters**
357
+
358
+ |Name|Type|Description|
359
+ |----|----|-----------|
360
+ |`projectId`|`uint256`|The ID of the project which funds are being added to the balance of.|
361
+ |`token`|`address`|The token being added to the balance.|
362
+ |`amount`|`uint256`|The amount of terminal tokens added, as a fixed point number with the same amount of decimals as its relative terminal.|
363
+
364
+
365
+ ### recordCashOutFor
366
+
367
+ Records a cash out from a project.
368
+
369
+ *Cashs out the project's tokens according to values provided by the ruleset's data hook. If the ruleset has
370
+ no
371
+ data hook, cashs out tokens along a cash out bonding curve that is a function of the number of tokens being
372
+ burned.*
373
+
374
+
375
+ ```solidity
376
+ function recordCashOutFor(
377
+ address holder,
378
+ uint256 projectId,
379
+ uint256 cashOutCount,
380
+ JBAccountingContext calldata accountingContext,
381
+ JBAccountingContext[] calldata balanceAccountingContexts,
382
+ bytes memory metadata
383
+ )
384
+ external
385
+ override
386
+ returns (
387
+ JBRuleset memory ruleset,
388
+ uint256 reclaimAmount,
389
+ uint256 cashOutTaxRate,
390
+ JBCashOutHookSpecification[] memory hookSpecifications
391
+ );
392
+ ```
393
+ **Parameters**
394
+
395
+ |Name|Type|Description|
396
+ |----|----|-----------|
397
+ |`holder`|`address`|The account that is cashing out tokens.|
398
+ |`projectId`|`uint256`|The ID of the project being cashing out from.|
399
+ |`cashOutCount`|`uint256`|The number of project tokens to cash out, as a fixed point number with 18 decimals.|
400
+ |`accountingContext`|`JBAccountingContext`|The accounting context of the token being reclaimed by the cash out.|
401
+ |`balanceAccountingContexts`|`JBAccountingContext[]`|The accounting contexts of the tokens whose balances should contribute to the surplus being reclaimed from.|
402
+ |`metadata`|`bytes`|Bytes to send to the data hook, if the project's current ruleset specifies one.|
403
+
404
+ **Returns**
405
+
406
+ |Name|Type|Description|
407
+ |----|----|-----------|
408
+ |`ruleset`|`JBRuleset`|The ruleset during the cash out was made during, as a `JBRuleset` struct. This ruleset will have a cash out tax rate provided by the cash out hook if applicable.|
409
+ |`reclaimAmount`|`uint256`|The amount of tokens reclaimed from the terminal, as a fixed point number with 18 decimals.|
410
+ |`cashOutTaxRate`|`uint256`|The cash out tax rate influencing the reclaim amount.|
411
+ |`hookSpecifications`|`JBCashOutHookSpecification[]`|A list of cash out hooks, including data and amounts to send to them. The terminal should fulfill these specifications.|
412
+
413
+
414
+ ### recordPaymentFrom
415
+
416
+ Records a payment to a project.
417
+
418
+ *Mints the project's tokens according to values provided by the ruleset's data hook. If the ruleset has no
419
+ data hook, mints tokens in proportion with the amount paid.*
420
+
421
+
422
+ ```solidity
423
+ function recordPaymentFrom(
424
+ address payer,
425
+ JBTokenAmount calldata amount,
426
+ uint256 projectId,
427
+ address beneficiary,
428
+ bytes calldata metadata
429
+ )
430
+ external
431
+ override
432
+ returns (JBRuleset memory ruleset, uint256 tokenCount, JBPayHookSpecification[] memory hookSpecifications);
433
+ ```
434
+ **Parameters**
435
+
436
+ |Name|Type|Description|
437
+ |----|----|-----------|
438
+ |`payer`|`address`|The address that made the payment to the terminal.|
439
+ |`amount`|`JBTokenAmount`|The amount of tokens being paid. Includes the token being paid, their value, the number of decimals included, and the currency of the amount.|
440
+ |`projectId`|`uint256`|The ID of the project being paid.|
441
+ |`beneficiary`|`address`|The address that should be the beneficiary of anything the payment yields (including project tokens minted by the payment).|
442
+ |`metadata`|`bytes`|Bytes to send to the data hook, if the project's current ruleset specifies one.|
443
+
444
+ **Returns**
445
+
446
+ |Name|Type|Description|
447
+ |----|----|-----------|
448
+ |`ruleset`|`JBRuleset`|The ruleset the payment was made during, as a `JBRuleset` struct.|
449
+ |`tokenCount`|`uint256`|The number of project tokens that were minted, as a fixed point number with 18 decimals.|
450
+ |`hookSpecifications`|`JBPayHookSpecification[]`|A list of pay hooks, including data and amounts to send to them. The terminal should fulfill these specifications.|
451
+
452
+
453
+ ### recordPayoutFor
454
+
455
+ Records a payout from a project.
456
+
457
+
458
+ ```solidity
459
+ function recordPayoutFor(
460
+ uint256 projectId,
461
+ JBAccountingContext calldata accountingContext,
462
+ uint256 amount,
463
+ uint256 currency
464
+ )
465
+ external
466
+ override
467
+ returns (JBRuleset memory ruleset, uint256 amountPaidOut);
468
+ ```
469
+ **Parameters**
470
+
471
+ |Name|Type|Description|
472
+ |----|----|-----------|
473
+ |`projectId`|`uint256`|The ID of the project that is paying out funds.|
474
+ |`accountingContext`|`JBAccountingContext`|The context of the token being paid out.|
475
+ |`amount`|`uint256`|The amount to pay out (use from the payout limit), as a fixed point number.|
476
+ |`currency`|`uint256`|The currency of the `amount`. This must match the project's current ruleset's currency.|
477
+
478
+ **Returns**
479
+
480
+ |Name|Type|Description|
481
+ |----|----|-----------|
482
+ |`ruleset`|`JBRuleset`|The ruleset the payout was made during, as a `JBRuleset` struct.|
483
+ |`amountPaidOut`|`uint256`|The amount of terminal tokens paid out, as a fixed point number with the same amount of decimals as its relative terminal.|
484
+
485
+
486
+ ### recordTerminalMigration
487
+
488
+ Records the migration of funds from this store.
489
+
490
+
491
+ ```solidity
492
+ function recordTerminalMigration(uint256 projectId, address token) external override returns (uint256 balance);
493
+ ```
494
+ **Parameters**
495
+
496
+ |Name|Type|Description|
497
+ |----|----|-----------|
498
+ |`projectId`|`uint256`|The ID of the project being migrated.|
499
+ |`token`|`address`|The token being migrated.|
500
+
501
+ **Returns**
502
+
503
+ |Name|Type|Description|
504
+ |----|----|-----------|
505
+ |`balance`|`uint256`|The project's current balance (which is being migrated), as a fixed point number with the same amount of decimals as its relative terminal.|
506
+
507
+
508
+ ### recordUsedAllowanceOf
509
+
510
+ Records a use of a project's surplus allowance.
511
+
512
+ *When surplus allowance is "used", it is taken out of the project's surplus within a terminal.*
513
+
514
+
515
+ ```solidity
516
+ function recordUsedAllowanceOf(
517
+ uint256 projectId,
518
+ JBAccountingContext calldata accountingContext,
519
+ uint256 amount,
520
+ uint256 currency
521
+ )
522
+ external
523
+ override
524
+ returns (JBRuleset memory ruleset, uint256 usedAmount);
525
+ ```
526
+ **Parameters**
527
+
528
+ |Name|Type|Description|
529
+ |----|----|-----------|
530
+ |`projectId`|`uint256`|The ID of the project to use the surplus allowance of.|
531
+ |`accountingContext`|`JBAccountingContext`|The accounting context of the token whose balances should contribute to the surplus allowance being reclaimed from.|
532
+ |`amount`|`uint256`|The amount to use from the surplus allowance, as a fixed point number.|
533
+ |`currency`|`uint256`|The currency of the `amount`. Must match the currency of the surplus allowance.|
534
+
535
+ **Returns**
536
+
537
+ |Name|Type|Description|
538
+ |----|----|-----------|
539
+ |`ruleset`|`JBRuleset`|The ruleset during the surplus allowance is being used during, as a `JBRuleset` struct.|
540
+ |`usedAmount`|`uint256`|The amount of terminal tokens used, as a fixed point number with the same amount of decimals as its relative terminal.|
541
+
542
+
543
+ ## Errors
544
+ ### JBTerminalStore_InadequateControllerAllowance
545
+
546
+ ```solidity
547
+ error JBTerminalStore_InadequateControllerAllowance(uint256 amount, uint256 allowance);
548
+ ```
549
+
550
+ ### JBTerminalStore_InadequateControllerPayoutLimit
551
+
552
+ ```solidity
553
+ error JBTerminalStore_InadequateControllerPayoutLimit(uint256 amount, uint256 limit);
554
+ ```
555
+
556
+ ### JBTerminalStore_InadequateTerminalStoreBalance
557
+
558
+ ```solidity
559
+ error JBTerminalStore_InadequateTerminalStoreBalance(uint256 amount, uint256 balance);
560
+ ```
561
+
562
+ ### JBTerminalStore_InsufficientTokens
563
+
564
+ ```solidity
565
+ error JBTerminalStore_InsufficientTokens(uint256 count, uint256 totalSupply);
566
+ ```
567
+
568
+ ### JBTerminalStore_InvalidAmountToForwardHook
569
+
570
+ ```solidity
571
+ error JBTerminalStore_InvalidAmountToForwardHook(uint256 amount, uint256 paidAmount);
572
+ ```
573
+
574
+ ### JBTerminalStore_RulesetNotFound
575
+
576
+ ```solidity
577
+ error JBTerminalStore_RulesetNotFound();
578
+ ```
579
+
580
+ ### JBTerminalStore_RulesetPaymentPaused
581
+
582
+ ```solidity
583
+ error JBTerminalStore_RulesetPaymentPaused();
584
+ ```
585
+
586
+ ### JBTerminalStore_TerminalMigrationNotAllowed
587
+
588
+ ```solidity
589
+ error JBTerminalStore_TerminalMigrationNotAllowed();
590
+ ```
591
+