Skip to content

Commit 4d38c75

Browse files
author
Macket
authored
Merge pull request #70 from curvefi/xDai
xDai
2 parents 12e8ccf + a21dbb4 commit 4d38c75

19 files changed

+246
-54
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@curvefi/api",
3-
"version": "2.7.0",
3+
"version": "2.8.0",
44
"description": "JavaScript library for curve.fi",
55
"main": "lib/index.js",
66
"author": "Macket",

src/constants/abis/3pool/swap.json

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -378,32 +378,6 @@
378378
"type": "function",
379379
"gas": "2673791"
380380
},
381-
{
382-
"name": "get_dy_underlying",
383-
"outputs": [
384-
{
385-
"type": "uint256",
386-
"name": ""
387-
}
388-
],
389-
"inputs": [
390-
{
391-
"type": "int128",
392-
"name": "i"
393-
},
394-
{
395-
"type": "int128",
396-
"name": "j"
397-
},
398-
{
399-
"type": "uint256",
400-
"name": "dx"
401-
}
402-
],
403-
"stateMutability": "view",
404-
"type": "function",
405-
"gas": "2673474"
406-
},
407381
{
408382
"name": "exchange",
409383
"outputs": [],

src/constants/aliases.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,4 +77,17 @@ export const ALIASES_OPTIMISM = lowerCaseValues({
7777
"factory": '0x2db0E83599a91b508Ac268a6197b8B14F5e72840',
7878
"crypto_factory": '0xF18056Bbd320E96A48e3Fbf8bC061322531aac99', // <--- TODO CHANGE
7979
"registry_exchange": "",
80-
});
80+
});
81+
82+
export const ALIASES_XDAI = lowerCaseValues({
83+
"crv": "0x712b3d230f3c1c19db860d80619288b1f0bdd0bd",
84+
"minter": "0xabC000d88f23Bb45525E447528DBF656A9D55bf5",
85+
"voting_escrow": "0x5f3b5DfEb7B28CDbD7FAba78963EE202a494e2A2",
86+
"gauge_controller": "0x2F50D538606Fa9EDD2B11E2446BEb18C9D5846bB",
87+
"address_provider": "0x0000000022d53366457f9d5e68ec105046fc4383",
88+
"router": "0xfA9a30350048B2BF66865ee20363067c66f67e58",
89+
"deposit_and_stake": "0xB7De33440B7171159a9718CBE748086cecDd9685",
90+
"factory": '0xD19Baeadc667Cf2015e395f2B08668Ef120f41F5',
91+
"crypto_factory": '0xF18056Bbd320E96A48e3Fbf8bC061322531aac99', // <--- TODO CHANGE
92+
"registry_exchange": "",
93+
});

src/constants/coins/xdai.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { lowerCaseValues } from "../utils";
2+
3+
export const COINS_XDAI: { [index: string]: string } = lowerCaseValues({
4+
'crv': '0x712b3d230f3c1c19db860d80619288b1f0bdd0bd',
5+
6+
// --- USD ---
7+
8+
'wxdai': '0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d',
9+
'usdc': '0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83',
10+
'usdt': '0x4ECaBa5870353805a9F068101A40E0f32ed605C6',
11+
'rai': '0xd7a28aa9c470e7e9d8c676bcd5dd2f40c5683afa',
12+
'x3crv': '0x1337BedC9D22ecbe766dF105c9623922A27963EC',
13+
})
14+
15+
export const cTokensXDai = []; //.map((a) => a.toLowerCase());
16+
export const yTokensXDai = []; //.map((a) => a.toLowerCase());
17+
export const ycTokensXDai = []; //.map((a) => a.toLowerCase());
18+
export const aTokensXDai = []; //.map((a) => a.toLowerCase());

src/constants/pools/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { POOLS_DATA_FANTOM } from "./fantom";
44
import { POOLS_DATA_AVALANCHE } from "./avalanche";
55
import { POOLS_DATA_ARBITRUM } from "./arbitrum";
66
import { POOLS_DATA_OPTIMISM } from "./optimism";
7+
import { POOLS_DATA_XDAI } from "./xdai";
78

89
export {
910
POOLS_DATA_ETHEREUM,
@@ -12,4 +13,5 @@ export {
1213
POOLS_DATA_AVALANCHE,
1314
POOLS_DATA_ARBITRUM,
1415
POOLS_DATA_OPTIMISM,
16+
POOLS_DATA_XDAI,
1517
};

src/constants/pools/xdai.ts

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import tripoolSwapABI from '../abis/3pool/swap.json';
2+
import raiSwapABI from '../abis/rai/swap.json';
3+
import raiZapABI from '../abis/rai/deposit.json';
4+
import gaugeRewardsOnlyABI from '../abis/gauge_rewards_only.json';
5+
import streamerABI from '../abis/streamer.json';
6+
import { lowerCasePoolDataAddresses } from "../utils";
7+
import { IPoolData } from "../../interfaces";
8+
9+
export const POOLS_DATA_XDAI: { [index: string]: IPoolData } = lowerCasePoolDataAddresses({
10+
'3pool': {
11+
name: "3pool",
12+
full_name: "3pool",
13+
symbol: "3pool",
14+
reference_asset: 'USD',
15+
swap_address: '0x7f90122BF0700F9E7e1F688fe926940E8839F353',
16+
token_address: '0x1337BedC9D22ecbe766dF105c9623922A27963EC',
17+
gauge_address: '0x78CF256256C8089d68Cde634Cf7cDEFb39286470', // Rewards-Only
18+
sCurveRewards_address: '0x6C09F6727113543Fd061a721da512B7eFCDD0267',
19+
is_plain: true,
20+
underlying_coins: ['WXDAI', 'USDC', 'USDT'],
21+
wrapped_coins: ['WXDAI', 'USDC', 'USDT'],
22+
underlying_coin_addresses: [
23+
'0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d',
24+
'0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83',
25+
'0x4ECaBa5870353805a9F068101A40E0f32ed605C6',
26+
],
27+
wrapped_coin_addresses: [
28+
'0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d',
29+
'0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83',
30+
'0x4ECaBa5870353805a9F068101A40E0f32ed605C6',
31+
],
32+
underlying_decimals: [18, 6, 6],
33+
wrapped_decimals: [18, 6, 6],
34+
swap_abi: tripoolSwapABI,
35+
gauge_abi: gaugeRewardsOnlyABI,
36+
sCurveRewards_abi: streamerABI,
37+
},
38+
rai: {
39+
name: "rai",
40+
full_name: "rai",
41+
symbol: "rai",
42+
reference_asset: 'USD',
43+
swap_address: '0x85bA9Dfb4a3E4541420Fc75Be02E2B42042D7e46',
44+
token_address: '0x36390a1Ae126f16C5D222CB1F2AB341dD09f2FEC',
45+
gauge_address: '0x0000000000000000000000000000000000000000', // NO GAUGE FOR THIS POOL BUT NECESSARY TO AVOID REVERTS
46+
deposit_address: '0xdf6eb52c4A9d7d5964b918c50D47a643Fd7D3D4c',
47+
is_meta: true,
48+
base_pool: '3pool',
49+
underlying_coins: ['RAI', 'WXDAI', 'USDC', 'USDT'],
50+
wrapped_coins: ['RAI', 'x3CRV'],
51+
underlying_coin_addresses: [
52+
'0xd7a28aa9c470e7e9d8c676bcd5dd2f40c5683afa',
53+
'0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d',
54+
'0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83',
55+
'0x4ECaBa5870353805a9F068101A40E0f32ed605C6',
56+
],
57+
wrapped_coin_addresses: [
58+
'0xd7a28aa9c470e7e9d8c676bcd5dd2f40c5683afa',
59+
'0x1337BedC9D22ecbe766dF105c9623922A27963EC',
60+
],
61+
underlying_decimals: [18, 18, 6, 6],
62+
wrapped_decimals: [18, 18],
63+
swap_abi: raiSwapABI,
64+
gauge_abi: gaugeRewardsOnlyABI,
65+
deposit_abi: raiZapABI,
66+
},
67+
});

src/curve.ts

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,21 +26,24 @@ import {
2626
POOLS_DATA_AVALANCHE,
2727
POOLS_DATA_ARBITRUM,
2828
POOLS_DATA_OPTIMISM,
29+
POOLS_DATA_XDAI,
2930
} from './constants/pools';
30-
import { COINS_ETHEREUM, cTokensEthereum, yTokensEthereum, ycTokensEthereum, aTokensEthereum } from "./constants/coins/ethereum";
31-
import { COINS_OPTIMISM, cTokensOptimism, yTokensOptimism, ycTokensOptimism, aTokensOptimism } from "./constants/coins/optimism";
32-
import { COINS_POLYGON, cTokensPolygon, yTokensPolygon, ycTokensPolygon, aTokensPolygon } from "./constants/coins/polygon";
33-
import { COINS_FANTOM, cTokensFantom, yTokensFantom, ycTokensFantom, aTokensFantom } from "./constants/coins/fantom";
34-
import { COINS_AVALANCHE, cTokensAvalanche, yTokensAvalanche, ycTokensAvalanche, aTokensAvalanche } from "./constants/coins/avalanche";
35-
import { COINS_ARBITRUM, cTokensArbitrum, yTokensArbitrum, ycTokensArbitrum, aTokensArbitrum } from "./constants/coins/arbitrum";
3631
import {
3732
ALIASES_ETHEREUM,
3833
ALIASES_OPTIMISM,
3934
ALIASES_POLYGON,
4035
ALIASES_FANTOM,
4136
ALIASES_AVALANCHE,
4237
ALIASES_ARBITRUM,
38+
ALIASES_XDAI,
4339
} from "./constants/aliases";
40+
import { COINS_ETHEREUM, cTokensEthereum, yTokensEthereum, ycTokensEthereum, aTokensEthereum } from "./constants/coins/ethereum";
41+
import { COINS_OPTIMISM, cTokensOptimism, yTokensOptimism, ycTokensOptimism, aTokensOptimism } from "./constants/coins/optimism";
42+
import { COINS_POLYGON, cTokensPolygon, yTokensPolygon, ycTokensPolygon, aTokensPolygon } from "./constants/coins/polygon";
43+
import { COINS_FANTOM, cTokensFantom, yTokensFantom, ycTokensFantom, aTokensFantom } from "./constants/coins/fantom";
44+
import { COINS_AVALANCHE, cTokensAvalanche, yTokensAvalanche, ycTokensAvalanche, aTokensAvalanche } from "./constants/coins/avalanche";
45+
import { COINS_ARBITRUM, cTokensArbitrum, yTokensArbitrum, ycTokensArbitrum, aTokensArbitrum } from "./constants/coins/arbitrum";
46+
import { COINS_XDAI, cTokensXDai, yTokensXDai, ycTokensXDai, aTokensXDai } from "./constants/coins/xdai";
4447
import { lowerCasePoolDataAddresses, extractDecimals, extractGauges } from "./constants/utils";
4548

4649

@@ -65,6 +68,16 @@ export const NETWORK_CONSTANTS: { [index: number]: any } = {
6568
ycTokens: ycTokensOptimism,
6669
aTokens: aTokensOptimism,
6770
},
71+
100: {
72+
NAME: 'xdai',
73+
ALIASES: ALIASES_XDAI,
74+
POOLS_DATA: POOLS_DATA_XDAI,
75+
COINS: COINS_XDAI,
76+
cTokens: cTokensXDai,
77+
yTokens: yTokensXDai,
78+
ycTokens: ycTokensXDai,
79+
aTokens: aTokensXDai,
80+
},
6881
137: {
6982
NAME: 'polygon',
7083
ALIASES: ALIASES_POLYGON,
@@ -262,9 +275,11 @@ class Curve implements ICurve {
262275
}
263276
}
264277

265-
this.contracts[pool.gauge_address] = {
266-
contract: new Contract(pool.gauge_address, pool.gauge_abi, this.signer || this.provider),
267-
multicallContract: new MulticallContract(pool.gauge_address, pool.gauge_abi),
278+
if (pool.gauge_address !== ethers.constants.AddressZero) {
279+
this.contracts[pool.gauge_address] = {
280+
contract: new Contract(pool.gauge_address, pool.gauge_abi, this.signer || this.provider),
281+
multicallContract: new MulticallContract(pool.gauge_address, pool.gauge_abi),
282+
}
268283
}
269284

270285
if (pool.deposit_address && !this.contracts[pool.deposit_address]) {

src/factory/common.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@ export function setFactoryZapContracts(this: ICurve): void {
2626
contract: new Contract(metaUsdZapAddress, factoryDepositABI, this.signer || this.provider),
2727
multicallContract: new MulticallContract(metaUsdZapAddress, factoryDepositABI),
2828
};
29+
} else if (this.chainId === 100) {
30+
const metaUsdZapAddress = "0x87C067fAc25f123554a0E76596BF28cFa37fD5E9".toLowerCase();
31+
this.contracts[metaUsdZapAddress] = {
32+
contract: new Contract(metaUsdZapAddress, factoryDepositABI, this.signer || this.provider),
33+
multicallContract: new MulticallContract(metaUsdZapAddress, factoryDepositABI),
34+
};
2935
} else if (this.chainId === 137) {
3036
const metaUsdZapAddress = "0x5ab5C56B9db92Ba45a0B46a207286cD83C15C939".toLowerCase();
3137
this.contracts[metaUsdZapAddress] = {

src/factory/constants.ts

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,26 @@ export const implementationABIDictOptimism: IDict<any> = {
169169
"0x8474DdbE98F5aA3179B3B3F5942D724aFcdec9f6": Plain4OptimizedABI,
170170
}
171171

172+
export const implementationABIDictXDai: IDict<any> = {
173+
"0x4A5bF7Ab9A8202692051c19B102d3eDD62aaBAE6": MetaUSDABI,
174+
"0x0B4dc7A945695D11FD83e40B2DfC2B896A02395F": MetaUSDBalancesABI,
175+
176+
"0x04e39EF8332e979Cf8e4f8891E64934FF65F231b": Plain2BasicABI,
177+
"0xC9438d8928486bD9621D326002F4672bF684187A": Plain2BalancesABI,
178+
"0x2b70A5B878665FfDB4A06Ba40a264d6c70f68F4B": Plain2ETHABI,
179+
"0x2D036f0Ff6F440dB623e0D9D3B5Daa509e5500C3": Plain2OptimizedABI,
180+
181+
"0xec9cEBE650E181079576C1b6d0d2e092B1EdfF13": Plain3BasicABI,
182+
"0xe8269B33E47761f552E1a3070119560d5fa8bBD6": Plain3BalancesABI,
183+
"0x114C4042B11a2b16F58Fe1BFe847589a122F678a": Plain3ETHABI,
184+
"0x4244eB811D6e0Ef302326675207A95113dB4E1F8": Plain3OptimizedABI,
185+
186+
"0x66B5792ED50a2a7405Ea75C4B6B1913eF4E46661": Plain4BasicABI,
187+
"0xcB4eB43E31C830e22baF764c64F11F32C280496c": Plain4BalancesABI,
188+
"0xc1C49622b63B961ce1D352ecb7D8261Ab5556695": Plain4ETHABI,
189+
"0x0E2615ce69Cd3Dc3Ff6f66a975bEa0655F3bA7b9": Plain4OptimizedABI,
190+
}
191+
172192
export const implementationBasePoolIdDictEthereum: IDict<string> = {
173193
"0x5F890841f657d90E081bAbdB532A05996Af79Fe6": "3pool",
174194

@@ -225,6 +245,11 @@ export const implementationBasePoolIdDictOptimism: IDict<string> = {
225245
"0xADf698e4d8Df08b3E2c79682891636eF00F6e205": "3pool",
226246
}
227247

248+
export const implementationBasePoolIdDictXDai: IDict<string> = {
249+
"0x4A5bF7Ab9A8202692051c19B102d3eDD62aaBAE6": "3pool",
250+
"0x0B4dc7A945695D11FD83e40B2DfC2B896A02395F": "3pool",
251+
}
252+
228253
export const basePoolIdZapDictEthereum: IDict<string> = {
229254
'3pool': "0xA79828DF1850E8a3A3064576f380D90aECDD3359".toLowerCase(),
230255
fraxusdc: "0x08780fb7E580e492c1935bEe4fA5920b94AA95Da".toLowerCase(),
@@ -257,6 +282,10 @@ export const basePoolIdZapDictOptimism: IDict<string> = {
257282
"3pool": "0x167e42a1c7ab4be03764a2222aac57f5f6754411".toLowerCase(),
258283
}
259284

285+
export const basePoolIdZapDictXDai: IDict<string> = {
286+
"3pool": "0x87C067fAc25f123554a0E76596BF28cFa37fD5E9".toLowerCase(),
287+
}
288+
260289
export const NATIVE_TOKEN_ADDRESS = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
261290
export const NATIVE_TOKENS: { [index: number]: { symbol: string, wrappedSymbol: string, wrappedAddress: string }} = {
262291
1: { // ETH
@@ -269,6 +298,11 @@ export const NATIVE_TOKENS: { [index: number]: { symbol: string, wrappedSymbol:
269298
wrappedSymbol: 'WETH',
270299
wrappedAddress: '0x4200000000000000000000000000000000000006'.toLowerCase(),
271300
},
301+
100: { // XDAI
302+
symbol: 'XDAi',
303+
wrappedSymbol: 'WXDAI',
304+
wrappedAddress: '0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d'.toLowerCase(),
305+
},
272306
137: { // POLYGON
273307
symbol: 'MATIC',
274308
wrappedSymbol: 'WMATIC',
@@ -297,6 +331,11 @@ export const FACTORY_CONSTANTS: { [index: number]: { implementationABIDict: IDic
297331
implementationBasePoolIdDict: implementationBasePoolIdDictOptimism,
298332
basePoolIdZapDict: basePoolIdZapDictOptimism,
299333
},
334+
100: { // XDAI
335+
implementationABIDict: implementationABIDictXDai,
336+
implementationBasePoolIdDict: implementationBasePoolIdDictXDai,
337+
basePoolIdZapDict: basePoolIdZapDictXDai,
338+
},
300339
137: { // POLYGON
301340
implementationABIDict: implementationABIDictPolygon,
302341
implementationBasePoolIdDict: implementationBasePoolIdDictPolygon,

src/factory/factory-crypto.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ function getExistingCoinAddressNameDict(this: ICurve): IDict<string> {
141141

142142
if (this.chainId === 1) dict[NATIVE_TOKEN_ADDRESS] = "ETH"
143143
if (this.chainId === 10) dict[NATIVE_TOKEN_ADDRESS] = "ETH"
144+
if (this.chainId === 100) dict[NATIVE_TOKEN_ADDRESS] = "XDAI"
144145
if (this.chainId === 137) dict[NATIVE_TOKEN_ADDRESS] = "MATIC"
145146
if (this.chainId === 250) dict[NATIVE_TOKEN_ADDRESS] = "FTM"
146147
if (this.chainId === 43114) dict[NATIVE_TOKEN_ADDRESS] = "AVAX"

0 commit comments

Comments
 (0)