amped-defi 1.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.
- package/README.md +757 -0
- package/dist/__mocks__/@sodax/sdk.d.ts +24 -0
- package/dist/__mocks__/@sodax/sdk.d.ts.map +1 -0
- package/dist/__mocks__/@sodax/sdk.js +24 -0
- package/dist/__mocks__/@sodax/sdk.js.map +1 -0
- package/dist/__tests__/setup.d.ts +4 -0
- package/dist/__tests__/setup.d.ts.map +1 -0
- package/dist/__tests__/setup.js +32 -0
- package/dist/__tests__/setup.js.map +1 -0
- package/dist/index.d.ts +66 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +281 -0
- package/dist/index.js.map +1 -0
- package/dist/policy/policyEngine.d.ts +119 -0
- package/dist/policy/policyEngine.d.ts.map +1 -0
- package/dist/policy/policyEngine.js +322 -0
- package/dist/policy/policyEngine.js.map +1 -0
- package/dist/providers/spokeProviderFactory.d.ts +38 -0
- package/dist/providers/spokeProviderFactory.d.ts.map +1 -0
- package/dist/providers/spokeProviderFactory.js +212 -0
- package/dist/providers/spokeProviderFactory.js.map +1 -0
- package/dist/sodax/client.d.ts +34 -0
- package/dist/sodax/client.d.ts.map +1 -0
- package/dist/sodax/client.js +99 -0
- package/dist/sodax/client.js.map +1 -0
- package/dist/tools/bridge.d.ts +105 -0
- package/dist/tools/bridge.d.ts.map +1 -0
- package/dist/tools/bridge.js +334 -0
- package/dist/tools/bridge.js.map +1 -0
- package/dist/tools/discovery.d.ts +141 -0
- package/dist/tools/discovery.d.ts.map +1 -0
- package/dist/tools/discovery.js +777 -0
- package/dist/tools/discovery.js.map +1 -0
- package/dist/tools/moneyMarket.d.ts +227 -0
- package/dist/tools/moneyMarket.d.ts.map +1 -0
- package/dist/tools/moneyMarket.js +867 -0
- package/dist/tools/moneyMarket.js.map +1 -0
- package/dist/tools/portfolio.d.ts +43 -0
- package/dist/tools/portfolio.d.ts.map +1 -0
- package/dist/tools/portfolio.js +538 -0
- package/dist/tools/portfolio.js.map +1 -0
- package/dist/tools/swap.d.ts +71 -0
- package/dist/tools/swap.d.ts.map +1 -0
- package/dist/tools/swap.js +762 -0
- package/dist/tools/swap.js.map +1 -0
- package/dist/tools/walletManagement.d.ts +80 -0
- package/dist/tools/walletManagement.d.ts.map +1 -0
- package/dist/tools/walletManagement.js +289 -0
- package/dist/tools/walletManagement.js.map +1 -0
- package/dist/types.d.ts +205 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/errorUtils.d.ts +2 -0
- package/dist/utils/errorUtils.d.ts.map +1 -0
- package/dist/utils/errorUtils.js +19 -0
- package/dist/utils/errorUtils.js.map +1 -0
- package/dist/utils/errors.d.ts +144 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +310 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/positionAggregator.d.ts +122 -0
- package/dist/utils/positionAggregator.d.ts.map +1 -0
- package/dist/utils/positionAggregator.js +377 -0
- package/dist/utils/positionAggregator.js.map +1 -0
- package/dist/utils/priceService.d.ts +45 -0
- package/dist/utils/priceService.d.ts.map +1 -0
- package/dist/utils/priceService.js +108 -0
- package/dist/utils/priceService.js.map +1 -0
- package/dist/utils/sodaxApi.d.ts +92 -0
- package/dist/utils/sodaxApi.d.ts.map +1 -0
- package/dist/utils/sodaxApi.js +143 -0
- package/dist/utils/sodaxApi.js.map +1 -0
- package/dist/utils/tokenResolver.d.ts +54 -0
- package/dist/utils/tokenResolver.d.ts.map +1 -0
- package/dist/utils/tokenResolver.js +252 -0
- package/dist/utils/tokenResolver.js.map +1 -0
- package/dist/wallet/backendConfig.d.ts +37 -0
- package/dist/wallet/backendConfig.d.ts.map +1 -0
- package/dist/wallet/backendConfig.js +125 -0
- package/dist/wallet/backendConfig.js.map +1 -0
- package/dist/wallet/backends/BankrBackend.d.ts +73 -0
- package/dist/wallet/backends/BankrBackend.d.ts.map +1 -0
- package/dist/wallet/backends/BankrBackend.js +315 -0
- package/dist/wallet/backends/BankrBackend.js.map +1 -0
- package/dist/wallet/backends/BankrWalletProvider.d.ts +75 -0
- package/dist/wallet/backends/BankrWalletProvider.d.ts.map +1 -0
- package/dist/wallet/backends/BankrWalletProvider.js +243 -0
- package/dist/wallet/backends/BankrWalletProvider.js.map +1 -0
- package/dist/wallet/backends/EnvBackend.d.ts +50 -0
- package/dist/wallet/backends/EnvBackend.d.ts.map +1 -0
- package/dist/wallet/backends/EnvBackend.js +114 -0
- package/dist/wallet/backends/EnvBackend.js.map +1 -0
- package/dist/wallet/backends/EvmWalletSkillBackend.d.ts +40 -0
- package/dist/wallet/backends/EvmWalletSkillBackend.d.ts.map +1 -0
- package/dist/wallet/backends/EvmWalletSkillBackend.js +81 -0
- package/dist/wallet/backends/EvmWalletSkillBackend.js.map +1 -0
- package/dist/wallet/backends/index.d.ts +10 -0
- package/dist/wallet/backends/index.d.ts.map +1 -0
- package/dist/wallet/backends/index.js +10 -0
- package/dist/wallet/backends/index.js.map +1 -0
- package/dist/wallet/index.d.ts +9 -0
- package/dist/wallet/index.d.ts.map +1 -0
- package/dist/wallet/index.js +12 -0
- package/dist/wallet/index.js.map +1 -0
- package/dist/wallet/providers/AmpedWalletProvider.d.ts +107 -0
- package/dist/wallet/providers/AmpedWalletProvider.d.ts.map +1 -0
- package/dist/wallet/providers/AmpedWalletProvider.js +208 -0
- package/dist/wallet/providers/AmpedWalletProvider.js.map +1 -0
- package/dist/wallet/providers/BankrBackend.d.ts +105 -0
- package/dist/wallet/providers/BankrBackend.d.ts.map +1 -0
- package/dist/wallet/providers/BankrBackend.js +327 -0
- package/dist/wallet/providers/BankrBackend.js.map +1 -0
- package/dist/wallet/providers/LocalKeyBackend.d.ts +62 -0
- package/dist/wallet/providers/LocalKeyBackend.d.ts.map +1 -0
- package/dist/wallet/providers/LocalKeyBackend.js +152 -0
- package/dist/wallet/providers/LocalKeyBackend.js.map +1 -0
- package/dist/wallet/providers/chainConfig.d.ts +209 -0
- package/dist/wallet/providers/chainConfig.d.ts.map +1 -0
- package/dist/wallet/providers/chainConfig.js +175 -0
- package/dist/wallet/providers/chainConfig.js.map +1 -0
- package/dist/wallet/providers/index.d.ts +30 -0
- package/dist/wallet/providers/index.d.ts.map +1 -0
- package/dist/wallet/providers/index.js +32 -0
- package/dist/wallet/providers/index.js.map +1 -0
- package/dist/wallet/providers/types.d.ts +156 -0
- package/dist/wallet/providers/types.d.ts.map +1 -0
- package/dist/wallet/providers/types.js +11 -0
- package/dist/wallet/providers/types.js.map +1 -0
- package/dist/wallet/skillWalletAdapter.d.ts +96 -0
- package/dist/wallet/skillWalletAdapter.d.ts.map +1 -0
- package/dist/wallet/skillWalletAdapter.js +280 -0
- package/dist/wallet/skillWalletAdapter.js.map +1 -0
- package/dist/wallet/types.d.ts +134 -0
- package/dist/wallet/types.d.ts.map +1 -0
- package/dist/wallet/types.js +138 -0
- package/dist/wallet/types.js.map +1 -0
- package/dist/wallet/walletManager.d.ts +111 -0
- package/dist/wallet/walletManager.d.ts.map +1 -0
- package/dist/wallet/walletManager.js +476 -0
- package/dist/wallet/walletManager.js.map +1 -0
- package/dist/wallet/walletRegistry.d.ts +95 -0
- package/dist/wallet/walletRegistry.d.ts.map +1 -0
- package/dist/wallet/walletRegistry.js +184 -0
- package/dist/wallet/walletRegistry.js.map +1 -0
- package/index.js +2 -0
- package/openclaw.plugin.json +37 -0
- package/package.json +69 -0
- package/src/__mocks__/@sodax/sdk.ts +28 -0
- package/src/__tests__/errors.test.ts +238 -0
- package/src/__tests__/policyEngine.test.ts +354 -0
- package/src/__tests__/positionAggregator.test.ts +271 -0
- package/src/__tests__/setup.ts +35 -0
- package/src/__tests__/sodaxApi.test.ts +203 -0
- package/src/__tests__/walletRegistry.test.ts +155 -0
- package/src/index.ts +376 -0
- package/src/policy/policyEngine.ts +389 -0
- package/src/providers/spokeProviderFactory.ts +283 -0
- package/src/sodax/client.ts +113 -0
- package/src/tools/bridge.ts +425 -0
- package/src/tools/discovery.ts +989 -0
- package/src/tools/moneyMarket.ts +1265 -0
- package/src/tools/portfolio.ts +697 -0
- package/src/tools/swap.ts +926 -0
- package/src/tools/walletManagement.ts +359 -0
- package/src/types.ts +228 -0
- package/src/utils/errorUtils.ts +16 -0
- package/src/utils/errors.ts +396 -0
- package/src/utils/positionAggregator.ts +559 -0
- package/src/utils/priceService.ts +153 -0
- package/src/utils/sodaxApi.ts +261 -0
- package/src/utils/tokenResolver.ts +286 -0
- package/src/wallet/backendConfig.ts +151 -0
- package/src/wallet/backends/BankrBackend.ts +399 -0
- package/src/wallet/backends/BankrWalletProvider.ts +329 -0
- package/src/wallet/backends/EnvBackend.ts +149 -0
- package/src/wallet/backends/EvmWalletSkillBackend.ts +110 -0
- package/src/wallet/backends/index.ts +10 -0
- package/src/wallet/index.ts +14 -0
- package/src/wallet/providers/AmpedWalletProvider.ts +267 -0
- package/src/wallet/providers/BankrBackend.ts +407 -0
- package/src/wallet/providers/LocalKeyBackend.ts +184 -0
- package/src/wallet/providers/chainConfig.ts +194 -0
- package/src/wallet/providers/index.ts +62 -0
- package/src/wallet/providers/types.ts +186 -0
- package/src/wallet/skillWalletAdapter.ts +335 -0
- package/src/wallet/types.ts +248 -0
- package/src/wallet/walletManager.ts +561 -0
- package/src/wallet/walletRegistry.ts +216 -0
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EVM Wallet Skill Adapter
|
|
3
|
+
*
|
|
4
|
+
* Integrates with the evm-wallet-skill to reuse existing wallet configuration
|
|
5
|
+
* instead of requiring custom AMPED_OC_WALLETS_JSON.
|
|
6
|
+
*
|
|
7
|
+
* Supports multiple wallet sources:
|
|
8
|
+
* - ~/.evm-wallet.json (evm-wallet-skill default location)
|
|
9
|
+
* - EVM_WALLETS_JSON environment variable
|
|
10
|
+
* - WALLET_CONFIG_JSON environment variable
|
|
11
|
+
*
|
|
12
|
+
* @see https://github.com/surfer77/evm-wallet-skill
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Wallet information from evm-wallet-skill
|
|
16
|
+
*/
|
|
17
|
+
export interface EvmWalletInfo {
|
|
18
|
+
id: string;
|
|
19
|
+
address: string;
|
|
20
|
+
chainId?: number;
|
|
21
|
+
provider?: 'privateKey' | 'kms' | 'hardware' | 'web3Auth';
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Wallet adapter options
|
|
25
|
+
*/
|
|
26
|
+
export interface WalletAdapterOptions {
|
|
27
|
+
preferSkill?: boolean;
|
|
28
|
+
walletId?: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* EVM Wallet Skill Adapter
|
|
32
|
+
*/
|
|
33
|
+
export declare class EvmWalletSkillAdapter {
|
|
34
|
+
private skillWallets;
|
|
35
|
+
private skillRpcs;
|
|
36
|
+
private useSkill;
|
|
37
|
+
constructor(options?: WalletAdapterOptions);
|
|
38
|
+
/**
|
|
39
|
+
* Load configuration from evm-wallet-skill
|
|
40
|
+
* Checks multiple sources in order:
|
|
41
|
+
* 1. ~/.evm-wallet.json (evm-wallet-skill default)
|
|
42
|
+
* 2. EVM_WALLETS_JSON environment variable
|
|
43
|
+
* 3. WALLET_CONFIG_JSON environment variable
|
|
44
|
+
*/
|
|
45
|
+
private loadSkillConfig;
|
|
46
|
+
/**
|
|
47
|
+
* Load wallet from ~/.evm-wallet.json (evm-wallet-skill format)
|
|
48
|
+
*/
|
|
49
|
+
private loadEvmWalletFile;
|
|
50
|
+
/**
|
|
51
|
+
* Load wallets from environment variables
|
|
52
|
+
*/
|
|
53
|
+
private loadEnvWallets;
|
|
54
|
+
/**
|
|
55
|
+
* Load RPC URLs - uses defaults, then overrides with environment variables
|
|
56
|
+
*/
|
|
57
|
+
private loadEnvRpcs;
|
|
58
|
+
/**
|
|
59
|
+
* Get wallet address - tries skill first, then legacy config
|
|
60
|
+
*/
|
|
61
|
+
getWalletAddress(walletId?: string): Promise<string>;
|
|
62
|
+
/**
|
|
63
|
+
* Get wallet private key - for signing transactions
|
|
64
|
+
*/
|
|
65
|
+
getPrivateKey(walletId?: string): Promise<string | null>;
|
|
66
|
+
/**
|
|
67
|
+
* Get full wallet config (address + privateKey if available)
|
|
68
|
+
*/
|
|
69
|
+
getWalletConfig(walletId?: string): Promise<{
|
|
70
|
+
address: string;
|
|
71
|
+
privateKey?: string;
|
|
72
|
+
}>;
|
|
73
|
+
/**
|
|
74
|
+
* Get RPC URL - tries skill first, then legacy config
|
|
75
|
+
*/
|
|
76
|
+
getRpcUrl(chainId: string | number): Promise<string>;
|
|
77
|
+
/**
|
|
78
|
+
* Check if using skill wallets
|
|
79
|
+
*/
|
|
80
|
+
isUsingSkillWallets(): boolean;
|
|
81
|
+
/**
|
|
82
|
+
* Check if using skill RPCs
|
|
83
|
+
*/
|
|
84
|
+
isUsingSkillRpcs(): boolean;
|
|
85
|
+
/**
|
|
86
|
+
* Get all skill wallet IDs
|
|
87
|
+
*/
|
|
88
|
+
getWalletIds(): string[];
|
|
89
|
+
/**
|
|
90
|
+
* Get all skill RPC chain IDs
|
|
91
|
+
*/
|
|
92
|
+
getRpcChainIds(): string[];
|
|
93
|
+
}
|
|
94
|
+
export declare function getWalletAdapter(options?: WalletAdapterOptions): EvmWalletSkillAdapter;
|
|
95
|
+
export declare function resetWalletAdapter(): void;
|
|
96
|
+
//# sourceMappingURL=skillWalletAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skillWalletAdapter.d.ts","sourceRoot":"","sources":["../../src/wallet/skillWalletAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAoCH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,YAAY,GAAG,KAAK,GAAG,UAAU,GAAG,UAAU,CAAC;CAC3D;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,YAAY,CAAyC;IAC7D,OAAO,CAAC,SAAS,CAAkC;IACnD,OAAO,CAAC,QAAQ,CAAU;gBAEd,OAAO,GAAE,oBAAyB;IAO9C;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IAWvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAyCzB;;OAEG;IACH,OAAO,CAAC,cAAc;IAkCtB;;OAEG;IACH,OAAO,CAAC,WAAW;IA0BnB;;OAEG;IACG,gBAAgB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAuB1D;;OAEG;IACG,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAqB9D;;OAEG;IACG,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAM3F;;OAEG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAsB1D;;OAEG;IACH,mBAAmB,IAAI,OAAO;IAI9B;;OAEG;IACH,gBAAgB,IAAI,OAAO;IAI3B;;OAEG;IACH,YAAY,IAAI,MAAM,EAAE;IAIxB;;OAEG;IACH,cAAc,IAAI,MAAM,EAAE;CAG3B;AAKD,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,qBAAqB,CAKtF;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EVM Wallet Skill Adapter
|
|
3
|
+
*
|
|
4
|
+
* Integrates with the evm-wallet-skill to reuse existing wallet configuration
|
|
5
|
+
* instead of requiring custom AMPED_OC_WALLETS_JSON.
|
|
6
|
+
*
|
|
7
|
+
* Supports multiple wallet sources:
|
|
8
|
+
* - ~/.evm-wallet.json (evm-wallet-skill default location)
|
|
9
|
+
* - EVM_WALLETS_JSON environment variable
|
|
10
|
+
* - WALLET_CONFIG_JSON environment variable
|
|
11
|
+
*
|
|
12
|
+
* @see https://github.com/surfer77/evm-wallet-skill
|
|
13
|
+
*/
|
|
14
|
+
import * as fs from 'fs';
|
|
15
|
+
import * as path from 'path';
|
|
16
|
+
import * as os from 'os';
|
|
17
|
+
import { ErrorCode, AmpedDefiError } from '../utils/errors';
|
|
18
|
+
import { normalizeChainId } from './types';
|
|
19
|
+
// Try to import viem for address derivation
|
|
20
|
+
let privateKeyToAccount = null;
|
|
21
|
+
try {
|
|
22
|
+
const viem = require('viem/accounts');
|
|
23
|
+
privateKeyToAccount = viem.privateKeyToAccount;
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
// viem not available, will use address from config
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* FALLBACK RPC URLs - primary RPCs come from evm-wallet-skill
|
|
30
|
+
* These are only used when evm-wallet-skill does not provide an RPC
|
|
31
|
+
*/
|
|
32
|
+
const FALLBACK_RPCS = {
|
|
33
|
+
// SODAX supported spoke chains
|
|
34
|
+
ethereum: 'https://ethereum.publicnode.com',
|
|
35
|
+
arbitrum: 'https://arb1.arbitrum.io/rpc',
|
|
36
|
+
base: 'https://mainnet.base.org',
|
|
37
|
+
optimism: 'https://mainnet.optimism.io',
|
|
38
|
+
avalanche: 'https://api.avax.network/ext/bc/C/rpc',
|
|
39
|
+
bsc: 'https://bsc-dataseed.binance.org',
|
|
40
|
+
polygon: 'https://polygon-bor-rpc.publicnode.com',
|
|
41
|
+
// Sonic hub chain
|
|
42
|
+
sonic: 'https://rpc.soniclabs.com',
|
|
43
|
+
// Additional chains (may not be SODAX-supported but useful)
|
|
44
|
+
lightlink: 'https://replicator.phoenix.lightlink.io/rpc/v1',
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* EVM Wallet Skill Adapter
|
|
48
|
+
*/
|
|
49
|
+
export class EvmWalletSkillAdapter {
|
|
50
|
+
skillWallets = new Map();
|
|
51
|
+
skillRpcs = new Map();
|
|
52
|
+
useSkill;
|
|
53
|
+
constructor(options = {}) {
|
|
54
|
+
this.useSkill = options.preferSkill !== false;
|
|
55
|
+
if (this.useSkill) {
|
|
56
|
+
this.loadSkillConfig();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Load configuration from evm-wallet-skill
|
|
61
|
+
* Checks multiple sources in order:
|
|
62
|
+
* 1. ~/.evm-wallet.json (evm-wallet-skill default)
|
|
63
|
+
* 2. EVM_WALLETS_JSON environment variable
|
|
64
|
+
* 3. WALLET_CONFIG_JSON environment variable
|
|
65
|
+
*/
|
|
66
|
+
loadSkillConfig() {
|
|
67
|
+
// 1. Try ~/.evm-wallet.json first (evm-wallet-skill default location)
|
|
68
|
+
this.loadEvmWalletFile();
|
|
69
|
+
// 2. Try environment variables
|
|
70
|
+
this.loadEnvWallets();
|
|
71
|
+
// 3. Load RPC URLs from environment
|
|
72
|
+
this.loadEnvRpcs();
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Load wallet from ~/.evm-wallet.json (evm-wallet-skill format)
|
|
76
|
+
*/
|
|
77
|
+
loadEvmWalletFile() {
|
|
78
|
+
try {
|
|
79
|
+
const walletPath = path.join(os.homedir(), '.evm-wallet.json');
|
|
80
|
+
if (!fs.existsSync(walletPath)) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const content = fs.readFileSync(walletPath, 'utf-8');
|
|
84
|
+
const walletData = JSON.parse(content);
|
|
85
|
+
// evm-wallet-skill stores: { privateKey: "0x..." } or { privateKey: "0x...", address: "0x..." }
|
|
86
|
+
if (walletData.privateKey) {
|
|
87
|
+
let address = walletData.address;
|
|
88
|
+
// Derive address from private key if not provided
|
|
89
|
+
if (!address && privateKeyToAccount) {
|
|
90
|
+
try {
|
|
91
|
+
const account = privateKeyToAccount(walletData.privateKey);
|
|
92
|
+
address = account.address;
|
|
93
|
+
}
|
|
94
|
+
catch (e) {
|
|
95
|
+
console.warn('[walletAdapter] Failed to derive address from private key');
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (address) {
|
|
99
|
+
this.skillWallets.set('default', {
|
|
100
|
+
id: 'default',
|
|
101
|
+
address,
|
|
102
|
+
provider: 'privateKey',
|
|
103
|
+
});
|
|
104
|
+
// Store private key for later use
|
|
105
|
+
this.skillWallets.get('default').privateKey = walletData.privateKey;
|
|
106
|
+
console.log(`[walletAdapter] Loaded wallet from ~/.evm-wallet.json (${address.slice(0, 8)}...)`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
// Silently ignore - file may not exist
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Load wallets from environment variables
|
|
116
|
+
*/
|
|
117
|
+
loadEnvWallets() {
|
|
118
|
+
try {
|
|
119
|
+
const skillWalletsJson = process.env.EVM_WALLETS_JSON || process.env.WALLET_CONFIG_JSON;
|
|
120
|
+
if (skillWalletsJson) {
|
|
121
|
+
const wallets = JSON.parse(skillWalletsJson);
|
|
122
|
+
if (Array.isArray(wallets)) {
|
|
123
|
+
wallets.forEach(w => {
|
|
124
|
+
this.skillWallets.set(w.id || w.name || 'default', {
|
|
125
|
+
id: w.id || w.name || 'default',
|
|
126
|
+
address: w.address,
|
|
127
|
+
chainId: w.chainId,
|
|
128
|
+
provider: w.provider || w.type,
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
else if (typeof wallets === 'object') {
|
|
133
|
+
Object.entries(wallets).forEach(([id, config]) => {
|
|
134
|
+
this.skillWallets.set(id, {
|
|
135
|
+
id,
|
|
136
|
+
address: config.address,
|
|
137
|
+
chainId: config.chainId,
|
|
138
|
+
provider: config.provider || 'privateKey',
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
console.log(`[walletAdapter] Loaded ${this.skillWallets.size} wallets from environment`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
console.warn('[walletAdapter] Failed to parse wallet environment variables:', error);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Load RPC URLs - uses defaults, then overrides with environment variables
|
|
151
|
+
*/
|
|
152
|
+
loadEnvRpcs() {
|
|
153
|
+
// Start with default RPCs
|
|
154
|
+
Object.entries(FALLBACK_RPCS).forEach(([chain, url]) => {
|
|
155
|
+
this.skillRpcs.set(chain.toLowerCase(), url);
|
|
156
|
+
});
|
|
157
|
+
// Override with environment variables if provided
|
|
158
|
+
try {
|
|
159
|
+
const skillRpcsJson = process.env.AMPED_OC_RPC_URLS_JSON ||
|
|
160
|
+
process.env.EVM_RPC_URLS_JSON ||
|
|
161
|
+
process.env.RPC_URLS_JSON;
|
|
162
|
+
if (skillRpcsJson) {
|
|
163
|
+
const rpcs = JSON.parse(skillRpcsJson);
|
|
164
|
+
Object.entries(rpcs).forEach(([chain, url]) => {
|
|
165
|
+
this.skillRpcs.set(String(chain).toLowerCase(), url);
|
|
166
|
+
});
|
|
167
|
+
console.log(`[walletAdapter] Custom RPC URLs configured for: ${Object.keys(rpcs).join(', ')}`);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
console.warn('[walletAdapter] Failed to parse RPC environment variables:', error);
|
|
172
|
+
}
|
|
173
|
+
console.log(`[walletAdapter] ${this.skillRpcs.size} RPC URLs available (includes defaults)`);
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Get wallet address - tries skill first, then legacy config
|
|
177
|
+
*/
|
|
178
|
+
async getWalletAddress(walletId) {
|
|
179
|
+
// Try skill wallets
|
|
180
|
+
if (this.skillWallets.size > 0) {
|
|
181
|
+
const wallet = this.skillWallets.get(walletId || 'default') ||
|
|
182
|
+
Array.from(this.skillWallets.values())[0];
|
|
183
|
+
if (wallet)
|
|
184
|
+
return wallet.address;
|
|
185
|
+
}
|
|
186
|
+
// Fallback to AMPED_OC_WALLETS_JSON
|
|
187
|
+
const legacy = process.env.AMPED_OC_WALLETS_JSON;
|
|
188
|
+
if (legacy) {
|
|
189
|
+
const config = JSON.parse(legacy);
|
|
190
|
+
const wallet = config[walletId || 'main'] || config.default || Object.values(config)[0];
|
|
191
|
+
if (wallet?.address)
|
|
192
|
+
return wallet.address;
|
|
193
|
+
}
|
|
194
|
+
throw new AmpedDefiError(ErrorCode.WALLET_NOT_FOUND, `Wallet not found: ${walletId || 'default'}`, { remediation: 'Configure ~/.evm-wallet.json, EVM_WALLETS_JSON, or AMPED_OC_WALLETS_JSON' });
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Get wallet private key - for signing transactions
|
|
198
|
+
*/
|
|
199
|
+
async getPrivateKey(walletId) {
|
|
200
|
+
// Try skill wallets
|
|
201
|
+
if (this.skillWallets.size > 0) {
|
|
202
|
+
const wallet = this.skillWallets.get(walletId || 'default') ||
|
|
203
|
+
Array.from(this.skillWallets.values())[0];
|
|
204
|
+
if (wallet && wallet.privateKey) {
|
|
205
|
+
return wallet.privateKey;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
// Fallback to AMPED_OC_WALLETS_JSON
|
|
209
|
+
const legacy = process.env.AMPED_OC_WALLETS_JSON;
|
|
210
|
+
if (legacy) {
|
|
211
|
+
const config = JSON.parse(legacy);
|
|
212
|
+
const wallet = config[walletId || 'main'] || config.default || Object.values(config)[0];
|
|
213
|
+
if (wallet?.privateKey)
|
|
214
|
+
return wallet.privateKey;
|
|
215
|
+
}
|
|
216
|
+
return null;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Get full wallet config (address + privateKey if available)
|
|
220
|
+
*/
|
|
221
|
+
async getWalletConfig(walletId) {
|
|
222
|
+
const address = await this.getWalletAddress(walletId);
|
|
223
|
+
const privateKey = await this.getPrivateKey(walletId);
|
|
224
|
+
return { address, privateKey: privateKey || undefined };
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Get RPC URL - tries skill first, then legacy config
|
|
228
|
+
*/
|
|
229
|
+
async getRpcUrl(chainId) {
|
|
230
|
+
const key = normalizeChainId(String(chainId)).toLowerCase();
|
|
231
|
+
// Try skill RPCs
|
|
232
|
+
if (this.skillRpcs.has(key)) {
|
|
233
|
+
return this.skillRpcs.get(key);
|
|
234
|
+
}
|
|
235
|
+
// Fallback to AMPED_OC_RPC_URLS_JSON
|
|
236
|
+
const legacy = process.env.AMPED_OC_RPC_URLS_JSON;
|
|
237
|
+
if (legacy) {
|
|
238
|
+
const config = JSON.parse(legacy);
|
|
239
|
+
if (config[key] || config[chainId])
|
|
240
|
+
return config[key] || config[chainId];
|
|
241
|
+
}
|
|
242
|
+
throw new AmpedDefiError(ErrorCode.RPC_URL_NOT_CONFIGURED, `RPC URL not configured for chain: ${chainId}`, { remediation: 'Configure EVM_RPC_URLS_JSON or AMPED_OC_RPC_URLS_JSON' });
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Check if using skill wallets
|
|
246
|
+
*/
|
|
247
|
+
isUsingSkillWallets() {
|
|
248
|
+
return this.skillWallets.size > 0;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Check if using skill RPCs
|
|
252
|
+
*/
|
|
253
|
+
isUsingSkillRpcs() {
|
|
254
|
+
return this.skillRpcs.size > 0;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Get all skill wallet IDs
|
|
258
|
+
*/
|
|
259
|
+
getWalletIds() {
|
|
260
|
+
return Array.from(this.skillWallets.keys());
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Get all skill RPC chain IDs
|
|
264
|
+
*/
|
|
265
|
+
getRpcChainIds() {
|
|
266
|
+
return Array.from(this.skillRpcs.keys());
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
// Singleton
|
|
270
|
+
let adapter = null;
|
|
271
|
+
export function getWalletAdapter(options) {
|
|
272
|
+
if (!adapter) {
|
|
273
|
+
adapter = new EvmWalletSkillAdapter(options);
|
|
274
|
+
}
|
|
275
|
+
return adapter;
|
|
276
|
+
}
|
|
277
|
+
export function resetWalletAdapter() {
|
|
278
|
+
adapter = null;
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=skillWalletAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skillWalletAdapter.js","sourceRoot":"","sources":["../../src/wallet/skillWalletAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wallet Types - Multi-source wallet management
|
|
3
|
+
*
|
|
4
|
+
* Supports:
|
|
5
|
+
* - evm-wallet-skill (local key from ~/.evm-wallet.json)
|
|
6
|
+
* - Bankr (API-based, limited chains)
|
|
7
|
+
* - Environment variables (AMPED_OC_WALLETS_JSON)
|
|
8
|
+
*/
|
|
9
|
+
import type { Address, Hash } from 'viem';
|
|
10
|
+
/**
|
|
11
|
+
* Supported wallet backend types
|
|
12
|
+
*/
|
|
13
|
+
export type WalletBackendType = 'evm-wallet-skill' | 'bankr' | 'env';
|
|
14
|
+
/**
|
|
15
|
+
* Raw transaction for Bankr submission
|
|
16
|
+
*/
|
|
17
|
+
export interface RawTransaction {
|
|
18
|
+
to: Address;
|
|
19
|
+
data: `0x${string}`;
|
|
20
|
+
value: string;
|
|
21
|
+
chainId: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Wallet info returned by list operations
|
|
25
|
+
*/
|
|
26
|
+
export interface WalletInfo {
|
|
27
|
+
nickname: string;
|
|
28
|
+
type: WalletBackendType;
|
|
29
|
+
address: Address;
|
|
30
|
+
chains: string[];
|
|
31
|
+
isDefault: boolean;
|
|
32
|
+
/** Solana address (if wallet has one, e.g., Bankr) */
|
|
33
|
+
solanaAddress?: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Wallet backend interface
|
|
37
|
+
* Different implementations for different sources
|
|
38
|
+
*/
|
|
39
|
+
export interface IWalletBackend {
|
|
40
|
+
readonly type: WalletBackendType;
|
|
41
|
+
readonly nickname: string;
|
|
42
|
+
readonly supportedChains: readonly string[];
|
|
43
|
+
/**
|
|
44
|
+
* Get the wallet address
|
|
45
|
+
*/
|
|
46
|
+
getAddress(): Promise<Address>;
|
|
47
|
+
/**
|
|
48
|
+
* Check if this wallet supports a specific chain
|
|
49
|
+
*/
|
|
50
|
+
supportsChain(chainId: string): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Get private key (for local/env wallets)
|
|
53
|
+
* Returns undefined for Bankr (no local key access)
|
|
54
|
+
*/
|
|
55
|
+
getPrivateKey?(): Promise<`0x${string}`>;
|
|
56
|
+
/**
|
|
57
|
+
* Send raw transaction via Bankr API
|
|
58
|
+
* Only available for Bankr backend
|
|
59
|
+
*/
|
|
60
|
+
sendRawTransaction?(tx: RawTransaction): Promise<Hash>;
|
|
61
|
+
/**
|
|
62
|
+
* Check if backend is ready/configured
|
|
63
|
+
*/
|
|
64
|
+
isReady(): Promise<boolean>;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Wallet configuration from wallets.json
|
|
68
|
+
*/
|
|
69
|
+
export interface WalletConfig {
|
|
70
|
+
source: WalletBackendType;
|
|
71
|
+
path?: string;
|
|
72
|
+
apiKey?: string;
|
|
73
|
+
apiUrl?: string;
|
|
74
|
+
envVar?: string;
|
|
75
|
+
address?: Address;
|
|
76
|
+
privateKey?: `0x${string}`;
|
|
77
|
+
chains?: string[];
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Wallets config file structure
|
|
81
|
+
*/
|
|
82
|
+
export interface WalletsConfigFile {
|
|
83
|
+
wallets: Record<string, WalletConfig>;
|
|
84
|
+
default?: string;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Chain IDs for Bankr submission
|
|
88
|
+
*/
|
|
89
|
+
export declare const BANKR_CHAIN_IDS: Record<string, number>;
|
|
90
|
+
/**
|
|
91
|
+
* Chains supported by Bankr
|
|
92
|
+
*/
|
|
93
|
+
export declare const BANKR_SUPPORTED_CHAINS: readonly ["ethereum", "polygon", "base"];
|
|
94
|
+
/**
|
|
95
|
+
* All SODAX-supported EVM chains
|
|
96
|
+
* NOTE: Keep in sync with SODAX SDK supported chains
|
|
97
|
+
* Non-EVM chains (solana, sui, stellar, injective) are excluded
|
|
98
|
+
*/
|
|
99
|
+
export declare const SODAX_SUPPORTED_CHAINS: readonly ["ethereum", "base", "polygon", "arbitrum", "optimism", "sonic", "avalanche", "bsc", "lightlink", "hyper", "kaia"];
|
|
100
|
+
/**
|
|
101
|
+
* SODAX to simple chain ID mapping
|
|
102
|
+
* SODAX uses prefixed format: 0x2105.base, 0x89.polygon
|
|
103
|
+
* Simple format: base, polygon, ethereum
|
|
104
|
+
*/
|
|
105
|
+
export declare const SODAX_TO_SIMPLE_CHAIN: Record<string, string>;
|
|
106
|
+
/**
|
|
107
|
+
* Simple to SODAX chain ID mapping
|
|
108
|
+
*/
|
|
109
|
+
export declare const SIMPLE_TO_SODAX_CHAIN: Record<string, string>;
|
|
110
|
+
/**
|
|
111
|
+
* Normalize chain ID to simple format (base, polygon, ethereum)
|
|
112
|
+
* Handles both SODAX prefixed format and simple format
|
|
113
|
+
*/
|
|
114
|
+
export declare function normalizeChainId(chainId: string): string;
|
|
115
|
+
/**
|
|
116
|
+
* Convert simple chain ID to SODAX format
|
|
117
|
+
*/
|
|
118
|
+
export declare function toSodaxChainId(chainId: string): string;
|
|
119
|
+
/**
|
|
120
|
+
* Check if two chain IDs refer to the same chain
|
|
121
|
+
* Handles format differences between SODAX and simple
|
|
122
|
+
*/
|
|
123
|
+
export declare function isSameChain(chainId1: string, chainId2: string): boolean;
|
|
124
|
+
/**
|
|
125
|
+
* Check if a chain is supported by Bankr
|
|
126
|
+
* Handles both SODAX and simple chain ID formats
|
|
127
|
+
*/
|
|
128
|
+
export declare function isBankrSupportedChain(chainId: string): boolean;
|
|
129
|
+
/**
|
|
130
|
+
* Get numeric chain ID for Bankr
|
|
131
|
+
* Handles both SODAX and simple chain ID formats
|
|
132
|
+
*/
|
|
133
|
+
export declare function getBankrChainId(chainId: string): number;
|
|
134
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/wallet/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wallet Types - Multi-source wallet management
|
|
3
|
+
*
|
|
4
|
+
* Supports:
|
|
5
|
+
* - evm-wallet-skill (local key from ~/.evm-wallet.json)
|
|
6
|
+
* - Bankr (API-based, limited chains)
|
|
7
|
+
* - Environment variables (AMPED_OC_WALLETS_JSON)
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Chain IDs for Bankr submission
|
|
11
|
+
*/
|
|
12
|
+
export const BANKR_CHAIN_IDS = {
|
|
13
|
+
ethereum: 1,
|
|
14
|
+
polygon: 137,
|
|
15
|
+
base: 8453,
|
|
16
|
+
unichain: 130,
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Chains supported by Bankr
|
|
20
|
+
*/
|
|
21
|
+
export const BANKR_SUPPORTED_CHAINS = ['ethereum', 'polygon', 'base'];
|
|
22
|
+
/**
|
|
23
|
+
* All SODAX-supported EVM chains
|
|
24
|
+
* NOTE: Keep in sync with SODAX SDK supported chains
|
|
25
|
+
* Non-EVM chains (solana, sui, stellar, injective) are excluded
|
|
26
|
+
*/
|
|
27
|
+
export const SODAX_SUPPORTED_CHAINS = [
|
|
28
|
+
'ethereum',
|
|
29
|
+
'base',
|
|
30
|
+
'polygon',
|
|
31
|
+
'arbitrum',
|
|
32
|
+
'optimism',
|
|
33
|
+
'sonic',
|
|
34
|
+
'avalanche',
|
|
35
|
+
'bsc',
|
|
36
|
+
'lightlink',
|
|
37
|
+
'hyper',
|
|
38
|
+
'kaia',
|
|
39
|
+
];
|
|
40
|
+
/**
|
|
41
|
+
* SODAX to simple chain ID mapping
|
|
42
|
+
* SODAX uses prefixed format: 0x2105.base, 0x89.polygon
|
|
43
|
+
* Simple format: base, polygon, ethereum
|
|
44
|
+
*/
|
|
45
|
+
export const SODAX_TO_SIMPLE_CHAIN = {
|
|
46
|
+
// SODAX format -> simple
|
|
47
|
+
'0x2105.base': 'base',
|
|
48
|
+
'0x89.polygon': 'polygon',
|
|
49
|
+
'0xa4b1.arbitrum': 'arbitrum',
|
|
50
|
+
'0xa.optimism': 'optimism',
|
|
51
|
+
'0x38.bsc': 'bsc',
|
|
52
|
+
'0xa86a.avax': 'avalanche',
|
|
53
|
+
'0x2019.kaia': 'kaia',
|
|
54
|
+
// These don't have prefixes in SODAX
|
|
55
|
+
'ethereum': 'ethereum',
|
|
56
|
+
'sonic': 'sonic',
|
|
57
|
+
'lightlink': 'lightlink',
|
|
58
|
+
'hyper': 'hyperevm',
|
|
59
|
+
'kaia': 'kaia',
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Simple to SODAX chain ID mapping
|
|
63
|
+
*/
|
|
64
|
+
export const SIMPLE_TO_SODAX_CHAIN = {
|
|
65
|
+
// Simple -> SODAX format
|
|
66
|
+
'base': '0x2105.base',
|
|
67
|
+
'polygon': '0x89.polygon',
|
|
68
|
+
'arbitrum': '0xa4b1.arbitrum',
|
|
69
|
+
'optimism': '0xa.optimism',
|
|
70
|
+
'bsc': '0x38.bsc',
|
|
71
|
+
'avalanche': '0xa86a.avax',
|
|
72
|
+
'kaia': '0x2019.kaia',
|
|
73
|
+
// No prefix needed
|
|
74
|
+
'ethereum': 'ethereum',
|
|
75
|
+
'sonic': 'sonic',
|
|
76
|
+
'lightlink': 'lightlink',
|
|
77
|
+
'hyperevm': 'hyper',
|
|
78
|
+
'hyper': 'hyper',
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* Normalize chain ID to simple format (base, polygon, ethereum)
|
|
82
|
+
* Handles both SODAX prefixed format and simple format
|
|
83
|
+
*/
|
|
84
|
+
export function normalizeChainId(chainId) {
|
|
85
|
+
// Already in mapping
|
|
86
|
+
if (SODAX_TO_SIMPLE_CHAIN[chainId]) {
|
|
87
|
+
return SODAX_TO_SIMPLE_CHAIN[chainId];
|
|
88
|
+
}
|
|
89
|
+
// Check if it's already simple format
|
|
90
|
+
if (SIMPLE_TO_SODAX_CHAIN[chainId]) {
|
|
91
|
+
return chainId;
|
|
92
|
+
}
|
|
93
|
+
// Try to extract from prefixed format (0xNNN.name -> name)
|
|
94
|
+
const match = chainId.match(/^0x[a-fA-F0-9]+\.(.+)$/);
|
|
95
|
+
if (match) {
|
|
96
|
+
return match[1];
|
|
97
|
+
}
|
|
98
|
+
// Return as-is
|
|
99
|
+
return chainId;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Convert simple chain ID to SODAX format
|
|
103
|
+
*/
|
|
104
|
+
export function toSodaxChainId(chainId) {
|
|
105
|
+
// Already in SODAX format
|
|
106
|
+
if (chainId.startsWith('0x') && chainId.includes('.')) {
|
|
107
|
+
return chainId;
|
|
108
|
+
}
|
|
109
|
+
return SIMPLE_TO_SODAX_CHAIN[chainId] || chainId;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Check if two chain IDs refer to the same chain
|
|
113
|
+
* Handles format differences between SODAX and simple
|
|
114
|
+
*/
|
|
115
|
+
export function isSameChain(chainId1, chainId2) {
|
|
116
|
+
return normalizeChainId(chainId1) === normalizeChainId(chainId2);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Check if a chain is supported by Bankr
|
|
120
|
+
* Handles both SODAX and simple chain ID formats
|
|
121
|
+
*/
|
|
122
|
+
export function isBankrSupportedChain(chainId) {
|
|
123
|
+
const normalized = normalizeChainId(chainId);
|
|
124
|
+
return BANKR_SUPPORTED_CHAINS.includes(normalized);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Get numeric chain ID for Bankr
|
|
128
|
+
* Handles both SODAX and simple chain ID formats
|
|
129
|
+
*/
|
|
130
|
+
export function getBankrChainId(chainId) {
|
|
131
|
+
const normalized = normalizeChainId(chainId);
|
|
132
|
+
const id = BANKR_CHAIN_IDS[normalized];
|
|
133
|
+
if (!id) {
|
|
134
|
+
throw new Error(`Chain ${chainId} (normalized: ${normalized}) not supported by Bankr. Supported: ${BANKR_SUPPORTED_CHAINS.join(', ')}`);
|
|
135
|
+
}
|
|
136
|
+
return id;
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/wallet/types.ts"],"names":[],"mappings":"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"}
|