@sip-protocol/sdk 0.3.1 → 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 (49) hide show
  1. package/dist/browser.d.mts +2 -2
  2. package/dist/browser.d.ts +2 -2
  3. package/dist/browser.js +1028 -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-EU4UEWWG.mjs +12164 -0
  8. package/dist/chunk-FKXPHKYD.mjs +12955 -0
  9. package/dist/chunk-OPQ2GQIO.mjs +13013 -0
  10. package/dist/index-BcWNakUD.d.ts +7990 -0
  11. package/dist/index-BsKY3Hr0.d.mts +7990 -0
  12. package/dist/index.d.mts +2 -2
  13. package/dist/index.d.ts +2 -2
  14. package/dist/index.js +999 -117
  15. package/dist/index.mjs +49 -1
  16. package/package.json +2 -1
  17. package/src/adapters/near-intents.ts +8 -0
  18. package/src/bitcoin/index.ts +51 -0
  19. package/src/bitcoin/silent-payments.ts +865 -0
  20. package/src/bitcoin/taproot.ts +590 -0
  21. package/src/cosmos/ibc-stealth.ts +825 -0
  22. package/src/cosmos/index.ts +83 -0
  23. package/src/cosmos/stealth.ts +487 -0
  24. package/src/index.ts +51 -0
  25. package/src/move/aptos.ts +369 -0
  26. package/src/move/index.ts +35 -0
  27. package/src/move/sui.ts +367 -0
  28. package/src/oracle/types.ts +8 -0
  29. package/src/settlement/backends/direct-chain.ts +8 -0
  30. package/src/settlement/backends/near-intents.ts +11 -0
  31. package/src/stealth.ts +3 -3
  32. package/src/validation.ts +42 -1
  33. package/src/wallet/aptos/adapter.ts +422 -0
  34. package/src/wallet/aptos/index.ts +10 -0
  35. package/src/wallet/aptos/mock.ts +410 -0
  36. package/src/wallet/aptos/types.ts +278 -0
  37. package/src/wallet/bitcoin/adapter.ts +470 -0
  38. package/src/wallet/bitcoin/index.ts +38 -0
  39. package/src/wallet/bitcoin/mock.ts +516 -0
  40. package/src/wallet/bitcoin/types.ts +274 -0
  41. package/src/wallet/cosmos/adapter.ts +484 -0
  42. package/src/wallet/cosmos/index.ts +63 -0
  43. package/src/wallet/cosmos/mock.ts +596 -0
  44. package/src/wallet/cosmos/types.ts +462 -0
  45. package/src/wallet/index.ts +127 -0
  46. package/src/wallet/sui/adapter.ts +471 -0
  47. package/src/wallet/sui/index.ts +10 -0
  48. package/src/wallet/sui/mock.ts +439 -0
  49. package/src/wallet/sui/types.ts +245 -0
package/dist/browser.js CHANGED
@@ -31,10 +31,13 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
31
31
  var browser_exports = {};
32
32
  __export(browser_exports, {
33
33
  ATTESTATION_VERSION: () => ATTESTATION_VERSION,
34
+ AptosStealthService: () => AptosStealthService,
34
35
  BaseWalletAdapter: () => BaseWalletAdapter,
35
36
  BrowserNoirProvider: () => BrowserNoirProvider,
36
37
  CHAIN_NUMERIC_IDS: () => CHAIN_NUMERIC_IDS,
38
+ COSMOS_CHAIN_PREFIXES: () => CHAIN_PREFIXES,
37
39
  ComplianceManager: () => ComplianceManager,
40
+ CosmosStealthService: () => CosmosStealthService,
38
41
  CryptoError: () => CryptoError,
39
42
  DEFAULT_THRESHOLD: () => DEFAULT_THRESHOLD,
40
43
  DEFAULT_TOTAL_ORACLES: () => DEFAULT_TOTAL_ORACLES,
@@ -47,7 +50,7 @@ __export(browser_exports, {
47
50
  HardwareWalletError: () => HardwareWalletError,
48
51
  IntentBuilder: () => IntentBuilder,
49
52
  IntentError: () => IntentError,
50
- IntentStatus: () => import_types37.IntentStatus,
53
+ IntentStatus: () => import_types55.IntentStatus,
51
54
  LedgerWalletAdapter: () => LedgerWalletAdapter,
52
55
  MockEthereumAdapter: () => MockEthereumAdapter,
53
56
  MockLedgerAdapter: () => MockLedgerAdapter,
@@ -56,28 +59,28 @@ __export(browser_exports, {
56
59
  MockSolver: () => MockSolver,
57
60
  MockTrezorAdapter: () => MockTrezorAdapter,
58
61
  MockWalletAdapter: () => MockWalletAdapter,
59
- NATIVE_TOKENS: () => import_types37.NATIVE_TOKENS,
62
+ NATIVE_TOKENS: () => import_types55.NATIVE_TOKENS,
60
63
  NEARIntentsAdapter: () => NEARIntentsAdapter,
61
64
  NEARIntentsBackend: () => NEARIntentsBackend,
62
65
  NetworkError: () => NetworkError,
63
66
  ORACLE_DOMAIN: () => ORACLE_DOMAIN,
64
67
  OneClickClient: () => OneClickClient,
65
- OneClickDepositMode: () => import_types41.OneClickDepositMode,
66
- OneClickErrorCode: () => import_types41.OneClickErrorCode,
67
- OneClickSwapStatus: () => import_types41.OneClickSwapStatus,
68
- OneClickSwapType: () => import_types41.OneClickSwapType,
68
+ OneClickDepositMode: () => import_types59.OneClickDepositMode,
69
+ OneClickErrorCode: () => import_types59.OneClickErrorCode,
70
+ OneClickSwapStatus: () => import_types59.OneClickSwapStatus,
71
+ OneClickSwapType: () => import_types59.OneClickSwapType,
69
72
  PaymentBuilder: () => PaymentBuilder,
70
- PaymentStatus: () => import_types38.PaymentStatus,
71
- PrivacyLevel: () => import_types37.PrivacyLevel,
73
+ PaymentStatus: () => import_types56.PaymentStatus,
74
+ PrivacyLevel: () => import_types55.PrivacyLevel,
72
75
  ProofError: () => ProofError,
73
76
  ProofGenerationError: () => ProofGenerationError,
74
77
  ProofNotImplementedError: () => ProofNotImplementedError,
75
78
  ProofWorker: () => ProofWorker,
76
- ProposalStatus: () => import_types39.ProposalStatus,
77
- ReportStatus: () => import_types40.ReportStatus,
79
+ ProposalStatus: () => import_types57.ProposalStatus,
80
+ ReportStatus: () => import_types58.ReportStatus,
78
81
  SIP: () => SIP,
79
82
  SIPError: () => SIPError,
80
- SIP_VERSION: () => import_types37.SIP_VERSION,
83
+ SIP_VERSION: () => import_types55.SIP_VERSION,
81
84
  STABLECOIN_ADDRESSES: () => STABLECOIN_ADDRESSES,
82
85
  STABLECOIN_DECIMALS: () => STABLECOIN_DECIMALS,
83
86
  STABLECOIN_INFO: () => STABLECOIN_INFO,
@@ -90,8 +93,8 @@ __export(browser_exports, {
90
93
  TrezorWalletAdapter: () => TrezorWalletAdapter,
91
94
  ValidationError: () => ValidationError,
92
95
  WalletError: () => WalletError,
93
- WalletErrorCode: () => import_types36.WalletErrorCode,
94
- ZcashErrorCode: () => import_types42.ZcashErrorCode,
96
+ WalletErrorCode: () => import_types54.WalletErrorCode,
97
+ ZcashErrorCode: () => import_types60.ZcashErrorCode,
95
98
  ZcashNativeBackend: () => ZcashNativeBackend,
96
99
  ZcashRPCClient: () => ZcashRPCClient,
97
100
  ZcashRPCError: () => ZcashRPCError,
@@ -100,18 +103,22 @@ __export(browser_exports, {
100
103
  addBlindings: () => addBlindings,
101
104
  addCommitments: () => addCommitments,
102
105
  addOracle: () => addOracle,
106
+ aptosAddressToAuthKey: () => aptosAddressToAuthKey,
103
107
  attachProofs: () => attachProofs,
104
108
  base58ToHex: () => base58ToHex,
105
- browserBytesToHex: () => bytesToHex7,
106
- browserHexToBytes: () => hexToBytes5,
109
+ browserBytesToHex: () => bytesToHex11,
110
+ browserHexToBytes: () => hexToBytes9,
111
+ checkAptosStealthAddress: () => checkAptosStealthAddress,
107
112
  checkEd25519StealthAddress: () => checkEd25519StealthAddress,
108
113
  checkMobileWASMCompatibility: () => checkMobileWASMCompatibility,
109
114
  checkStealthAddress: () => checkStealthAddress,
110
115
  commit: () => commit,
111
116
  commitZero: () => commitZero,
112
117
  computeAttestationHash: () => computeAttestationHash,
118
+ computeTweakedKey: () => computeTweakedKey,
113
119
  createCommitment: () => createCommitment,
114
120
  createEthereumAdapter: () => createEthereumAdapter,
121
+ createKeySpendOnlyOutput: () => createKeySpendOnlyOutput,
115
122
  createLedgerAdapter: () => createLedgerAdapter,
116
123
  createMockEthereumAdapter: () => createMockEthereumAdapter,
117
124
  createMockEthereumProvider: () => createMockEthereumProvider,
@@ -130,6 +137,7 @@ __export(browser_exports, {
130
137
  createShieldedPayment: () => createShieldedPayment,
131
138
  createSmartRouter: () => createSmartRouter,
132
139
  createSolanaAdapter: () => createSolanaAdapter,
140
+ createTaprootOutput: () => createTaprootOutput,
133
141
  createTrezorAdapter: () => createTrezorAdapter,
134
142
  createWalletFactory: () => createWalletFactory,
135
143
  createWorkerBlobURL: () => createWorkerBlobURL,
@@ -138,8 +146,10 @@ __export(browser_exports, {
138
146
  createZcashShieldedService: () => createZcashShieldedService,
139
147
  createZcashSwapService: () => createZcashSwapService,
140
148
  decodeStealthMetaAddress: () => decodeStealthMetaAddress,
149
+ decodeTaprootAddress: () => decodeTaprootAddress,
141
150
  decryptMemo: () => decryptMemo,
142
151
  decryptWithViewing: () => decryptWithViewing,
152
+ deriveAptosStealthPrivateKey: () => deriveAptosStealthPrivateKey,
143
153
  deriveEd25519StealthPrivateKey: () => deriveEd25519StealthPrivateKey,
144
154
  deriveOracleId: () => deriveOracleId,
145
155
  deriveStealthPrivateKey: () => deriveStealthPrivateKey,
@@ -151,6 +161,7 @@ __export(browser_exports, {
151
161
  detectMobileBrowser: () => detectMobileBrowser,
152
162
  detectMobilePlatform: () => detectMobilePlatform,
153
163
  detectSolanaWallets: () => detectSolanaWallets,
164
+ ed25519PublicKeyToAptosAddress: () => ed25519PublicKeyToAptosAddress,
154
165
  ed25519PublicKeyToNearAddress: () => ed25519PublicKeyToNearAddress,
155
166
  ed25519PublicKeyToSolanaAddress: () => ed25519PublicKeyToSolanaAddress,
156
167
  encodeStealthMetaAddress: () => encodeStealthMetaAddress,
@@ -159,7 +170,10 @@ __export(browser_exports, {
159
170
  formatStablecoinAmount: () => formatStablecoinAmount,
160
171
  fromHex: () => fromHex,
161
172
  fromStablecoinUnits: () => fromStablecoinUnits,
173
+ generateAptosStealthAddress: () => generateAptosStealthAddress,
162
174
  generateBlinding: () => generateBlinding,
175
+ generateCosmosStealthAddress: () => generateCosmosStealthAddress,
176
+ generateCosmosStealthMetaAddress: () => generateCosmosStealthMetaAddress,
163
177
  generateEd25519StealthAddress: () => generateEd25519StealthAddress,
164
178
  generateEd25519StealthMetaAddress: () => generateEd25519StealthMetaAddress,
165
179
  generateIntentId: () => generateIntentId,
@@ -192,6 +206,7 @@ __export(browser_exports, {
192
206
  getStablecoinsForChain: () => getStablecoinsForChain,
193
207
  getSupportedStablecoins: () => getSupportedStablecoins,
194
208
  getTimeRemaining: () => getTimeRemaining,
209
+ getXOnlyPublicKey: () => getXOnlyPublicKey,
195
210
  hasEnoughOracles: () => hasEnoughOracles,
196
211
  hasErrorCode: () => hasErrorCode,
197
212
  hasRequiredProofs: () => hasRequiredProofs,
@@ -202,15 +217,17 @@ __export(browser_exports, {
202
217
  isExpired: () => isExpired,
203
218
  isNonNegativeAmount: () => isNonNegativeAmount,
204
219
  isPaymentExpired: () => isPaymentExpired,
205
- isPrivate: () => import_types37.isPrivate,
220
+ isPrivate: () => import_types55.isPrivate,
206
221
  isPrivateWalletAdapter: () => isPrivateWalletAdapter,
207
222
  isSIPError: () => isSIPError,
208
223
  isStablecoin: () => isStablecoin,
209
224
  isStablecoinOnChain: () => isStablecoinOnChain,
210
225
  isTablet: () => isTablet,
211
226
  isValidAmount: () => isValidAmount,
227
+ isValidAptosAddress: () => isValidAptosAddress,
212
228
  isValidChainId: () => isValidChainId,
213
229
  isValidCompressedPublicKey: () => isValidCompressedPublicKey,
230
+ isValidCosmosAddress: () => isValidCosmosAddress,
214
231
  isValidEd25519PublicKey: () => isValidEd25519PublicKey,
215
232
  isValidHex: () => isValidHex,
216
233
  isValidHexLength: () => isValidHexLength,
@@ -222,12 +239,17 @@ __export(browser_exports, {
222
239
  isValidSlippage: () => isValidSlippage,
223
240
  isValidSolanaAddress: () => isValidSolanaAddress,
224
241
  isValidStealthMetaAddress: () => isValidStealthMetaAddress,
242
+ isValidTaprootAddress: () => isValidTaprootAddress,
225
243
  nearAddressToEd25519PublicKey: () => nearAddressToEd25519PublicKey,
226
244
  normalizeAddress: () => normalizeAddress,
227
245
  notConnectedError: () => notConnectedError,
228
246
  publicKeyToEthAddress: () => publicKeyToEthAddress,
229
247
  registerWallet: () => registerWallet,
230
248
  removeOracle: () => removeOracle,
249
+ schnorrSign: () => schnorrSign,
250
+ schnorrSignHex: () => schnorrSignHex,
251
+ schnorrVerify: () => schnorrVerify,
252
+ schnorrVerifyHex: () => schnorrVerifyHex,
231
253
  secureWipe: () => secureWipe,
232
254
  secureWipeAll: () => secureWipeAll,
233
255
  serializeAttestationMessage: () => serializeAttestationMessage,
@@ -236,17 +258,19 @@ __export(browser_exports, {
236
258
  signAttestationMessage: () => signAttestationMessage,
237
259
  solanaAddressToEd25519PublicKey: () => solanaAddressToEd25519PublicKey,
238
260
  solanaPublicKeyToHex: () => solanaPublicKeyToHex,
261
+ stealthKeyToCosmosAddress: () => stealthKeyToCosmosAddress,
239
262
  subtractBlindings: () => subtractBlindings,
240
263
  subtractCommitments: () => subtractCommitments,
241
264
  supportsSharedArrayBuffer: () => supportsSharedArrayBuffer,
242
265
  supportsTouch: () => supportsTouch,
243
- supportsViewingKey: () => import_types37.supportsViewingKey,
266
+ supportsViewingKey: () => import_types55.supportsViewingKey,
244
267
  supportsWASMBulkMemory: () => supportsWASMBulkMemory,
245
268
  supportsWASMSimd: () => supportsWASMSimd,
246
269
  supportsWebBluetooth: () => supportsWebBluetooth,
247
270
  supportsWebHID: () => supportsWebHID,
248
271
  supportsWebUSB: () => supportsWebUSB,
249
272
  supportsWebWorkers: () => supportsWebWorkers,
273
+ taprootAddress: () => taprootAddress,
250
274
  toHex: () => toHex,
251
275
  toStablecoinUnits: () => toStablecoinUnits,
252
276
  trackIntent: () => trackIntent,
@@ -487,7 +511,16 @@ var VALID_CHAIN_IDS = [
487
511
  "polygon",
488
512
  "arbitrum",
489
513
  "optimism",
490
- "base"
514
+ "base",
515
+ "bitcoin",
516
+ "aptos",
517
+ "sui",
518
+ "cosmos",
519
+ "osmosis",
520
+ "injective",
521
+ "celestia",
522
+ "sei",
523
+ "dydx"
491
524
  ];
492
525
  function isValidChainId(chain) {
493
526
  return VALID_CHAIN_IDS.includes(chain);
@@ -684,6 +717,12 @@ function isValidNearAddressFormat(address) {
684
717
  if (address.includes("..")) return false;
685
718
  return true;
686
719
  }
720
+ function isValidCosmosAddressFormat(address) {
721
+ if (typeof address !== "string") return false;
722
+ if (address.length < 39 || address.length > 90) return false;
723
+ const bech32Pattern = /^[a-z]+1[qpzry9x8gf2tvdw0s3jn54khce6mua7l]{38,}$/;
724
+ return bech32Pattern.test(address);
725
+ }
687
726
  function getChainAddressType(chain) {
688
727
  switch (chain) {
689
728
  case "ethereum":
@@ -698,6 +737,13 @@ function getChainAddressType(chain) {
698
737
  return "near";
699
738
  case "zcash":
700
739
  return "zcash";
740
+ case "cosmos":
741
+ case "osmosis":
742
+ case "injective":
743
+ case "celestia":
744
+ case "sei":
745
+ case "dydx":
746
+ return "cosmos";
701
747
  default:
702
748
  return "unknown";
703
749
  }
@@ -741,6 +787,15 @@ function validateAddressForChain(address, chain, field = "address") {
741
787
  );
742
788
  }
743
789
  break;
790
+ case "cosmos":
791
+ if (!isValidCosmosAddressFormat(address)) {
792
+ throw new ValidationError(
793
+ `Invalid address format for ${chain}. Expected Cosmos bech32 address, got: ${address.slice(0, 20)}...`,
794
+ field,
795
+ { chain, expectedFormat: "bech32" }
796
+ );
797
+ }
798
+ break;
744
799
  default:
745
800
  break;
746
801
  }
@@ -792,7 +847,7 @@ function secureWipeAll(...buffers) {
792
847
  function generateStealthMetaAddress(chain, label) {
793
848
  if (!isValidChainId(chain)) {
794
849
  throw new ValidationError(
795
- `invalid chain '${chain}', must be one of: solana, ethereum, near, zcash, polygon, arbitrum, optimism, base`,
850
+ `invalid chain '${chain}', must be one of: solana, ethereum, near, zcash, polygon, arbitrum, optimism, base, bitcoin, aptos, sui, cosmos, osmosis, injective, celestia, sei, dydx`,
796
851
  "chain"
797
852
  );
798
853
  }
@@ -1072,7 +1127,7 @@ function toChecksumAddress(address) {
1072
1127
  return checksummed;
1073
1128
  }
1074
1129
  var ED25519_ORDER = 2n ** 252n + 27742317777372353535851937790883648493n;
1075
- var ED25519_CHAINS = ["solana", "near"];
1130
+ var ED25519_CHAINS = ["solana", "near", "aptos", "sui"];
1076
1131
  function isEd25519Chain(chain) {
1077
1132
  return ED25519_CHAINS.includes(chain);
1078
1133
  }
@@ -1157,7 +1212,7 @@ function bigIntToBytesLE(value, length) {
1157
1212
  function generateEd25519StealthMetaAddress(chain, label) {
1158
1213
  if (!isValidChainId(chain)) {
1159
1214
  throw new ValidationError(
1160
- `invalid chain '${chain}', must be one of: solana, ethereum, near, zcash, polygon, arbitrum, optimism, base`,
1215
+ `invalid chain '${chain}', must be one of: solana, ethereum, near, zcash, polygon, arbitrum, optimism, base, bitcoin, aptos, sui, cosmos, osmosis, injective, celestia, sei, dydx`,
1161
1216
  "chain"
1162
1217
  );
1163
1218
  }
@@ -2527,7 +2582,15 @@ var CHAIN_BLOCKCHAIN_MAP = {
2527
2582
  arbitrum: "evm",
2528
2583
  optimism: "evm",
2529
2584
  base: "evm",
2530
- bitcoin: "bitcoin"
2585
+ bitcoin: "bitcoin",
2586
+ aptos: "aptos",
2587
+ sui: "sui",
2588
+ cosmos: "cosmos",
2589
+ osmosis: "cosmos",
2590
+ injective: "cosmos",
2591
+ celestia: "cosmos",
2592
+ sei: "cosmos",
2593
+ dydx: "cosmos"
2531
2594
  };
2532
2595
  var NEARIntentsAdapter = class {
2533
2596
  client;
@@ -3287,6 +3350,448 @@ function createProductionSIP(config) {
3287
3350
  });
3288
3351
  }
3289
3352
 
3353
+ // src/move/aptos.ts
3354
+ var import_sha32 = require("@noble/hashes/sha3");
3355
+ var import_utils7 = require("@noble/hashes/utils");
3356
+ var APTOS_SINGLE_ED25519_SCHEME = 0;
3357
+ function ed25519PublicKeyToAptosAddress(publicKey) {
3358
+ if (!isValidHex(publicKey)) {
3359
+ throw new ValidationError(
3360
+ "publicKey must be a valid hex string with 0x prefix",
3361
+ "publicKey"
3362
+ );
3363
+ }
3364
+ if (!isValidEd25519PublicKey(publicKey)) {
3365
+ throw new ValidationError(
3366
+ "publicKey must be 32 bytes (64 hex characters)",
3367
+ "publicKey"
3368
+ );
3369
+ }
3370
+ const publicKeyBytes = (0, import_utils7.hexToBytes)(publicKey.slice(2));
3371
+ const authKeyInput = new Uint8Array(publicKeyBytes.length + 1);
3372
+ authKeyInput.set(publicKeyBytes, 0);
3373
+ authKeyInput[publicKeyBytes.length] = APTOS_SINGLE_ED25519_SCHEME;
3374
+ const addressHash = (0, import_sha32.sha3_256)(authKeyInput);
3375
+ return `0x${(0, import_utils7.bytesToHex)(addressHash)}`;
3376
+ }
3377
+ function isValidAptosAddress(address) {
3378
+ if (typeof address !== "string" || address.length === 0) {
3379
+ return false;
3380
+ }
3381
+ if (!address.startsWith("0x")) {
3382
+ return false;
3383
+ }
3384
+ const hexPart = address.slice(2);
3385
+ if (hexPart.length !== 64) {
3386
+ return false;
3387
+ }
3388
+ return /^[0-9a-fA-F]{64}$/.test(hexPart);
3389
+ }
3390
+ function aptosAddressToAuthKey(address) {
3391
+ if (!isValidAptosAddress(address)) {
3392
+ throw new ValidationError(
3393
+ "Invalid Aptos address format (must be 0x-prefixed 64 hex characters)",
3394
+ "address"
3395
+ );
3396
+ }
3397
+ return address.toLowerCase();
3398
+ }
3399
+ function generateAptosStealthAddress(recipientMetaAddress) {
3400
+ if (recipientMetaAddress.chain !== "aptos") {
3401
+ throw new ValidationError(
3402
+ `Expected chain 'aptos', got '${recipientMetaAddress.chain}'`,
3403
+ "recipientMetaAddress.chain"
3404
+ );
3405
+ }
3406
+ const { stealthAddress, sharedSecret } = generateEd25519StealthAddress(recipientMetaAddress);
3407
+ const aptosAddress = ed25519PublicKeyToAptosAddress(stealthAddress.address);
3408
+ return {
3409
+ stealthAddress: aptosAddress,
3410
+ stealthPublicKey: stealthAddress.address,
3411
+ ephemeralPublicKey: stealthAddress.ephemeralPublicKey,
3412
+ viewTag: stealthAddress.viewTag,
3413
+ sharedSecret
3414
+ };
3415
+ }
3416
+ function deriveAptosStealthPrivateKey(stealthAddress, spendingPrivateKey, viewingPrivateKey) {
3417
+ const recovery = deriveEd25519StealthPrivateKey(
3418
+ stealthAddress,
3419
+ spendingPrivateKey,
3420
+ viewingPrivateKey
3421
+ );
3422
+ const aptosAddress = ed25519PublicKeyToAptosAddress(recovery.stealthAddress);
3423
+ return {
3424
+ ...recovery,
3425
+ aptosAddress
3426
+ };
3427
+ }
3428
+ function checkAptosStealthAddress(stealthAddress, spendingPrivateKey, viewingPrivateKey) {
3429
+ return checkEd25519StealthAddress(
3430
+ stealthAddress,
3431
+ spendingPrivateKey,
3432
+ viewingPrivateKey
3433
+ );
3434
+ }
3435
+ var AptosStealthService = class {
3436
+ /**
3437
+ * Generate a stealth address for an Aptos recipient
3438
+ *
3439
+ * @param recipientMetaAddress - Recipient's stealth meta-address
3440
+ * @returns Complete stealth address result
3441
+ */
3442
+ generateStealthAddress(recipientMetaAddress) {
3443
+ return generateAptosStealthAddress(recipientMetaAddress);
3444
+ }
3445
+ /**
3446
+ * Convert an ed25519 public key to Aptos address format
3447
+ *
3448
+ * @param publicKey - 32-byte ed25519 public key
3449
+ * @returns Aptos address string
3450
+ */
3451
+ stealthKeyToAptosAddress(publicKey) {
3452
+ return ed25519PublicKeyToAptosAddress(publicKey);
3453
+ }
3454
+ /**
3455
+ * Derive the private key for a stealth address
3456
+ *
3457
+ * @param stealthAddress - Stealth address data
3458
+ * @param spendingPrivateKey - Recipient's spending private key
3459
+ * @param viewingPrivateKey - Recipient's viewing private key
3460
+ * @returns Recovery data with derived private key
3461
+ */
3462
+ deriveStealthPrivateKey(stealthAddress, spendingPrivateKey, viewingPrivateKey) {
3463
+ return deriveAptosStealthPrivateKey(stealthAddress, spendingPrivateKey, viewingPrivateKey);
3464
+ }
3465
+ /**
3466
+ * Check if a stealth address belongs to this recipient
3467
+ *
3468
+ * @param stealthAddress - Stealth address to check
3469
+ * @param spendingPrivateKey - Recipient's spending private key
3470
+ * @param viewingPrivateKey - Recipient's viewing private key
3471
+ * @returns true if the address belongs to this recipient
3472
+ */
3473
+ checkStealthAddress(stealthAddress, spendingPrivateKey, viewingPrivateKey) {
3474
+ return checkAptosStealthAddress(stealthAddress, spendingPrivateKey, viewingPrivateKey);
3475
+ }
3476
+ /**
3477
+ * Validate an Aptos address format
3478
+ *
3479
+ * @param address - Address to validate
3480
+ * @returns true if valid format
3481
+ */
3482
+ isValidAddress(address) {
3483
+ return isValidAptosAddress(address);
3484
+ }
3485
+ };
3486
+
3487
+ // src/move/sui.ts
3488
+ var import_blake2b = require("@noble/hashes/blake2b");
3489
+ var import_utils8 = require("@noble/hashes/utils");
3490
+
3491
+ // src/cosmos/stealth.ts
3492
+ var import_sha2566 = require("@noble/hashes/sha256");
3493
+ var import_ripemd160 = require("@noble/hashes/ripemd160");
3494
+ var import_utils9 = require("@noble/hashes/utils");
3495
+ var import_base = require("@scure/base");
3496
+ var CHAIN_PREFIXES = {
3497
+ cosmos: "cosmos",
3498
+ osmosis: "osmo",
3499
+ injective: "inj",
3500
+ celestia: "celestia",
3501
+ sei: "sei",
3502
+ dydx: "dydx"
3503
+ };
3504
+ var CosmosStealthService = class {
3505
+ /**
3506
+ * Generate a stealth meta-address for a Cosmos chain
3507
+ *
3508
+ * @param chain - Cosmos chain identifier
3509
+ * @param label - Optional human-readable label
3510
+ * @returns Stealth meta-address and private keys
3511
+ * @throws {ValidationError} If chain is invalid
3512
+ *
3513
+ * @example
3514
+ * ```typescript
3515
+ * const service = new CosmosStealthService()
3516
+ * const { metaAddress, spendingPrivateKey, viewingPrivateKey } =
3517
+ * service.generateStealthMetaAddress('cosmos', 'My Cosmos Wallet')
3518
+ * ```
3519
+ */
3520
+ generateStealthMetaAddress(chain, label) {
3521
+ if (!this.isValidCosmosChain(chain)) {
3522
+ throw new ValidationError(
3523
+ `invalid Cosmos chain '${chain}', must be one of: ${Object.keys(CHAIN_PREFIXES).join(", ")}`,
3524
+ "chain"
3525
+ );
3526
+ }
3527
+ const result = generateStealthMetaAddress("ethereum", label);
3528
+ return {
3529
+ ...result,
3530
+ metaAddress: {
3531
+ ...result.metaAddress,
3532
+ chain
3533
+ // Will be updated in types package
3534
+ }
3535
+ };
3536
+ }
3537
+ /**
3538
+ * Generate a one-time stealth address for a Cosmos chain
3539
+ *
3540
+ * @param spendingPubKey - Recipient's spending public key (33-byte compressed)
3541
+ * @param viewingPubKey - Recipient's viewing public key (33-byte compressed)
3542
+ * @param chain - Cosmos chain identifier
3543
+ * @returns Cosmos stealth address with bech32 encoding
3544
+ * @throws {ValidationError} If keys or chain are invalid
3545
+ *
3546
+ * @example
3547
+ * ```typescript
3548
+ * const service = new CosmosStealthService()
3549
+ * const result = service.generateStealthAddress(
3550
+ * spendingKey,
3551
+ * viewingKey,
3552
+ * 'osmosis'
3553
+ * )
3554
+ * console.log(result.stealthAddress) // "osmo1..."
3555
+ * ```
3556
+ */
3557
+ generateStealthAddress(spendingPubKey, viewingPubKey, chain) {
3558
+ if (!this.isValidCosmosChain(chain)) {
3559
+ throw new ValidationError(
3560
+ `invalid Cosmos chain '${chain}', must be one of: ${Object.keys(CHAIN_PREFIXES).join(", ")}`,
3561
+ "chain"
3562
+ );
3563
+ }
3564
+ if (spendingPubKey.length !== 33) {
3565
+ throw new ValidationError(
3566
+ "spendingPubKey must be 33 bytes (compressed secp256k1)",
3567
+ "spendingPubKey"
3568
+ );
3569
+ }
3570
+ if (viewingPubKey.length !== 33) {
3571
+ throw new ValidationError(
3572
+ "viewingPubKey must be 33 bytes (compressed secp256k1)",
3573
+ "viewingPubKey"
3574
+ );
3575
+ }
3576
+ const metaAddress = {
3577
+ spendingKey: `0x${(0, import_utils9.bytesToHex)(spendingPubKey)}`,
3578
+ viewingKey: `0x${(0, import_utils9.bytesToHex)(viewingPubKey)}`,
3579
+ chain: "ethereum"
3580
+ // Use ethereum for secp256k1 generation
3581
+ };
3582
+ const { stealthAddress, sharedSecret } = generateStealthAddress(metaAddress);
3583
+ const cosmosAddress = this.stealthKeyToCosmosAddress(
3584
+ (0, import_utils9.hexToBytes)(stealthAddress.address.slice(2)),
3585
+ CHAIN_PREFIXES[chain]
3586
+ );
3587
+ return {
3588
+ stealthAddress: cosmosAddress,
3589
+ stealthPublicKey: stealthAddress.address,
3590
+ ephemeralPublicKey: stealthAddress.ephemeralPublicKey,
3591
+ viewTag: stealthAddress.viewTag,
3592
+ viewKeyHash: sharedSecret
3593
+ };
3594
+ }
3595
+ /**
3596
+ * Generate stealth address from StealthMetaAddress
3597
+ *
3598
+ * Convenience method that accepts a StealthMetaAddress directly.
3599
+ *
3600
+ * @param recipientMetaAddress - Recipient's stealth meta-address
3601
+ * @param chain - Cosmos chain identifier
3602
+ * @returns Cosmos stealth address with bech32 encoding
3603
+ * @throws {ValidationError} If meta-address or chain are invalid
3604
+ *
3605
+ * @example
3606
+ * ```typescript
3607
+ * const service = new CosmosStealthService()
3608
+ * const result = service.generateStealthAddressFromMeta(metaAddress, 'cosmos')
3609
+ * ```
3610
+ */
3611
+ generateStealthAddressFromMeta(recipientMetaAddress, chain) {
3612
+ const spendingPubKey = (0, import_utils9.hexToBytes)(recipientMetaAddress.spendingKey.slice(2));
3613
+ const viewingPubKey = (0, import_utils9.hexToBytes)(recipientMetaAddress.viewingKey.slice(2));
3614
+ return this.generateStealthAddress(spendingPubKey, viewingPubKey, chain);
3615
+ }
3616
+ /**
3617
+ * Convert stealth public key to Cosmos bech32 address
3618
+ *
3619
+ * Algorithm:
3620
+ * 1. SHA256 hash of compressed public key
3621
+ * 2. RIPEMD160 hash of SHA256 hash
3622
+ * 3. Bech32 encode with chain prefix
3623
+ *
3624
+ * @param publicKey - Compressed secp256k1 public key (33 bytes)
3625
+ * @param prefix - Bech32 address prefix (e.g., "cosmos", "osmo")
3626
+ * @returns Bech32-encoded address
3627
+ * @throws {ValidationError} If public key is invalid
3628
+ *
3629
+ * @example
3630
+ * ```typescript
3631
+ * const service = new CosmosStealthService()
3632
+ * const address = service.stealthKeyToCosmosAddress(pubKey, 'cosmos')
3633
+ * // Returns: "cosmos1abc..."
3634
+ * ```
3635
+ */
3636
+ stealthKeyToCosmosAddress(publicKey, prefix) {
3637
+ if (publicKey.length !== 33) {
3638
+ throw new ValidationError(
3639
+ "public key must be 33 bytes (compressed secp256k1)",
3640
+ "publicKey"
3641
+ );
3642
+ }
3643
+ const sha256Hash = (0, import_sha2566.sha256)(publicKey);
3644
+ const hash160 = (0, import_ripemd160.ripemd160)(sha256Hash);
3645
+ const words = import_base.bech32.toWords(hash160);
3646
+ return import_base.bech32.encode(prefix, words);
3647
+ }
3648
+ /**
3649
+ * Derive stealth private key for recipient to claim funds
3650
+ *
3651
+ * @param stealthAddress - The stealth address to recover (as StealthAddress)
3652
+ * @param spendingPrivateKey - Recipient's spending private key
3653
+ * @param viewingPrivateKey - Recipient's viewing private key
3654
+ * @returns Recovery data with derived private key
3655
+ * @throws {ValidationError} If any input is invalid
3656
+ *
3657
+ * @example
3658
+ * ```typescript
3659
+ * const service = new CosmosStealthService()
3660
+ * const recovery = service.deriveStealthPrivateKey(
3661
+ * stealthAddress,
3662
+ * spendingPrivKey,
3663
+ * viewingPrivKey
3664
+ * )
3665
+ * // Use recovery.privateKey to spend funds
3666
+ * ```
3667
+ */
3668
+ deriveStealthPrivateKey(stealthAddress, spendingPrivateKey, viewingPrivateKey) {
3669
+ return deriveStealthPrivateKey(
3670
+ stealthAddress,
3671
+ spendingPrivateKey,
3672
+ viewingPrivateKey
3673
+ );
3674
+ }
3675
+ /**
3676
+ * Check if a string is a valid Cosmos chain identifier
3677
+ */
3678
+ isValidCosmosChain(chain) {
3679
+ return chain in CHAIN_PREFIXES;
3680
+ }
3681
+ /**
3682
+ * Decode a Cosmos bech32 address to raw hash
3683
+ *
3684
+ * @param address - Bech32-encoded address
3685
+ * @returns Decoded address hash (20 bytes)
3686
+ * @throws {ValidationError} If address is invalid
3687
+ *
3688
+ * @example
3689
+ * ```typescript
3690
+ * const service = new CosmosStealthService()
3691
+ * const { prefix, hash } = service.decodeBech32Address('cosmos1abc...')
3692
+ * ```
3693
+ */
3694
+ decodeBech32Address(address) {
3695
+ try {
3696
+ const decoded = import_base.bech32.decode(address);
3697
+ const hash2 = import_base.bech32.fromWords(decoded.words);
3698
+ if (hash2.length !== 20) {
3699
+ throw new ValidationError(
3700
+ `invalid address hash length: ${hash2.length}, expected 20`,
3701
+ "address"
3702
+ );
3703
+ }
3704
+ return {
3705
+ prefix: decoded.prefix,
3706
+ hash: new Uint8Array(hash2)
3707
+ };
3708
+ } catch (error) {
3709
+ if (error instanceof ValidationError) {
3710
+ throw error;
3711
+ }
3712
+ throw new ValidationError(
3713
+ `invalid bech32 address: ${error instanceof Error ? error.message : "unknown error"}`,
3714
+ "address"
3715
+ );
3716
+ }
3717
+ }
3718
+ /**
3719
+ * Validate a Cosmos bech32 address format
3720
+ *
3721
+ * @param address - Address to validate
3722
+ * @param expectedChain - Optional chain to validate prefix against
3723
+ * @returns true if valid, false otherwise
3724
+ *
3725
+ * @example
3726
+ * ```typescript
3727
+ * const service = new CosmosStealthService()
3728
+ * service.isValidCosmosAddress('cosmos1abc...', 'cosmos') // true
3729
+ * service.isValidCosmosAddress('osmo1xyz...', 'cosmos') // false (wrong prefix)
3730
+ * ```
3731
+ */
3732
+ isValidCosmosAddress(address, expectedChain) {
3733
+ try {
3734
+ const { prefix, hash: hash2 } = this.decodeBech32Address(address);
3735
+ if (hash2.length !== 20) {
3736
+ return false;
3737
+ }
3738
+ if (expectedChain) {
3739
+ return prefix === CHAIN_PREFIXES[expectedChain];
3740
+ }
3741
+ return Object.values(CHAIN_PREFIXES).includes(prefix);
3742
+ } catch {
3743
+ return false;
3744
+ }
3745
+ }
3746
+ /**
3747
+ * Get the chain ID from a bech32 address prefix
3748
+ *
3749
+ * @param address - Bech32-encoded address
3750
+ * @returns Chain ID or null if unknown prefix
3751
+ *
3752
+ * @example
3753
+ * ```typescript
3754
+ * const service = new CosmosStealthService()
3755
+ * service.getChainFromAddress('cosmos1abc...') // 'cosmos'
3756
+ * service.getChainFromAddress('osmo1xyz...') // 'osmosis'
3757
+ * ```
3758
+ */
3759
+ getChainFromAddress(address) {
3760
+ try {
3761
+ const { prefix } = this.decodeBech32Address(address);
3762
+ for (const [chain, chainPrefix] of Object.entries(CHAIN_PREFIXES)) {
3763
+ if (chainPrefix === prefix) {
3764
+ return chain;
3765
+ }
3766
+ }
3767
+ return null;
3768
+ } catch {
3769
+ return null;
3770
+ }
3771
+ }
3772
+ };
3773
+ function generateCosmosStealthMetaAddress(chain, label) {
3774
+ const service = new CosmosStealthService();
3775
+ return service.generateStealthMetaAddress(chain, label);
3776
+ }
3777
+ function generateCosmosStealthAddress(spendingPubKey, viewingPubKey, chain) {
3778
+ const service = new CosmosStealthService();
3779
+ return service.generateStealthAddress(spendingPubKey, viewingPubKey, chain);
3780
+ }
3781
+ function stealthKeyToCosmosAddress(publicKey, prefix) {
3782
+ const service = new CosmosStealthService();
3783
+ return service.stealthKeyToCosmosAddress(publicKey, prefix);
3784
+ }
3785
+ function isValidCosmosAddress(address, expectedChain) {
3786
+ const service = new CosmosStealthService();
3787
+ return service.isValidCosmosAddress(address, expectedChain);
3788
+ }
3789
+
3790
+ // src/cosmos/ibc-stealth.ts
3791
+ var import_utils10 = require("@noble/hashes/utils");
3792
+ var import_secp256k13 = require("@noble/curves/secp256k1");
3793
+ var import_sha2567 = require("@noble/hashes/sha256");
3794
+
3290
3795
  // src/proofs/interface.ts
3291
3796
  var ProofGenerationError = class extends Error {
3292
3797
  proofType;
@@ -3300,8 +3805,8 @@ var ProofGenerationError = class extends Error {
3300
3805
  };
3301
3806
 
3302
3807
  // src/proofs/mock.ts
3303
- var import_sha2566 = require("@noble/hashes/sha256");
3304
- var import_utils7 = require("@noble/hashes/utils");
3808
+ var import_sha2568 = require("@noble/hashes/sha256");
3809
+ var import_utils11 = require("@noble/hashes/utils");
3305
3810
  var MOCK_PROOF_PREFIX = "0x4d4f434b";
3306
3811
  var WARNING_MESSAGE = `
3307
3812
  \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
@@ -3466,17 +3971,17 @@ var MockProofProvider = class {
3466
3971
  { type: proofType, params },
3467
3972
  (_, v) => typeof v === "bigint" ? v.toString() : v
3468
3973
  );
3469
- const hash2 = (0, import_sha2566.sha256)(new TextEncoder().encode(input));
3470
- const random = (0, import_utils7.randomBytes)(16);
3974
+ const hash2 = (0, import_sha2568.sha256)(new TextEncoder().encode(input));
3975
+ const random = (0, import_utils11.randomBytes)(16);
3471
3976
  const combined = new Uint8Array(4 + hash2.length + random.length);
3472
3977
  combined.set(new TextEncoder().encode("MOCK"), 0);
3473
3978
  combined.set(hash2, 4);
3474
3979
  combined.set(random, 4 + hash2.length);
3475
- return `${MOCK_PROOF_PREFIX}${(0, import_utils7.bytesToHex)(combined.slice(4))}`;
3980
+ return `${MOCK_PROOF_PREFIX}${(0, import_utils11.bytesToHex)(combined.slice(4))}`;
3476
3981
  }
3477
3982
  hashToHex(data) {
3478
- const hash2 = (0, import_sha2566.sha256)(new TextEncoder().encode(data));
3479
- return `0x${(0, import_utils7.bytesToHex)(hash2)}`;
3983
+ const hash2 = (0, import_sha2568.sha256)(new TextEncoder().encode(data));
3984
+ return `0x${(0, import_utils11.bytesToHex)(hash2)}`;
3480
3985
  }
3481
3986
  };
3482
3987
 
@@ -3755,7 +4260,7 @@ function checkMobileWASMCompatibility() {
3755
4260
  recommendations
3756
4261
  };
3757
4262
  }
3758
- function hexToBytes5(hex) {
4263
+ function hexToBytes9(hex) {
3759
4264
  const h = hex.startsWith("0x") ? hex.slice(2) : hex;
3760
4265
  if (h.length === 0) return new Uint8Array(0);
3761
4266
  if (h.length % 2 !== 0) {
@@ -3767,7 +4272,7 @@ function hexToBytes5(hex) {
3767
4272
  }
3768
4273
  return bytes;
3769
4274
  }
3770
- function bytesToHex7(bytes) {
4275
+ function bytesToHex11(bytes) {
3771
4276
  return Array.from(bytes).map((b) => b.toString(16).padStart(2, "0")).join("");
3772
4277
  }
3773
4278
  function isBrowser() {
@@ -3809,18 +4314,34 @@ var CHAIN_NUMERIC_IDS = {
3809
4314
  // Non-standard, SIP-specific
3810
4315
  near: 502,
3811
4316
  // Non-standard, SIP-specific
3812
- zcash: 503
4317
+ zcash: 503,
4318
+ // Non-standard, SIP-specific
4319
+ aptos: 504,
4320
+ // Non-standard, SIP-specific
4321
+ sui: 505,
4322
+ // Non-standard, SIP-specific
4323
+ cosmos: 506,
4324
+ // Non-standard, SIP-specific (Cosmos Hub)
4325
+ osmosis: 507,
4326
+ // Non-standard, SIP-specific
4327
+ injective: 508,
4328
+ // Non-standard, SIP-specific
4329
+ celestia: 509,
4330
+ // Non-standard, SIP-specific
4331
+ sei: 510,
4332
+ // Non-standard, SIP-specific
4333
+ dydx: 511
3813
4334
  // Non-standard, SIP-specific
3814
4335
  };
3815
4336
 
3816
4337
  // src/oracle/verification.ts
3817
4338
  var import_ed255192 = require("@noble/curves/ed25519");
3818
- var import_sha2568 = require("@noble/hashes/sha256");
3819
- var import_utils9 = require("@noble/hashes/utils");
4339
+ var import_sha25610 = require("@noble/hashes/sha256");
4340
+ var import_utils13 = require("@noble/hashes/utils");
3820
4341
 
3821
4342
  // src/oracle/serialization.ts
3822
- var import_sha2567 = require("@noble/hashes/sha256");
3823
- var import_utils8 = require("@noble/hashes/utils");
4343
+ var import_sha2569 = require("@noble/hashes/sha256");
4344
+ var import_utils12 = require("@noble/hashes/utils");
3824
4345
  function serializeAttestationMessage(message) {
3825
4346
  const buffer = new Uint8Array(197);
3826
4347
  const view = new DataView(buffer.buffer);
@@ -3863,19 +4384,19 @@ function deserializeAttestationMessage(bytes) {
3863
4384
  const version = bytes[offset++];
3864
4385
  const chainId = view.getUint32(offset, false);
3865
4386
  offset += 4;
3866
- const intentHash = `0x${(0, import_utils8.bytesToHex)(bytes.slice(offset, offset + 32))}`;
4387
+ const intentHash = `0x${(0, import_utils12.bytesToHex)(bytes.slice(offset, offset + 32))}`;
3867
4388
  offset += 32;
3868
- const recipient = `0x${(0, import_utils8.bytesToHex)(bytes.slice(offset, offset + 32))}`;
4389
+ const recipient = `0x${(0, import_utils12.bytesToHex)(bytes.slice(offset, offset + 32))}`;
3869
4390
  offset += 32;
3870
4391
  const amount = bytesToBigint(bytes.slice(offset, offset + 16));
3871
4392
  offset += 16;
3872
- const assetId = `0x${(0, import_utils8.bytesToHex)(bytes.slice(offset, offset + 32))}`;
4393
+ const assetId = `0x${(0, import_utils12.bytesToHex)(bytes.slice(offset, offset + 32))}`;
3873
4394
  offset += 32;
3874
- const txHash = `0x${(0, import_utils8.bytesToHex)(bytes.slice(offset, offset + 32))}`;
4395
+ const txHash = `0x${(0, import_utils12.bytesToHex)(bytes.slice(offset, offset + 32))}`;
3875
4396
  offset += 32;
3876
4397
  const blockNumber = view.getBigUint64(offset, false);
3877
4398
  offset += 8;
3878
- const blockHash = `0x${(0, import_utils8.bytesToHex)(bytes.slice(offset, offset + 32))}`;
4399
+ const blockHash = `0x${(0, import_utils12.bytesToHex)(bytes.slice(offset, offset + 32))}`;
3879
4400
  offset += 32;
3880
4401
  const timestamp = Number(view.getBigUint64(offset, false));
3881
4402
  return {
@@ -3892,12 +4413,12 @@ function deserializeAttestationMessage(bytes) {
3892
4413
  };
3893
4414
  }
3894
4415
  function computeAttestationHash(message) {
3895
- const domain = (0, import_utils8.utf8ToBytes)(ORACLE_DOMAIN);
4416
+ const domain = (0, import_utils12.utf8ToBytes)(ORACLE_DOMAIN);
3896
4417
  const messageBytes = serializeAttestationMessage(message);
3897
4418
  const toHash = new Uint8Array(domain.length + messageBytes.length);
3898
4419
  toHash.set(domain, 0);
3899
4420
  toHash.set(messageBytes, domain.length);
3900
- return (0, import_sha2567.sha256)(toHash);
4421
+ return (0, import_sha2569.sha256)(toHash);
3901
4422
  }
3902
4423
  function getChainNumericId(chain) {
3903
4424
  const id = CHAIN_NUMERIC_IDS[chain];
@@ -3908,7 +4429,7 @@ function getChainNumericId(chain) {
3908
4429
  }
3909
4430
  function normalizeToBytes(hex, length, field) {
3910
4431
  const stripped = hex.startsWith("0x") ? hex.slice(2) : hex;
3911
- const bytes = (0, import_utils8.hexToBytes)(stripped);
4432
+ const bytes = (0, import_utils12.hexToBytes)(stripped);
3912
4433
  if (bytes.length === length) {
3913
4434
  return bytes;
3914
4435
  }
@@ -3941,9 +4462,9 @@ function bytesToBigint(bytes) {
3941
4462
 
3942
4463
  // src/oracle/verification.ts
3943
4464
  function deriveOracleId(publicKey) {
3944
- const keyBytes = typeof publicKey === "string" ? (0, import_utils9.hexToBytes)(publicKey.startsWith("0x") ? publicKey.slice(2) : publicKey) : publicKey;
3945
- const hash2 = (0, import_sha2568.sha256)(keyBytes);
3946
- return `0x${(0, import_utils9.bytesToHex)(hash2)}`;
4465
+ const keyBytes = typeof publicKey === "string" ? (0, import_utils13.hexToBytes)(publicKey.startsWith("0x") ? publicKey.slice(2) : publicKey) : publicKey;
4466
+ const hash2 = (0, import_sha25610.sha256)(keyBytes);
4467
+ return `0x${(0, import_utils13.bytesToHex)(hash2)}`;
3947
4468
  }
3948
4469
  function verifyAttestation(attestation, registry) {
3949
4470
  const { message, signatures } = attestation;
@@ -3973,10 +4494,10 @@ function verifyAttestation(attestation, registry) {
3973
4494
  continue;
3974
4495
  }
3975
4496
  try {
3976
- const publicKeyBytes = (0, import_utils9.hexToBytes)(
4497
+ const publicKeyBytes = (0, import_utils13.hexToBytes)(
3977
4498
  oracle.publicKey.startsWith("0x") ? oracle.publicKey.slice(2) : oracle.publicKey
3978
4499
  );
3979
- const signatureBytes = (0, import_utils9.hexToBytes)(
4500
+ const signatureBytes = (0, import_utils13.hexToBytes)(
3980
4501
  sig.signature.startsWith("0x") ? sig.signature.slice(2) : sig.signature
3981
4502
  );
3982
4503
  const isValid = import_ed255192.ed25519.verify(signatureBytes, messageHash, publicKeyBytes);
@@ -4001,10 +4522,10 @@ function verifyAttestation(attestation, registry) {
4001
4522
  }
4002
4523
  function verifyOracleSignature(signature, messageHash, oracle) {
4003
4524
  try {
4004
- const publicKeyBytes = (0, import_utils9.hexToBytes)(
4525
+ const publicKeyBytes = (0, import_utils13.hexToBytes)(
4005
4526
  oracle.publicKey.startsWith("0x") ? oracle.publicKey.slice(2) : oracle.publicKey
4006
4527
  );
4007
- const signatureBytes = (0, import_utils9.hexToBytes)(
4528
+ const signatureBytes = (0, import_utils13.hexToBytes)(
4008
4529
  signature.signature.startsWith("0x") ? signature.signature.slice(2) : signature.signature
4009
4530
  );
4010
4531
  return import_ed255192.ed25519.verify(signatureBytes, messageHash, publicKeyBytes);
@@ -4018,7 +4539,7 @@ function signAttestationMessage(messageHash, privateKey) {
4018
4539
  const oracleId = deriveOracleId(publicKey);
4019
4540
  return {
4020
4541
  oracleId,
4021
- signature: `0x${(0, import_utils9.bytesToHex)(signature)}`
4542
+ signature: `0x${(0, import_utils13.bytesToHex)(signature)}`
4022
4543
  };
4023
4544
  }
4024
4545
  function createOracleRegistry(config = {}) {
@@ -4070,14 +4591,14 @@ function hasEnoughOracles(registry) {
4070
4591
  }
4071
4592
 
4072
4593
  // src/index.ts
4073
- var import_types37 = require("@sip-protocol/types");
4074
- var import_types38 = require("@sip-protocol/types");
4075
- var import_types39 = require("@sip-protocol/types");
4076
- var import_types40 = require("@sip-protocol/types");
4594
+ var import_types55 = require("@sip-protocol/types");
4595
+ var import_types56 = require("@sip-protocol/types");
4596
+ var import_types57 = require("@sip-protocol/types");
4597
+ var import_types58 = require("@sip-protocol/types");
4077
4598
 
4078
4599
  // src/solver/mock-solver.ts
4079
4600
  var import_types7 = require("@sip-protocol/types");
4080
- var import_utils10 = require("@noble/hashes/utils");
4601
+ var import_utils14 = require("@noble/hashes/utils");
4081
4602
  var MockSolver = class {
4082
4603
  info;
4083
4604
  capabilities;
@@ -4159,7 +4680,7 @@ var MockSolver = class {
4159
4680
  const spreadAmount = baseOutput * BigInt(Math.floor(this.spreadPercent * 1e4)) / 10000n;
4160
4681
  const outputAmount = baseOutput + spreadAmount;
4161
4682
  const feeAmount = outputAmount * BigInt(Math.floor(this.feePercent * 1e4)) / 10000n;
4162
- const quoteId = `quote-${(0, import_utils10.bytesToHex)((0, import_utils10.randomBytes)(8))}`;
4683
+ const quoteId = `quote-${(0, import_utils14.bytesToHex)((0, import_utils14.randomBytes)(8))}`;
4163
4684
  const now = Math.floor(Date.now() / 1e3);
4164
4685
  const quote = {
4165
4686
  quoteId,
@@ -4170,7 +4691,7 @@ var MockSolver = class {
4170
4691
  expiry: now + 60,
4171
4692
  // Quote valid for 1 minute
4172
4693
  fee: feeAmount,
4173
- signature: `0x${(0, import_utils10.bytesToHex)((0, import_utils10.randomBytes)(64))}`,
4694
+ signature: `0x${(0, import_utils14.bytesToHex)((0, import_utils14.randomBytes)(64))}`,
4174
4695
  // Mock signature
4175
4696
  validUntil: now + 60,
4176
4697
  estimatedGas: 200000n
@@ -4207,7 +4728,7 @@ var MockSolver = class {
4207
4728
  error: status.error
4208
4729
  };
4209
4730
  }
4210
- const txHash = `0x${(0, import_utils10.bytesToHex)((0, import_utils10.randomBytes)(32))}`;
4731
+ const txHash = `0x${(0, import_utils14.bytesToHex)((0, import_utils14.randomBytes)(32))}`;
4211
4732
  status.status = "completed";
4212
4733
  status.txHash = txHash;
4213
4734
  return {
@@ -4217,10 +4738,10 @@ var MockSolver = class {
4217
4738
  txHash: intent.privacyLevel === "transparent" ? txHash : void 0,
4218
4739
  fulfillmentProof: {
4219
4740
  type: "fulfillment",
4220
- proof: `0x${(0, import_utils10.bytesToHex)((0, import_utils10.randomBytes)(128))}`,
4741
+ proof: `0x${(0, import_utils14.bytesToHex)((0, import_utils14.randomBytes)(128))}`,
4221
4742
  publicInputs: [
4222
- `0x${(0, import_utils10.bytesToHex)(new TextEncoder().encode(intent.intentId))}`,
4223
- `0x${(0, import_utils10.bytesToHex)(new TextEncoder().encode(quote.quoteId))}`
4743
+ `0x${(0, import_utils14.bytesToHex)(new TextEncoder().encode(intent.intentId))}`,
4744
+ `0x${(0, import_utils14.bytesToHex)(new TextEncoder().encode(quote.quoteId))}`
4224
4745
  ]
4225
4746
  },
4226
4747
  fulfilledAt: Math.floor(Date.now() / 1e3)
@@ -4258,7 +4779,7 @@ function createMockSolver(config) {
4258
4779
  }
4259
4780
 
4260
4781
  // src/index.ts
4261
- var import_types41 = require("@sip-protocol/types");
4782
+ var import_types59 = require("@sip-protocol/types");
4262
4783
 
4263
4784
  // src/settlement/interface.ts
4264
4785
  var SwapStatus = /* @__PURE__ */ ((SwapStatus2) => {
@@ -4986,6 +5507,15 @@ var NEARIntentsBackend = class {
4986
5507
  "senderAddress"
4987
5508
  );
4988
5509
  }
5510
+ if (params.slippageTolerance !== void 0) {
5511
+ if (params.slippageTolerance < 0 || params.slippageTolerance > 1e4) {
5512
+ throw new ValidationError(
5513
+ "slippageTolerance must be between 0-10000 basis points (0-100%)",
5514
+ "slippageTolerance",
5515
+ { provided: params.slippageTolerance, validRange: "0-10000" }
5516
+ );
5517
+ }
5518
+ }
4989
5519
  if (!this.capabilities.supportedSourceChains.includes(params.fromChain)) {
4990
5520
  throw new ValidationError(
4991
5521
  `Source chain ${params.fromChain} is not supported`,
@@ -5355,7 +5885,7 @@ function createZcashNativeBackend(config) {
5355
5885
 
5356
5886
  // src/settlement/backends/direct-chain.ts
5357
5887
  var import_types10 = require("@sip-protocol/types");
5358
- var import_utils11 = require("@noble/hashes/utils");
5888
+ var import_utils15 = require("@noble/hashes/utils");
5359
5889
  var DEFAULT_GAS_FEES = {
5360
5890
  ethereum: 21000n * 50n * 1000000000n,
5361
5891
  // 21k gas * 50 gwei = 0.00105 ETH
@@ -5373,8 +5903,24 @@ var DEFAULT_GAS_FEES = {
5373
5903
  // 21k gas * 0.001 gwei ETH = 21 gwei = 21e6 wei
5374
5904
  base: 2100000000n,
5375
5905
  // 21k gas * 0.1 gwei ETH = 2100 gwei = 2.1e9 wei
5376
- bitcoin: 10000n
5906
+ bitcoin: 10000n,
5377
5907
  // 10000 sats = 0.0001 BTC (estimate for 1 input, 2 outputs)
5908
+ aptos: 100n,
5909
+ // 0.000001 APT in octas (gas units)
5910
+ sui: 1000n,
5911
+ // 0.000001 SUI in MIST
5912
+ cosmos: 5000n,
5913
+ // 0.005 ATOM in uatom
5914
+ osmosis: 5000n,
5915
+ // 0.005 OSMO in uosmo
5916
+ injective: 5000n,
5917
+ // 0.000005 INJ in inj (18 decimals)
5918
+ celestia: 5000n,
5919
+ // 0.005 TIA in utia
5920
+ sei: 5000n,
5921
+ // 0.005 SEI in usei
5922
+ dydx: 5000n
5923
+ // 0.000005 DYDX in dydx (18 decimals)
5378
5924
  };
5379
5925
 
5380
5926
  // src/zcash/rpc-client.ts
@@ -6659,12 +7205,300 @@ function createZcashSwapService(config) {
6659
7205
  var import_types14 = require("@sip-protocol/types");
6660
7206
 
6661
7207
  // src/index.ts
6662
- var import_types42 = require("@sip-protocol/types");
7208
+ var import_types60 = require("@sip-protocol/types");
7209
+
7210
+ // src/bitcoin/taproot.ts
7211
+ var import_secp256k14 = require("@noble/curves/secp256k1");
7212
+ var import_sha25611 = require("@noble/hashes/sha256");
7213
+ var import_utils16 = require("@noble/hashes/utils");
7214
+ var BECH32_CHARSET = "qpzry9x8gf2tvdw0s3jn54khce6mua7l";
7215
+ var BECH32_GENERATOR = [996825010, 642813549, 513874426, 1027748829, 705979059];
7216
+ function taggedHash(tag, data) {
7217
+ const tagHash = (0, import_sha25611.sha256)(new TextEncoder().encode(tag));
7218
+ const taggedData = new Uint8Array(tagHash.length * 2 + data.length);
7219
+ taggedData.set(tagHash, 0);
7220
+ taggedData.set(tagHash, tagHash.length);
7221
+ taggedData.set(data, tagHash.length * 2);
7222
+ return (0, import_sha25611.sha256)(taggedData);
7223
+ }
7224
+ function schnorrSign(message, privateKey, auxRand) {
7225
+ if (message.length !== 32) {
7226
+ throw new ValidationError("message must be 32 bytes", "message");
7227
+ }
7228
+ if (privateKey.length !== 32) {
7229
+ throw new ValidationError("privateKey must be 32 bytes", "privateKey");
7230
+ }
7231
+ if (auxRand && auxRand.length !== 32) {
7232
+ throw new ValidationError("auxRand must be 32 bytes if provided", "auxRand");
7233
+ }
7234
+ return import_secp256k14.schnorr.sign(message, privateKey, auxRand);
7235
+ }
7236
+ function schnorrVerify(signature, message, publicKey) {
7237
+ if (signature.length !== 64) {
7238
+ throw new ValidationError("signature must be 64 bytes", "signature");
7239
+ }
7240
+ if (message.length !== 32) {
7241
+ throw new ValidationError("message must be 32 bytes", "message");
7242
+ }
7243
+ if (publicKey.length !== 32) {
7244
+ throw new ValidationError("publicKey must be 32 bytes (x-only)", "publicKey");
7245
+ }
7246
+ try {
7247
+ return import_secp256k14.schnorr.verify(signature, message, publicKey);
7248
+ } catch {
7249
+ return false;
7250
+ }
7251
+ }
7252
+ function getXOnlyPublicKey(privateKey) {
7253
+ if (privateKey.length !== 32) {
7254
+ throw new ValidationError("privateKey must be 32 bytes", "privateKey");
7255
+ }
7256
+ const publicKey = import_secp256k14.secp256k1.getPublicKey(privateKey, false);
7257
+ return publicKey.slice(1, 33);
7258
+ }
7259
+ function computeTweakedKey(internalKey, merkleRoot) {
7260
+ if (internalKey.length !== 32) {
7261
+ throw new ValidationError("internalKey must be 32 bytes (x-only)", "internalKey");
7262
+ }
7263
+ if (merkleRoot && merkleRoot.length !== 32) {
7264
+ throw new ValidationError("merkleRoot must be 32 bytes if provided", "merkleRoot");
7265
+ }
7266
+ const tweakData = merkleRoot ? new Uint8Array([...internalKey, ...merkleRoot]) : internalKey;
7267
+ const tweak = taggedHash("TapTweak", tweakData);
7268
+ const tweakScalar = BigInt("0x" + (0, import_utils16.bytesToHex)(tweak)) % import_secp256k14.secp256k1.CURVE.n;
7269
+ const internalPoint = import_secp256k14.secp256k1.ProjectivePoint.fromHex(
7270
+ "02" + (0, import_utils16.bytesToHex)(internalKey)
7271
+ );
7272
+ const tweakPoint = import_secp256k14.secp256k1.ProjectivePoint.BASE.multiply(tweakScalar);
7273
+ const tweakedPoint = internalPoint.add(tweakPoint);
7274
+ const tweakedKeyBytes = tweakedPoint.toRawBytes(false);
7275
+ const xOnly = tweakedKeyBytes.slice(1, 33);
7276
+ const yCoord = tweakedKeyBytes.slice(33, 65);
7277
+ const yBigInt = BigInt("0x" + (0, import_utils16.bytesToHex)(yCoord));
7278
+ const parity = Number(yBigInt & 1n);
7279
+ return {
7280
+ tweakedKey: xOnly,
7281
+ parity
7282
+ };
7283
+ }
7284
+ function createTaprootOutput(internalKey, scripts) {
7285
+ if (internalKey.length !== 32) {
7286
+ throw new ValidationError("internalKey must be 32 bytes (x-only)", "internalKey");
7287
+ }
7288
+ let merkleRoot;
7289
+ if (scripts && scripts.length > 0) {
7290
+ if (scripts.length === 1) {
7291
+ const script = scripts[0];
7292
+ const leafData = new Uint8Array([
7293
+ script.leafVersion,
7294
+ script.script.length,
7295
+ ...script.script
7296
+ ]);
7297
+ merkleRoot = taggedHash("TapLeaf", leafData);
7298
+ } else {
7299
+ throw new ValidationError(
7300
+ "Multiple tapscripts not yet implemented - use single script or no scripts",
7301
+ "scripts"
7302
+ );
7303
+ }
7304
+ }
7305
+ const { tweakedKey, parity } = computeTweakedKey(internalKey, merkleRoot);
7306
+ return {
7307
+ tweakedKey: `0x${(0, import_utils16.bytesToHex)(tweakedKey)}`,
7308
+ internalKey: `0x${(0, import_utils16.bytesToHex)(internalKey)}`,
7309
+ merkleRoot: merkleRoot ? `0x${(0, import_utils16.bytesToHex)(merkleRoot)}` : void 0,
7310
+ parity
7311
+ };
7312
+ }
7313
+ function bech32Polymod(values) {
7314
+ let chk = 1;
7315
+ for (const value of values) {
7316
+ const top = chk >> 25;
7317
+ chk = (chk & 33554431) << 5 ^ value;
7318
+ for (let i = 0; i < 5; i++) {
7319
+ if (top >> i & 1) {
7320
+ chk ^= BECH32_GENERATOR[i];
7321
+ }
7322
+ }
7323
+ }
7324
+ return chk;
7325
+ }
7326
+ function bech32HrpExpand(hrp) {
7327
+ const result = [];
7328
+ for (let i = 0; i < hrp.length; i++) {
7329
+ result.push(hrp.charCodeAt(i) >> 5);
7330
+ }
7331
+ result.push(0);
7332
+ for (let i = 0; i < hrp.length; i++) {
7333
+ result.push(hrp.charCodeAt(i) & 31);
7334
+ }
7335
+ return result;
7336
+ }
7337
+ function bech32VerifyChecksum(hrp, data) {
7338
+ return bech32Polymod([...bech32HrpExpand(hrp), ...data]) === 734539939;
7339
+ }
7340
+ function bech32CreateChecksum(hrp, data) {
7341
+ const values = [...bech32HrpExpand(hrp), ...data, 0, 0, 0, 0, 0, 0];
7342
+ const polymod = bech32Polymod(values) ^ 734539939;
7343
+ const checksum = [];
7344
+ for (let i = 0; i < 6; i++) {
7345
+ checksum.push(polymod >> 5 * (5 - i) & 31);
7346
+ }
7347
+ return checksum;
7348
+ }
7349
+ function convertBits(data, fromBits, toBits, pad) {
7350
+ let acc = 0;
7351
+ let bits = 0;
7352
+ const result = [];
7353
+ const maxv = (1 << toBits) - 1;
7354
+ for (const value of data) {
7355
+ if (value < 0 || value >> fromBits !== 0) {
7356
+ return null;
7357
+ }
7358
+ acc = acc << fromBits | value;
7359
+ bits += fromBits;
7360
+ while (bits >= toBits) {
7361
+ bits -= toBits;
7362
+ result.push(acc >> bits & maxv);
7363
+ }
7364
+ }
7365
+ if (pad) {
7366
+ if (bits > 0) {
7367
+ result.push(acc << toBits - bits & maxv);
7368
+ }
7369
+ } else if (bits >= fromBits || acc << toBits - bits & maxv) {
7370
+ return null;
7371
+ }
7372
+ return result;
7373
+ }
7374
+ function taprootAddress(tweakedKey, network = "mainnet") {
7375
+ if (tweakedKey.length !== 32) {
7376
+ throw new ValidationError("tweakedKey must be 32 bytes", "tweakedKey");
7377
+ }
7378
+ const hrp = network === "mainnet" ? "bc" : network === "testnet" ? "tb" : "bcrt";
7379
+ const version = 1;
7380
+ const words = convertBits(tweakedKey, 8, 5, true);
7381
+ if (!words) {
7382
+ throw new ValidationError("Failed to convert tweaked key to bech32 format", "tweakedKey");
7383
+ }
7384
+ const data = [version, ...words];
7385
+ const checksum = bech32CreateChecksum(hrp, data);
7386
+ const combined = [...data, ...checksum];
7387
+ let result = hrp + "1";
7388
+ for (const value of combined) {
7389
+ result += BECH32_CHARSET[value];
7390
+ }
7391
+ return result;
7392
+ }
7393
+ function decodeTaprootAddress(address) {
7394
+ if (typeof address !== "string" || address.length < 14 || address.length > 90) {
7395
+ throw new ValidationError("Invalid Taproot address format", "address");
7396
+ }
7397
+ const addressLower = address.toLowerCase();
7398
+ const sepIndex = addressLower.lastIndexOf("1");
7399
+ if (sepIndex === -1 || sepIndex + 7 > addressLower.length) {
7400
+ throw new ValidationError("Invalid Taproot address: no separator", "address");
7401
+ }
7402
+ const hrp = addressLower.slice(0, sepIndex);
7403
+ const dataStr = addressLower.slice(sepIndex + 1);
7404
+ let network;
7405
+ if (hrp === "bc") {
7406
+ network = "mainnet";
7407
+ } else if (hrp === "tb") {
7408
+ network = "testnet";
7409
+ } else if (hrp === "bcrt") {
7410
+ network = "regtest";
7411
+ } else {
7412
+ throw new ValidationError(`Unknown HRP: ${hrp}`, "address");
7413
+ }
7414
+ const data = [];
7415
+ for (const char of dataStr) {
7416
+ const index = BECH32_CHARSET.indexOf(char);
7417
+ if (index === -1) {
7418
+ throw new ValidationError(`Invalid bech32 character: ${char}`, "address");
7419
+ }
7420
+ data.push(index);
7421
+ }
7422
+ if (!bech32VerifyChecksum(hrp, data)) {
7423
+ throw new ValidationError("Invalid Taproot address checksum", "address");
7424
+ }
7425
+ const version = data[0];
7426
+ if (version !== 1) {
7427
+ throw new ValidationError(`Expected witness version 1 (Taproot), got ${version}`, "address");
7428
+ }
7429
+ const program = convertBits(new Uint8Array(data.slice(1, -6)), 5, 8, false);
7430
+ if (!program || program.length !== 32) {
7431
+ throw new ValidationError("Invalid Taproot program length", "address");
7432
+ }
7433
+ return {
7434
+ tweakedKey: new Uint8Array(program),
7435
+ network
7436
+ };
7437
+ }
7438
+ function createKeySpendOnlyOutput(privateKey, network = "mainnet") {
7439
+ if (!isValidPrivateKey(privateKey)) {
7440
+ throw new ValidationError("privateKey must be a valid 32-byte hex string", "privateKey");
7441
+ }
7442
+ const privKeyBytes = (0, import_utils16.hexToBytes)(privateKey.slice(2));
7443
+ const internalKey = getXOnlyPublicKey(privKeyBytes);
7444
+ const output = createTaprootOutput(internalKey);
7445
+ const tweakedKeyBytes = (0, import_utils16.hexToBytes)(output.tweakedKey.slice(2));
7446
+ const address = taprootAddress(tweakedKeyBytes, network);
7447
+ return {
7448
+ output,
7449
+ address,
7450
+ internalPrivateKey: privateKey
7451
+ };
7452
+ }
7453
+ function isValidTaprootAddress(address) {
7454
+ try {
7455
+ decodeTaprootAddress(address);
7456
+ return true;
7457
+ } catch {
7458
+ return false;
7459
+ }
7460
+ }
7461
+ function schnorrSignHex(message, privateKey, auxRand) {
7462
+ if (!isValidHex(message)) {
7463
+ throw new ValidationError("message must be a hex string", "message");
7464
+ }
7465
+ if (!isValidPrivateKey(privateKey)) {
7466
+ throw new ValidationError("privateKey must be a valid 32-byte hex string", "privateKey");
7467
+ }
7468
+ if (auxRand && !isValidHex(auxRand)) {
7469
+ throw new ValidationError("auxRand must be a hex string", "auxRand");
7470
+ }
7471
+ const messageBytes = (0, import_utils16.hexToBytes)(message.slice(2));
7472
+ const privateKeyBytes = (0, import_utils16.hexToBytes)(privateKey.slice(2));
7473
+ const auxRandBytes = auxRand ? (0, import_utils16.hexToBytes)(auxRand.slice(2)) : void 0;
7474
+ const signature = schnorrSign(messageBytes, privateKeyBytes, auxRandBytes);
7475
+ return `0x${(0, import_utils16.bytesToHex)(signature)}`;
7476
+ }
7477
+ function schnorrVerifyHex(signature, message, publicKey) {
7478
+ if (!isValidHex(signature)) {
7479
+ throw new ValidationError("signature must be a hex string", "signature");
7480
+ }
7481
+ if (!isValidHex(message)) {
7482
+ throw new ValidationError("message must be a hex string", "message");
7483
+ }
7484
+ if (!isValidHex(publicKey)) {
7485
+ throw new ValidationError("publicKey must be a hex string", "publicKey");
7486
+ }
7487
+ const signatureBytes = (0, import_utils16.hexToBytes)(signature.slice(2));
7488
+ const messageBytes = (0, import_utils16.hexToBytes)(message.slice(2));
7489
+ const publicKeyBytes = (0, import_utils16.hexToBytes)(publicKey.slice(2));
7490
+ return schnorrVerify(signatureBytes, messageBytes, publicKeyBytes);
7491
+ }
7492
+
7493
+ // src/bitcoin/silent-payments.ts
7494
+ var import_secp256k15 = require("@noble/curves/secp256k1");
7495
+ var import_sha25612 = require("@noble/hashes/sha256");
7496
+ var import_utils17 = require("@noble/hashes/utils");
6663
7497
 
6664
7498
  // src/payment/payment.ts
6665
7499
  var import_types15 = require("@sip-protocol/types");
6666
- var import_sha2569 = require("@noble/hashes/sha256");
6667
- var import_utils12 = require("@noble/hashes/utils");
7500
+ var import_sha25613 = require("@noble/hashes/sha256");
7501
+ var import_utils18 = require("@noble/hashes/utils");
6668
7502
  var import_chacha2 = require("@noble/ciphers/chacha.js");
6669
7503
  var import_hkdf2 = require("@noble/hashes/hkdf");
6670
7504
 
@@ -7160,8 +7994,8 @@ async function createShieldedPayment(params, options) {
7160
7994
  let viewingKeyHash;
7161
7995
  if (viewingKey) {
7162
7996
  const keyHex = viewingKey.startsWith("0x") ? viewingKey.slice(2) : viewingKey;
7163
- const keyBytes = (0, import_utils12.hexToBytes)(keyHex);
7164
- viewingKeyHash = `0x${(0, import_utils12.bytesToHex)((0, import_sha2569.sha256)(keyBytes))}`;
7997
+ const keyBytes = (0, import_utils18.hexToBytes)(keyHex);
7998
+ viewingKeyHash = `0x${(0, import_utils18.bytesToHex)((0, import_sha25613.sha256)(keyBytes))}`;
7165
7999
  }
7166
8000
  const privacyConfig = getPrivacyConfig(
7167
8001
  privacy,
@@ -7201,7 +8035,7 @@ async function createShieldedPayment(params, options) {
7201
8035
  if (privacy !== import_types15.PrivacyLevel.TRANSPARENT && proofProvider?.isReady) {
7202
8036
  const hexToUint8 = (hex) => {
7203
8037
  const cleanHex = hex.startsWith("0x") ? hex.slice(2) : hex;
7204
- return (0, import_utils12.hexToBytes)(cleanHex);
8038
+ return (0, import_utils18.hexToBytes)(cleanHex);
7205
8039
  };
7206
8040
  const fundingResult = await proofProvider.generateFundingProof({
7207
8041
  balance: amount,
@@ -7228,17 +8062,17 @@ async function createShieldedPayment(params, options) {
7228
8062
  }
7229
8063
  function encryptMemo(memo, viewingKey) {
7230
8064
  const keyHex = viewingKey.startsWith("0x") ? viewingKey.slice(2) : viewingKey;
7231
- const keyBytes = (0, import_utils12.hexToBytes)(keyHex);
7232
- const encKey = (0, import_hkdf2.hkdf)(import_sha2569.sha256, keyBytes, new Uint8Array(0), new Uint8Array(0), 32);
8065
+ const keyBytes = (0, import_utils18.hexToBytes)(keyHex);
8066
+ const encKey = (0, import_hkdf2.hkdf)(import_sha25613.sha256, keyBytes, new Uint8Array(0), new Uint8Array(0), 32);
7233
8067
  try {
7234
- const nonce = (0, import_utils12.randomBytes)(24);
8068
+ const nonce = (0, import_utils18.randomBytes)(24);
7235
8069
  const cipher = (0, import_chacha2.xchacha20poly1305)(encKey, nonce);
7236
8070
  const plaintext = new TextEncoder().encode(memo);
7237
8071
  const ciphertext = cipher.encrypt(plaintext);
7238
8072
  const result = new Uint8Array(nonce.length + ciphertext.length);
7239
8073
  result.set(nonce);
7240
8074
  result.set(ciphertext, nonce.length);
7241
- return `0x${(0, import_utils12.bytesToHex)(result)}`;
8075
+ return `0x${(0, import_utils18.bytesToHex)(result)}`;
7242
8076
  } finally {
7243
8077
  secureWipe(keyBytes);
7244
8078
  secureWipe(encKey);
@@ -7246,11 +8080,11 @@ function encryptMemo(memo, viewingKey) {
7246
8080
  }
7247
8081
  function decryptMemo(encryptedMemo, viewingKey) {
7248
8082
  const keyHex = viewingKey.startsWith("0x") ? viewingKey.slice(2) : viewingKey;
7249
- const keyBytes = (0, import_utils12.hexToBytes)(keyHex);
7250
- const encKey = (0, import_hkdf2.hkdf)(import_sha2569.sha256, keyBytes, new Uint8Array(0), new Uint8Array(0), 32);
8083
+ const keyBytes = (0, import_utils18.hexToBytes)(keyHex);
8084
+ const encKey = (0, import_hkdf2.hkdf)(import_sha25613.sha256, keyBytes, new Uint8Array(0), new Uint8Array(0), 32);
7251
8085
  try {
7252
8086
  const dataHex = encryptedMemo.startsWith("0x") ? encryptedMemo.slice(2) : encryptedMemo;
7253
- const data = (0, import_utils12.hexToBytes)(dataHex);
8087
+ const data = (0, import_utils18.hexToBytes)(dataHex);
7254
8088
  const nonce = data.slice(0, 24);
7255
8089
  const ciphertext = data.slice(24);
7256
8090
  const cipher = (0, import_chacha2.xchacha20poly1305)(encKey, nonce);
@@ -7298,9 +8132,9 @@ function getPaymentSummary(payment) {
7298
8132
 
7299
8133
  // src/treasury/treasury.ts
7300
8134
  var import_types16 = require("@sip-protocol/types");
7301
- var import_secp256k13 = require("@noble/curves/secp256k1");
7302
- var import_sha25610 = require("@noble/hashes/sha256");
7303
- var import_utils13 = require("@noble/hashes/utils");
8135
+ var import_secp256k16 = require("@noble/curves/secp256k1");
8136
+ var import_sha25614 = require("@noble/hashes/sha256");
8137
+ var import_utils19 = require("@noble/hashes/utils");
7304
8138
  var DEFAULT_PROPOSAL_TTL = 7 * 24 * 60 * 60;
7305
8139
  var Treasury = class _Treasury {
7306
8140
  config;
@@ -7791,12 +8625,12 @@ var Treasury = class _Treasury {
7791
8625
  }
7792
8626
  };
7793
8627
  function generateTreasuryId() {
7794
- const bytes = (0, import_utils13.randomBytes)(16);
7795
- return `treasury_${(0, import_utils13.bytesToHex)(bytes)}`;
8628
+ const bytes = (0, import_utils19.randomBytes)(16);
8629
+ return `treasury_${(0, import_utils19.bytesToHex)(bytes)}`;
7796
8630
  }
7797
8631
  function generateProposalId() {
7798
- const bytes = (0, import_utils13.randomBytes)(16);
7799
- return `prop_${(0, import_utils13.bytesToHex)(bytes)}`;
8632
+ const bytes = (0, import_utils19.randomBytes)(16);
8633
+ return `prop_${(0, import_utils19.bytesToHex)(bytes)}`;
7800
8634
  }
7801
8635
  function computeProposalHash(proposal) {
7802
8636
  const data = JSON.stringify({
@@ -7808,13 +8642,13 @@ function computeProposalHash(proposal) {
7808
8642
  createdAt: proposal.createdAt,
7809
8643
  expiresAt: proposal.expiresAt
7810
8644
  }, (_, value) => typeof value === "bigint" ? value.toString() : value);
7811
- return (0, import_sha25610.sha256)(new TextEncoder().encode(data));
8645
+ return (0, import_sha25614.sha256)(new TextEncoder().encode(data));
7812
8646
  }
7813
8647
  function signMessage(messageHash, privateKey) {
7814
8648
  const keyHex = privateKey.startsWith("0x") ? privateKey.slice(2) : privateKey;
7815
- const keyBytes = (0, import_utils13.hexToBytes)(keyHex);
8649
+ const keyBytes = (0, import_utils19.hexToBytes)(keyHex);
7816
8650
  try {
7817
- const signature = import_secp256k13.secp256k1.sign(messageHash, keyBytes);
8651
+ const signature = import_secp256k16.secp256k1.sign(messageHash, keyBytes);
7818
8652
  return `0x${signature.toCompactHex()}`;
7819
8653
  } finally {
7820
8654
  secureWipe(keyBytes);
@@ -7824,9 +8658,9 @@ function verifySignature(messageHash, signature, publicKey) {
7824
8658
  const sigHex = signature.startsWith("0x") ? signature.slice(2) : signature;
7825
8659
  const pubKeyHex = publicKey.startsWith("0x") ? publicKey.slice(2) : publicKey;
7826
8660
  try {
7827
- const sigBytes = (0, import_utils13.hexToBytes)(sigHex);
7828
- const pubKeyBytes = (0, import_utils13.hexToBytes)(pubKeyHex);
7829
- return import_secp256k13.secp256k1.verify(sigBytes, messageHash, pubKeyBytes);
8661
+ const sigBytes = (0, import_utils19.hexToBytes)(sigHex);
8662
+ const pubKeyBytes = (0, import_utils19.hexToBytes)(pubKeyHex);
8663
+ return import_secp256k16.secp256k1.verify(sigBytes, messageHash, pubKeyBytes);
7830
8664
  } catch {
7831
8665
  return false;
7832
8666
  }
@@ -7984,7 +8818,7 @@ function validateBatchProposalParams(params, config) {
7984
8818
 
7985
8819
  // src/compliance/compliance-manager.ts
7986
8820
  var import_types17 = require("@sip-protocol/types");
7987
- var import_utils14 = require("@noble/hashes/utils");
8821
+ var import_utils20 = require("@noble/hashes/utils");
7988
8822
  var DEFAULTS2 = {
7989
8823
  riskThreshold: 70,
7990
8824
  highValueThreshold: 10000000000n,
@@ -8658,7 +9492,7 @@ var ComplianceManager = class _ComplianceManager {
8658
9492
  }
8659
9493
  };
8660
9494
  function generateId(prefix) {
8661
- return `${prefix}_${(0, import_utils14.bytesToHex)((0, import_utils14.randomBytes)(12))}`;
9495
+ return `${prefix}_${(0, import_utils20.bytesToHex)((0, import_utils20.randomBytes)(12))}`;
8662
9496
  }
8663
9497
  function validateRegisterAuditorParams(params) {
8664
9498
  if (!params.organization?.trim()) {
@@ -10902,6 +11736,30 @@ function createMockEthereumProvider(config = {}) {
10902
11736
  return provider;
10903
11737
  }
10904
11738
 
11739
+ // src/wallet/cosmos/adapter.ts
11740
+ var import_types29 = require("@sip-protocol/types");
11741
+
11742
+ // src/wallet/cosmos/mock.ts
11743
+ var import_types31 = require("@sip-protocol/types");
11744
+
11745
+ // src/wallet/bitcoin/adapter.ts
11746
+ var import_types34 = require("@sip-protocol/types");
11747
+
11748
+ // src/wallet/bitcoin/mock.ts
11749
+ var import_types36 = require("@sip-protocol/types");
11750
+
11751
+ // src/wallet/aptos/adapter.ts
11752
+ var import_types39 = require("@sip-protocol/types");
11753
+
11754
+ // src/wallet/aptos/mock.ts
11755
+ var import_types41 = require("@sip-protocol/types");
11756
+
11757
+ // src/wallet/sui/adapter.ts
11758
+ var import_types43 = require("@sip-protocol/types");
11759
+
11760
+ // src/wallet/sui/mock.ts
11761
+ var import_types45 = require("@sip-protocol/types");
11762
+
10905
11763
  // src/wallet/hardware/types.ts
10906
11764
  var DerivationPath = {
10907
11765
  /** Ethereum: m/44'/60'/0'/0/index */
@@ -10977,7 +11835,7 @@ function getAvailableTransports() {
10977
11835
  }
10978
11836
 
10979
11837
  // src/wallet/hardware/ledger.ts
10980
- var import_types29 = require("@sip-protocol/types");
11838
+ var import_types47 = require("@sip-protocol/types");
10981
11839
  var LedgerWalletAdapter = class extends BaseWalletAdapter {
10982
11840
  chain;
10983
11841
  name = "ledger";
@@ -11130,7 +11988,7 @@ var LedgerWalletAdapter = class extends BaseWalletAdapter {
11130
11988
  async getBalance() {
11131
11989
  throw new WalletError(
11132
11990
  "Hardware wallets do not track balances. Use an RPC provider.",
11133
- import_types29.WalletErrorCode.UNSUPPORTED_OPERATION
11991
+ import_types47.WalletErrorCode.UNSUPPORTED_OPERATION
11134
11992
  );
11135
11993
  }
11136
11994
  /**
@@ -11141,7 +11999,7 @@ var LedgerWalletAdapter = class extends BaseWalletAdapter {
11141
11999
  async getTokenBalance(_asset) {
11142
12000
  throw new WalletError(
11143
12001
  "Hardware wallets do not track balances. Use an RPC provider.",
11144
- import_types29.WalletErrorCode.UNSUPPORTED_OPERATION
12002
+ import_types47.WalletErrorCode.UNSUPPORTED_OPERATION
11145
12003
  );
11146
12004
  }
11147
12005
  // ─── Account Management ─────────────────────────────────────────────────────
@@ -11429,7 +12287,7 @@ function createLedgerAdapter(config) {
11429
12287
  }
11430
12288
 
11431
12289
  // src/wallet/hardware/trezor.ts
11432
- var import_types31 = require("@sip-protocol/types");
12290
+ var import_types49 = require("@sip-protocol/types");
11433
12291
  var TrezorWalletAdapter = class extends BaseWalletAdapter {
11434
12292
  chain;
11435
12293
  name = "trezor";
@@ -11575,7 +12433,7 @@ var TrezorWalletAdapter = class extends BaseWalletAdapter {
11575
12433
  async getBalance() {
11576
12434
  throw new WalletError(
11577
12435
  "Hardware wallets do not track balances. Use an RPC provider.",
11578
- import_types31.WalletErrorCode.UNSUPPORTED_OPERATION
12436
+ import_types49.WalletErrorCode.UNSUPPORTED_OPERATION
11579
12437
  );
11580
12438
  }
11581
12439
  /**
@@ -11586,7 +12444,7 @@ var TrezorWalletAdapter = class extends BaseWalletAdapter {
11586
12444
  async getTokenBalance(_asset) {
11587
12445
  throw new WalletError(
11588
12446
  "Hardware wallets do not track balances. Use an RPC provider.",
11589
- import_types31.WalletErrorCode.UNSUPPORTED_OPERATION
12447
+ import_types49.WalletErrorCode.UNSUPPORTED_OPERATION
11590
12448
  );
11591
12449
  }
11592
12450
  // ─── Account Management ─────────────────────────────────────────────────────
@@ -11867,8 +12725,8 @@ function createTrezorAdapter(config) {
11867
12725
  }
11868
12726
 
11869
12727
  // src/wallet/hardware/mock.ts
11870
- var import_types33 = require("@sip-protocol/types");
11871
- var import_utils15 = require("@noble/hashes/utils");
12728
+ var import_types51 = require("@sip-protocol/types");
12729
+ var import_utils21 = require("@noble/hashes/utils");
11872
12730
  var MockLedgerAdapter = class extends BaseWalletAdapter {
11873
12731
  chain;
11874
12732
  name = "mock-ledger";
@@ -12015,7 +12873,7 @@ var MockLedgerAdapter = class extends BaseWalletAdapter {
12015
12873
  async getBalance() {
12016
12874
  throw new WalletError(
12017
12875
  "Hardware wallets do not track balances",
12018
- import_types33.WalletErrorCode.UNSUPPORTED_OPERATION
12876
+ import_types51.WalletErrorCode.UNSUPPORTED_OPERATION
12019
12877
  );
12020
12878
  }
12021
12879
  /**
@@ -12024,7 +12882,7 @@ var MockLedgerAdapter = class extends BaseWalletAdapter {
12024
12882
  async getTokenBalance(_asset) {
12025
12883
  throw new WalletError(
12026
12884
  "Hardware wallets do not track balances",
12027
- import_types33.WalletErrorCode.UNSUPPORTED_OPERATION
12885
+ import_types51.WalletErrorCode.UNSUPPORTED_OPERATION
12028
12886
  );
12029
12887
  }
12030
12888
  /**
@@ -12113,15 +12971,15 @@ var MockLedgerAdapter = class extends BaseWalletAdapter {
12113
12971
  }
12114
12972
  }
12115
12973
  generateMockAddress(index) {
12116
- const bytes = (0, import_utils15.randomBytes)(20);
12974
+ const bytes = (0, import_utils21.randomBytes)(20);
12117
12975
  bytes[0] = index;
12118
- return `0x${(0, import_utils15.bytesToHex)(bytes)}`;
12976
+ return `0x${(0, import_utils21.bytesToHex)(bytes)}`;
12119
12977
  }
12120
12978
  generateMockPublicKey(index) {
12121
- const bytes = (0, import_utils15.randomBytes)(33);
12979
+ const bytes = (0, import_utils21.randomBytes)(33);
12122
12980
  bytes[0] = 2;
12123
12981
  bytes[1] = index;
12124
- return `0x${(0, import_utils15.bytesToHex)(bytes)}`;
12982
+ return `0x${(0, import_utils21.bytesToHex)(bytes)}`;
12125
12983
  }
12126
12984
  generateMockSignature(data) {
12127
12985
  const sig = new Uint8Array(65);
@@ -12130,7 +12988,7 @@ var MockLedgerAdapter = class extends BaseWalletAdapter {
12130
12988
  sig[32 + i] = (data[i % data.length] ?? 0) ^ i * 11;
12131
12989
  }
12132
12990
  sig[64] = 27;
12133
- return `0x${(0, import_utils15.bytesToHex)(sig)}`;
12991
+ return `0x${(0, import_utils21.bytesToHex)(sig)}`;
12134
12992
  }
12135
12993
  delay(ms) {
12136
12994
  return new Promise((resolve) => setTimeout(resolve, ms));
@@ -12254,13 +13112,13 @@ var MockTrezorAdapter = class extends BaseWalletAdapter {
12254
13112
  async getBalance() {
12255
13113
  throw new WalletError(
12256
13114
  "Hardware wallets do not track balances",
12257
- import_types33.WalletErrorCode.UNSUPPORTED_OPERATION
13115
+ import_types51.WalletErrorCode.UNSUPPORTED_OPERATION
12258
13116
  );
12259
13117
  }
12260
13118
  async getTokenBalance(_asset) {
12261
13119
  throw new WalletError(
12262
13120
  "Hardware wallets do not track balances",
12263
- import_types33.WalletErrorCode.UNSUPPORTED_OPERATION
13121
+ import_types51.WalletErrorCode.UNSUPPORTED_OPERATION
12264
13122
  );
12265
13123
  }
12266
13124
  async getAccounts(startIndex = 0, count = 5) {
@@ -12319,15 +13177,15 @@ var MockTrezorAdapter = class extends BaseWalletAdapter {
12319
13177
  }
12320
13178
  }
12321
13179
  generateMockAddress(index) {
12322
- const bytes = (0, import_utils15.randomBytes)(20);
13180
+ const bytes = (0, import_utils21.randomBytes)(20);
12323
13181
  bytes[0] = index + 100;
12324
- return `0x${(0, import_utils15.bytesToHex)(bytes)}`;
13182
+ return `0x${(0, import_utils21.bytesToHex)(bytes)}`;
12325
13183
  }
12326
13184
  generateMockPublicKey(index) {
12327
- const bytes = (0, import_utils15.randomBytes)(33);
13185
+ const bytes = (0, import_utils21.randomBytes)(33);
12328
13186
  bytes[0] = 3;
12329
13187
  bytes[1] = index + 100;
12330
- return `0x${(0, import_utils15.bytesToHex)(bytes)}`;
13188
+ return `0x${(0, import_utils21.bytesToHex)(bytes)}`;
12331
13189
  }
12332
13190
  generateMockSignature(data) {
12333
13191
  const sig = new Uint8Array(65);
@@ -12336,7 +13194,7 @@ var MockTrezorAdapter = class extends BaseWalletAdapter {
12336
13194
  sig[32 + i] = (data[i % data.length] ?? 0) ^ i * 17;
12337
13195
  }
12338
13196
  sig[64] = 28;
12339
- return `0x${(0, import_utils15.bytesToHex)(sig)}`;
13197
+ return `0x${(0, import_utils21.bytesToHex)(sig)}`;
12340
13198
  }
12341
13199
  delay(ms) {
12342
13200
  return new Promise((resolve) => setTimeout(resolve, ms));
@@ -12350,12 +13208,12 @@ function createMockTrezorAdapter(config) {
12350
13208
  }
12351
13209
 
12352
13210
  // src/wallet/index.ts
12353
- var import_types36 = require("@sip-protocol/types");
13211
+ var import_types54 = require("@sip-protocol/types");
12354
13212
 
12355
13213
  // src/proofs/browser.ts
12356
13214
  var import_noir_js = require("@noir-lang/noir_js");
12357
13215
  var import_bb = require("@aztec/bb.js");
12358
- var import_secp256k14 = require("@noble/curves/secp256k1");
13216
+ var import_secp256k17 = require("@noble/curves/secp256k1");
12359
13217
 
12360
13218
  // src/proofs/circuits/funding_proof.json
12361
13219
  var funding_proof_default = { noir_version: "1.0.0-beta.15+83245db91dcf63420ef4bcbbd85b98f397fee663", hash: "3859649086066977477", abi: { parameters: [{ name: "minimum_required", type: { kind: "integer", sign: "unsigned", width: 64 }, visibility: "public" }, { name: "asset_id", type: { kind: "field" }, visibility: "public" }, { name: "balance", type: { kind: "integer", sign: "unsigned", width: 64 }, visibility: "private" }, { name: "blinding", type: { kind: "field" }, visibility: "private" }], return_type: { abi_type: { kind: "array", length: 32, type: { kind: "integer", sign: "unsigned", width: 8 } }, visibility: "public" }, error_types: { "2900908756532713827": { error_kind: "string", string: "Insufficient balance" }, "15764276373176857197": { error_kind: "string", string: "Stack too deep" }, "15835548349546956319": { error_kind: "string", string: "Field failed to decompose into specified 32 limbs" } } }, bytecode: "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", debug_symbols: "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", file_map: { "17": { source: `use crate::field::field_less_than;
@@ -13368,7 +14226,7 @@ var BrowserNoirProvider = class _BrowserNoirProvider {
13368
14226
  * Derive secp256k1 public key coordinates from a private key
13369
14227
  */
13370
14228
  static derivePublicKey(privateKey) {
13371
- const uncompressedPubKey = import_secp256k14.secp256k1.getPublicKey(privateKey, false);
14229
+ const uncompressedPubKey = import_secp256k17.secp256k1.getPublicKey(privateKey, false);
13372
14230
  const x = Array.from(uncompressedPubKey.slice(1, 33));
13373
14231
  const y = Array.from(uncompressedPubKey.slice(33, 65));
13374
14232
  return { x, y };
@@ -13581,7 +14439,7 @@ var BrowserNoirProvider = class _BrowserNoirProvider {
13581
14439
  message: "Proof generated successfully"
13582
14440
  });
13583
14441
  const commitmentHashBytes = returnValue;
13584
- const commitmentHashHex = bytesToHex7(new Uint8Array(commitmentHashBytes));
14442
+ const commitmentHashHex = bytesToHex11(new Uint8Array(commitmentHashBytes));
13585
14443
  const publicInputs = [
13586
14444
  `0x${params.minimumRequired.toString(16).padStart(16, "0")}`,
13587
14445
  `0x${this.assetIdToField(params.assetId)}`,
@@ -13589,7 +14447,7 @@ var BrowserNoirProvider = class _BrowserNoirProvider {
13589
14447
  ];
13590
14448
  const proof = {
13591
14449
  type: "funding",
13592
- proof: `0x${bytesToHex7(proofData.proof)}`,
14450
+ proof: `0x${bytesToHex11(proofData.proof)}`,
13593
14451
  publicInputs
13594
14452
  };
13595
14453
  return { proof, publicInputs };
@@ -13683,7 +14541,7 @@ var BrowserNoirProvider = class _BrowserNoirProvider {
13683
14541
  ];
13684
14542
  const proof = {
13685
14543
  type: "validity",
13686
- proof: `0x${bytesToHex7(proofData.proof)}`,
14544
+ proof: `0x${bytesToHex11(proofData.proof)}`,
13687
14545
  publicInputs
13688
14546
  };
13689
14547
  return { proof, publicInputs };
@@ -13783,7 +14641,7 @@ var BrowserNoirProvider = class _BrowserNoirProvider {
13783
14641
  ];
13784
14642
  const proof = {
13785
14643
  type: "fulfillment",
13786
- proof: `0x${bytesToHex7(proofData.proof)}`,
14644
+ proof: `0x${bytesToHex11(proofData.proof)}`,
13787
14645
  publicInputs
13788
14646
  };
13789
14647
  return { proof, publicInputs };
@@ -13823,7 +14681,7 @@ var BrowserNoirProvider = class _BrowserNoirProvider {
13823
14681
  }
13824
14682
  try {
13825
14683
  const proofHex = proof.proof.startsWith("0x") ? proof.proof.slice(2) : proof.proof;
13826
- const proofBytes = hexToBytes5(proofHex);
14684
+ const proofBytes = hexToBytes9(proofHex);
13827
14685
  const isValid = await backend.verifyProof({
13828
14686
  proof: proofBytes,
13829
14687
  publicInputs: proof.publicInputs.map(
@@ -13874,14 +14732,14 @@ var BrowserNoirProvider = class _BrowserNoirProvider {
13874
14732
  }
13875
14733
  async computeCommitmentHash(balance, blindingFactor, assetId) {
13876
14734
  const blindingField = this.bytesToField(blindingFactor);
13877
- const { sha256: sha25611 } = await import("@noble/hashes/sha256");
14735
+ const { sha256: sha25615 } = await import("@noble/hashes/sha256");
13878
14736
  const { bytesToHex: nobleToHex } = await import("@noble/hashes/utils");
13879
14737
  const preimage = new Uint8Array([
13880
14738
  ...this.bigintToBytes(balance, 8),
13881
14739
  ...blindingFactor.slice(0, 32),
13882
- ...hexToBytes5(this.assetIdToField(assetId))
14740
+ ...hexToBytes9(this.assetIdToField(assetId))
13883
14741
  ]);
13884
- const hash2 = sha25611(preimage);
14742
+ const hash2 = sha25615(preimage);
13885
14743
  const commitmentHash = nobleToHex(hash2);
13886
14744
  return { commitmentHash, blindingField };
13887
14745
  }
@@ -13927,49 +14785,49 @@ var BrowserNoirProvider = class _BrowserNoirProvider {
13927
14785
  return bytes;
13928
14786
  }
13929
14787
  async computeSenderCommitment(senderAddressField, senderBlindingField) {
13930
- const { sha256: sha25611 } = await import("@noble/hashes/sha256");
14788
+ const { sha256: sha25615 } = await import("@noble/hashes/sha256");
13931
14789
  const { bytesToHex: nobleToHex } = await import("@noble/hashes/utils");
13932
- const addressBytes = hexToBytes5(senderAddressField);
13933
- const blindingBytes = hexToBytes5(senderBlindingField.padStart(64, "0"));
14790
+ const addressBytes = hexToBytes9(senderAddressField);
14791
+ const blindingBytes = hexToBytes9(senderBlindingField.padStart(64, "0"));
13934
14792
  const preimage = new Uint8Array([...addressBytes, ...blindingBytes]);
13935
- const hash2 = sha25611(preimage);
14793
+ const hash2 = sha25615(preimage);
13936
14794
  const commitmentX = nobleToHex(hash2.slice(0, 16)).padStart(64, "0");
13937
14795
  const commitmentY = nobleToHex(hash2.slice(16, 32)).padStart(64, "0");
13938
14796
  return { commitmentX, commitmentY };
13939
14797
  }
13940
14798
  async computeNullifier(senderSecretField, intentHashField, nonceField) {
13941
- const { sha256: sha25611 } = await import("@noble/hashes/sha256");
14799
+ const { sha256: sha25615 } = await import("@noble/hashes/sha256");
13942
14800
  const { bytesToHex: nobleToHex } = await import("@noble/hashes/utils");
13943
- const secretBytes = hexToBytes5(senderSecretField.padStart(64, "0"));
13944
- const intentBytes = hexToBytes5(intentHashField);
13945
- const nonceBytes = hexToBytes5(nonceField.padStart(64, "0"));
14801
+ const secretBytes = hexToBytes9(senderSecretField.padStart(64, "0"));
14802
+ const intentBytes = hexToBytes9(intentHashField);
14803
+ const nonceBytes = hexToBytes9(nonceField.padStart(64, "0"));
13946
14804
  const preimage = new Uint8Array([...secretBytes, ...intentBytes, ...nonceBytes]);
13947
- const hash2 = sha25611(preimage);
14805
+ const hash2 = sha25615(preimage);
13948
14806
  return nobleToHex(hash2);
13949
14807
  }
13950
14808
  async computeOutputCommitment(outputAmount, outputBlinding) {
13951
- const { sha256: sha25611 } = await import("@noble/hashes/sha256");
14809
+ const { sha256: sha25615 } = await import("@noble/hashes/sha256");
13952
14810
  const { bytesToHex: nobleToHex } = await import("@noble/hashes/utils");
13953
14811
  const amountBytes = this.bigintToBytes(outputAmount, 8);
13954
14812
  const blindingBytes = outputBlinding.slice(0, 32);
13955
14813
  const preimage = new Uint8Array([...amountBytes, ...blindingBytes]);
13956
- const hash2 = sha25611(preimage);
14814
+ const hash2 = sha25615(preimage);
13957
14815
  const commitmentX = nobleToHex(hash2.slice(0, 16)).padStart(64, "0");
13958
14816
  const commitmentY = nobleToHex(hash2.slice(16, 32)).padStart(64, "0");
13959
14817
  return { commitmentX, commitmentY };
13960
14818
  }
13961
14819
  async computeSolverId(solverSecretField) {
13962
- const { sha256: sha25611 } = await import("@noble/hashes/sha256");
14820
+ const { sha256: sha25615 } = await import("@noble/hashes/sha256");
13963
14821
  const { bytesToHex: nobleToHex } = await import("@noble/hashes/utils");
13964
- const secretBytes = hexToBytes5(solverSecretField.padStart(64, "0"));
13965
- const hash2 = sha25611(secretBytes);
14822
+ const secretBytes = hexToBytes9(solverSecretField.padStart(64, "0"));
14823
+ const hash2 = sha25615(secretBytes);
13966
14824
  return nobleToHex(hash2);
13967
14825
  }
13968
14826
  async computeOracleMessageHash(recipient, amount, txHash, blockNumber) {
13969
- const { sha256: sha25611 } = await import("@noble/hashes/sha256");
13970
- const recipientBytes = hexToBytes5(this.hexToField(recipient));
14827
+ const { sha256: sha25615 } = await import("@noble/hashes/sha256");
14828
+ const recipientBytes = hexToBytes9(this.hexToField(recipient));
13971
14829
  const amountBytes = this.bigintToBytes(amount, 8);
13972
- const txHashBytes = hexToBytes5(this.hexToField(txHash));
14830
+ const txHashBytes = hexToBytes9(this.hexToField(txHash));
13973
14831
  const blockBytes = this.bigintToBytes(blockNumber, 8);
13974
14832
  const preimage = new Uint8Array([
13975
14833
  ...recipientBytes,
@@ -13977,11 +14835,11 @@ var BrowserNoirProvider = class _BrowserNoirProvider {
13977
14835
  ...txHashBytes,
13978
14836
  ...blockBytes
13979
14837
  ]);
13980
- const hash2 = sha25611(preimage);
14838
+ const hash2 = sha25615(preimage);
13981
14839
  return Array.from(hash2);
13982
14840
  }
13983
14841
  getPublicKeyCoordinates(privateKey) {
13984
- const uncompressedPubKey = import_secp256k14.secp256k1.getPublicKey(privateKey, false);
14842
+ const uncompressedPubKey = import_secp256k17.secp256k1.getPublicKey(privateKey, false);
13985
14843
  const x = Array.from(uncompressedPubKey.slice(1, 33));
13986
14844
  const y = Array.from(uncompressedPubKey.slice(33, 65));
13987
14845
  return { x, y };
@@ -14534,10 +15392,13 @@ var ProofWorker = class _ProofWorker {
14534
15392
  // Annotate the CommonJS export names for ESM import in node:
14535
15393
  0 && (module.exports = {
14536
15394
  ATTESTATION_VERSION,
15395
+ AptosStealthService,
14537
15396
  BaseWalletAdapter,
14538
15397
  BrowserNoirProvider,
14539
15398
  CHAIN_NUMERIC_IDS,
15399
+ COSMOS_CHAIN_PREFIXES,
14540
15400
  ComplianceManager,
15401
+ CosmosStealthService,
14541
15402
  CryptoError,
14542
15403
  DEFAULT_THRESHOLD,
14543
15404
  DEFAULT_TOTAL_ORACLES,
@@ -14603,18 +15464,22 @@ var ProofWorker = class _ProofWorker {
14603
15464
  addBlindings,
14604
15465
  addCommitments,
14605
15466
  addOracle,
15467
+ aptosAddressToAuthKey,
14606
15468
  attachProofs,
14607
15469
  base58ToHex,
14608
15470
  browserBytesToHex,
14609
15471
  browserHexToBytes,
15472
+ checkAptosStealthAddress,
14610
15473
  checkEd25519StealthAddress,
14611
15474
  checkMobileWASMCompatibility,
14612
15475
  checkStealthAddress,
14613
15476
  commit,
14614
15477
  commitZero,
14615
15478
  computeAttestationHash,
15479
+ computeTweakedKey,
14616
15480
  createCommitment,
14617
15481
  createEthereumAdapter,
15482
+ createKeySpendOnlyOutput,
14618
15483
  createLedgerAdapter,
14619
15484
  createMockEthereumAdapter,
14620
15485
  createMockEthereumProvider,
@@ -14633,6 +15498,7 @@ var ProofWorker = class _ProofWorker {
14633
15498
  createShieldedPayment,
14634
15499
  createSmartRouter,
14635
15500
  createSolanaAdapter,
15501
+ createTaprootOutput,
14636
15502
  createTrezorAdapter,
14637
15503
  createWalletFactory,
14638
15504
  createWorkerBlobURL,
@@ -14641,8 +15507,10 @@ var ProofWorker = class _ProofWorker {
14641
15507
  createZcashShieldedService,
14642
15508
  createZcashSwapService,
14643
15509
  decodeStealthMetaAddress,
15510
+ decodeTaprootAddress,
14644
15511
  decryptMemo,
14645
15512
  decryptWithViewing,
15513
+ deriveAptosStealthPrivateKey,
14646
15514
  deriveEd25519StealthPrivateKey,
14647
15515
  deriveOracleId,
14648
15516
  deriveStealthPrivateKey,
@@ -14654,6 +15522,7 @@ var ProofWorker = class _ProofWorker {
14654
15522
  detectMobileBrowser,
14655
15523
  detectMobilePlatform,
14656
15524
  detectSolanaWallets,
15525
+ ed25519PublicKeyToAptosAddress,
14657
15526
  ed25519PublicKeyToNearAddress,
14658
15527
  ed25519PublicKeyToSolanaAddress,
14659
15528
  encodeStealthMetaAddress,
@@ -14662,7 +15531,10 @@ var ProofWorker = class _ProofWorker {
14662
15531
  formatStablecoinAmount,
14663
15532
  fromHex,
14664
15533
  fromStablecoinUnits,
15534
+ generateAptosStealthAddress,
14665
15535
  generateBlinding,
15536
+ generateCosmosStealthAddress,
15537
+ generateCosmosStealthMetaAddress,
14666
15538
  generateEd25519StealthAddress,
14667
15539
  generateEd25519StealthMetaAddress,
14668
15540
  generateIntentId,
@@ -14695,6 +15567,7 @@ var ProofWorker = class _ProofWorker {
14695
15567
  getStablecoinsForChain,
14696
15568
  getSupportedStablecoins,
14697
15569
  getTimeRemaining,
15570
+ getXOnlyPublicKey,
14698
15571
  hasEnoughOracles,
14699
15572
  hasErrorCode,
14700
15573
  hasRequiredProofs,
@@ -14712,8 +15585,10 @@ var ProofWorker = class _ProofWorker {
14712
15585
  isStablecoinOnChain,
14713
15586
  isTablet,
14714
15587
  isValidAmount,
15588
+ isValidAptosAddress,
14715
15589
  isValidChainId,
14716
15590
  isValidCompressedPublicKey,
15591
+ isValidCosmosAddress,
14717
15592
  isValidEd25519PublicKey,
14718
15593
  isValidHex,
14719
15594
  isValidHexLength,
@@ -14725,12 +15600,17 @@ var ProofWorker = class _ProofWorker {
14725
15600
  isValidSlippage,
14726
15601
  isValidSolanaAddress,
14727
15602
  isValidStealthMetaAddress,
15603
+ isValidTaprootAddress,
14728
15604
  nearAddressToEd25519PublicKey,
14729
15605
  normalizeAddress,
14730
15606
  notConnectedError,
14731
15607
  publicKeyToEthAddress,
14732
15608
  registerWallet,
14733
15609
  removeOracle,
15610
+ schnorrSign,
15611
+ schnorrSignHex,
15612
+ schnorrVerify,
15613
+ schnorrVerifyHex,
14734
15614
  secureWipe,
14735
15615
  secureWipeAll,
14736
15616
  serializeAttestationMessage,
@@ -14739,6 +15619,7 @@ var ProofWorker = class _ProofWorker {
14739
15619
  signAttestationMessage,
14740
15620
  solanaAddressToEd25519PublicKey,
14741
15621
  solanaPublicKeyToHex,
15622
+ stealthKeyToCosmosAddress,
14742
15623
  subtractBlindings,
14743
15624
  subtractCommitments,
14744
15625
  supportsSharedArrayBuffer,
@@ -14750,6 +15631,7 @@ var ProofWorker = class _ProofWorker {
14750
15631
  supportsWebHID,
14751
15632
  supportsWebUSB,
14752
15633
  supportsWebWorkers,
15634
+ taprootAddress,
14753
15635
  toHex,
14754
15636
  toStablecoinUnits,
14755
15637
  trackIntent,