@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,512 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* C-SPL (Confidential SPL) Token Standard Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for the Confidential SPL token standard from Arcium.
|
|
5
|
+
* C-SPL enables encrypted token balances and transfer amounts on Solana.
|
|
6
|
+
*
|
|
7
|
+
* ## Architecture
|
|
8
|
+
*
|
|
9
|
+
* C-SPL unifies four pieces of Solana infrastructure:
|
|
10
|
+
* - SPL Token (classic fungible tokens)
|
|
11
|
+
* - Token-2022 (flexible token extensions)
|
|
12
|
+
* - Confidential Transfer Extension (private transfers)
|
|
13
|
+
* - Arcium encrypted compute (MPC for DeFi logic)
|
|
14
|
+
*
|
|
15
|
+
* ## Key Properties
|
|
16
|
+
*
|
|
17
|
+
* - **Encrypted Balances**: Token balances are hidden on-chain
|
|
18
|
+
* - **Encrypted Amounts**: Transfer amounts are encrypted
|
|
19
|
+
* - **Public Addresses**: Sender and recipient remain visible
|
|
20
|
+
* - **Wrappable**: Any SPL token can be wrapped to C-SPL
|
|
21
|
+
*
|
|
22
|
+
* ## Use Cases
|
|
23
|
+
*
|
|
24
|
+
* - Private DeFi (swaps, lending, borrowing)
|
|
25
|
+
* - Institutional payroll
|
|
26
|
+
* - Vendor payments
|
|
27
|
+
* - Private stablecoins
|
|
28
|
+
* - Confidential RWA trading
|
|
29
|
+
*
|
|
30
|
+
* @see https://docs.arcium.com
|
|
31
|
+
* @see https://x.com/ArciumHQ/status/1963271375671668789
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
// ─── Core C-SPL Types ─────────────────────────────────────────────────────────
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* C-SPL token configuration
|
|
38
|
+
*
|
|
39
|
+
* Represents a token that has been wrapped for confidential transfers.
|
|
40
|
+
*/
|
|
41
|
+
export interface CSPLToken {
|
|
42
|
+
/** Original SPL token mint address */
|
|
43
|
+
mint: string
|
|
44
|
+
/** C-SPL wrapped mint address */
|
|
45
|
+
confidentialMint: string
|
|
46
|
+
/** Token decimals */
|
|
47
|
+
decimals: number
|
|
48
|
+
/** Token symbol (e.g., 'SOL', 'USDC') */
|
|
49
|
+
symbol?: string
|
|
50
|
+
/** Token name */
|
|
51
|
+
name?: string
|
|
52
|
+
/** Whether this is a native wrap (SOL -> wSOL -> C-wSOL) */
|
|
53
|
+
isNativeWrap?: boolean
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Confidential token account
|
|
58
|
+
*
|
|
59
|
+
* A C-SPL account holds encrypted balances for a specific token.
|
|
60
|
+
*/
|
|
61
|
+
export interface ConfidentialTokenAccount {
|
|
62
|
+
/** Account address */
|
|
63
|
+
address: string
|
|
64
|
+
/** Owner public key */
|
|
65
|
+
owner: string
|
|
66
|
+
/** Associated C-SPL token */
|
|
67
|
+
token: CSPLToken
|
|
68
|
+
/** Encrypted available balance */
|
|
69
|
+
encryptedBalance: Uint8Array
|
|
70
|
+
/** Encrypted pending balance (incoming transfers not yet applied) */
|
|
71
|
+
pendingBalance?: Uint8Array
|
|
72
|
+
/** Number of pending incoming transfers */
|
|
73
|
+
pendingCount?: number
|
|
74
|
+
/** Account is initialized and ready */
|
|
75
|
+
isInitialized: boolean
|
|
76
|
+
/** Account is frozen (transfers blocked) */
|
|
77
|
+
isFrozen: boolean
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Confidential balance representation
|
|
82
|
+
*
|
|
83
|
+
* Holds both encrypted and (optionally) decrypted balance info.
|
|
84
|
+
*/
|
|
85
|
+
export interface ConfidentialBalance {
|
|
86
|
+
/** Associated token */
|
|
87
|
+
token: CSPLToken
|
|
88
|
+
/** Encrypted balance ciphertext */
|
|
89
|
+
encryptedAmount: Uint8Array
|
|
90
|
+
/** Decrypted amount (only available to account owner) */
|
|
91
|
+
decryptedAmount?: bigint
|
|
92
|
+
/** Pending incoming balance */
|
|
93
|
+
pendingBalance?: Uint8Array
|
|
94
|
+
/** Pending decrypted amount */
|
|
95
|
+
pendingDecryptedAmount?: bigint
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// ─── Transfer Types ───────────────────────────────────────────────────────────
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Parameters for a confidential transfer
|
|
102
|
+
*/
|
|
103
|
+
export interface ConfidentialTransferParams {
|
|
104
|
+
/** Sender address */
|
|
105
|
+
from: string
|
|
106
|
+
/** Recipient address */
|
|
107
|
+
to: string
|
|
108
|
+
/** Token being transferred */
|
|
109
|
+
token: CSPLToken
|
|
110
|
+
/** Encrypted transfer amount */
|
|
111
|
+
encryptedAmount: Uint8Array
|
|
112
|
+
/** Zero-knowledge proof for valid transfer (proves sender has sufficient balance) */
|
|
113
|
+
proof?: Uint8Array
|
|
114
|
+
/** Optional memo (public, max CSPL_MAX_MEMO_BYTES bytes) */
|
|
115
|
+
memo?: string
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Result of a confidential transfer
|
|
120
|
+
*/
|
|
121
|
+
export interface ConfidentialTransferResult {
|
|
122
|
+
/** Whether transfer succeeded */
|
|
123
|
+
success: boolean
|
|
124
|
+
/** Transaction signature */
|
|
125
|
+
signature?: string
|
|
126
|
+
/** Error message if failed */
|
|
127
|
+
error?: string
|
|
128
|
+
/** Sender's new encrypted balance */
|
|
129
|
+
newSenderBalance?: Uint8Array
|
|
130
|
+
/** Recipient's pending balance updated */
|
|
131
|
+
recipientPendingUpdated?: boolean
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Parameters for wrapping SPL tokens to C-SPL
|
|
136
|
+
*/
|
|
137
|
+
export interface WrapTokenParams {
|
|
138
|
+
/** SPL token mint to wrap */
|
|
139
|
+
mint: string
|
|
140
|
+
/** Amount to wrap (plaintext, will be encrypted) */
|
|
141
|
+
amount: bigint
|
|
142
|
+
/** Owner address */
|
|
143
|
+
owner: string
|
|
144
|
+
/** Create C-SPL account if it doesn't exist */
|
|
145
|
+
createAccount?: boolean
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Result of wrapping tokens
|
|
150
|
+
*/
|
|
151
|
+
export interface WrapTokenResult {
|
|
152
|
+
/** Whether wrap succeeded */
|
|
153
|
+
success: boolean
|
|
154
|
+
/** Transaction signature */
|
|
155
|
+
signature?: string
|
|
156
|
+
/** C-SPL token info */
|
|
157
|
+
token?: CSPLToken
|
|
158
|
+
/** New encrypted balance */
|
|
159
|
+
encryptedBalance?: Uint8Array
|
|
160
|
+
/** Error message if failed */
|
|
161
|
+
error?: string
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Parameters for unwrapping C-SPL back to SPL
|
|
166
|
+
*/
|
|
167
|
+
export interface UnwrapTokenParams {
|
|
168
|
+
/** C-SPL token to unwrap */
|
|
169
|
+
token: CSPLToken
|
|
170
|
+
/** Encrypted amount to unwrap */
|
|
171
|
+
encryptedAmount: Uint8Array
|
|
172
|
+
/** Owner address */
|
|
173
|
+
owner: string
|
|
174
|
+
/** Proof of ownership/balance */
|
|
175
|
+
proof?: Uint8Array
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Result of unwrapping tokens
|
|
180
|
+
*/
|
|
181
|
+
export interface UnwrapTokenResult {
|
|
182
|
+
/** Whether unwrap succeeded */
|
|
183
|
+
success: boolean
|
|
184
|
+
/** Transaction signature */
|
|
185
|
+
signature?: string
|
|
186
|
+
/** Decrypted amount received */
|
|
187
|
+
amount?: bigint
|
|
188
|
+
/** Error message if failed */
|
|
189
|
+
error?: string
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// ─── Swap Types ───────────────────────────────────────────────────────────────
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* Parameters for a confidential swap
|
|
196
|
+
*
|
|
197
|
+
* Combines C-SPL tokens with Arcium MPC for fully private swaps.
|
|
198
|
+
*/
|
|
199
|
+
export interface ConfidentialSwapParams {
|
|
200
|
+
/** Input token (being sold) */
|
|
201
|
+
inputToken: CSPLToken
|
|
202
|
+
/** Output token (being bought) */
|
|
203
|
+
outputToken: CSPLToken
|
|
204
|
+
/** Encrypted input amount */
|
|
205
|
+
encryptedInputAmount: Uint8Array
|
|
206
|
+
/** Encrypted minimum output amount (slippage protection) */
|
|
207
|
+
encryptedMinOutput?: Uint8Array
|
|
208
|
+
/** Slippage tolerance in basis points (e.g., 50 = 0.5%) */
|
|
209
|
+
slippageBps?: number
|
|
210
|
+
/** Swap deadline (Unix timestamp) */
|
|
211
|
+
deadline?: number
|
|
212
|
+
/** User's address */
|
|
213
|
+
user: string
|
|
214
|
+
/** Preferred DEX/AMM for swap execution */
|
|
215
|
+
preferredDex?: string
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* Result of a confidential swap
|
|
220
|
+
*/
|
|
221
|
+
export interface ConfidentialSwapResult {
|
|
222
|
+
/** Whether swap succeeded */
|
|
223
|
+
success: boolean
|
|
224
|
+
/** Transaction signature */
|
|
225
|
+
signature?: string
|
|
226
|
+
/** Arcium computation ID */
|
|
227
|
+
computationId?: string
|
|
228
|
+
/** Encrypted output amount received */
|
|
229
|
+
encryptedOutputAmount?: Uint8Array
|
|
230
|
+
/** Decrypted output amount (if available) */
|
|
231
|
+
decryptedOutputAmount?: bigint
|
|
232
|
+
/** Effective price (encrypted or decrypted) */
|
|
233
|
+
effectivePrice?: bigint
|
|
234
|
+
/** Error message if failed */
|
|
235
|
+
error?: string
|
|
236
|
+
/** Swap metadata */
|
|
237
|
+
metadata?: {
|
|
238
|
+
dex: string
|
|
239
|
+
route: string[]
|
|
240
|
+
gasUsed?: bigint
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Confidential liquidity pool information
|
|
246
|
+
*/
|
|
247
|
+
export interface ConfidentialPool {
|
|
248
|
+
/** Pool address */
|
|
249
|
+
address: string
|
|
250
|
+
/** Token A in the pool */
|
|
251
|
+
tokenA: CSPLToken
|
|
252
|
+
/** Token B in the pool */
|
|
253
|
+
tokenB: CSPLToken
|
|
254
|
+
/** Encrypted reserve of token A */
|
|
255
|
+
encryptedReserveA?: Uint8Array
|
|
256
|
+
/** Encrypted reserve of token B */
|
|
257
|
+
encryptedReserveB?: Uint8Array
|
|
258
|
+
/** Fee in basis points */
|
|
259
|
+
feeBps: number
|
|
260
|
+
/** Pool protocol (e.g., 'arcium-amm', 'orca-confidential') */
|
|
261
|
+
protocol: string
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
// ─── Encryption Types ─────────────────────────────────────────────────────────
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* Encryption parameters for C-SPL amounts
|
|
268
|
+
*/
|
|
269
|
+
export interface CSPLEncryptionParams {
|
|
270
|
+
/** Plaintext amount to encrypt */
|
|
271
|
+
amount: bigint
|
|
272
|
+
/** Recipient's public key (for transfer encryption) */
|
|
273
|
+
recipientPubkey?: string
|
|
274
|
+
/** Auditor keys (for compliance) */
|
|
275
|
+
auditorKeys?: string[]
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* Encrypted amount with metadata
|
|
280
|
+
*/
|
|
281
|
+
export interface EncryptedAmount {
|
|
282
|
+
/** Ciphertext */
|
|
283
|
+
ciphertext: Uint8Array
|
|
284
|
+
/** Encryption type used */
|
|
285
|
+
encryptionType: CSPLEncryptionType
|
|
286
|
+
/** Nonce/IV */
|
|
287
|
+
nonce?: Uint8Array
|
|
288
|
+
/** Auditor ciphertexts (if compliance enabled) */
|
|
289
|
+
auditorCiphertexts?: Map<string, Uint8Array>
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* Supported encryption types for C-SPL
|
|
294
|
+
*/
|
|
295
|
+
export type CSPLEncryptionType =
|
|
296
|
+
| 'twisted-elgamal' // Default for Solana Confidential Transfers
|
|
297
|
+
| 'aes-gcm' // For Arcium MPC inputs
|
|
298
|
+
| 'pedersen' // For commitments
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* Decryption request parameters
|
|
302
|
+
*/
|
|
303
|
+
export interface CSPLDecryptionParams {
|
|
304
|
+
/** Encrypted amount to decrypt */
|
|
305
|
+
encryptedAmount: Uint8Array
|
|
306
|
+
/** Decryption key (account owner's key) */
|
|
307
|
+
decryptionKey: Uint8Array
|
|
308
|
+
/** Expected encryption type */
|
|
309
|
+
encryptionType?: CSPLEncryptionType
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
// ─── Compliance Types ─────────────────────────────────────────────────────────
|
|
313
|
+
|
|
314
|
+
/**
|
|
315
|
+
* Auditor configuration for compliant C-SPL
|
|
316
|
+
*
|
|
317
|
+
* Allows designated auditors to decrypt transaction amounts.
|
|
318
|
+
*/
|
|
319
|
+
export interface CSPLAuditorConfig {
|
|
320
|
+
/** Auditor public key */
|
|
321
|
+
auditorPubkey: string
|
|
322
|
+
/** Auditor name/identifier */
|
|
323
|
+
name?: string
|
|
324
|
+
/** What the auditor can see */
|
|
325
|
+
permissions: CSPLAuditorPermission[]
|
|
326
|
+
/** Expiration timestamp */
|
|
327
|
+
expiresAt?: number
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
/**
|
|
331
|
+
* Auditor permission levels
|
|
332
|
+
*/
|
|
333
|
+
export type CSPLAuditorPermission =
|
|
334
|
+
| 'view_balances' // Can decrypt balances
|
|
335
|
+
| 'view_transfers' // Can decrypt transfer amounts
|
|
336
|
+
| 'view_swaps' // Can decrypt swap details
|
|
337
|
+
| 'full_access' // All of the above
|
|
338
|
+
|
|
339
|
+
/**
|
|
340
|
+
* Compliance-enabled transfer parameters
|
|
341
|
+
*/
|
|
342
|
+
export interface CompliantTransferParams extends ConfidentialTransferParams {
|
|
343
|
+
/** Auditor configurations for this transfer */
|
|
344
|
+
auditors?: CSPLAuditorConfig[]
|
|
345
|
+
/** Include auditor-decryptable ciphertexts */
|
|
346
|
+
enableAudit: boolean
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
// ─── SDK Interface ────────────────────────────────────────────────────────────
|
|
350
|
+
|
|
351
|
+
/**
|
|
352
|
+
* C-SPL Client SDK interface
|
|
353
|
+
*
|
|
354
|
+
* The actual implementation wraps Solana's Confidential Transfer
|
|
355
|
+
* extension and Arcium's MPC for swap operations.
|
|
356
|
+
*/
|
|
357
|
+
export interface ICSPLClient {
|
|
358
|
+
/**
|
|
359
|
+
* Initialize connection
|
|
360
|
+
*/
|
|
361
|
+
connect(rpcUrl: string): Promise<void>
|
|
362
|
+
|
|
363
|
+
/**
|
|
364
|
+
* Disconnect
|
|
365
|
+
*/
|
|
366
|
+
disconnect(): Promise<void>
|
|
367
|
+
|
|
368
|
+
/**
|
|
369
|
+
* Get or create a confidential token account
|
|
370
|
+
*/
|
|
371
|
+
getOrCreateAccount(
|
|
372
|
+
owner: string,
|
|
373
|
+
token: CSPLToken
|
|
374
|
+
): Promise<ConfidentialTokenAccount>
|
|
375
|
+
|
|
376
|
+
/**
|
|
377
|
+
* Get confidential balance
|
|
378
|
+
*/
|
|
379
|
+
getBalance(owner: string, token: CSPLToken): Promise<ConfidentialBalance>
|
|
380
|
+
|
|
381
|
+
/**
|
|
382
|
+
* Wrap SPL tokens to C-SPL
|
|
383
|
+
*/
|
|
384
|
+
wrapToken(params: WrapTokenParams): Promise<WrapTokenResult>
|
|
385
|
+
|
|
386
|
+
/**
|
|
387
|
+
* Unwrap C-SPL back to SPL
|
|
388
|
+
*/
|
|
389
|
+
unwrapToken(params: UnwrapTokenParams): Promise<UnwrapTokenResult>
|
|
390
|
+
|
|
391
|
+
/**
|
|
392
|
+
* Execute a confidential transfer
|
|
393
|
+
*/
|
|
394
|
+
transfer(params: ConfidentialTransferParams): Promise<ConfidentialTransferResult>
|
|
395
|
+
|
|
396
|
+
/**
|
|
397
|
+
* Encrypt an amount for transfer
|
|
398
|
+
*/
|
|
399
|
+
encryptAmount(params: CSPLEncryptionParams): Promise<EncryptedAmount>
|
|
400
|
+
|
|
401
|
+
/**
|
|
402
|
+
* Decrypt an encrypted amount
|
|
403
|
+
*/
|
|
404
|
+
decryptAmount(params: CSPLDecryptionParams): Promise<bigint>
|
|
405
|
+
|
|
406
|
+
/**
|
|
407
|
+
* Apply pending balance to available balance
|
|
408
|
+
*/
|
|
409
|
+
applyPendingBalance(
|
|
410
|
+
owner: string,
|
|
411
|
+
token: CSPLToken
|
|
412
|
+
): Promise<ConfidentialTransferResult>
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
// ─── Constants ────────────────────────────────────────────────────────────────
|
|
416
|
+
|
|
417
|
+
/**
|
|
418
|
+
* Well-known C-SPL token configurations
|
|
419
|
+
*/
|
|
420
|
+
export const CSPL_TOKENS: Record<string, Partial<CSPLToken>> = {
|
|
421
|
+
// Native SOL wrapped
|
|
422
|
+
'C-wSOL': {
|
|
423
|
+
mint: 'So11111111111111111111111111111111111111112',
|
|
424
|
+
symbol: 'C-wSOL',
|
|
425
|
+
name: 'Confidential Wrapped SOL',
|
|
426
|
+
decimals: 9,
|
|
427
|
+
isNativeWrap: true,
|
|
428
|
+
},
|
|
429
|
+
// USDC
|
|
430
|
+
'C-USDC': {
|
|
431
|
+
mint: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
|
|
432
|
+
symbol: 'C-USDC',
|
|
433
|
+
name: 'Confidential USDC',
|
|
434
|
+
decimals: 6,
|
|
435
|
+
},
|
|
436
|
+
// USDT
|
|
437
|
+
'C-USDT': {
|
|
438
|
+
mint: 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB',
|
|
439
|
+
symbol: 'C-USDT',
|
|
440
|
+
name: 'Confidential USDT',
|
|
441
|
+
decimals: 6,
|
|
442
|
+
},
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
/**
|
|
446
|
+
* C-SPL program IDs
|
|
447
|
+
*
|
|
448
|
+
* NOTE: TOKEN_PROGRAM and ATA_PROGRAM are PLACEHOLDER addresses.
|
|
449
|
+
* Real values TBD when C-SPL launches on Solana.
|
|
450
|
+
* The PLACEHOLDR prefix makes them obviously invalid to prevent
|
|
451
|
+
* accidental use in production.
|
|
452
|
+
*
|
|
453
|
+
* CONFIDENTIAL_TRANSFER is the real Solana Token-2022 program ID.
|
|
454
|
+
*/
|
|
455
|
+
export const CSPL_PROGRAM_IDS = {
|
|
456
|
+
/** C-SPL token program (PLACEHOLDER - TBD) */
|
|
457
|
+
TOKEN_PROGRAM: 'PLACEHLDRCSPLTokenProgram111111111111111111',
|
|
458
|
+
/** C-SPL associated token account program (PLACEHOLDER - TBD) */
|
|
459
|
+
ATA_PROGRAM: 'PLACEHLDRCSPLAtaProgram1111111111111111111',
|
|
460
|
+
/** Confidential transfer extension (REAL Solana Token-2022 program) */
|
|
461
|
+
CONFIDENTIAL_TRANSFER: 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb',
|
|
462
|
+
} as const
|
|
463
|
+
|
|
464
|
+
/**
|
|
465
|
+
* Default slippage for confidential swaps (0.5%)
|
|
466
|
+
*/
|
|
467
|
+
export const DEFAULT_SWAP_SLIPPAGE_BPS = 50
|
|
468
|
+
|
|
469
|
+
/**
|
|
470
|
+
* Maximum pending transfers before apply is required
|
|
471
|
+
*/
|
|
472
|
+
export const MAX_PENDING_TRANSFERS = 65536
|
|
473
|
+
|
|
474
|
+
/**
|
|
475
|
+
* Maximum memo length in bytes
|
|
476
|
+
*
|
|
477
|
+
* Solana memo program limit is 566 bytes, but we use 256 for:
|
|
478
|
+
* - Better UX (reasonable user-facing memo length)
|
|
479
|
+
* - Compatibility with other privacy backends
|
|
480
|
+
* - Room for protocol metadata in the transaction
|
|
481
|
+
*/
|
|
482
|
+
export const CSPL_MAX_MEMO_BYTES = 256
|
|
483
|
+
|
|
484
|
+
/**
|
|
485
|
+
* Cost estimate for C-SPL operations (in lamports)
|
|
486
|
+
*/
|
|
487
|
+
export const CSPL_OPERATION_COSTS = {
|
|
488
|
+
/** Create confidential account */
|
|
489
|
+
createAccount: BigInt(2_039_280),
|
|
490
|
+
/** Wrap tokens */
|
|
491
|
+
wrap: BigInt(5_000),
|
|
492
|
+
/** Unwrap tokens */
|
|
493
|
+
unwrap: BigInt(5_000),
|
|
494
|
+
/** Confidential transfer */
|
|
495
|
+
transfer: BigInt(10_000),
|
|
496
|
+
/** Apply pending balance */
|
|
497
|
+
applyPending: BigInt(5_000),
|
|
498
|
+
} as const
|
|
499
|
+
|
|
500
|
+
/**
|
|
501
|
+
* Estimated time for C-SPL operations (in milliseconds)
|
|
502
|
+
*/
|
|
503
|
+
export const CSPL_OPERATION_TIMES = {
|
|
504
|
+
/** Wrap tokens */
|
|
505
|
+
wrap: 2_000,
|
|
506
|
+
/** Unwrap tokens */
|
|
507
|
+
unwrap: 2_000,
|
|
508
|
+
/** Confidential transfer */
|
|
509
|
+
transfer: 3_000,
|
|
510
|
+
/** Confidential swap (via Arcium) */
|
|
511
|
+
swap: 30_000,
|
|
512
|
+
} as const
|