@curvefi/api 1.25.2 → 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} +52 -80
  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 -2
  146. package/lib/external-api.js +18 -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 +34 -49
  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 +25 -67
  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 +33 -126
  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 -4752
@@ -0,0 +1,916 @@
1
+ # Curve JS
2
+
3
+ ## Setup
4
+
5
+ Install from npm:
6
+
7
+ `npm install @curvefi/api`
8
+
9
+ ## Init
10
+ ```ts
11
+ import curve from "@curvefi/api";
12
+
13
+ (async () => {
14
+ // 1. Dev
15
+ await curve.init('JsonRpc', {url: 'http://localhost:8545/', privateKey: ''}, { gasPrice: 0, maxFeePerGas: 0, maxPriorityFeePerGas: 0, chainId: 1 });
16
+ // OR
17
+ await curve.init('JsonRpc', {}, { chainId: 1 }); // In this case fee data will be specified automatically
18
+
19
+ // 2. Infura
20
+ curve.init("Infura", { network: "homestead", apiKey: <INFURA_KEY> }, { chainId: 1 });
21
+
22
+ // 3. Web3 provider
23
+ curve.init('Web3', { externalProvider: <WEB3_PROVIDER> }, { chainId: 1 });
24
+ })()
25
+ ```
26
+ **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)
27
+
28
+ **Note 2.** Web3 init requires the address. Therefore, it can be initialized only after receiving the address.
29
+
30
+ **Wrong ❌️**
31
+ ```tsx
32
+ import type { FunctionComponent } from 'react'
33
+ import { useState, useMemo } from 'react'
34
+ import { providers } from 'ethers'
35
+ import Onboard from 'bnc-onboard'
36
+ import type { Wallet } from 'bnc-onboard/dist/src/interfaces'
37
+ import curve from '@curvefi/api'
38
+
39
+ ...
40
+
41
+ const WalletProvider: FunctionComponent = ({ children }) => {
42
+ const [wallet, setWallet] = useState<Wallet>()
43
+ const [provider, setProvider] = useState<providers.Web3Provider>()
44
+ const [address, setAddress] = useState<string>()
45
+
46
+ const networkId = 1
47
+
48
+ const onboard = useMemo(
49
+ () =>
50
+ Onboard({
51
+ dappId: DAPP_ID,
52
+ networkId,
53
+
54
+ subscriptions: {
55
+ address: (address) => {
56
+ setAddress(address)
57
+ },
58
+
59
+ wallet: (wallet) => {
60
+ setWallet(wallet)
61
+ if (wallet.provider) {
62
+ curve.init("Web3", { externalProvider: wallet.provider }, { chainId: networkId })
63
+ }
64
+ },
65
+ },
66
+ walletSelect: {
67
+ wallets: wallets,
68
+ },
69
+ }),
70
+ []
71
+ )
72
+
73
+ ...
74
+ ```
75
+
76
+ **Right ✔️**
77
+ ```tsx
78
+ import type { FunctionComponent } from 'react'
79
+ import { useState, useMemo, useEffect } from 'react'
80
+ import { providers } from 'ethers'
81
+ import Onboard from 'bnc-onboard'
82
+ import type { Wallet } from 'bnc-onboard/dist/src/interfaces'
83
+ import curve from '@curvefi/api'
84
+
85
+ ...
86
+
87
+ const WalletProvider: FunctionComponent = ({ children }) => {
88
+ const [wallet, setWallet] = useState<Wallet>()
89
+ const [provider, setProvider] = useState<providers.Web3Provider>()
90
+ const [address, setAddress] = useState<string>()
91
+
92
+ const networkId = 1
93
+
94
+ const onboard = useMemo(
95
+ () =>
96
+ Onboard({
97
+ dappId: DAPP_ID,
98
+ networkId,
99
+
100
+ subscriptions: {
101
+ address: (address) => {
102
+ setAddress(address)
103
+ },
104
+
105
+ wallet: (wallet) => {
106
+ setWallet(wallet)
107
+ },
108
+ },
109
+ walletSelect: {
110
+ wallets: wallets,
111
+ },
112
+ }),
113
+ []
114
+ )
115
+
116
+ useEffect(() => {
117
+ if (address && wallet?.provider) {
118
+ curve.init("Web3", { externalProvider: wallet.provider }, { chainId: networkId })
119
+ }
120
+ }, [address, wallet?.provider]);
121
+
122
+ ...
123
+ ```
124
+
125
+ ## Available pools
126
+ ```ts
127
+ import curve from "@curvefi/api";
128
+
129
+ (async () => {
130
+ await curve.init('JsonRpc', {}, {gasPrice: 0, maxFeePerGas: 0, maxPriorityFeePerGas: 0});
131
+
132
+ console.log(curve.getPoolList());
133
+ // [
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'
145
+ // ]
146
+ })()
147
+ ````
148
+
149
+ ## Balances
150
+ ```ts
151
+ import curve from "@curvefi/api";
152
+
153
+ (async () => {
154
+ await curve.init('JsonRpc', {}, { gasPrice: 0, maxFeePerGas: 0, maxPriorityFeePerGas: 0 });
155
+
156
+ console.log(await curve.getBalances(['DAI', 'sUSD']));
157
+ // OR console.log(await curve.getBalances(['0x6B175474E89094C44Da98b954EedeAC495271d0F', '0x57Ab1ec28D129707052df4dF418D58a2D46d5f51']));
158
+
159
+ // [ '10000.0', '10000.0' ]
160
+
161
+ console.log(await curve.getBalances(['aDAI', 'aSUSD']));
162
+ // OR console.log(await curve.getBalances(['0x028171bCA77440897B824Ca71D1c56caC55b68A3', '0x6c5024cd4f8a59110119c56f8933403a539555eb']));
163
+
164
+ // [ '10000.00017727177059715', '10000.000080108429034461' ]
165
+
166
+
167
+ // --- Pool ---
168
+
169
+ const saave = new curve.Pool('saave');
170
+
171
+ // 1. Current address balances (signer balances)
172
+
173
+ console.log(await saave.balances());
174
+ // {
175
+ // lpToken: '0.0',
176
+ // gauge: '0.0',
177
+ // '0x6B175474E89094C44Da98b954EedeAC495271d0F': '10000.0',
178
+ // '0x57Ab1ec28D129707052df4dF418D58a2D46d5f51': '10000.0',
179
+ // '0x028171bCA77440897B824Ca71D1c56caC55b68A3': '10000.00017727177059715',
180
+ // '0x6c5024cd4f8a59110119c56f8933403a539555eb': '10000.000080108429034461'
181
+ // }
182
+
183
+ console.log(await saave.lpTokenBalances());
184
+ // { lpToken: '0.0', gauge: '0.0' }
185
+
186
+ console.log(await saave.underlyingCoinBalances());
187
+ // {
188
+ // '0x6B175474E89094C44Da98b954EedeAC495271d0F': '10000.0',
189
+ // '0x57Ab1ec28D129707052df4dF418D58a2D46d5f51': '10000.0'
190
+ // }
191
+
192
+ console.log(await saave.coinBalances());
193
+ // {
194
+ // '0x028171bCA77440897B824Ca71D1c56caC55b68A3': '10000.00017727177059715',
195
+ // '0x6c5024cd4f8a59110119c56f8933403a539555eb': '10000.000080108429034461'
196
+ // }
197
+
198
+ console.log(await saave.allCoinBalances());
199
+ // {
200
+ // '0x6B175474E89094C44Da98b954EedeAC495271d0F': '10000.0',
201
+ // '0x57Ab1ec28D129707052df4dF418D58a2D46d5f51': '10000.0',
202
+ // '0x028171bCA77440897B824Ca71D1c56caC55b68A3': '10000.00017727177059715',
203
+ // '0x6c5024cd4f8a59110119c56f8933403a539555eb': '10000.000080108429034461'
204
+ // }
205
+
206
+
207
+ // 2. For every method above you can specify the address
208
+
209
+ console.log(await saave.balances("0x0063046686E46Dc6F15918b61AE2B121458534a5"));
210
+ // {
211
+ // lpToken: '0.0',
212
+ // gauge: '0.0',
213
+ // '0x6B175474E89094C44Da98b954EedeAC495271d0F': '0.0',
214
+ // '0x57Ab1ec28D129707052df4dF418D58a2D46d5f51': '0.0',
215
+ // '0x028171bCA77440897B824Ca71D1c56caC55b68A3': '0.0',
216
+ // '0x6c5024cd4f8a59110119c56f8933403a539555eb': '0.0'
217
+ // }
218
+
219
+ // Or several addresses
220
+ console.log(await saave.balances("0x0063046686E46Dc6F15918b61AE2B121458534a5", "0x66aB6D9362d4F35596279692F0251Db635165871"));
221
+ // {
222
+ // '0x0063046686E46Dc6F15918b61AE2B121458534a5': {
223
+ // lpToken: '0.0',
224
+ // gauge: '0.0',
225
+ // '0x6B175474E89094C44Da98b954EedeAC495271d0F': '0.0',
226
+ // '0x57Ab1ec28D129707052df4dF418D58a2D46d5f51': '0.0',
227
+ // '0x028171bCA77440897B824Ca71D1c56caC55b68A3': '0.0',
228
+ // '0x6c5024cd4f8a59110119c56f8933403a539555eb': '0.0'
229
+ // },
230
+ // '0x66aB6D9362d4F35596279692F0251Db635165871': {
231
+ // lpToken: '0.0',
232
+ // gauge: '0.0',
233
+ // '0x6B175474E89094C44Da98b954EedeAC495271d0F': '10000.0',
234
+ // '0x57Ab1ec28D129707052df4dF418D58a2D46d5f51': '10000.0',
235
+ // '0x028171bCA77440897B824Ca71D1c56caC55b68A3': '10000.00017727177059715',
236
+ // '0x6c5024cd4f8a59110119c56f8933403a539555eb': '10000.000080108429034461'
237
+ // }
238
+ // }
239
+
240
+
241
+ })()
242
+ ```
243
+
244
+ ## Stats
245
+ ```ts
246
+ import curve from "@curvefi/api";
247
+
248
+ (async () => {
249
+ await curve.init('JsonRpc', {}, {gasPrice: 0, maxFeePerGas: 0, maxPriorityFeePerGas: 0});
250
+
251
+ console.log(await curve.getTVL());
252
+ // 19281307454.671753
253
+
254
+ const aave = new curve.Pool('aave');
255
+
256
+ console.log(await aave.stats.getParameters());
257
+ // {
258
+ // virtualPrice: '1.082056814810440924',
259
+ // fee: '0.04',
260
+ // adminFee: '0.02',
261
+ // A: '2000',
262
+ // future_A: '2000',
263
+ // initial_A: '200',
264
+ // future_A_time: 1628525830000,
265
+ // initial_A_time: 1627923611000,
266
+ // gamma: undefined
267
+ // }
268
+
269
+
270
+ console.log(await aave.stats.getPoolBalances());
271
+ // [ '19619514.600802512613372364', '18740372.790339', '16065974.167437' ]
272
+
273
+ console.log(await aave.stats.getPoolWrappedBalances());
274
+ // [ '19619514.600802512613372364', '18740372.790339', '16065974.167437' ]
275
+
276
+ console.log(await aave.stats.getTotalLiquidity());
277
+ // 54425861.55857851
278
+
279
+ console.log(await aave.stats.getVolume());
280
+ // 175647.68180084194
281
+
282
+ console.log(await aave.stats.getBaseApy());
283
+ // { day: '3.2015', week: '3.1185', month: '3.1318', total: '7.7286' }
284
+
285
+ console.log(await aave.stats.getTokenApy());
286
+ // [ '0.4093', '1.0233' ]
287
+
288
+ console.log(await aave.stats.getRewardsApy());
289
+ // [
290
+ // {
291
+ // token: '0x4da27a545c0c5B758a6BA100e3a049001de870f5',
292
+ // symbol: 'stkAAVE',
293
+ // apy: '0.4978306501849664'
294
+ // }
295
+ // ]
296
+ })()
297
+ ````
298
+
299
+ ## Add/remove liquidity
300
+
301
+ ```ts
302
+ import curve from "@curvefi/api";
303
+
304
+ (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";
509
+
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' ]
515
+
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');
520
+
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
+ // }
550
+ // ]
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' ]
559
+ })()
560
+ ```
561
+
562
+ ### Single-pool exchange
563
+
564
+ ```ts
565
+ import curve from "@curvefi/api";
566
+
567
+ (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' ]
572
+
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
580
+
581
+ await curve.exchange('DAI', 'USDC', '10')
582
+ // OR await curve.exchange('0x6B175474E89094C44Da98b954EedeAC495271d0F', '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', '100');
583
+
584
+ console.log(await curve.getBalances(['DAI', 'USDC']));
585
+ // [ '900.0', '100.071098' ]
586
+ })()
587
+ ```
588
+
589
+ ### Cross-Asset Exchange
590
+
591
+ ```ts
592
+ import curve from "@curvefi/api";
593
+
594
+ (async () => {
595
+ await curve.init('JsonRpc', {}, { gasPrice: 0, maxFeePerGas: 0, maxPriorityFeePerGas: 0, chainId: 1 });
596
+
597
+ console.log(await curve.getBalances(['DAI', 'WBTC']));
598
+ // [ '1000.0', '0.0' ]
599
+
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
606
+
607
+ const tx = await curve.crossAssetExchange('DAI', 'WBTC', '500');
608
+ console.log(tx);
609
+ // 0xf452fbb49d9e4ba8976dc6762bcfcc87d5e164577c21f3fa087ae4fe275d1710
610
+
611
+ console.log(await curve.getBalances(['DAI', 'WBTC']));
612
+ // [ '500.0', '0.01207752' ]
613
+ })()
614
+ ```
615
+
616
+ ## Boosting
617
+ ```ts
618
+ import curve from "@curvefi/api";
619
+
620
+ (async () => {
621
+ await curve.init('JsonRpc', {}, { gasPrice: 0, maxFeePerGas: 0, maxPriorityFeePerGas: 0, chainId: 1 });
622
+
623
+ console.log(await curve.boosting.getCrv());
624
+ // 100000.0
625
+
626
+ await curve.boosting.createLock('1000', 365);
627
+ // 99000.0 CRV
628
+
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 %
649
+ })()
650
+ ```
651
+
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
670
+ ```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 ---
698
+
699
+ await pool.removeLiquidityIsApproved("1000")
700
+ await pool.removeLiquidityApprove("1000")
701
+
702
+
703
+ // --- Remove Liquidity Imbalance ---
704
+
705
+ await pool.removeLiquidityImbalanceIsApproved(["1000", "1000", "1000", "1000"])
706
+ await pool.removeLiquidityImbalanceApprove(["1000", "1000", "1000", "1000"])
707
+
708
+
709
+ // --- Remove Liquidity One Coin ---
710
+
711
+ await pool.removeLiquidityOneCoinIsApproved("1000")
712
+ await pool.removeLiquidityOneCoinApprove("1000")
713
+
714
+
715
+ // --- Gauge Deposit ---
716
+
717
+ await pool.gaugeDepositIsApproved("1000")
718
+ await pool.gaugeDepositApprove("1000")
719
+
720
+
721
+ // --- Exchange ---
722
+
723
+ await pool.exchangeIsApproved("DAI", "1000")
724
+ await pool.exchangeApprove("DAI", "1000")
725
+
726
+
727
+ // --- Exchange Wrapped ---
728
+
729
+ await pool.exchangeWrappedIsApproved("0x6c3F90f043a72FA612cbac8115EE7e52BDe6E490", "1000")
730
+ await pool.exchangeWrappedApprove("0x6c3F90f043a72FA612cbac8115EE7e52BDe6E490", "1000")
731
+ ```
732
+ **Note.** Removing wrapped does not require approve.
733
+
734
+ ### Exchange
735
+ ```ts
736
+ // Router
737
+ await curve.routerExchangeisApproved("DAI", "0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3", "1000"); // DAI -> MIM
738
+ await curve.routerExchangeApprove("DAI", "0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3", "1000"); // DAI -> MIM
739
+
740
+ // Straight
741
+ await curve.exchangeisApproved("DAI", "0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3", "1000"); // DAI -> MIM
742
+ await curve.exchangeApprove("DAI", "0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3", "1000"); // DAI -> MIM
743
+
744
+ // Cross-Asset
745
+ await curve.crossAssetExchangeIsApproved("DAI", "1000");
746
+ await curve.crossAssetExchangeApprove("DAI", "1000");
747
+ ```
748
+
749
+ ### Boosting
750
+ ```ts
751
+ await curve.boosting.isApproved('1000')
752
+ await curve.boosting.approve('1000')
753
+ ```
754
+
755
+ ## Gas estimation
756
+ Every non-constant method has corresponding gas estimation method. Rule: ```obj.method -> obj.estimateGas.method```
757
+
758
+ **Examples**
759
+ ```ts
760
+ const spender = "0xbEbc44782C7dB0a1A60Cb6fe97d0b483032FF1C7" // 3pool swap address
761
+ await curve.estimateGas.ensureAllowance(["DAI", "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"], curve.signerAddress, spender);
762
+
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"])
766
+
767
+ await curve.estimateGas.crossAssetExchange('DAI', "WBTC", "1000", 0.01)
768
+
769
+ await curve.boosting.estimateGas.createLock('1000', 365)
770
+ ```
771
+
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();
791
+ ```
792
+
793
+ ## Deposit&Stake
794
+ Add liquidity and deposit into gauge in one transaction.
795
+
796
+ ### Underlying
797
+ ```ts
798
+ (async () => {
799
+ const pool = new curve.Pool('compound');
800
+ const amounts = ['1000', '1000'];
801
+
802
+ console.log(await pool.underlyingCoinBalances());
803
+ // { DAI: '10000.0', USDC: '10000.0' }
804
+ console.log(await pool.lpTokenBalances());
805
+ // { lpToken: '0.0', gauge: '0.0' }
806
+
807
+ console.log(await pool.depositAndStakeExpected(amounts));
808
+ // 1820.604572902286288394
809
+ console.log(await pool.depositAndStakeSlippage(amounts));
810
+ // -0.0000036435051742755193
811
+
812
+ console.log(await pool.depositAndStakeIsApproved(amounts));
813
+ // false
814
+
815
+ await pool.depositAndStakeApprove(amounts);
816
+ await pool.depositAndStake(amounts);
817
+
818
+ console.log(await pool.underlyingCoinBalances());
819
+ // { DAI: '9000.0', USDC: '9000.0' }
820
+ console.log(await pool.lpTokenBalances());
821
+ // { 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
+
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
+
836
+ console.log(await pool.depositAndStakeWrappedExpected(amounts));
837
+ // 40.328408669183101673
838
+ console.log(await pool.depositAndStakeWrappedSlippage(amounts));
839
+ // -0.0020519915272297325
840
+
841
+ console.log(await pool.depositAndStakeWrappedIsApproved(amounts));
842
+ // false
843
+
844
+ await pool.depositAndStakeWrappedApprove(amounts);
845
+ await pool.depositAndStakeWrapped(amounts);
846
+
847
+ console.log(await pool.coinBalances());
848
+ // { cDAI: '9000.0', cUSDC: '9000.0' }
849
+ console.log(await pool.lpTokenBalances());
850
+ // { lpToken: '0.0', gauge: '1860.884096082215274556' }
851
+ })();
852
+ ```
853
+
854
+ ## Factory
855
+ All the methods above can be used for factory pools. It's only needed to fetch them.
856
+ ```ts
857
+ import curve from "@curvefi/api";
858
+
859
+ (async () => {
860
+ await curve.init('JsonRpc', {}, { chainId: 1 });
861
+ await curve.fetchFactoryPools();
862
+ await curve.fetchCryptoFactoryPools();
863
+
864
+ const factoryPools = curve.getFactoryPoolList();
865
+ // [
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',
891
+ // ]
892
+
893
+ const cryptoFactoryPools = curve.getCryptoFactoryPoolList()
894
+ // [
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'
914
+ // ]
915
+ })()
916
+ ```