@bananapus/nana-sdk-core 1.0.0 → 1.1.0

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 (243) hide show
  1. package/dist/cjs/v6/cashOut.d.ts +83 -0
  2. package/dist/cjs/v6/cashOut.d.ts.map +1 -0
  3. package/dist/cjs/v6/cashOut.js +68 -0
  4. package/dist/cjs/v6/cashOut.js.map +1 -0
  5. package/dist/cjs/v6/cashOut.test.d.ts +2 -0
  6. package/dist/cjs/v6/cashOut.test.d.ts.map +1 -0
  7. package/dist/cjs/v6/cashOut.test.js +100 -0
  8. package/dist/cjs/v6/cashOut.test.js.map +1 -0
  9. package/dist/cjs/v6/currency.d.ts +43 -0
  10. package/dist/cjs/v6/currency.d.ts.map +1 -0
  11. package/dist/cjs/v6/currency.js +44 -0
  12. package/dist/cjs/v6/currency.js.map +1 -0
  13. package/dist/cjs/v6/currency.test.d.ts +2 -0
  14. package/dist/cjs/v6/currency.test.d.ts.map +1 -0
  15. package/dist/cjs/v6/currency.test.js +24 -0
  16. package/dist/cjs/v6/currency.test.js.map +1 -0
  17. package/dist/cjs/v6/fees.d.ts +43 -0
  18. package/dist/cjs/v6/fees.d.ts.map +1 -0
  19. package/dist/cjs/v6/fees.js +51 -0
  20. package/dist/cjs/v6/fees.js.map +1 -0
  21. package/dist/cjs/v6/fees.test.d.ts +2 -0
  22. package/dist/cjs/v6/fees.test.d.ts.map +1 -0
  23. package/dist/cjs/v6/fees.test.js +38 -0
  24. package/dist/cjs/v6/fees.test.js.map +1 -0
  25. package/dist/cjs/v6/index.d.ts +16 -0
  26. package/dist/cjs/v6/index.d.ts.map +1 -0
  27. package/dist/cjs/v6/index.js +16 -0
  28. package/dist/cjs/v6/index.js.map +1 -0
  29. package/dist/cjs/v6/launch.d.ts +2754 -0
  30. package/dist/cjs/v6/launch.d.ts.map +1 -0
  31. package/dist/cjs/v6/launch.js +176 -0
  32. package/dist/cjs/v6/launch.js.map +1 -0
  33. package/dist/cjs/v6/launch.test.d.ts +2 -0
  34. package/dist/cjs/v6/launch.test.d.ts.map +1 -0
  35. package/dist/cjs/v6/launch.test.js +135 -0
  36. package/dist/cjs/v6/launch.test.js.map +1 -0
  37. package/dist/cjs/v6/loans.d.ts +176 -0
  38. package/dist/cjs/v6/loans.d.ts.map +1 -0
  39. package/dist/cjs/v6/loans.js +170 -0
  40. package/dist/cjs/v6/loans.js.map +1 -0
  41. package/dist/cjs/v6/loans.test.d.ts +2 -0
  42. package/dist/cjs/v6/loans.test.d.ts.map +1 -0
  43. package/dist/cjs/v6/loans.test.js +127 -0
  44. package/dist/cjs/v6/loans.test.js.map +1 -0
  45. package/dist/cjs/v6/omnichain.d.ts +10997 -0
  46. package/dist/cjs/v6/omnichain.d.ts.map +1 -0
  47. package/dist/cjs/v6/omnichain.js +116 -0
  48. package/dist/cjs/v6/omnichain.js.map +1 -0
  49. package/dist/cjs/v6/omnichain.test.d.ts +2 -0
  50. package/dist/cjs/v6/omnichain.test.d.ts.map +1 -0
  51. package/dist/cjs/v6/omnichain.test.js +143 -0
  52. package/dist/cjs/v6/omnichain.test.js.map +1 -0
  53. package/dist/cjs/v6/pay.d.ts +110 -0
  54. package/dist/cjs/v6/pay.d.ts.map +1 -0
  55. package/dist/cjs/v6/pay.js +106 -0
  56. package/dist/cjs/v6/pay.js.map +1 -0
  57. package/dist/cjs/v6/pay.test.d.ts +2 -0
  58. package/dist/cjs/v6/pay.test.d.ts.map +1 -0
  59. package/dist/cjs/v6/pay.test.js +128 -0
  60. package/dist/cjs/v6/pay.test.js.map +1 -0
  61. package/dist/cjs/v6/permissions.d.ts +128 -0
  62. package/dist/cjs/v6/permissions.d.ts.map +1 -0
  63. package/dist/cjs/v6/permissions.js +120 -0
  64. package/dist/cjs/v6/permissions.js.map +1 -0
  65. package/dist/cjs/v6/permissions.test.d.ts +2 -0
  66. package/dist/cjs/v6/permissions.test.d.ts.map +1 -0
  67. package/dist/cjs/v6/permissions.test.js +115 -0
  68. package/dist/cjs/v6/permissions.test.js.map +1 -0
  69. package/dist/cjs/v6/revnets.d.ts +4457 -0
  70. package/dist/cjs/v6/revnets.d.ts.map +1 -0
  71. package/dist/cjs/v6/revnets.js +161 -0
  72. package/dist/cjs/v6/revnets.js.map +1 -0
  73. package/dist/cjs/v6/revnets.test.d.ts +2 -0
  74. package/dist/cjs/v6/revnets.test.d.ts.map +1 -0
  75. package/dist/cjs/v6/revnets.test.js +231 -0
  76. package/dist/cjs/v6/revnets.test.js.map +1 -0
  77. package/dist/cjs/v6/rulesets.d.ts +2700 -0
  78. package/dist/cjs/v6/rulesets.d.ts.map +1 -0
  79. package/dist/cjs/v6/rulesets.js +70 -0
  80. package/dist/cjs/v6/rulesets.js.map +1 -0
  81. package/dist/cjs/v6/rulesets.test.d.ts +2 -0
  82. package/dist/cjs/v6/rulesets.test.d.ts.map +1 -0
  83. package/dist/cjs/v6/rulesets.test.js +104 -0
  84. package/dist/cjs/v6/rulesets.test.js.map +1 -0
  85. package/dist/cjs/v6/splits.d.ts +2670 -0
  86. package/dist/cjs/v6/splits.d.ts.map +1 -0
  87. package/dist/cjs/v6/splits.js +105 -0
  88. package/dist/cjs/v6/splits.js.map +1 -0
  89. package/dist/cjs/v6/splits.test.d.ts +2 -0
  90. package/dist/cjs/v6/splits.test.d.ts.map +1 -0
  91. package/dist/cjs/v6/splits.test.js +131 -0
  92. package/dist/cjs/v6/splits.test.js.map +1 -0
  93. package/dist/cjs/v6/suckers.d.ts +247 -0
  94. package/dist/cjs/v6/suckers.d.ts.map +1 -0
  95. package/dist/cjs/v6/suckers.js +156 -0
  96. package/dist/cjs/v6/suckers.js.map +1 -0
  97. package/dist/cjs/v6/suckers.test.d.ts +2 -0
  98. package/dist/cjs/v6/suckers.test.d.ts.map +1 -0
  99. package/dist/cjs/v6/suckers.test.js +132 -0
  100. package/dist/cjs/v6/suckers.test.js.map +1 -0
  101. package/dist/cjs/v6/terminals.d.ts +67 -0
  102. package/dist/cjs/v6/terminals.d.ts.map +1 -0
  103. package/dist/cjs/v6/terminals.js +50 -0
  104. package/dist/cjs/v6/terminals.js.map +1 -0
  105. package/dist/cjs/v6/terminals.test.d.ts +2 -0
  106. package/dist/cjs/v6/terminals.test.d.ts.map +1 -0
  107. package/dist/cjs/v6/terminals.test.js +57 -0
  108. package/dist/cjs/v6/terminals.test.js.map +1 -0
  109. package/dist/cjs/v6/tokens.d.ts +194 -0
  110. package/dist/cjs/v6/tokens.d.ts.map +1 -0
  111. package/dist/cjs/v6/tokens.js +161 -0
  112. package/dist/cjs/v6/tokens.js.map +1 -0
  113. package/dist/cjs/v6/tokens.test.d.ts +2 -0
  114. package/dist/cjs/v6/tokens.test.d.ts.map +1 -0
  115. package/dist/cjs/v6/tokens.test.js +139 -0
  116. package/dist/cjs/v6/tokens.test.js.map +1 -0
  117. package/dist/cjs/v6/types.d.ts +12 -0
  118. package/dist/cjs/v6/types.d.ts.map +1 -0
  119. package/dist/cjs/v6/types.js +12 -0
  120. package/dist/cjs/v6/types.js.map +1 -0
  121. package/dist/esm/v6/cashOut.d.ts +83 -0
  122. package/dist/esm/v6/cashOut.d.ts.map +1 -0
  123. package/dist/esm/v6/cashOut.js +68 -0
  124. package/dist/esm/v6/cashOut.js.map +1 -0
  125. package/dist/esm/v6/cashOut.test.d.ts +2 -0
  126. package/dist/esm/v6/cashOut.test.d.ts.map +1 -0
  127. package/dist/esm/v6/cashOut.test.js +100 -0
  128. package/dist/esm/v6/cashOut.test.js.map +1 -0
  129. package/dist/esm/v6/currency.d.ts +43 -0
  130. package/dist/esm/v6/currency.d.ts.map +1 -0
  131. package/dist/esm/v6/currency.js +44 -0
  132. package/dist/esm/v6/currency.js.map +1 -0
  133. package/dist/esm/v6/currency.test.d.ts +2 -0
  134. package/dist/esm/v6/currency.test.d.ts.map +1 -0
  135. package/dist/esm/v6/currency.test.js +24 -0
  136. package/dist/esm/v6/currency.test.js.map +1 -0
  137. package/dist/esm/v6/fees.d.ts +43 -0
  138. package/dist/esm/v6/fees.d.ts.map +1 -0
  139. package/dist/esm/v6/fees.js +51 -0
  140. package/dist/esm/v6/fees.js.map +1 -0
  141. package/dist/esm/v6/fees.test.d.ts +2 -0
  142. package/dist/esm/v6/fees.test.d.ts.map +1 -0
  143. package/dist/esm/v6/fees.test.js +38 -0
  144. package/dist/esm/v6/fees.test.js.map +1 -0
  145. package/dist/esm/v6/index.d.ts +16 -0
  146. package/dist/esm/v6/index.d.ts.map +1 -0
  147. package/dist/esm/v6/index.js +16 -0
  148. package/dist/esm/v6/index.js.map +1 -0
  149. package/dist/esm/v6/launch.d.ts +2754 -0
  150. package/dist/esm/v6/launch.d.ts.map +1 -0
  151. package/dist/esm/v6/launch.js +176 -0
  152. package/dist/esm/v6/launch.js.map +1 -0
  153. package/dist/esm/v6/launch.test.d.ts +2 -0
  154. package/dist/esm/v6/launch.test.d.ts.map +1 -0
  155. package/dist/esm/v6/launch.test.js +135 -0
  156. package/dist/esm/v6/launch.test.js.map +1 -0
  157. package/dist/esm/v6/loans.d.ts +176 -0
  158. package/dist/esm/v6/loans.d.ts.map +1 -0
  159. package/dist/esm/v6/loans.js +170 -0
  160. package/dist/esm/v6/loans.js.map +1 -0
  161. package/dist/esm/v6/loans.test.d.ts +2 -0
  162. package/dist/esm/v6/loans.test.d.ts.map +1 -0
  163. package/dist/esm/v6/loans.test.js +127 -0
  164. package/dist/esm/v6/loans.test.js.map +1 -0
  165. package/dist/esm/v6/omnichain.d.ts +10997 -0
  166. package/dist/esm/v6/omnichain.d.ts.map +1 -0
  167. package/dist/esm/v6/omnichain.js +116 -0
  168. package/dist/esm/v6/omnichain.js.map +1 -0
  169. package/dist/esm/v6/omnichain.test.d.ts +2 -0
  170. package/dist/esm/v6/omnichain.test.d.ts.map +1 -0
  171. package/dist/esm/v6/omnichain.test.js +143 -0
  172. package/dist/esm/v6/omnichain.test.js.map +1 -0
  173. package/dist/esm/v6/pay.d.ts +110 -0
  174. package/dist/esm/v6/pay.d.ts.map +1 -0
  175. package/dist/esm/v6/pay.js +106 -0
  176. package/dist/esm/v6/pay.js.map +1 -0
  177. package/dist/esm/v6/pay.test.d.ts +2 -0
  178. package/dist/esm/v6/pay.test.d.ts.map +1 -0
  179. package/dist/esm/v6/pay.test.js +128 -0
  180. package/dist/esm/v6/pay.test.js.map +1 -0
  181. package/dist/esm/v6/permissions.d.ts +128 -0
  182. package/dist/esm/v6/permissions.d.ts.map +1 -0
  183. package/dist/esm/v6/permissions.js +120 -0
  184. package/dist/esm/v6/permissions.js.map +1 -0
  185. package/dist/esm/v6/permissions.test.d.ts +2 -0
  186. package/dist/esm/v6/permissions.test.d.ts.map +1 -0
  187. package/dist/esm/v6/permissions.test.js +115 -0
  188. package/dist/esm/v6/permissions.test.js.map +1 -0
  189. package/dist/esm/v6/revnets.d.ts +4457 -0
  190. package/dist/esm/v6/revnets.d.ts.map +1 -0
  191. package/dist/esm/v6/revnets.js +161 -0
  192. package/dist/esm/v6/revnets.js.map +1 -0
  193. package/dist/esm/v6/revnets.test.d.ts +2 -0
  194. package/dist/esm/v6/revnets.test.d.ts.map +1 -0
  195. package/dist/esm/v6/revnets.test.js +231 -0
  196. package/dist/esm/v6/revnets.test.js.map +1 -0
  197. package/dist/esm/v6/rulesets.d.ts +2700 -0
  198. package/dist/esm/v6/rulesets.d.ts.map +1 -0
  199. package/dist/esm/v6/rulesets.js +70 -0
  200. package/dist/esm/v6/rulesets.js.map +1 -0
  201. package/dist/esm/v6/rulesets.test.d.ts +2 -0
  202. package/dist/esm/v6/rulesets.test.d.ts.map +1 -0
  203. package/dist/esm/v6/rulesets.test.js +104 -0
  204. package/dist/esm/v6/rulesets.test.js.map +1 -0
  205. package/dist/esm/v6/splits.d.ts +2670 -0
  206. package/dist/esm/v6/splits.d.ts.map +1 -0
  207. package/dist/esm/v6/splits.js +105 -0
  208. package/dist/esm/v6/splits.js.map +1 -0
  209. package/dist/esm/v6/splits.test.d.ts +2 -0
  210. package/dist/esm/v6/splits.test.d.ts.map +1 -0
  211. package/dist/esm/v6/splits.test.js +131 -0
  212. package/dist/esm/v6/splits.test.js.map +1 -0
  213. package/dist/esm/v6/suckers.d.ts +247 -0
  214. package/dist/esm/v6/suckers.d.ts.map +1 -0
  215. package/dist/esm/v6/suckers.js +156 -0
  216. package/dist/esm/v6/suckers.js.map +1 -0
  217. package/dist/esm/v6/suckers.test.d.ts +2 -0
  218. package/dist/esm/v6/suckers.test.d.ts.map +1 -0
  219. package/dist/esm/v6/suckers.test.js +132 -0
  220. package/dist/esm/v6/suckers.test.js.map +1 -0
  221. package/dist/esm/v6/terminals.d.ts +67 -0
  222. package/dist/esm/v6/terminals.d.ts.map +1 -0
  223. package/dist/esm/v6/terminals.js +50 -0
  224. package/dist/esm/v6/terminals.js.map +1 -0
  225. package/dist/esm/v6/terminals.test.d.ts +2 -0
  226. package/dist/esm/v6/terminals.test.d.ts.map +1 -0
  227. package/dist/esm/v6/terminals.test.js +57 -0
  228. package/dist/esm/v6/terminals.test.js.map +1 -0
  229. package/dist/esm/v6/tokens.d.ts +194 -0
  230. package/dist/esm/v6/tokens.d.ts.map +1 -0
  231. package/dist/esm/v6/tokens.js +161 -0
  232. package/dist/esm/v6/tokens.js.map +1 -0
  233. package/dist/esm/v6/tokens.test.d.ts +2 -0
  234. package/dist/esm/v6/tokens.test.d.ts.map +1 -0
  235. package/dist/esm/v6/tokens.test.js +139 -0
  236. package/dist/esm/v6/tokens.test.js.map +1 -0
  237. package/dist/esm/v6/types.d.ts +12 -0
  238. package/dist/esm/v6/types.d.ts.map +1 -0
  239. package/dist/esm/v6/types.js +12 -0
  240. package/dist/esm/v6/types.js.map +1 -0
  241. package/dist/tsconfig.cjs.tsbuildinfo +1 -1
  242. package/dist/tsconfig.tsbuildinfo +1 -1
  243. package/package.json +7 -1
@@ -0,0 +1,194 @@
1
+ import { Address, Hex, PublicClient } from "viem";
2
+ import { jbControllerAbi } from "../generated/juicebox.js";
3
+ import { JBChainId } from "../types.js";
4
+ /**
5
+ * A prepared `deployERC20For` transaction request.
6
+ */
7
+ export interface V6DeployErc20TxRequest {
8
+ chainId: JBChainId;
9
+ address: Address;
10
+ abi: typeof jbControllerAbi;
11
+ functionName: "deployERC20For";
12
+ args: readonly [bigint, string, string, Hex];
13
+ }
14
+ /**
15
+ * Build a `JBController.deployERC20For(projectId, name, symbol, salt)` transaction
16
+ * request, deploying a claimable ERC-20 for a project's tokens.
17
+ *
18
+ * Requires the project owner or the DEPLOY_ERC20 permission.
19
+ *
20
+ * @param args.chainId The chain to deploy on.
21
+ * @param args.projectId The project's id.
22
+ * @param args.name The ERC-20's name.
23
+ * @param args.symbol The ERC-20's symbol.
24
+ * @param args.salt A CREATE2 salt. Use the same non-zero salt (from the same deployer)
25
+ * across chains for a same-address omnichain ERC-20. Defaults to zero (non-deterministic
26
+ * address).
27
+ * @returns The transaction request.
28
+ */
29
+ export declare function buildDeployErc20Tx({ chainId, projectId, name, symbol, salt, }: {
30
+ chainId: JBChainId;
31
+ projectId: bigint;
32
+ name: string;
33
+ symbol: string;
34
+ salt?: Hex;
35
+ }): V6DeployErc20TxRequest;
36
+ /**
37
+ * A prepared `claimTokensFor` transaction request.
38
+ */
39
+ export interface V6ClaimTokensTxRequest {
40
+ chainId: JBChainId;
41
+ address: Address;
42
+ abi: typeof jbControllerAbi;
43
+ functionName: "claimTokensFor";
44
+ args: readonly [Address, bigint, bigint, Address];
45
+ }
46
+ /**
47
+ * Build a `JBController.claimTokensFor(holder, projectId, tokenCount, beneficiary)`
48
+ * transaction request, claiming a holder's internal token credits as ERC-20 tokens.
49
+ *
50
+ * The project must have an ERC-20 deployed (see {@link buildDeployErc20Tx}). Claiming
51
+ * for another holder requires the CLAIM_TOKENS permission.
52
+ *
53
+ * @param args.chainId The chain to claim on.
54
+ * @param args.holder The address whose credits are being claimed.
55
+ * @param args.projectId The project's id.
56
+ * @param args.tokenCount The number of credits to claim, as a fixed point number with
57
+ * 18 decimals.
58
+ * @param args.beneficiary The address that receives the ERC-20 tokens.
59
+ * @returns The transaction request.
60
+ */
61
+ export declare function buildClaimTokensTx({ chainId, holder, projectId, tokenCount, beneficiary, }: {
62
+ chainId: JBChainId;
63
+ holder: Address;
64
+ projectId: bigint;
65
+ tokenCount: bigint;
66
+ beneficiary: Address;
67
+ }): V6ClaimTokensTxRequest;
68
+ /**
69
+ * A prepared `transferCreditsFrom` transaction request.
70
+ */
71
+ export interface V6TransferCreditsTxRequest {
72
+ chainId: JBChainId;
73
+ address: Address;
74
+ abi: typeof jbControllerAbi;
75
+ functionName: "transferCreditsFrom";
76
+ args: readonly [Address, bigint, Address, bigint];
77
+ }
78
+ /**
79
+ * Build a `JBController.transferCreditsFrom(holder, projectId, recipient,
80
+ * creditCount)` transaction request, transferring internal token credits (unclaimed
81
+ * tokens) to another address.
82
+ *
83
+ * Transferring another holder's credits requires the TRANSFER_CREDITS permission.
84
+ *
85
+ * @param args.chainId The chain to transfer on.
86
+ * @param args.holder The address whose credits are being transferred.
87
+ * @param args.projectId The project's id.
88
+ * @param args.recipient The address that receives the credits.
89
+ * @param args.creditCount The number of credits to transfer, as a fixed point number
90
+ * with 18 decimals.
91
+ * @returns The transaction request.
92
+ */
93
+ export declare function buildTransferCreditsTx({ chainId, holder, projectId, recipient, creditCount, }: {
94
+ chainId: JBChainId;
95
+ holder: Address;
96
+ projectId: bigint;
97
+ recipient: Address;
98
+ creditCount: bigint;
99
+ }): V6TransferCreditsTxRequest;
100
+ /**
101
+ * A prepared `mintTokensOf` transaction request.
102
+ */
103
+ export interface V6MintTokensTxRequest {
104
+ chainId: JBChainId;
105
+ address: Address;
106
+ abi: typeof jbControllerAbi;
107
+ functionName: "mintTokensOf";
108
+ args: readonly [bigint, bigint, Address, string, boolean];
109
+ }
110
+ /**
111
+ * Build a `JBController.mintTokensOf(projectId, tokenCount, beneficiary, memo,
112
+ * useReservedPercent)` transaction request, minting new project tokens.
113
+ *
114
+ * Only works when the project's ruleset allows owner minting; requires the project
115
+ * owner or the MINT_TOKENS permission.
116
+ *
117
+ * @param args.chainId The chain to mint on.
118
+ * @param args.projectId The project's id.
119
+ * @param args.tokenCount The number of tokens to mint, as a fixed point number with 18
120
+ * decimals.
121
+ * @param args.beneficiary The address that receives the minted tokens.
122
+ * @param args.memo A memo included in the MintTokens event. Defaults to "".
123
+ * @param args.useReservedPercent Whether the ruleset's reserved percent should be
124
+ * withheld from the mint for the project's reserved splits. Defaults to true.
125
+ * @returns The transaction request.
126
+ */
127
+ export declare function buildMintTokensTx({ chainId, projectId, tokenCount, beneficiary, memo, useReservedPercent, }: {
128
+ chainId: JBChainId;
129
+ projectId: bigint;
130
+ tokenCount: bigint;
131
+ beneficiary: Address;
132
+ memo?: string;
133
+ useReservedPercent?: boolean;
134
+ }): V6MintTokensTxRequest;
135
+ /**
136
+ * A prepared `burnTokensOf` transaction request.
137
+ */
138
+ export interface V6BurnTokensTxRequest {
139
+ chainId: JBChainId;
140
+ address: Address;
141
+ abi: typeof jbControllerAbi;
142
+ functionName: "burnTokensOf";
143
+ args: readonly [Address, bigint, bigint, string];
144
+ }
145
+ /**
146
+ * Build a `JBController.burnTokensOf(holder, projectId, tokenCount, memo)` transaction
147
+ * request, burning a holder's project tokens.
148
+ *
149
+ * Burning another holder's tokens requires the BURN_TOKENS permission.
150
+ *
151
+ * @param args.chainId The chain to burn on.
152
+ * @param args.holder The address whose tokens are being burned.
153
+ * @param args.projectId The project's id.
154
+ * @param args.tokenCount The number of tokens to burn, as a fixed point number with 18
155
+ * decimals.
156
+ * @param args.memo A memo included in the BurnTokens event. Defaults to "".
157
+ * @returns The transaction request.
158
+ */
159
+ export declare function buildBurnTokensTx({ chainId, holder, projectId, tokenCount, memo, }: {
160
+ chainId: JBChainId;
161
+ holder: Address;
162
+ projectId: bigint;
163
+ tokenCount: bigint;
164
+ memo?: string;
165
+ }): V6BurnTokensTxRequest;
166
+ /**
167
+ * Read a project's ERC-20 token address via `JBTokens.tokenOf(projectId)`.
168
+ *
169
+ * @param client A viem public client on the given chain.
170
+ * @param args.chainId The chain to read from.
171
+ * @param args.projectId The project's id.
172
+ * @returns The token address, or null when the project has no ERC-20 deployed (token
173
+ * balances are held as internal credits).
174
+ */
175
+ export declare function getTokenAddress(client: PublicClient, { chainId, projectId, }: {
176
+ chainId: JBChainId;
177
+ projectId: bigint;
178
+ }): Promise<Address | null>;
179
+ /**
180
+ * Read a holder's internal token credit balance (unclaimed tokens) via
181
+ * `JBTokens.creditBalanceOf(holder, projectId)`.
182
+ *
183
+ * @param client A viem public client on the given chain.
184
+ * @param args.chainId The chain to read from.
185
+ * @param args.projectId The project's id.
186
+ * @param args.holder The holder to read the credit balance of.
187
+ * @returns The holder's credit balance, as a fixed point number with 18 decimals.
188
+ */
189
+ export declare function getCreditBalance(client: PublicClient, { chainId, projectId, holder, }: {
190
+ chainId: JBChainId;
191
+ projectId: bigint;
192
+ holder: Address;
193
+ }): Promise<bigint>;
194
+ //# sourceMappingURL=tokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../../src/v6/tokens.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,161 @@
1
+ import { zeroAddress, zeroHash } from "viem";
2
+ import { jbControllerAbi, jbTokensAbi } from "../generated/juicebox.js";
3
+ import { v6Address } from "./types.js";
4
+ /**
5
+ * Build a `JBController.deployERC20For(projectId, name, symbol, salt)` transaction
6
+ * request, deploying a claimable ERC-20 for a project's tokens.
7
+ *
8
+ * Requires the project owner or the DEPLOY_ERC20 permission.
9
+ *
10
+ * @param args.chainId The chain to deploy on.
11
+ * @param args.projectId The project's id.
12
+ * @param args.name The ERC-20's name.
13
+ * @param args.symbol The ERC-20's symbol.
14
+ * @param args.salt A CREATE2 salt. Use the same non-zero salt (from the same deployer)
15
+ * across chains for a same-address omnichain ERC-20. Defaults to zero (non-deterministic
16
+ * address).
17
+ * @returns The transaction request.
18
+ */
19
+ export function buildDeployErc20Tx({ chainId, projectId, name, symbol, salt = zeroHash, }) {
20
+ return {
21
+ chainId,
22
+ address: v6Address("JBController", chainId),
23
+ abi: jbControllerAbi,
24
+ functionName: "deployERC20For",
25
+ args: [projectId, name, symbol, salt],
26
+ };
27
+ }
28
+ /**
29
+ * Build a `JBController.claimTokensFor(holder, projectId, tokenCount, beneficiary)`
30
+ * transaction request, claiming a holder's internal token credits as ERC-20 tokens.
31
+ *
32
+ * The project must have an ERC-20 deployed (see {@link buildDeployErc20Tx}). Claiming
33
+ * for another holder requires the CLAIM_TOKENS permission.
34
+ *
35
+ * @param args.chainId The chain to claim on.
36
+ * @param args.holder The address whose credits are being claimed.
37
+ * @param args.projectId The project's id.
38
+ * @param args.tokenCount The number of credits to claim, as a fixed point number with
39
+ * 18 decimals.
40
+ * @param args.beneficiary The address that receives the ERC-20 tokens.
41
+ * @returns The transaction request.
42
+ */
43
+ export function buildClaimTokensTx({ chainId, holder, projectId, tokenCount, beneficiary, }) {
44
+ return {
45
+ chainId,
46
+ address: v6Address("JBController", chainId),
47
+ abi: jbControllerAbi,
48
+ functionName: "claimTokensFor",
49
+ args: [holder, projectId, tokenCount, beneficiary],
50
+ };
51
+ }
52
+ /**
53
+ * Build a `JBController.transferCreditsFrom(holder, projectId, recipient,
54
+ * creditCount)` transaction request, transferring internal token credits (unclaimed
55
+ * tokens) to another address.
56
+ *
57
+ * Transferring another holder's credits requires the TRANSFER_CREDITS permission.
58
+ *
59
+ * @param args.chainId The chain to transfer on.
60
+ * @param args.holder The address whose credits are being transferred.
61
+ * @param args.projectId The project's id.
62
+ * @param args.recipient The address that receives the credits.
63
+ * @param args.creditCount The number of credits to transfer, as a fixed point number
64
+ * with 18 decimals.
65
+ * @returns The transaction request.
66
+ */
67
+ export function buildTransferCreditsTx({ chainId, holder, projectId, recipient, creditCount, }) {
68
+ return {
69
+ chainId,
70
+ address: v6Address("JBController", chainId),
71
+ abi: jbControllerAbi,
72
+ functionName: "transferCreditsFrom",
73
+ args: [holder, projectId, recipient, creditCount],
74
+ };
75
+ }
76
+ /**
77
+ * Build a `JBController.mintTokensOf(projectId, tokenCount, beneficiary, memo,
78
+ * useReservedPercent)` transaction request, minting new project tokens.
79
+ *
80
+ * Only works when the project's ruleset allows owner minting; requires the project
81
+ * owner or the MINT_TOKENS permission.
82
+ *
83
+ * @param args.chainId The chain to mint on.
84
+ * @param args.projectId The project's id.
85
+ * @param args.tokenCount The number of tokens to mint, as a fixed point number with 18
86
+ * decimals.
87
+ * @param args.beneficiary The address that receives the minted tokens.
88
+ * @param args.memo A memo included in the MintTokens event. Defaults to "".
89
+ * @param args.useReservedPercent Whether the ruleset's reserved percent should be
90
+ * withheld from the mint for the project's reserved splits. Defaults to true.
91
+ * @returns The transaction request.
92
+ */
93
+ export function buildMintTokensTx({ chainId, projectId, tokenCount, beneficiary, memo = "", useReservedPercent = true, }) {
94
+ return {
95
+ chainId,
96
+ address: v6Address("JBController", chainId),
97
+ abi: jbControllerAbi,
98
+ functionName: "mintTokensOf",
99
+ args: [projectId, tokenCount, beneficiary, memo, useReservedPercent],
100
+ };
101
+ }
102
+ /**
103
+ * Build a `JBController.burnTokensOf(holder, projectId, tokenCount, memo)` transaction
104
+ * request, burning a holder's project tokens.
105
+ *
106
+ * Burning another holder's tokens requires the BURN_TOKENS permission.
107
+ *
108
+ * @param args.chainId The chain to burn on.
109
+ * @param args.holder The address whose tokens are being burned.
110
+ * @param args.projectId The project's id.
111
+ * @param args.tokenCount The number of tokens to burn, as a fixed point number with 18
112
+ * decimals.
113
+ * @param args.memo A memo included in the BurnTokens event. Defaults to "".
114
+ * @returns The transaction request.
115
+ */
116
+ export function buildBurnTokensTx({ chainId, holder, projectId, tokenCount, memo = "", }) {
117
+ return {
118
+ chainId,
119
+ address: v6Address("JBController", chainId),
120
+ abi: jbControllerAbi,
121
+ functionName: "burnTokensOf",
122
+ args: [holder, projectId, tokenCount, memo],
123
+ };
124
+ }
125
+ /**
126
+ * Read a project's ERC-20 token address via `JBTokens.tokenOf(projectId)`.
127
+ *
128
+ * @param client A viem public client on the given chain.
129
+ * @param args.chainId The chain to read from.
130
+ * @param args.projectId The project's id.
131
+ * @returns The token address, or null when the project has no ERC-20 deployed (token
132
+ * balances are held as internal credits).
133
+ */
134
+ export async function getTokenAddress(client, { chainId, projectId, }) {
135
+ const token = await client.readContract({
136
+ address: v6Address("JBTokens", chainId),
137
+ abi: jbTokensAbi,
138
+ functionName: "tokenOf",
139
+ args: [projectId],
140
+ });
141
+ return token === zeroAddress ? null : token;
142
+ }
143
+ /**
144
+ * Read a holder's internal token credit balance (unclaimed tokens) via
145
+ * `JBTokens.creditBalanceOf(holder, projectId)`.
146
+ *
147
+ * @param client A viem public client on the given chain.
148
+ * @param args.chainId The chain to read from.
149
+ * @param args.projectId The project's id.
150
+ * @param args.holder The holder to read the credit balance of.
151
+ * @returns The holder's credit balance, as a fixed point number with 18 decimals.
152
+ */
153
+ export async function getCreditBalance(client, { chainId, projectId, holder, }) {
154
+ return client.readContract({
155
+ address: v6Address("JBTokens", chainId),
156
+ abi: jbTokensAbi,
157
+ functionName: "creditBalanceOf",
158
+ args: [holder, projectId],
159
+ });
160
+ }
161
+ //# sourceMappingURL=tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../../src/v6/tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,WAAW,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAExE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAavC;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,kBAAkB,CAAC,EACjC,OAAO,EACP,SAAS,EACT,IAAI,EACJ,MAAM,EACN,IAAI,GAAG,QAAQ,GAOhB;IACC,OAAO;QACL,OAAO;QACP,OAAO,EAAE,SAAS,CAAC,cAAc,EAAE,OAAO,CAAC;QAC3C,GAAG,EAAE,eAAe;QACpB,YAAY,EAAE,gBAAgB;QAC9B,IAAI,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC;KACtC,CAAC;AACJ,CAAC;AAaD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,kBAAkB,CAAC,EACjC,OAAO,EACP,MAAM,EACN,SAAS,EACT,UAAU,EACV,WAAW,GAOZ;IACC,OAAO;QACL,OAAO;QACP,OAAO,EAAE,SAAS,CAAC,cAAc,EAAE,OAAO,CAAC;QAC3C,GAAG,EAAE,eAAe;QACpB,YAAY,EAAE,gBAAgB;QAC9B,IAAI,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,CAAC;KACnD,CAAC;AACJ,CAAC;AAaD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,sBAAsB,CAAC,EACrC,OAAO,EACP,MAAM,EACN,SAAS,EACT,SAAS,EACT,WAAW,GAOZ;IACC,OAAO;QACL,OAAO;QACP,OAAO,EAAE,SAAS,CAAC,cAAc,EAAE,OAAO,CAAC;QAC3C,GAAG,EAAE,eAAe;QACpB,YAAY,EAAE,qBAAqB;QACnC,IAAI,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC;KAClD,CAAC;AACJ,CAAC;AAaD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAChC,OAAO,EACP,SAAS,EACT,UAAU,EACV,WAAW,EACX,IAAI,GAAG,EAAE,EACT,kBAAkB,GAAG,IAAI,GAQ1B;IACC,OAAO;QACL,OAAO;QACP,OAAO,EAAE,SAAS,CAAC,cAAc,EAAE,OAAO,CAAC;QAC3C,GAAG,EAAE,eAAe;QACpB,YAAY,EAAE,cAAc;QAC5B,IAAI,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,CAAC;KACrE,CAAC;AACJ,CAAC;AAaD;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAChC,OAAO,EACP,MAAM,EACN,SAAS,EACT,UAAU,EACV,IAAI,GAAG,EAAE,GAOV;IACC,OAAO;QACL,OAAO;QACP,OAAO,EAAE,SAAS,CAAC,cAAc,EAAE,OAAO,CAAC;QAC3C,GAAG,EAAE,eAAe;QACpB,YAAY,EAAE,cAAc;QAC5B,IAAI,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC;KAC5C,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAoB,EACpB,EACE,OAAO,EACP,SAAS,GAIV;IAED,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC;QACtC,OAAO,EAAE,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC;QACvC,GAAG,EAAE,WAAW;QAChB,YAAY,EAAE,SAAS;QACvB,IAAI,EAAE,CAAC,SAAS,CAAC;KAClB,CAAC,CAAC;IAEH,OAAO,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;AAC9C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAoB,EACpB,EACE,OAAO,EACP,SAAS,EACT,MAAM,GAKP;IAED,OAAO,MAAM,CAAC,YAAY,CAAC;QACzB,OAAO,EAAE,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC;QACvC,GAAG,EAAE,WAAW;QAChB,YAAY,EAAE,iBAAiB;QAC/B,IAAI,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;KAC1B,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tokens.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.test.d.ts","sourceRoot":"","sources":["../../../src/v6/tokens.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,139 @@
1
+ import { encodeFunctionData, zeroAddress, zeroHash } from "viem";
2
+ import { describe, expect, test } from "vitest";
3
+ import { ONE_ETHER } from "../constants.js";
4
+ import { jbTokensAbi } from "../generated/juicebox.js";
5
+ import { buildBurnTokensTx, buildClaimTokensTx, buildDeployErc20Tx, buildMintTokensTx, buildTransferCreditsTx, getCreditBalance, getTokenAddress, } from "./tokens.js";
6
+ import { v6Address } from "./types.js";
7
+ const chainId = 11155111;
8
+ const projectId = 3n;
9
+ const holder = "0x1111111111111111111111111111111111111111";
10
+ const beneficiary = "0x2222222222222222222222222222222222222222";
11
+ describe("tokens", () => {
12
+ test("buildDeployErc20Tx encodes deployERC20For", () => {
13
+ const tx = buildDeployErc20Tx({
14
+ chainId,
15
+ projectId,
16
+ name: "Token",
17
+ symbol: "TKN",
18
+ });
19
+ expect(tx.address).toEqual(v6Address("JBController", chainId));
20
+ expect(tx.functionName).toEqual("deployERC20For");
21
+ expect(tx.args).toEqual([projectId, "Token", "TKN", zeroHash]);
22
+ expect(() => encodeFunctionData(tx)).not.toThrow();
23
+ });
24
+ test("buildDeployErc20Tx passes a custom salt through", () => {
25
+ const salt = `0x${"11".repeat(32)}`;
26
+ const tx = buildDeployErc20Tx({
27
+ chainId,
28
+ projectId,
29
+ name: "Token",
30
+ symbol: "TKN",
31
+ salt,
32
+ });
33
+ expect(tx.args[3]).toEqual(salt);
34
+ });
35
+ test("buildClaimTokensTx encodes claimTokensFor", () => {
36
+ const tx = buildClaimTokensTx({
37
+ chainId,
38
+ holder,
39
+ projectId,
40
+ tokenCount: ONE_ETHER,
41
+ beneficiary,
42
+ });
43
+ expect(tx.address).toEqual(v6Address("JBController", chainId));
44
+ expect(tx.functionName).toEqual("claimTokensFor");
45
+ expect(tx.args).toEqual([holder, projectId, ONE_ETHER, beneficiary]);
46
+ expect(() => encodeFunctionData(tx)).not.toThrow();
47
+ });
48
+ test("buildTransferCreditsTx encodes transferCreditsFrom", () => {
49
+ const tx = buildTransferCreditsTx({
50
+ chainId,
51
+ holder,
52
+ projectId,
53
+ recipient: beneficiary,
54
+ creditCount: ONE_ETHER,
55
+ });
56
+ expect(tx.address).toEqual(v6Address("JBController", chainId));
57
+ expect(tx.functionName).toEqual("transferCreditsFrom");
58
+ expect(tx.args).toEqual([holder, projectId, beneficiary, ONE_ETHER]);
59
+ expect(() => encodeFunctionData(tx)).not.toThrow();
60
+ });
61
+ test("buildMintTokensTx encodes mintTokensOf with defaults", () => {
62
+ const tx = buildMintTokensTx({
63
+ chainId,
64
+ projectId,
65
+ tokenCount: ONE_ETHER,
66
+ beneficiary,
67
+ });
68
+ expect(tx.address).toEqual(v6Address("JBController", chainId));
69
+ expect(tx.functionName).toEqual("mintTokensOf");
70
+ expect(tx.args).toEqual([projectId, ONE_ETHER, beneficiary, "", true]);
71
+ expect(() => encodeFunctionData(tx)).not.toThrow();
72
+ });
73
+ test("buildMintTokensTx can skip the reserved percent", () => {
74
+ const tx = buildMintTokensTx({
75
+ chainId,
76
+ projectId,
77
+ tokenCount: ONE_ETHER,
78
+ beneficiary,
79
+ memo: "gm",
80
+ useReservedPercent: false,
81
+ });
82
+ expect(tx.args).toEqual([projectId, ONE_ETHER, beneficiary, "gm", false]);
83
+ });
84
+ test("buildBurnTokensTx encodes burnTokensOf", () => {
85
+ const tx = buildBurnTokensTx({
86
+ chainId,
87
+ holder,
88
+ projectId,
89
+ tokenCount: ONE_ETHER,
90
+ });
91
+ expect(tx.address).toEqual(v6Address("JBController", chainId));
92
+ expect(tx.functionName).toEqual("burnTokensOf");
93
+ expect(tx.args).toEqual([holder, projectId, ONE_ETHER, ""]);
94
+ expect(() => encodeFunctionData(tx)).not.toThrow();
95
+ });
96
+ test("getTokenAddress returns null when no ERC-20 is deployed", async () => {
97
+ const calls = [];
98
+ const client = {
99
+ async readContract(params) {
100
+ calls.push(params);
101
+ return zeroAddress;
102
+ },
103
+ };
104
+ const token = await getTokenAddress(client, { chainId, projectId });
105
+ expect(token).toBeNull();
106
+ expect(calls[0].address).toEqual(v6Address("JBTokens", chainId));
107
+ expect(calls[0].abi).toBe(jbTokensAbi);
108
+ expect(calls[0].functionName).toEqual("tokenOf");
109
+ expect(calls[0].args).toEqual([projectId]);
110
+ });
111
+ test("getTokenAddress returns the deployed ERC-20", async () => {
112
+ const erc20 = "0x3333333333333333333333333333333333333333";
113
+ const client = {
114
+ async readContract() {
115
+ return erc20;
116
+ },
117
+ };
118
+ expect(await getTokenAddress(client, { chainId, projectId })).toEqual(erc20);
119
+ });
120
+ test("getCreditBalance reads creditBalanceOf(holder, projectId)", async () => {
121
+ const calls = [];
122
+ const client = {
123
+ async readContract(params) {
124
+ calls.push(params);
125
+ return 42n;
126
+ },
127
+ };
128
+ const balance = await getCreditBalance(client, {
129
+ chainId,
130
+ projectId,
131
+ holder,
132
+ });
133
+ expect(balance).toEqual(42n);
134
+ expect(calls[0].address).toEqual(v6Address("JBTokens", chainId));
135
+ expect(calls[0].functionName).toEqual("creditBalanceOf");
136
+ expect(calls[0].args).toEqual([holder, projectId]);
137
+ });
138
+ });
139
+ //# sourceMappingURL=tokens.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.test.js","sourceRoot":"","sources":["../../../src/v6/tokens.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { Address } from "viem";
2
+ import { jbContractAddress } from "../generated/juicebox.js";
3
+ import { JBChainId } from "../types.js";
4
+ /**
5
+ * The contracts deployed for Juicebox v6.
6
+ */
7
+ export type V6Contract = keyof (typeof jbContractAddress)["6"];
8
+ /**
9
+ * The address of a v6 contract on a chain.
10
+ */
11
+ export declare function v6Address(contract: V6Contract, chainId: JBChainId): Address;
12
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/v6/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC;AAE/D;;GAEG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,GAAG,OAAO,CAQ3E"}
@@ -0,0 +1,12 @@
1
+ import { jbContractAddress } from "../generated/juicebox.js";
2
+ /**
3
+ * The address of a v6 contract on a chain.
4
+ */
5
+ export function v6Address(contract, chainId) {
6
+ const address = jbContractAddress["6"][contract][String(chainId)];
7
+ if (!address) {
8
+ throw new Error(`No v6 ${String(contract)} deployment on chain ${chainId}`);
9
+ }
10
+ return address;
11
+ }
12
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/v6/types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAQ7D;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,QAAoB,EAAE,OAAkB;IAChE,MAAM,OAAO,GAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC,QAAQ,CAA6B,CAC3E,MAAM,CAAC,OAAO,CAAC,CAChB,CAAC;IACF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,SAAS,MAAM,CAAC,QAAQ,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}