@sip-protocol/sdk 0.3.2 → 0.4.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.
Files changed (47) hide show
  1. package/dist/browser.d.mts +2 -2
  2. package/dist/browser.d.ts +2 -2
  3. package/dist/browser.js +1019 -146
  4. package/dist/browser.mjs +49 -1
  5. package/dist/chunk-AOZIY3GU.mjs +12995 -0
  6. package/dist/chunk-BCLIX5T2.mjs +12940 -0
  7. package/dist/chunk-FKXPHKYD.mjs +12955 -0
  8. package/dist/chunk-OPQ2GQIO.mjs +13013 -0
  9. package/dist/index-BcWNakUD.d.ts +7990 -0
  10. package/dist/index-BsKY3Hr0.d.mts +7990 -0
  11. package/dist/index.d.mts +2 -2
  12. package/dist/index.d.ts +2 -2
  13. package/dist/index.js +990 -117
  14. package/dist/index.mjs +49 -1
  15. package/package.json +2 -1
  16. package/src/adapters/near-intents.ts +8 -0
  17. package/src/bitcoin/index.ts +51 -0
  18. package/src/bitcoin/silent-payments.ts +865 -0
  19. package/src/bitcoin/taproot.ts +590 -0
  20. package/src/cosmos/ibc-stealth.ts +825 -0
  21. package/src/cosmos/index.ts +83 -0
  22. package/src/cosmos/stealth.ts +487 -0
  23. package/src/index.ts +51 -0
  24. package/src/move/aptos.ts +369 -0
  25. package/src/move/index.ts +35 -0
  26. package/src/move/sui.ts +367 -0
  27. package/src/oracle/types.ts +8 -0
  28. package/src/settlement/backends/direct-chain.ts +8 -0
  29. package/src/stealth.ts +3 -3
  30. package/src/validation.ts +42 -1
  31. package/src/wallet/aptos/adapter.ts +422 -0
  32. package/src/wallet/aptos/index.ts +10 -0
  33. package/src/wallet/aptos/mock.ts +410 -0
  34. package/src/wallet/aptos/types.ts +278 -0
  35. package/src/wallet/bitcoin/adapter.ts +470 -0
  36. package/src/wallet/bitcoin/index.ts +38 -0
  37. package/src/wallet/bitcoin/mock.ts +516 -0
  38. package/src/wallet/bitcoin/types.ts +274 -0
  39. package/src/wallet/cosmos/adapter.ts +484 -0
  40. package/src/wallet/cosmos/index.ts +63 -0
  41. package/src/wallet/cosmos/mock.ts +596 -0
  42. package/src/wallet/cosmos/types.ts +462 -0
  43. package/src/wallet/index.ts +127 -0
  44. package/src/wallet/sui/adapter.ts +471 -0
  45. package/src/wallet/sui/index.ts +10 -0
  46. package/src/wallet/sui/mock.ts +439 -0
  47. package/src/wallet/sui/types.ts +245 -0
package/dist/index.js CHANGED
@@ -31,9 +31,12 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
31
31
  var index_exports = {};
32
32
  __export(index_exports, {
33
33
  ATTESTATION_VERSION: () => ATTESTATION_VERSION,
34
+ AptosStealthService: () => AptosStealthService,
34
35
  BaseWalletAdapter: () => BaseWalletAdapter,
35
36
  CHAIN_NUMERIC_IDS: () => CHAIN_NUMERIC_IDS,
37
+ COSMOS_CHAIN_PREFIXES: () => CHAIN_PREFIXES,
36
38
  ComplianceManager: () => ComplianceManager,
39
+ CosmosStealthService: () => CosmosStealthService,
37
40
  CryptoError: () => CryptoError,
38
41
  DEFAULT_THRESHOLD: () => DEFAULT_THRESHOLD,
39
42
  DEFAULT_TOTAL_ORACLES: () => DEFAULT_TOTAL_ORACLES,
@@ -46,7 +49,7 @@ __export(index_exports, {
46
49
  HardwareWalletError: () => HardwareWalletError,
47
50
  IntentBuilder: () => IntentBuilder,
48
51
  IntentError: () => IntentError,
49
- IntentStatus: () => import_types37.IntentStatus,
52
+ IntentStatus: () => import_types55.IntentStatus,
50
53
  LedgerWalletAdapter: () => LedgerWalletAdapter,
51
54
  MockEthereumAdapter: () => MockEthereumAdapter,
52
55
  MockLedgerAdapter: () => MockLedgerAdapter,
@@ -55,27 +58,27 @@ __export(index_exports, {
55
58
  MockSolver: () => MockSolver,
56
59
  MockTrezorAdapter: () => MockTrezorAdapter,
57
60
  MockWalletAdapter: () => MockWalletAdapter,
58
- NATIVE_TOKENS: () => import_types37.NATIVE_TOKENS,
61
+ NATIVE_TOKENS: () => import_types55.NATIVE_TOKENS,
59
62
  NEARIntentsAdapter: () => NEARIntentsAdapter,
60
63
  NEARIntentsBackend: () => NEARIntentsBackend,
61
64
  NetworkError: () => NetworkError,
62
65
  ORACLE_DOMAIN: () => ORACLE_DOMAIN,
63
66
  OneClickClient: () => OneClickClient,
64
- OneClickDepositMode: () => import_types41.OneClickDepositMode,
65
- OneClickErrorCode: () => import_types41.OneClickErrorCode,
66
- OneClickSwapStatus: () => import_types41.OneClickSwapStatus,
67
- OneClickSwapType: () => import_types41.OneClickSwapType,
67
+ OneClickDepositMode: () => import_types59.OneClickDepositMode,
68
+ OneClickErrorCode: () => import_types59.OneClickErrorCode,
69
+ OneClickSwapStatus: () => import_types59.OneClickSwapStatus,
70
+ OneClickSwapType: () => import_types59.OneClickSwapType,
68
71
  PaymentBuilder: () => PaymentBuilder,
69
- PaymentStatus: () => import_types38.PaymentStatus,
70
- PrivacyLevel: () => import_types37.PrivacyLevel,
72
+ PaymentStatus: () => import_types56.PaymentStatus,
73
+ PrivacyLevel: () => import_types55.PrivacyLevel,
71
74
  ProofError: () => ProofError,
72
75
  ProofGenerationError: () => ProofGenerationError,
73
76
  ProofNotImplementedError: () => ProofNotImplementedError,
74
- ProposalStatus: () => import_types39.ProposalStatus,
75
- ReportStatus: () => import_types40.ReportStatus,
77
+ ProposalStatus: () => import_types57.ProposalStatus,
78
+ ReportStatus: () => import_types58.ReportStatus,
76
79
  SIP: () => SIP,
77
80
  SIPError: () => SIPError,
78
- SIP_VERSION: () => import_types37.SIP_VERSION,
81
+ SIP_VERSION: () => import_types55.SIP_VERSION,
79
82
  STABLECOIN_ADDRESSES: () => STABLECOIN_ADDRESSES,
80
83
  STABLECOIN_DECIMALS: () => STABLECOIN_DECIMALS,
81
84
  STABLECOIN_INFO: () => STABLECOIN_INFO,
@@ -88,8 +91,8 @@ __export(index_exports, {
88
91
  TrezorWalletAdapter: () => TrezorWalletAdapter,
89
92
  ValidationError: () => ValidationError,
90
93
  WalletError: () => WalletError,
91
- WalletErrorCode: () => import_types36.WalletErrorCode,
92
- ZcashErrorCode: () => import_types42.ZcashErrorCode,
94
+ WalletErrorCode: () => import_types54.WalletErrorCode,
95
+ ZcashErrorCode: () => import_types60.ZcashErrorCode,
93
96
  ZcashNativeBackend: () => ZcashNativeBackend,
94
97
  ZcashRPCClient: () => ZcashRPCClient,
95
98
  ZcashRPCError: () => ZcashRPCError,
@@ -98,17 +101,21 @@ __export(index_exports, {
98
101
  addBlindings: () => addBlindings,
99
102
  addCommitments: () => addCommitments,
100
103
  addOracle: () => addOracle,
104
+ aptosAddressToAuthKey: () => aptosAddressToAuthKey,
101
105
  attachProofs: () => attachProofs,
102
106
  base58ToHex: () => base58ToHex,
103
- browserBytesToHex: () => bytesToHex7,
104
- browserHexToBytes: () => hexToBytes5,
107
+ browserBytesToHex: () => bytesToHex11,
108
+ browserHexToBytes: () => hexToBytes9,
109
+ checkAptosStealthAddress: () => checkAptosStealthAddress,
105
110
  checkEd25519StealthAddress: () => checkEd25519StealthAddress,
106
111
  checkStealthAddress: () => checkStealthAddress,
107
112
  commit: () => commit,
108
113
  commitZero: () => commitZero,
109
114
  computeAttestationHash: () => computeAttestationHash,
115
+ computeTweakedKey: () => computeTweakedKey,
110
116
  createCommitment: () => createCommitment,
111
117
  createEthereumAdapter: () => createEthereumAdapter,
118
+ createKeySpendOnlyOutput: () => createKeySpendOnlyOutput,
112
119
  createLedgerAdapter: () => createLedgerAdapter,
113
120
  createMockEthereumAdapter: () => createMockEthereumAdapter,
114
121
  createMockEthereumProvider: () => createMockEthereumProvider,
@@ -127,6 +134,7 @@ __export(index_exports, {
127
134
  createShieldedPayment: () => createShieldedPayment,
128
135
  createSmartRouter: () => createSmartRouter,
129
136
  createSolanaAdapter: () => createSolanaAdapter,
137
+ createTaprootOutput: () => createTaprootOutput,
130
138
  createTrezorAdapter: () => createTrezorAdapter,
131
139
  createWalletFactory: () => createWalletFactory,
132
140
  createZcashClient: () => createZcashClient,
@@ -134,8 +142,10 @@ __export(index_exports, {
134
142
  createZcashShieldedService: () => createZcashShieldedService,
135
143
  createZcashSwapService: () => createZcashSwapService,
136
144
  decodeStealthMetaAddress: () => decodeStealthMetaAddress,
145
+ decodeTaprootAddress: () => decodeTaprootAddress,
137
146
  decryptMemo: () => decryptMemo,
138
147
  decryptWithViewing: () => decryptWithViewing,
148
+ deriveAptosStealthPrivateKey: () => deriveAptosStealthPrivateKey,
139
149
  deriveEd25519StealthPrivateKey: () => deriveEd25519StealthPrivateKey,
140
150
  deriveOracleId: () => deriveOracleId,
141
151
  deriveStealthPrivateKey: () => deriveStealthPrivateKey,
@@ -145,6 +155,7 @@ __export(index_exports, {
145
155
  deserializePayment: () => deserializePayment,
146
156
  detectEthereumWallets: () => detectEthereumWallets,
147
157
  detectSolanaWallets: () => detectSolanaWallets,
158
+ ed25519PublicKeyToAptosAddress: () => ed25519PublicKeyToAptosAddress,
148
159
  ed25519PublicKeyToNearAddress: () => ed25519PublicKeyToNearAddress,
149
160
  ed25519PublicKeyToSolanaAddress: () => ed25519PublicKeyToSolanaAddress,
150
161
  encodeStealthMetaAddress: () => encodeStealthMetaAddress,
@@ -153,7 +164,10 @@ __export(index_exports, {
153
164
  formatStablecoinAmount: () => formatStablecoinAmount,
154
165
  fromHex: () => fromHex,
155
166
  fromStablecoinUnits: () => fromStablecoinUnits,
167
+ generateAptosStealthAddress: () => generateAptosStealthAddress,
156
168
  generateBlinding: () => generateBlinding,
169
+ generateCosmosStealthAddress: () => generateCosmosStealthAddress,
170
+ generateCosmosStealthMetaAddress: () => generateCosmosStealthMetaAddress,
157
171
  generateEd25519StealthAddress: () => generateEd25519StealthAddress,
158
172
  generateEd25519StealthMetaAddress: () => generateEd25519StealthMetaAddress,
159
173
  generateIntentId: () => generateIntentId,
@@ -183,6 +197,7 @@ __export(index_exports, {
183
197
  getStablecoinsForChain: () => getStablecoinsForChain,
184
198
  getSupportedStablecoins: () => getSupportedStablecoins,
185
199
  getTimeRemaining: () => getTimeRemaining,
200
+ getXOnlyPublicKey: () => getXOnlyPublicKey,
186
201
  hasEnoughOracles: () => hasEnoughOracles,
187
202
  hasErrorCode: () => hasErrorCode,
188
203
  hasRequiredProofs: () => hasRequiredProofs,
@@ -193,14 +208,16 @@ __export(index_exports, {
193
208
  isExpired: () => isExpired,
194
209
  isNonNegativeAmount: () => isNonNegativeAmount,
195
210
  isPaymentExpired: () => isPaymentExpired,
196
- isPrivate: () => import_types37.isPrivate,
211
+ isPrivate: () => import_types55.isPrivate,
197
212
  isPrivateWalletAdapter: () => isPrivateWalletAdapter,
198
213
  isSIPError: () => isSIPError,
199
214
  isStablecoin: () => isStablecoin,
200
215
  isStablecoinOnChain: () => isStablecoinOnChain,
201
216
  isValidAmount: () => isValidAmount,
217
+ isValidAptosAddress: () => isValidAptosAddress,
202
218
  isValidChainId: () => isValidChainId,
203
219
  isValidCompressedPublicKey: () => isValidCompressedPublicKey,
220
+ isValidCosmosAddress: () => isValidCosmosAddress,
204
221
  isValidEd25519PublicKey: () => isValidEd25519PublicKey,
205
222
  isValidHex: () => isValidHex,
206
223
  isValidHexLength: () => isValidHexLength,
@@ -212,12 +229,17 @@ __export(index_exports, {
212
229
  isValidSlippage: () => isValidSlippage,
213
230
  isValidSolanaAddress: () => isValidSolanaAddress,
214
231
  isValidStealthMetaAddress: () => isValidStealthMetaAddress,
232
+ isValidTaprootAddress: () => isValidTaprootAddress,
215
233
  nearAddressToEd25519PublicKey: () => nearAddressToEd25519PublicKey,
216
234
  normalizeAddress: () => normalizeAddress,
217
235
  notConnectedError: () => notConnectedError,
218
236
  publicKeyToEthAddress: () => publicKeyToEthAddress,
219
237
  registerWallet: () => registerWallet,
220
238
  removeOracle: () => removeOracle,
239
+ schnorrSign: () => schnorrSign,
240
+ schnorrSignHex: () => schnorrSignHex,
241
+ schnorrVerify: () => schnorrVerify,
242
+ schnorrVerifyHex: () => schnorrVerifyHex,
221
243
  secureWipe: () => secureWipe,
222
244
  secureWipeAll: () => secureWipeAll,
223
245
  serializeAttestationMessage: () => serializeAttestationMessage,
@@ -226,14 +248,16 @@ __export(index_exports, {
226
248
  signAttestationMessage: () => signAttestationMessage,
227
249
  solanaAddressToEd25519PublicKey: () => solanaAddressToEd25519PublicKey,
228
250
  solanaPublicKeyToHex: () => solanaPublicKeyToHex,
251
+ stealthKeyToCosmosAddress: () => stealthKeyToCosmosAddress,
229
252
  subtractBlindings: () => subtractBlindings,
230
253
  subtractCommitments: () => subtractCommitments,
231
254
  supportsSharedArrayBuffer: () => supportsSharedArrayBuffer,
232
- supportsViewingKey: () => import_types37.supportsViewingKey,
255
+ supportsViewingKey: () => import_types55.supportsViewingKey,
233
256
  supportsWebBluetooth: () => supportsWebBluetooth,
234
257
  supportsWebHID: () => supportsWebHID,
235
258
  supportsWebUSB: () => supportsWebUSB,
236
259
  supportsWebWorkers: () => supportsWebWorkers,
260
+ taprootAddress: () => taprootAddress,
237
261
  toHex: () => toHex,
238
262
  toStablecoinUnits: () => toStablecoinUnits,
239
263
  trackIntent: () => trackIntent,
@@ -474,7 +498,16 @@ var VALID_CHAIN_IDS = [
474
498
  "polygon",
475
499
  "arbitrum",
476
500
  "optimism",
477
- "base"
501
+ "base",
502
+ "bitcoin",
503
+ "aptos",
504
+ "sui",
505
+ "cosmos",
506
+ "osmosis",
507
+ "injective",
508
+ "celestia",
509
+ "sei",
510
+ "dydx"
478
511
  ];
479
512
  function isValidChainId(chain) {
480
513
  return VALID_CHAIN_IDS.includes(chain);
@@ -671,6 +704,12 @@ function isValidNearAddressFormat(address) {
671
704
  if (address.includes("..")) return false;
672
705
  return true;
673
706
  }
707
+ function isValidCosmosAddressFormat(address) {
708
+ if (typeof address !== "string") return false;
709
+ if (address.length < 39 || address.length > 90) return false;
710
+ const bech32Pattern = /^[a-z]+1[qpzry9x8gf2tvdw0s3jn54khce6mua7l]{38,}$/;
711
+ return bech32Pattern.test(address);
712
+ }
674
713
  function getChainAddressType(chain) {
675
714
  switch (chain) {
676
715
  case "ethereum":
@@ -685,6 +724,13 @@ function getChainAddressType(chain) {
685
724
  return "near";
686
725
  case "zcash":
687
726
  return "zcash";
727
+ case "cosmos":
728
+ case "osmosis":
729
+ case "injective":
730
+ case "celestia":
731
+ case "sei":
732
+ case "dydx":
733
+ return "cosmos";
688
734
  default:
689
735
  return "unknown";
690
736
  }
@@ -728,6 +774,15 @@ function validateAddressForChain(address, chain, field = "address") {
728
774
  );
729
775
  }
730
776
  break;
777
+ case "cosmos":
778
+ if (!isValidCosmosAddressFormat(address)) {
779
+ throw new ValidationError(
780
+ `Invalid address format for ${chain}. Expected Cosmos bech32 address, got: ${address.slice(0, 20)}...`,
781
+ field,
782
+ { chain, expectedFormat: "bech32" }
783
+ );
784
+ }
785
+ break;
731
786
  default:
732
787
  break;
733
788
  }
@@ -779,7 +834,7 @@ function secureWipeAll(...buffers) {
779
834
  function generateStealthMetaAddress(chain, label) {
780
835
  if (!isValidChainId(chain)) {
781
836
  throw new ValidationError(
782
- `invalid chain '${chain}', must be one of: solana, ethereum, near, zcash, polygon, arbitrum, optimism, base`,
837
+ `invalid chain '${chain}', must be one of: solana, ethereum, near, zcash, polygon, arbitrum, optimism, base, bitcoin, aptos, sui, cosmos, osmosis, injective, celestia, sei, dydx`,
783
838
  "chain"
784
839
  );
785
840
  }
@@ -1059,7 +1114,7 @@ function toChecksumAddress(address) {
1059
1114
  return checksummed;
1060
1115
  }
1061
1116
  var ED25519_ORDER = 2n ** 252n + 27742317777372353535851937790883648493n;
1062
- var ED25519_CHAINS = ["solana", "near"];
1117
+ var ED25519_CHAINS = ["solana", "near", "aptos", "sui"];
1063
1118
  function isEd25519Chain(chain) {
1064
1119
  return ED25519_CHAINS.includes(chain);
1065
1120
  }
@@ -1144,7 +1199,7 @@ function bigIntToBytesLE(value, length) {
1144
1199
  function generateEd25519StealthMetaAddress(chain, label) {
1145
1200
  if (!isValidChainId(chain)) {
1146
1201
  throw new ValidationError(
1147
- `invalid chain '${chain}', must be one of: solana, ethereum, near, zcash, polygon, arbitrum, optimism, base`,
1202
+ `invalid chain '${chain}', must be one of: solana, ethereum, near, zcash, polygon, arbitrum, optimism, base, bitcoin, aptos, sui, cosmos, osmosis, injective, celestia, sei, dydx`,
1148
1203
  "chain"
1149
1204
  );
1150
1205
  }
@@ -2514,7 +2569,15 @@ var CHAIN_BLOCKCHAIN_MAP = {
2514
2569
  arbitrum: "evm",
2515
2570
  optimism: "evm",
2516
2571
  base: "evm",
2517
- bitcoin: "bitcoin"
2572
+ bitcoin: "bitcoin",
2573
+ aptos: "aptos",
2574
+ sui: "sui",
2575
+ cosmos: "cosmos",
2576
+ osmosis: "cosmos",
2577
+ injective: "cosmos",
2578
+ celestia: "cosmos",
2579
+ sei: "cosmos",
2580
+ dydx: "cosmos"
2518
2581
  };
2519
2582
  var NEARIntentsAdapter = class {
2520
2583
  client;
@@ -3274,6 +3337,448 @@ function createProductionSIP(config) {
3274
3337
  });
3275
3338
  }
3276
3339
 
3340
+ // src/move/aptos.ts
3341
+ var import_sha32 = require("@noble/hashes/sha3");
3342
+ var import_utils7 = require("@noble/hashes/utils");
3343
+ var APTOS_SINGLE_ED25519_SCHEME = 0;
3344
+ function ed25519PublicKeyToAptosAddress(publicKey) {
3345
+ if (!isValidHex(publicKey)) {
3346
+ throw new ValidationError(
3347
+ "publicKey must be a valid hex string with 0x prefix",
3348
+ "publicKey"
3349
+ );
3350
+ }
3351
+ if (!isValidEd25519PublicKey(publicKey)) {
3352
+ throw new ValidationError(
3353
+ "publicKey must be 32 bytes (64 hex characters)",
3354
+ "publicKey"
3355
+ );
3356
+ }
3357
+ const publicKeyBytes = (0, import_utils7.hexToBytes)(publicKey.slice(2));
3358
+ const authKeyInput = new Uint8Array(publicKeyBytes.length + 1);
3359
+ authKeyInput.set(publicKeyBytes, 0);
3360
+ authKeyInput[publicKeyBytes.length] = APTOS_SINGLE_ED25519_SCHEME;
3361
+ const addressHash = (0, import_sha32.sha3_256)(authKeyInput);
3362
+ return `0x${(0, import_utils7.bytesToHex)(addressHash)}`;
3363
+ }
3364
+ function isValidAptosAddress(address) {
3365
+ if (typeof address !== "string" || address.length === 0) {
3366
+ return false;
3367
+ }
3368
+ if (!address.startsWith("0x")) {
3369
+ return false;
3370
+ }
3371
+ const hexPart = address.slice(2);
3372
+ if (hexPart.length !== 64) {
3373
+ return false;
3374
+ }
3375
+ return /^[0-9a-fA-F]{64}$/.test(hexPart);
3376
+ }
3377
+ function aptosAddressToAuthKey(address) {
3378
+ if (!isValidAptosAddress(address)) {
3379
+ throw new ValidationError(
3380
+ "Invalid Aptos address format (must be 0x-prefixed 64 hex characters)",
3381
+ "address"
3382
+ );
3383
+ }
3384
+ return address.toLowerCase();
3385
+ }
3386
+ function generateAptosStealthAddress(recipientMetaAddress) {
3387
+ if (recipientMetaAddress.chain !== "aptos") {
3388
+ throw new ValidationError(
3389
+ `Expected chain 'aptos', got '${recipientMetaAddress.chain}'`,
3390
+ "recipientMetaAddress.chain"
3391
+ );
3392
+ }
3393
+ const { stealthAddress, sharedSecret } = generateEd25519StealthAddress(recipientMetaAddress);
3394
+ const aptosAddress = ed25519PublicKeyToAptosAddress(stealthAddress.address);
3395
+ return {
3396
+ stealthAddress: aptosAddress,
3397
+ stealthPublicKey: stealthAddress.address,
3398
+ ephemeralPublicKey: stealthAddress.ephemeralPublicKey,
3399
+ viewTag: stealthAddress.viewTag,
3400
+ sharedSecret
3401
+ };
3402
+ }
3403
+ function deriveAptosStealthPrivateKey(stealthAddress, spendingPrivateKey, viewingPrivateKey) {
3404
+ const recovery = deriveEd25519StealthPrivateKey(
3405
+ stealthAddress,
3406
+ spendingPrivateKey,
3407
+ viewingPrivateKey
3408
+ );
3409
+ const aptosAddress = ed25519PublicKeyToAptosAddress(recovery.stealthAddress);
3410
+ return {
3411
+ ...recovery,
3412
+ aptosAddress
3413
+ };
3414
+ }
3415
+ function checkAptosStealthAddress(stealthAddress, spendingPrivateKey, viewingPrivateKey) {
3416
+ return checkEd25519StealthAddress(
3417
+ stealthAddress,
3418
+ spendingPrivateKey,
3419
+ viewingPrivateKey
3420
+ );
3421
+ }
3422
+ var AptosStealthService = class {
3423
+ /**
3424
+ * Generate a stealth address for an Aptos recipient
3425
+ *
3426
+ * @param recipientMetaAddress - Recipient's stealth meta-address
3427
+ * @returns Complete stealth address result
3428
+ */
3429
+ generateStealthAddress(recipientMetaAddress) {
3430
+ return generateAptosStealthAddress(recipientMetaAddress);
3431
+ }
3432
+ /**
3433
+ * Convert an ed25519 public key to Aptos address format
3434
+ *
3435
+ * @param publicKey - 32-byte ed25519 public key
3436
+ * @returns Aptos address string
3437
+ */
3438
+ stealthKeyToAptosAddress(publicKey) {
3439
+ return ed25519PublicKeyToAptosAddress(publicKey);
3440
+ }
3441
+ /**
3442
+ * Derive the private key for a stealth address
3443
+ *
3444
+ * @param stealthAddress - Stealth address data
3445
+ * @param spendingPrivateKey - Recipient's spending private key
3446
+ * @param viewingPrivateKey - Recipient's viewing private key
3447
+ * @returns Recovery data with derived private key
3448
+ */
3449
+ deriveStealthPrivateKey(stealthAddress, spendingPrivateKey, viewingPrivateKey) {
3450
+ return deriveAptosStealthPrivateKey(stealthAddress, spendingPrivateKey, viewingPrivateKey);
3451
+ }
3452
+ /**
3453
+ * Check if a stealth address belongs to this recipient
3454
+ *
3455
+ * @param stealthAddress - Stealth address to check
3456
+ * @param spendingPrivateKey - Recipient's spending private key
3457
+ * @param viewingPrivateKey - Recipient's viewing private key
3458
+ * @returns true if the address belongs to this recipient
3459
+ */
3460
+ checkStealthAddress(stealthAddress, spendingPrivateKey, viewingPrivateKey) {
3461
+ return checkAptosStealthAddress(stealthAddress, spendingPrivateKey, viewingPrivateKey);
3462
+ }
3463
+ /**
3464
+ * Validate an Aptos address format
3465
+ *
3466
+ * @param address - Address to validate
3467
+ * @returns true if valid format
3468
+ */
3469
+ isValidAddress(address) {
3470
+ return isValidAptosAddress(address);
3471
+ }
3472
+ };
3473
+
3474
+ // src/move/sui.ts
3475
+ var import_blake2b = require("@noble/hashes/blake2b");
3476
+ var import_utils8 = require("@noble/hashes/utils");
3477
+
3478
+ // src/cosmos/stealth.ts
3479
+ var import_sha2566 = require("@noble/hashes/sha256");
3480
+ var import_ripemd160 = require("@noble/hashes/ripemd160");
3481
+ var import_utils9 = require("@noble/hashes/utils");
3482
+ var import_base = require("@scure/base");
3483
+ var CHAIN_PREFIXES = {
3484
+ cosmos: "cosmos",
3485
+ osmosis: "osmo",
3486
+ injective: "inj",
3487
+ celestia: "celestia",
3488
+ sei: "sei",
3489
+ dydx: "dydx"
3490
+ };
3491
+ var CosmosStealthService = class {
3492
+ /**
3493
+ * Generate a stealth meta-address for a Cosmos chain
3494
+ *
3495
+ * @param chain - Cosmos chain identifier
3496
+ * @param label - Optional human-readable label
3497
+ * @returns Stealth meta-address and private keys
3498
+ * @throws {ValidationError} If chain is invalid
3499
+ *
3500
+ * @example
3501
+ * ```typescript
3502
+ * const service = new CosmosStealthService()
3503
+ * const { metaAddress, spendingPrivateKey, viewingPrivateKey } =
3504
+ * service.generateStealthMetaAddress('cosmos', 'My Cosmos Wallet')
3505
+ * ```
3506
+ */
3507
+ generateStealthMetaAddress(chain, label) {
3508
+ if (!this.isValidCosmosChain(chain)) {
3509
+ throw new ValidationError(
3510
+ `invalid Cosmos chain '${chain}', must be one of: ${Object.keys(CHAIN_PREFIXES).join(", ")}`,
3511
+ "chain"
3512
+ );
3513
+ }
3514
+ const result = generateStealthMetaAddress("ethereum", label);
3515
+ return {
3516
+ ...result,
3517
+ metaAddress: {
3518
+ ...result.metaAddress,
3519
+ chain
3520
+ // Will be updated in types package
3521
+ }
3522
+ };
3523
+ }
3524
+ /**
3525
+ * Generate a one-time stealth address for a Cosmos chain
3526
+ *
3527
+ * @param spendingPubKey - Recipient's spending public key (33-byte compressed)
3528
+ * @param viewingPubKey - Recipient's viewing public key (33-byte compressed)
3529
+ * @param chain - Cosmos chain identifier
3530
+ * @returns Cosmos stealth address with bech32 encoding
3531
+ * @throws {ValidationError} If keys or chain are invalid
3532
+ *
3533
+ * @example
3534
+ * ```typescript
3535
+ * const service = new CosmosStealthService()
3536
+ * const result = service.generateStealthAddress(
3537
+ * spendingKey,
3538
+ * viewingKey,
3539
+ * 'osmosis'
3540
+ * )
3541
+ * console.log(result.stealthAddress) // "osmo1..."
3542
+ * ```
3543
+ */
3544
+ generateStealthAddress(spendingPubKey, viewingPubKey, chain) {
3545
+ if (!this.isValidCosmosChain(chain)) {
3546
+ throw new ValidationError(
3547
+ `invalid Cosmos chain '${chain}', must be one of: ${Object.keys(CHAIN_PREFIXES).join(", ")}`,
3548
+ "chain"
3549
+ );
3550
+ }
3551
+ if (spendingPubKey.length !== 33) {
3552
+ throw new ValidationError(
3553
+ "spendingPubKey must be 33 bytes (compressed secp256k1)",
3554
+ "spendingPubKey"
3555
+ );
3556
+ }
3557
+ if (viewingPubKey.length !== 33) {
3558
+ throw new ValidationError(
3559
+ "viewingPubKey must be 33 bytes (compressed secp256k1)",
3560
+ "viewingPubKey"
3561
+ );
3562
+ }
3563
+ const metaAddress = {
3564
+ spendingKey: `0x${(0, import_utils9.bytesToHex)(spendingPubKey)}`,
3565
+ viewingKey: `0x${(0, import_utils9.bytesToHex)(viewingPubKey)}`,
3566
+ chain: "ethereum"
3567
+ // Use ethereum for secp256k1 generation
3568
+ };
3569
+ const { stealthAddress, sharedSecret } = generateStealthAddress(metaAddress);
3570
+ const cosmosAddress = this.stealthKeyToCosmosAddress(
3571
+ (0, import_utils9.hexToBytes)(stealthAddress.address.slice(2)),
3572
+ CHAIN_PREFIXES[chain]
3573
+ );
3574
+ return {
3575
+ stealthAddress: cosmosAddress,
3576
+ stealthPublicKey: stealthAddress.address,
3577
+ ephemeralPublicKey: stealthAddress.ephemeralPublicKey,
3578
+ viewTag: stealthAddress.viewTag,
3579
+ viewKeyHash: sharedSecret
3580
+ };
3581
+ }
3582
+ /**
3583
+ * Generate stealth address from StealthMetaAddress
3584
+ *
3585
+ * Convenience method that accepts a StealthMetaAddress directly.
3586
+ *
3587
+ * @param recipientMetaAddress - Recipient's stealth meta-address
3588
+ * @param chain - Cosmos chain identifier
3589
+ * @returns Cosmos stealth address with bech32 encoding
3590
+ * @throws {ValidationError} If meta-address or chain are invalid
3591
+ *
3592
+ * @example
3593
+ * ```typescript
3594
+ * const service = new CosmosStealthService()
3595
+ * const result = service.generateStealthAddressFromMeta(metaAddress, 'cosmos')
3596
+ * ```
3597
+ */
3598
+ generateStealthAddressFromMeta(recipientMetaAddress, chain) {
3599
+ const spendingPubKey = (0, import_utils9.hexToBytes)(recipientMetaAddress.spendingKey.slice(2));
3600
+ const viewingPubKey = (0, import_utils9.hexToBytes)(recipientMetaAddress.viewingKey.slice(2));
3601
+ return this.generateStealthAddress(spendingPubKey, viewingPubKey, chain);
3602
+ }
3603
+ /**
3604
+ * Convert stealth public key to Cosmos bech32 address
3605
+ *
3606
+ * Algorithm:
3607
+ * 1. SHA256 hash of compressed public key
3608
+ * 2. RIPEMD160 hash of SHA256 hash
3609
+ * 3. Bech32 encode with chain prefix
3610
+ *
3611
+ * @param publicKey - Compressed secp256k1 public key (33 bytes)
3612
+ * @param prefix - Bech32 address prefix (e.g., "cosmos", "osmo")
3613
+ * @returns Bech32-encoded address
3614
+ * @throws {ValidationError} If public key is invalid
3615
+ *
3616
+ * @example
3617
+ * ```typescript
3618
+ * const service = new CosmosStealthService()
3619
+ * const address = service.stealthKeyToCosmosAddress(pubKey, 'cosmos')
3620
+ * // Returns: "cosmos1abc..."
3621
+ * ```
3622
+ */
3623
+ stealthKeyToCosmosAddress(publicKey, prefix) {
3624
+ if (publicKey.length !== 33) {
3625
+ throw new ValidationError(
3626
+ "public key must be 33 bytes (compressed secp256k1)",
3627
+ "publicKey"
3628
+ );
3629
+ }
3630
+ const sha256Hash = (0, import_sha2566.sha256)(publicKey);
3631
+ const hash160 = (0, import_ripemd160.ripemd160)(sha256Hash);
3632
+ const words = import_base.bech32.toWords(hash160);
3633
+ return import_base.bech32.encode(prefix, words);
3634
+ }
3635
+ /**
3636
+ * Derive stealth private key for recipient to claim funds
3637
+ *
3638
+ * @param stealthAddress - The stealth address to recover (as StealthAddress)
3639
+ * @param spendingPrivateKey - Recipient's spending private key
3640
+ * @param viewingPrivateKey - Recipient's viewing private key
3641
+ * @returns Recovery data with derived private key
3642
+ * @throws {ValidationError} If any input is invalid
3643
+ *
3644
+ * @example
3645
+ * ```typescript
3646
+ * const service = new CosmosStealthService()
3647
+ * const recovery = service.deriveStealthPrivateKey(
3648
+ * stealthAddress,
3649
+ * spendingPrivKey,
3650
+ * viewingPrivKey
3651
+ * )
3652
+ * // Use recovery.privateKey to spend funds
3653
+ * ```
3654
+ */
3655
+ deriveStealthPrivateKey(stealthAddress, spendingPrivateKey, viewingPrivateKey) {
3656
+ return deriveStealthPrivateKey(
3657
+ stealthAddress,
3658
+ spendingPrivateKey,
3659
+ viewingPrivateKey
3660
+ );
3661
+ }
3662
+ /**
3663
+ * Check if a string is a valid Cosmos chain identifier
3664
+ */
3665
+ isValidCosmosChain(chain) {
3666
+ return chain in CHAIN_PREFIXES;
3667
+ }
3668
+ /**
3669
+ * Decode a Cosmos bech32 address to raw hash
3670
+ *
3671
+ * @param address - Bech32-encoded address
3672
+ * @returns Decoded address hash (20 bytes)
3673
+ * @throws {ValidationError} If address is invalid
3674
+ *
3675
+ * @example
3676
+ * ```typescript
3677
+ * const service = new CosmosStealthService()
3678
+ * const { prefix, hash } = service.decodeBech32Address('cosmos1abc...')
3679
+ * ```
3680
+ */
3681
+ decodeBech32Address(address) {
3682
+ try {
3683
+ const decoded = import_base.bech32.decode(address);
3684
+ const hash2 = import_base.bech32.fromWords(decoded.words);
3685
+ if (hash2.length !== 20) {
3686
+ throw new ValidationError(
3687
+ `invalid address hash length: ${hash2.length}, expected 20`,
3688
+ "address"
3689
+ );
3690
+ }
3691
+ return {
3692
+ prefix: decoded.prefix,
3693
+ hash: new Uint8Array(hash2)
3694
+ };
3695
+ } catch (error) {
3696
+ if (error instanceof ValidationError) {
3697
+ throw error;
3698
+ }
3699
+ throw new ValidationError(
3700
+ `invalid bech32 address: ${error instanceof Error ? error.message : "unknown error"}`,
3701
+ "address"
3702
+ );
3703
+ }
3704
+ }
3705
+ /**
3706
+ * Validate a Cosmos bech32 address format
3707
+ *
3708
+ * @param address - Address to validate
3709
+ * @param expectedChain - Optional chain to validate prefix against
3710
+ * @returns true if valid, false otherwise
3711
+ *
3712
+ * @example
3713
+ * ```typescript
3714
+ * const service = new CosmosStealthService()
3715
+ * service.isValidCosmosAddress('cosmos1abc...', 'cosmos') // true
3716
+ * service.isValidCosmosAddress('osmo1xyz...', 'cosmos') // false (wrong prefix)
3717
+ * ```
3718
+ */
3719
+ isValidCosmosAddress(address, expectedChain) {
3720
+ try {
3721
+ const { prefix, hash: hash2 } = this.decodeBech32Address(address);
3722
+ if (hash2.length !== 20) {
3723
+ return false;
3724
+ }
3725
+ if (expectedChain) {
3726
+ return prefix === CHAIN_PREFIXES[expectedChain];
3727
+ }
3728
+ return Object.values(CHAIN_PREFIXES).includes(prefix);
3729
+ } catch {
3730
+ return false;
3731
+ }
3732
+ }
3733
+ /**
3734
+ * Get the chain ID from a bech32 address prefix
3735
+ *
3736
+ * @param address - Bech32-encoded address
3737
+ * @returns Chain ID or null if unknown prefix
3738
+ *
3739
+ * @example
3740
+ * ```typescript
3741
+ * const service = new CosmosStealthService()
3742
+ * service.getChainFromAddress('cosmos1abc...') // 'cosmos'
3743
+ * service.getChainFromAddress('osmo1xyz...') // 'osmosis'
3744
+ * ```
3745
+ */
3746
+ getChainFromAddress(address) {
3747
+ try {
3748
+ const { prefix } = this.decodeBech32Address(address);
3749
+ for (const [chain, chainPrefix] of Object.entries(CHAIN_PREFIXES)) {
3750
+ if (chainPrefix === prefix) {
3751
+ return chain;
3752
+ }
3753
+ }
3754
+ return null;
3755
+ } catch {
3756
+ return null;
3757
+ }
3758
+ }
3759
+ };
3760
+ function generateCosmosStealthMetaAddress(chain, label) {
3761
+ const service = new CosmosStealthService();
3762
+ return service.generateStealthMetaAddress(chain, label);
3763
+ }
3764
+ function generateCosmosStealthAddress(spendingPubKey, viewingPubKey, chain) {
3765
+ const service = new CosmosStealthService();
3766
+ return service.generateStealthAddress(spendingPubKey, viewingPubKey, chain);
3767
+ }
3768
+ function stealthKeyToCosmosAddress(publicKey, prefix) {
3769
+ const service = new CosmosStealthService();
3770
+ return service.stealthKeyToCosmosAddress(publicKey, prefix);
3771
+ }
3772
+ function isValidCosmosAddress(address, expectedChain) {
3773
+ const service = new CosmosStealthService();
3774
+ return service.isValidCosmosAddress(address, expectedChain);
3775
+ }
3776
+
3777
+ // src/cosmos/ibc-stealth.ts
3778
+ var import_utils10 = require("@noble/hashes/utils");
3779
+ var import_secp256k13 = require("@noble/curves/secp256k1");
3780
+ var import_sha2567 = require("@noble/hashes/sha256");
3781
+
3277
3782
  // src/proofs/interface.ts
3278
3783
  var ProofGenerationError = class extends Error {
3279
3784
  proofType;
@@ -3287,8 +3792,8 @@ var ProofGenerationError = class extends Error {
3287
3792
  };
3288
3793
 
3289
3794
  // src/proofs/mock.ts
3290
- var import_sha2566 = require("@noble/hashes/sha256");
3291
- var import_utils7 = require("@noble/hashes/utils");
3795
+ var import_sha2568 = require("@noble/hashes/sha256");
3796
+ var import_utils11 = require("@noble/hashes/utils");
3292
3797
  var MOCK_PROOF_PREFIX = "0x4d4f434b";
3293
3798
  var WARNING_MESSAGE = `
3294
3799
  \u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557
@@ -3453,22 +3958,22 @@ var MockProofProvider = class {
3453
3958
  { type: proofType, params },
3454
3959
  (_, v) => typeof v === "bigint" ? v.toString() : v
3455
3960
  );
3456
- const hash2 = (0, import_sha2566.sha256)(new TextEncoder().encode(input));
3457
- const random = (0, import_utils7.randomBytes)(16);
3961
+ const hash2 = (0, import_sha2568.sha256)(new TextEncoder().encode(input));
3962
+ const random = (0, import_utils11.randomBytes)(16);
3458
3963
  const combined = new Uint8Array(4 + hash2.length + random.length);
3459
3964
  combined.set(new TextEncoder().encode("MOCK"), 0);
3460
3965
  combined.set(hash2, 4);
3461
3966
  combined.set(random, 4 + hash2.length);
3462
- return `${MOCK_PROOF_PREFIX}${(0, import_utils7.bytesToHex)(combined.slice(4))}`;
3967
+ return `${MOCK_PROOF_PREFIX}${(0, import_utils11.bytesToHex)(combined.slice(4))}`;
3463
3968
  }
3464
3969
  hashToHex(data) {
3465
- const hash2 = (0, import_sha2566.sha256)(new TextEncoder().encode(data));
3466
- return `0x${(0, import_utils7.bytesToHex)(hash2)}`;
3970
+ const hash2 = (0, import_sha2568.sha256)(new TextEncoder().encode(data));
3971
+ return `0x${(0, import_utils11.bytesToHex)(hash2)}`;
3467
3972
  }
3468
3973
  };
3469
3974
 
3470
3975
  // src/proofs/browser-utils.ts
3471
- function hexToBytes5(hex) {
3976
+ function hexToBytes9(hex) {
3472
3977
  const h = hex.startsWith("0x") ? hex.slice(2) : hex;
3473
3978
  if (h.length === 0) return new Uint8Array(0);
3474
3979
  if (h.length % 2 !== 0) {
@@ -3480,7 +3985,7 @@ function hexToBytes5(hex) {
3480
3985
  }
3481
3986
  return bytes;
3482
3987
  }
3483
- function bytesToHex7(bytes) {
3988
+ function bytesToHex11(bytes) {
3484
3989
  return Array.from(bytes).map((b) => b.toString(16).padStart(2, "0")).join("");
3485
3990
  }
3486
3991
  function isBrowser() {
@@ -3522,18 +4027,34 @@ var CHAIN_NUMERIC_IDS = {
3522
4027
  // Non-standard, SIP-specific
3523
4028
  near: 502,
3524
4029
  // Non-standard, SIP-specific
3525
- zcash: 503
4030
+ zcash: 503,
4031
+ // Non-standard, SIP-specific
4032
+ aptos: 504,
4033
+ // Non-standard, SIP-specific
4034
+ sui: 505,
4035
+ // Non-standard, SIP-specific
4036
+ cosmos: 506,
4037
+ // Non-standard, SIP-specific (Cosmos Hub)
4038
+ osmosis: 507,
4039
+ // Non-standard, SIP-specific
4040
+ injective: 508,
4041
+ // Non-standard, SIP-specific
4042
+ celestia: 509,
4043
+ // Non-standard, SIP-specific
4044
+ sei: 510,
4045
+ // Non-standard, SIP-specific
4046
+ dydx: 511
3526
4047
  // Non-standard, SIP-specific
3527
4048
  };
3528
4049
 
3529
4050
  // src/oracle/verification.ts
3530
4051
  var import_ed255192 = require("@noble/curves/ed25519");
3531
- var import_sha2568 = require("@noble/hashes/sha256");
3532
- var import_utils9 = require("@noble/hashes/utils");
4052
+ var import_sha25610 = require("@noble/hashes/sha256");
4053
+ var import_utils13 = require("@noble/hashes/utils");
3533
4054
 
3534
4055
  // src/oracle/serialization.ts
3535
- var import_sha2567 = require("@noble/hashes/sha256");
3536
- var import_utils8 = require("@noble/hashes/utils");
4056
+ var import_sha2569 = require("@noble/hashes/sha256");
4057
+ var import_utils12 = require("@noble/hashes/utils");
3537
4058
  function serializeAttestationMessage(message) {
3538
4059
  const buffer = new Uint8Array(197);
3539
4060
  const view = new DataView(buffer.buffer);
@@ -3576,19 +4097,19 @@ function deserializeAttestationMessage(bytes) {
3576
4097
  const version = bytes[offset++];
3577
4098
  const chainId = view.getUint32(offset, false);
3578
4099
  offset += 4;
3579
- const intentHash = `0x${(0, import_utils8.bytesToHex)(bytes.slice(offset, offset + 32))}`;
4100
+ const intentHash = `0x${(0, import_utils12.bytesToHex)(bytes.slice(offset, offset + 32))}`;
3580
4101
  offset += 32;
3581
- const recipient = `0x${(0, import_utils8.bytesToHex)(bytes.slice(offset, offset + 32))}`;
4102
+ const recipient = `0x${(0, import_utils12.bytesToHex)(bytes.slice(offset, offset + 32))}`;
3582
4103
  offset += 32;
3583
4104
  const amount = bytesToBigint(bytes.slice(offset, offset + 16));
3584
4105
  offset += 16;
3585
- const assetId = `0x${(0, import_utils8.bytesToHex)(bytes.slice(offset, offset + 32))}`;
4106
+ const assetId = `0x${(0, import_utils12.bytesToHex)(bytes.slice(offset, offset + 32))}`;
3586
4107
  offset += 32;
3587
- const txHash = `0x${(0, import_utils8.bytesToHex)(bytes.slice(offset, offset + 32))}`;
4108
+ const txHash = `0x${(0, import_utils12.bytesToHex)(bytes.slice(offset, offset + 32))}`;
3588
4109
  offset += 32;
3589
4110
  const blockNumber = view.getBigUint64(offset, false);
3590
4111
  offset += 8;
3591
- const blockHash = `0x${(0, import_utils8.bytesToHex)(bytes.slice(offset, offset + 32))}`;
4112
+ const blockHash = `0x${(0, import_utils12.bytesToHex)(bytes.slice(offset, offset + 32))}`;
3592
4113
  offset += 32;
3593
4114
  const timestamp = Number(view.getBigUint64(offset, false));
3594
4115
  return {
@@ -3605,12 +4126,12 @@ function deserializeAttestationMessage(bytes) {
3605
4126
  };
3606
4127
  }
3607
4128
  function computeAttestationHash(message) {
3608
- const domain = (0, import_utils8.utf8ToBytes)(ORACLE_DOMAIN);
4129
+ const domain = (0, import_utils12.utf8ToBytes)(ORACLE_DOMAIN);
3609
4130
  const messageBytes = serializeAttestationMessage(message);
3610
4131
  const toHash = new Uint8Array(domain.length + messageBytes.length);
3611
4132
  toHash.set(domain, 0);
3612
4133
  toHash.set(messageBytes, domain.length);
3613
- return (0, import_sha2567.sha256)(toHash);
4134
+ return (0, import_sha2569.sha256)(toHash);
3614
4135
  }
3615
4136
  function getChainNumericId(chain) {
3616
4137
  const id = CHAIN_NUMERIC_IDS[chain];
@@ -3621,7 +4142,7 @@ function getChainNumericId(chain) {
3621
4142
  }
3622
4143
  function normalizeToBytes(hex, length, field) {
3623
4144
  const stripped = hex.startsWith("0x") ? hex.slice(2) : hex;
3624
- const bytes = (0, import_utils8.hexToBytes)(stripped);
4145
+ const bytes = (0, import_utils12.hexToBytes)(stripped);
3625
4146
  if (bytes.length === length) {
3626
4147
  return bytes;
3627
4148
  }
@@ -3654,9 +4175,9 @@ function bytesToBigint(bytes) {
3654
4175
 
3655
4176
  // src/oracle/verification.ts
3656
4177
  function deriveOracleId(publicKey) {
3657
- const keyBytes = typeof publicKey === "string" ? (0, import_utils9.hexToBytes)(publicKey.startsWith("0x") ? publicKey.slice(2) : publicKey) : publicKey;
3658
- const hash2 = (0, import_sha2568.sha256)(keyBytes);
3659
- return `0x${(0, import_utils9.bytesToHex)(hash2)}`;
4178
+ const keyBytes = typeof publicKey === "string" ? (0, import_utils13.hexToBytes)(publicKey.startsWith("0x") ? publicKey.slice(2) : publicKey) : publicKey;
4179
+ const hash2 = (0, import_sha25610.sha256)(keyBytes);
4180
+ return `0x${(0, import_utils13.bytesToHex)(hash2)}`;
3660
4181
  }
3661
4182
  function verifyAttestation(attestation, registry) {
3662
4183
  const { message, signatures } = attestation;
@@ -3686,10 +4207,10 @@ function verifyAttestation(attestation, registry) {
3686
4207
  continue;
3687
4208
  }
3688
4209
  try {
3689
- const publicKeyBytes = (0, import_utils9.hexToBytes)(
4210
+ const publicKeyBytes = (0, import_utils13.hexToBytes)(
3690
4211
  oracle.publicKey.startsWith("0x") ? oracle.publicKey.slice(2) : oracle.publicKey
3691
4212
  );
3692
- const signatureBytes = (0, import_utils9.hexToBytes)(
4213
+ const signatureBytes = (0, import_utils13.hexToBytes)(
3693
4214
  sig.signature.startsWith("0x") ? sig.signature.slice(2) : sig.signature
3694
4215
  );
3695
4216
  const isValid = import_ed255192.ed25519.verify(signatureBytes, messageHash, publicKeyBytes);
@@ -3714,10 +4235,10 @@ function verifyAttestation(attestation, registry) {
3714
4235
  }
3715
4236
  function verifyOracleSignature(signature, messageHash, oracle) {
3716
4237
  try {
3717
- const publicKeyBytes = (0, import_utils9.hexToBytes)(
4238
+ const publicKeyBytes = (0, import_utils13.hexToBytes)(
3718
4239
  oracle.publicKey.startsWith("0x") ? oracle.publicKey.slice(2) : oracle.publicKey
3719
4240
  );
3720
- const signatureBytes = (0, import_utils9.hexToBytes)(
4241
+ const signatureBytes = (0, import_utils13.hexToBytes)(
3721
4242
  signature.signature.startsWith("0x") ? signature.signature.slice(2) : signature.signature
3722
4243
  );
3723
4244
  return import_ed255192.ed25519.verify(signatureBytes, messageHash, publicKeyBytes);
@@ -3731,7 +4252,7 @@ function signAttestationMessage(messageHash, privateKey) {
3731
4252
  const oracleId = deriveOracleId(publicKey);
3732
4253
  return {
3733
4254
  oracleId,
3734
- signature: `0x${(0, import_utils9.bytesToHex)(signature)}`
4255
+ signature: `0x${(0, import_utils13.bytesToHex)(signature)}`
3735
4256
  };
3736
4257
  }
3737
4258
  function createOracleRegistry(config = {}) {
@@ -3783,14 +4304,14 @@ function hasEnoughOracles(registry) {
3783
4304
  }
3784
4305
 
3785
4306
  // src/index.ts
3786
- var import_types37 = require("@sip-protocol/types");
3787
- var import_types38 = require("@sip-protocol/types");
3788
- var import_types39 = require("@sip-protocol/types");
3789
- var import_types40 = require("@sip-protocol/types");
4307
+ var import_types55 = require("@sip-protocol/types");
4308
+ var import_types56 = require("@sip-protocol/types");
4309
+ var import_types57 = require("@sip-protocol/types");
4310
+ var import_types58 = require("@sip-protocol/types");
3790
4311
 
3791
4312
  // src/solver/mock-solver.ts
3792
4313
  var import_types7 = require("@sip-protocol/types");
3793
- var import_utils10 = require("@noble/hashes/utils");
4314
+ var import_utils14 = require("@noble/hashes/utils");
3794
4315
  var MockSolver = class {
3795
4316
  info;
3796
4317
  capabilities;
@@ -3872,7 +4393,7 @@ var MockSolver = class {
3872
4393
  const spreadAmount = baseOutput * BigInt(Math.floor(this.spreadPercent * 1e4)) / 10000n;
3873
4394
  const outputAmount = baseOutput + spreadAmount;
3874
4395
  const feeAmount = outputAmount * BigInt(Math.floor(this.feePercent * 1e4)) / 10000n;
3875
- const quoteId = `quote-${(0, import_utils10.bytesToHex)((0, import_utils10.randomBytes)(8))}`;
4396
+ const quoteId = `quote-${(0, import_utils14.bytesToHex)((0, import_utils14.randomBytes)(8))}`;
3876
4397
  const now = Math.floor(Date.now() / 1e3);
3877
4398
  const quote = {
3878
4399
  quoteId,
@@ -3883,7 +4404,7 @@ var MockSolver = class {
3883
4404
  expiry: now + 60,
3884
4405
  // Quote valid for 1 minute
3885
4406
  fee: feeAmount,
3886
- signature: `0x${(0, import_utils10.bytesToHex)((0, import_utils10.randomBytes)(64))}`,
4407
+ signature: `0x${(0, import_utils14.bytesToHex)((0, import_utils14.randomBytes)(64))}`,
3887
4408
  // Mock signature
3888
4409
  validUntil: now + 60,
3889
4410
  estimatedGas: 200000n
@@ -3920,7 +4441,7 @@ var MockSolver = class {
3920
4441
  error: status.error
3921
4442
  };
3922
4443
  }
3923
- const txHash = `0x${(0, import_utils10.bytesToHex)((0, import_utils10.randomBytes)(32))}`;
4444
+ const txHash = `0x${(0, import_utils14.bytesToHex)((0, import_utils14.randomBytes)(32))}`;
3924
4445
  status.status = "completed";
3925
4446
  status.txHash = txHash;
3926
4447
  return {
@@ -3930,10 +4451,10 @@ var MockSolver = class {
3930
4451
  txHash: intent.privacyLevel === "transparent" ? txHash : void 0,
3931
4452
  fulfillmentProof: {
3932
4453
  type: "fulfillment",
3933
- proof: `0x${(0, import_utils10.bytesToHex)((0, import_utils10.randomBytes)(128))}`,
4454
+ proof: `0x${(0, import_utils14.bytesToHex)((0, import_utils14.randomBytes)(128))}`,
3934
4455
  publicInputs: [
3935
- `0x${(0, import_utils10.bytesToHex)(new TextEncoder().encode(intent.intentId))}`,
3936
- `0x${(0, import_utils10.bytesToHex)(new TextEncoder().encode(quote.quoteId))}`
4456
+ `0x${(0, import_utils14.bytesToHex)(new TextEncoder().encode(intent.intentId))}`,
4457
+ `0x${(0, import_utils14.bytesToHex)(new TextEncoder().encode(quote.quoteId))}`
3937
4458
  ]
3938
4459
  },
3939
4460
  fulfilledAt: Math.floor(Date.now() / 1e3)
@@ -3971,7 +4492,7 @@ function createMockSolver(config) {
3971
4492
  }
3972
4493
 
3973
4494
  // src/index.ts
3974
- var import_types41 = require("@sip-protocol/types");
4495
+ var import_types59 = require("@sip-protocol/types");
3975
4496
 
3976
4497
  // src/settlement/interface.ts
3977
4498
  var SwapStatus = /* @__PURE__ */ ((SwapStatus2) => {
@@ -5077,7 +5598,7 @@ function createZcashNativeBackend(config) {
5077
5598
 
5078
5599
  // src/settlement/backends/direct-chain.ts
5079
5600
  var import_types10 = require("@sip-protocol/types");
5080
- var import_utils11 = require("@noble/hashes/utils");
5601
+ var import_utils15 = require("@noble/hashes/utils");
5081
5602
  var DEFAULT_GAS_FEES = {
5082
5603
  ethereum: 21000n * 50n * 1000000000n,
5083
5604
  // 21k gas * 50 gwei = 0.00105 ETH
@@ -5095,8 +5616,24 @@ var DEFAULT_GAS_FEES = {
5095
5616
  // 21k gas * 0.001 gwei ETH = 21 gwei = 21e6 wei
5096
5617
  base: 2100000000n,
5097
5618
  // 21k gas * 0.1 gwei ETH = 2100 gwei = 2.1e9 wei
5098
- bitcoin: 10000n
5619
+ bitcoin: 10000n,
5099
5620
  // 10000 sats = 0.0001 BTC (estimate for 1 input, 2 outputs)
5621
+ aptos: 100n,
5622
+ // 0.000001 APT in octas (gas units)
5623
+ sui: 1000n,
5624
+ // 0.000001 SUI in MIST
5625
+ cosmos: 5000n,
5626
+ // 0.005 ATOM in uatom
5627
+ osmosis: 5000n,
5628
+ // 0.005 OSMO in uosmo
5629
+ injective: 5000n,
5630
+ // 0.000005 INJ in inj (18 decimals)
5631
+ celestia: 5000n,
5632
+ // 0.005 TIA in utia
5633
+ sei: 5000n,
5634
+ // 0.005 SEI in usei
5635
+ dydx: 5000n
5636
+ // 0.000005 DYDX in dydx (18 decimals)
5100
5637
  };
5101
5638
 
5102
5639
  // src/zcash/rpc-client.ts
@@ -6381,12 +6918,300 @@ function createZcashSwapService(config) {
6381
6918
  var import_types14 = require("@sip-protocol/types");
6382
6919
 
6383
6920
  // src/index.ts
6384
- var import_types42 = require("@sip-protocol/types");
6921
+ var import_types60 = require("@sip-protocol/types");
6922
+
6923
+ // src/bitcoin/taproot.ts
6924
+ var import_secp256k14 = require("@noble/curves/secp256k1");
6925
+ var import_sha25611 = require("@noble/hashes/sha256");
6926
+ var import_utils16 = require("@noble/hashes/utils");
6927
+ var BECH32_CHARSET = "qpzry9x8gf2tvdw0s3jn54khce6mua7l";
6928
+ var BECH32_GENERATOR = [996825010, 642813549, 513874426, 1027748829, 705979059];
6929
+ function taggedHash(tag, data) {
6930
+ const tagHash = (0, import_sha25611.sha256)(new TextEncoder().encode(tag));
6931
+ const taggedData = new Uint8Array(tagHash.length * 2 + data.length);
6932
+ taggedData.set(tagHash, 0);
6933
+ taggedData.set(tagHash, tagHash.length);
6934
+ taggedData.set(data, tagHash.length * 2);
6935
+ return (0, import_sha25611.sha256)(taggedData);
6936
+ }
6937
+ function schnorrSign(message, privateKey, auxRand) {
6938
+ if (message.length !== 32) {
6939
+ throw new ValidationError("message must be 32 bytes", "message");
6940
+ }
6941
+ if (privateKey.length !== 32) {
6942
+ throw new ValidationError("privateKey must be 32 bytes", "privateKey");
6943
+ }
6944
+ if (auxRand && auxRand.length !== 32) {
6945
+ throw new ValidationError("auxRand must be 32 bytes if provided", "auxRand");
6946
+ }
6947
+ return import_secp256k14.schnorr.sign(message, privateKey, auxRand);
6948
+ }
6949
+ function schnorrVerify(signature, message, publicKey) {
6950
+ if (signature.length !== 64) {
6951
+ throw new ValidationError("signature must be 64 bytes", "signature");
6952
+ }
6953
+ if (message.length !== 32) {
6954
+ throw new ValidationError("message must be 32 bytes", "message");
6955
+ }
6956
+ if (publicKey.length !== 32) {
6957
+ throw new ValidationError("publicKey must be 32 bytes (x-only)", "publicKey");
6958
+ }
6959
+ try {
6960
+ return import_secp256k14.schnorr.verify(signature, message, publicKey);
6961
+ } catch {
6962
+ return false;
6963
+ }
6964
+ }
6965
+ function getXOnlyPublicKey(privateKey) {
6966
+ if (privateKey.length !== 32) {
6967
+ throw new ValidationError("privateKey must be 32 bytes", "privateKey");
6968
+ }
6969
+ const publicKey = import_secp256k14.secp256k1.getPublicKey(privateKey, false);
6970
+ return publicKey.slice(1, 33);
6971
+ }
6972
+ function computeTweakedKey(internalKey, merkleRoot) {
6973
+ if (internalKey.length !== 32) {
6974
+ throw new ValidationError("internalKey must be 32 bytes (x-only)", "internalKey");
6975
+ }
6976
+ if (merkleRoot && merkleRoot.length !== 32) {
6977
+ throw new ValidationError("merkleRoot must be 32 bytes if provided", "merkleRoot");
6978
+ }
6979
+ const tweakData = merkleRoot ? new Uint8Array([...internalKey, ...merkleRoot]) : internalKey;
6980
+ const tweak = taggedHash("TapTweak", tweakData);
6981
+ const tweakScalar = BigInt("0x" + (0, import_utils16.bytesToHex)(tweak)) % import_secp256k14.secp256k1.CURVE.n;
6982
+ const internalPoint = import_secp256k14.secp256k1.ProjectivePoint.fromHex(
6983
+ "02" + (0, import_utils16.bytesToHex)(internalKey)
6984
+ );
6985
+ const tweakPoint = import_secp256k14.secp256k1.ProjectivePoint.BASE.multiply(tweakScalar);
6986
+ const tweakedPoint = internalPoint.add(tweakPoint);
6987
+ const tweakedKeyBytes = tweakedPoint.toRawBytes(false);
6988
+ const xOnly = tweakedKeyBytes.slice(1, 33);
6989
+ const yCoord = tweakedKeyBytes.slice(33, 65);
6990
+ const yBigInt = BigInt("0x" + (0, import_utils16.bytesToHex)(yCoord));
6991
+ const parity = Number(yBigInt & 1n);
6992
+ return {
6993
+ tweakedKey: xOnly,
6994
+ parity
6995
+ };
6996
+ }
6997
+ function createTaprootOutput(internalKey, scripts) {
6998
+ if (internalKey.length !== 32) {
6999
+ throw new ValidationError("internalKey must be 32 bytes (x-only)", "internalKey");
7000
+ }
7001
+ let merkleRoot;
7002
+ if (scripts && scripts.length > 0) {
7003
+ if (scripts.length === 1) {
7004
+ const script = scripts[0];
7005
+ const leafData = new Uint8Array([
7006
+ script.leafVersion,
7007
+ script.script.length,
7008
+ ...script.script
7009
+ ]);
7010
+ merkleRoot = taggedHash("TapLeaf", leafData);
7011
+ } else {
7012
+ throw new ValidationError(
7013
+ "Multiple tapscripts not yet implemented - use single script or no scripts",
7014
+ "scripts"
7015
+ );
7016
+ }
7017
+ }
7018
+ const { tweakedKey, parity } = computeTweakedKey(internalKey, merkleRoot);
7019
+ return {
7020
+ tweakedKey: `0x${(0, import_utils16.bytesToHex)(tweakedKey)}`,
7021
+ internalKey: `0x${(0, import_utils16.bytesToHex)(internalKey)}`,
7022
+ merkleRoot: merkleRoot ? `0x${(0, import_utils16.bytesToHex)(merkleRoot)}` : void 0,
7023
+ parity
7024
+ };
7025
+ }
7026
+ function bech32Polymod(values) {
7027
+ let chk = 1;
7028
+ for (const value of values) {
7029
+ const top = chk >> 25;
7030
+ chk = (chk & 33554431) << 5 ^ value;
7031
+ for (let i = 0; i < 5; i++) {
7032
+ if (top >> i & 1) {
7033
+ chk ^= BECH32_GENERATOR[i];
7034
+ }
7035
+ }
7036
+ }
7037
+ return chk;
7038
+ }
7039
+ function bech32HrpExpand(hrp) {
7040
+ const result = [];
7041
+ for (let i = 0; i < hrp.length; i++) {
7042
+ result.push(hrp.charCodeAt(i) >> 5);
7043
+ }
7044
+ result.push(0);
7045
+ for (let i = 0; i < hrp.length; i++) {
7046
+ result.push(hrp.charCodeAt(i) & 31);
7047
+ }
7048
+ return result;
7049
+ }
7050
+ function bech32VerifyChecksum(hrp, data) {
7051
+ return bech32Polymod([...bech32HrpExpand(hrp), ...data]) === 734539939;
7052
+ }
7053
+ function bech32CreateChecksum(hrp, data) {
7054
+ const values = [...bech32HrpExpand(hrp), ...data, 0, 0, 0, 0, 0, 0];
7055
+ const polymod = bech32Polymod(values) ^ 734539939;
7056
+ const checksum = [];
7057
+ for (let i = 0; i < 6; i++) {
7058
+ checksum.push(polymod >> 5 * (5 - i) & 31);
7059
+ }
7060
+ return checksum;
7061
+ }
7062
+ function convertBits(data, fromBits, toBits, pad) {
7063
+ let acc = 0;
7064
+ let bits = 0;
7065
+ const result = [];
7066
+ const maxv = (1 << toBits) - 1;
7067
+ for (const value of data) {
7068
+ if (value < 0 || value >> fromBits !== 0) {
7069
+ return null;
7070
+ }
7071
+ acc = acc << fromBits | value;
7072
+ bits += fromBits;
7073
+ while (bits >= toBits) {
7074
+ bits -= toBits;
7075
+ result.push(acc >> bits & maxv);
7076
+ }
7077
+ }
7078
+ if (pad) {
7079
+ if (bits > 0) {
7080
+ result.push(acc << toBits - bits & maxv);
7081
+ }
7082
+ } else if (bits >= fromBits || acc << toBits - bits & maxv) {
7083
+ return null;
7084
+ }
7085
+ return result;
7086
+ }
7087
+ function taprootAddress(tweakedKey, network = "mainnet") {
7088
+ if (tweakedKey.length !== 32) {
7089
+ throw new ValidationError("tweakedKey must be 32 bytes", "tweakedKey");
7090
+ }
7091
+ const hrp = network === "mainnet" ? "bc" : network === "testnet" ? "tb" : "bcrt";
7092
+ const version = 1;
7093
+ const words = convertBits(tweakedKey, 8, 5, true);
7094
+ if (!words) {
7095
+ throw new ValidationError("Failed to convert tweaked key to bech32 format", "tweakedKey");
7096
+ }
7097
+ const data = [version, ...words];
7098
+ const checksum = bech32CreateChecksum(hrp, data);
7099
+ const combined = [...data, ...checksum];
7100
+ let result = hrp + "1";
7101
+ for (const value of combined) {
7102
+ result += BECH32_CHARSET[value];
7103
+ }
7104
+ return result;
7105
+ }
7106
+ function decodeTaprootAddress(address) {
7107
+ if (typeof address !== "string" || address.length < 14 || address.length > 90) {
7108
+ throw new ValidationError("Invalid Taproot address format", "address");
7109
+ }
7110
+ const addressLower = address.toLowerCase();
7111
+ const sepIndex = addressLower.lastIndexOf("1");
7112
+ if (sepIndex === -1 || sepIndex + 7 > addressLower.length) {
7113
+ throw new ValidationError("Invalid Taproot address: no separator", "address");
7114
+ }
7115
+ const hrp = addressLower.slice(0, sepIndex);
7116
+ const dataStr = addressLower.slice(sepIndex + 1);
7117
+ let network;
7118
+ if (hrp === "bc") {
7119
+ network = "mainnet";
7120
+ } else if (hrp === "tb") {
7121
+ network = "testnet";
7122
+ } else if (hrp === "bcrt") {
7123
+ network = "regtest";
7124
+ } else {
7125
+ throw new ValidationError(`Unknown HRP: ${hrp}`, "address");
7126
+ }
7127
+ const data = [];
7128
+ for (const char of dataStr) {
7129
+ const index = BECH32_CHARSET.indexOf(char);
7130
+ if (index === -1) {
7131
+ throw new ValidationError(`Invalid bech32 character: ${char}`, "address");
7132
+ }
7133
+ data.push(index);
7134
+ }
7135
+ if (!bech32VerifyChecksum(hrp, data)) {
7136
+ throw new ValidationError("Invalid Taproot address checksum", "address");
7137
+ }
7138
+ const version = data[0];
7139
+ if (version !== 1) {
7140
+ throw new ValidationError(`Expected witness version 1 (Taproot), got ${version}`, "address");
7141
+ }
7142
+ const program = convertBits(new Uint8Array(data.slice(1, -6)), 5, 8, false);
7143
+ if (!program || program.length !== 32) {
7144
+ throw new ValidationError("Invalid Taproot program length", "address");
7145
+ }
7146
+ return {
7147
+ tweakedKey: new Uint8Array(program),
7148
+ network
7149
+ };
7150
+ }
7151
+ function createKeySpendOnlyOutput(privateKey, network = "mainnet") {
7152
+ if (!isValidPrivateKey(privateKey)) {
7153
+ throw new ValidationError("privateKey must be a valid 32-byte hex string", "privateKey");
7154
+ }
7155
+ const privKeyBytes = (0, import_utils16.hexToBytes)(privateKey.slice(2));
7156
+ const internalKey = getXOnlyPublicKey(privKeyBytes);
7157
+ const output = createTaprootOutput(internalKey);
7158
+ const tweakedKeyBytes = (0, import_utils16.hexToBytes)(output.tweakedKey.slice(2));
7159
+ const address = taprootAddress(tweakedKeyBytes, network);
7160
+ return {
7161
+ output,
7162
+ address,
7163
+ internalPrivateKey: privateKey
7164
+ };
7165
+ }
7166
+ function isValidTaprootAddress(address) {
7167
+ try {
7168
+ decodeTaprootAddress(address);
7169
+ return true;
7170
+ } catch {
7171
+ return false;
7172
+ }
7173
+ }
7174
+ function schnorrSignHex(message, privateKey, auxRand) {
7175
+ if (!isValidHex(message)) {
7176
+ throw new ValidationError("message must be a hex string", "message");
7177
+ }
7178
+ if (!isValidPrivateKey(privateKey)) {
7179
+ throw new ValidationError("privateKey must be a valid 32-byte hex string", "privateKey");
7180
+ }
7181
+ if (auxRand && !isValidHex(auxRand)) {
7182
+ throw new ValidationError("auxRand must be a hex string", "auxRand");
7183
+ }
7184
+ const messageBytes = (0, import_utils16.hexToBytes)(message.slice(2));
7185
+ const privateKeyBytes = (0, import_utils16.hexToBytes)(privateKey.slice(2));
7186
+ const auxRandBytes = auxRand ? (0, import_utils16.hexToBytes)(auxRand.slice(2)) : void 0;
7187
+ const signature = schnorrSign(messageBytes, privateKeyBytes, auxRandBytes);
7188
+ return `0x${(0, import_utils16.bytesToHex)(signature)}`;
7189
+ }
7190
+ function schnorrVerifyHex(signature, message, publicKey) {
7191
+ if (!isValidHex(signature)) {
7192
+ throw new ValidationError("signature must be a hex string", "signature");
7193
+ }
7194
+ if (!isValidHex(message)) {
7195
+ throw new ValidationError("message must be a hex string", "message");
7196
+ }
7197
+ if (!isValidHex(publicKey)) {
7198
+ throw new ValidationError("publicKey must be a hex string", "publicKey");
7199
+ }
7200
+ const signatureBytes = (0, import_utils16.hexToBytes)(signature.slice(2));
7201
+ const messageBytes = (0, import_utils16.hexToBytes)(message.slice(2));
7202
+ const publicKeyBytes = (0, import_utils16.hexToBytes)(publicKey.slice(2));
7203
+ return schnorrVerify(signatureBytes, messageBytes, publicKeyBytes);
7204
+ }
7205
+
7206
+ // src/bitcoin/silent-payments.ts
7207
+ var import_secp256k15 = require("@noble/curves/secp256k1");
7208
+ var import_sha25612 = require("@noble/hashes/sha256");
7209
+ var import_utils17 = require("@noble/hashes/utils");
6385
7210
 
6386
7211
  // src/payment/payment.ts
6387
7212
  var import_types15 = require("@sip-protocol/types");
6388
- var import_sha2569 = require("@noble/hashes/sha256");
6389
- var import_utils12 = require("@noble/hashes/utils");
7213
+ var import_sha25613 = require("@noble/hashes/sha256");
7214
+ var import_utils18 = require("@noble/hashes/utils");
6390
7215
  var import_chacha2 = require("@noble/ciphers/chacha.js");
6391
7216
  var import_hkdf2 = require("@noble/hashes/hkdf");
6392
7217
 
@@ -6882,8 +7707,8 @@ async function createShieldedPayment(params, options) {
6882
7707
  let viewingKeyHash;
6883
7708
  if (viewingKey) {
6884
7709
  const keyHex = viewingKey.startsWith("0x") ? viewingKey.slice(2) : viewingKey;
6885
- const keyBytes = (0, import_utils12.hexToBytes)(keyHex);
6886
- viewingKeyHash = `0x${(0, import_utils12.bytesToHex)((0, import_sha2569.sha256)(keyBytes))}`;
7710
+ const keyBytes = (0, import_utils18.hexToBytes)(keyHex);
7711
+ viewingKeyHash = `0x${(0, import_utils18.bytesToHex)((0, import_sha25613.sha256)(keyBytes))}`;
6887
7712
  }
6888
7713
  const privacyConfig = getPrivacyConfig(
6889
7714
  privacy,
@@ -6923,7 +7748,7 @@ async function createShieldedPayment(params, options) {
6923
7748
  if (privacy !== import_types15.PrivacyLevel.TRANSPARENT && proofProvider?.isReady) {
6924
7749
  const hexToUint8 = (hex) => {
6925
7750
  const cleanHex = hex.startsWith("0x") ? hex.slice(2) : hex;
6926
- return (0, import_utils12.hexToBytes)(cleanHex);
7751
+ return (0, import_utils18.hexToBytes)(cleanHex);
6927
7752
  };
6928
7753
  const fundingResult = await proofProvider.generateFundingProof({
6929
7754
  balance: amount,
@@ -6950,17 +7775,17 @@ async function createShieldedPayment(params, options) {
6950
7775
  }
6951
7776
  function encryptMemo(memo, viewingKey) {
6952
7777
  const keyHex = viewingKey.startsWith("0x") ? viewingKey.slice(2) : viewingKey;
6953
- const keyBytes = (0, import_utils12.hexToBytes)(keyHex);
6954
- const encKey = (0, import_hkdf2.hkdf)(import_sha2569.sha256, keyBytes, new Uint8Array(0), new Uint8Array(0), 32);
7778
+ const keyBytes = (0, import_utils18.hexToBytes)(keyHex);
7779
+ const encKey = (0, import_hkdf2.hkdf)(import_sha25613.sha256, keyBytes, new Uint8Array(0), new Uint8Array(0), 32);
6955
7780
  try {
6956
- const nonce = (0, import_utils12.randomBytes)(24);
7781
+ const nonce = (0, import_utils18.randomBytes)(24);
6957
7782
  const cipher = (0, import_chacha2.xchacha20poly1305)(encKey, nonce);
6958
7783
  const plaintext = new TextEncoder().encode(memo);
6959
7784
  const ciphertext = cipher.encrypt(plaintext);
6960
7785
  const result = new Uint8Array(nonce.length + ciphertext.length);
6961
7786
  result.set(nonce);
6962
7787
  result.set(ciphertext, nonce.length);
6963
- return `0x${(0, import_utils12.bytesToHex)(result)}`;
7788
+ return `0x${(0, import_utils18.bytesToHex)(result)}`;
6964
7789
  } finally {
6965
7790
  secureWipe(keyBytes);
6966
7791
  secureWipe(encKey);
@@ -6968,11 +7793,11 @@ function encryptMemo(memo, viewingKey) {
6968
7793
  }
6969
7794
  function decryptMemo(encryptedMemo, viewingKey) {
6970
7795
  const keyHex = viewingKey.startsWith("0x") ? viewingKey.slice(2) : viewingKey;
6971
- const keyBytes = (0, import_utils12.hexToBytes)(keyHex);
6972
- const encKey = (0, import_hkdf2.hkdf)(import_sha2569.sha256, keyBytes, new Uint8Array(0), new Uint8Array(0), 32);
7796
+ const keyBytes = (0, import_utils18.hexToBytes)(keyHex);
7797
+ const encKey = (0, import_hkdf2.hkdf)(import_sha25613.sha256, keyBytes, new Uint8Array(0), new Uint8Array(0), 32);
6973
7798
  try {
6974
7799
  const dataHex = encryptedMemo.startsWith("0x") ? encryptedMemo.slice(2) : encryptedMemo;
6975
- const data = (0, import_utils12.hexToBytes)(dataHex);
7800
+ const data = (0, import_utils18.hexToBytes)(dataHex);
6976
7801
  const nonce = data.slice(0, 24);
6977
7802
  const ciphertext = data.slice(24);
6978
7803
  const cipher = (0, import_chacha2.xchacha20poly1305)(encKey, nonce);
@@ -7020,9 +7845,9 @@ function getPaymentSummary(payment) {
7020
7845
 
7021
7846
  // src/treasury/treasury.ts
7022
7847
  var import_types16 = require("@sip-protocol/types");
7023
- var import_secp256k13 = require("@noble/curves/secp256k1");
7024
- var import_sha25610 = require("@noble/hashes/sha256");
7025
- var import_utils13 = require("@noble/hashes/utils");
7848
+ var import_secp256k16 = require("@noble/curves/secp256k1");
7849
+ var import_sha25614 = require("@noble/hashes/sha256");
7850
+ var import_utils19 = require("@noble/hashes/utils");
7026
7851
  var DEFAULT_PROPOSAL_TTL = 7 * 24 * 60 * 60;
7027
7852
  var Treasury = class _Treasury {
7028
7853
  config;
@@ -7513,12 +8338,12 @@ var Treasury = class _Treasury {
7513
8338
  }
7514
8339
  };
7515
8340
  function generateTreasuryId() {
7516
- const bytes = (0, import_utils13.randomBytes)(16);
7517
- return `treasury_${(0, import_utils13.bytesToHex)(bytes)}`;
8341
+ const bytes = (0, import_utils19.randomBytes)(16);
8342
+ return `treasury_${(0, import_utils19.bytesToHex)(bytes)}`;
7518
8343
  }
7519
8344
  function generateProposalId() {
7520
- const bytes = (0, import_utils13.randomBytes)(16);
7521
- return `prop_${(0, import_utils13.bytesToHex)(bytes)}`;
8345
+ const bytes = (0, import_utils19.randomBytes)(16);
8346
+ return `prop_${(0, import_utils19.bytesToHex)(bytes)}`;
7522
8347
  }
7523
8348
  function computeProposalHash(proposal) {
7524
8349
  const data = JSON.stringify({
@@ -7530,13 +8355,13 @@ function computeProposalHash(proposal) {
7530
8355
  createdAt: proposal.createdAt,
7531
8356
  expiresAt: proposal.expiresAt
7532
8357
  }, (_, value) => typeof value === "bigint" ? value.toString() : value);
7533
- return (0, import_sha25610.sha256)(new TextEncoder().encode(data));
8358
+ return (0, import_sha25614.sha256)(new TextEncoder().encode(data));
7534
8359
  }
7535
8360
  function signMessage(messageHash, privateKey) {
7536
8361
  const keyHex = privateKey.startsWith("0x") ? privateKey.slice(2) : privateKey;
7537
- const keyBytes = (0, import_utils13.hexToBytes)(keyHex);
8362
+ const keyBytes = (0, import_utils19.hexToBytes)(keyHex);
7538
8363
  try {
7539
- const signature = import_secp256k13.secp256k1.sign(messageHash, keyBytes);
8364
+ const signature = import_secp256k16.secp256k1.sign(messageHash, keyBytes);
7540
8365
  return `0x${signature.toCompactHex()}`;
7541
8366
  } finally {
7542
8367
  secureWipe(keyBytes);
@@ -7546,9 +8371,9 @@ function verifySignature(messageHash, signature, publicKey) {
7546
8371
  const sigHex = signature.startsWith("0x") ? signature.slice(2) : signature;
7547
8372
  const pubKeyHex = publicKey.startsWith("0x") ? publicKey.slice(2) : publicKey;
7548
8373
  try {
7549
- const sigBytes = (0, import_utils13.hexToBytes)(sigHex);
7550
- const pubKeyBytes = (0, import_utils13.hexToBytes)(pubKeyHex);
7551
- return import_secp256k13.secp256k1.verify(sigBytes, messageHash, pubKeyBytes);
8374
+ const sigBytes = (0, import_utils19.hexToBytes)(sigHex);
8375
+ const pubKeyBytes = (0, import_utils19.hexToBytes)(pubKeyHex);
8376
+ return import_secp256k16.secp256k1.verify(sigBytes, messageHash, pubKeyBytes);
7552
8377
  } catch {
7553
8378
  return false;
7554
8379
  }
@@ -7706,7 +8531,7 @@ function validateBatchProposalParams(params, config) {
7706
8531
 
7707
8532
  // src/compliance/compliance-manager.ts
7708
8533
  var import_types17 = require("@sip-protocol/types");
7709
- var import_utils14 = require("@noble/hashes/utils");
8534
+ var import_utils20 = require("@noble/hashes/utils");
7710
8535
  var DEFAULTS2 = {
7711
8536
  riskThreshold: 70,
7712
8537
  highValueThreshold: 10000000000n,
@@ -8380,7 +9205,7 @@ var ComplianceManager = class _ComplianceManager {
8380
9205
  }
8381
9206
  };
8382
9207
  function generateId(prefix) {
8383
- return `${prefix}_${(0, import_utils14.bytesToHex)((0, import_utils14.randomBytes)(12))}`;
9208
+ return `${prefix}_${(0, import_utils20.bytesToHex)((0, import_utils20.randomBytes)(12))}`;
8384
9209
  }
8385
9210
  function validateRegisterAuditorParams(params) {
8386
9211
  if (!params.organization?.trim()) {
@@ -10624,6 +11449,30 @@ function createMockEthereumProvider(config = {}) {
10624
11449
  return provider;
10625
11450
  }
10626
11451
 
11452
+ // src/wallet/cosmos/adapter.ts
11453
+ var import_types29 = require("@sip-protocol/types");
11454
+
11455
+ // src/wallet/cosmos/mock.ts
11456
+ var import_types31 = require("@sip-protocol/types");
11457
+
11458
+ // src/wallet/bitcoin/adapter.ts
11459
+ var import_types34 = require("@sip-protocol/types");
11460
+
11461
+ // src/wallet/bitcoin/mock.ts
11462
+ var import_types36 = require("@sip-protocol/types");
11463
+
11464
+ // src/wallet/aptos/adapter.ts
11465
+ var import_types39 = require("@sip-protocol/types");
11466
+
11467
+ // src/wallet/aptos/mock.ts
11468
+ var import_types41 = require("@sip-protocol/types");
11469
+
11470
+ // src/wallet/sui/adapter.ts
11471
+ var import_types43 = require("@sip-protocol/types");
11472
+
11473
+ // src/wallet/sui/mock.ts
11474
+ var import_types45 = require("@sip-protocol/types");
11475
+
10627
11476
  // src/wallet/hardware/types.ts
10628
11477
  var DerivationPath = {
10629
11478
  /** Ethereum: m/44'/60'/0'/0/index */
@@ -10699,7 +11548,7 @@ function getAvailableTransports() {
10699
11548
  }
10700
11549
 
10701
11550
  // src/wallet/hardware/ledger.ts
10702
- var import_types29 = require("@sip-protocol/types");
11551
+ var import_types47 = require("@sip-protocol/types");
10703
11552
  var LedgerWalletAdapter = class extends BaseWalletAdapter {
10704
11553
  chain;
10705
11554
  name = "ledger";
@@ -10852,7 +11701,7 @@ var LedgerWalletAdapter = class extends BaseWalletAdapter {
10852
11701
  async getBalance() {
10853
11702
  throw new WalletError(
10854
11703
  "Hardware wallets do not track balances. Use an RPC provider.",
10855
- import_types29.WalletErrorCode.UNSUPPORTED_OPERATION
11704
+ import_types47.WalletErrorCode.UNSUPPORTED_OPERATION
10856
11705
  );
10857
11706
  }
10858
11707
  /**
@@ -10863,7 +11712,7 @@ var LedgerWalletAdapter = class extends BaseWalletAdapter {
10863
11712
  async getTokenBalance(_asset) {
10864
11713
  throw new WalletError(
10865
11714
  "Hardware wallets do not track balances. Use an RPC provider.",
10866
- import_types29.WalletErrorCode.UNSUPPORTED_OPERATION
11715
+ import_types47.WalletErrorCode.UNSUPPORTED_OPERATION
10867
11716
  );
10868
11717
  }
10869
11718
  // ─── Account Management ─────────────────────────────────────────────────────
@@ -11151,7 +12000,7 @@ function createLedgerAdapter(config) {
11151
12000
  }
11152
12001
 
11153
12002
  // src/wallet/hardware/trezor.ts
11154
- var import_types31 = require("@sip-protocol/types");
12003
+ var import_types49 = require("@sip-protocol/types");
11155
12004
  var TrezorWalletAdapter = class extends BaseWalletAdapter {
11156
12005
  chain;
11157
12006
  name = "trezor";
@@ -11297,7 +12146,7 @@ var TrezorWalletAdapter = class extends BaseWalletAdapter {
11297
12146
  async getBalance() {
11298
12147
  throw new WalletError(
11299
12148
  "Hardware wallets do not track balances. Use an RPC provider.",
11300
- import_types31.WalletErrorCode.UNSUPPORTED_OPERATION
12149
+ import_types49.WalletErrorCode.UNSUPPORTED_OPERATION
11301
12150
  );
11302
12151
  }
11303
12152
  /**
@@ -11308,7 +12157,7 @@ var TrezorWalletAdapter = class extends BaseWalletAdapter {
11308
12157
  async getTokenBalance(_asset) {
11309
12158
  throw new WalletError(
11310
12159
  "Hardware wallets do not track balances. Use an RPC provider.",
11311
- import_types31.WalletErrorCode.UNSUPPORTED_OPERATION
12160
+ import_types49.WalletErrorCode.UNSUPPORTED_OPERATION
11312
12161
  );
11313
12162
  }
11314
12163
  // ─── Account Management ─────────────────────────────────────────────────────
@@ -11589,8 +12438,8 @@ function createTrezorAdapter(config) {
11589
12438
  }
11590
12439
 
11591
12440
  // src/wallet/hardware/mock.ts
11592
- var import_types33 = require("@sip-protocol/types");
11593
- var import_utils15 = require("@noble/hashes/utils");
12441
+ var import_types51 = require("@sip-protocol/types");
12442
+ var import_utils21 = require("@noble/hashes/utils");
11594
12443
  var MockLedgerAdapter = class extends BaseWalletAdapter {
11595
12444
  chain;
11596
12445
  name = "mock-ledger";
@@ -11737,7 +12586,7 @@ var MockLedgerAdapter = class extends BaseWalletAdapter {
11737
12586
  async getBalance() {
11738
12587
  throw new WalletError(
11739
12588
  "Hardware wallets do not track balances",
11740
- import_types33.WalletErrorCode.UNSUPPORTED_OPERATION
12589
+ import_types51.WalletErrorCode.UNSUPPORTED_OPERATION
11741
12590
  );
11742
12591
  }
11743
12592
  /**
@@ -11746,7 +12595,7 @@ var MockLedgerAdapter = class extends BaseWalletAdapter {
11746
12595
  async getTokenBalance(_asset) {
11747
12596
  throw new WalletError(
11748
12597
  "Hardware wallets do not track balances",
11749
- import_types33.WalletErrorCode.UNSUPPORTED_OPERATION
12598
+ import_types51.WalletErrorCode.UNSUPPORTED_OPERATION
11750
12599
  );
11751
12600
  }
11752
12601
  /**
@@ -11835,15 +12684,15 @@ var MockLedgerAdapter = class extends BaseWalletAdapter {
11835
12684
  }
11836
12685
  }
11837
12686
  generateMockAddress(index) {
11838
- const bytes = (0, import_utils15.randomBytes)(20);
12687
+ const bytes = (0, import_utils21.randomBytes)(20);
11839
12688
  bytes[0] = index;
11840
- return `0x${(0, import_utils15.bytesToHex)(bytes)}`;
12689
+ return `0x${(0, import_utils21.bytesToHex)(bytes)}`;
11841
12690
  }
11842
12691
  generateMockPublicKey(index) {
11843
- const bytes = (0, import_utils15.randomBytes)(33);
12692
+ const bytes = (0, import_utils21.randomBytes)(33);
11844
12693
  bytes[0] = 2;
11845
12694
  bytes[1] = index;
11846
- return `0x${(0, import_utils15.bytesToHex)(bytes)}`;
12695
+ return `0x${(0, import_utils21.bytesToHex)(bytes)}`;
11847
12696
  }
11848
12697
  generateMockSignature(data) {
11849
12698
  const sig = new Uint8Array(65);
@@ -11852,7 +12701,7 @@ var MockLedgerAdapter = class extends BaseWalletAdapter {
11852
12701
  sig[32 + i] = (data[i % data.length] ?? 0) ^ i * 11;
11853
12702
  }
11854
12703
  sig[64] = 27;
11855
- return `0x${(0, import_utils15.bytesToHex)(sig)}`;
12704
+ return `0x${(0, import_utils21.bytesToHex)(sig)}`;
11856
12705
  }
11857
12706
  delay(ms) {
11858
12707
  return new Promise((resolve) => setTimeout(resolve, ms));
@@ -11976,13 +12825,13 @@ var MockTrezorAdapter = class extends BaseWalletAdapter {
11976
12825
  async getBalance() {
11977
12826
  throw new WalletError(
11978
12827
  "Hardware wallets do not track balances",
11979
- import_types33.WalletErrorCode.UNSUPPORTED_OPERATION
12828
+ import_types51.WalletErrorCode.UNSUPPORTED_OPERATION
11980
12829
  );
11981
12830
  }
11982
12831
  async getTokenBalance(_asset) {
11983
12832
  throw new WalletError(
11984
12833
  "Hardware wallets do not track balances",
11985
- import_types33.WalletErrorCode.UNSUPPORTED_OPERATION
12834
+ import_types51.WalletErrorCode.UNSUPPORTED_OPERATION
11986
12835
  );
11987
12836
  }
11988
12837
  async getAccounts(startIndex = 0, count = 5) {
@@ -12041,15 +12890,15 @@ var MockTrezorAdapter = class extends BaseWalletAdapter {
12041
12890
  }
12042
12891
  }
12043
12892
  generateMockAddress(index) {
12044
- const bytes = (0, import_utils15.randomBytes)(20);
12893
+ const bytes = (0, import_utils21.randomBytes)(20);
12045
12894
  bytes[0] = index + 100;
12046
- return `0x${(0, import_utils15.bytesToHex)(bytes)}`;
12895
+ return `0x${(0, import_utils21.bytesToHex)(bytes)}`;
12047
12896
  }
12048
12897
  generateMockPublicKey(index) {
12049
- const bytes = (0, import_utils15.randomBytes)(33);
12898
+ const bytes = (0, import_utils21.randomBytes)(33);
12050
12899
  bytes[0] = 3;
12051
12900
  bytes[1] = index + 100;
12052
- return `0x${(0, import_utils15.bytesToHex)(bytes)}`;
12901
+ return `0x${(0, import_utils21.bytesToHex)(bytes)}`;
12053
12902
  }
12054
12903
  generateMockSignature(data) {
12055
12904
  const sig = new Uint8Array(65);
@@ -12058,7 +12907,7 @@ var MockTrezorAdapter = class extends BaseWalletAdapter {
12058
12907
  sig[32 + i] = (data[i % data.length] ?? 0) ^ i * 17;
12059
12908
  }
12060
12909
  sig[64] = 28;
12061
- return `0x${(0, import_utils15.bytesToHex)(sig)}`;
12910
+ return `0x${(0, import_utils21.bytesToHex)(sig)}`;
12062
12911
  }
12063
12912
  delay(ms) {
12064
12913
  return new Promise((resolve) => setTimeout(resolve, ms));
@@ -12072,13 +12921,16 @@ function createMockTrezorAdapter(config) {
12072
12921
  }
12073
12922
 
12074
12923
  // src/wallet/index.ts
12075
- var import_types36 = require("@sip-protocol/types");
12924
+ var import_types54 = require("@sip-protocol/types");
12076
12925
  // Annotate the CommonJS export names for ESM import in node:
12077
12926
  0 && (module.exports = {
12078
12927
  ATTESTATION_VERSION,
12928
+ AptosStealthService,
12079
12929
  BaseWalletAdapter,
12080
12930
  CHAIN_NUMERIC_IDS,
12931
+ COSMOS_CHAIN_PREFIXES,
12081
12932
  ComplianceManager,
12933
+ CosmosStealthService,
12082
12934
  CryptoError,
12083
12935
  DEFAULT_THRESHOLD,
12084
12936
  DEFAULT_TOTAL_ORACLES,
@@ -12143,17 +12995,21 @@ var import_types36 = require("@sip-protocol/types");
12143
12995
  addBlindings,
12144
12996
  addCommitments,
12145
12997
  addOracle,
12998
+ aptosAddressToAuthKey,
12146
12999
  attachProofs,
12147
13000
  base58ToHex,
12148
13001
  browserBytesToHex,
12149
13002
  browserHexToBytes,
13003
+ checkAptosStealthAddress,
12150
13004
  checkEd25519StealthAddress,
12151
13005
  checkStealthAddress,
12152
13006
  commit,
12153
13007
  commitZero,
12154
13008
  computeAttestationHash,
13009
+ computeTweakedKey,
12155
13010
  createCommitment,
12156
13011
  createEthereumAdapter,
13012
+ createKeySpendOnlyOutput,
12157
13013
  createLedgerAdapter,
12158
13014
  createMockEthereumAdapter,
12159
13015
  createMockEthereumProvider,
@@ -12172,6 +13028,7 @@ var import_types36 = require("@sip-protocol/types");
12172
13028
  createShieldedPayment,
12173
13029
  createSmartRouter,
12174
13030
  createSolanaAdapter,
13031
+ createTaprootOutput,
12175
13032
  createTrezorAdapter,
12176
13033
  createWalletFactory,
12177
13034
  createZcashClient,
@@ -12179,8 +13036,10 @@ var import_types36 = require("@sip-protocol/types");
12179
13036
  createZcashShieldedService,
12180
13037
  createZcashSwapService,
12181
13038
  decodeStealthMetaAddress,
13039
+ decodeTaprootAddress,
12182
13040
  decryptMemo,
12183
13041
  decryptWithViewing,
13042
+ deriveAptosStealthPrivateKey,
12184
13043
  deriveEd25519StealthPrivateKey,
12185
13044
  deriveOracleId,
12186
13045
  deriveStealthPrivateKey,
@@ -12190,6 +13049,7 @@ var import_types36 = require("@sip-protocol/types");
12190
13049
  deserializePayment,
12191
13050
  detectEthereumWallets,
12192
13051
  detectSolanaWallets,
13052
+ ed25519PublicKeyToAptosAddress,
12193
13053
  ed25519PublicKeyToNearAddress,
12194
13054
  ed25519PublicKeyToSolanaAddress,
12195
13055
  encodeStealthMetaAddress,
@@ -12198,7 +13058,10 @@ var import_types36 = require("@sip-protocol/types");
12198
13058
  formatStablecoinAmount,
12199
13059
  fromHex,
12200
13060
  fromStablecoinUnits,
13061
+ generateAptosStealthAddress,
12201
13062
  generateBlinding,
13063
+ generateCosmosStealthAddress,
13064
+ generateCosmosStealthMetaAddress,
12202
13065
  generateEd25519StealthAddress,
12203
13066
  generateEd25519StealthMetaAddress,
12204
13067
  generateIntentId,
@@ -12228,6 +13091,7 @@ var import_types36 = require("@sip-protocol/types");
12228
13091
  getStablecoinsForChain,
12229
13092
  getSupportedStablecoins,
12230
13093
  getTimeRemaining,
13094
+ getXOnlyPublicKey,
12231
13095
  hasEnoughOracles,
12232
13096
  hasErrorCode,
12233
13097
  hasRequiredProofs,
@@ -12244,8 +13108,10 @@ var import_types36 = require("@sip-protocol/types");
12244
13108
  isStablecoin,
12245
13109
  isStablecoinOnChain,
12246
13110
  isValidAmount,
13111
+ isValidAptosAddress,
12247
13112
  isValidChainId,
12248
13113
  isValidCompressedPublicKey,
13114
+ isValidCosmosAddress,
12249
13115
  isValidEd25519PublicKey,
12250
13116
  isValidHex,
12251
13117
  isValidHexLength,
@@ -12257,12 +13123,17 @@ var import_types36 = require("@sip-protocol/types");
12257
13123
  isValidSlippage,
12258
13124
  isValidSolanaAddress,
12259
13125
  isValidStealthMetaAddress,
13126
+ isValidTaprootAddress,
12260
13127
  nearAddressToEd25519PublicKey,
12261
13128
  normalizeAddress,
12262
13129
  notConnectedError,
12263
13130
  publicKeyToEthAddress,
12264
13131
  registerWallet,
12265
13132
  removeOracle,
13133
+ schnorrSign,
13134
+ schnorrSignHex,
13135
+ schnorrVerify,
13136
+ schnorrVerifyHex,
12266
13137
  secureWipe,
12267
13138
  secureWipeAll,
12268
13139
  serializeAttestationMessage,
@@ -12271,6 +13142,7 @@ var import_types36 = require("@sip-protocol/types");
12271
13142
  signAttestationMessage,
12272
13143
  solanaAddressToEd25519PublicKey,
12273
13144
  solanaPublicKeyToHex,
13145
+ stealthKeyToCosmosAddress,
12274
13146
  subtractBlindings,
12275
13147
  subtractCommitments,
12276
13148
  supportsSharedArrayBuffer,
@@ -12279,6 +13151,7 @@ var import_types36 = require("@sip-protocol/types");
12279
13151
  supportsWebHID,
12280
13152
  supportsWebUSB,
12281
13153
  supportsWebWorkers,
13154
+ taprootAddress,
12282
13155
  toHex,
12283
13156
  toStablecoinUnits,
12284
13157
  trackIntent,