@curvefi/api 1.25.0 → 2.0.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 (213) hide show
  1. package/README.md +775 -589
  2. package/docs/v1/README.md +916 -0
  3. package/lib/boosting.d.ts +12 -12
  4. package/lib/boosting.js +23 -23
  5. package/lib/constants/abis/{json/2pool → 2pool}/swap.json +0 -0
  6. package/lib/constants/abis/{json/3pool → 3pool}/swap.json +0 -0
  7. package/lib/constants/abis/{json/4pool → 4pool}/swap.json +0 -0
  8. package/lib/constants/abis/{json/ERC20.json → ERC20.json} +0 -0
  9. package/lib/constants/abis/{json/aave → aave}/rewards.json +0 -0
  10. package/lib/constants/abis/{json/aave → aave}/swap.json +0 -0
  11. package/lib/constants/abis/{json/address_provider.json → address_provider.json} +0 -0
  12. package/lib/constants/abis/{json/ankreth → ankreth}/sCurveRewards.json +0 -0
  13. package/lib/constants/abis/{json/ankreth → ankreth}/swap.json +0 -0
  14. package/lib/constants/abis/{json/atricrypto3 → atricrypto3}/swap.json +0 -0
  15. package/lib/constants/abis/{json/atricrypto3 → atricrypto3}/zap.json +0 -0
  16. package/lib/constants/abis/{json/bbtc → bbtc}/deposit.json +0 -0
  17. package/lib/constants/abis/{json/bbtc → bbtc}/swap.json +0 -0
  18. package/lib/constants/abis/{json/busd → busd}/deposit.json +0 -0
  19. package/lib/constants/abis/{json/busd → busd}/swap.json +0 -0
  20. package/lib/constants/abis/{json/cERC20.json → cERC20.json} +0 -0
  21. package/lib/constants/abis/{json/compound → compound}/deposit.json +0 -0
  22. package/lib/constants/abis/{json/compound → compound}/swap.json +0 -0
  23. package/lib/constants/abis/{json/crveth → crveth}/swap.json +0 -0
  24. package/lib/constants/abis/{json/deposit_and_stake.json → deposit_and_stake.json} +0 -0
  25. package/lib/constants/abis/{json/dusd → dusd}/deposit.json +0 -0
  26. package/lib/constants/abis/{json/dusd → dusd}/sCurveRewards.json +0 -0
  27. package/lib/constants/abis/{json/dusd → dusd}/swap.json +0 -0
  28. package/lib/constants/abis/{json/eurs → eurs}/sCurveRewards.json +0 -0
  29. package/lib/constants/abis/{json/eurs → eurs}/swap.json +0 -0
  30. package/lib/constants/abis/{json/eursusd → eursusd}/swap.json +0 -0
  31. package/lib/constants/abis/{json/eurt → eurt}/swap.json +0 -0
  32. package/lib/constants/abis/{json/eurtusd → eurtusd}/deposit.json +0 -0
  33. package/lib/constants/abis/{json/eurtusd → eurtusd}/swap.json +0 -0
  34. package/lib/constants/abis/{json/factory-crypto → factory-crypto}/factory-crypto-pool-2.json +0 -0
  35. package/lib/constants/abis/{json/factory-crypto.json → factory-crypto.json} +0 -0
  36. package/lib/constants/abis/{json/factory-v2 → factory-v2}/DepositZapMetaBtcPolygon.json +0 -0
  37. package/lib/constants/abis/{json/factory-v2 → factory-v2}/DepositZapMetaUsdPolygon.json +0 -0
  38. package/lib/constants/abis/{json/factory-v2 → factory-v2}/MetaBTC.json +0 -0
  39. package/lib/constants/abis/{json/factory-v2 → factory-v2}/MetaBTCBalances.json +0 -0
  40. package/lib/constants/abis/{json/factory-v2 → factory-v2}/MetaBTCBalancesRen.json +0 -0
  41. package/lib/constants/abis/{json/factory-v2 → factory-v2}/MetaBTCRen.json +0 -0
  42. package/lib/constants/abis/{json/factory-v2 → factory-v2}/MetaUSD.json +0 -0
  43. package/lib/constants/abis/{json/factory-v2 → factory-v2}/MetaUSDBalances.json +0 -0
  44. package/lib/constants/abis/{json/factory-v2 → factory-v2}/Plain2Balances.json +0 -0
  45. package/lib/constants/abis/{json/factory-v2 → factory-v2}/Plain2Basic.json +0 -0
  46. package/lib/constants/abis/{json/factory-v2 → factory-v2}/Plain2ETH.json +0 -0
  47. package/lib/constants/abis/{json/factory-v2 → factory-v2}/Plain2Optimized.json +0 -0
  48. package/lib/constants/abis/{json/factory-v2 → factory-v2}/Plain3Balances.json +0 -0
  49. package/lib/constants/abis/{json/factory-v2 → factory-v2}/Plain3Basic.json +0 -0
  50. package/lib/constants/abis/{json/factory-v2 → factory-v2}/Plain3ETH.json +0 -0
  51. package/lib/constants/abis/{json/factory-v2 → factory-v2}/Plain3Optimized.json +0 -0
  52. package/lib/constants/abis/{json/factory-v2 → factory-v2}/Plain4Balances.json +0 -0
  53. package/lib/constants/abis/{json/factory-v2 → factory-v2}/Plain4Basic.json +0 -0
  54. package/lib/constants/abis/{json/factory-v2 → factory-v2}/Plain4ETH.json +0 -0
  55. package/lib/constants/abis/{json/factory-v2 → factory-v2}/Plain4Optimized.json +0 -0
  56. package/lib/constants/abis/{json/factory.json → factory.json} +0 -0
  57. package/lib/constants/abis/{json/factoryPools → factoryPools}/deposit.json +0 -0
  58. package/lib/constants/abis/{json/factoryPools → factoryPools}/rewards.json +0 -0
  59. package/lib/constants/abis/{json/factoryPools → factoryPools}/swap.json +0 -0
  60. package/lib/constants/abis/{json/gauge.json → gauge.json} +0 -0
  61. package/lib/constants/abis/{json/gauge_factory.json → gauge_factory.json} +0 -0
  62. package/lib/constants/abis/{json/gauge_rewards_only.json → gauge_rewards_only.json} +0 -0
  63. package/lib/constants/abis/{json/gauge_synthetix.json → gauge_synthetix.json} +0 -0
  64. package/lib/constants/abis/{json/gauge_v2.json → gauge_v2.json} +0 -0
  65. package/lib/constants/abis/{json/gauge_v3.json → gauge_v3.json} +0 -0
  66. package/lib/constants/abis/{json/gauge_v4.json → gauge_v4.json} +0 -0
  67. package/lib/constants/abis/{json/gauge_v5.json → gauge_v5.json} +0 -0
  68. package/lib/constants/abis/{json/gaugecontroller.json → gaugecontroller.json} +0 -0
  69. package/lib/constants/abis/{json/gusd → gusd}/deposit.json +0 -0
  70. package/lib/constants/abis/{json/gusd → gusd}/swap.json +0 -0
  71. package/lib/constants/abis/{json/hbtc → hbtc}/swap.json +0 -0
  72. package/lib/constants/abis/{json/husd → husd}/deposit.json +0 -0
  73. package/lib/constants/abis/{json/husd → husd}/swap.json +0 -0
  74. package/lib/constants/abis/{json/ib → ib}/swap.json +0 -0
  75. package/lib/constants/abis/{json/iearn → iearn}/deposit.json +0 -0
  76. package/lib/constants/abis/{json/iearn → iearn}/sCurveRewards.json +0 -0
  77. package/lib/constants/abis/{json/iearn → iearn}/swap.json +0 -0
  78. package/lib/constants/abis/{json/link → link}/swap.json +0 -0
  79. package/lib/constants/abis/{json/minter.json → minter.json} +0 -0
  80. package/lib/constants/abis/{json/musd → musd}/deposit.json +0 -0
  81. package/lib/constants/abis/{json/musd → musd}/sCurveRewards.json +0 -0
  82. package/lib/constants/abis/{json/musd → musd}/swap.json +0 -0
  83. package/lib/constants/abis/{json/obtc → obtc}/deposit.json +0 -0
  84. package/lib/constants/abis/{json/obtc → obtc}/sCurveRewards.json +0 -0
  85. package/lib/constants/abis/{json/obtc → obtc}/swap.json +0 -0
  86. package/lib/constants/abis/{json/paave → paave}/rewards.json +0 -0
  87. package/lib/constants/abis/{json/pax → pax}/deposit.json +0 -0
  88. package/lib/constants/abis/{json/pax → pax}/swap.json +0 -0
  89. package/lib/constants/abis/{json/pbtc → pbtc}/deposit.json +0 -0
  90. package/lib/constants/abis/{json/pbtc → pbtc}/sCurveRewards.json +0 -0
  91. package/lib/constants/abis/{json/pbtc → pbtc}/swap.json +0 -0
  92. package/lib/constants/abis/{json/rai → rai}/deposit.json +0 -0
  93. package/lib/constants/abis/{json/rai → rai}/swap.json +0 -0
  94. package/lib/constants/abis/{json/registry_exchange.json → registry_exchange.json} +0 -0
  95. package/lib/constants/abis/{json/ren → ren}/swap.json +0 -0
  96. package/lib/constants/abis/{json/ren-polygon → ren-polygon}/swap.json +0 -0
  97. package/lib/constants/abis/{json/reth → reth}/swap.json +0 -0
  98. package/lib/constants/abis/{json/router.json → router.json} +0 -0
  99. package/lib/constants/abis/{json/rsv → rsv}/deposit.json +0 -0
  100. package/lib/constants/abis/{json/rsv → rsv}/sCurveRewards.json +0 -0
  101. package/lib/constants/abis/{json/rsv → rsv}/swap.json +0 -0
  102. package/lib/constants/abis/{json/saave → saave}/swap.json +0 -0
  103. package/lib/constants/abis/{json/sbtc → sbtc}/sCurveRewards.json +0 -0
  104. package/lib/constants/abis/{json/sbtc → sbtc}/swap.json +0 -0
  105. package/lib/constants/abis/{json/seth → seth}/swap.json +0 -0
  106. package/lib/constants/abis/{json/steth → steth}/sCurveRewards.json +0 -0
  107. package/lib/constants/abis/{json/steth → steth}/swap.json +0 -0
  108. package/lib/constants/abis/{json/streamer.json → streamer.json} +0 -0
  109. package/lib/constants/abis/{json/susdv2 → susdv2}/deposit.json +0 -0
  110. package/lib/constants/abis/{json/susdv2 → susdv2}/sCurveRewards.json +0 -0
  111. package/lib/constants/abis/{json/susdv2 → susdv2}/swap.json +0 -0
  112. package/lib/constants/abis/{json/tbtc → tbtc}/deposit.json +0 -0
  113. package/lib/constants/abis/{json/tbtc → tbtc}/sCurveRewards.json +0 -0
  114. package/lib/constants/abis/{json/tbtc → tbtc}/swap.json +0 -0
  115. package/lib/constants/abis/{json/tricrypto2 → tricrypto2}/deposit.json +0 -0
  116. package/lib/constants/abis/{json/tricrypto2 → tricrypto2}/swap.json +0 -0
  117. package/lib/constants/abis/{json/usdk → usdk}/deposit.json +0 -0
  118. package/lib/constants/abis/{json/usdk → usdk}/swap.json +0 -0
  119. package/lib/constants/abis/{json/usdn → usdn}/deposit.json +0 -0
  120. package/lib/constants/abis/{json/usdn → usdn}/swap.json +0 -0
  121. package/lib/constants/abis/{json/usdp → usdp}/deposit.json +0 -0
  122. package/lib/constants/abis/{json/usdp → usdp}/swap.json +0 -0
  123. package/lib/constants/abis/{json/usdt → usdt}/deposit.json +0 -0
  124. package/lib/constants/abis/{json/usdt → usdt}/swap.json +0 -0
  125. package/lib/constants/abis/{json/ust → ust}/deposit.json +0 -0
  126. package/lib/constants/abis/{json/ust → ust}/swap.json +0 -0
  127. package/lib/constants/abis/{json/votingescrow.json → votingescrow.json} +0 -0
  128. package/lib/constants/abis/{json/yERC20.json → yERC20.json} +0 -0
  129. package/lib/constants/aliases.d.ts +2 -24
  130. package/lib/constants/aliases.js +5 -4
  131. package/lib/constants/{coins-ethereum.d.ts → coins/ethereum.d.ts} +0 -9
  132. package/lib/constants/{coins-ethereum.js → coins/ethereum.js} +12 -23
  133. package/lib/constants/{coins-polygon.d.ts → coins/polygon.d.ts} +0 -12
  134. package/lib/constants/{coins-polygon.js → coins/polygon.js} +8 -20
  135. package/lib/constants/pools/ethereum.d.ts +2 -0
  136. package/lib/constants/{abis/abis-ethereum.js → pools/ethereum.js} +517 -1012
  137. package/lib/constants/pools/index.d.ts +3 -0
  138. package/lib/constants/pools/index.js +7 -0
  139. package/lib/constants/pools/polygon.d.ts +4 -0
  140. package/lib/constants/{abis/abis-polygon.js → pools/polygon.js} +53 -81
  141. package/lib/constants/utils.d.ts +5 -0
  142. package/lib/constants/utils.js +69 -0
  143. package/lib/curve.d.ts +10 -32
  144. package/lib/curve.js +189 -232
  145. package/lib/external-api.d.ts +3 -1
  146. package/lib/external-api.js +34 -1
  147. package/lib/factory/constants.d.ts +15 -15
  148. package/lib/factory/constants.js +19 -19
  149. package/lib/factory/factory-api.d.ts +2 -2
  150. package/lib/factory/factory-api.js +52 -45
  151. package/lib/factory/factory-crypto.d.ts +2 -2
  152. package/lib/factory/factory-crypto.js +23 -31
  153. package/lib/factory/factory.d.ts +2 -2
  154. package/lib/factory/factory.js +53 -66
  155. package/lib/index.d.ts +36 -53
  156. package/lib/index.js +27 -35
  157. package/lib/interfaces.d.ts +35 -72
  158. package/lib/pools/PoolTemplate.d.ts +210 -0
  159. package/lib/pools/PoolTemplate.js +2292 -0
  160. package/lib/pools/index.d.ts +3 -0
  161. package/lib/pools/index.js +7 -0
  162. package/lib/pools/mixins/common.d.ts +3 -0
  163. package/lib/pools/mixins/common.js +77 -0
  164. package/lib/pools/mixins/depositBalancedAmountsMixins.d.ts +5 -0
  165. package/lib/pools/mixins/depositBalancedAmountsMixins.js +145 -0
  166. package/lib/pools/mixins/depositBonusMixins.d.ts +5 -0
  167. package/lib/pools/mixins/depositBonusMixins.js +164 -0
  168. package/lib/pools/mixins/depositMixins.d.ts +5 -0
  169. package/lib/pools/mixins/depositMixins.js +373 -0
  170. package/lib/pools/mixins/depositWrappedMixins.d.ts +3 -0
  171. package/lib/pools/mixins/depositWrappedMixins.js +243 -0
  172. package/lib/pools/mixins/poolBalancesMixin.d.ts +4 -0
  173. package/lib/pools/mixins/poolBalancesMixin.js +129 -0
  174. package/lib/pools/mixins/swapMixins.d.ts +4 -0
  175. package/lib/pools/mixins/swapMixins.js +313 -0
  176. package/lib/pools/mixins/swapWrappedMixins.d.ts +4 -0
  177. package/lib/pools/mixins/swapWrappedMixins.js +297 -0
  178. package/lib/pools/mixins/withdrawExpectedMixins.d.ts +6 -0
  179. package/lib/pools/mixins/withdrawExpectedMixins.js +164 -0
  180. package/lib/pools/mixins/withdrawImbalanceMixins.d.ts +5 -0
  181. package/lib/pools/mixins/withdrawImbalanceMixins.js +348 -0
  182. package/lib/pools/mixins/withdrawImbalanceWrappedMixins.d.ts +3 -0
  183. package/lib/pools/mixins/withdrawImbalanceWrappedMixins.js +207 -0
  184. package/lib/pools/mixins/withdrawMixins.d.ts +5 -0
  185. package/lib/pools/mixins/withdrawMixins.js +347 -0
  186. package/lib/pools/mixins/withdrawOneCoinExpectedMixins.d.ts +5 -0
  187. package/lib/pools/mixins/withdrawOneCoinExpectedMixins.js +104 -0
  188. package/lib/pools/mixins/withdrawOneCoinMixins.d.ts +5 -0
  189. package/lib/pools/mixins/withdrawOneCoinMixins.js +347 -0
  190. package/lib/pools/mixins/withdrawOneCoinWrappedExpectedMixins.d.ts +3 -0
  191. package/lib/pools/mixins/withdrawOneCoinWrappedExpectedMixins.js +72 -0
  192. package/lib/pools/mixins/withdrawOneCoinWrappedMixins.d.ts +3 -0
  193. package/lib/pools/mixins/withdrawOneCoinWrappedMixins.js +205 -0
  194. package/lib/pools/mixins/withdrawWrappedMixins.d.ts +3 -0
  195. package/lib/pools/mixins/withdrawWrappedMixins.js +206 -0
  196. package/lib/pools/poolConstructor.d.ts +2 -0
  197. package/lib/pools/poolConstructor.js +228 -0
  198. package/lib/pools/utils.d.ts +4 -0
  199. package/lib/pools/utils.js +85 -0
  200. package/lib/router.d.ts +12 -0
  201. package/lib/router.js +624 -0
  202. package/lib/utils.d.ts +10 -16
  203. package/lib/utils.js +43 -130
  204. package/package.json +1 -1
  205. package/lib/constants/abis/abis-ethereum.d.ts +0 -4
  206. package/lib/constants/abis/abis-polygon.d.ts +0 -4
  207. package/lib/constants/abis/json/aRewards.json +0 -1
  208. package/lib/constants/abis/json/compound/migration.json +0 -57
  209. package/lib/constants/abis/json/compound/oldSwap.json +0 -688
  210. package/lib/constants/abis/json/ren/adapter.json +0 -1
  211. package/lib/constants/abis/json/sbtc/adapter.json +0 -1
  212. package/lib/pools.d.ts +0 -267
  213. package/lib/pools.js +0 -4742
package/README.md CHANGED
@@ -14,13 +14,17 @@ import curve from "@curvefi/api";
14
14
  // 1. Dev
15
15
  await curve.init('JsonRpc', {url: 'http://localhost:8545/', privateKey: ''}, { gasPrice: 0, maxFeePerGas: 0, maxPriorityFeePerGas: 0, chainId: 1 });
16
16
  // OR
17
- await curve.init('JsonRpc', {}, { chainId: 1 }); // In this case fee data will be specified automatically
17
+ await curve.init('JsonRpc', {}, {}); // In this case JsonRpc url, privateKey, fee data and chainId will be specified automatically
18
18
 
19
19
  // 2. Infura
20
20
  curve.init("Infura", { network: "homestead", apiKey: <INFURA_KEY> }, { chainId: 1 });
21
21
 
22
22
  // 3. Web3 provider
23
23
  curve.init('Web3', { externalProvider: <WEB3_PROVIDER> }, { chainId: 1 });
24
+
25
+ // Fetch factory pools
26
+ await curve.fetchFactoryPools();
27
+ await curve.getCryptoFactoryPoolList();
24
28
  })()
25
29
  ```
26
30
  **Note 1.** ```chainId``` parameter is optional, but you must specify it in the case you use Metamask on localhost network, because Metamask has that [bug](https://hardhat.org/metamask-issue.html)
@@ -122,55 +126,212 @@ const WalletProvider: FunctionComponent = ({ children }) => {
122
126
  ...
123
127
  ```
124
128
 
125
- ## Available pools
129
+ ## General methods
126
130
  ```ts
127
131
  import curve from "@curvefi/api";
128
132
 
129
133
  (async () => {
130
- await curve.init('JsonRpc', {}, {gasPrice: 0, maxFeePerGas: 0, maxPriorityFeePerGas: 0});
134
+ await curve.getTVL();
135
+ // 7870819849.685552
136
+
137
+ const balances1 = await curve.getBalances(['DAI', 'sUSD']);
138
+ // OR const balances1 = await curve.getBalances(['0x6B175474E89094C44Da98b954EedeAC495271d0F', '0x57Ab1ec28D129707052df4dF418D58a2D46d5f51']);
139
+ console.log(balances1);
140
+ // [ '10000.0', '0.0' ]
141
+
142
+ // You can specify addresses
143
+ const balances2 = await curve.getBalances(['aDAI', 'aSUSD'], "0x0063046686E46Dc6F15918b61AE2B121458534a5", "0x66aB6D9362d4F35596279692F0251Db635165871");
144
+ // OR const balances2 = await curve.getBalances(['0x028171bCA77440897B824Ca71D1c56caC55b68A3', '0x6c5024cd4f8a59110119c56f8933403a539555eb'], ["0x0063046686E46Dc6F15918b61AE2B121458534a5", "0x66aB6D9362d4F35596279692F0251Db635165871"]);
145
+ console.log(balances2);
146
+ // {
147
+ // '0x0063046686E46Dc6F15918b61AE2B121458534a5': [ '0.0', '0.0' ],
148
+ // '0x66aB6D9362d4F35596279692F0251Db635165871': [ '0.0', '0.0' ]
149
+ // }
131
150
 
132
- console.log(curve.getPoolList());
151
+
152
+ const spender = "0xbEbc44782C7dB0a1A60Cb6fe97d0b483032FF1C7" // 3pool swap address
153
+
154
+ await curve.getAllowance(["DAI", "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"], curve.signerAddress, spender);
155
+ // [ '0.0', '0.0' ]
156
+ await curve.hasAllowance(["DAI", "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"], ['1000', '1000'], curve.signerAddress, spender);
157
+ // false
158
+ await curve.ensureAllowance(["DAI", "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"], ['1000', '1000'], spender);
133
159
  // [
134
- // 'compound', 'usdt', 'y', 'busd',
135
- // 'susd', 'pax', 'ren', 'sbtc',
136
- // 'hbtc', '3pool', 'gusd', 'husd',
137
- // 'usdk', 'usdn', 'musd', 'rsv',
138
- // 'tbtc', 'dusd', 'pbtc', 'bbtc',
139
- // 'obtc', 'seth', 'eurs', 'ust',
140
- // 'aave', 'steth', 'saave', 'ankreth',
141
- // 'usdp', 'ib', 'link', 'tusd',
142
- // 'frax', 'lusd', 'busdv2', 'reth',
143
- // 'alusd', 'mim', 'tricrypto2', 'eurt',
144
- // 'eurtusd', 'crveth', 'cvxeth'
160
+ // '0xb0cada2a2983dc0ed85a26916d32b9caefe45fecde47640bd7d0e214ff22aed3',
161
+ // '0x00ea7d827b3ad50ce933e96c579810cd7e70d66a034a86ec4e1e10005634d041'
145
162
  // ]
146
163
  })()
147
- ````
164
+ ```
165
+
166
+ ## Pools
148
167
 
149
- ## Balances
168
+ ### Available pools
150
169
  ```ts
151
170
  import curve from "@curvefi/api";
152
171
 
153
172
  (async () => {
154
173
  await curve.init('JsonRpc', {}, { gasPrice: 0, maxFeePerGas: 0, maxPriorityFeePerGas: 0 });
174
+ await curve.fetchFactoryPools();
175
+ await curve.fetchCryptoFactoryPools();
155
176
 
156
- console.log(await curve.getBalances(['DAI', 'sUSD']));
157
- // OR console.log(await curve.getBalances(['0x6B175474E89094C44Da98b954EedeAC495271d0F', '0x57Ab1ec28D129707052df4dF418D58a2D46d5f51']));
177
+ curve.getPoolList();
178
+ // [
179
+ // 'compound', 'usdt', 'y', 'busd',
180
+ // 'susd', 'pax', 'ren', 'sbtc',
181
+ // 'hbtc', '3pool', 'gusd', 'husd',
182
+ // 'usdk', 'usdn', 'musd', 'rsv',
183
+ // 'tbtc', 'dusd', 'pbtc', 'bbtc',
184
+ // 'obtc', 'seth', 'eurs', 'ust',
185
+ // 'aave', 'steth', 'saave', 'ankreth',
186
+ // 'usdp', 'ib', 'link', 'tusd',
187
+ // 'frax', 'lusd', 'busdv2', 'reth',
188
+ // 'alusd', 'mim', 'tricrypto2', 'eurt',
189
+ // 'eurtusd', 'eursusd', 'crveth', 'rai',
190
+ // 'cvxeth', 'xautusd', 'spelleth', 'teth',
191
+ // '2pool', '4pool'
192
+ // ]
193
+
194
+ curve.getFactoryPoolList();
195
+ // [
196
+ // 'factory-v2-0', 'factory-v2-2', 'factory-v2-3', 'factory-v2-4',
197
+ // 'factory-v2-5', 'factory-v2-6', 'factory-v2-7', 'factory-v2-8',
198
+ // 'factory-v2-9', 'factory-v2-10', 'factory-v2-11', 'factory-v2-14',
199
+ // 'factory-v2-15', 'factory-v2-17', 'factory-v2-18', 'factory-v2-19',
200
+ // 'factory-v2-21', 'factory-v2-22', 'factory-v2-23', 'factory-v2-24',
201
+ // 'factory-v2-25', 'factory-v2-26', 'factory-v2-27', 'factory-v2-28',
202
+ // 'factory-v2-29', 'factory-v2-30', 'factory-v2-31', 'factory-v2-32',
203
+ // 'factory-v2-33', 'factory-v2-34', 'factory-v2-35', 'factory-v2-36',
204
+ // 'factory-v2-37', 'factory-v2-38', 'factory-v2-39', 'factory-v2-40',
205
+ // 'factory-v2-41', 'factory-v2-42', 'factory-v2-43', 'factory-v2-44',
206
+ // 'factory-v2-45', 'factory-v2-46', 'factory-v2-47', 'factory-v2-48',
207
+ // 'factory-v2-49', 'factory-v2-50', 'factory-v2-51', 'factory-v2-52',
208
+ // 'factory-v2-53', 'factory-v2-54', 'factory-v2-55', 'factory-v2-56',
209
+ // 'factory-v2-57', 'factory-v2-58', 'factory-v2-59', 'factory-v2-60',
210
+ // 'factory-v2-61', 'factory-v2-62', 'factory-v2-63', 'factory-v2-64',
211
+ // 'factory-v2-65', 'factory-v2-66', 'factory-v2-67', 'factory-v2-68',
212
+ // 'factory-v2-69', 'factory-v2-70', 'factory-v2-71', 'factory-v2-72',
213
+ // 'factory-v2-73', 'factory-v2-74', 'factory-v2-75', 'factory-v2-76',
214
+ // 'factory-v2-77', 'factory-v2-78', 'factory-v2-79', 'factory-v2-80',
215
+ // 'factory-v2-81', 'factory-v2-82', 'factory-v2-83', 'factory-v2-84',
216
+ // 'factory-v2-85', 'factory-v2-86', 'factory-v2-87', 'factory-v2-88',
217
+ // 'factory-v2-89', 'factory-v2-90', 'factory-v2-91', 'factory-v2-92',
218
+ // 'factory-v2-93', 'factory-v2-94', 'factory-v2-95', 'factory-v2-96',
219
+ // 'factory-v2-97', 'factory-v2-98', 'factory-v2-99', 'factory-v2-100',
220
+ // 'factory-v2-101', 'factory-v2-102', 'factory-v2-103', 'factory-v2-104',
221
+ // ... 27 more items
222
+ // ]
158
223
 
159
- // [ '10000.0', '10000.0' ]
224
+ curve.getCryptoFactoryPoolList();
225
+ // [
226
+ // 'factory-crypto-0', 'factory-crypto-1', 'factory-crypto-2',
227
+ // 'factory-crypto-3', 'factory-crypto-4', 'factory-crypto-5',
228
+ // 'factory-crypto-6', 'factory-crypto-7', 'factory-crypto-8',
229
+ // 'factory-crypto-9', 'factory-crypto-10', 'factory-crypto-11',
230
+ // 'factory-crypto-12', 'factory-crypto-13', 'factory-crypto-14',
231
+ // 'factory-crypto-15', 'factory-crypto-16', 'factory-crypto-17',
232
+ // 'factory-crypto-18', 'factory-crypto-19', 'factory-crypto-20',
233
+ // 'factory-crypto-21', 'factory-crypto-22', 'factory-crypto-23',
234
+ // 'factory-crypto-24', 'factory-crypto-25', 'factory-crypto-26',
235
+ // 'factory-crypto-27', 'factory-crypto-28', 'factory-crypto-29',
236
+ // 'factory-crypto-30', 'factory-crypto-31', 'factory-crypto-32',
237
+ // 'factory-crypto-33', 'factory-crypto-34', 'factory-crypto-35',
238
+ // 'factory-crypto-36', 'factory-crypto-37', 'factory-crypto-38',
239
+ // 'factory-crypto-39', 'factory-crypto-40', 'factory-crypto-41',
240
+ // 'factory-crypto-42', 'factory-crypto-43', 'factory-crypto-44',
241
+ // 'factory-crypto-45', 'factory-crypto-46', 'factory-crypto-47',
242
+ // 'factory-crypto-48', 'factory-crypto-49', 'factory-crypto-50',
243
+ // 'factory-crypto-51', 'factory-crypto-52', 'factory-crypto-53',
244
+ // 'factory-crypto-54', 'factory-crypto-55', 'factory-crypto-56',
245
+ // 'factory-crypto-57', 'factory-crypto-58', 'factory-crypto-59',
246
+ // 'factory-crypto-60', 'factory-crypto-61', 'factory-crypto-62'
247
+ // ]
248
+ })()
249
+ ````
160
250
 
161
- console.log(await curve.getBalances(['aDAI', 'aSUSD']));
162
- // OR console.log(await curve.getBalances(['0x028171bCA77440897B824Ca71D1c56caC55b68A3', '0x6c5024cd4f8a59110119c56f8933403a539555eb']));
251
+ ### Pool fields
252
+ ```ts
253
+ import curve from "@curvefi/api";
163
254
 
164
- // [ '10000.00017727177059715', '10000.000080108429034461' ]
255
+ (async () => {
256
+ await curve.init('JsonRpc', {}, { gasPrice: 0, maxFeePerGas: 0, maxPriorityFeePerGas: 0 });
257
+ await curve.fetchFactoryPools();
258
+ await curve.fetchCryptoFactoryPools();
165
259
 
260
+ const pool = curve.getPool('factory-v2-11');
261
+
262
+ pool.id;
263
+ // factory-v2-11
264
+ pool.name;
265
+ // FEI Metapool
266
+ pool.fullName;
267
+ // Curve.fi Factory USD Metapool: FEI Metapool
268
+ pool.symbol;
269
+ // FEI3CRV3CRV-f
270
+ pool.referenceAsset;
271
+ // USD
272
+ pool.address;
273
+ // 0x06cb22615ba53e60d67bf6c341a0fd5e718e1655
274
+ pool.lpToken;
275
+ // 0x06cb22615ba53e60d67bf6c341a0fd5e718e1655
276
+ pool.gauge;
277
+ // 0xdc69d4cb5b86388fff0b51885677e258883534ae
278
+ pool.zap;
279
+ // 0xa79828df1850e8a3a3064576f380d90aecdd3359
280
+ pool.rewardContract;
281
+ // null
282
+ pool.isPlain;
283
+ // false
284
+ pool.isLending;
285
+ // false
286
+ pool.isMeta;
287
+ // true
288
+ pool.isCrypto;
289
+ // false
290
+ pool.isFake;
291
+ // false
292
+ pool.isFactory;
293
+ // true
294
+ pool.basePool;
295
+ // 3pool
296
+ pool.underlyingCoins;
297
+ // [ 'FEI', 'DAI', 'USDC', 'USDT' ]
298
+ pool.wrappedCoins;
299
+ // [ 'FEI', '3Crv' ]
300
+ pool.underlyingCoinAddresses;
301
+ // [
302
+ // '0x956f47f50a910163d8bf957cf5846d573e7f87ca',
303
+ // '0x6b175474e89094c44da98b954eedeac495271d0f',
304
+ // '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
305
+ // '0xdac17f958d2ee523a2206206994597c13d831ec7'
306
+ // ]
307
+ pool.wrappedCoinAddresses;
308
+ // [
309
+ // '0x956f47f50a910163d8bf957cf5846d573e7f87ca',
310
+ // '0x6c3f90f043a72fa612cbac8115ee7e52bde6e490'
311
+ // ]
312
+ pool.underlyingDecimals;
313
+ // [ 18, 18, 6, 6 ]
314
+ pool.wrappedDecimals;
315
+ // [ 18, 18 ]
316
+ pool.useLending;
317
+ // [ false, false, false, false ]
318
+ pool.rewardTokens;
319
+ // []
320
+ })()
321
+ ````
166
322
 
167
- // --- Pool ---
323
+ ### Wallet balances for pool
324
+ ```ts
325
+ import curve from "@curvefi/api";
168
326
 
169
- const saave = new curve.Pool('saave');
327
+ (async () => {
328
+ await curve.init('JsonRpc', {}, { gasPrice: 0, maxFeePerGas: 0, maxPriorityFeePerGas: 0 });
170
329
 
171
- // 1. Current address balances (signer balances)
330
+ const saave = curve.getPool('saave');
172
331
 
173
- console.log(await saave.balances());
332
+ // 1. Current address (signer) balances
333
+
334
+ await saave.wallet.balances();
174
335
  // {
175
336
  // lpToken: '0.0',
176
337
  // gauge: '0.0',
@@ -180,22 +341,23 @@ import curve from "@curvefi/api";
180
341
  // '0x6c5024cd4f8a59110119c56f8933403a539555eb': '10000.000080108429034461'
181
342
  // }
182
343
 
183
- console.log(await saave.lpTokenBalances());
344
+
345
+ await saave.wallet.lpTokenBalances();
184
346
  // { lpToken: '0.0', gauge: '0.0' }
185
-
186
- console.log(await saave.underlyingCoinBalances());
347
+
348
+ await saave.wallet.underlyingCoinBalances();
187
349
  // {
188
350
  // '0x6B175474E89094C44Da98b954EedeAC495271d0F': '10000.0',
189
351
  // '0x57Ab1ec28D129707052df4dF418D58a2D46d5f51': '10000.0'
190
352
  // }
191
-
192
- console.log(await saave.coinBalances());
353
+
354
+ await saave.wallet.wrappedCoinBalances();
193
355
  // {
194
356
  // '0x028171bCA77440897B824Ca71D1c56caC55b68A3': '10000.00017727177059715',
195
357
  // '0x6c5024cd4f8a59110119c56f8933403a539555eb': '10000.000080108429034461'
196
358
  // }
197
-
198
- console.log(await saave.allCoinBalances());
359
+
360
+ await saave.wallet.allCoinBalances();
199
361
  // {
200
362
  // '0x6B175474E89094C44Da98b954EedeAC495271d0F': '10000.0',
201
363
  // '0x57Ab1ec28D129707052df4dF418D58a2D46d5f51': '10000.0',
@@ -206,7 +368,7 @@ import curve from "@curvefi/api";
206
368
 
207
369
  // 2. For every method above you can specify the address
208
370
 
209
- console.log(await saave.balances("0x0063046686E46Dc6F15918b61AE2B121458534a5"));
371
+ await saave.wallet.balances("0x0063046686E46Dc6F15918b61AE2B121458534a5");
210
372
  // {
211
373
  // lpToken: '0.0',
212
374
  // gauge: '0.0',
@@ -217,7 +379,7 @@ import curve from "@curvefi/api";
217
379
  // }
218
380
 
219
381
  // Or several addresses
220
- console.log(await saave.balances("0x0063046686E46Dc6F15918b61AE2B121458534a5", "0x66aB6D9362d4F35596279692F0251Db635165871"));
382
+ await saave.wallet.balances("0x0063046686E46Dc6F15918b61AE2B121458534a5", "0x66aB6D9362d4F35596279692F0251Db635165871");
221
383
  // {
222
384
  // '0x0063046686E46Dc6F15918b61AE2B121458534a5': {
223
385
  // lpToken: '0.0',
@@ -236,681 +398,705 @@ import curve from "@curvefi/api";
236
398
  // '0x6c5024cd4f8a59110119c56f8933403a539555eb': '10000.000080108429034461'
237
399
  // }
238
400
  // }
239
-
240
-
241
401
  })()
242
402
  ```
243
403
 
244
- ## Stats
404
+ ### Stats
245
405
  ```ts
246
406
  import curve from "@curvefi/api";
247
407
 
248
408
  (async () => {
249
- await curve.init('JsonRpc', {}, {gasPrice: 0, maxFeePerGas: 0, maxPriorityFeePerGas: 0});
409
+ await curve.init('JsonRpc', {}, { gasPrice: 0, maxFeePerGas: 0, maxPriorityFeePerGas: 0 });
250
410
 
251
- console.log(await curve.getTVL());
252
- // 19281307454.671753
253
-
254
- const aave = new curve.Pool('aave');
411
+
412
+ // --- COMPOUND ---
255
413
 
256
- console.log(await aave.stats.getParameters());
414
+ const compound = curve.getPool('compound');
415
+
416
+ await compound.stats.parameters();
257
417
  // {
258
- // virtualPrice: '1.082056814810440924',
418
+ // virtualPrice: '1.107067773320466717',
259
419
  // fee: '0.04',
260
420
  // adminFee: '0.02',
261
- // A: '2000',
262
- // future_A: '2000',
263
- // initial_A: '200',
264
- // future_A_time: 1628525830000,
265
- // initial_A_time: 1627923611000,
421
+ // A: '4500',
422
+ // future_A: '4500',
423
+ // initial_A: undefined,
424
+ // future_A_time: undefined,
425
+ // initial_A_time: undefined,
266
426
  // gamma: undefined
267
427
  // }
428
+
429
+ await compound.stats.underlyingBalances();
430
+ // [ '66625943.103442629270215258', '33124832.500932' ]
431
+
432
+ await compound.stats.wrappedBalances();
433
+ // [ '3026076723.05777297', '1464830413.37972924' ]
268
434
 
435
+ await compound.stats.totalLiquidity();
436
+ // 99836271.3031733
269
437
 
270
- console.log(await aave.stats.getPoolBalances());
271
- // [ '19619514.600802512613372364', '18740372.790339', '16065974.167437' ]
438
+ // --- STETH ---
272
439
 
273
- console.log(await aave.stats.getPoolWrappedBalances());
274
- // [ '19619514.600802512613372364', '18740372.790339', '16065974.167437' ]
440
+ const steth = curve.getPool('steth');
275
441
 
276
- console.log(await aave.stats.getTotalLiquidity());
277
- // 54425861.55857851
278
-
279
- console.log(await aave.stats.getVolume());
280
- // 175647.68180084194
442
+ await steth.stats.volume();
443
+ // 174737430.35185483
444
+
445
+ await steth.stats.baseApy();
446
+ // { day: '3.1587592896017647', week: '2.6522145719060752' } (as %)
281
447
 
282
- console.log(await aave.stats.getBaseApy());
283
- // { day: '3.2015', week: '3.1185', month: '3.1318', total: '7.7286' }
448
+ await steth.stats.tokenApy();
449
+ // [ '0.5918', '1.4796' ] (as %)
284
450
 
285
- console.log(await aave.stats.getTokenApy());
286
- // [ '0.4093', '1.0233' ]
287
-
288
- console.log(await aave.stats.getRewardsApy());
451
+ await steth.stats.rewardsApy();
289
452
  // [
290
453
  // {
291
- // token: '0x4da27a545c0c5B758a6BA100e3a049001de870f5',
292
- // symbol: 'stkAAVE',
293
- // apy: '0.4978306501849664'
454
+ // gaugeAddress: '0x182b723a58739a9c974cfdb385ceadb237453c28',
455
+ // tokenAddress: '0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32',
456
+ // tokenPrice: 1.023,
457
+ // name: 'Lido DAO Token',
458
+ // symbol: 'LDO',
459
+ // decimals: '18',
460
+ // apy: 2.6446376845647155 (as %)
294
461
  // }
295
462
  // ]
463
+
296
464
  })()
297
465
  ````
298
466
 
299
- ## Add/remove liquidity
300
-
467
+ ### Deposit
301
468
  ```ts
302
- import curve from "@curvefi/api";
303
-
304
469
  (async () => {
305
- await curve.init('JsonRpc', {}, { gasPrice: 0, maxFeePerGas: 0, maxPriorityFeePerGas: 0, chainId: 1 });
306
-
307
- const pool = new curve.Pool('aave');
308
- console.log(pool.underlyingCoins); // [ 'DAI', 'USDC', 'USDT' ]
309
- console.log(pool.coins); // [ 'aDAI', 'aUSDC', 'aUSDT' ]
310
-
311
- console.log(await pool.balances());
312
- //{
313
- // lpToken: '0.0',
314
- // gauge: '0.0',
315
- // DAI: '1000.0',
316
- // USDC: '1000.0',
317
- // USDT: '1000.0',
318
- // aDAI: '1000.000012756069187853',
319
- // aUSDC: '1000.000005',
320
- // aUSDT: '1000.0'
321
- //}
322
-
323
-
324
- // --- ADD LIQUIDITY ---
325
-
326
- const expectedLpTokenAmount1 = await pool.addLiquidityExpected(['100', '100', '100']);
327
- // 283.535915313504880343
328
- const tx = await pool.addLiquidity(['100', '100', '100']);
329
- console.log(tx); // 0x7aef5b13385207f1d311b7e5d485d4994a6520482e8dc682b5ef26e9addc53be
330
-
331
- //{
332
- // lpToken: '283.531953275007017412',
333
- // gauge: '0.0',
334
- // DAI: '900.0',
335
- // USDC: '900.0',
336
- // USDT: '900.0',
337
- // aDAI: '1000.000091543555348124',
338
- // aUSDC: '1000.00007',
339
- // aUSDT: '1000.000095'
340
- //}
341
-
342
-
343
- // --- ADD LIQUIDITY WRAPPED ---
344
-
345
- await pool.addLiquidityWrappedExpected(['100', '100', '100']);
346
- // 283.53589268907800207
347
- await pool.addLiquidityWrapped(['100', '100', '100']);
348
-
349
- //{
350
- // lpToken: '567.06390438645751582',
351
- // gauge: '0.0',
352
- // DAI: '900.0',
353
- // USDC: '900.0',
354
- // USDT: '900.0',
355
- // aDAI: '900.00009904712567354',
356
- // aUSDC: '900.000077',
357
- // aUSDT: '900.000104'
358
- //}
359
-
360
-
361
- // --- GAUGE DEPOSIT ---
362
-
363
- const lpTokenBalance = (await pool.balances())['lpToken'];
364
- await pool.gaugeDeposit(lpTokenBalance);
365
-
366
- //{
367
- // lpToken: '0.0',
368
- // gauge: '567.06390438645751582',
369
- // DAI: '900.0',
370
- // USDC: '900.0',
371
- // USDT: '900.0',
372
- // aDAI: '900.00009972244701026',
373
- // aUSDC: '900.000077',
374
- // aUSDT: '900.000105'
375
- //}
376
-
377
-
378
- // --- GAUGE WITHDRAW ---
379
-
380
- await pool.gaugeWithdraw(lpTokenBalance);
381
-
382
- //{
383
- // lpToken: '567.06390438645751582',
384
- // gauge: '0.0',
385
- // DAI: '900.0',
386
- // USDC: '900.0',
387
- // USDT: '900.0',
388
- // aDAI: '900.000116605480428249',
389
- // aUSDC: '900.000091',
390
- // aUSDT: '900.000125'
391
- //}
392
-
393
-
394
- // --- REMOVE LIQUIDITY ---
395
-
396
- await pool.removeLiquidityExpected('10');
397
- // [ '3.200409227699300211', '3.697305', '3.683197' ]
398
- await pool.removeLiquidity('10');
399
-
400
- //{
401
- // lpToken: '557.06390438645751582',
402
- // gauge: '0.0',
403
- // DAI: '903.200409232502213136',
404
- // USDC: '903.697304',
405
- // USDT: '903.683196',
406
- // aDAI: '900.000117956123101688',
407
- // aUSDC: '900.000092',
408
- // aUSDT: '900.000127'
409
- //}
410
-
411
-
412
- // --- REMOVE LIQUIDITY WRAPPED ---
413
-
414
- await pool.removeLiquidityWrappedExpected('10');
415
- // [ '3.200409232502213137', '3.697305', '3.683197' ]
416
- await pool.removeLiquidityWrapped('10');
417
-
418
- //{
419
- // lpToken: '547.06390438645751582',
420
- // gauge: '0.0',
421
- // DAI: '903.200409232502213136',
422
- // USDC: '903.697304',
423
- // USDT: '903.683196',
424
- // aDAI: '903.200529221793815936',
425
- // aUSDC: '903.697398',
426
- // aUSDT: '903.683325'
427
- //}
428
-
429
-
430
- // --- REMOVE LIQUIDITY IMBALANCE ---
431
-
432
- await pool.removeLiquidityImbalanceExpected(['10', '10', '10']);
433
- // 28.353588385263656951
434
- await pool.removeLiquidityImbalance(['10', '10', '10']);
435
-
436
- //{
437
- // lpToken: '518.709923802845859288',
438
- // gauge: '0.0',
439
- // DAI: '913.200409232502213136',
440
- // USDC: '913.697304',
441
- // USDT: '913.683196',
442
- // aDAI: '903.200530577239468989',
443
- // aUSDC: '903.697399',
444
- // aUSDT: '903.683327'
445
- //}
446
-
447
-
448
- // --- REMOVE LIQUIDITY IMBALANCE WRAPPED ---
449
-
450
- await pool.removeLiquidityImbalanceWrappedExpected(['10', '10', '10']);
451
- // 28.353588342257067439
452
- await pool.removeLiquidityImbalanceWrapped(['10', '10', '10']);
453
-
454
- //{
455
- // lpToken: '490.355943262223785163',
456
- // gauge: '0.0',
457
- // DAI: '913.200409232502213136',
458
- // USDC: '913.697304',
459
- // USDT: '913.683196',
460
- // aDAI: '913.200531932685151936',
461
- // aUSDC: '913.6974',
462
- // aUSDT: '913.683329'
463
- //}
464
-
465
-
466
- // --- REMOVE LIQUIDITY ONE COIN ---
467
-
468
- await pool.removeLiquidityOneCoinExpected('10','DAI'); // OR await pool.removeLiquidityOneCoinExpected('10', 0);
469
- // 10.573292542135201585 (DAI amount)
470
- await pool.removeLiquidityOneCoin('10', 'DAI'); // OR await pool.removeLiquidityOneCoin('10', 0);
471
-
472
- //{
473
- // lpToken: '480.355943262223785163',
474
- // gauge: '0.0',
475
- // DAI: '923.773701782667764366',
476
- // USDC: '913.697304',
477
- // USDT: '913.683196',
478
- // aDAI: '913.200532617911563408',
479
- // aUSDC: '913.697401',
480
- // aUSDT: '913.68333'
481
- //}
482
-
483
-
484
- // --- REMOVE LIQUIDITY ONE COIN WRAPPED ---
485
-
486
- await pool.removeLiquidityOneCoinWrappedExpected('10', 'aUSDC'); // OR await pool.removeLiquidityOneCoinWrappedExpected('10', 1);
487
- // 10.581285 (aUSDC amount)
488
- await pool.removeLiquidityOneCoinWrapped('10', 'aUSDC'); // OR await pool.removeLiquidityOneCoinWrapped('10', 1);
489
-
490
- //{
491
- // lpToken: '470.355943262223785163',
492
- // gauge: '0.0',
493
- // DAI: '923.773701782667764366',
494
- // USDC: '913.697304',
495
- // USDT: '913.683196',
496
- // aDAI: '913.200533988364413768',
497
- // aUSDC: '924.278687',
498
- // aUSDT: '913.683331'
499
- //}
500
- })()
501
- ```
502
-
503
- ## Exchange
504
-
505
- ### Router exchange
470
+ await curve.init('JsonRpc', {}, { gasPrice: 0, maxFeePerGas: 0, maxPriorityFeePerGas: 0 });
506
471
 
507
- ```ts
508
- import curve from "@curvefi/api";
472
+ const pool = curve.getPool('mim');
509
473
 
510
- (async () => {
511
- await curve.init('JsonRpc', {}, { gasPrice: 0, chainId: 1 });
512
-
513
- console.log(await curve.getBalances(['DAI', 'CRV']));
514
- // [ '9900.0', '100049.744832225238317557' ]
474
+
475
+ // --- UNDERLYING ---
515
476
 
516
- const { route, output } = await curve.getBestRouteAndOutput('DAI', 'CRV', '1000');
517
- // OR await curve.getBestPoolAndOutput('0x6B175474E89094C44Da98b954EedeAC495271d0F', '0xD533a949740bb3306d119CC777fa900bA034cd52', '10000');
518
- const expected = await curve.routerExchangeExpected('DAI', 'CRV', '1000');
519
- // OR await curve.exchangeExpected('0x6B175474E89094C44Da98b954EedeAC495271d0F', '0xD533a949740bb3306d119CC777fa900bA034cd52', '10000');
477
+
478
+ await pool.wallet.underlyingCoinBalances();
479
+ // {
480
+ // '0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3': '10000.0',
481
+ // '0x6b175474e89094c44da98b954eedeac495271d0f': '10000.0',
482
+ // '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48': '10000.0',
483
+ // '0xdac17f958d2ee523a2206206994597c13d831ec7': '10000.0',
484
+ // }
485
+ await pool.wallet.lpTokenBalances();
486
+ // { lpToken: '0.0', gauge: '0.0' }
520
487
 
521
- console.log(route, output, expected);
522
- // route = [
523
- // {
524
- // poolId: '3pool',
525
- // poolAddress: '0xbEbc44782C7dB0a1A60Cb6fe97d0b483032FF1C7',
526
- // outputCoinAddress: '0xdac17f958d2ee523a2206206994597c13d831ec7',
527
- // i: 0,
528
- // j: 2,
529
- // swapType: 1,
530
- // swapAddress: '0x0000000000000000000000000000000000000000'
531
- // },
532
- // {
533
- // poolId: 'tricrypto2',
534
- // poolAddress: '0xD51a44d3FaE010294C616388b506AcdA1bfAAE46',
535
- // outputCoinAddress: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
536
- // i: 0,
537
- // j: 2,
538
- // swapType: 3,
539
- // swapAddress: '0x0000000000000000000000000000000000000000'
540
- // },
541
- // {
542
- // poolId: 'crveth',
543
- // poolAddress: '0x8301AE4fc9c624d1D396cbDAa1ed877821D7C511',
544
- // outputCoinAddress: '0xd533a949740bb3306d119cc777fa900ba034cd52',
545
- // i: 0,
546
- // j: 1,
547
- // swapType: 3,
548
- // swapAddress: '0x0000000000000000000000000000000000000000'
549
- // }
488
+ await pool.depositBalancedAmounts();
489
+ // [
490
+ // '10000.000000000000000000',
491
+ // '785.167649368248476094',
492
+ // '771.263652',
493
+ // '2234.662927'
550
494
  // ]
551
- //
552
- // output = expected = 378.881631202862354937
553
-
554
- await curve.routerExchange('DAI', 'CRV', '1000')
555
- // OR await curve.exchange('0x6B175474E89094C44Da98b954EedeAC495271d0F', '0xD533a949740bb3306d119CC777fa900bA034cd52', '10000');
556
-
557
- console.log(await curve.getBalances(['DAI', 'CRV']));
558
- // [ '8900.0', '100428.626463428100672494' ]
495
+ await pool.depositExpected([100, 100, 100, 100]);
496
+ // 397.546626854200557344
497
+ await pool.depositBonus([100, 100, 100, 100]);
498
+ // 0.04489060058668274
499
+ await pool.depositIsApproved([100, 100, 100, 100]);
500
+ // false
501
+ await pool.depositApprove([100, 100, 100, 100]);
502
+ // [
503
+ // '0xd3bb4266a9004b4c42d41984d65cce65050a216564dcefa852bbe29f0466bc32',
504
+ // '0xb2e67fb6cc0d4cef18e918bccf85248a30aa5c318220e8c3887f5f936599e639',
505
+ // '0x6d523d348ef1dc24e4a61830476f3c5e4450e8e2c91d903f9e0272efc73f5af8',
506
+ // '0xe2c7bd884b91011791d0e979b9511ca035efee60a5c23b7f5623d490250ca4b2'
507
+ // ]
508
+ await pool.deposit(['100', '100', '100', '100'], 0.1); // slippage = 0.1 %
509
+ // 0x8202a2fd645d6b9bc2c6f47aa3475d61bcfd5905def125e8287cb47f3f86db75
510
+
511
+ // {
512
+ // '0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3': '9900.0',
513
+ // '0x6b175474e89094c44da98b954eedeac495271d0f': '9900.0',
514
+ // '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48': '9900.0',
515
+ // '0xdac17f958d2ee523a2206206994597c13d831ec7': '9900.0',
516
+ // }
517
+ // { lpToken: '397.465346370726773487', gauge: '0.0' }
518
+
519
+
520
+ // --- WRAPPED ---
521
+
522
+
523
+ await pool.wallet.wrappedCoinBalances();
524
+ // {
525
+ // '0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3': '9900.0',
526
+ // '0x6c3f90f043a72fa612cbac8115ee7e52bde6e490': '100000.0'
527
+ // }
528
+ await pool.wallet.lpTokenBalances();
529
+ // { lpToken: '397.465346370726773487', gauge: '0.0' }
530
+
531
+ await pool.depositWrappedBalancedAmounts();
532
+ // [ '9900.000000000000000000', '3674.037213475177850341' ]
533
+ await pool.depositWrappedExpected(['100', '100']);
534
+ // 200.853415578798484973
535
+ await pool.depositWrappedBonus([100, 100]);
536
+ // 0.5057286575144729
537
+ await pool.depositWrappedIsApproved([100, 100]);
538
+ // false
539
+ await pool.depositWrappedApprove([100, 100]);
540
+ // [
541
+ // '0xe8eb519833d417dcd8da1ee3c4fcadf30dece560b7e1977a5f78c995f8e72b4b',
542
+ // '0xd7d02b26a052f755bed033a880745ff58775d4668d7620042b6e5973e90ba574'
543
+ // ]
544
+ await pool.depositWrapped([100, 100], 0.1); // slippage = 0.1 %
545
+ // 0x78b943a9a1082cd07ddb0225b070e934740448bfa10444b00cd00e7368ad0601
546
+
547
+ // {
548
+ // '0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3': '9800.0',
549
+ // '0x6c3f90f043a72fa612cbac8115ee7e52bde6e490': '99900.0'
550
+ // }
551
+ // { lpToken: '598.300246031617065027', gauge: '0.0' }
559
552
  })()
560
553
  ```
561
554
 
562
- ### Single-pool exchange
563
-
555
+ ### Staking
564
556
  ```ts
565
- import curve from "@curvefi/api";
566
-
567
557
  (async () => {
568
- await curve.init('JsonRpc', {}, { gasPrice: 0, maxFeePerGas: 0, maxPriorityFeePerGas: 0, chainId: 1 });
569
-
570
- console.log(await curve.getBalances(['DAI', 'USDC']));
571
- // [ '1000.0', '0.0' ]
558
+ await curve.init('JsonRpc', {}, { gasPrice: 0 });
572
559
 
573
- const { poolAddress, output } = await curve.getBestPoolAndOutput('DAI', 'USDC', '100');
574
- // OR await curve.getBestPoolAndOutput('0x6B175474E89094C44Da98b954EedeAC495271d0F', '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', '100');
575
- const expected = await curve.exchangeExpected('DAI', 'USDC', '100');
576
- // OR await curve.exchangeExpected('0x6B175474E89094C44Da98b954EedeAC495271d0F', '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', '100');
577
-
578
- console.log(poolAddress, output, expected);
579
- // poolAddress = 0x79a8C46DeA5aDa233ABaFFD40F3A0A2B1e5A4F27, output = expected = 100.071099
560
+ const pool = curve.getPool('mim');
561
+
562
+ const balances = await pool.wallet.lpTokenBalances() as IDict<string>;
563
+ // { lpToken: '598.300246031617065027', gauge: '0.0' }
564
+
565
+ await pool.stakeIsApproved(balances.lpToken);
566
+ // false
567
+ await pool.stakeApprove(balances.lpToken);
568
+ // [
569
+ // '0x9d5011800bb4afe82b3a97a56a55762f11b5e999c1de908f38a66f7425c0b0d0'
570
+ // ]
571
+ await pool.stake(balances.lpToken);
572
+ // 0xf884b798be15295f090476eb9d13c46d09d8c05dc0e05d822a34120fa641f645
580
573
 
581
- await curve.exchange('DAI', 'USDC', '10')
582
- // OR await curve.exchange('0x6B175474E89094C44Da98b954EedeAC495271d0F', '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', '100');
574
+ await pool.wallet.lpTokenBalances();
575
+ // { lpToken: '0.0', gauge: '598.300246031617065027' }
576
+
577
+ await pool.unstake(balances.lpToken);
578
+ // 0x802b96921f2fabb433e02489315850a81c1a2e180cd05d84a6d71ce9fc624020
583
579
 
584
- console.log(await curve.getBalances(['DAI', 'USDC']));
585
- // [ '900.0', '100.071098' ]
580
+ await pool.wallet.lpTokenBalances();
581
+ // { lpToken: '598.300246031617065027', gauge: '0.0' }
586
582
  })()
587
583
  ```
588
584
 
589
- ### Cross-Asset Exchange
590
-
585
+ ### Withdraw
591
586
  ```ts
592
- import curve from "@curvefi/api";
593
-
594
587
  (async () => {
595
- await curve.init('JsonRpc', {}, { gasPrice: 0, maxFeePerGas: 0, maxPriorityFeePerGas: 0, chainId: 1 });
588
+ await curve.init('JsonRpc', {}, { gasPrice: 0, maxFeePerGas: 0, maxPriorityFeePerGas: 0 });
596
589
 
597
- console.log(await curve.getBalances(['DAI', 'WBTC']));
598
- // [ '1000.0', '0.0' ]
590
+ const pool = curve.getPool('mim');
599
591
 
600
- console.log(await curve.crossAssetExchangeAvailable('DAI', 'WBTC'));
601
- // true
602
- console.log(await curve.crossAssetExchangeOutputAndSlippage('DAI', 'WBTC', '500'));
603
- // { output: '0.01207752', slippage: 0.0000016559718476472085 }
604
- console.log(await curve.crossAssetExchangeExpected('DAI', 'WBTC', '500'));
605
- // 0.01207752
592
+ // --- UNDERLYING ---
606
593
 
607
- const tx = await curve.crossAssetExchange('DAI', 'WBTC', '500');
608
- console.log(tx);
609
- // 0xf452fbb49d9e4ba8976dc6762bcfcc87d5e164577c21f3fa087ae4fe275d1710
594
+ await pool.wallet.underlyingCoinBalances();
595
+ // {
596
+ // '0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3': '9800.0',
597
+ // '0x6b175474e89094c44da98b954eedeac495271d0f': '9900.0',
598
+ // '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48': '9900.0',
599
+ // '0xdac17f958d2ee523a2206206994597c13d831ec7': '9900.0'
600
+ // }
601
+ await pool.wallet.lpTokenBalances();
602
+ // { lpToken: '598.300246031617065027', gauge: '0.0' }
610
603
 
611
- console.log(await curve.getBalances(['DAI', 'WBTC']));
612
- // [ '500.0', '0.01207752' ]
613
- })()
614
- ```
604
+ await pool.withdrawExpected(10);
605
+ // [
606
+ // '7.299072252784503555',
607
+ // '0.573101727634383933',
608
+ // '0.562953',
609
+ // '1.631103'
610
+ // ]
611
+ await pool.withdrawIsApproved(10);
612
+ // false
613
+ await pool.withdrawApprove(10);
614
+ // [
615
+ // '0xbc72529f860eab00ae6e72234a68c48c9bfa8e093813ecf6796d46de419badca'
616
+ // ]
617
+ await pool.withdraw('10', 0.1); // slippage = 0.1 %
618
+ // 0x4dc3add45566e0f3404c2fa0b7aa27203688833ffbe9b985f36bf785d19e4fad
615
619
 
616
- ## Boosting
617
- ```ts
618
- import curve from "@curvefi/api";
620
+ // {
621
+ // '0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3': '9807.299072252784503555',
622
+ // '0x6b175474e89094c44da98b954eedeac495271d0f': '9900.573101727634383932',
623
+ // '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48': '9900.562953',
624
+ // '0xdac17f958d2ee523a2206206994597c13d831ec7': '9901.631102'
625
+ // }
626
+ // { lpToken: '588.300246031617065027', gauge: '0.0' }
619
627
 
620
- (async () => {
621
- await curve.init('JsonRpc', {}, { gasPrice: 0, maxFeePerGas: 0, maxPriorityFeePerGas: 0, chainId: 1 });
628
+ // --- WRAPPED ---
622
629
 
623
- console.log(await curve.boosting.getCrv());
624
- // 100000.0
630
+ await pool.wallet.wrappedCoinBalances();
631
+ // {
632
+ // '0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3': '9807.299072252784503555',
633
+ // '0x6c3f90f043a72fa612cbac8115ee7e52bde6e490': '99900.0'
634
+ // }
635
+ await pool.wallet.lpTokenBalances();
636
+ // { lpToken: '588.300246031617065027', gauge: '0.0' }
625
637
 
626
- await curve.boosting.createLock('1000', 365);
627
- // 99000.0 CRV
638
+ await pool.withdrawWrappedExpected('10');
639
+ // [ '7.299072252784503555', '2.708796226980363129' ]
640
+ await pool.withdrawWrapped(10); // slippage = 0.5 % by default
641
+ // 0x61f7b602bc52d20fdf473c8dd8cbea12f11918fdbd74c496235887c70321395a
628
642
 
629
- console.log(await curve.boosting.getLockedAmountAndUnlockTime());
630
- // { lockedAmount: '1000.0', unlockTime: 1657152000000 }
631
- console.log(await curve.boosting.getVeCrv());
632
- // 248.193183980208499221
633
- console.log(await curve.boosting.getVeCrvPct());
634
- // 0.000006190640156035
635
-
636
- await curve.boosting.increaseAmount('500');
637
-
638
- // 98500.0 CRV
639
- // { lockedAmount: '1500.0', unlockTime: 1657152000000 }
640
- // 372.289692732093137414 veCRV
641
- // 0.000009285953543912 veCRV %
642
-
643
-
644
- await curve.boosting.increaseUnlockTime(365);
645
-
646
- // { lockedAmount: '1500.0', unlockTime: 1688601600000 }
647
- // 746.262271689452535192 veCRV
648
- // 0.000018613852077810 veCRV %
643
+ // {
644
+ // '0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3': '9814.59814450556900711',
645
+ // '0x6c3f90f043a72fa612cbac8115ee7e52bde6e490': '99902.708796226980363129'
646
+ // }
647
+ // { lpToken: '578.300246031617065027', gauge: '0.0' }
649
648
  })()
650
649
  ```
651
650
 
652
- ## Allowance and approve
653
- ### General methods
654
- ```ts
655
- const spender = "0xbEbc44782C7dB0a1A60Cb6fe97d0b483032FF1C7" // 3pool swap address
656
-
657
- await curve.getAllowance(["DAI", "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"], curve.signerAddress, spender)
658
- // [ '0.0', '0.0' ]
659
- await curve.hasAllowance(["DAI", "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"], ['1000', '1000'], curve.signerAddress, spender)
660
- // false
661
- await curve.ensureAllowance(["DAI", "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"], ['1000', '1000'], spender)
662
- // [
663
- // '0xb0cada2a2983dc0ed85a26916d32b9caefe45fecde47640bd7d0e214ff22aed3',
664
- // '0x00ea7d827b3ad50ce933e96c579810cd7e70d66a034a86ec4e1e10005634d041'
665
- // ]
666
-
667
- ```
668
-
669
- ### Pools
651
+ ### Withdraw imbalance
670
652
  ```ts
671
- const pool = new curve.Pool('usdn');
672
-
673
- // --- Add Liquidity ---
674
-
675
- await pool.addLiquidityIsApproved(["1000", "1000", "1000", "1000"])
676
- // false
677
- await pool.addLiquidityApprove(["1000", "1000", "1000", "1000"])
678
- // [
679
- // '0xbac4b0271ad340488a8135dda2f9adf3e3c402361b514f483ba2b7e9cafbdc21',
680
- // '0x39fe196a52d9fb649f9c099fbd40ae773d28c457195c878ecdb7cd05be0f6512',
681
- // '0xf39ebfb4b11434b879f951a08a1c633a038425c35eae09b2b7015816d068de3c',
682
- // '0xa8b1631384da247efe1987b56fe010b852fc1d38e4d71d204c7dc5448a3a6c96'
683
- // ]
684
-
685
-
686
- // --- Add Liquidity Wrapped ---
687
-
688
- await pool.addLiquidityWrappedIsApproved(["1000", "1000"])
689
- // false
690
- await pool.addLiquidityWrappedApprove(["1000", "1000"])
691
- // [
692
- // '0xe486bfba5e9e8190be580ad528707876136e6b0c201e228db0f3bd82e51619fa',
693
- // '0xd56f7d583b20f4f7760510cc4310e3651f7dab8c276fe3bcde7e7200d65ed0dd'
694
- // ]
695
-
696
-
697
- // --- Remove Liquidity ---
653
+ (async () => {
654
+ await curve.init('JsonRpc', {}, { gasPrice: 0, maxFeePerGas: 0, maxPriorityFeePerGas: 0 });
698
655
 
699
- await pool.removeLiquidityIsApproved("1000")
700
- await pool.removeLiquidityApprove("1000")
656
+ const pool = curve.getPool('mim');
701
657
 
658
+ // --- UNDERLYING ---
702
659
 
703
- // --- Remove Liquidity Imbalance ---
660
+ await pool.wallet.underlyingCoinBalances();
661
+ // {
662
+ // '0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3': '9814.59814450556900711',
663
+ // '0x6b175474e89094c44da98b954eedeac495271d0f': '9900.573101727634383932',
664
+ // '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48': '9900.562953',
665
+ // '0xdac17f958d2ee523a2206206994597c13d831ec7': '9901.631102'
666
+ // }
667
+ await pool.wallet.lpTokenBalances();
668
+ // { lpToken: '578.300246031617065027', gauge: '0.0' }
669
+
670
+ await pool.withdrawImbalanceExpected(['10', '10', '10', '10']);
671
+ // 39.754662629184493064
672
+ await pool.withdrawImbalanceBonus(['10', '10', '10', '10']);
673
+ // -0.04487324436377509
674
+ await pool.withdrawImbalanceIsApproved(['10', '10', '10', '10']);
675
+ // true
676
+ await pool.withdrawImbalanceApprove(['10', '10', '10', '10']);
677
+ // []
678
+ await pool.withdrawImbalance(['10', '10', '10', '10'], 0.1); // slippage = 0.1 %
679
+ // 0xfba4dfb47cd5692ef01608e7b04439ec211cb28430b488e60fee5cadb77ac321
704
680
 
705
- await pool.removeLiquidityImbalanceIsApproved(["1000", "1000", "1000", "1000"])
706
- await pool.removeLiquidityImbalanceApprove(["1000", "1000", "1000", "1000"])
681
+ // {
682
+ // '0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3': '9824.59814450556900711',
683
+ // '0x6b175474e89094c44da98b954eedeac495271d0f': '9910.573101727634383932',
684
+ // '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48': '9910.562953',
685
+ // '0xdac17f958d2ee523a2206206994597c13d831ec7': '9911.631102'
686
+ // }
687
+ // { lpToken: '538.537454267261447723', gauge: '0.0' }
707
688
 
689
+ // --- WRAPPED ---
708
690
 
709
- // --- Remove Liquidity One Coin ---
691
+ await pool.wallet.wrappedCoinBalances();
692
+ // {
693
+ // '0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3': '9824.59814450556900711',
694
+ // '0x6c3f90f043a72fa612cbac8115ee7e52bde6e490': '99902.708796226980363129'
695
+ // }
696
+ await pool.wallet.lpTokenBalances();
697
+ // { lpToken: '538.537454267261447723', gauge: '0.0' }
710
698
 
711
- await pool.removeLiquidityOneCoinIsApproved("1000")
712
- await pool.removeLiquidityOneCoinApprove("1000")
699
+ await pool.withdrawImbalanceWrappedExpected(['10', '10']);
700
+ // 20.085341556879117658
701
+ await pool.withdrawImbalanceWrappedBonus(['10', '10']);
702
+ // -0.5031837243343519
703
+ await pool.withdrawImbalanceWrapped(['10', '10'], 0.1); // slippage = 0.1 %
704
+ // 0xb9e6174695152d7dbe274fec969ffd2d62c994cdbf58455e9954cddd0a8f7189
713
705
 
706
+ // {
707
+ // '0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3': '9834.59814450556900711',
708
+ // '0x6c3f90f043a72fa612cbac8115ee7e52bde6e490': '99912.708796226980363129'
709
+ // }
710
+ // { lpToken: '518.450261119283204342', gauge: '0.0' }
711
+ })()
712
+ ```
714
713
 
715
- // --- Gauge Deposit ---
714
+ ### Withdraw one coin
715
+ ```ts
716
+ (async () => {
717
+ await curve.init('JsonRpc', {}, { gasPrice: 0, maxFeePerGas: 0, maxPriorityFeePerGas: 0 });
716
718
 
717
- await pool.gaugeDepositIsApproved("1000")
718
- await pool.gaugeDepositApprove("1000")
719
+ const pool = curve.getPool('mim');
719
720
 
721
+
722
+ // --- UNDERLYING ---
720
723
 
721
- // --- Exchange ---
724
+
725
+ await pool.wallet.underlyingCoinBalances();
726
+ // {
727
+ // '0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3': '9834.59814450556900711',
728
+ // '0x6b175474e89094c44da98b954eedeac495271d0f': '9910.573101727634383932',
729
+ // '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48': '9910.562953',
730
+ // '0xdac17f958d2ee523a2206206994597c13d831ec7': '9911.631102'
731
+ // }
732
+ await pool.wallet.lpTokenBalances();
733
+ // { lpToken: '518.450261119283204342', gauge: '0.0' }
734
+
735
+ const underlyingExpected = await pool.withdrawOneCoinExpected(10, 'DAI');
736
+ // OR const underlyingExpected = await pool.withdrawOneCoinExpected('10', '0x6B175474E89094C44Da98b954EedeAC495271d0F');
737
+ // OR const underlyingExpected = await pool.withdrawOneCoinExpected('10', 1);
738
+ console.log(underlyingExpected);
739
+ // 10.053583529099204888
740
+ await pool.withdrawOneCoinBonus(10, 'DAI');
741
+ // -0.1256449500769996
742
+ await pool.withdrawOneCoinIsApproved(10);
743
+ // true
744
+ await pool.withdrawOneCoinApprove(10);
745
+ // []
746
+ const underlyingTx = await pool.withdrawOneCoin(10, 'DAI', 0.1);
747
+ // OR const underlyingTx = await pool.withdrawOneCoin('10', '0x6B175474E89094C44Da98b954EedeAC495271d0F');
748
+ // OR const underlyingTx = await pool.withdrawOneCoin('10', 1);
749
+ console.log(underlyingTx);
750
+ //0x5b4c5ec49f53719b5440355439a2cad445935895b5c1034ae6092ebbe17f0328
722
751
 
723
- await pool.exchangeIsApproved("DAI", "1000")
724
- await pool.exchangeApprove("DAI", "1000")
752
+ // {
753
+ // '0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3': '9834.59814450556900711',
754
+ // '0x6b175474e89094c44da98b954eedeac495271d0f': '9920.62668525673358882',
755
+ // '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48': '9910.562953',
756
+ // '0xdac17f958d2ee523a2206206994597c13d831ec7': '9911.631102'
757
+ // }
758
+ // { lpToken: '508.450261119283204342', gauge: '0.0' }
725
759
 
760
+
761
+ // --- WRAPPED ---
726
762
 
727
- // --- Exchange Wrapped ---
763
+
764
+ await pool.wallet.wrappedCoinBalances();
765
+ // {
766
+ // '0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3': '9834.59814450556900711',
767
+ // '0x6c3f90f043a72fa612cbac8115ee7e52bde6e490': '99912.708796226980363129'
768
+ // }
769
+ await pool.wallet.lpTokenBalances();
770
+ // { lpToken: '508.450261119283204342', gauge: '0.0' }
771
+
772
+ const wrappedExpected = await pool.withdrawOneCoinWrappedExpected('10', 'MIM');
773
+ // OR const wrappedExpected = await pool.withdrawOneCoinWrappedExpected('10', '0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3');
774
+ // OR const wrappedExpected = await pool.withdrawOneCoinWrappedExpected('10', 0);
775
+ console.log(wrappedExpected)
776
+ // 10.066854269984687383
777
+ await pool.withdrawOneCoinWrappedBonus(10, 'MIM');
778
+ // 0.5893939242941038
779
+ const wrappedTx = await pool.withdrawOneCoinWrapped('10', 'MIM', 0.1);
780
+ // OR await pool.withdrawOneCoinWrapped('10', '0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3');
781
+ // OR await pool.withdrawOneCoinWrapped('10', 0);
782
+ console.log(wrappedTx);
783
+ // 0xf82af519a3e4f0743c89fd1e93982934f1a2dde721221b00dd474f6b0a24f7f2
728
784
 
729
- await pool.exchangeWrappedIsApproved("0x6c3F90f043a72FA612cbac8115EE7e52BDe6E490", "1000")
730
- await pool.exchangeWrappedApprove("0x6c3F90f043a72FA612cbac8115EE7e52BDe6E490", "1000")
785
+ // {
786
+ // '0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3': '9844.664998775553694493',
787
+ // '0x6c3f90f043a72fa612cbac8115ee7e52bde6e490': '99912.708796226980363129'
788
+ // }
789
+ // { lpToken: '498.450261119283204342', gauge: '0.0' }
790
+ })()
731
791
  ```
732
- **Note.** Removing wrapped does not require approve.
733
792
 
734
- ### Exchange
793
+ ### Swap
735
794
  ```ts
736
- // Router
737
- await curve.routerExchangeisApproved("DAI", "0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3", "1000"); // DAI -> MIM
738
- await curve.routerExchangeApprove("DAI", "0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3", "1000"); // DAI -> MIM
795
+ (async () => {
796
+ await curve.init('JsonRpc', {}, { gasPrice: 0, maxFeePerGas: 0, maxPriorityFeePerGas: 0 });
739
797
 
740
- // Straight
741
- await curve.exchangeisApproved("DAI", "0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3", "1000"); // DAI -> MIM
742
- await curve.exchangeApprove("DAI", "0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3", "1000"); // DAI -> MIM
798
+ const pool = curve.getPool('mim');
743
799
 
744
- // Cross-Asset
745
- await curve.crossAssetExchangeIsApproved("DAI", "1000");
746
- await curve.crossAssetExchangeApprove("DAI", "1000");
747
- ```
800
+
801
+ // --- UNDERLYING ---
748
802
 
749
- ### Boosting
750
- ```ts
751
- await curve.boosting.isApproved('1000')
752
- await curve.boosting.approve('1000')
753
- ```
803
+
804
+ await pool.wallet.underlyingCoinBalances();
805
+ // {
806
+ // '0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3': '9844.882755243317396535',
807
+ // '0x6b175474e89094c44da98b954eedeac495271d0f': '9930.611305190224186298',
808
+ // '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48': '9910.562953',
809
+ // '0xdac17f958d2ee523a2206206994597c13d831ec7': '9911.631102'
810
+ // }
754
811
 
755
- ## Gas estimation
756
- Every non-constant method has corresponding gas estimation method. Rule: ```obj.method -> obj.estimateGas.method```
812
+ const underlyingExpected = await pool.swapExpected('MIM','DAI', 10);
813
+ // OR const underlyingExpected = await pool.swapExpected('0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3', '0x6B175474E89094C44Da98b954EedeAC495271d0F', '10');
814
+ // OR const underlyingExpected = await pool.swapExpected(0, 1, '10');
815
+ console.log(underlyingExpected);
816
+ // 9.984619933234026875
817
+ await pool.swapIsApproved('MIM', 10);
818
+ // true
819
+ await pool.swapApprove('MIM', 10);
820
+ // []
821
+ const swapTx = await pool.swap('MIM','DAI', 10, 0.1);
822
+ // OR const swapTx = await pool.swap('0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3', '0x6B175474E89094C44Da98b954EedeAC495271d0F', '10');
823
+ // OR const swapTx = await pool.swap(0, 1, 10);
824
+ console.log(swapTx);
825
+ // 0xbcd0d1248e6a8571c2a45d4f7095bc1fece479b6e87219cdd7d239c4e1e0ca32
757
826
 
758
- **Examples**
759
- ```ts
760
- const spender = "0xbEbc44782C7dB0a1A60Cb6fe97d0b483032FF1C7" // 3pool swap address
761
- await curve.estimateGas.ensureAllowance(["DAI", "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"], curve.signerAddress, spender);
827
+ // {
828
+ // '0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3': '9834.882755243317396535',
829
+ // '0x6b175474e89094c44da98b954eedeac495271d0f': '9940.595925123458213173',
830
+ // '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48': '9910.562953',
831
+ // '0xdac17f958d2ee523a2206206994597c13d831ec7': '9911.631102'
832
+ // }
762
833
 
763
- const pool = new curve.Pool('usdn');
764
- await pool.estimateGas.addLiquidityApprove(["1000", "1000", "1000", "1000"])
765
- await pool.estimateGas.addLiquidity(["1000", "1000", "1000", "1000"])
834
+
835
+ // --- WRAPPED ---
766
836
 
767
- await curve.estimateGas.crossAssetExchange('DAI', "WBTC", "1000", 0.01)
837
+
838
+ await pool.wallet.wrappedCoinBalances();
839
+ // {
840
+ // '0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3': '9834.882755243317396535',
841
+ // '0x6c3f90f043a72fa612cbac8115ee7e52bde6e490': '99902.708796226980363129'
842
+ // }
768
843
 
769
- await curve.boosting.estimateGas.createLock('1000', 365)
770
- ```
844
+ const wrappedExpected = await pool.swapWrappedExpected('3crv','MIM', 10);
845
+ // OR const wrappedExpected = await pool.swapWrappedExpected('0x6c3F90f043a72FA612cbac8115EE7e52BDe6E490', '0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3', '10');
846
+ // OR const wrappedExpected = await pool.swapWrappedExpected(1, 0, '10');
847
+ console.log(wrappedExpected);
848
+ // 10.217756467720521951
849
+ await pool.swapWrappedIsApproved('3crv', 10);
850
+ // true
851
+ await pool.swapWrappedApprove('3crv', 10);
852
+ // []
853
+ const swapWrappedTx = await pool.swapWrapped('3crv','MIM', 10, 0.1);
854
+ // OR const swapWrappedTx = await pool.swapWrapped('0x6c3F90f043a72FA612cbac8115EE7e52BDe6E490', '0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3', '10');
855
+ // OR const swapWrappedTx = await pool.swapWrapped(1, 0, '10');
856
+ console.log(swapWrappedTx);
857
+ // 0x59ff5e44f083b57a1f612c1ad5ac7d3fe68b4c753ddd6400ab8bd6437485288c
771
858
 
772
- ## Rewards
773
- ```ts
774
- const pool = new curve.Pool('susd');
775
-
776
- // CRV
777
- console.log(await pool.gaugeClaimableTokens());
778
- // 0.006296257916265276
779
- await pool.gaugeClaimTokens();
780
-
781
- // Additional rewards
782
- console.log(await pool.gaugeClaimableRewards());
783
- // [
784
- // {
785
- // token: '0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F',
786
- // symbol: 'SNX',
787
- // amount: '0.000596325465987726'
788
- // }
789
- // ]
790
- await pool.gaugeClaimRewards();
859
+ // {
860
+ // '0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3': '9845.100511711037918486',
861
+ // '0x6c3f90f043a72fa612cbac8115ee7e52bde6e490': '99892.708796226980363129'
862
+ // }
863
+ })()
791
864
  ```
792
865
 
793
- ## Deposit&Stake
794
- Add liquidity and deposit into gauge in one transaction.
795
-
796
- ### Underlying
866
+ ### Deposit & Stake
797
867
  ```ts
798
868
  (async () => {
869
+ await curve.init('JsonRpc', {}, { gasPrice: 0, maxFeePerGas: 0, maxPriorityFeePerGas: 0 });
870
+
799
871
  const pool = new curve.Pool('compound');
800
- const amounts = ['1000', '1000'];
872
+ const amounts = [1000, 1000];
801
873
 
802
- console.log(await pool.underlyingCoinBalances());
803
- // { DAI: '10000.0', USDC: '10000.0' }
804
- console.log(await pool.lpTokenBalances());
874
+
875
+ // --- UNDERLYING ---
876
+
877
+
878
+ await pool.wallet.underlyingCoinBalances();
879
+ // {
880
+ // '0x6b175474e89094c44da98b954eedeac495271d0f': '10000.0',
881
+ // '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48': '10000.0',
882
+ // }
883
+ await pool.wallet.lpTokenBalances();
805
884
  // { lpToken: '0.0', gauge: '0.0' }
806
885
 
807
- console.log(await pool.depositAndStakeExpected(amounts));
886
+ await pool.depositAndStakeExpected(amounts);
808
887
  // 1820.604572902286288394
809
- console.log(await pool.depositAndStakeSlippage(amounts));
810
- // -0.0000036435051742755193
811
-
812
- console.log(await pool.depositAndStakeIsApproved(amounts));
888
+ await pool.depositAndStakeBonus(amounts);
889
+ // 0.0030482584681188
890
+ await pool.depositAndStakeIsApproved(amounts);
813
891
  // false
814
-
815
892
  await pool.depositAndStakeApprove(amounts);
893
+ // [
894
+ // '0xb363c95fb8e63f724d6a05dfa756ede38132ce3fc8faf80306d925856996669c',
895
+ // '0x53d01fd54fb607091c67f8b39ff9e2e7670396d831b856b1979caaa6ac6ea37b',
896
+ // '0xd69ca27c30fa6e5ba927d0382987f142895481710439dae358a1daeeb01c7248'
897
+ // ]
816
898
  await pool.depositAndStake(amounts);
899
+ // 0x3ec53842120be75f51e907803da844f4d3e8435766e0c25a40700085ed5b56c4
817
900
 
818
- console.log(await pool.underlyingCoinBalances());
819
- // { DAI: '9000.0', USDC: '9000.0' }
820
- console.log(await pool.lpTokenBalances());
901
+ // {
902
+ // '0x6b175474e89094c44da98b954eedeac495271d0f': '9000.0',
903
+ // '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48': '9000.0',
904
+ // }
821
905
  // { lpToken: '0.0', gauge: '1820.556829935710883568' }
822
- })();
823
- ```
824
-
825
- ### Wrapped
826
- ```ts
827
- (async () => {
828
- const pool = new curve.Pool('compound');
829
- const amounts = ['1000', '1000'];
830
906
 
831
- console.log(await pool.coinBalances());
832
- // { cDAI: '10000.0', cUSDC: '10000.0' }
833
- console.log(await pool.lpTokenBalances());
834
- // { lpToken: '0.0', gauge: '1820.556829935710883568' }
835
907
 
836
- console.log(await pool.depositAndStakeWrappedExpected(amounts));
837
- // 40.328408669183101673
838
- console.log(await pool.depositAndStakeWrappedSlippage(amounts));
839
- // -0.0020519915272297325
908
+ // --- WRAPPED ---
909
+
910
+
911
+ await pool.wallet.wrappedCoinBalances();
912
+ // {
913
+ // '0x5d3a536e4d6dbd6114cc1ead35777bab948e3643': '10000.0',
914
+ // '0x39aa39c021dfbae8fac545936693ac917d5e7563': '10000.0'
915
+ // }
916
+ await pool.wallet.lpTokenBalances();
917
+ // { lpToken: '0.0', gauge: '1820.556829935710883568' }
840
918
 
841
- console.log(await pool.depositAndStakeWrappedIsApproved(amounts));
919
+ await pool.depositAndStakeWrappedExpected(amounts);
920
+ // 40.328408669183101673
921
+ await pool.depositAndStakeWrappedPriceImpact(amounts);
922
+ // 0.46040576921447873
923
+ await pool.depositAndStakeWrappedIsApproved(amounts);
842
924
  // false
843
-
844
925
  await pool.depositAndStakeWrappedApprove(amounts);
926
+ // [
927
+ // '0x53035c46f877ed4d156aff5aee0f8e04c0e0701e40651e9e55f41976919b093d',
928
+ // '0x4743386669a6a21fbe09805ae50e281db22cf518d681ee1e5d0f81a1d761e79b',
929
+ // '0x8580b6bd88dfd0eeab77480e50d82ba14922fd4b431b0123a7ac425236e1db3a'
930
+ // ]
845
931
  await pool.depositAndStakeWrapped(amounts);
932
+ // 0xdb73e3176ab876806f99f71d70ad6ee93d7a865c15faa062ebaba2011b94b315
846
933
 
847
- console.log(await pool.coinBalances());
848
- // { cDAI: '9000.0', cUSDC: '9000.0' }
849
- console.log(await pool.lpTokenBalances());
934
+ // {
935
+ // '0x5d3a536e4d6dbd6114cc1ead35777bab948e3643': '9000.0',
936
+ // '0x39aa39c021dfbae8fac545936693ac917d5e7563': '9000.0'
937
+ // }
850
938
  // { lpToken: '0.0', gauge: '1860.884096082215274556' }
851
939
  })();
852
940
  ```
853
941
 
854
- ## Factory
855
- All the methods above can be used for factory pools. It's only needed to fetch them.
942
+
943
+ ## Router
856
944
  ```ts
857
945
  import curve from "@curvefi/api";
858
946
 
859
947
  (async () => {
860
- await curve.init('JsonRpc', {}, { chainId: 1 });
861
- await curve.fetchFactoryPools();
862
- await curve.fetchCryptoFactoryPools();
948
+ await curve.init('JsonRpc', {}, { gasPrice: 0, maxFeePerGas: 0, maxPriorityFeePerGas: 0 });
949
+
950
+ await curve.getBalances(['DAI', 'CRV']);
951
+ // [ '9900.0', '100049.744832225238317557' ]
952
+
953
+ const { route, output } = await curve.router.getBestRouteAndOutput('DAI', 'CRV', '1000');
954
+ // OR await curve.router.getBestPoolAndOutput('0x6B175474E89094C44Da98b954EedeAC495271d0F', '0xD533a949740bb3306d119CC777fa900bA034cd52', '10000');
955
+ const expected = await curve.router.expected('DAI', 'CRV', '1000');
956
+ // OR await curve.router.expected('0x6B175474E89094C44Da98b954EedeAC495271d0F', '0xD533a949740bb3306d119CC777fa900bA034cd52', '10000');
863
957
 
864
- const factoryPools = curve.getFactoryPoolList();
958
+ route, output, expected;
959
+ // route = [
960
+ // {
961
+ // poolId: '3pool',
962
+ // poolAddress: '0xbEbc44782C7dB0a1A60Cb6fe97d0b483032FF1C7',
963
+ // outputCoinAddress: '0xdac17f958d2ee523a2206206994597c13d831ec7',
964
+ // i: 0,
965
+ // j: 2,
966
+ // swapType: 1,
967
+ // swapAddress: '0x0000000000000000000000000000000000000000'
968
+ // },
969
+ // {
970
+ // poolId: 'tricrypto2',
971
+ // poolAddress: '0xD51a44d3FaE010294C616388b506AcdA1bfAAE46',
972
+ // outputCoinAddress: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
973
+ // i: 0,
974
+ // j: 2,
975
+ // swapType: 3,
976
+ // swapAddress: '0x0000000000000000000000000000000000000000'
977
+ // },
978
+ // {
979
+ // poolId: 'crveth',
980
+ // poolAddress: '0x8301AE4fc9c624d1D396cbDAa1ed877821D7C511',
981
+ // outputCoinAddress: '0xd533a949740bb3306d119cc777fa900ba034cd52',
982
+ // i: 0,
983
+ // j: 1,
984
+ // swapType: 3,
985
+ // swapAddress: '0x0000000000000000000000000000000000000000'
986
+ // }
987
+ // ]
988
+ //
989
+ // output = expected = 378.881631202862354937
990
+
991
+ await curve.router.isApproved('DAI', 1000);
992
+ // false
993
+ await curve.router.approve('DAI', 1000);
865
994
  // [
866
- // 'factory-v2-0', 'factory-v2-1', 'factory-v2-2', 'factory-v2-3',
867
- // 'factory-v2-4', 'factory-v2-5', 'factory-v2-6', 'factory-v2-7',
868
- // 'factory-v2-8', 'factory-v2-9', 'factory-v2-10', 'factory-v2-11',
869
- // 'factory-v2-12', 'factory-v2-13', 'factory-v2-14', 'factory-v2-15',
870
- // 'factory-v2-16', 'factory-v2-17', 'factory-v2-18', 'factory-v2-19',
871
- // 'factory-v2-20', 'factory-v2-21', 'factory-v2-22', 'factory-v2-23',
872
- // 'factory-v2-24', 'factory-v2-25', 'factory-v2-26', 'factory-v2-27',
873
- // 'factory-v2-28', 'factory-v2-29', 'factory-v2-30', 'factory-v2-31',
874
- // 'factory-v2-32', 'factory-v2-33', 'factory-v2-34', 'factory-v2-35',
875
- // 'factory-v2-36', 'factory-v2-37', 'factory-v2-38', 'factory-v2-39',
876
- // 'factory-v2-40', 'factory-v2-41', 'factory-v2-42', 'factory-v2-43',
877
- // 'factory-v2-44', 'factory-v2-45', 'factory-v2-46', 'factory-v2-47',
878
- // 'factory-v2-48', 'factory-v2-49', 'factory-v2-50', 'factory-v2-51',
879
- // 'factory-v2-52', 'factory-v2-53', 'factory-v2-54', 'factory-v2-55',
880
- // 'factory-v2-56', 'factory-v2-57', 'factory-v2-58', 'factory-v2-59',
881
- // 'factory-v2-60', 'factory-v2-61', 'factory-v2-62', 'factory-v2-63',
882
- // 'factory-v2-64', 'factory-v2-65', 'factory-v2-66', 'factory-v2-67',
883
- // 'factory-v2-68', 'factory-v2-69', 'factory-v2-70', 'factory-v2-71',
884
- // 'factory-v2-72', 'factory-v2-73', 'factory-v2-74', 'factory-v2-75',
885
- // 'factory-v2-76', 'factory-v2-77', 'factory-v2-78', 'factory-v2-79',
886
- // 'factory-v2-80', 'factory-v2-81', 'factory-v2-82', 'factory-v2-83',
887
- // 'factory-v2-84', 'factory-v2-85', 'factory-v2-86', 'factory-v2-87',
888
- // 'factory-v2-88', 'factory-v2-89', 'factory-v2-90', 'factory-v2-91',
889
- // 'factory-v2-92', 'factory-v2-93', 'factory-v2-94', 'factory-v2-95',
890
- // 'factory-v2-96', 'factory-v2-97', 'factory-v2-98', 'factory-v2-99',
995
+ // '0xc111e471715ae6f5437e12d3b94868a5b6542cd7304efca18b5782d315760ae5'
891
996
  // ]
997
+ const swapTx = await curve.router.swap('DAI', 'CRV', '1000');
998
+ // OR const swapTx = await curve.router.swap('0x6B175474E89094C44Da98b954EedeAC495271d0F', '0xD533a949740bb3306d119CC777fa900bA034cd52', '10000');
999
+ console.log(swapTx);
1000
+ // 0xc7ba1d60871c0295ac5471bb602c37ec0f00a71543b3a041308ebd91833f26ba
892
1001
 
893
- const cryptoFactoryPools = curve.getCryptoFactoryPoolList()
1002
+ await curve.getBalances(['DAI', 'CRV']);
1003
+ // [ '8900.0', '100428.626463428100672494' ]
1004
+ })()
1005
+ ```
1006
+
1007
+ ## Boosting
1008
+ ```ts
1009
+ import curve from "@curvefi/api";
1010
+
1011
+ (async () => {
1012
+ await curve.init('JsonRpc', {}, { gasPrice: 0, maxFeePerGas: 0, maxPriorityFeePerGas: 0 });
1013
+
1014
+ await curve.boosting.getCrv();
1015
+ // 100000.0
1016
+ await curve.boosting.getLockedAmountAndUnlockTime();
1017
+ // { lockedAmount: '0.0', unlockTime: 0 }
1018
+ await curve.boosting.getVeCrv();
1019
+ // 0.0
1020
+ await curve.boosting.getVeCrvPct();
1021
+ // 0.000000000000000000
1022
+
1023
+ curve.boosting.isApproved(1000);
1024
+ // false
1025
+ curve.boosting.approve(1000);
894
1026
  // [
895
- // 'factory-crypto-0', 'factory-crypto-1',
896
- // 'factory-crypto-2', 'factory-crypto-3',
897
- // 'factory-crypto-4', 'factory-crypto-5',
898
- // 'factory-crypto-6', 'factory-crypto-7',
899
- // 'factory-crypto-8', 'factory-crypto-9',
900
- // 'factory-crypto-10', 'factory-crypto-11',
901
- // 'factory-crypto-12', 'factory-crypto-13',
902
- // 'factory-crypto-14', 'factory-crypto-15',
903
- // 'factory-crypto-16', 'factory-crypto-17',
904
- // 'factory-crypto-18', 'factory-crypto-19',
905
- // 'factory-crypto-20', 'factory-crypto-21',
906
- // 'factory-crypto-22', 'factory-crypto-23',
907
- // 'factory-crypto-24', 'factory-crypto-25',
908
- // 'factory-crypto-26', 'factory-crypto-27',
909
- // 'factory-crypto-28', 'factory-crypto-29',
910
- // 'factory-crypto-30', 'factory-crypto-31',
911
- // 'factory-crypto-32', 'factory-crypto-33',
912
- // 'factory-crypto-34', 'factory-crypto-35',
913
- // 'factory-crypto-36', 'factory-crypto-37'
1027
+ // '0x07f6daedb705446cb56ab42c18ba9ec5302ef5ed9c7ef0bb5c3c92493abcfc79'
914
1028
  // ]
1029
+
1030
+ await curve.boosting.createLock(1000, 365);
1031
+ // 99000.0 CRV
1032
+ // { lockedAmount: '1000.0', unlockTime: 1657152000000 }
1033
+ // 248.193183980208499221
1034
+ // 0.000006190640156035
1035
+
1036
+ await curve.boosting.increaseAmount('500');
1037
+ // 98500.0 CRV
1038
+ // { lockedAmount: '1500.0', unlockTime: 1657152000000 }
1039
+ // 372.289692732093137414 veCRV
1040
+ // 0.000009285953543912 veCRV %
1041
+
1042
+ await curve.boosting.increaseUnlockTime(365);
1043
+ // 98500.0 CRV
1044
+ // { lockedAmount: '1500.0', unlockTime: 1688601600000 }
1045
+ // 746.262271689452535192 veCRV
1046
+ // 0.000018613852077810 veCRV %
1047
+ })()
1048
+ ```
1049
+
1050
+ ## Rewards
1051
+ ```ts
1052
+ import curve from "@curvefi/api";
1053
+
1054
+ (async () => {
1055
+ await curve.init('JsonRpc', {}, { gasPrice: 0, maxFeePerGas: 0, maxPriorityFeePerGas: 0 });
1056
+
1057
+ const pool = curve.getPool('susd');
1058
+
1059
+ // CRV
1060
+ await pool.claimableCrv();
1061
+ // 0.006296257916265276
1062
+ await pool.claimCrv();
1063
+
1064
+ // Additional rewards
1065
+ await pool.claimableRewards();
1066
+ // [
1067
+ // {
1068
+ // token: '0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F',
1069
+ // symbol: 'SNX',
1070
+ // amount: '0.000596325465987726'
1071
+ // }
1072
+ // ]
1073
+ await pool.claimRewards();
1074
+ })()
1075
+ ```
1076
+
1077
+ ## Gas estimation
1078
+ Every non-constant method has corresponding gas estimation method. Rule: ```obj.method -> obj.estimateGas.method```
1079
+
1080
+ **Examples**
1081
+ ```ts
1082
+ import curve from "@curvefi/api";
1083
+
1084
+ (async () => {
1085
+ await curve.init('JsonRpc', {}, { gasPrice: 0, maxFeePerGas: 0, maxPriorityFeePerGas: 0 });
1086
+
1087
+ const spender = "0xbEbc44782C7dB0a1A60Cb6fe97d0b483032FF1C7" // 3pool swap address
1088
+ await curve.estimateGas.ensureAllowance(["DAI", "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"], [1000, 1000], spender);
1089
+ // 94523
1090
+
1091
+ const pool = curve.getPool('usdn');
1092
+ await pool.estimateGas.depositApprove(["1000", "1000", "1000", "1000"]);
1093
+ // 186042
1094
+ await pool.estimateGas.deposit(["1000", "1000", "1000", "1000"]);
1095
+ // 679238
1096
+
1097
+ await curve.router.estimateGas.swap('DAI', "WBTC", "1000");
1098
+ // 476904
1099
+ await curve.boosting.estimateGas.createLock('1000', 365);
1100
+ // 324953
915
1101
  })()
916
1102
  ```