@sip-protocol/sdk 0.7.3 → 0.7.4
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/LICENSE +21 -0
- package/README.md +267 -0
- package/dist/{TransportWebUSB-TQ7WZ4LE.mjs → TransportWebUSB-YQMAGJAJ.mjs} +12 -9
- package/dist/browser.d.mts +10 -4
- package/dist/browser.d.ts +10 -4
- package/dist/browser.js +47556 -19603
- package/dist/browser.mjs +628 -48
- package/dist/chunk-4GRJ5MAW.mjs +152 -0
- package/dist/chunk-5D7A3L3W.mjs +717 -0
- package/dist/chunk-64AYA5F5.mjs +7834 -0
- package/dist/chunk-GMDGB22A.mjs +379 -0
- package/dist/chunk-I534WKN7.mjs +328 -0
- package/dist/chunk-IBZVA5Y7.mjs +1003 -0
- package/dist/chunk-PRRZAWJE.mjs +223 -0
- package/dist/{chunk-UJCSKKID.mjs → chunk-XGB3TDIC.mjs} +13 -1
- package/dist/{chunk-3M3HNQCW.mjs → chunk-YWGJ77A2.mjs} +28656 -13103
- package/dist/{chunk-6WGN57S2.mjs → chunk-Z3K7W5S3.mjs} +48 -0
- package/dist/constants-LHAAUC2T.mjs +51 -0
- package/dist/dist-2OGQ7FED.mjs +3957 -0
- package/dist/dist-IFHPYLDX.mjs +254 -0
- package/dist/fulfillment_proof-ANHVPKTB.mjs +21 -0
- package/dist/funding_proof-ICFZ5LHY.mjs +21 -0
- package/dist/{index-DIBZHOOQ.d.ts → index-DXh2IGkz.d.ts} +21239 -10304
- package/dist/{index-8MQz13eJ.d.mts → index-DeE1ZzA4.d.mts} +21239 -10304
- package/dist/index.d.mts +9 -3
- package/dist/index.d.ts +9 -3
- package/dist/index.js +48396 -19623
- package/dist/index.mjs +537 -19
- package/dist/interface-Bf7w1PLW.d.mts +679 -0
- package/dist/interface-Bf7w1PLW.d.ts +679 -0
- package/dist/{noir-DKfEzWy9.d.mts → noir-kzbLVTei.d.mts} +31 -21
- package/dist/{noir-DKfEzWy9.d.ts → noir-kzbLVTei.d.ts} +31 -21
- package/dist/proofs/halo2.d.mts +151 -0
- package/dist/proofs/halo2.d.ts +151 -0
- package/dist/proofs/halo2.js +350 -0
- package/dist/proofs/halo2.mjs +11 -0
- package/dist/proofs/kimchi.d.mts +160 -0
- package/dist/proofs/kimchi.d.ts +160 -0
- package/dist/proofs/kimchi.js +431 -0
- package/dist/proofs/kimchi.mjs +13 -0
- package/dist/proofs/noir.d.mts +1 -1
- package/dist/proofs/noir.d.ts +1 -1
- package/dist/proofs/noir.js +74 -18
- package/dist/proofs/noir.mjs +84 -24
- package/dist/solana-U3MEGU7W.mjs +280 -0
- package/dist/validity_proof-3POXLPNY.mjs +21 -0
- package/package.json +54 -21
- package/src/adapters/index.ts +41 -0
- package/src/adapters/jupiter.ts +571 -0
- package/src/adapters/near-intents.ts +135 -0
- package/src/advisor/advisor.ts +653 -0
- package/src/advisor/index.ts +54 -0
- package/src/advisor/tools.ts +303 -0
- package/src/advisor/types.ts +164 -0
- package/src/chains/ethereum/announcement.ts +536 -0
- package/src/chains/ethereum/bnb-optimizations.ts +474 -0
- package/src/chains/ethereum/commitment.ts +522 -0
- package/src/chains/ethereum/constants.ts +462 -0
- package/src/chains/ethereum/deployment.ts +596 -0
- package/src/chains/ethereum/gas-estimation.ts +538 -0
- package/src/chains/ethereum/index.ts +268 -0
- package/src/chains/ethereum/optimizations.ts +614 -0
- package/src/chains/ethereum/privacy-adapter.ts +855 -0
- package/src/chains/ethereum/registry.ts +584 -0
- package/src/chains/ethereum/rpc.ts +905 -0
- package/src/chains/ethereum/stealth.ts +491 -0
- package/src/chains/ethereum/token.ts +790 -0
- package/src/chains/ethereum/transfer.ts +637 -0
- package/src/chains/ethereum/types.ts +456 -0
- package/src/chains/ethereum/viewing-key.ts +455 -0
- package/src/chains/near/commitment.ts +608 -0
- package/src/chains/near/constants.ts +284 -0
- package/src/chains/near/function-call.ts +871 -0
- package/src/chains/near/history.ts +654 -0
- package/src/chains/near/implicit-account.ts +840 -0
- package/src/chains/near/index.ts +393 -0
- package/src/chains/near/native-transfer.ts +658 -0
- package/src/chains/near/nep141.ts +775 -0
- package/src/chains/near/privacy-adapter.ts +889 -0
- package/src/chains/near/resolver.ts +971 -0
- package/src/chains/near/rpc.ts +1016 -0
- package/src/chains/near/stealth.ts +419 -0
- package/src/chains/near/types.ts +317 -0
- package/src/chains/near/viewing-key.ts +876 -0
- package/src/chains/solana/anchor-transfer.ts +386 -0
- package/src/chains/solana/commitment.ts +577 -0
- package/src/chains/solana/constants.ts +126 -12
- package/src/chains/solana/ephemeral-keys.ts +543 -0
- package/src/chains/solana/index.ts +252 -1
- package/src/chains/solana/key-derivation.ts +418 -0
- package/src/chains/solana/kit-compat.ts +334 -0
- package/src/chains/solana/optimizations.ts +560 -0
- package/src/chains/solana/privacy-adapter.ts +605 -0
- package/src/chains/solana/providers/generic.ts +47 -6
- package/src/chains/solana/providers/helius-enhanced-types.ts +336 -0
- package/src/chains/solana/providers/helius-enhanced.ts +623 -0
- package/src/chains/solana/providers/helius.ts +186 -33
- package/src/chains/solana/providers/index.ts +31 -0
- package/src/chains/solana/providers/interface.ts +61 -18
- package/src/chains/solana/providers/quicknode.ts +409 -0
- package/src/chains/solana/providers/triton.ts +426 -0
- package/src/chains/solana/providers/webhook.ts +338 -67
- package/src/chains/solana/rpc-client.ts +1150 -0
- package/src/chains/solana/scan.ts +83 -66
- package/src/chains/solana/sol-transfer.ts +732 -0
- package/src/chains/solana/spl-transfer.ts +886 -0
- package/src/chains/solana/stealth-scanner.ts +703 -0
- package/src/chains/solana/sunspot-verifier.ts +453 -0
- package/src/chains/solana/transaction-builder.ts +755 -0
- package/src/chains/solana/transfer.ts +74 -5
- package/src/chains/solana/types.ts +57 -6
- package/src/chains/solana/utils.ts +110 -0
- package/src/chains/solana/viewing-key.ts +807 -0
- package/src/compliance/fireblocks.ts +921 -0
- package/src/compliance/index.ts +23 -0
- package/src/compliance/range-sas.ts +398 -33
- package/src/config/endpoints.ts +100 -0
- package/src/crypto.ts +11 -8
- package/src/errors.ts +82 -0
- package/src/evm/erc4337-relayer.ts +830 -0
- package/src/evm/index.ts +47 -0
- package/src/fees/calculator.ts +396 -0
- package/src/fees/index.ts +87 -0
- package/src/fees/near-contract.ts +429 -0
- package/src/fees/types.ts +268 -0
- package/src/index.ts +686 -1
- package/src/intent.ts +6 -3
- package/src/logger.ts +324 -0
- package/src/network/index.ts +80 -0
- package/src/network/proxy.ts +691 -0
- package/src/optimizations/index.ts +541 -0
- package/src/oracle/types.ts +1 -0
- package/src/privacy-backends/arcium-types.ts +727 -0
- package/src/privacy-backends/arcium.ts +719 -0
- package/src/privacy-backends/combined-privacy.ts +866 -0
- package/src/privacy-backends/cspl-token.ts +595 -0
- package/src/privacy-backends/cspl-types.ts +512 -0
- package/src/privacy-backends/cspl.ts +907 -0
- package/src/privacy-backends/health.ts +488 -0
- package/src/privacy-backends/inco-types.ts +323 -0
- package/src/privacy-backends/inco.ts +616 -0
- package/src/privacy-backends/index.ts +254 -4
- package/src/privacy-backends/interface.ts +649 -6
- package/src/privacy-backends/lru-cache.ts +343 -0
- package/src/privacy-backends/magicblock.ts +458 -0
- package/src/privacy-backends/mock.ts +258 -0
- package/src/privacy-backends/privacycash.ts +13 -17
- package/src/privacy-backends/private-swap.ts +570 -0
- package/src/privacy-backends/rate-limiter.ts +683 -0
- package/src/privacy-backends/registry.ts +414 -2
- package/src/privacy-backends/router.ts +283 -3
- package/src/privacy-backends/shadowwire.ts +449 -0
- package/src/privacy-backends/sip-native.ts +3 -0
- package/src/privacy-logger.ts +191 -0
- package/src/production-safety.ts +373 -0
- package/src/proofs/aggregator.ts +1029 -0
- package/src/proofs/browser-composer.ts +1150 -0
- package/src/proofs/browser.ts +113 -25
- package/src/proofs/cache/index.ts +127 -0
- package/src/proofs/cache/interface.ts +545 -0
- package/src/proofs/cache/key-generator.ts +188 -0
- package/src/proofs/cache/lru-cache.ts +481 -0
- package/src/proofs/cache/multi-tier-cache.ts +575 -0
- package/src/proofs/cache/persistent-cache.ts +788 -0
- package/src/proofs/compliance-proof.ts +872 -0
- package/src/proofs/composer/base.ts +923 -0
- package/src/proofs/composer/index.ts +25 -0
- package/src/proofs/composer/interface.ts +518 -0
- package/src/proofs/composer/types.ts +383 -0
- package/src/proofs/converters/halo2.ts +452 -0
- package/src/proofs/converters/index.ts +208 -0
- package/src/proofs/converters/interface.ts +363 -0
- package/src/proofs/converters/kimchi.ts +462 -0
- package/src/proofs/converters/noir.ts +451 -0
- package/src/proofs/fallback.ts +888 -0
- package/src/proofs/halo2.ts +42 -0
- package/src/proofs/index.ts +471 -0
- package/src/proofs/interface.ts +13 -0
- package/src/proofs/kimchi.ts +42 -0
- package/src/proofs/lazy.ts +1004 -0
- package/src/proofs/mock.ts +25 -1
- package/src/proofs/noir.ts +110 -29
- package/src/proofs/orchestrator.ts +960 -0
- package/src/proofs/parallel/concurrency.ts +297 -0
- package/src/proofs/parallel/dependency-graph.ts +602 -0
- package/src/proofs/parallel/executor.ts +420 -0
- package/src/proofs/parallel/index.ts +131 -0
- package/src/proofs/parallel/interface.ts +685 -0
- package/src/proofs/parallel/worker-pool.ts +644 -0
- package/src/proofs/providers/halo2.ts +560 -0
- package/src/proofs/providers/index.ts +34 -0
- package/src/proofs/providers/kimchi.ts +641 -0
- package/src/proofs/validator.ts +881 -0
- package/src/proofs/verifier.ts +867 -0
- package/src/quantum/index.ts +112 -0
- package/src/quantum/winternitz-vault.ts +639 -0
- package/src/quantum/wots.ts +611 -0
- package/src/settlement/backends/direct-chain.ts +1 -0
- package/src/settlement/index.ts +9 -0
- package/src/settlement/router.ts +732 -46
- package/src/solana/index.ts +72 -0
- package/src/solana/jito-relayer.ts +687 -0
- package/src/solana/noir-verifier-types.ts +430 -0
- package/src/solana/noir-verifier.ts +816 -0
- package/src/stealth/address-derivation.ts +193 -0
- package/src/stealth/ed25519.ts +431 -0
- package/src/stealth/index.ts +233 -0
- package/src/stealth/meta-address.ts +221 -0
- package/src/stealth/secp256k1.ts +368 -0
- package/src/stealth/utils.ts +194 -0
- package/src/stealth.ts +50 -1504
- package/src/sync/index.ts +106 -0
- package/src/sync/manager.ts +504 -0
- package/src/sync/mock-provider.ts +318 -0
- package/src/sync/oblivious.ts +625 -0
- package/src/tokens/index.ts +15 -0
- package/src/tokens/registry.ts +301 -0
- package/src/utils/deprecation.ts +94 -0
- package/src/utils/index.ts +9 -0
- package/src/wallet/ethereum/index.ts +68 -0
- package/src/wallet/ethereum/metamask-privacy.ts +420 -0
- package/src/wallet/ethereum/multi-wallet.ts +646 -0
- package/src/wallet/ethereum/privacy-adapter.ts +700 -0
- package/src/wallet/ethereum/types.ts +3 -1
- package/src/wallet/ethereum/walletconnect-adapter.ts +675 -0
- package/src/wallet/hardware/index.ts +10 -0
- package/src/wallet/hardware/ledger-privacy.ts +414 -0
- package/src/wallet/index.ts +71 -0
- package/src/wallet/near/adapter.ts +626 -0
- package/src/wallet/near/index.ts +86 -0
- package/src/wallet/near/meteor-wallet.ts +1153 -0
- package/src/wallet/near/my-near-wallet.ts +790 -0
- package/src/wallet/near/wallet-selector.ts +702 -0
- package/src/wallet/solana/adapter.ts +6 -4
- package/src/wallet/solana/index.ts +13 -0
- package/src/wallet/solana/privacy-adapter.ts +567 -0
- package/src/wallet/sui/types.ts +6 -4
- package/src/zcash/rpc-client.ts +13 -6
- package/dist/chunk-2XIVXWHA.mjs +0 -1930
- package/dist/chunk-3INS3PR5.mjs +0 -884
- package/dist/chunk-3OVABDRH.mjs +0 -17096
- package/dist/chunk-7RFRWDCW.mjs +0 -1504
- package/dist/chunk-DLDWZFYC.mjs +0 -1495
- package/dist/chunk-E6SZWREQ.mjs +0 -57
- package/dist/chunk-F6F73W35.mjs +0 -16166
- package/dist/chunk-G33LB27A.mjs +0 -16166
- package/dist/chunk-HGU6HZRC.mjs +0 -231
- package/dist/chunk-L2K34JCU.mjs +0 -1496
- package/dist/chunk-OFDBEIEK.mjs +0 -16166
- package/dist/chunk-SF7YSLF5.mjs +0 -1515
- package/dist/chunk-SN4ZDTVW.mjs +0 -16166
- package/dist/chunk-WWUSGOXE.mjs +0 -17129
- package/dist/constants-VOI7BSLK.mjs +0 -27
- package/dist/index-B71aXVzk.d.ts +0 -13264
- package/dist/index-BYZbDjal.d.ts +0 -11390
- package/dist/index-CHB3KuOB.d.mts +0 -11859
- package/dist/index-CzWPI6Le.d.ts +0 -11859
- package/dist/index-pOIIuwfV.d.mts +0 -13264
- package/dist/index-xbWjohNq.d.mts +0 -11390
- package/dist/solana-4O4K45VU.mjs +0 -46
- package/dist/solana-5EMCTPTS.mjs +0 -46
- package/dist/solana-NDABAZ6P.mjs +0 -56
- package/dist/solana-Q4NAVBTS.mjs +0 -46
- package/dist/solana-ZYO63LY5.mjs +0 -46
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token Registry - Lookup token metadata by symbol or address
|
|
3
|
+
*
|
|
4
|
+
* This module provides a centralized registry for token metadata,
|
|
5
|
+
* ensuring correct decimals are used throughout the protocol.
|
|
6
|
+
*
|
|
7
|
+
* CRITICAL: Never hardcode decimals (e.g., `decimals: 9`).
|
|
8
|
+
* Always use this registry to get the correct decimals for a token.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* import { getTokenDecimals, getAsset } from '@sip-protocol/sdk'
|
|
13
|
+
*
|
|
14
|
+
* // Get decimals for USDC on Solana
|
|
15
|
+
* const decimals = getTokenDecimals('USDC', 'solana') // Returns 6, not 9!
|
|
16
|
+
*
|
|
17
|
+
* // Get full asset info
|
|
18
|
+
* const asset = getAsset('SOL', 'solana')
|
|
19
|
+
* // { chain: 'solana', symbol: 'SOL', address: null, decimals: 9 }
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
import type { Asset, ChainId, HexString } from '@sip-protocol/types'
|
|
24
|
+
import { NATIVE_TOKENS } from '@sip-protocol/types'
|
|
25
|
+
import { ValidationError, ErrorCode } from '../errors'
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Extended token metadata with optional fields
|
|
29
|
+
*/
|
|
30
|
+
export interface TokenMetadata extends Asset {
|
|
31
|
+
/** Common name (e.g., "USD Coin", "Tether") */
|
|
32
|
+
name?: string
|
|
33
|
+
/** Logo URL */
|
|
34
|
+
logoUri?: string
|
|
35
|
+
/** Whether this is a stablecoin */
|
|
36
|
+
isStablecoin?: boolean
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Well-known SPL tokens on Solana with verified decimals
|
|
41
|
+
*/
|
|
42
|
+
const SOLANA_TOKENS: TokenMetadata[] = [
|
|
43
|
+
// Native
|
|
44
|
+
{ chain: 'solana', symbol: 'SOL', address: null, decimals: 9, name: 'Solana' },
|
|
45
|
+
// Stablecoins
|
|
46
|
+
{
|
|
47
|
+
chain: 'solana',
|
|
48
|
+
symbol: 'USDC',
|
|
49
|
+
address: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v' as HexString,
|
|
50
|
+
decimals: 6,
|
|
51
|
+
name: 'USD Coin',
|
|
52
|
+
isStablecoin: true,
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
chain: 'solana',
|
|
56
|
+
symbol: 'USDT',
|
|
57
|
+
address: 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB' as HexString,
|
|
58
|
+
decimals: 6,
|
|
59
|
+
name: 'Tether USD',
|
|
60
|
+
isStablecoin: true,
|
|
61
|
+
},
|
|
62
|
+
// Wrapped tokens
|
|
63
|
+
{
|
|
64
|
+
chain: 'solana',
|
|
65
|
+
symbol: 'WBTC',
|
|
66
|
+
address: '3NZ9JMVBmGAqocybic2c7LQCJScmgsAZ6vQqTDzcqmJh' as HexString,
|
|
67
|
+
decimals: 8,
|
|
68
|
+
name: 'Wrapped Bitcoin',
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
chain: 'solana',
|
|
72
|
+
symbol: 'WETH',
|
|
73
|
+
address: '7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs' as HexString,
|
|
74
|
+
decimals: 8,
|
|
75
|
+
name: 'Wrapped Ether',
|
|
76
|
+
},
|
|
77
|
+
// Popular DeFi tokens
|
|
78
|
+
{
|
|
79
|
+
chain: 'solana',
|
|
80
|
+
symbol: 'RAY',
|
|
81
|
+
address: '4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R' as HexString,
|
|
82
|
+
decimals: 6,
|
|
83
|
+
name: 'Raydium',
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
chain: 'solana',
|
|
87
|
+
symbol: 'JUP',
|
|
88
|
+
address: 'JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN' as HexString,
|
|
89
|
+
decimals: 6,
|
|
90
|
+
name: 'Jupiter',
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
chain: 'solana',
|
|
94
|
+
symbol: 'BONK',
|
|
95
|
+
address: 'DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263' as HexString,
|
|
96
|
+
decimals: 5,
|
|
97
|
+
name: 'Bonk',
|
|
98
|
+
},
|
|
99
|
+
]
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Well-known ERC-20 tokens on Ethereum with verified decimals
|
|
103
|
+
*/
|
|
104
|
+
const ETHEREUM_TOKENS: TokenMetadata[] = [
|
|
105
|
+
// Native
|
|
106
|
+
{ chain: 'ethereum', symbol: 'ETH', address: null, decimals: 18, name: 'Ether' },
|
|
107
|
+
// Stablecoins
|
|
108
|
+
{
|
|
109
|
+
chain: 'ethereum',
|
|
110
|
+
symbol: 'USDC',
|
|
111
|
+
address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48' as HexString,
|
|
112
|
+
decimals: 6,
|
|
113
|
+
name: 'USD Coin',
|
|
114
|
+
isStablecoin: true,
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
chain: 'ethereum',
|
|
118
|
+
symbol: 'USDT',
|
|
119
|
+
address: '0xdAC17F958D2ee523a2206206994597C13D831ec7' as HexString,
|
|
120
|
+
decimals: 6,
|
|
121
|
+
name: 'Tether USD',
|
|
122
|
+
isStablecoin: true,
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
chain: 'ethereum',
|
|
126
|
+
symbol: 'DAI',
|
|
127
|
+
address: '0x6B175474E89094C44Da98b954EescdeCB5BE3830' as HexString,
|
|
128
|
+
decimals: 18,
|
|
129
|
+
name: 'Dai Stablecoin',
|
|
130
|
+
isStablecoin: true,
|
|
131
|
+
},
|
|
132
|
+
// Wrapped tokens
|
|
133
|
+
{
|
|
134
|
+
chain: 'ethereum',
|
|
135
|
+
symbol: 'WBTC',
|
|
136
|
+
address: '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599' as HexString,
|
|
137
|
+
decimals: 8,
|
|
138
|
+
name: 'Wrapped Bitcoin',
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
chain: 'ethereum',
|
|
142
|
+
symbol: 'WETH',
|
|
143
|
+
address: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2' as HexString,
|
|
144
|
+
decimals: 18,
|
|
145
|
+
name: 'Wrapped Ether',
|
|
146
|
+
},
|
|
147
|
+
]
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Combined token registry indexed by chain
|
|
151
|
+
*/
|
|
152
|
+
const TOKEN_REGISTRY: Map<ChainId, TokenMetadata[]> = new Map([
|
|
153
|
+
['solana', SOLANA_TOKENS],
|
|
154
|
+
['ethereum', ETHEREUM_TOKENS],
|
|
155
|
+
// Other chains use NATIVE_TOKENS only for now
|
|
156
|
+
])
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Get token decimals by symbol and chain
|
|
160
|
+
*
|
|
161
|
+
* @param symbol - Token symbol (e.g., 'USDC', 'SOL', 'ETH')
|
|
162
|
+
* @param chain - Chain identifier
|
|
163
|
+
* @returns Number of decimals for the token
|
|
164
|
+
* @throws {ValidationError} If token is unknown
|
|
165
|
+
*
|
|
166
|
+
* @example
|
|
167
|
+
* ```typescript
|
|
168
|
+
* // Correct usage - always lookup decimals
|
|
169
|
+
* const decimals = getTokenDecimals('USDC', 'solana') // 6
|
|
170
|
+
* const solDecimals = getTokenDecimals('SOL', 'solana') // 9
|
|
171
|
+
* const ethDecimals = getTokenDecimals('ETH', 'ethereum') // 18
|
|
172
|
+
*
|
|
173
|
+
* // This prevents the common bug of hardcoding 9:
|
|
174
|
+
* // WRONG: decimals: 9
|
|
175
|
+
* // RIGHT: decimals: getTokenDecimals(symbol, chain)
|
|
176
|
+
* ```
|
|
177
|
+
*/
|
|
178
|
+
export function getTokenDecimals(symbol: string, chain: ChainId): number {
|
|
179
|
+
const token = findToken(symbol, chain)
|
|
180
|
+
if (!token) {
|
|
181
|
+
throw new ValidationError(
|
|
182
|
+
`Unknown token: ${symbol} on ${chain}. Register it in the token registry.`,
|
|
183
|
+
'symbol',
|
|
184
|
+
undefined,
|
|
185
|
+
ErrorCode.TOKEN_NOT_FOUND
|
|
186
|
+
)
|
|
187
|
+
}
|
|
188
|
+
return token.decimals
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Get full asset info by symbol and chain
|
|
193
|
+
*
|
|
194
|
+
* @param symbol - Token symbol (e.g., 'USDC', 'SOL', 'ETH')
|
|
195
|
+
* @param chain - Chain identifier
|
|
196
|
+
* @returns Asset object with all metadata
|
|
197
|
+
* @throws {ValidationError} If token is unknown
|
|
198
|
+
*/
|
|
199
|
+
export function getAsset(symbol: string, chain: ChainId): Asset {
|
|
200
|
+
const token = findToken(symbol, chain)
|
|
201
|
+
if (!token) {
|
|
202
|
+
throw new ValidationError(
|
|
203
|
+
`Unknown token: ${symbol} on ${chain}. Register it in the token registry.`,
|
|
204
|
+
'symbol',
|
|
205
|
+
undefined,
|
|
206
|
+
ErrorCode.TOKEN_NOT_FOUND
|
|
207
|
+
)
|
|
208
|
+
}
|
|
209
|
+
return {
|
|
210
|
+
chain: token.chain,
|
|
211
|
+
symbol: token.symbol,
|
|
212
|
+
address: token.address,
|
|
213
|
+
decimals: token.decimals,
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* Get native token asset for a chain
|
|
219
|
+
*
|
|
220
|
+
* @param chain - Chain identifier
|
|
221
|
+
* @returns Native token asset (SOL for Solana, ETH for Ethereum, etc.)
|
|
222
|
+
* @throws {ValidationError} If chain is not supported
|
|
223
|
+
*/
|
|
224
|
+
export function getNativeToken(chain: ChainId): Asset {
|
|
225
|
+
const native = NATIVE_TOKENS[chain]
|
|
226
|
+
if (!native) {
|
|
227
|
+
throw new ValidationError(
|
|
228
|
+
`No native token defined for chain: ${chain}`,
|
|
229
|
+
'chain',
|
|
230
|
+
undefined,
|
|
231
|
+
ErrorCode.UNSUPPORTED_CHAIN
|
|
232
|
+
)
|
|
233
|
+
}
|
|
234
|
+
return native
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* Get token by contract address
|
|
239
|
+
*
|
|
240
|
+
* @param address - Token contract address
|
|
241
|
+
* @param chain - Chain identifier
|
|
242
|
+
* @returns Token metadata or null if not found
|
|
243
|
+
*/
|
|
244
|
+
export function getTokenByAddress(address: string, chain: ChainId): TokenMetadata | null {
|
|
245
|
+
const tokens = TOKEN_REGISTRY.get(chain) || []
|
|
246
|
+
return tokens.find(t => t.address?.toLowerCase() === address.toLowerCase()) || null
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* Check if a token is registered in the registry
|
|
251
|
+
*
|
|
252
|
+
* @param symbol - Token symbol
|
|
253
|
+
* @param chain - Chain identifier
|
|
254
|
+
* @returns true if token is known, false otherwise
|
|
255
|
+
*/
|
|
256
|
+
export function isKnownToken(symbol: string, chain: ChainId): boolean {
|
|
257
|
+
return findToken(symbol, chain) !== null
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* Get all registered tokens for a chain
|
|
262
|
+
*
|
|
263
|
+
* @param chain - Chain identifier
|
|
264
|
+
* @returns Array of token metadata
|
|
265
|
+
*/
|
|
266
|
+
export function getTokensForChain(chain: ChainId): TokenMetadata[] {
|
|
267
|
+
const tokens = TOKEN_REGISTRY.get(chain)
|
|
268
|
+
if (tokens) {
|
|
269
|
+
return [...tokens]
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
// Fall back to native token only
|
|
273
|
+
const native = NATIVE_TOKENS[chain]
|
|
274
|
+
if (native) {
|
|
275
|
+
return [{ ...native }]
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
return []
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* Internal: Find token in registry
|
|
283
|
+
*/
|
|
284
|
+
function findToken(symbol: string, chain: ChainId): TokenMetadata | null {
|
|
285
|
+
const upperSymbol = symbol.toUpperCase()
|
|
286
|
+
|
|
287
|
+
// Check chain-specific registry first
|
|
288
|
+
const chainTokens = TOKEN_REGISTRY.get(chain)
|
|
289
|
+
if (chainTokens) {
|
|
290
|
+
const found = chainTokens.find(t => t.symbol.toUpperCase() === upperSymbol)
|
|
291
|
+
if (found) return found
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
// Fall back to native tokens
|
|
295
|
+
const native = NATIVE_TOKENS[chain]
|
|
296
|
+
if (native && native.symbol.toUpperCase() === upperSymbol) {
|
|
297
|
+
return { ...native }
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
return null
|
|
301
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deprecation Warning Utility
|
|
3
|
+
*
|
|
4
|
+
* Provides a consistent way to handle deprecation warnings that:
|
|
5
|
+
* - Logs each warning only once per session (no spam)
|
|
6
|
+
* - Can be suppressed via environment variable
|
|
7
|
+
* - Uses consistent message format with removal date
|
|
8
|
+
*
|
|
9
|
+
* @module utils/deprecation
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { createLogger } from '../logger'
|
|
13
|
+
|
|
14
|
+
const log = createLogger('deprecation')
|
|
15
|
+
|
|
16
|
+
/** Set of warning IDs that have already been emitted */
|
|
17
|
+
const warnedIds = new Set<string>()
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Check if deprecation warnings should be suppressed
|
|
21
|
+
*
|
|
22
|
+
* Set SIP_SUPPRESS_DEPRECATION=true to disable all warnings
|
|
23
|
+
*/
|
|
24
|
+
const isSuppressed = (): boolean => {
|
|
25
|
+
// Check both process.env and global (for browser compatibility)
|
|
26
|
+
if (typeof process !== 'undefined' && process.env?.SIP_SUPPRESS_DEPRECATION === 'true') {
|
|
27
|
+
return true
|
|
28
|
+
}
|
|
29
|
+
return false
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Emit a deprecation warning (once per function)
|
|
34
|
+
*
|
|
35
|
+
* @param id - Unique identifier for this deprecation (e.g., 'createCommitment')
|
|
36
|
+
* @param message - Warning message to display
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* export function oldFunction() {
|
|
41
|
+
* warnOnce('oldFunction', 'oldFunction() is deprecated. Use newFunction() instead.')
|
|
42
|
+
* // ... implementation
|
|
43
|
+
* }
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export function warnOnce(id: string, message: string): void {
|
|
47
|
+
if (isSuppressed()) return
|
|
48
|
+
if (warnedIds.has(id)) return
|
|
49
|
+
|
|
50
|
+
warnedIds.add(id)
|
|
51
|
+
log.warn({ deprecationId: id }, message)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Create a standard deprecation message
|
|
56
|
+
*
|
|
57
|
+
* @param funcName - Name of the deprecated function
|
|
58
|
+
* @param replacement - Name of the replacement function/module
|
|
59
|
+
* @param removalDate - Date when the function will be removed (YYYY-MM-DD)
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```typescript
|
|
63
|
+
* warnOnce('createCommitment', deprecationMessage(
|
|
64
|
+
* 'createCommitment()',
|
|
65
|
+
* 'commit() from "./commitment"',
|
|
66
|
+
* '2026-06-01'
|
|
67
|
+
* ))
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
export function deprecationMessage(
|
|
71
|
+
funcName: string,
|
|
72
|
+
replacement: string,
|
|
73
|
+
removalDate: string = '2026-06-01'
|
|
74
|
+
): string {
|
|
75
|
+
return `${funcName} is deprecated and will be removed after ${removalDate}. Use ${replacement} instead.`
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Reset warning state (for testing only)
|
|
80
|
+
*
|
|
81
|
+
* @internal
|
|
82
|
+
*/
|
|
83
|
+
export function _resetWarnings(): void {
|
|
84
|
+
warnedIds.clear()
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Check if a warning has been emitted (for testing only)
|
|
89
|
+
*
|
|
90
|
+
* @internal
|
|
91
|
+
*/
|
|
92
|
+
export function _hasWarned(id: string): boolean {
|
|
93
|
+
return warnedIds.has(id)
|
|
94
|
+
}
|
|
@@ -7,6 +7,74 @@
|
|
|
7
7
|
// Adapter
|
|
8
8
|
export { EthereumWalletAdapter, createEthereumAdapter } from './adapter'
|
|
9
9
|
|
|
10
|
+
// Privacy Adapter
|
|
11
|
+
export {
|
|
12
|
+
PrivacyEthereumWalletAdapter,
|
|
13
|
+
createPrivacyEthereumAdapter,
|
|
14
|
+
type PrivacyEthereumAdapterConfig,
|
|
15
|
+
type EthereumStealthKeyMaterial,
|
|
16
|
+
type EthereumScannedPayment,
|
|
17
|
+
type EthereumClaimResult,
|
|
18
|
+
type PrivacyContext,
|
|
19
|
+
} from './privacy-adapter'
|
|
20
|
+
|
|
21
|
+
// Multi-Wallet Privacy Adapter (Rabby, Rainbow, etc.)
|
|
22
|
+
export {
|
|
23
|
+
MultiWalletPrivacyAdapter,
|
|
24
|
+
createMultiWalletAdapter,
|
|
25
|
+
createRabbyPrivacyAdapter,
|
|
26
|
+
createRainbowPrivacyAdapter,
|
|
27
|
+
detectWallets,
|
|
28
|
+
isWalletInstalled,
|
|
29
|
+
getWalletProvider,
|
|
30
|
+
type WalletType,
|
|
31
|
+
type DetectedWallet,
|
|
32
|
+
type MultiWalletConfig,
|
|
33
|
+
type WalletConnectionOptions,
|
|
34
|
+
type EIP1193Provider as MultiWalletEIP1193Provider,
|
|
35
|
+
} from './multi-wallet'
|
|
36
|
+
|
|
37
|
+
// WalletConnect Privacy Adapter
|
|
38
|
+
export {
|
|
39
|
+
WalletConnectPrivacyAdapter,
|
|
40
|
+
createWalletConnectPrivacyAdapter,
|
|
41
|
+
type WalletConnectAdapterConfig,
|
|
42
|
+
type WalletConnectSession,
|
|
43
|
+
type WalletConnectResult,
|
|
44
|
+
type PairingUri,
|
|
45
|
+
} from './walletconnect-adapter'
|
|
46
|
+
|
|
47
|
+
// MetaMask Privacy Utilities
|
|
48
|
+
export {
|
|
49
|
+
// Factory
|
|
50
|
+
createMetaMaskPrivacyAdapter,
|
|
51
|
+
isMetaMaskAdapter,
|
|
52
|
+
// Detection
|
|
53
|
+
isMetaMaskInstalled,
|
|
54
|
+
isMetaMaskFlaskInstalled,
|
|
55
|
+
getMetaMaskVersion,
|
|
56
|
+
// Message building
|
|
57
|
+
buildKeyDerivationMessage,
|
|
58
|
+
buildKeyDerivationTypedData,
|
|
59
|
+
buildViewKeyShareTypedData,
|
|
60
|
+
createSigningContext,
|
|
61
|
+
// Signature parsing
|
|
62
|
+
parseSignature,
|
|
63
|
+
toCompactSignature,
|
|
64
|
+
// Constants
|
|
65
|
+
DEFAULT_SIP_DOMAIN,
|
|
66
|
+
PRIVACY_OPERATION_DESCRIPTIONS,
|
|
67
|
+
KEY_DERIVATION_TYPES,
|
|
68
|
+
STEALTH_TRANSFER_TYPES,
|
|
69
|
+
VIEW_KEY_SHARE_TYPES,
|
|
70
|
+
// Types
|
|
71
|
+
type MetaMaskSigningMethod,
|
|
72
|
+
type PrivacyOperationType,
|
|
73
|
+
type PrivacySigningContext,
|
|
74
|
+
type MetaMaskSigningRequest,
|
|
75
|
+
type SIPDomainConfig,
|
|
76
|
+
} from './metamask-privacy'
|
|
77
|
+
|
|
10
78
|
// Mock adapter for testing
|
|
11
79
|
export {
|
|
12
80
|
MockEthereumAdapter,
|