Skip to content

Commit 3b34f98

Browse files
cashmerelabsCashmere Labs
andauthored
feat(cashmere): add NEAR Intents support and all frontend chains (#457)
- Add NEAR Intents stablecoin domain IDs (500_XXX) - Add NEAR Intents native asset domain IDs (600_XXX) - Add LayerZero USDT0 chains (berachain, ink, corn, flare, rootstock, xlayer, plasma, monad) - Update token address mappings for all supported chains - Add isUSDVolume flag for USD-based volume tracking - Remove gnosis (not enabled on frontend) Co-authored-by: Cashmere Labs <[email protected]>
1 parent 518d710 commit 3b34f98

File tree

3 files changed

+101
-12
lines changed

3 files changed

+101
-12
lines changed

src/adapters/cashmere/index.ts

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,18 +35,48 @@ const parseUsdcAmount = (amountUsdc?: number): ethers.BigNumber => {
3535
return ethers.BigNumber.from(Math.round(usdAmount));
3636
};
3737

38+
// Native token addresses (wrapped versions for tracking)
39+
const nativeAddresses: Record<string, string> = {
40+
ethereum: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", // WETH
41+
arbitrum: "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1", // WETH
42+
optimism: "0x4200000000000000000000000000000000000006", // WETH
43+
base: "0x4200000000000000000000000000000000000006", // WETH
44+
polygon: "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270", // WMATIC/WPOL
45+
avax: "0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7", // WAVAX
46+
bsc: "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", // WBNB
47+
xlayer: "0xe538905cf8410324e03A5A23C1c177a474D59b2b", // WOKB
48+
monad: "0x0000000000000000000000000000000000000000", // MON (placeholder)
49+
plasma: "0x0000000000000000000000000000000000000000", // XPL (placeholder)
50+
berachain: "0x6969696969696969696969696969696969696969", // WBERA (placeholder)
51+
solana: "So11111111111111111111111111111111111111112", // wSOL
52+
sui: "0x2::sui::SUI", // SUI
53+
aptos: "0x1::aptos_coin::AptosCoin", // APT
54+
};
55+
3856
const getTokenAddress = (domain: number): string => {
57+
const chain = domainToChain[domain];
58+
59+
// Circle CCTP (0-29)
3960
if (domain < 30_000) {
40-
return usdcAddresses[domainToChain[domain]] || "0xA0b86a33E6441986C3103F5f1b26E86d1e5F0d22"; // eth usdc as default
41-
} else if (domain < 500_000) {
42-
return usdt0Addresses[domainToChain[domain]] || "0xdAC17F958D2ee523a2206206994597C13D831ec7"; // eth usdt as default
43-
} else {
61+
return usdcAddresses[chain] || "0xA0b86a33E6441986C3103F5f1b26E86d1e5F0d22"; // eth usdc as default
62+
}
63+
// LayerZero (30000-499999)
64+
else if (domain < 500_000) {
65+
return usdt0Addresses[chain] || "0xdAC17F958D2ee523a2206206994597C13D831ec7"; // eth usdt as default
66+
}
67+
// NEAR Intents Stablecoins (500000-599999)
68+
else if (domain < 600_000) {
69+
// Odd = USDC, Even = USDT
4470
if (domain % 2 === 1) {
45-
return usdcAddresses[domainToChain[domain]] || "0xA0b86a33E6441986C3103F5f1b26E86d1e5F0d22"; // eth usdc as default
71+
return usdcAddresses[chain] || "0xA0b86a33E6441986C3103F5f1b26E86d1e5F0d22"; // eth usdc as default
4672
} else {
47-
return usdtAddresses[domainToChain[domain]] || "0xdAC17F958D2ee523a2206206994597C13D831ec7"; // eth usdt as default
73+
return usdtAddresses[chain] || "0xdAC17F958D2ee523a2206206994597C13D831ec7"; // eth usdt as default
4874
}
4975
}
76+
// NEAR Intents Native Assets (600000+)
77+
else {
78+
return nativeAddresses[chain] || "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"; // WETH as default
79+
}
5080
};
5181

5282
export const convertTransactionToEvent = (

src/adapters/cashmere/types.ts

Lines changed: 64 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ export interface CashmereAPIResponse {
4141

4242
// Domain ID to chain name mapping for CCTP (matching bridges-server chain names)
4343
export const domainToChain: Record<number, string> = {
44-
/// circle cctp
44+
/// ============ Circle CCTP (0-29) ============
4545
0: "ethereum",
4646
1: "avax",
4747
2: "optimism",
@@ -57,7 +57,8 @@ export const domainToChain: Record<number, string> = {
5757
14: "wc", // worldchain
5858
16: "sei",
5959
19: "hyperliquid", // hyperliquid evm
60-
/// layer zero
60+
61+
/// ============ LayerZero (30000+) ============
6162
30101: "ethereum",
6263
30106: "avax",
6364
30109: "polygon",
@@ -77,22 +78,73 @@ export const domainToChain: Record<number, string> = {
7778
30333: "rootstock",
7879
30274: "xlayer",
7980
30383: "plasma",
80-
/// near intents
81+
82+
/// ============ NEAR Intents Stablecoins (500_XXX) ============
83+
// Format: 500_0X1 = USDC, 500_0X2 = USDT
84+
// Ethereum (500_01X)
8185
500_011: "ethereum",
8286
500_012: "ethereum",
87+
// Arbitrum (500_02X)
8388
500_021: "arbitrum",
8489
500_022: "arbitrum",
90+
// Polygon (500_03X)
8591
500_031: "polygon",
8692
500_032: "polygon",
93+
// Optimism (500_04X)
8794
500_041: "optimism",
8895
500_042: "optimism",
96+
// Avalanche (500_05X)
8997
500_051: "avax",
9098
500_052: "avax",
99+
// Base (500_06X)
91100
500_061: "base",
101+
// Solana (500_07X)
92102
500_071: "solana",
93103
500_072: "solana",
104+
// BSC (500_08X)
94105
500_081: "bsc",
95106
500_082: "bsc",
107+
// X Layer (500_10X)
108+
500_101: "xlayer",
109+
500_102: "xlayer",
110+
// Monad (500_11X)
111+
500_111: "monad",
112+
500_112: "monad",
113+
// Plasma (500_12X)
114+
500_122: "plasma",
115+
// Berachain (500_13X)
116+
500_132: "berachain",
117+
// Sui (500_20X)
118+
500_201: "sui",
119+
// Aptos (500_30X)
120+
500_302: "aptos",
121+
// NEAR (500_40X)
122+
500_401: "near",
123+
500_402: "near",
124+
// Stellar (500_50X)
125+
500_501: "stellar",
126+
// TON (500_60X)
127+
500_602: "ton",
128+
// Tron (500_70X)
129+
500_702: "tron",
130+
131+
/// ============ NEAR Intents Native Assets - EVM ETH (600_0X0) ============
132+
600_010: "ethereum", // eth native ETH
133+
600_020: "arbitrum", // arb native ETH
134+
600_030: "polygon", // pol native POL
135+
600_040: "optimism", // op native ETH
136+
600_050: "avax", // avax native AVAX
137+
600_060: "base", // base native ETH
138+
600_080: "bsc", // bsc native BNB
139+
600_100: "xlayer", // xlayer native OKB
140+
600_110: "monad", // monad native MON
141+
600_120: "plasma", // plasma native XPL
142+
600_140: "berachain", // berachain native BERA
143+
144+
/// ============ NEAR Intents Native Assets - Non-EVM (600_XXX) ============
145+
600_200: "solana", // solana native SOL
146+
600_300: "sui", // sui native SUI
147+
600_400: "aptos", // aptos native APT
96148
};
97149

98150
export const chainToDomain: Record<string, number> = Object.fromEntries(
@@ -113,7 +165,9 @@ export const usdcAddresses: Record<string, string> = {
113165
sonic: "0x29219dd400f2Bf60E5a23d13Be72B486D4038894",
114166
wc: "0x79A02482A880bCe3F13E09da970dC34dB4cD24D1", // worldchain
115167
sei: "0xe15fC38F6D8c56aF07bbCBe3BAf5708A2Bf42392",
116-
bsc: "0x8965349fb649a33a30cbfda057d8ec2c48abe2a2",
168+
bsc: "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d", // BSC USDC (18 decimals)
169+
xlayer: "0x74b7f16337b8972027f6196a17a631ac6de26d22", // xlayer USDC
170+
monad: "0x754704Bc059F8C67012fEd69BC8A327a5aafb603", // monad USDC
117171

118172
// Non-EVM Chains
119173
solana: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", // Solana SPL token
@@ -125,6 +179,7 @@ export const usdcAddresses: Record<string, string> = {
125179
};
126180

127181
export const usdt0Addresses: Record<string, string> = {
182+
// LayerZero USDT0 addresses
128183
ethereum: "0xdAC17F958D2ee523a2206206994597C13D831ec7",
129184
polygon: "0xc2132D05D31c914a87C6611C10748AEb04B58e8F",
130185
arbitrum: "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9",
@@ -133,21 +188,24 @@ export const usdt0Addresses: Record<string, string> = {
133188
sei: "0x9151434b16b9763660705744891fA906F660EcC5",
134189
hyperliquid: "0xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb",
135190
berachain: "0x779Ded0c9e1022225f8E0630b35a9b54bE713736",
136-
bnb: "0x55d398326f99059fF775485246999027B3197955",
191+
bsc: "0x55d398326f99059fF775485246999027B3197955",
137192
ink: "0x0200C29006150606B650577BBE7B6248F58470c1",
138193
corn: "0xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb",
139194
flare: "0xe7cd86e13AC4309349F30B3435a9d337750fC82D",
140195
rootstock: "0x779dED0C9e1022225F8e0630b35A9B54Be713736",
141196
xlayer: "0x779Ded0c9e1022225f8E0630b35a9b54bE713736",
142197
plasma: "0xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb",
198+
monad: "0xe7cd86e13AC4309349F30B3435a9d337750fC82D",
143199
};
144200

145201
export const usdtAddresses: Record<string, string> = {
202+
// Native USDT addresses (used by NEAR Intents)
146203
ethereum: "0xdac17f958d2ee523a2206206994597c13d831ec7",
147204
arbitrum: "0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9",
148205
polygon: "0xc2132d05d31c914a87c6611c10748aeb04b58e8f",
149206
optimism: "0x94b008aa00579c1307b0ef2c499ad98a8ce58e58",
150207
avax: "0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7",
151208
solana: "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
152-
bsc: "0x381169958af503ed00894b2284307eb75b93e11140e81fc10d80fc1345124856", // BSC USD
209+
bsc: "0x55d398326f99059ff775485246999027b3197955", // BSC USDT (18 decimals)
210+
aptos: "0x357b0b74bc833e95a115ad22604854d6b0fca151cecd94111770e5d6ffc9dc2b",
153211
};

src/data/bridgeNetworkData.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2686,6 +2686,7 @@ export default [
26862686
"rootstock",
26872687
"xlayer",
26882688
"plasma",
2689+
"monad",
26892690
],
26902691
},
26912692
{

0 commit comments

Comments
 (0)