@bananapus/nana-sdk-core 1.0.0 → 1.1.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 (308) hide show
  1. package/dist/cjs/actions/JBSuckerAbi.js +4 -1
  2. package/dist/cjs/actions/JBSuckerAbi.js.map +1 -1
  3. package/dist/cjs/actions/dataHook.js +26 -22
  4. package/dist/cjs/actions/dataHook.js.map +1 -1
  5. package/dist/cjs/actions/projectMetadata.js +12 -8
  6. package/dist/cjs/actions/projectMetadata.js.map +1 -1
  7. package/dist/cjs/actions/suckerPairs.js +21 -17
  8. package/dist/cjs/actions/suckerPairs.js.map +1 -1
  9. package/dist/cjs/constants.js +89 -85
  10. package/dist/cjs/constants.js.map +1 -1
  11. package/dist/cjs/contracts.js +22 -19
  12. package/dist/cjs/contracts.js.map +1 -1
  13. package/dist/cjs/generated/juicebox.js +94 -90
  14. package/dist/cjs/generated/juicebox.js.map +1 -1
  15. package/dist/cjs/index.js +24 -8
  16. package/dist/cjs/index.js.map +1 -1
  17. package/dist/cjs/package.json +1 -0
  18. package/dist/cjs/types.js +15 -4
  19. package/dist/cjs/types.js.map +1 -1
  20. package/dist/cjs/utils/contracts.js +19 -14
  21. package/dist/cjs/utils/contracts.js.map +1 -1
  22. package/dist/cjs/utils/data.js +23 -13
  23. package/dist/cjs/utils/data.js.map +1 -1
  24. package/dist/cjs/utils/data.test.js +19 -17
  25. package/dist/cjs/utils/data.test.js.map +1 -1
  26. package/dist/cjs/utils/debug.js +4 -1
  27. package/dist/cjs/utils/debug.js.map +1 -1
  28. package/dist/cjs/utils/deploy.js +17 -13
  29. package/dist/cjs/utils/deploy.js.map +1 -1
  30. package/dist/cjs/utils/deploy.test.js +15 -13
  31. package/dist/cjs/utils/deploy.test.js.map +1 -1
  32. package/dist/cjs/utils/fee.js +6 -3
  33. package/dist/cjs/utils/fee.js.map +1 -1
  34. package/dist/cjs/utils/fee.test.js +8 -6
  35. package/dist/cjs/utils/fee.test.js.map +1 -1
  36. package/dist/cjs/utils/format.js +11 -6
  37. package/dist/cjs/utils/format.js.map +1 -1
  38. package/dist/cjs/utils/format.test.js +11 -9
  39. package/dist/cjs/utils/format.test.js.map +1 -1
  40. package/dist/cjs/utils/hook.js +9 -6
  41. package/dist/cjs/utils/hook.js.map +1 -1
  42. package/dist/cjs/utils/index.js +28 -12
  43. package/dist/cjs/utils/index.js.map +1 -1
  44. package/dist/cjs/utils/ipfs.js +14 -6
  45. package/dist/cjs/utils/ipfs.js.map +1 -1
  46. package/dist/cjs/utils/ipfs.test.js +23 -18
  47. package/dist/cjs/utils/ipfs.test.js.map +1 -1
  48. package/dist/cjs/utils/revnet.js +9 -5
  49. package/dist/cjs/utils/revnet.js.map +1 -1
  50. package/dist/cjs/utils/revnet.test.js +9 -7
  51. package/dist/cjs/utils/revnet.test.js.map +1 -1
  52. package/dist/cjs/utils/ruleset.js +11 -7
  53. package/dist/cjs/utils/ruleset.js.map +1 -1
  54. package/dist/cjs/utils/ruleset.test.js +9 -7
  55. package/dist/cjs/utils/ruleset.test.js.map +1 -1
  56. package/dist/cjs/utils/token.js +26 -19
  57. package/dist/cjs/utils/token.js.map +1 -1
  58. package/dist/cjs/utils/token.test.js +25 -23
  59. package/dist/cjs/utils/token.test.js.map +1 -1
  60. package/dist/cjs/utils/tx.js +6 -3
  61. package/dist/cjs/utils/tx.js.map +1 -1
  62. package/dist/cjs/utils/urn.js +9 -5
  63. package/dist/cjs/utils/urn.js.map +1 -1
  64. package/dist/cjs/utils/urn.test.js +71 -69
  65. package/dist/cjs/utils/urn.test.js.map +1 -1
  66. package/dist/cjs/v6/cashOut.d.ts +88 -0
  67. package/dist/cjs/v6/cashOut.d.ts.map +1 -0
  68. package/dist/cjs/v6/cashOut.js +77 -0
  69. package/dist/cjs/v6/cashOut.js.map +1 -0
  70. package/dist/cjs/v6/cashOut.test.d.ts +2 -0
  71. package/dist/cjs/v6/cashOut.test.d.ts.map +1 -0
  72. package/dist/cjs/v6/cashOut.test.js +102 -0
  73. package/dist/cjs/v6/cashOut.test.js.map +1 -0
  74. package/dist/cjs/v6/currency.d.ts +43 -0
  75. package/dist/cjs/v6/currency.d.ts.map +1 -0
  76. package/dist/cjs/v6/currency.js +48 -0
  77. package/dist/cjs/v6/currency.js.map +1 -0
  78. package/dist/cjs/v6/currency.test.d.ts +2 -0
  79. package/dist/cjs/v6/currency.test.d.ts.map +1 -0
  80. package/dist/cjs/v6/currency.test.js +26 -0
  81. package/dist/cjs/v6/currency.test.js.map +1 -0
  82. package/dist/cjs/v6/fees.d.ts +43 -0
  83. package/dist/cjs/v6/fees.d.ts.map +1 -0
  84. package/dist/cjs/v6/fees.js +56 -0
  85. package/dist/cjs/v6/fees.js.map +1 -0
  86. package/dist/cjs/v6/fees.test.d.ts +2 -0
  87. package/dist/cjs/v6/fees.test.d.ts.map +1 -0
  88. package/dist/cjs/v6/fees.test.js +40 -0
  89. package/dist/cjs/v6/fees.test.js.map +1 -0
  90. package/dist/cjs/v6/index.d.ts +16 -0
  91. package/dist/cjs/v6/index.d.ts.map +1 -0
  92. package/dist/cjs/v6/index.js +32 -0
  93. package/dist/cjs/v6/index.js.map +1 -0
  94. package/dist/cjs/v6/launch.d.ts +2754 -0
  95. package/dist/cjs/v6/launch.d.ts.map +1 -0
  96. package/dist/cjs/v6/launch.js +184 -0
  97. package/dist/cjs/v6/launch.js.map +1 -0
  98. package/dist/cjs/v6/launch.test.d.ts +2 -0
  99. package/dist/cjs/v6/launch.test.d.ts.map +1 -0
  100. package/dist/cjs/v6/launch.test.js +137 -0
  101. package/dist/cjs/v6/launch.test.js.map +1 -0
  102. package/dist/cjs/v6/loans.d.ts +176 -0
  103. package/dist/cjs/v6/loans.d.ts.map +1 -0
  104. package/dist/cjs/v6/loans.js +177 -0
  105. package/dist/cjs/v6/loans.js.map +1 -0
  106. package/dist/cjs/v6/loans.test.d.ts +2 -0
  107. package/dist/cjs/v6/loans.test.d.ts.map +1 -0
  108. package/dist/cjs/v6/loans.test.js +129 -0
  109. package/dist/cjs/v6/loans.test.js.map +1 -0
  110. package/dist/cjs/v6/omnichain.d.ts +10997 -0
  111. package/dist/cjs/v6/omnichain.d.ts.map +1 -0
  112. package/dist/cjs/v6/omnichain.js +120 -0
  113. package/dist/cjs/v6/omnichain.js.map +1 -0
  114. package/dist/cjs/v6/omnichain.test.d.ts +2 -0
  115. package/dist/cjs/v6/omnichain.test.d.ts.map +1 -0
  116. package/dist/cjs/v6/omnichain.test.js +145 -0
  117. package/dist/cjs/v6/omnichain.test.js.map +1 -0
  118. package/dist/cjs/v6/pay.d.ts +110 -0
  119. package/dist/cjs/v6/pay.d.ts.map +1 -0
  120. package/dist/cjs/v6/pay.js +111 -0
  121. package/dist/cjs/v6/pay.js.map +1 -0
  122. package/dist/cjs/v6/pay.test.d.ts +2 -0
  123. package/dist/cjs/v6/pay.test.d.ts.map +1 -0
  124. package/dist/cjs/v6/pay.test.js +130 -0
  125. package/dist/cjs/v6/pay.test.js.map +1 -0
  126. package/dist/cjs/v6/permissions.d.ts +128 -0
  127. package/dist/cjs/v6/permissions.d.ts.map +1 -0
  128. package/dist/cjs/v6/permissions.js +125 -0
  129. package/dist/cjs/v6/permissions.js.map +1 -0
  130. package/dist/cjs/v6/permissions.test.d.ts +2 -0
  131. package/dist/cjs/v6/permissions.test.d.ts.map +1 -0
  132. package/dist/cjs/v6/permissions.test.js +117 -0
  133. package/dist/cjs/v6/permissions.test.js.map +1 -0
  134. package/dist/cjs/v6/revnets.d.ts +4459 -0
  135. package/dist/cjs/v6/revnets.d.ts.map +1 -0
  136. package/dist/cjs/v6/revnets.js +178 -0
  137. package/dist/cjs/v6/revnets.js.map +1 -0
  138. package/dist/cjs/v6/revnets.test.d.ts +2 -0
  139. package/dist/cjs/v6/revnets.test.d.ts.map +1 -0
  140. package/dist/cjs/v6/revnets.test.js +233 -0
  141. package/dist/cjs/v6/revnets.test.js.map +1 -0
  142. package/dist/cjs/v6/rulesets.d.ts +2700 -0
  143. package/dist/cjs/v6/rulesets.d.ts.map +1 -0
  144. package/dist/cjs/v6/rulesets.js +76 -0
  145. package/dist/cjs/v6/rulesets.js.map +1 -0
  146. package/dist/cjs/v6/rulesets.test.d.ts +2 -0
  147. package/dist/cjs/v6/rulesets.test.d.ts.map +1 -0
  148. package/dist/cjs/v6/rulesets.test.js +106 -0
  149. package/dist/cjs/v6/rulesets.test.js.map +1 -0
  150. package/dist/cjs/v6/splits.d.ts +2671 -0
  151. package/dist/cjs/v6/splits.d.ts.map +1 -0
  152. package/dist/cjs/v6/splits.js +116 -0
  153. package/dist/cjs/v6/splits.js.map +1 -0
  154. package/dist/cjs/v6/splits.test.d.ts +2 -0
  155. package/dist/cjs/v6/splits.test.d.ts.map +1 -0
  156. package/dist/cjs/v6/splits.test.js +135 -0
  157. package/dist/cjs/v6/splits.test.js.map +1 -0
  158. package/dist/cjs/v6/suckers.d.ts +247 -0
  159. package/dist/cjs/v6/suckers.d.ts.map +1 -0
  160. package/dist/cjs/v6/suckers.js +163 -0
  161. package/dist/cjs/v6/suckers.js.map +1 -0
  162. package/dist/cjs/v6/suckers.test.d.ts +2 -0
  163. package/dist/cjs/v6/suckers.test.d.ts.map +1 -0
  164. package/dist/cjs/v6/suckers.test.js +134 -0
  165. package/dist/cjs/v6/suckers.test.js.map +1 -0
  166. package/dist/cjs/v6/terminals.d.ts +67 -0
  167. package/dist/cjs/v6/terminals.d.ts.map +1 -0
  168. package/dist/cjs/v6/terminals.js +54 -0
  169. package/dist/cjs/v6/terminals.js.map +1 -0
  170. package/dist/cjs/v6/terminals.test.d.ts +2 -0
  171. package/dist/cjs/v6/terminals.test.d.ts.map +1 -0
  172. package/dist/cjs/v6/terminals.test.js +59 -0
  173. package/dist/cjs/v6/terminals.test.js.map +1 -0
  174. package/dist/cjs/v6/tokens.d.ts +194 -0
  175. package/dist/cjs/v6/tokens.d.ts.map +1 -0
  176. package/dist/cjs/v6/tokens.js +170 -0
  177. package/dist/cjs/v6/tokens.js.map +1 -0
  178. package/dist/cjs/v6/tokens.test.d.ts +2 -0
  179. package/dist/cjs/v6/tokens.test.d.ts.map +1 -0
  180. package/dist/cjs/v6/tokens.test.js +141 -0
  181. package/dist/cjs/v6/tokens.test.js.map +1 -0
  182. package/dist/cjs/v6/types.d.ts +12 -0
  183. package/dist/cjs/v6/types.d.ts.map +1 -0
  184. package/dist/cjs/v6/types.js +15 -0
  185. package/dist/cjs/v6/types.js.map +1 -0
  186. package/dist/esm/v6/cashOut.d.ts +88 -0
  187. package/dist/esm/v6/cashOut.d.ts.map +1 -0
  188. package/dist/esm/v6/cashOut.js +73 -0
  189. package/dist/esm/v6/cashOut.js.map +1 -0
  190. package/dist/esm/v6/cashOut.test.d.ts +2 -0
  191. package/dist/esm/v6/cashOut.test.d.ts.map +1 -0
  192. package/dist/esm/v6/cashOut.test.js +100 -0
  193. package/dist/esm/v6/cashOut.test.js.map +1 -0
  194. package/dist/esm/v6/currency.d.ts +43 -0
  195. package/dist/esm/v6/currency.d.ts.map +1 -0
  196. package/dist/esm/v6/currency.js +44 -0
  197. package/dist/esm/v6/currency.js.map +1 -0
  198. package/dist/esm/v6/currency.test.d.ts +2 -0
  199. package/dist/esm/v6/currency.test.d.ts.map +1 -0
  200. package/dist/esm/v6/currency.test.js +24 -0
  201. package/dist/esm/v6/currency.test.js.map +1 -0
  202. package/dist/esm/v6/fees.d.ts +43 -0
  203. package/dist/esm/v6/fees.d.ts.map +1 -0
  204. package/dist/esm/v6/fees.js +51 -0
  205. package/dist/esm/v6/fees.js.map +1 -0
  206. package/dist/esm/v6/fees.test.d.ts +2 -0
  207. package/dist/esm/v6/fees.test.d.ts.map +1 -0
  208. package/dist/esm/v6/fees.test.js +38 -0
  209. package/dist/esm/v6/fees.test.js.map +1 -0
  210. package/dist/esm/v6/index.d.ts +16 -0
  211. package/dist/esm/v6/index.d.ts.map +1 -0
  212. package/dist/esm/v6/index.js +16 -0
  213. package/dist/esm/v6/index.js.map +1 -0
  214. package/dist/esm/v6/launch.d.ts +2754 -0
  215. package/dist/esm/v6/launch.d.ts.map +1 -0
  216. package/dist/esm/v6/launch.js +176 -0
  217. package/dist/esm/v6/launch.js.map +1 -0
  218. package/dist/esm/v6/launch.test.d.ts +2 -0
  219. package/dist/esm/v6/launch.test.d.ts.map +1 -0
  220. package/dist/esm/v6/launch.test.js +135 -0
  221. package/dist/esm/v6/launch.test.js.map +1 -0
  222. package/dist/esm/v6/loans.d.ts +176 -0
  223. package/dist/esm/v6/loans.d.ts.map +1 -0
  224. package/dist/esm/v6/loans.js +170 -0
  225. package/dist/esm/v6/loans.js.map +1 -0
  226. package/dist/esm/v6/loans.test.d.ts +2 -0
  227. package/dist/esm/v6/loans.test.d.ts.map +1 -0
  228. package/dist/esm/v6/loans.test.js +127 -0
  229. package/dist/esm/v6/loans.test.js.map +1 -0
  230. package/dist/esm/v6/omnichain.d.ts +10997 -0
  231. package/dist/esm/v6/omnichain.d.ts.map +1 -0
  232. package/dist/esm/v6/omnichain.js +116 -0
  233. package/dist/esm/v6/omnichain.js.map +1 -0
  234. package/dist/esm/v6/omnichain.test.d.ts +2 -0
  235. package/dist/esm/v6/omnichain.test.d.ts.map +1 -0
  236. package/dist/esm/v6/omnichain.test.js +143 -0
  237. package/dist/esm/v6/omnichain.test.js.map +1 -0
  238. package/dist/esm/v6/pay.d.ts +110 -0
  239. package/dist/esm/v6/pay.d.ts.map +1 -0
  240. package/dist/esm/v6/pay.js +106 -0
  241. package/dist/esm/v6/pay.js.map +1 -0
  242. package/dist/esm/v6/pay.test.d.ts +2 -0
  243. package/dist/esm/v6/pay.test.d.ts.map +1 -0
  244. package/dist/esm/v6/pay.test.js +128 -0
  245. package/dist/esm/v6/pay.test.js.map +1 -0
  246. package/dist/esm/v6/permissions.d.ts +128 -0
  247. package/dist/esm/v6/permissions.d.ts.map +1 -0
  248. package/dist/esm/v6/permissions.js +120 -0
  249. package/dist/esm/v6/permissions.js.map +1 -0
  250. package/dist/esm/v6/permissions.test.d.ts +2 -0
  251. package/dist/esm/v6/permissions.test.d.ts.map +1 -0
  252. package/dist/esm/v6/permissions.test.js +115 -0
  253. package/dist/esm/v6/permissions.test.js.map +1 -0
  254. package/dist/esm/v6/revnets.d.ts +4459 -0
  255. package/dist/esm/v6/revnets.d.ts.map +1 -0
  256. package/dist/esm/v6/revnets.js +169 -0
  257. package/dist/esm/v6/revnets.js.map +1 -0
  258. package/dist/esm/v6/revnets.test.d.ts +2 -0
  259. package/dist/esm/v6/revnets.test.d.ts.map +1 -0
  260. package/dist/esm/v6/revnets.test.js +231 -0
  261. package/dist/esm/v6/revnets.test.js.map +1 -0
  262. package/dist/esm/v6/rulesets.d.ts +2700 -0
  263. package/dist/esm/v6/rulesets.d.ts.map +1 -0
  264. package/dist/esm/v6/rulesets.js +70 -0
  265. package/dist/esm/v6/rulesets.js.map +1 -0
  266. package/dist/esm/v6/rulesets.test.d.ts +2 -0
  267. package/dist/esm/v6/rulesets.test.d.ts.map +1 -0
  268. package/dist/esm/v6/rulesets.test.js +104 -0
  269. package/dist/esm/v6/rulesets.test.js.map +1 -0
  270. package/dist/esm/v6/splits.d.ts +2671 -0
  271. package/dist/esm/v6/splits.d.ts.map +1 -0
  272. package/dist/esm/v6/splits.js +109 -0
  273. package/dist/esm/v6/splits.js.map +1 -0
  274. package/dist/esm/v6/splits.test.d.ts +2 -0
  275. package/dist/esm/v6/splits.test.d.ts.map +1 -0
  276. package/dist/esm/v6/splits.test.js +133 -0
  277. package/dist/esm/v6/splits.test.js.map +1 -0
  278. package/dist/esm/v6/suckers.d.ts +247 -0
  279. package/dist/esm/v6/suckers.d.ts.map +1 -0
  280. package/dist/esm/v6/suckers.js +156 -0
  281. package/dist/esm/v6/suckers.js.map +1 -0
  282. package/dist/esm/v6/suckers.test.d.ts +2 -0
  283. package/dist/esm/v6/suckers.test.d.ts.map +1 -0
  284. package/dist/esm/v6/suckers.test.js +132 -0
  285. package/dist/esm/v6/suckers.test.js.map +1 -0
  286. package/dist/esm/v6/terminals.d.ts +67 -0
  287. package/dist/esm/v6/terminals.d.ts.map +1 -0
  288. package/dist/esm/v6/terminals.js +50 -0
  289. package/dist/esm/v6/terminals.js.map +1 -0
  290. package/dist/esm/v6/terminals.test.d.ts +2 -0
  291. package/dist/esm/v6/terminals.test.d.ts.map +1 -0
  292. package/dist/esm/v6/terminals.test.js +57 -0
  293. package/dist/esm/v6/terminals.test.js.map +1 -0
  294. package/dist/esm/v6/tokens.d.ts +194 -0
  295. package/dist/esm/v6/tokens.d.ts.map +1 -0
  296. package/dist/esm/v6/tokens.js +161 -0
  297. package/dist/esm/v6/tokens.js.map +1 -0
  298. package/dist/esm/v6/tokens.test.d.ts +2 -0
  299. package/dist/esm/v6/tokens.test.d.ts.map +1 -0
  300. package/dist/esm/v6/tokens.test.js +139 -0
  301. package/dist/esm/v6/tokens.test.js.map +1 -0
  302. package/dist/esm/v6/types.d.ts +12 -0
  303. package/dist/esm/v6/types.d.ts.map +1 -0
  304. package/dist/esm/v6/types.js +12 -0
  305. package/dist/esm/v6/types.js.map +1 -0
  306. package/dist/tsconfig.cjs.tsbuildinfo +1 -1
  307. package/dist/tsconfig.tsbuildinfo +1 -1
  308. package/package.json +8 -2
@@ -0,0 +1,177 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EMPTY_SINGLE_ALLOWANCE = exports.REVLOANS_PERMISSION_ID = exports.REV_PREPAID_FEE_PERCENT = exports.MIN_PREPAID_FEE_PERCENT = exports.LOANS_MAX_FEE = void 0;
4
+ exports.buildBorrowTx = buildBorrowTx;
5
+ exports.buildRepayLoanTx = buildRepayLoanTx;
6
+ exports.buildReallocateCollateralTx = buildReallocateCollateralTx;
7
+ exports.getBorrowableAmount = getBorrowableAmount;
8
+ const juicebox_js_1 = require("../generated/juicebox.js");
9
+ const types_js_1 = require("./types.js");
10
+ /**
11
+ * The denominator for REVLoans fee percents: prepaid fee percents and source fee percents
12
+ * are expressed out of 1000.
13
+ */
14
+ exports.LOANS_MAX_FEE = 1000n;
15
+ /**
16
+ * The minimum `prepaidFeePercent` REVLoans accepts when borrowing: 25 of {@link LOANS_MAX_FEE}
17
+ * (2.5%), paid upfront to the source revnet. Prepaying more than the minimum extends the
18
+ * loan's zero-additional-cost duration; after it expires the repayment cost increases
19
+ * linearly until the loan liquidates at 10 years.
20
+ */
21
+ exports.MIN_PREPAID_FEE_PERCENT = 25n;
22
+ /**
23
+ * The upfront fee REVLoans routes to the $REV revnet on every borrow: 10 of
24
+ * {@link LOANS_MAX_FEE} (1%), taken in addition to the prepaid fee.
25
+ */
26
+ exports.REV_PREPAID_FEE_PERCENT = 10n;
27
+ /**
28
+ * The JBPermissions permission id apps grant to the REVLoans contract before borrowing
29
+ * against a holder's tokens (v6 ROOT permission id 1). REVLoans needs it to manage the
30
+ * holder's collateral tokens on their behalf.
31
+ */
32
+ exports.REVLOANS_PERMISSION_ID = 1;
33
+ /**
34
+ * An empty Permit2 allowance: use when no permit signature is needed (native-token
35
+ * repayments, or ERC-20s already approved to REVLoans).
36
+ */
37
+ exports.EMPTY_SINGLE_ALLOWANCE = {
38
+ sigDeadline: 0n,
39
+ amount: 0n,
40
+ expiration: 0,
41
+ nonce: 0,
42
+ signature: "0x",
43
+ };
44
+ /**
45
+ * Builds a `borrowFrom` transaction on REVLoans, opening a loan against a holder's revnet
46
+ * tokens.
47
+ *
48
+ * The caller must be the holder or have permission to act on their behalf, and the holder
49
+ * must have granted permission id {@link REVLOANS_PERMISSION_ID} to REVLoans.
50
+ *
51
+ * @param args.chainId The chain to borrow on.
52
+ * @param args.revnetId The revnet to borrow from.
53
+ * @param args.token The terminal token to borrow.
54
+ * @param args.minBorrowAmount The minimum amount to borrow, denominated in `token`.
55
+ * Defaults to 0.
56
+ * @param args.collateralCount The number of revnet tokens to lock as collateral, as a
57
+ * fixed point number with 18 decimals.
58
+ * @param args.beneficiary The address that receives the borrowed funds and the loan NFT.
59
+ * @param args.prepaidFeePercent The fee percent to prepay, out of {@link LOANS_MAX_FEE}.
60
+ * Must be at least {@link MIN_PREPAID_FEE_PERCENT}.
61
+ * @param args.holder The address whose tokens are used as collateral.
62
+ */
63
+ function buildBorrowTx({ chainId, revnetId, token, minBorrowAmount = 0n, collateralCount, beneficiary, prepaidFeePercent, holder, }) {
64
+ return {
65
+ chainId,
66
+ address: (0, types_js_1.v6Address)("REVLoans", chainId),
67
+ abi: juicebox_js_1.revLoansAbi,
68
+ functionName: "borrowFrom",
69
+ args: [
70
+ revnetId,
71
+ token,
72
+ minBorrowAmount,
73
+ collateralCount,
74
+ beneficiary,
75
+ prepaidFeePercent,
76
+ holder,
77
+ ],
78
+ };
79
+ }
80
+ /**
81
+ * Builds a `repayLoan` transaction on REVLoans, paying down a loan and reclaiming
82
+ * collateral.
83
+ *
84
+ * Payable: when the loan's source token is the native token, send the repayment as
85
+ * `value`.
86
+ *
87
+ * @param args.chainId The chain the loan lives on.
88
+ * @param args.loanId The id of the loan being repaid (also the loan NFT's token id).
89
+ * @param args.maxRepayBorrowAmount The maximum amount to repay, denominated in the loan's
90
+ * source token. Excess above what's owed is refunded.
91
+ * @param args.collateralCountToReturn The number of collateral tokens to reclaim, as a
92
+ * fixed point number with 18 decimals.
93
+ * @param args.beneficiary The address that receives the reclaimed collateral (and any new
94
+ * loan NFT for a partial repayment).
95
+ * @param args.allowance A Permit2 allowance for ERC-20 repayments. Defaults to
96
+ * {@link EMPTY_SINGLE_ALLOWANCE}.
97
+ * @param args.value The native-token repayment to send along. Defaults to 0.
98
+ */
99
+ function buildRepayLoanTx({ chainId, loanId, maxRepayBorrowAmount, collateralCountToReturn, beneficiary, allowance = exports.EMPTY_SINGLE_ALLOWANCE, value = 0n, }) {
100
+ return {
101
+ chainId,
102
+ address: (0, types_js_1.v6Address)("REVLoans", chainId),
103
+ abi: juicebox_js_1.revLoansAbi,
104
+ functionName: "repayLoan",
105
+ args: [
106
+ loanId,
107
+ maxRepayBorrowAmount,
108
+ collateralCountToReturn,
109
+ beneficiary,
110
+ allowance,
111
+ ],
112
+ value,
113
+ };
114
+ }
115
+ /**
116
+ * Builds a `reallocateCollateralFromLoan` transaction on REVLoans, moving collateral out
117
+ * of an existing loan and into a new loan (optionally adding more collateral and borrowing
118
+ * more).
119
+ *
120
+ * Note: this internally opens a new loan with the full current borrow capacity, so it is
121
+ * economically equivalent to borrowing.
122
+ *
123
+ * @param args.chainId The chain the loan lives on.
124
+ * @param args.loanId The id of the loan to reallocate collateral from.
125
+ * @param args.collateralCountToTransfer The number of collateral tokens to move from the
126
+ * existing loan into the new one, as a fixed point number with 18 decimals.
127
+ * @param args.token The terminal token to borrow with the new loan.
128
+ * @param args.minBorrowAmount The minimum amount the new loan must borrow, denominated in
129
+ * `token`. Defaults to 0.
130
+ * @param args.collateralCountToAdd The number of additional collateral tokens to add to
131
+ * the new loan, as a fixed point number with 18 decimals.
132
+ * @param args.beneficiary The address that receives the borrowed funds and the new loan
133
+ * NFT.
134
+ * @param args.prepaidFeePercent The fee percent to prepay on the new loan, out of
135
+ * {@link LOANS_MAX_FEE}. Must be at least {@link MIN_PREPAID_FEE_PERCENT}.
136
+ */
137
+ function buildReallocateCollateralTx({ chainId, loanId, collateralCountToTransfer, token, minBorrowAmount = 0n, collateralCountToAdd, beneficiary, prepaidFeePercent, }) {
138
+ return {
139
+ chainId,
140
+ address: (0, types_js_1.v6Address)("REVLoans", chainId),
141
+ abi: juicebox_js_1.revLoansAbi,
142
+ functionName: "reallocateCollateralFromLoan",
143
+ args: [
144
+ loanId,
145
+ collateralCountToTransfer,
146
+ token,
147
+ minBorrowAmount,
148
+ collateralCountToAdd,
149
+ beneficiary,
150
+ prepaidFeePercent,
151
+ ],
152
+ };
153
+ }
154
+ /**
155
+ * Reads how much a given collateral count can borrow from a revnet, via
156
+ * `REVLoans.borrowableAmountFrom`.
157
+ *
158
+ * @param client A viem PublicClient connected to `chainId`.
159
+ * @param args.chainId The chain to read on.
160
+ * @param args.revnetId The revnet to borrow from.
161
+ * @param args.collateralCount The number of revnet tokens that would be locked as
162
+ * collateral, as a fixed point number with 18 decimals.
163
+ * @param args.decimals The decimals the returned amounts should be denominated in.
164
+ * @param args.currency The currency the returned amounts should be denominated in.
165
+ * @returns `borrowableNow` (currently borrowable, net of the revnet's cash-out delay) and
166
+ * `borrowableCapacity` (the full capacity the collateral represents).
167
+ */
168
+ async function getBorrowableAmount(client, { chainId, revnetId, collateralCount, decimals, currency, }) {
169
+ const [borrowableNow, borrowableCapacity] = await client.readContract({
170
+ address: (0, types_js_1.v6Address)("REVLoans", chainId),
171
+ abi: juicebox_js_1.revLoansAbi,
172
+ functionName: "borrowableAmountFrom",
173
+ args: [revnetId, collateralCount, decimals, currency],
174
+ });
175
+ return { borrowableNow, borrowableCapacity };
176
+ }
177
+ //# sourceMappingURL=loans.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loans.js","sourceRoot":"","sources":["../../../src/v6/loans.ts"],"names":[],"mappings":";;;AA4EA,sCAwCC;AAqBD,4CAsCC;AAwBD,kEAwCC;AAgBD,kDAwBC;AAtRD,0DAAuD;AAEvD,yCAAuC;AAEvC;;;GAGG;AACU,QAAA,aAAa,GAAG,KAAK,CAAC;AAEnC;;;;;GAKG;AACU,QAAA,uBAAuB,GAAG,GAAG,CAAC;AAE3C;;;GAGG;AACU,QAAA,uBAAuB,GAAG,GAAG,CAAC;AAE3C;;;;GAIG;AACU,QAAA,sBAAsB,GAAG,CAAC,CAAC;AAexC;;;GAGG;AACU,QAAA,sBAAsB,GAAsB;IACvD,WAAW,EAAE,EAAE;IACf,MAAM,EAAE,EAAE;IACV,UAAU,EAAE,CAAC;IACb,KAAK,EAAE,CAAC;IACR,SAAS,EAAE,IAAI;CAChB,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,QAAQ,EACR,KAAK,EACL,eAAe,GAAG,EAAE,EACpB,eAAe,EACf,WAAW,EACX,iBAAiB,EACjB,MAAM,GAUP;IAOC,OAAO;QACL,OAAO;QACP,OAAO,EAAE,IAAA,oBAAS,EAAC,UAAU,EAAE,OAAO,CAAC;QACvC,GAAG,EAAE,yBAAW;QAChB,YAAY,EAAE,YAAY;QAC1B,IAAI,EAAE;YACJ,QAAQ;YACR,KAAK;YACL,eAAe;YACf,eAAe;YACf,WAAW;YACX,iBAAiB;YACjB,MAAM;SACP;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,MAAM,EACN,oBAAoB,EACpB,uBAAuB,EACvB,WAAW,EACX,SAAS,GAAG,8BAAsB,EAClC,KAAK,GAAG,EAAE,GASX;IAQC,OAAO;QACL,OAAO;QACP,OAAO,EAAE,IAAA,oBAAS,EAAC,UAAU,EAAE,OAAO,CAAC;QACvC,GAAG,EAAE,yBAAW;QAChB,YAAY,EAAE,WAAW;QACzB,IAAI,EAAE;YACJ,MAAM;YACN,oBAAoB;YACpB,uBAAuB;YACvB,WAAW;YACX,SAAS;SACV;QACD,KAAK;KACN,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,SAAgB,2BAA2B,CAAC,EAC1C,OAAO,EACP,MAAM,EACN,yBAAyB,EACzB,KAAK,EACL,eAAe,GAAG,EAAE,EACpB,oBAAoB,EACpB,WAAW,EACX,iBAAiB,GAUlB;IAOC,OAAO;QACL,OAAO;QACP,OAAO,EAAE,IAAA,oBAAS,EAAC,UAAU,EAAE,OAAO,CAAC;QACvC,GAAG,EAAE,yBAAW;QAChB,YAAY,EAAE,8BAA8B;QAC5C,IAAI,EAAE;YACJ,MAAM;YACN,yBAAyB;YACzB,KAAK;YACL,eAAe;YACf,oBAAoB;YACpB,WAAW;YACX,iBAAiB;SAClB;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;GAaG;AACI,KAAK,UAAU,mBAAmB,CACvC,MAAoB,EACpB,EACE,OAAO,EACP,QAAQ,EACR,eAAe,EACf,QAAQ,EACR,QAAQ,GAOT;IAED,MAAM,CAAC,aAAa,EAAE,kBAAkB,CAAC,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC;QACpE,OAAO,EAAE,IAAA,oBAAS,EAAC,UAAU,EAAE,OAAO,CAAC;QACvC,GAAG,EAAE,yBAAW;QAChB,YAAY,EAAE,sBAAsB;QACpC,IAAI,EAAE,CAAC,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,CAAC;KACtD,CAAC,CAAC;IAEH,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=loans.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loans.test.d.ts","sourceRoot":"","sources":["../../../src/v6/loans.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const viem_1 = require("viem");
5
+ const juicebox_js_1 = require("../generated/juicebox.js");
6
+ const loans_js_1 = require("./loans.js");
7
+ const types_js_1 = require("./types.js");
8
+ const token = "0x000000000000000000000000000000000000EEEe";
9
+ const beneficiary = "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266";
10
+ const holder = "0x70997970C51812dc3A010C7d01b50e0d17dc79C8";
11
+ (0, vitest_1.describe)("loans", () => {
12
+ (0, vitest_1.test)("constants match REVLoans", () => {
13
+ (0, vitest_1.expect)(loans_js_1.MIN_PREPAID_FEE_PERCENT).toEqual(25n);
14
+ (0, vitest_1.expect)(loans_js_1.REV_PREPAID_FEE_PERCENT).toEqual(10n);
15
+ (0, vitest_1.expect)(loans_js_1.LOANS_MAX_FEE).toEqual(1000n);
16
+ (0, vitest_1.expect)(loans_js_1.REVLOANS_PERMISSION_ID).toEqual(1);
17
+ });
18
+ (0, vitest_1.describe)("buildBorrowTx", () => {
19
+ (0, vitest_1.test)("targets REVLoans and encodes borrowFrom", () => {
20
+ const tx = (0, loans_js_1.buildBorrowTx)({
21
+ chainId: 11155111,
22
+ revnetId: 4n,
23
+ token,
24
+ collateralCount: 100n * 10n ** 18n,
25
+ beneficiary,
26
+ prepaidFeePercent: loans_js_1.MIN_PREPAID_FEE_PERCENT,
27
+ holder,
28
+ });
29
+ (0, vitest_1.expect)(tx.address).toEqual((0, types_js_1.v6Address)("REVLoans", 11155111));
30
+ (0, vitest_1.expect)(tx.functionName).toEqual("borrowFrom");
31
+ const data = (0, viem_1.encodeFunctionData)(tx);
32
+ const decoded = (0, viem_1.decodeFunctionData)({ abi: juicebox_js_1.revLoansAbi, data });
33
+ (0, vitest_1.expect)(decoded.functionName).toEqual("borrowFrom");
34
+ (0, vitest_1.expect)(decoded.args).toEqual([
35
+ 4n,
36
+ token,
37
+ 0n, // minBorrowAmount defaults to 0
38
+ 100n * 10n ** 18n,
39
+ beneficiary,
40
+ 25n,
41
+ holder,
42
+ ]);
43
+ });
44
+ });
45
+ (0, vitest_1.describe)("buildRepayLoanTx", () => {
46
+ (0, vitest_1.test)("defaults to an empty Permit2 allowance and 0 value", () => {
47
+ const tx = (0, loans_js_1.buildRepayLoanTx)({
48
+ chainId: 11155111,
49
+ loanId: 7n,
50
+ maxRepayBorrowAmount: 1000n,
51
+ collateralCountToReturn: 5n,
52
+ beneficiary,
53
+ });
54
+ (0, vitest_1.expect)(tx.value).toEqual(0n);
55
+ (0, vitest_1.expect)(tx.args[4]).toEqual(loans_js_1.EMPTY_SINGLE_ALLOWANCE);
56
+ const data = (0, viem_1.encodeFunctionData)(tx);
57
+ const decoded = (0, viem_1.decodeFunctionData)({ abi: juicebox_js_1.revLoansAbi, data });
58
+ (0, vitest_1.expect)(decoded.functionName).toEqual("repayLoan");
59
+ (0, vitest_1.expect)(decoded.args).toEqual([
60
+ 7n,
61
+ 1000n,
62
+ 5n,
63
+ beneficiary,
64
+ loans_js_1.EMPTY_SINGLE_ALLOWANCE,
65
+ ]);
66
+ });
67
+ (0, vitest_1.test)("passes a native-token repayment value through", () => {
68
+ const tx = (0, loans_js_1.buildRepayLoanTx)({
69
+ chainId: 1,
70
+ loanId: 7n,
71
+ maxRepayBorrowAmount: 1000n,
72
+ collateralCountToReturn: 0n,
73
+ beneficiary,
74
+ value: 1000n,
75
+ });
76
+ (0, vitest_1.expect)(tx.value).toEqual(1000n);
77
+ (0, vitest_1.expect)(() => (0, viem_1.encodeFunctionData)(tx)).not.toThrow();
78
+ });
79
+ });
80
+ (0, vitest_1.describe)("buildReallocateCollateralTx", () => {
81
+ (0, vitest_1.test)("encodes reallocateCollateralFromLoan", () => {
82
+ const tx = (0, loans_js_1.buildReallocateCollateralTx)({
83
+ chainId: 11155111,
84
+ loanId: 7n,
85
+ collateralCountToTransfer: 3n,
86
+ token,
87
+ collateralCountToAdd: 2n,
88
+ beneficiary,
89
+ prepaidFeePercent: 50n,
90
+ });
91
+ (0, vitest_1.expect)(tx.address).toEqual((0, types_js_1.v6Address)("REVLoans", 11155111));
92
+ const data = (0, viem_1.encodeFunctionData)(tx);
93
+ const decoded = (0, viem_1.decodeFunctionData)({ abi: juicebox_js_1.revLoansAbi, data });
94
+ (0, vitest_1.expect)(decoded.functionName).toEqual("reallocateCollateralFromLoan");
95
+ (0, vitest_1.expect)(decoded.args).toEqual([
96
+ 7n,
97
+ 3n,
98
+ token,
99
+ 0n, // minBorrowAmount defaults to 0
100
+ 2n,
101
+ beneficiary,
102
+ 50n,
103
+ ]);
104
+ });
105
+ });
106
+ (0, vitest_1.describe)("getBorrowableAmount", () => {
107
+ (0, vitest_1.test)("returns named fields from borrowableAmountFrom", async () => {
108
+ const readContract = vitest_1.vi.fn().mockResolvedValue([111n, 222n]);
109
+ const client = { readContract };
110
+ const result = await (0, loans_js_1.getBorrowableAmount)(client, {
111
+ chainId: 11155111,
112
+ revnetId: 4n,
113
+ collateralCount: 100n,
114
+ decimals: 18n,
115
+ currency: 1n,
116
+ });
117
+ (0, vitest_1.expect)(readContract).toHaveBeenCalledWith(vitest_1.expect.objectContaining({
118
+ address: (0, types_js_1.v6Address)("REVLoans", 11155111),
119
+ functionName: "borrowableAmountFrom",
120
+ args: [4n, 100n, 18n, 1n],
121
+ }));
122
+ (0, vitest_1.expect)(result).toEqual({
123
+ borrowableNow: 111n,
124
+ borrowableCapacity: 222n,
125
+ });
126
+ });
127
+ });
128
+ });
129
+ //# sourceMappingURL=loans.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loans.test.js","sourceRoot":"","sources":["../../../src/v6/loans.test.ts"],"names":[],"mappings":"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"}