@curvefi/api 1.25.1 → 2.1.0

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