@arcanetech/privacy-sdk-stellar 0.4.1 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +134 -27
- package/dist/index.js.map +1 -1
- package/dist/node.d.ts +1 -1
- package/dist/node.js +134 -27
- package/dist/node.js.map +1 -1
- package/dist/transact/index.d.ts +1 -1
- package/dist/transact/index.js +132 -26
- package/dist/transact/index.js.map +1 -1
- package/package.json +2 -2
package/dist/node.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/node.ts","../src/assets/load-node.ts","../src/client/resolve-config.ts","../src/client/validate-config.ts","../src/client/compose.ts","../src/adapters/policy.ts","../src/policy/disclosure.ts","../src/policy/disclosure-routes.ts","../src/transact/engine/execution/submit-prepared.ts","../src/adapters/record-selection.ts","../src/transact/transfer-source/types.ts","../src/transact/transfer-source/resolve.ts","../src/transact/transfer-source/verify-private-records.ts","../src/contracts/pool/pool-domain-service.ts","../src/rpc/server.ts","../src/contracts/pool/create-pool-client.ts","../src/contracts/signing.ts","../src/contracts/registry/create-registry-client.ts","../src/contracts/contract-context.ts","../src/transact/private-address/record-coin.ts","../src/transact/pool/service.ts","../src/transact/merkle/field-decimal.ts","../src/transact/private-address/codec.ts","../src/transact/proofs/withdraw/transact-proof.ts","../src/transact/proofs/transaction-input.ts","../src/transact/stellar/token-contract.ts","../src/transact/zk/slots.ts","../src/transact/proofs/confidential/helpers.ts","../src/transact/audit/parameters.ts","../src/transact/proofs/withdraw/helpers.ts","../src/transact/stellar/account.ts","../src/transact/encoding/priv-key-scalar-from-recipient-hex.ts","../src/transact/zk/circuit-config.ts","../src/transact/environment/zk-config-nonce.ts","../src/transact/pool/aligned-deposit.ts","../src/transact/pool/singleton.ts","../src/transact/merkle/fetch-contract.ts","../src/transact/merkle/encoding.ts","../src/transact/merkle/state-port.ts","../src/transact/engine/prepare/shared.ts","../src/adapters/transfer-output-records.ts","../src/adapters/transfer-prepare.ts","../src/adapters/network.ts","../src/state/foundation/paths.ts","../src/state/schemas/shared.ts","../src/state/foundation/coerce.ts","../src/state/read/normalize/assets.ts","../src/state/read/normalize/deliveries.ts","../src/state/read/normalize/pool.ts","../src/state/read/normalize/registry.ts","../src/state/read/normalize/records.ts","../src/state/read/normalize/wallet.ts","../src/state/filters/register-schemas.ts","../src/state/filters/ops.ts","../src/state/bridge/call-types.ts","../src/state/schemas/assets/catalog.ts","../src/state/definitions/assets.ts","../src/state/schemas/assets/balances.ts","../src/state/foundation/keys.ts","../src/state/definitions/balances.ts","../src/state/schemas/claims/deliveries.ts","../src/state/definitions/deliveries.ts","../src/state/schemas/pool/merkle.ts","../src/state/definitions/pool.ts","../src/state/schemas/records/private.ts","../src/state/schemas/records/transactions.ts","../src/state/definitions/records.ts","../src/state/schemas/registry/lookup.ts","../src/state/definitions/registry.ts","../src/state/definitions/transactions.ts","../src/state/schemas/wallet/scalar.ts","../src/state/schemas/wallet/private-address.ts","../src/state/definitions/wallet.ts","../src/state/definitions/index.ts","../src/state/service/base.ts","../src/state/service/assets/balance-methods.ts","../src/state/service/assets/upsert-methods.ts","../src/state/service/assets/catalog-methods.ts","../src/state/service/assets/index.ts","../src/state/service/deliveries/incoming-methods.ts","../src/state/service/deliveries/sync-methods.ts","../src/state/service/deliveries/index.ts","../src/state/service/pool/ephemeral.ts","../src/state/service/pool/merkle.ts","../src/state/service/records/private-record-upsert.ts","../src/state/service/records/private-methods.ts","../src/state/service/records/transaction-methods.ts","../src/state/service/records/index.ts","../src/state/service/registry/lookup-read.ts","../src/state/service/registry/lookup-write.ts","../src/state/service/registry/lookup.ts","../src/state/service/registry/wallet-record-methods.ts","../src/state/service/registry/wallet-scalar-methods.ts","../src/state/service/registry/wallet-address.ts","../src/state/service/compose.ts","../src/state/service/index.ts","../src/contracts/registry/registry-domain-service.ts","../src/transact/submit/ttl-preflight.ts","../src/contracts/registry/resolve-transfer-recipient.ts","../src/transact/escrow/derived-escrow-recipient.ts","../src/rpc/transactions.ts","../src/rpc/soroban-transaction-meta.ts","../src/rpc/stellar-rpc-unix-timestamp.ts","../src/rpc/polling.ts","../src/client/network.ts","../src/client/nullifier-checker.ts","../src/client/pool-sync.ts","../src/client/network-facet.ts","../src/client/state-delegates/assets.ts","../src/client/state-delegates/deliveries.ts","../src/client/state-delegates/pool.ts","../src/client/state-delegates/records.ts","../src/client/state-delegates/registry.ts","../src/client/state-delegates/index.ts","../src/client/client.ts","../src/transact/merkle/attach-state-ports.ts","../src/client/resolve-transact-environment.ts","../src/transact/engine/default-factory.ts","../src/transact/pool/proof-types.ts","../src/transact/engine/prepare/deposit.ts","../src/transact/engine/prepare/transfer-helpers.ts","../src/transact/engine/prepare/spend.ts","../src/transact/encoding/ephemeral-key.ts","../src/transact/escrow/require-escrow-spend-scalar.ts","../src/transact/engine/spend-proof-context.ts","../src/transact/proofs/confidential/recipient-change-deposits.ts","../src/transact/proofs/confidential/shared.ts","../src/transact/proofs/confidential/dual.ts","../src/transact/proofs/confidential/single.ts","../src/transact/engine/transfer-proof-at-execute.ts","../src/transact/engine/transfer-finalize.ts","../src/transact/engine/execute.ts","../src/transact/kyt/passage/inspect.ts","../src/transact/kyt/inspect-error.ts","../src/transact/kyt/passage/poll.ts","../src/transact/kyt/passage/submit.ts","../src/transact/submit/zk-config-ttl.ts","../src/transact/submit/pool-transact.ts","../src/transact/submit/soroban-confidential-transfer.ts","../src/transact/engine/submit.ts","../src/transact/engine/browser-stellar.ts","../src/client/create.ts"],"sourcesContent":["import { createRejectedOperation } from '@arcanetech/privacy-sdk-core';\nimport { loadNodeAssets } from './assets/load-node.js';\nimport {\n createStellarPrivacyClientFromResolvedConfig,\n resolveStellarPrivacyClientConfig,\n} from './client/resolve-config.js';\nimport { createDefaultTransactEngine } from './transact/engine/default-factory.js';\nimport type { StellarNodePrivacyClientConfig } from './types.node.js';\n\nexport type { CreateStellarPrivacyClientResult } from './client/create.js';\nexport {\n createStellarPrivacyClient,\n isPreparedOperation,\n isStellarPrivacyClient,\n} from './client/create.js';\nexport type {\n StellarBrowserPrivacyClientConfig,\n StellarPrivacyClientConfig,\n} from './client/create.js';\n\nexport type {\n StellarNodeAssets,\n StellarNodePrivacyClientConfig,\n} from './types.node.js';\n\nexport async function createStellarPrivacyClientFromNodeConfig(\n config: StellarNodePrivacyClientConfig,\n): Promise<\n | ReturnType<typeof createStellarPrivacyClientFromResolvedConfig>\n | ReturnType<typeof createRejectedOperation>\n> {\n const resolved = await resolveStellarPrivacyClientConfig(config, async (input) => {\n if (input.transactEngine !== undefined) {\n return input.transactEngine;\n }\n const browserAssets = await loadNodeAssets(input.assets);\n return createDefaultTransactEngine(browserAssets, input.transactEnvironment);\n });\n\n if (!resolved.ok) {\n return resolved.result;\n }\n\n return createStellarPrivacyClientFromResolvedConfig(resolved.config);\n}\n","import type { StellarNodeAssets } from '../types.node.js';\n\nexport async function loadNodeAssets(assets: StellarNodeAssets): Promise<{\n sdkWasm: ArrayBuffer;\n}> {\n const sdkWasm = await readAssetFile(assets.sdkWasmPath);\n return { sdkWasm };\n}\n\nasync function readAssetFile(path: string): Promise<ArrayBuffer> {\n const { readFile } = await import('fs/promises');\n const buffer = await readFile(path);\n return buffer.buffer.slice(\n buffer.byteOffset,\n buffer.byteOffset + buffer.byteLength,\n ) as ArrayBuffer;\n}\n","import { createRejectedOperation } from '@arcanetech/privacy-sdk-core';\nimport type { StellarTransactEnvironment } from '../transact/environment/types.js';\nimport type {\n ResolvedStellarPrivacyClientConfig,\n StellarPrivacyClientConfigBase,\n StellarTransactEngine,\n} from '../types.js';\nimport { validateStellarConfig } from './validate-config.js';\nimport {\n createStellarPrivacyClientInstance,\n type StellarPrivacyClient,\n} from './client.js';\nimport { resolveClientTransactEnvironment } from './resolve-transact-environment.js';\n\nexport async function resolveStellarPrivacyClientConfig<\n TConfig extends StellarPrivacyClientConfigBase,\n>(\n config: TConfig,\n createEngine: (config: TConfig) => Promise<StellarTransactEngine>,\n): Promise<\n | { ok: true; config: ResolvedStellarPrivacyClientConfig & TConfig }\n | { ok: false; result: ReturnType<typeof createRejectedOperation> }\n> {\n const errors = validateStellarConfig(config);\n if (errors.length > 0) {\n return { ok: false, result: createRejectedOperation(errors) };\n }\n\n const browserConfig = config as {\n transactEnvironment?: StellarTransactEnvironment;\n auditPublicKeyHex?: string;\n };\n const sourceTransactEnvironment = browserConfig.transactEnvironment;\n const auditPublicKeyHex = browserConfig.auditPublicKeyHex;\n const transactEnvironment = resolveClientTransactEnvironment({\n ...(sourceTransactEnvironment ? { sourceTransactEnvironment } : {}),\n ...(auditPublicKeyHex ? { auditPublicKeyHex } : {}),\n state: config.state,\n });\n const engineConfig =\n transactEnvironment === undefined\n ? config\n : ({ ...config, transactEnvironment } as TConfig);\n\n const transactEngine = config.transactEngine ?? (await createEngine(engineConfig));\n\n const resolvedConfig: ResolvedStellarPrivacyClientConfig & TConfig = {\n ...config,\n transactEngine,\n ...(transactEnvironment === undefined ? {} : { transactEnvironment }),\n };\n\n return {\n ok: true,\n config: resolvedConfig,\n };\n}\n\nexport function createStellarPrivacyClientFromResolvedConfig(\n config: ResolvedStellarPrivacyClientConfig,\n): StellarPrivacyClient {\n return createStellarPrivacyClientInstance(config);\n}\n\nexport type { ResolvedStellarPrivacyClientConfig } from '../types.js';\n","import {\n missingDependencyError,\n type PrivacySdkError,\n} from '@arcanetech/privacy-sdk-core';\nimport type { StellarPrivacyClientConfigBase } from '../types.js';\n\nexport function validateStellarConfig(\n config: Partial<StellarPrivacyClientConfigBase & { assets?: unknown }>,\n): PrivacySdkError[] {\n const errors: PrivacySdkError[] = [];\n\n if (config.network === undefined) {\n errors.push(\n missingDependencyError('network', 'Network configuration is required.'),\n );\n }\n if (config.wallet === undefined) {\n errors.push(missingDependencyError('wallet', 'Wallet adapter is required.'));\n }\n if (config.state === undefined) {\n errors.push(missingDependencyError('state', 'State adapter is required.'));\n }\n if (config.assets === undefined) {\n errors.push(missingDependencyError('crypto', 'ZK assets are required.'));\n }\n\n return errors;\n}\n","import {\n AdapterPrivacyClient,\n type TransferIntent,\n} from '@arcanetech/privacy-sdk-core';\nimport {\n createStellarNetworkAdapter,\n createStellarPolicyAdapter,\n} from '../adapters/index.js';\nimport {\n createStellarStateService,\n createStellarStorageAdapterFromState,\n type StellarStateService,\n} from '../state/index.js';\nimport type {\n ResolvedStellarPrivacyClientConfig,\n StellarAddress,\n StellarAssetId,\n StellarOperationReceipt,\n StellarPreparedOperation,\n StellarPrivateRecord,\n StellarTransferIntent,\n} from '../types.js';\nimport { createNullifierSpentChecker } from './nullifier-checker.js';\nimport { createNetworkFacet } from './network-facet.js';\n\nfunction createOperationsFacet(\n config: ResolvedStellarPrivacyClientConfig,\n state: StellarStateService,\n) {\n const storage = createStellarStorageAdapterFromState(state);\n const checkNullifierSpent = createNullifierSpentChecker(config.transactEnvironment);\n const client = new AdapterPrivacyClient<\n StellarAddress,\n StellarAssetId,\n bigint,\n StellarPreparedOperation['submissionPayload'],\n StellarPrivateRecord,\n StellarPreparedOperation,\n StellarOperationReceipt\n >({\n wallet: {\n getAddress: () => config.wallet.getAddress(),\n authorizeMessage: (message) => config.wallet.authorizeMessage(message),\n authorizePayload: (payload) => config.wallet.signTransactionPayload(payload),\n },\n storage,\n network: createStellarNetworkAdapter({\n storage,\n wallet: config.wallet,\n engine: config.transactEngine,\n poolContract: config.network.poolContract,\n ...(checkNullifierSpent ? { checkNullifierSpent } : {}),\n }),\n policy: createStellarPolicyAdapter(config.policy),\n });\n\n return {\n deposit: client.deposit.bind(client),\n withdraw: client.withdraw.bind(client),\n transfer: (intent: StellarTransferIntent) =>\n client.transfer(\n intent as unknown as TransferIntent<StellarAddress, StellarAssetId, bigint>,\n ),\n };\n}\n\nexport function composeStellarPrivacyClient(\n config: ResolvedStellarPrivacyClientConfig,\n) {\n const state = createStellarStateService(config.state);\n const operations = createOperationsFacet(config, state);\n const network = createNetworkFacet({\n transactEnvironment: config.transactEnvironment,\n state,\n });\n\n return {\n state,\n operations,\n network,\n transactEnvironment: config.transactEnvironment,\n };\n}\n\nexport type ComposedStellarPrivacyClient = ReturnType<\n typeof composeStellarPrivacyClient\n>;\n","import type {\n DepositIntent,\n PolicyAdapter,\n PrivacySdkError,\n WithdrawIntent,\n} from '@arcanetech/privacy-sdk-core';\nimport { executionError } from '@arcanetech/privacy-sdk-core';\nimport { validateStellarDisclosure } from '../policy/disclosure.js';\nimport type {\n StellarAddress,\n StellarAssetId,\n StellarPolicyAdapter,\n StellarTransferIntent,\n} from '../types.js';\n\ntype StellarIntent =\n | DepositIntent<StellarAddress, StellarAssetId, bigint>\n | StellarTransferIntent\n | WithdrawIntent<StellarAddress, StellarAssetId, bigint>;\n\nexport function createStellarPolicyAdapter(\n policy?: StellarPolicyAdapter,\n): PolicyAdapter<StellarAddress, StellarAssetId, bigint> {\n return {\n validateDeposit: async (intent) => [\n ...validateStellarDisclosure('deposit', intent),\n ...(await runExternalPolicy('deposit', intent, policy)),\n ],\n validateTransfer: async (intent) => [\n ...validateStellarDisclosure('transfer', intent),\n ...(await runExternalPolicy('transfer', intent, policy)),\n ],\n validateWithdraw: async (intent) => [\n ...validateStellarDisclosure('withdraw', intent),\n ...(await runExternalPolicy('withdraw', intent, policy)),\n ],\n };\n}\n\nasync function runExternalPolicy(\n kind: 'deposit' | 'transfer' | 'withdraw',\n intent: StellarIntent,\n policy: StellarPolicyAdapter | undefined,\n): Promise<PrivacySdkError[]> {\n if (policy === undefined) {\n return [];\n }\n\n try {\n await policy.inspectOperation(kind, intent);\n return [];\n } catch (error) {\n return [\n executionError(\n error instanceof Error ? error.message : 'Policy inspection failed.',\n 'policyCheck',\n ),\n ];\n }\n}\n","import {\n unsupportedDisclosureError,\n type DepositIntent,\n type PrivacySdkError,\n type WithdrawIntent,\n} from '@arcanetech/privacy-sdk-core';\nimport type {\n StellarAddress,\n StellarAssetId,\n StellarTransferIntent,\n} from '../types.js';\nimport {\n isPublicStellarRecipientTransfer,\n validatePublicRecipientTransferDisclosure,\n} from './disclosure-routes.js';\n\ntype Intent =\n | DepositIntent<StellarAddress, StellarAssetId, bigint>\n | StellarTransferIntent\n | WithdrawIntent<StellarAddress, StellarAssetId, bigint>;\n\nfunction isPublicWithdrawRoute(intent: Intent): boolean {\n return (\n intent.disclosure.recipientAddress === 'public' ||\n intent.disclosure.assetAddress === 'public' ||\n intent.disclosure.amount === 'public'\n );\n}\n\nfunction rejectPrivatePublicRouteFields(\n intent: Intent,\n errors: PrivacySdkError[],\n assetMessage: string,\n amountMessage: string,\n): void {\n if (intent.disclosure.assetAddress === 'private') {\n errors.push(\n unsupportedDisclosureError('assetAddress', 'private', ['public'], assetMessage),\n );\n }\n if (intent.disclosure.amount === 'private') {\n errors.push(\n unsupportedDisclosureError('amount', 'private', ['public'], amountMessage),\n );\n }\n}\n\nexport function validateStellarDisclosure(\n kind: 'deposit' | 'transfer' | 'withdraw',\n intent: Intent,\n): PrivacySdkError[] {\n const errors: PrivacySdkError[] = [];\n\n if (kind === 'transfer' && isPublicStellarRecipientTransfer(intent)) {\n errors.push(...validatePublicRecipientTransferDisclosure(intent.disclosure));\n }\n\n if (kind === 'withdraw' && isPublicWithdrawRoute(intent)) {\n rejectPrivatePublicRouteFields(\n intent,\n errors,\n 'This withdrawal route publishes the asset identifier.',\n 'This withdrawal route publishes the withdrawal amount.',\n );\n }\n\n if (kind === 'deposit' && intent.disclosure.senderAddress === 'private') {\n errors.push(\n unsupportedDisclosureError(\n 'senderAddress',\n 'private',\n ['public'],\n 'Deposits from a public signer account cannot hide the sender address.',\n ),\n );\n }\n\n return errors;\n}\n","import {\n unsupportedDisclosureError,\n type DisclosurePolicy,\n type PrivacySdkError,\n} from '@arcanetech/privacy-sdk-core';\nimport type { StellarTransferIntent } from '../types.js';\n\nexport function validatePublicRecipientTransferDisclosure(\n disclosure: DisclosurePolicy,\n): PrivacySdkError[] {\n const errors: PrivacySdkError[] = [];\n const fields: Array<keyof DisclosurePolicy> = [\n 'recipientAddress',\n 'assetAddress',\n 'amount',\n ];\n const messages: Partial<Record<keyof DisclosurePolicy, string>> = {\n recipientAddress:\n 'Transfers to a public Stellar recipient must publish the recipient address.',\n assetAddress:\n 'Transfers to a public Stellar recipient must publish the asset identifier.',\n amount: 'Transfers to a public Stellar recipient must publish the transfer amount.',\n };\n for (const field of fields) {\n if (disclosure[field] === 'private') {\n errors.push(\n unsupportedDisclosureError(\n field,\n 'private',\n ['public'],\n messages[field] ?? 'This transfer route requires public disclosure.',\n ),\n );\n }\n }\n return errors;\n}\n\nexport function isPublicStellarRecipientTransfer(\n intent: StellarTransferIntent,\n): boolean {\n return intent.disclosure.recipientAddress === 'public';\n}\n","import type { ExecuteOptions } from '@arcanetech/privacy-sdk-core';\nimport {\n assertNotAborted,\n createOperationEventId,\n emitOperationEvent,\n executionError,\n isPrivacySdkError,\n userRejectedError,\n} from '@arcanetech/privacy-sdk-core';\nimport type {\n StellarOperationReceipt,\n StellarPreparedOperation,\n StellarStorageAdapter,\n StellarSubmissionPayload,\n StellarTransactEngine,\n StellarWalletAdapter,\n} from '../../../types.js';\n\nconst PRE_SUBMISSION_STAGES = [\n 'validation',\n 'stateRead',\n 'authorization',\n 'preparation',\n 'policyCheck',\n] as const;\n\ninterface SubmitPreparedOperationInput {\n prepared: StellarPreparedOperation;\n storage: StellarStorageAdapter;\n wallet: StellarWalletAdapter;\n engine: StellarTransactEngine;\n options?: ExecuteOptions;\n}\n\nexport async function submitPreparedOperation(\n input: SubmitPreparedOperationInput,\n): Promise<StellarOperationReceipt> {\n const eventId = createOperationEventId();\n\n try {\n emitPreSubmissionStages(input.options, eventId);\n const signedPayload = await signSubmissionPayload(input.wallet, input.prepared);\n const receipt = await submitAndConfirm(input, eventId, signedPayload);\n try {\n await commitStorageChanges(input, eventId, receipt);\n } catch (error) {\n handleStorageCommitFailure(error, input.options, eventId, receipt);\n }\n return receipt;\n } catch (error) {\n handleSubmissionFailure(error, input.options, eventId);\n }\n}\n\nfunction emitPreSubmissionStages(\n options: ExecuteOptions | undefined,\n eventId: string,\n): void {\n for (const stage of PRE_SUBMISSION_STAGES) {\n assertNotAborted(options?.signal);\n emitOperationEvent(options, { id: eventId, stage, status: 'begin' });\n emitOperationEvent(options, { id: eventId, stage, status: 'end' });\n }\n}\n\nasync function signSubmissionPayload(\n wallet: StellarWalletAdapter,\n prepared: StellarPreparedOperation,\n): Promise<StellarSubmissionPayload> {\n try {\n return await wallet.signTransactionPayload(prepared.submissionPayload);\n } catch (error) {\n throw userRejectedError(\n error instanceof Error ? error.message : 'Wallet rejected the transaction.',\n );\n }\n}\n\nasync function submitAndConfirm(\n input: SubmitPreparedOperationInput,\n eventId: string,\n signedPayload: StellarSubmissionPayload,\n): Promise<StellarOperationReceipt> {\n assertNotAborted(input.options?.signal);\n emitOperationEvent(input.options, {\n id: eventId,\n stage: 'submission',\n status: 'begin',\n });\n\n const receipt = await input.engine.submit(input.prepared, signedPayload);\n emitOperationEvent(input.options, {\n id: eventId,\n stage: 'submission',\n status: 'end',\n });\n emitOperationEvent(input.options, {\n id: eventId,\n stage: 'confirmation',\n status: 'begin',\n });\n emitOperationEvent(input.options, {\n id: eventId,\n stage: 'confirmation',\n status: 'end',\n });\n return receipt;\n}\n\nasync function commitStorageChanges(\n input: SubmitPreparedOperationInput,\n eventId: string,\n receipt: StellarOperationReceipt,\n): Promise<void> {\n emitOperationEvent(input.options, {\n id: eventId,\n stage: 'storageCommit',\n status: 'begin',\n });\n if (input.prepared.outputRecords.length > 0) {\n await input.storage.savePrivateRecords(\n input.prepared.outputRecords.map((record) => {\n const nextStatus = receipt.confirmed ? 'finalized' : record.status;\n return {\n ...record,\n txHash: receipt.operationId,\n ...(nextStatus === undefined ? {} : { status: nextStatus }),\n };\n }),\n );\n }\n if (input.prepared.consumedRecords.length > 0) {\n await input.storage.markPrivateRecordsUsed(input.prepared.consumedRecords);\n }\n emitOperationEvent(input.options, {\n id: eventId,\n stage: 'storageCommit',\n status: 'end',\n });\n}\n\nfunction toSubmissionError(error: unknown) {\n if (isPrivacySdkError(error)) {\n return error;\n }\n const message = error instanceof Error ? error.message : 'Execution failed.';\n return executionError(message, 'submission');\n}\n\nfunction storageCommitFailureMessage(error: unknown): string {\n if (isPrivacySdkError(error)) {\n return error.message;\n }\n if (error instanceof Error) {\n return error.message;\n }\n return 'Storage commit failed.';\n}\n\nfunction handleStorageCommitFailure(\n error: unknown,\n options: ExecuteOptions | undefined,\n eventId: string,\n receipt: StellarOperationReceipt,\n): never {\n const sdkError = executionError(storageCommitFailureMessage(error), 'storageCommit', {\n receipt,\n });\n emitOperationEvent(options, {\n id: eventId,\n stage: 'storageCommit',\n status: 'error',\n error: sdkError,\n });\n throw sdkError;\n}\n\nfunction handleSubmissionFailure(\n error: unknown,\n options: ExecuteOptions | undefined,\n eventId: string,\n): never {\n const sdkError = toSubmissionError(error);\n emitOperationEvent(options, {\n id: eventId,\n stage: 'submission',\n status: 'error',\n error: sdkError,\n });\n throw sdkError;\n}\n","import type { WithdrawIntent } from '@arcanetech/privacy-sdk-core';\nimport { insufficientStateError } from '@arcanetech/privacy-sdk-core';\nimport { isPrivateAddressTransferFrom } from '../transact/transfer-source/index.js';\nimport { requireCoinNoteFromRecord } from '../transact/private-address/record-coin.js';\nimport type {\n StellarAddress,\n StellarAssetId,\n StellarPrivateRecord,\n StellarStorageAdapter,\n StellarTransferFromAddress,\n StellarTransferIntent,\n} from '../types.js';\nimport {\n buildDepositOutputRecords,\n buildWithdrawOutputRecords,\n} from './transfer-output-records.js';\n\ntype SpendIntent =\n StellarTransferIntent | WithdrawIntent<StellarAddress, StellarAssetId, bigint>;\n\nfunction readRecordSpendAmount(record: StellarPrivateRecord): bigint {\n const coinValue = record.coinNote?.value;\n if (coinValue !== undefined && String(coinValue).trim() !== '') {\n return BigInt(String(coinValue));\n }\n return record.amount;\n}\n\nfunction compareRecordsForSpendSelection(\n left: StellarPrivateRecord,\n right: StellarPrivateRecord,\n): number {\n const leftValue = readRecordSpendAmount(left);\n const rightValue = readRecordSpendAmount(right);\n if (rightValue > leftValue) {\n return 1;\n }\n if (rightValue < leftValue) {\n return -1;\n }\n return left.id.localeCompare(right.id);\n}\n\nasync function filterUnspentPrivateRecords(input: {\n records: StellarPrivateRecord[];\n walletPublicKey: string;\n checkNullifierSpent: (parameters: {\n nullifier: string;\n walletPublicKey: string;\n privKeyScalarHex?: string;\n privateAddressStpl1?: string;\n }) => Promise<boolean>;\n}): Promise<StellarPrivateRecord[]> {\n const unspent: StellarPrivateRecord[] = [];\n for (const record of input.records) {\n if (!record.coinNote) {\n unspent.push(record);\n continue;\n }\n const coin = requireCoinNoteFromRecord(record);\n const spent = await input.checkNullifierSpent({\n nullifier: coin.nullifier,\n walletPublicKey: input.walletPublicKey,\n ...(record.privateAddress ? { privateAddressStpl1: record.privateAddress } : {}),\n });\n if (!spent) {\n unspent.push(record);\n }\n }\n return unspent;\n}\n\nfunction pickRecordsForSpendAmount(input: {\n available: StellarPrivateRecord[];\n kind: 'transfer' | 'withdraw';\n amount: bigint;\n}): StellarPrivateRecord[] {\n let selectedTotal = 0n;\n const selected: StellarPrivateRecord[] = [];\n for (const record of input.available) {\n selected.push(record);\n selectedTotal += readRecordSpendAmount(record);\n if (selectedTotal >= input.amount) {\n return selected;\n }\n if (\n (input.kind === 'transfer' || input.kind === 'withdraw') &&\n selected.length >= 2\n ) {\n throw insufficientStateError(\n 'missing_private_records',\n 'Storage does not contain enough private records for this operation.',\n { requestedAmount: input.amount, availableAmount: selectedTotal },\n );\n }\n }\n throw insufficientStateError(\n 'missing_private_records',\n 'Storage does not contain enough private records for this operation.',\n { requestedAmount: input.amount, availableAmount: selectedTotal },\n );\n}\n\nexport async function selectPrivateRecords(input: {\n storage: StellarStorageAdapter;\n kind: 'transfer' | 'withdraw';\n intent: SpendIntent;\n walletPublicKey?: string;\n checkNullifierSpent?: (parameters: {\n nullifier: string;\n walletPublicKey: string;\n privKeyScalarHex?: string;\n privateAddressStpl1?: string;\n }) => Promise<boolean>;\n}): Promise<StellarPrivateRecord[]> {\n const from = input.intent.from;\n if (!isPrivateAddressTransferFrom(from)) {\n throw insufficientStateError(\n 'invalid_transfer_source',\n 'Private record selection requires a private address transfer source.',\n );\n }\n const spendFromPrivateAddress = from.trim().startsWith('stpl');\n const records = await input.storage.listPrivateRecords({\n ...(spendFromPrivateAddress ? { privateAddress: from } : { owner: from }),\n asset: input.intent.asset,\n });\n const locallyAvailable = [...records]\n .filter((record) => !record.consumed)\n .toSorted(compareRecordsForSpendSelection);\n const walletPublicKey = input.walletPublicKey?.trim();\n const available =\n input.checkNullifierSpent && walletPublicKey\n ? await filterUnspentPrivateRecords({\n records: locallyAvailable,\n walletPublicKey,\n checkNullifierSpent: input.checkNullifierSpent,\n })\n : locallyAvailable;\n\n if (available.length === 0) {\n throw insufficientStateError(\n 'missing_private_records',\n 'Storage does not contain enough private records for this operation.',\n { requestedAmount: input.intent.amount, availableAmount: 0n },\n );\n }\n\n return pickRecordsForSpendAmount({\n available,\n kind: input.kind,\n amount: input.intent.amount,\n });\n}\n\nexport function sumRecordAmounts(records: StellarPrivateRecord[]): bigint {\n return records.reduce((total, record) => total + readRecordSpendAmount(record), 0n);\n}\n\nexport function buildSpendOutputRecords(input: {\n kind: 'deposit' | 'withdraw';\n from: StellarTransferFromAddress;\n to: StellarAddress;\n asset: StellarAssetId;\n amount: bigint;\n consumedTotal: bigint;\n recipientDisclosedPublicly: boolean;\n walletPublicKey: StellarAddress;\n}): StellarPrivateRecord[] {\n if (input.kind === 'deposit') {\n return buildDepositOutputRecords(\n input.walletPublicKey,\n input.to,\n input.asset,\n input.amount,\n );\n }\n return buildWithdrawOutputRecords(input);\n}\n","import type { StellarAddress } from '../../types.js';\n\nexport type StellarTransferFromAddress = StellarAddress;\n\nexport function isPrivateAddressTransferFrom(\n from: StellarTransferFromAddress,\n): from is StellarAddress {\n return typeof from === 'string';\n}\n","import type { StellarTransferFromAddress } from './types.js';\n\nexport function readTransferFromPrivateAddress(\n from: StellarTransferFromAddress,\n): string {\n return from.trim();\n}\n","import { executionError, insufficientStateError } from '@arcanetech/privacy-sdk-core';\nimport { readNullifierConsumedOnChain } from '../../contracts/pool/pool-domain-service.js';\nimport { requireContractContext } from '../../contracts/contract-context.js';\nimport { requireCoinNoteFromRecord } from '../private-address/record-coin.js';\nimport { getPrivacyPoolService } from '../pool/singleton.js';\nimport { ensureSenderPrivKeyScalarHex } from '../engine/prepare/shared.js';\nimport { privKeyScalarDecimalFromRecipientScalarHex } from '../encoding/priv-key-scalar-from-recipient-hex.js';\nimport type { StellarPrivateRecord } from '../../types.js';\nimport type { StellarTransactEnvironment } from '../environment/types.js';\n\nasync function resolveNullifierSpendScalarHex(input: {\n record: StellarPrivateRecord;\n environment: StellarTransactEnvironment;\n walletPublicKey: string;\n spendScalarHex?: string;\n}): Promise<string> {\n const stamped = input.spendScalarHex?.trim();\n if (stamped) {\n return stamped;\n }\n const privateAddress = input.record.privateAddress?.trim();\n if (!privateAddress) {\n throw executionError(\n 'Private record is missing a private address; cannot derive the owner-bound spend scalar.',\n 'validation',\n {\n reason: 'private_record_missing_private_address',\n recordId: input.record.id,\n },\n );\n }\n return ensureSenderPrivKeyScalarHex(\n input.environment,\n privateAddress,\n input.walletPublicKey,\n );\n}\n\nasync function readPrivateRecordNullifierSpendStatus(input: {\n record: StellarPrivateRecord;\n environment: StellarTransactEnvironment;\n walletPublicKey: string;\n poolContractId?: string;\n spendScalarHex?: string;\n}): Promise<{ spent: boolean; nullifierHashHex: string }> {\n const coin = requireCoinNoteFromRecord(input.record);\n const scalarHex = await resolveNullifierSpendScalarHex(input);\n const nullifierHashHex = await getPrivacyPoolService().calculateNullifierHash(\n coin.nullifier,\n privKeyScalarDecimalFromRecipientScalarHex(scalarHex),\n );\n const contractContext = requireContractContext(input.environment);\n const poolContractId =\n input.poolContractId?.trim() || contractContext.network.poolContract;\n const spent = await readNullifierConsumedOnChain({\n contractContext,\n poolContractId,\n walletPublicKey: input.walletPublicKey.trim(),\n nullifierHashHex,\n });\n return { spent, nullifierHashHex };\n}\n\nexport async function verifyPrivateRecordsNullifiersBeforeExecute(input: {\n records: StellarPrivateRecord[];\n environment: StellarTransactEnvironment;\n walletPublicKey: string;\n poolContractId?: string;\n spendScalarHex?: string;\n}): Promise<void> {\n for (const record of input.records) {\n const status = await readPrivateRecordNullifierSpendStatus({\n record,\n environment: input.environment,\n walletPublicKey: input.walletPublicKey,\n ...(input.poolContractId ? { poolContractId: input.poolContractId } : {}),\n ...(input.spendScalarHex ? { spendScalarHex: input.spendScalarHex } : {}),\n });\n if (status.spent) {\n throw executionError(\n 'Private input note nullifier was already spent on-chain.',\n 'validation',\n {\n reason: 'private_record_nullifier_spent',\n recordId: record.id,\n nullifierHashHex: status.nullifierHashHex,\n },\n );\n }\n }\n}\n\nexport async function assertPrivateRecordsNullifiersAvailable(input: {\n records: StellarPrivateRecord[];\n walletPublicKey: string;\n checkNullifierSpent?: (parameters: {\n nullifier: string;\n walletPublicKey: string;\n privKeyScalarHex?: string;\n privateAddressStpl1?: string;\n }) => Promise<boolean>;\n}): Promise<void> {\n if (!input.checkNullifierSpent) {\n return;\n }\n for (const record of input.records) {\n const coin = requireCoinNoteFromRecord(record);\n const spent = await input.checkNullifierSpent({\n nullifier: coin.nullifier,\n walletPublicKey: input.walletPublicKey,\n ...(record.privateAddress ? { privateAddressStpl1: record.privateAddress } : {}),\n });\n if (spent) {\n throw insufficientStateError(\n 'private_record_nullifier_spent',\n 'Private input note nullifier was already spent on-chain.',\n { recordId: record.id },\n );\n }\n }\n}\n","import { Buffer } from 'buffer';\nimport type { StellarContractContext } from '../contract-context.js';\n\nfunction hexToBuffer(hex: string): Buffer {\n const clean = hex.startsWith('0x') ? hex.slice(2) : hex;\n return Buffer.from(clean, 'hex');\n}\n\nexport async function readNullifierConsumedOnChain(input: {\n contractContext: StellarContractContext;\n poolContractId: string;\n walletPublicKey: string;\n nullifierHashHex: string;\n}): Promise<boolean> {\n const client = input.contractContext.createPoolClient({\n contractId: input.poolContractId,\n walletPublicKey: input.walletPublicKey,\n networkPassphrase: input.contractContext.network.networkPassphrase,\n sorobanRpcUrl: input.contractContext.network.rpcUrl,\n });\n const read = await client.is_nulifier_hash_consumed({\n hash: hexToBuffer(input.nullifierHashHex),\n });\n return read.result as boolean;\n}\n","import { rpc } from '@stellar/stellar-sdk';\n\nexport type StellarRpcServer = rpc.Server;\n\nexport function createStellarRpcServer(rpcUrl: string): StellarRpcServer {\n return new rpc.Server(rpcUrl.trim(), { allowHttp: true });\n}\n","import { Client as PrivacyPoolContractClient } from 'contract';\nimport type { PoolTransactClient } from '../../transact/pool/types.js';\nimport {\n adaptSignTransactionForGeneratedBinding,\n type StellarSignTransaction,\n} from '../signing.js';\n\nexport function createInternalPoolContractClient(input: {\n contractId: string;\n walletPublicKey: string;\n networkPassphrase: string;\n sorobanRpcUrl: string;\n signTransaction: StellarSignTransaction;\n}): PoolTransactClient {\n const signBinding = adaptSignTransactionForGeneratedBinding(input.signTransaction, {\n networkPassphrase: input.networkPassphrase,\n walletPublicKey: input.walletPublicKey,\n });\n const client = new PrivacyPoolContractClient({\n contractId: input.contractId,\n networkPassphrase: input.networkPassphrase,\n rpcUrl: input.sorobanRpcUrl,\n allowHttp: true,\n publicKey: input.walletPublicKey,\n signTransaction: signBinding,\n });\n return client as unknown as PoolTransactClient;\n}\n","export type StellarSignTransaction = (input: {\n xdr: string;\n networkPassphrase: string;\n address: string;\n}) => Promise<{ signedTxXdr: string }>;\n\nexport type GeneratedBindingSignTransaction = (\n xdrInput: string,\n options?: {\n networkPassphrase?: string;\n address?: string;\n },\n) => Promise<{ signedTxXdr: string }>;\n\nexport function adaptSignTransactionForGeneratedBinding(\n signTransaction: StellarSignTransaction,\n defaults: {\n networkPassphrase: string;\n walletPublicKey: string;\n },\n): GeneratedBindingSignTransaction {\n return async (xdrInput, options) => {\n const networkPassphrase =\n options?.networkPassphrase?.trim() || defaults.networkPassphrase;\n const address = options?.address?.trim() || defaults.walletPublicKey;\n return signTransaction({\n xdr: xdrInput,\n networkPassphrase,\n address,\n });\n };\n}\n","import { Buffer } from 'buffer';\nimport { Client as RegistryContractClient } from 'registry';\nimport {\n adaptSignTransactionForGeneratedBinding,\n type StellarSignTransaction,\n} from '../signing.js';\n\nexport type RegistryContractReadClient = {\n get_private_address: (input: { owner: string }) => Promise<{ result: unknown }>;\n};\n\nexport type RegistryContractWriteClient = RegistryContractReadClient & {\n register_private_address: (input: {\n owner: string;\n public_key_x: Buffer;\n public_key_y: Buffer;\n }) => Promise<{\n signAndSend: () => Promise<{\n sendTransactionResponse?: {\n hash?: string;\n };\n }>;\n }>;\n};\n\nexport function createInternalRegistryContractClient(input: {\n contractId: string;\n walletPublicKey: string;\n networkPassphrase: string;\n sorobanRpcUrl: string;\n signTransaction: StellarSignTransaction;\n}): RegistryContractWriteClient {\n const signBinding = adaptSignTransactionForGeneratedBinding(input.signTransaction, {\n networkPassphrase: input.networkPassphrase,\n walletPublicKey: input.walletPublicKey,\n });\n return new RegistryContractClient({\n contractId: input.contractId,\n networkPassphrase: input.networkPassphrase,\n rpcUrl: input.sorobanRpcUrl,\n allowHttp: true,\n publicKey: input.walletPublicKey,\n signTransaction: signBinding,\n }) as unknown as RegistryContractWriteClient;\n}\n\nexport type { PrivateAddressRecord } from 'registry';\n","import type { StellarNetworkConfig } from '../types.js';\nimport type { PoolClientFactory } from '../transact/pool/types.js';\nimport { createStellarRpcServer, type StellarRpcServer } from '../rpc/server.js';\nimport { createInternalPoolContractClient } from './pool/create-pool-client.js';\nimport {\n createInternalRegistryContractClient,\n type RegistryContractWriteClient,\n} from './registry/create-registry-client.js';\nimport type { StellarSignTransaction } from './signing.js';\n\nexport type RegistryClientFactory = (input: {\n contractId: string;\n walletPublicKey: string;\n networkPassphrase: string;\n sorobanRpcUrl: string;\n}) => RegistryContractWriteClient;\n\nexport type StellarContractContext = {\n network: StellarNetworkConfig;\n signTransaction: StellarSignTransaction;\n rpcServer: StellarRpcServer;\n createPoolClient: PoolClientFactory;\n createRegistryClient: RegistryClientFactory;\n};\n\nfunction composeStellarContractContext(input: {\n network: StellarNetworkConfig;\n signTransaction: StellarSignTransaction;\n}): StellarContractContext {\n const rpcServer = createStellarRpcServer(input.network.rpcUrl);\n return {\n network: input.network,\n signTransaction: input.signTransaction,\n rpcServer,\n createPoolClient: (parameters) =>\n createInternalPoolContractClient({\n ...parameters,\n signTransaction: input.signTransaction,\n }),\n createRegistryClient: (parameters) =>\n createInternalRegistryContractClient({\n ...parameters,\n signTransaction: input.signTransaction,\n }),\n };\n}\n\nexport type ResolvedStellarTransactEnvironment =\n import('../transact/environment/types.js').StellarTransactEnvironment & {\n contractContext: StellarContractContext;\n };\n\nexport function attachContractContext(\n environment: import('../transact/environment/types.js').StellarTransactEnvironment,\n): ResolvedStellarTransactEnvironment {\n if (!environment.signTransaction) {\n throw new Error(\n 'Stellar transact environment requires signTransaction for on-chain contract access.',\n );\n }\n return {\n ...environment,\n contractContext: composeStellarContractContext({\n network: environment.network,\n signTransaction: environment.signTransaction,\n }),\n };\n}\n\nexport function requireContractContext(\n environment:\n import('../transact/environment/types.js').StellarTransactEnvironment | undefined,\n): StellarContractContext {\n if (!environment || !('contractContext' in environment)) {\n throw new Error('Contract context is not configured on the transact environment.');\n }\n const resolved = environment as ResolvedStellarTransactEnvironment;\n return resolved.contractContext;\n}\n\nexport function readPoolClientFactory(\n environment: import('../transact/environment/types.js').StellarTransactEnvironment,\n): PoolClientFactory {\n return requireContractContext(environment).createPoolClient;\n}\n","import type { CoinData } from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport type {\n StellarPrivateCoinNote,\n StellarPrivateRecord,\n} from '../../state/domain/types.js';\n\nexport function requireCoinNoteFromRecord(record: StellarPrivateRecord): CoinData {\n if (!record.coinNote) {\n throw new Error(`Private record ${record.id} is missing coin note data.`);\n }\n return record.coinNote;\n}\n\nexport function findCommitmentLeafIndex(\n commitments: string[],\n commitment: string,\n): number {\n return commitments.indexOf(commitment);\n}\n\nexport function buildPrivateRecordFromDeposit(input: {\n owner: string;\n privateAddress: string;\n assetId: string;\n poolContract: string;\n amount: bigint;\n amountDisplay: number;\n commitmentHex: string;\n coin: CoinData;\n depositScalarHex: string;\n precommitementHex: string;\n txHash?: string;\n status?: StellarPrivateRecord['status'];\n}): StellarPrivateRecord {\n return {\n id: input.commitmentHex,\n owner: input.owner,\n asset: input.assetId,\n amount: input.amount,\n consumed: false,\n status: input.status ?? 'pending',\n poolContract: input.poolContract,\n commitmentHex: input.commitmentHex,\n privateAddress: input.privateAddress,\n amountDisplay: input.amountDisplay,\n coinNote: input.coin as StellarPrivateCoinNote,\n depositScalarHex: input.depositScalarHex,\n precommitementHex: input.precommitementHex,\n ...(input.txHash ? { txHash: input.txHash } : {}),\n };\n}\n","import {\n PrivacyPoolSDK,\n decodeDecodedEphemeralKey,\n randomFrDecimal253,\n scalarHexToFrDecimal,\n type CoinData,\n type StateFile,\n} from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport { merkleRootBufferToFrDecimal } from '../merkle/field-decimal.js';\nimport {\n privateAddressSdk,\n recipientPublicKeysDecimalFromPrivateAddress,\n type SpendScalarDomain,\n} from '../private-address/codec.js';\nimport {\n proveWithdrawTransact,\n proveWithdrawTransactDual,\n} from '../proofs/withdraw/transact-proof.js';\nimport { Buffer } from 'buffer';\nimport {\n buildPublicDepositLegs,\n withTokenAddressPublicInputs,\n} from '../proofs/transaction-input.js';\nimport {\n buildPoolTransactionAuditParameters,\n resolvePoolApplicationId,\n} from '../audit/parameters.js';\nimport type { StellarBrowserAssets } from '../../types.js';\nimport {\n materializeSelectedZkCircuit,\n optionalZkArtifactBaseUrl,\n type StellarZkCircuitDefinition,\n} from '../zk/circuit-config.js';\nimport { DEFAULT_ZK_CONFIG_NONCE } from '../environment/zk-config-nonce.js';\nimport {\n buildApplicationIdHints,\n padDepositSlotsToLayout,\n padPublicLegsToLayout,\n padWithdrawSlotsToLayout,\n} from '../zk/slots.js';\nimport type {\n AlignedDepositSlot,\n ProofResult,\n ProofWithChange,\n} from '../pool/proof-types.js';\nimport { buildAlignedDepositSlotForSdk } from '../pool/aligned-deposit.js';\n\nexport class PrivacyPoolService {\n private sdk: PrivacyPoolSDK | undefined = undefined;\n private initPromise: Promise<void> | undefined = undefined;\n\n constructor(\n private readonly assets?: StellarBrowserAssets,\n private readonly applicationId?: string,\n private readonly auditPublicKey?: [string, string],\n private readonly zkCircuits?: Record<string, StellarZkCircuitDefinition>,\n private readonly zkConfigNonce?: bigint,\n private readonly zkArtifactBaseUrl?: string,\n ) {}\n\n private async ensureInit(): Promise<void> {\n if (this.sdk) {\n return;\n }\n if (this.initPromise) {\n return this.initPromise;\n }\n this.initPromise = (async () => {\n if (!this.assets) {\n throw new Error(\n 'PrivacyPoolService requires browser ZK assets before initialization.',\n );\n }\n const zkConfigNonce = this.zkConfigNonce ?? DEFAULT_ZK_CONFIG_NONCE;\n const zkCircuits = await materializeSelectedZkCircuit(\n this.zkCircuits,\n zkConfigNonce,\n );\n this.sdk = await PrivacyPoolSDK.init({\n wasmBinary: this.assets.sdkWasm,\n zkCircuits,\n zkConfigNonce,\n ...optionalZkArtifactBaseUrl(this.zkArtifactBaseUrl),\n });\n })();\n return this.initPromise;\n }\n\n async getInitializedSdk(): Promise<PrivacyPoolSDK> {\n await this.ensureInit();\n if (!this.sdk) {\n throw new Error('SDK not initialized');\n }\n return this.sdk;\n }\n\n getAuditPublicKey(): [string, string] | undefined {\n return this.auditPublicKey;\n }\n\n getApplicationId(): string {\n return resolvePoolApplicationId(this.applicationId);\n }\n\n async generatePrivateAddressFromStellarSignature(\n signature: string,\n domain: SpendScalarDomain,\n ): Promise<string> {\n const sdk = await this.getInitializedSdk();\n return privateAddressSdk(sdk).generatePrivateAddressFromStellarSignature(\n signature,\n domain,\n );\n }\n\n async sharedSecretX(\n recipientScalarHex: string,\n ephemeralKeyEncoded: string,\n ): Promise<string> {\n const sdk = await this.getInitializedSdk();\n const ephemeralKey = decodeDecodedEphemeralKey(ephemeralKeyEncoded);\n const shared = sdk.sharedSecretFromRecipientPreimage({\n recipientScalar: recipientScalarHex,\n ephemeralKey,\n });\n return shared.x;\n }\n\n async buildAlignedDepositSlot(parameters: {\n privateAddressStpl1: string;\n amountStroops: bigint;\n tokenAddress: string;\n escrowNonce?: string;\n recipientHi?: string;\n recipientLo?: string;\n }) {\n const sdk = await this.getInitializedSdk();\n return buildAlignedDepositSlotForSdk(sdk, this.getApplicationId(), parameters);\n }\n\n async createAlignedShieldCoinData(parameters: {\n privateAddressStpl1: string;\n amountStroops: bigint;\n tokenAddress: string;\n }): Promise<Omit<AlignedDepositSlot, 'deposit'>> {\n const { commitment_hex, coin, depositScalarHex, precommitementHex } =\n await this.buildAlignedDepositSlot(parameters);\n return { commitment_hex, coin, depositScalarHex, precommitementHex };\n }\n\n async prepareDepositTransactProof(parameters: {\n privateAddressStpl1: string;\n coin: CoinData;\n depositScalarHex: string;\n merkleRootBytes: Buffer;\n tokenAddress: string;\n }): Promise<ProofResult> {\n const sdk = await this.getInitializedSdk();\n const stateRoot = merkleRootBufferToFrDecimal(parameters.merkleRootBytes);\n const recipientPublicKeys = recipientPublicKeysDecimalFromPrivateAddress(\n parameters.privateAddressStpl1,\n ) as [string, string];\n const applicationId = this.getApplicationId();\n const audit = buildPoolTransactionAuditParameters({\n applicationId,\n nAuditSlots: sdk.getLayout().nAuditSlots,\n ...(this.auditPublicKey ? { auditPublicKey: this.auditPublicKey } : {}),\n });\n const deposit = {\n value: parameters.coin.value,\n nullifier: parameters.coin.nullifier,\n ephemeralKeyScalar: scalarHexToFrDecimal(parameters.depositScalarHex),\n asset: [parameters.coin.asset_hi, parameters.coin.asset_lo] as [string, string],\n applicationId,\n recipientPublicKeys,\n };\n const publicInput = withTokenAddressPublicInputs(\n {\n stateRoot,\n privKeyScalar: randomFrDecimal253(),\n },\n parameters.tokenAddress,\n );\n const proof = await sdk.proveTransaction(\n publicInput as unknown as Parameters<typeof sdk.proveTransaction>[0],\n padPublicLegsToLayout(\n sdk,\n buildPublicDepositLegs(parameters.tokenAddress, parameters.coin.value),\n ),\n padWithdrawSlotsToLayout(sdk, []),\n padDepositSlotsToLayout(sdk, [deposit]),\n audit,\n );\n const applicationIdsPlaintext = buildApplicationIdHints({\n sdk,\n inputIds: [],\n outputIds: [applicationId],\n });\n return { ...proof, applicationIdsPlaintext };\n }\n\n async calculateNullifierHash(\n nullifier: string,\n privKeyScalar: string,\n ): Promise<string> {\n const sdk = await this.getInitializedSdk();\n return sdk.calculateNullifierHash(nullifier, privKeyScalar);\n }\n async prepareWithdrawTransactProof(parameters: {\n coin: CoinData;\n state: StateFile;\n destinationStellarAddress: string;\n privKeyScalarHex: string;\n depositorEphemeralKey: string;\n withdrawAmountStroops: bigint;\n changePrivateAddressStpl1: string | undefined;\n tokenAddress: string;\n }): Promise<ProofWithChange> {\n const sdk = await this.getInitializedSdk();\n return proveWithdrawTransact({\n sdk,\n applicationId: this.getApplicationId(),\n buildAlignedDepositSlot: (input) => this.buildAlignedDepositSlot(input),\n ...(this.auditPublicKey ? { auditPublicKey: this.auditPublicKey } : {}),\n ...parameters,\n });\n }\n async prepareWithdrawTransactProofDual(parameters: {\n coinA: CoinData;\n coinB: CoinData;\n state: StateFile;\n destinationStellarAddress: string;\n privKeyScalarHex: string;\n depositorEphemeralAKey: string;\n depositorEphemeralBKey: string;\n withdrawAmountStroops: bigint;\n changePrivateAddressStpl1: string | undefined;\n tokenAddress: string;\n }): Promise<ProofWithChange> {\n const sdk = await this.getInitializedSdk();\n return proveWithdrawTransactDual({\n sdk,\n applicationId: this.getApplicationId(),\n buildAlignedDepositSlot: (input) => this.buildAlignedDepositSlot(input),\n ...(this.auditPublicKey ? { auditPublicKey: this.auditPublicKey } : {}),\n coinA: parameters.coinA,\n coinB: parameters.coinB,\n state: parameters.state,\n destinationStellarAddress: parameters.destinationStellarAddress,\n privKeyScalarHex: parameters.privKeyScalarHex,\n ephemeralAKey: parameters.depositorEphemeralAKey,\n ephemeralBKey: parameters.depositorEphemeralBKey,\n withdrawAmountStroops: parameters.withdrawAmountStroops,\n changePrivateAddressStpl1: parameters.changePrivateAddressStpl1,\n tokenAddress: parameters.tokenAddress,\n });\n }\n}\n","import { Buffer } from 'buffer';\n\nconst BN254 =\n 21_888_242_871_839_275_222_246_405_745_257_275_088_548_364_400_416_034_343_698_204_186_575_808_495_617n;\nconst MERKLE_ROOT_BYTE_LENGTH = 32;\nconst DECIMAL_STRING_RADIX = 10;\n\nexport function merkleRootBufferToFrDecimal(root: Buffer): string {\n if (root.length !== MERKLE_ROOT_BYTE_LENGTH) {\n throw new Error(\n `expected ${MERKLE_ROOT_BYTE_LENGTH}-byte merkle root, got ${root.length}`,\n );\n }\n const hex = Buffer.from(root).toString('hex');\n return (BigInt(`0x${hex}`) % BN254).toString(DECIMAL_STRING_RADIX);\n}\n","import {\n buildStealthAddressSignMessage,\n decodeStealthAddress,\n encodeStealthAddress,\n recipientPublicKeysDecimalFromStealthAddress,\n} from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport type {\n PrivacyPoolSDK,\n SpendScalarDomain,\n} from '@arcanetech/stellar-privacy-pool-zk-sdk';\nexport { DEFAULT_STEALTH_SIGN_NONCE as DEFAULT_PRIVATE_ADDRESS_SIGN_NONCE } from '@arcanetech/stellar-privacy-pool-zk-sdk';\nexport {\n OWNER_BOUND_NOTE_SCHEMA_VERSION,\n spendScalarHexFromStellarSignature,\n} from '@arcanetech/stellar-privacy-pool-zk-sdk';\nexport type { SpendScalarDomain } from '@arcanetech/stellar-privacy-pool-zk-sdk';\n\ntype DecodedPrivateAddress = { x: string; y: string };\ntype PrivateAddressDecoder = (value: string) => DecodedPrivateAddress;\ntype PrivateAddressEncoder = (decoded: DecodedPrivateAddress) => string;\ntype PrivateAddressPublicKeyReader = (value: string) => unknown;\ntype PrivateAddressMessageBuilder = (\n publicKey: string,\n domain: SpendScalarDomain,\n nonce?: string,\n) => string;\ntype PrivateAddressGenerator = (\n signature: string,\n domain: SpendScalarDomain,\n) => string | Promise<string>;\n\ntype PrivateAddressSdk = {\n generatePrivateAddressFromStellarSignature: PrivateAddressGenerator;\n};\n\ntype PrivacyPoolSdkPrivateAddressMethods = {\n generateStealthAddressFromStellarSignature?: PrivateAddressGenerator;\n};\n\nexport function buildPrivateAddressSignMessage(\n publicKey: string,\n domain: SpendScalarDomain,\n nonce?: string,\n): string {\n const buildMessage: PrivateAddressMessageBuilder = buildStealthAddressSignMessage;\n if (nonce === undefined) {\n return buildMessage(publicKey, domain);\n }\n return buildMessage(publicKey, domain, nonce);\n}\n\nexport function decodePrivateAddress(value: string): DecodedPrivateAddress {\n const decodeAddress: PrivateAddressDecoder = decodeStealthAddress;\n return decodeAddress(value);\n}\n\nexport function encodePrivateAddress(decoded: DecodedPrivateAddress): string {\n const encodeAddress: PrivateAddressEncoder = encodeStealthAddress;\n return encodeAddress(decoded);\n}\n\nexport function encodePrivateAddressFromHexCoordinates(\n publicKeyXHex: string,\n publicKeyYHex: string,\n): string {\n return encodePrivateAddress(\n Object.fromEntries([\n ['x', publicKeyXHex],\n ['y', publicKeyYHex],\n ]) as DecodedPrivateAddress,\n );\n}\n\nexport function recipientPublicKeysDecimalFromPrivateAddress(value: string): unknown {\n const readPublicKeys: PrivateAddressPublicKeyReader =\n recipientPublicKeysDecimalFromStealthAddress;\n return readPublicKeys(value);\n}\n\nexport function privateAddressSdk(sdk: PrivacyPoolSDK): PrivateAddressSdk {\n const generator = (sdk as unknown as PrivacyPoolSdkPrivateAddressMethods)\n .generateStealthAddressFromStellarSignature;\n if (typeof generator !== 'function') {\n throw new TypeError(\n 'Missing privacy pool SDK method: generateStealthAddressFromStellarSignature',\n );\n }\n return {\n generatePrivateAddressFromStellarSignature: (signature, domain) =>\n generator.call(sdk, signature, domain),\n };\n}\n","import { withdrawObjectFromMerkleWitness } from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport type {\n CoinData,\n PrivacyPoolSDK,\n StateFile,\n} from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport { buildPublicWithdrawLegs } from '../../proofs/transaction-input.js';\nimport {\n buildApplicationIdHints,\n padDepositSlotsToLayout,\n padPublicLegsToLayout,\n padWithdrawSlotsToLayout,\n} from '../../zk/slots.js';\nimport { MIN_CONFIDENTIAL_TRANSFER_STROOPS } from '../../proofs/confidential/helpers.js';\nimport { buildPoolTransactionAuditParameters } from '../../audit/parameters.js';\nimport {\n buildWithdrawPublicInput,\n prepareDualWithdrawProofInputs,\n resolveWithdrawChangeDeposits,\n type AlignedDepositSlotBuilder,\n type DualWithdrawProofParameters,\n type WithdrawChangeCoin,\n} from '../../proofs/withdraw/helpers.js';\nimport type { KytApplicationIdHints } from '../../pool/proof-types.js';\nimport { privKeyScalarDecimalFromRecipientScalarHex } from '../../encoding/priv-key-scalar-from-recipient-hex.js';\n\nfunction validateSingleWithdrawAmounts(\n withdrawAmountStroops: bigint,\n noteStroops: bigint,\n): bigint {\n if (withdrawAmountStroops < MIN_CONFIDENTIAL_TRANSFER_STROOPS) {\n throw new Error('Withdraw amount must be positive');\n }\n if (withdrawAmountStroops > noteStroops) {\n throw new Error('Withdraw amount exceeds note value');\n }\n return noteStroops - withdrawAmountStroops;\n}\n\nasync function proveSingleWithdrawTransaction(parameters: {\n sdk: PrivacyPoolSDK;\n publicInput: ReturnType<typeof buildWithdrawPublicInput>;\n audit: ReturnType<typeof buildPoolTransactionAuditParameters>;\n primaryWithdraw: ReturnType<typeof withdrawObjectFromMerkleWitness>;\n deposits: Awaited<ReturnType<typeof resolveWithdrawChangeDeposits>>['deposits'];\n tokenAddress: string;\n withdrawAmountStroops: bigint;\n}) {\n return parameters.sdk.proveTransaction(\n parameters.publicInput as unknown as Parameters<\n typeof parameters.sdk.proveTransaction\n >[0],\n padPublicLegsToLayout(\n parameters.sdk,\n buildPublicWithdrawLegs(\n parameters.tokenAddress,\n parameters.withdrawAmountStroops.toString(),\n ),\n ),\n padWithdrawSlotsToLayout(parameters.sdk, [parameters.primaryWithdraw]),\n padDepositSlotsToLayout(parameters.sdk, parameters.deposits),\n parameters.audit,\n );\n}\n\nfunction buildPrimaryWithdrawForCoin(parameters: {\n sdk: PrivacyPoolSDK;\n applicationId: string;\n coin: CoinData;\n state: StateFile;\n privKeyScalarHex: string;\n}) {\n const witness = parameters.sdk.buildWithdrawMerkleWitness(\n parameters.coin,\n parameters.state,\n );\n const privKeyScalar = privKeyScalarDecimalFromRecipientScalarHex(\n parameters.privKeyScalarHex,\n );\n const ownerPubHex = parameters.sdk.ecdhEphemeralPublicKeyFromScalarHex(\n parameters.privKeyScalarHex,\n );\n const primaryWithdraw = withdrawObjectFromMerkleWitness(\n witness,\n ownerPubHex,\n parameters.applicationId,\n privKeyScalar,\n );\n return { witness, primaryWithdraw };\n}\n\ntype SingleWithdrawProofInputParams = {\n sdk: PrivacyPoolSDK;\n applicationId: string;\n buildAlignedDepositSlot: AlignedDepositSlotBuilder;\n coin: CoinData;\n state: StateFile;\n destinationStellarAddress: string;\n privKeyScalarHex: string;\n depositorEphemeralKey: string;\n withdrawAmountStroops: bigint;\n changePrivateAddressStpl1: string | undefined;\n tokenAddress: string;\n auditPublicKey?: [string, string];\n};\n\nasync function prepareSingleWithdrawProofInputs(\n parameters: SingleWithdrawProofInputParams,\n) {\n const changeStroops = validateSingleWithdrawAmounts(\n parameters.withdrawAmountStroops,\n BigInt(parameters.coin.value),\n );\n const { witness, primaryWithdraw } = buildPrimaryWithdrawForCoin({\n sdk: parameters.sdk,\n applicationId: parameters.applicationId,\n coin: parameters.coin,\n state: parameters.state,\n privKeyScalarHex: parameters.privKeyScalarHex,\n });\n const { deposits, changeCoin } = await resolveWithdrawChangeDeposits({\n changeStroops,\n changePrivateAddressStpl1: parameters.changePrivateAddressStpl1,\n buildAlignedDepositSlot: parameters.buildAlignedDepositSlot,\n tokenAddress: parameters.tokenAddress,\n });\n const publicInput = buildWithdrawPublicInput({\n stateRoot: witness.stateRoot,\n destinationStellarAddress: parameters.destinationStellarAddress,\n privKeyScalarHex: parameters.privKeyScalarHex,\n tokenAddress: parameters.tokenAddress,\n publicWithdrawalAmount: parameters.withdrawAmountStroops.toString(),\n });\n return {\n primaryWithdraw,\n deposits,\n changeCoin,\n publicInput,\n audit: buildPoolTransactionAuditParameters({\n applicationId: parameters.applicationId,\n nAuditSlots: parameters.sdk.getLayout().nAuditSlots,\n ...(parameters.auditPublicKey\n ? { auditPublicKey: parameters.auditPublicKey }\n : {}),\n }),\n };\n}\n\nexport async function proveWithdrawTransact(parameters: {\n sdk: PrivacyPoolSDK;\n applicationId: string;\n buildAlignedDepositSlot: AlignedDepositSlotBuilder;\n coin: CoinData;\n state: StateFile;\n destinationStellarAddress: string;\n privKeyScalarHex: string;\n depositorEphemeralKey: string;\n withdrawAmountStroops: bigint;\n changePrivateAddressStpl1: string | undefined;\n tokenAddress: string;\n auditPublicKey?: [string, string];\n}): Promise<{\n proof_hex: string;\n public_hex: string;\n ciphertext_hex?: string;\n output_note_ephemeral_scalars?: string[];\n applicationIdsPlaintext: KytApplicationIdHints;\n changeCoin?: WithdrawChangeCoin;\n}> {\n const { primaryWithdraw, deposits, changeCoin, publicInput, audit } =\n await prepareSingleWithdrawProofInputs(parameters);\n const proof = await proveSingleWithdrawTransaction({\n sdk: parameters.sdk,\n publicInput,\n audit,\n primaryWithdraw,\n deposits,\n tokenAddress: parameters.tokenAddress,\n withdrawAmountStroops: parameters.withdrawAmountStroops,\n });\n return {\n ...proof,\n applicationIdsPlaintext: buildApplicationIdHints({\n sdk: parameters.sdk,\n inputIds: [parameters.applicationId],\n outputIds: [changeCoin ? parameters.applicationId : '0'],\n }),\n ...(changeCoin ? { changeCoin } : {}),\n };\n}\n\nexport async function proveWithdrawTransactDual(\n parameters: DualWithdrawProofParameters & { applicationId: string },\n): Promise<{\n proof_hex: string;\n public_hex: string;\n ciphertext_hex?: string;\n output_note_ephemeral_scalars?: string[];\n applicationIdsPlaintext: KytApplicationIdHints;\n changeCoin?: WithdrawChangeCoin;\n}> {\n const { publicInput, audit, withdrawLegs, deposits, changeCoin } =\n await prepareDualWithdrawProofInputs(parameters);\n const proof = await parameters.sdk.proveTransaction(\n publicInput as unknown as Parameters<typeof parameters.sdk.proveTransaction>[0],\n padPublicLegsToLayout(\n parameters.sdk,\n buildPublicWithdrawLegs(\n parameters.tokenAddress,\n parameters.withdrawAmountStroops.toString(),\n ),\n ),\n padWithdrawSlotsToLayout(parameters.sdk, withdrawLegs),\n padDepositSlotsToLayout(parameters.sdk, deposits),\n audit,\n );\n return {\n ...proof,\n applicationIdsPlaintext: buildApplicationIdHints({\n sdk: parameters.sdk,\n inputIds: [audit.applicationId, audit.applicationId],\n outputIds: [changeCoin ? audit.applicationId : '0'],\n }),\n ...(changeCoin ? { changeCoin } : {}),\n };\n}\n\nexport { type AlignedDepositSlotBuilder } from '../../proofs/withdraw/helpers.js';\n","import { Buffer } from 'buffer';\nimport { StrKey } from '@stellar/stellar-sdk';\nimport { resolveTokenContractId } from '../stellar/token-contract.js';\n\nexport interface TransactionPublicLegParameters {\n publicWithdrawnAssets: Array<[string, string]>;\n publicDepositedAssets: Array<[string, string]>;\n publicDeposits: string[];\n publicWithdrawals: string[];\n}\n\ntype BasePublicInput = {\n stateRoot: string;\n withdrawAddressHi?: string;\n withdrawAddressLo?: string;\n privKeyScalar: string;\n escrowRecipientHi?: string;\n escrowRecipientLo?: string;\n sweepOutputOwnerPubX?: string;\n sweepOutputOwnerPubY?: string;\n};\n\nconst ZERO_PUBLIC_WITHDRAW_ADDRESS = {\n withdrawAddressHi: '0',\n withdrawAddressLo: '0',\n} as const;\n\nconst CONTRACT_ADDRESS_HALF_BYTES = 16;\nconst CONTRACT_ADDRESS_BYTES = 32;\n\nfunction bytes16ToDecimal(bytes: Uint8Array): string {\n return BigInt(`0x${Buffer.from(bytes).toString('hex')}`).toString();\n}\n\nfunction decimalToBytes16(value: string): Buffer {\n const hex = BigInt(value)\n .toString(16)\n .padStart(CONTRACT_ADDRESS_HALF_BYTES * 2, '0');\n if (hex.length > CONTRACT_ADDRESS_HALF_BYTES * 2) {\n throw new Error('Asset leg does not fit into 16 bytes.');\n }\n return Buffer.from(hex, 'hex');\n}\n\nfunction tokenAddressFrParts(tokenAddress: string): { hi: string; lo: string } {\n const normalized = resolveTokenContractId(tokenAddress);\n const payload = StrKey.decodeContract(normalized);\n const hi = bytes16ToDecimal(payload.subarray(0, CONTRACT_ADDRESS_HALF_BYTES));\n const lo = bytes16ToDecimal(\n payload.subarray(CONTRACT_ADDRESS_HALF_BYTES, CONTRACT_ADDRESS_BYTES),\n );\n return { hi, lo };\n}\n\nexport function withTokenAddressPublicInputs(\n base: BasePublicInput,\n tokenAddress: string,\n): Record<string, string> {\n const { hi, lo } = tokenAddressFrParts(tokenAddress);\n return {\n ...base,\n tokenAddressHi: hi,\n tokenAddressLo: lo,\n withdrawAddressHi:\n base.withdrawAddressHi ?? ZERO_PUBLIC_WITHDRAW_ADDRESS.withdrawAddressHi,\n withdrawAddressLo:\n base.withdrawAddressLo ?? ZERO_PUBLIC_WITHDRAW_ADDRESS.withdrawAddressLo,\n escrowRecipientHi: base.escrowRecipientHi ?? '0',\n escrowRecipientLo: base.escrowRecipientLo ?? '0',\n sweepOutputOwnerPubX: base.sweepOutputOwnerPubX ?? '0',\n sweepOutputOwnerPubY: base.sweepOutputOwnerPubY ?? '0',\n };\n}\n\nexport function publicWithdrawAddressLimbs(parameters: {\n publicWithdrawalAmount: string;\n destinationHi: string;\n destinationLo: string;\n}): {\n withdrawAddressHi: string;\n withdrawAddressLo: string;\n} {\n if (parameters.publicWithdrawalAmount === '0') {\n return {\n withdrawAddressHi: ZERO_PUBLIC_WITHDRAW_ADDRESS.withdrawAddressHi,\n withdrawAddressLo: ZERO_PUBLIC_WITHDRAW_ADDRESS.withdrawAddressLo,\n };\n }\n return {\n withdrawAddressHi: parameters.destinationHi,\n withdrawAddressLo: parameters.destinationLo,\n };\n}\n\nexport function tokenAddressToAssetLeg(tokenAddress: string): [string, string] {\n const { hi, lo } = tokenAddressFrParts(tokenAddress);\n return [hi, lo];\n}\n\nexport function assetLegToTokenAddress(assetHi: string, assetLo: string): string {\n const payload = Buffer.concat([decimalToBytes16(assetHi), decimalToBytes16(assetLo)]);\n return StrKey.encodeContract(payload);\n}\n\nexport function buildZeroPublicLegs(\n publicNInputs = 1,\n publicNOutputs = 1,\n): TransactionPublicLegParameters {\n return {\n publicWithdrawnAssets: Array.from(\n { length: publicNOutputs },\n () => ['0', '0'] as [string, string],\n ),\n publicDepositedAssets: Array.from(\n { length: publicNInputs },\n () => ['0', '0'] as [string, string],\n ),\n publicDeposits: Array.from({ length: publicNInputs }, () => '0'),\n publicWithdrawals: Array.from({ length: publicNOutputs }, () => '0'),\n };\n}\n\nexport function buildPublicDepositLegs(\n tokenAddress: string,\n amount: string,\n publicNInputs = 1,\n publicNOutputs = 1,\n): TransactionPublicLegParameters {\n const legs = buildZeroPublicLegs(publicNInputs, publicNOutputs);\n return {\n ...legs,\n publicDepositedAssets: [\n tokenAddressToAssetLeg(tokenAddress),\n ...legs.publicDepositedAssets.slice(1),\n ],\n publicDeposits: [amount, ...legs.publicDeposits.slice(1)],\n };\n}\n\nexport function buildPublicWithdrawLegs(\n tokenAddress: string,\n amount: string,\n publicNInputs = 1,\n publicNOutputs = 1,\n): TransactionPublicLegParameters {\n const legs = buildZeroPublicLegs(publicNInputs, publicNOutputs);\n return {\n ...legs,\n publicWithdrawnAssets: [\n tokenAddressToAssetLeg(tokenAddress),\n ...legs.publicWithdrawnAssets.slice(1),\n ],\n publicWithdrawals: [amount, ...legs.publicWithdrawals.slice(1)],\n };\n}\n","import { Buffer } from 'buffer';\nimport { StrKey } from '@stellar/stellar-sdk';\n\nconst CONTRACT_ID_BYTE_LENGTH = 32;\nconst HEX_CHARS_PER_BYTE = 2;\nconst CONTRACT_ID_HEX_CHAR_LENGTH = CONTRACT_ID_BYTE_LENGTH * HEX_CHARS_PER_BYTE;\nconst CONTRACT_ID_HEX = /^(?:0x)?([0-9a-f]{64})$/i;\n\nfunction encodeContractFromHex(hexPayload: string): string {\n return StrKey.encodeContract(Buffer.from(hexPayload, 'hex'));\n}\n\nfunction normalizeSorobanContractId(raw: string): string {\n const trimmed = raw.trim();\n if (trimmed.length === 0) {\n throw new Error('Contract ID is empty');\n }\n if (StrKey.isValidContract(trimmed)) {\n return trimmed;\n }\n const hexMatch = CONTRACT_ID_HEX.exec(trimmed);\n const hexPayload = hexMatch?.[1];\n if (hexPayload !== undefined && hexPayload.length === CONTRACT_ID_HEX_CHAR_LENGTH) {\n return encodeContractFromHex(hexPayload);\n }\n throw new Error(`Invalid Soroban contract address: ${trimmed}`);\n}\n\nexport function resolveTokenContractId(\n tokenContractRaw: string | null | undefined,\n): string {\n const raw = tokenContractRaw?.trim();\n if (!raw) {\n throw new Error('Selected asset has no client contract');\n }\n return normalizeSorobanContractId(raw);\n}\n","import {\n padDepositSlots,\n padPublicLegs,\n padWithdrawSlots,\n type DepositSlot,\n type PrivacyPoolSDK,\n type WithdrawSlot,\n} from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport type { TransactionPublicLegParameters } from '../proofs/transaction-input.js';\n\nexport function padWithdrawSlotsToLayout(\n sdk: PrivacyPoolSDK,\n slots: WithdrawSlot[],\n): WithdrawSlot[] {\n return padWithdrawSlots(slots, sdk.getLayout().nIns);\n}\n\nexport function padDepositSlotsToLayout(\n sdk: PrivacyPoolSDK,\n slots: DepositSlot[],\n): DepositSlot[] {\n return padDepositSlots(slots, sdk.getLayout().nOuts);\n}\n\nexport function padPublicLegsToLayout(\n sdk: PrivacyPoolSDK,\n legs: TransactionPublicLegParameters,\n): TransactionPublicLegParameters {\n const { publicNInputs, publicNOutputs } = sdk.getLayout();\n return padPublicLegs(legs, publicNInputs, publicNOutputs);\n}\n\nfunction padStrings(values: string[], length: number, fill: string): string[] {\n if (values.length > length) {\n throw new Error(\n `expected at most ${String(length)} application-id slots, got ${String(values.length)}`,\n );\n }\n return [...values, ...Array.from({ length: length - values.length }, () => fill)];\n}\n\nexport function buildApplicationIdHints(input: {\n sdk: PrivacyPoolSDK;\n inputIds: string[];\n outputIds: string[];\n}): string[] {\n const { nIns, nOuts } = input.sdk.getLayout();\n return [\n ...padStrings(input.inputIds, nIns, '0'),\n ...padStrings(input.outputIds, nOuts, '0'),\n ];\n}\n\nexport function uniformApplicationIdHints(\n applicationId: string,\n nAuditSlots: number,\n): string[] {\n return Array.from({ length: nAuditSlots }, () => applicationId);\n}\n","import { withdrawObjectFromMerkleWitness } from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport type {\n CoinData,\n PrivacyPoolSDK,\n StateFile,\n} from '@arcanetech/stellar-privacy-pool-zk-sdk';\n\nexport const MIN_CONFIDENTIAL_TRANSFER_STROOPS = 1n;\nexport const ZERO_STROOPS = 0n;\n\nexport function withdrawWitnessForCoin(parameters: {\n sdk: PrivacyPoolSDK;\n coin: CoinData;\n state: StateFile;\n ownerPubHex: { x: string; y: string };\n privKeyScalar: string;\n applicationId: string;\n}) {\n const { sdk, coin, state } = parameters;\n const witness = sdk.buildWithdrawMerkleWitness(coin, state);\n const withdrawApplicationId = coin.application_id ?? parameters.applicationId;\n const withdrawObject = withdrawObjectFromMerkleWitness(\n witness,\n parameters.ownerPubHex,\n withdrawApplicationId,\n parameters.privKeyScalar,\n );\n return { witness, withdrawObject };\n}\n\nexport function dualWithdrawLegsWithSharedRoot(parameters: {\n sdk: PrivacyPoolSDK;\n coinA: CoinData;\n coinB: CoinData;\n state: StateFile;\n ownerPubHex: { x: string; y: string };\n privKeyScalar: string;\n applicationId: string;\n}) {\n const legA = withdrawWitnessForCoin({\n sdk: parameters.sdk,\n coin: parameters.coinA,\n state: parameters.state,\n ownerPubHex: parameters.ownerPubHex,\n privKeyScalar: parameters.privKeyScalar,\n applicationId: parameters.applicationId,\n });\n const legB = withdrawWitnessForCoin({\n sdk: parameters.sdk,\n coin: parameters.coinB,\n state: parameters.state,\n ownerPubHex: parameters.ownerPubHex,\n privKeyScalar: parameters.privKeyScalar,\n applicationId: parameters.applicationId,\n });\n if (legA.witness.stateRoot !== legB.witness.stateRoot) {\n throw new Error('Merkle state root mismatch between input coins');\n }\n return { legA, legB };\n}\n\nexport function requireChangeRecipientWhenPartial(\n changeStroops: bigint,\n selfPrivateAddressStpl1ForChange: string | undefined,\n): void {\n if (changeStroops > ZERO_STROOPS) {\n const stpl1 = selfPrivateAddressStpl1ForChange?.trim() ?? '';\n if (!stpl1) {\n throw new Error(\n 'Private address is required to receive the remaining balance after a partial transfer',\n );\n }\n }\n}\n\nexport function changeStroopsAfterDualTransfer(\n transferStroops: bigint,\n totalNotes: bigint,\n): bigint {\n if (transferStroops < MIN_CONFIDENTIAL_TRANSFER_STROOPS) {\n throw new Error('Transfer amount must be positive');\n }\n if (transferStroops > totalNotes) {\n throw new Error('Transfer amount exceeds combined note value');\n }\n return totalNotes - transferStroops;\n}\n","import {\n DEMO_AUDIT_PUBLIC_KEY,\n resolveTransactionAuditParams,\n type AuditPublicKey,\n type TransactionAuditParams,\n} from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport { Buffer } from 'buffer';\n\nconst UNCOMPRESSED_PREFIX = '04';\nconst UNCOMPRESSED_HEX_LENGTH = 130;\nconst XY_HEX_LENGTH = 128;\nconst X_OFFSET_END = 32;\nconst Y_OFFSET_START = 32;\nconst Y_OFFSET_END = 64;\nconst DECIMAL_RADIX = 10;\nconst BN254_FR_MODULUS =\n 21_888_242_871_839_275_222_246_405_745_257_275_088_548_364_400_416_034_343_698_204_186_575_808_495_617n;\nconst BABYJUBJUB_A = 168_700n;\nconst BABYJUBJUB_D = 168_696n;\nconst BABYJUB_CURVE_ONE = 1n;\n\nfunction passesBabyJubCurveCheck(coordinateX: bigint, coordinateY: bigint): boolean {\n const xSquared = (coordinateX * coordinateX) % BN254_FR_MODULUS;\n const ySquared = (coordinateY * coordinateY) % BN254_FR_MODULUS;\n const lhs = (BABYJUBJUB_A * xSquared + ySquared) % BN254_FR_MODULUS;\n const rhs =\n (BABYJUB_CURVE_ONE + BABYJUBJUB_D * xSquared * ySquared) % BN254_FR_MODULUS;\n return lhs === rhs;\n}\n\nexport function parseAuditPublicKeyFromEnvHex(raw: string): AuditPublicKey {\n const normalized = raw.replace(/^0x/i, '');\n const payload =\n normalized.length === UNCOMPRESSED_HEX_LENGTH &&\n normalized.startsWith(UNCOMPRESSED_PREFIX)\n ? normalized.slice(UNCOMPRESSED_PREFIX.length)\n : normalized;\n if (payload.length !== XY_HEX_LENGTH || !/^[\\da-fA-F]+$/.test(payload)) {\n throw new Error(\n 'Audit public key must be uncompressed 65-byte hex (04 + X + Y) or 64-byte X+Y hex',\n );\n }\n const bytes = Buffer.from(payload, 'hex');\n const auditPublicKeyXDecimal = BigInt(\n `0x${bytes.subarray(0, X_OFFSET_END).toString('hex')}`,\n ).toString(DECIMAL_RADIX);\n const auditPublicKeyYDecimal = BigInt(\n `0x${bytes.subarray(Y_OFFSET_START, Y_OFFSET_END).toString('hex')}`,\n ).toString(DECIMAL_RADIX);\n if (\n !passesBabyJubCurveCheck(\n BigInt(auditPublicKeyXDecimal),\n BigInt(auditPublicKeyYDecimal),\n )\n ) {\n throw new Error('Audit public key is not a valid BabyJubJub point.');\n }\n return [auditPublicKeyXDecimal, auditPublicKeyYDecimal];\n}\n\nexport function buildPoolTransactionAuditParameters(input: {\n applicationId: string;\n auditPublicKey?: AuditPublicKey;\n nAuditSlots?: number;\n}): TransactionAuditParams {\n return resolveTransactionAuditParams(\n input.applicationId,\n input.auditPublicKey ?? DEMO_AUDIT_PUBLIC_KEY,\n input.nAuditSlots,\n );\n}\n\nexport function resolvePoolApplicationId(applicationId: string | undefined): string {\n const trimmed = applicationId?.trim();\n if (!trimmed) {\n throw new Error(\n 'Privacy pool applicationId is required. Pass it in client factory config.',\n );\n }\n return trimmed;\n}\n","import { ed25519PubkeyPayloadHexToWithdrawFrDecimals } from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport type {\n CoinData,\n DepositObject,\n DepositSlot,\n PrivacyPoolSDK,\n StateFile,\n WithdrawObject,\n} from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport {\n dualWithdrawLegsWithSharedRoot,\n MIN_CONFIDENTIAL_TRANSFER_STROOPS,\n requireChangeRecipientWhenPartial,\n ZERO_STROOPS,\n} from '../../proofs/confidential/helpers.js';\nimport { ed25519PublicKeyHexFromStellarAccount } from '../../stellar/account.js';\nimport { privKeyScalarDecimalFromRecipientScalarHex } from '../../encoding/priv-key-scalar-from-recipient-hex.js';\nimport {\n publicWithdrawAddressLimbs,\n withTokenAddressPublicInputs,\n} from '../../proofs/transaction-input.js';\nimport { buildPoolTransactionAuditParameters } from '../../audit/parameters.js';\nimport type { TransactionAuditParams } from '@arcanetech/stellar-privacy-pool-zk-sdk';\n\nexport type AlignedDepositSlotBuilder = (parameters: {\n privateAddressStpl1: string;\n amountStroops: bigint;\n tokenAddress: string;\n}) => Promise<{\n deposit: DepositObject;\n commitment_hex: string;\n coin: CoinData;\n depositScalarHex: string;\n precommitementHex: string;\n}>;\n\nexport type WithdrawChangeCoin = {\n commitment_hex: string;\n coin: CoinData;\n depositScalarHex: string;\n precommitementHex: string;\n};\n\nexport type DualWithdrawProofParameters = {\n sdk: PrivacyPoolSDK;\n buildAlignedDepositSlot: AlignedDepositSlotBuilder;\n coinA: CoinData;\n coinB: CoinData;\n state: StateFile;\n destinationStellarAddress: string;\n privKeyScalarHex: string;\n ephemeralAKey: string;\n ephemeralBKey: string;\n withdrawAmountStroops: bigint;\n changePrivateAddressStpl1: string | undefined;\n tokenAddress: string;\n auditPublicKey?: [string, string];\n};\n\nfunction destinationWithdrawFrAndScalar(parameters: {\n destinationStellarAddress: string;\n privKeyScalarHex: string;\n}): {\n hi: string;\n lo: string;\n privKeyScalar: string;\n} {\n const pkHex = ed25519PublicKeyHexFromStellarAccount(\n parameters.destinationStellarAddress,\n );\n const { hi, lo } = ed25519PubkeyPayloadHexToWithdrawFrDecimals(pkHex);\n const privKeyScalar = privKeyScalarDecimalFromRecipientScalarHex(\n parameters.privKeyScalarHex,\n );\n return { hi, lo, privKeyScalar };\n}\n\nexport function buildWithdrawPublicInput(parameters: {\n stateRoot: string;\n destinationStellarAddress: string;\n privKeyScalarHex: string;\n tokenAddress: string;\n publicWithdrawalAmount: string;\n}): ReturnType<typeof withTokenAddressPublicInputs> {\n const { hi, lo, privKeyScalar } = destinationWithdrawFrAndScalar({\n destinationStellarAddress: parameters.destinationStellarAddress,\n privKeyScalarHex: parameters.privKeyScalarHex,\n });\n return withTokenAddressPublicInputs(\n {\n stateRoot: parameters.stateRoot,\n ...publicWithdrawAddressLimbs({\n publicWithdrawalAmount: parameters.publicWithdrawalAmount,\n destinationHi: hi,\n destinationLo: lo,\n }),\n privKeyScalar,\n },\n parameters.tokenAddress,\n );\n}\n\nexport async function resolveWithdrawChangeDeposits(parameters: {\n changeStroops: bigint;\n changePrivateAddressStpl1: string | undefined;\n buildAlignedDepositSlot: AlignedDepositSlotBuilder;\n tokenAddress: string;\n}): Promise<{\n deposits: DepositSlot[];\n changeCoin?: WithdrawChangeCoin;\n}> {\n if (parameters.changeStroops <= ZERO_STROOPS) {\n return { deposits: [] };\n }\n const stpl1 = parameters.changePrivateAddressStpl1?.trim() ?? '';\n if (!stpl1) {\n throw new Error(\n 'Private address is required to return the unused balance to the pool (partial withdraw)',\n );\n }\n const slot = await parameters.buildAlignedDepositSlot({\n privateAddressStpl1: stpl1,\n amountStroops: parameters.changeStroops,\n tokenAddress: parameters.tokenAddress,\n });\n return {\n deposits: [slot.deposit],\n changeCoin: {\n commitment_hex: slot.commitment_hex,\n coin: slot.coin,\n depositScalarHex: slot.depositScalarHex,\n precommitementHex: slot.precommitementHex,\n },\n };\n}\n\nfunction validateDualWithdrawAmounts(\n withdrawAmountStroops: bigint,\n totalNotes: bigint,\n changePrivateAddressStpl1: string | undefined,\n): bigint {\n if (withdrawAmountStroops < MIN_CONFIDENTIAL_TRANSFER_STROOPS) {\n throw new Error('Withdraw amount must be positive');\n }\n if (withdrawAmountStroops > totalNotes) {\n throw new Error('Withdraw amount exceeds combined note value');\n }\n const changeStroops = totalNotes - withdrawAmountStroops;\n requireChangeRecipientWhenPartial(changeStroops, changePrivateAddressStpl1);\n return changeStroops;\n}\n\nfunction buildDualWithdrawPublicInput(parameters: {\n destinationStellarAddress: string;\n privKeyScalarHex: string;\n tokenAddress: string;\n stateRoot: string;\n publicWithdrawalAmount: string;\n}): ReturnType<typeof withTokenAddressPublicInputs> {\n return buildWithdrawPublicInput({\n stateRoot: parameters.stateRoot,\n destinationStellarAddress: parameters.destinationStellarAddress,\n privKeyScalarHex: parameters.privKeyScalarHex,\n tokenAddress: parameters.tokenAddress,\n publicWithdrawalAmount: parameters.publicWithdrawalAmount,\n });\n}\n\ntype DualWithdrawProofInputs = {\n publicInput: ReturnType<typeof withTokenAddressPublicInputs>;\n audit: TransactionAuditParams;\n withdrawLegs: [WithdrawObject, WithdrawObject];\n deposits: DepositSlot[];\n changeCoin?: WithdrawChangeCoin;\n};\n\nexport async function prepareDualWithdrawProofInputs(\n parameters: DualWithdrawProofParameters & { applicationId: string },\n): Promise<DualWithdrawProofInputs> {\n const changeStroops = validateDualWithdrawAmounts(\n parameters.withdrawAmountStroops,\n BigInt(parameters.coinA.value) + BigInt(parameters.coinB.value),\n parameters.changePrivateAddressStpl1,\n );\n const { legA, legB } = dualWithdrawLegsWithSharedRoot({\n sdk: parameters.sdk,\n coinA: parameters.coinA,\n coinB: parameters.coinB,\n state: parameters.state,\n ownerPubHex: parameters.sdk.ecdhEphemeralPublicKeyFromScalarHex(\n parameters.privKeyScalarHex,\n ),\n privKeyScalar: privKeyScalarDecimalFromRecipientScalarHex(\n parameters.privKeyScalarHex,\n ),\n applicationId: parameters.applicationId,\n });\n const { deposits, changeCoin } = await resolveWithdrawChangeDeposits({\n changeStroops,\n changePrivateAddressStpl1: parameters.changePrivateAddressStpl1,\n buildAlignedDepositSlot: parameters.buildAlignedDepositSlot,\n tokenAddress: parameters.tokenAddress,\n });\n const publicInput = buildDualWithdrawPublicInput({\n destinationStellarAddress: parameters.destinationStellarAddress,\n privKeyScalarHex: parameters.privKeyScalarHex,\n tokenAddress: parameters.tokenAddress,\n stateRoot: legA.witness.stateRoot,\n publicWithdrawalAmount: parameters.withdrawAmountStroops.toString(),\n });\n const audit = buildPoolTransactionAuditParameters({\n applicationId: parameters.applicationId,\n nAuditSlots: parameters.sdk.getLayout().nAuditSlots,\n ...(parameters.auditPublicKey ? { auditPublicKey: parameters.auditPublicKey } : {}),\n });\n return {\n publicInput,\n audit,\n deposits,\n withdrawLegs: [legA.withdrawObject, legB.withdrawObject],\n ...(changeCoin ? { changeCoin } : {}),\n };\n}\n","import { StrKey } from '@stellar/stellar-sdk';\nimport { Buffer } from 'buffer';\n\nconst MUXED_ACCOUNT_ID_BYTE_LENGTH = 8;\nconst ED25519_PUBLIC_KEY_BYTE_LENGTH = 32;\n\nfunction ed25519HexFromGAddress(trimmed: string): string | undefined {\n try {\n const raw = StrKey.decodeEd25519PublicKey(trimmed);\n return Buffer.from(raw).toString('hex');\n } catch {\n return undefined;\n }\n}\n\nfunction ed25519HexFromMuxedAddress(trimmed: string): string | undefined {\n try {\n const raw = StrKey.decodeMed25519PublicKey(trimmed);\n if (raw.length === MUXED_ACCOUNT_ID_BYTE_LENGTH + ED25519_PUBLIC_KEY_BYTE_LENGTH) {\n return raw.subarray(MUXED_ACCOUNT_ID_BYTE_LENGTH).toString('hex');\n }\n if (raw.length === ED25519_PUBLIC_KEY_BYTE_LENGTH) {\n return raw.toString('hex');\n }\n return undefined;\n } catch {\n return undefined;\n }\n}\n\nexport function ed25519PublicKeyHexFromStellarAccount(address: string): string {\n const trimmed = address.trim();\n const fromG = ed25519HexFromGAddress(trimmed);\n if (fromG !== undefined) {\n return fromG;\n }\n const fromMuxed = ed25519HexFromMuxedAddress(trimmed);\n if (fromMuxed !== undefined) {\n return fromMuxed;\n }\n throw new Error('Invalid destination Stellar address');\n}\n","import { canonicalBabyJubScalarFromInteger } from '@arcanetech/stellar-privacy-pool-zk-sdk';\n\nconst SCALAR_HEX_CHAR_LENGTH = 64;\nconst DECIMAL_RADIX = 10;\n\nfunction normalizeRecipientScalarHex(hexInput: string): string {\n const trimmed = hexInput.trim().replace(/^0x/iu, '');\n if (!/^[0-9a-f]*$/iu.test(trimmed)) {\n throw new Error('recipient scalar hex must be hexadecimal');\n }\n const withLeadingNibble = trimmed.length % 2 === 0 ? trimmed : `0${trimmed}`;\n const lower = withLeadingNibble.toLowerCase();\n const padded = lower\n .padStart(SCALAR_HEX_CHAR_LENGTH, '0')\n .slice(-SCALAR_HEX_CHAR_LENGTH);\n if (padded.length !== SCALAR_HEX_CHAR_LENGTH) {\n throw new Error(\n `recipient scalar hex must fit 32 bytes (${SCALAR_HEX_CHAR_LENGTH} hex chars)`,\n );\n }\n return padded;\n}\n\nexport function privKeyScalarDecimalFromRecipientScalarHex(hexInput: string): string {\n const hex = normalizeRecipientScalarHex(hexInput);\n const value = BigInt(`0x${hex}`);\n return canonicalBabyJubScalarFromInteger(value).toString(DECIMAL_RADIX);\n}\n","import {\n BundledZkCircuit,\n type BundledZkCircuitConfig,\n type DevZkCircuitConfig,\n type ZkCircuitConfig,\n type ZkCircuitLayoutFields,\n} from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport {\n BINDING_ZK_NONCE,\n SIX_BY_SIX_BINDING_ZK_NONCE,\n} from '../environment/zk-config-nonce.js';\n\nexport { BundledZkCircuit } from '@arcanetech/stellar-privacy-pool-zk-sdk';\n\nexport type StellarBundledZkCircuitDefinition = ZkCircuitLayoutFields & {\n circuit: BundledZkCircuit;\n};\n\nexport type StellarCustomZkCircuitDefinition = ZkCircuitLayoutFields & {\n zkeyUrl: string;\n circuitGraphUrl: string;\n r1csUrl: string;\n provingKeyUrl: string;\n};\n\nexport type StellarZkCircuitDefinition =\n StellarBundledZkCircuitDefinition | StellarCustomZkCircuitDefinition;\n\nexport const DEFAULT_STELLAR_ZK_CIRCUITS: Record<\n string,\n StellarBundledZkCircuitDefinition\n> = {\n [BINDING_ZK_NONCE.toString()]: {\n nIns: 2,\n nOuts: 2,\n publicNInputs: 1,\n publicNOutputs: 1,\n circuit: BundledZkCircuit.TwoByTwo,\n },\n [SIX_BY_SIX_BINDING_ZK_NONCE.toString()]: {\n nIns: 6,\n nOuts: 6,\n publicNInputs: 1,\n publicNOutputs: 1,\n circuit: BundledZkCircuit.SixBySix,\n },\n};\n\nfunction isBundledDefinition(\n definition: StellarZkCircuitDefinition,\n): definition is StellarBundledZkCircuitDefinition {\n return 'circuit' in definition;\n}\n\nasync function fetchBuffer(url: string): Promise<ArrayBuffer> {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Failed to fetch ZK artifact ${url}: ${String(response.status)}`);\n }\n return response.arrayBuffer();\n}\n\nasync function materializeDefinition(\n definition: StellarZkCircuitDefinition,\n): Promise<ZkCircuitConfig> {\n if (isBundledDefinition(definition)) {\n const bundled: BundledZkCircuitConfig = {\n nIns: definition.nIns,\n nOuts: definition.nOuts,\n publicNInputs: definition.publicNInputs,\n publicNOutputs: definition.publicNOutputs,\n circuit: definition.circuit,\n };\n return bundled;\n }\n const [zkey, circuitGraph, r1cs, provingKey] = await Promise.all([\n fetchBuffer(definition.zkeyUrl),\n fetchBuffer(definition.circuitGraphUrl),\n fetchBuffer(definition.r1csUrl),\n fetchBuffer(definition.provingKeyUrl),\n ]);\n const custom: DevZkCircuitConfig = {\n nIns: definition.nIns,\n nOuts: definition.nOuts,\n publicNInputs: definition.publicNInputs,\n publicNOutputs: definition.publicNOutputs,\n zkey,\n circuitGraph,\n r1cs,\n provingKey,\n };\n return custom;\n}\n\nexport async function materializeSelectedZkCircuit(\n circuits: Record<string, StellarZkCircuitDefinition> | undefined,\n nonce: bigint,\n): Promise<Record<string, ZkCircuitConfig>> {\n const map = stellarCircuitsOrDefault(circuits);\n const key = nonce.toString();\n const definition = Object.entries(map).find(([nonceKey]) => nonceKey === key)?.[1];\n if (!definition) {\n throw new Error(`no zk circuit configured for nonce ${key}`);\n }\n return { [key]: await materializeDefinition(definition) };\n}\n\nfunction stellarCircuitsOrDefault(\n circuits: Record<string, StellarZkCircuitDefinition> | undefined,\n): Record<string, StellarZkCircuitDefinition> {\n return circuits ?? DEFAULT_STELLAR_ZK_CIRCUITS;\n}\n\nexport function optionalZkArtifactBaseUrl(value: string | undefined): {\n zkArtifactBaseUrl?: string;\n} {\n if (value === undefined) {\n return {};\n }\n const trimmed = value.trim();\n if (trimmed === '') {\n return {};\n }\n let withoutSlash = trimmed;\n while (withoutSlash.endsWith('/')) {\n withoutSlash = withoutSlash.slice(0, -1);\n }\n return { zkArtifactBaseUrl: withoutSlash };\n}\n","import type { StellarTransactEnvironment } from './types.js';\n\nexport const STANDARD_ZK_CONFIG_NONCE = 0n;\nexport const COMMITMENT_V2_ZK_NONCE = 2n;\nexport const BINDING_ZK_NONCE = 3n;\nexport const SIX_BY_SIX_ZK_NONCE = 6n;\nexport const SIX_BY_SIX_BINDING_ZK_NONCE = 7n;\nexport const DEFAULT_ZK_CONFIG_NONCE = BINDING_ZK_NONCE;\n\nexport function resolveZkConfigNonce(\n transactEnvironment: StellarTransactEnvironment,\n): bigint {\n return transactEnvironment.zkConfigNonce ?? DEFAULT_ZK_CONFIG_NONCE;\n}\n","import {\n PrivacyPoolSDK,\n scalarHexToFrDecimal,\n} from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport type { DepositObject } from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport {\n decodePrivateAddress,\n recipientPublicKeysDecimalFromPrivateAddress,\n} from '../private-address/codec.js';\nimport { tokenAddressToAssetLeg } from '../proofs/transaction-input.js';\nimport { resolvePoolApplicationId } from '../audit/parameters.js';\nimport type { AlignedDepositSlot } from '../pool/proof-types.js';\n\nconst SAMPLE_SCALAR_ATTEMPTS = 10;\n\nfunction escrowDepositFields(parameters: {\n escrowNonce?: string;\n recipientHi?: string;\n recipientLo?: string;\n}): Partial<Pick<DepositObject, 'escrowNonce' | 'recipientStellar'>> {\n if (!parameters.recipientHi || !parameters.recipientLo) {\n return {};\n }\n return {\n ...(parameters.escrowNonce ? { escrowNonce: parameters.escrowNonce } : {}),\n recipientStellar: [parameters.recipientHi, parameters.recipientLo],\n };\n}\n\nfunction sampleValidDepositScalarHex(): string {\n for (let index = 0; index < SAMPLE_SCALAR_ATTEMPTS; index++) {\n const candidate = PrivacyPoolSDK.generateRandomScalarHex32();\n try {\n scalarHexToFrDecimal(candidate);\n return candidate;\n } catch {\n continue;\n }\n }\n throw new Error('could not sample valid depositor ephemeral scalar');\n}\n\nexport async function buildAlignedDepositSlotForSdk(\n sdk: PrivacyPoolSDK,\n applicationId: string,\n parameters: {\n privateAddressStpl1: string;\n amountStroops: bigint;\n tokenAddress: string;\n escrowNonce?: string;\n recipientHi?: string;\n recipientLo?: string;\n },\n): Promise<AlignedDepositSlot> {\n const privateAddressPoint = decodePrivateAddress(parameters.privateAddressStpl1);\n const scalarHex = sampleValidDepositScalarHex();\n const [assetHi, assetLo] = tokenAddressToAssetLeg(parameters.tokenAddress);\n const resolvedApplicationId = resolvePoolApplicationId(applicationId);\n const generated = sdk.generateCoinForDepositWithOwnerPubHex(\n scalarHex,\n privateAddressPoint.x,\n privateAddressPoint.y,\n parameters.amountStroops,\n assetHi,\n assetLo,\n resolvedApplicationId,\n );\n const recipientPublicKeys = recipientPublicKeysDecimalFromPrivateAddress(\n parameters.privateAddressStpl1,\n ) as [string, string];\n const deposit: DepositObject = {\n value: generated.coin.value,\n nullifier: generated.coin.nullifier,\n ephemeralKeyScalar: scalarHexToFrDecimal(scalarHex),\n asset: [generated.coin.asset_hi, generated.coin.asset_lo],\n applicationId: resolvedApplicationId,\n recipientPublicKeys,\n ...escrowDepositFields(parameters),\n };\n return {\n deposit,\n commitment_hex: generated.commitment_hex,\n coin: generated.coin,\n depositScalarHex: scalarHex,\n precommitementHex: generated.precommitementHex,\n };\n}\n","import type { StellarBrowserAssets } from '../../types.js';\nimport { PrivacyPoolService } from '../pool/service.js';\nimport type { StellarZkCircuitDefinition } from '../zk/circuit-config.js';\n\nexport function createPrivacyPoolService(input?: {\n assets?: StellarBrowserAssets;\n applicationId?: string;\n auditPublicKey?: [string, string];\n zkCircuits?: Record<string, StellarZkCircuitDefinition>;\n zkConfigNonce?: bigint;\n zkArtifactBaseUrl?: string;\n}): PrivacyPoolService {\n return new PrivacyPoolService(\n input?.assets,\n input?.applicationId,\n input?.auditPublicKey,\n input?.zkCircuits,\n input?.zkConfigNonce,\n input?.zkArtifactBaseUrl,\n );\n}\n\nlet configuredPrivacyPoolService: PrivacyPoolService | undefined;\n\nexport function configurePrivacyPoolService(service: PrivacyPoolService): void {\n configuredPrivacyPoolService = service;\n}\n\nexport function getPrivacyPoolService(): PrivacyPoolService {\n if (!configuredPrivacyPoolService) {\n throw new Error(\n 'PrivacyPoolService is not configured. Call configurePrivacyPoolService first.',\n );\n }\n return configuredPrivacyPoolService;\n}\n","import { Buffer } from 'buffer';\nimport { commitmentsBuffersToDecimal } from './encoding.js';\nimport type {\n CachedPoolMerkleView,\n PoolMerkleStatePort,\n LeafEphemeralStatePort,\n} from '../merkle/state-port.js';\nimport { poolMerkleStateToCachedView } from '../merkle/state-port.js';\nimport { readPoolClientFactory } from '../../contracts/contract-context.js';\nimport type { StellarTransactEnvironment } from '../environment/types.js';\n\nexport interface FetchContractMerkleResult {\n commitmentCount: number;\n commitments: string[];\n merkleRootHex: string;\n updatedAt: number;\n}\n\nfunction normalizeCommitmentBuffers(rawBuffers: Buffer[]): Buffer[] {\n return rawBuffers.map((bufferRow) =>\n Buffer.isBuffer(bufferRow) ? bufferRow : Buffer.from(bufferRow),\n );\n}\n\nfunction mergeContractMerkleWithCache(parameters: {\n poolContractId: string;\n contractCommitments: string[];\n contractCount: number;\n merkleRootHex: string;\n cachedState: CachedPoolMerkleView | undefined;\n poolMerkleState?: PoolMerkleStatePort;\n}): FetchContractMerkleResult {\n const cachedCount = parameters.cachedState?.commitments.length ?? 0;\n const shouldPreferContract =\n parameters.contractCount > cachedCount ||\n !parameters.cachedState ||\n cachedCount === 0;\n if (shouldPreferContract) {\n const updatedAt = Date.now();\n void parameters.poolMerkleState?.set({\n poolContract: parameters.poolContractId,\n commitments: parameters.contractCommitments,\n commitmentCount: parameters.contractCount,\n merkleRootHex: parameters.merkleRootHex,\n updatedAt,\n });\n return {\n commitments: parameters.contractCommitments,\n updatedAt,\n merkleRootHex: parameters.merkleRootHex,\n commitmentCount: parameters.contractCount,\n };\n }\n return {\n commitments: parameters.cachedState!.commitments,\n updatedAt: parameters.cachedState!.updatedAt,\n merkleRootHex: parameters.cachedState!.merkleRootHex ?? parameters.merkleRootHex,\n commitmentCount: parameters.cachedState!.commitments.length,\n };\n}\n\nasync function readCachedPoolMerkleView(\n poolMerkleState: PoolMerkleStatePort | undefined,\n poolContractId: string,\n): Promise<CachedPoolMerkleView | undefined> {\n if (!poolMerkleState) {\n return undefined;\n }\n const cached = await poolMerkleState.get(poolContractId);\n return cached ? poolMerkleStateToCachedView(cached) : undefined;\n}\n\nexport async function fetchAndMergeMerkleState(parameters: {\n poolContractId: string;\n walletPublicKey: string;\n transactEnvironment: StellarTransactEnvironment;\n poolMerkleState?: PoolMerkleStatePort;\n}): Promise<FetchContractMerkleResult> {\n const client = readPoolClientFactory(parameters.transactEnvironment)({\n contractId: parameters.poolContractId,\n walletPublicKey: parameters.walletPublicKey,\n networkPassphrase: parameters.transactEnvironment.network.networkPassphrase,\n sorobanRpcUrl: parameters.transactEnvironment.network.rpcUrl,\n });\n\n const commitmentsRead = await client.get_commitments();\n const rawBuffers = commitmentsRead.result as Buffer[];\n const buffers = normalizeCommitmentBuffers(rawBuffers);\n const contractCommitments = commitmentsBuffersToDecimal(buffers);\n const contractCount = contractCommitments.length;\n\n const rootRead = await client.get_merkle_root();\n const merkleRootBuffer = rootRead.result as Buffer;\n const merkleRootHex = Buffer.from(merkleRootBuffer).toString('hex');\n\n const cachedState = await readCachedPoolMerkleView(\n parameters.poolMerkleState,\n parameters.poolContractId,\n );\n return mergeContractMerkleWithCache({\n poolContractId: parameters.poolContractId,\n contractCommitments,\n contractCount,\n merkleRootHex,\n cachedState,\n ...(parameters.poolMerkleState\n ? { poolMerkleState: parameters.poolMerkleState }\n : {}),\n });\n}\n\nexport async function readLeafEphemeralHex(parameters: {\n poolContractId: string;\n walletPublicKey: string;\n leafIndex: number;\n transactEnvironment: StellarTransactEnvironment;\n leafEphemeral?: LeafEphemeralStatePort;\n}): Promise<{ xHex: string; yHex: string }> {\n const cached = await parameters.leafEphemeral?.get({\n poolContract: parameters.poolContractId,\n leafIndex: parameters.leafIndex,\n });\n if (cached?.xHex && cached.yHex) {\n return { xHex: cached.xHex, yHex: cached.yHex };\n }\n const client = readPoolClientFactory(parameters.transactEnvironment)({\n contractId: parameters.poolContractId,\n walletPublicKey: parameters.walletPublicKey,\n networkPassphrase: parameters.transactEnvironment.network.networkPassphrase,\n sorobanRpcUrl: parameters.transactEnvironment.network.rpcUrl,\n });\n const read = await client.get_leaf_ephemeral({ leaf_index: parameters.leafIndex });\n const coords = read.result;\n if (!coords?.x || !coords?.y) {\n throw new Error('Missing leaf ephemeral key on contract');\n }\n const xHex = Buffer.from(coords.x).toString('hex');\n const yHex = Buffer.from(coords.y).toString('hex');\n await parameters.leafEphemeral?.set({\n poolContract: parameters.poolContractId,\n leafIndex: parameters.leafIndex,\n xHex,\n yHex,\n cachedAt: new Date().toISOString(),\n });\n return { xHex, yHex };\n}\n","import { Buffer } from 'buffer';\n\nconst FR_ORDER =\n 0x73_ed_a7_53_29_9d_7d_48_33_39_d8_08_09_a1_d8_05_53_bd_a4_02_ff_fe_5b_fe_ff_ff_ff_ff_00_00_00_01n;\n\nfunction bufferToDecimal(buf: Buffer): string {\n const hex = buf.toString('hex');\n const bigintFromHex = BigInt(`0x${hex}`);\n const reduced = bigintFromHex % FR_ORDER;\n return reduced.toString();\n}\n\nexport function commitmentsBuffersToDecimal(buffers: Buffer[]): string[] {\n return buffers.map((bufferRow) => bufferToDecimal(bufferRow));\n}\n","import type {\n StellarLeafEphemeral,\n StellarPoolMerkleState,\n} from '../../state/domain/types.js';\n\nexport interface PoolMerkleStatePort {\n get(poolContract: string): Promise<StellarPoolMerkleState | undefined>;\n set(state: StellarPoolMerkleState): Promise<void>;\n}\n\nexport interface LeafEphemeralStatePort {\n get(input: {\n poolContract: string;\n leafIndex: number;\n }): Promise<StellarLeafEphemeral | undefined>;\n set(ephemeral: StellarLeafEphemeral): Promise<void>;\n}\n\nexport interface CachedPoolMerkleView {\n commitments: string[];\n updatedAt: number;\n merkleRootHex?: string;\n}\n\nexport function poolMerkleStateToCachedView(\n state: StellarPoolMerkleState,\n): CachedPoolMerkleView {\n return {\n commitments: state.commitments,\n updatedAt: state.updatedAt,\n merkleRootHex: state.merkleRootHex,\n };\n}\n","import type { DepositIntent } from '@arcanetech/privacy-sdk-core';\nimport type {\n StellarAddress,\n StellarAssetId,\n StellarPreparedOperation,\n} from '../../../types.js';\nimport type { StellarTransactEnvironment } from '../../environment/types.js';\nimport { fetchAndMergeMerkleState } from '../../merkle/fetch-contract.js';\n\nexport async function resolveTokenContractId(\n environment: StellarTransactEnvironment,\n assetId: string,\n): Promise<string> {\n if (environment.resolveTokenContractId) {\n return environment.resolveTokenContractId(assetId);\n }\n throw new Error(`Token contract is not configured for asset ${assetId}.`);\n}\n\nexport async function resolveWalletPublicKey(\n environment: StellarTransactEnvironment,\n prepared: StellarPreparedOperation,\n): Promise<string> {\n if (environment.resolveWalletPublicKey) {\n return environment.resolveWalletPublicKey();\n }\n if (prepared.kind === 'deposit') {\n const depositIntent = prepared.intent as DepositIntent<\n StellarAddress,\n StellarAssetId,\n bigint\n >;\n return depositIntent.from;\n }\n throw new Error('Wallet public key resolver is not configured.');\n}\n\nasync function resolveSenderPrivKeyScalarHex(\n environment: StellarTransactEnvironment,\n privateAddressStpl1: string,\n owner?: string,\n): Promise<string> {\n const cached = await readSenderPrivKeyScalarHex(\n environment,\n privateAddressStpl1,\n owner,\n );\n if (cached) {\n return cached;\n }\n if (environment.ensureSenderPrivKeyScalarHex) {\n return environment.ensureSenderPrivKeyScalarHex(privateAddressStpl1);\n }\n if (!environment.resolveSenderPrivKeyScalarHex) {\n throw new Error('Sender private key scalar resolver is not configured.');\n }\n return environment.resolveSenderPrivKeyScalarHex(privateAddressStpl1);\n}\n\nasync function readSenderPrivKeyScalarHex(\n environment: StellarTransactEnvironment,\n privateAddressStpl1: string,\n owner?: string,\n): Promise<string | undefined> {\n if (owner && environment.resolveSenderPrivKeyScalarFromState) {\n const fromState = await environment.resolveSenderPrivKeyScalarFromState({\n owner,\n privateAddressStpl1,\n });\n if (fromState?.trim()) {\n return fromState.trim();\n }\n }\n if (environment.readSenderPrivKeyScalarHex) {\n const cached = await environment.readSenderPrivKeyScalarHex(privateAddressStpl1);\n if (cached?.trim()) {\n return cached.trim();\n }\n }\n return undefined;\n}\n\nexport async function ensureSenderPrivKeyScalarHex(\n environment: StellarTransactEnvironment,\n privateAddressStpl1: string,\n owner?: string,\n): Promise<string> {\n const cached = await readSenderPrivKeyScalarHex(\n environment,\n privateAddressStpl1,\n owner,\n );\n if (cached) {\n return cached;\n }\n if (environment.ensureSenderPrivKeyScalarHex) {\n return environment.ensureSenderPrivKeyScalarHex(privateAddressStpl1);\n }\n return resolveSenderPrivKeyScalarHex(environment, privateAddressStpl1, owner);\n}\n\nexport async function loadMerkleState(\n environment: StellarTransactEnvironment,\n walletPublicKey: string,\n): Promise<{ commitments: string[] }> {\n const merged = await fetchAndMergeMerkleState({\n poolContractId: environment.network.poolContract,\n walletPublicKey,\n transactEnvironment: environment,\n ...(environment.poolMerkleState\n ? { poolMerkleState: environment.poolMerkleState }\n : {}),\n });\n return { commitments: merged.commitments };\n}\n\nexport function enrichPreparedOperation(\n prepared: StellarPreparedOperation,\n outputRecords: StellarPreparedOperation['outputRecords'],\n artifacts: NonNullable<StellarPreparedOperation['transactArtifacts']>,\n): StellarPreparedOperation {\n return {\n ...prepared,\n outputRecords,\n transactArtifacts: artifacts,\n submissionPayload: {\n operationId: crypto.randomUUID(),\n signed: false,\n },\n };\n}\n","import {\n isPrivateAddressTransferFrom,\n readTransferFromPrivateAddress,\n} from '../transact/transfer-source/index.js';\nimport type {\n StellarAddress,\n StellarAssetId,\n StellarPrivateRecord,\n StellarTransferFromAddress,\n StellarTransferIntent,\n} from '../types.js';\n\nexport function buildTransferOutputRecords(\n intent: StellarTransferIntent,\n consumedTotal: bigint,\n walletPublicKey: StellarAddress,\n): StellarPrivateRecord[] {\n const recipientOwner = recipientOutputOwner(intent, walletPublicKey);\n const changeAmount = consumedTotal - intent.amount;\n const outputs = [\n createOutputRecord({\n ...recipientOwner,\n asset: intent.asset,\n amount: intent.amount,\n }),\n ];\n if (changeAmount > 0n && isPrivateAddressTransferFrom(intent.from)) {\n outputs.push(\n createOutputRecord({\n owner: walletPublicKey,\n privateAddress: intent.from,\n asset: intent.asset,\n amount: changeAmount,\n }),\n );\n }\n return outputs;\n}\n\nexport function buildWithdrawOutputRecords(input: {\n from: StellarTransferFromAddress;\n to: StellarAddress;\n asset: StellarAssetId;\n amount: bigint;\n consumedTotal: bigint;\n recipientDisclosedPublicly: boolean;\n walletPublicKey: StellarAddress;\n}): StellarPrivateRecord[] {\n const changeAmount = input.consumedTotal - input.amount;\n if (input.recipientDisclosedPublicly) {\n if (changeAmount > 0n) {\n return [\n createOutputRecord({\n owner: input.walletPublicKey,\n privateAddress: readTransferFromPrivateAddress(input.from),\n asset: input.asset,\n amount: changeAmount,\n }),\n ];\n }\n return [];\n }\n const outputs = [\n createOutputRecord({\n owner: input.to,\n asset: input.asset,\n amount: input.amount,\n }),\n ];\n if (changeAmount > 0n && isPrivateAddressTransferFrom(input.from)) {\n outputs.push(\n createOutputRecord({\n owner: input.walletPublicKey,\n privateAddress: input.from,\n asset: input.asset,\n amount: changeAmount,\n }),\n );\n }\n return outputs;\n}\n\nexport function buildDepositOutputRecords(\n owner: StellarAddress,\n privateAddress: string,\n asset: StellarAssetId,\n amount: bigint,\n): StellarPrivateRecord[] {\n return [createOutputRecord({ owner, privateAddress, asset, amount })];\n}\n\nfunction recipientOutputOwner(\n intent: StellarTransferIntent,\n walletPublicKey: StellarAddress,\n): { owner: StellarAddress; privateAddress?: string } {\n if (intent.disclosure.recipientAddress === 'public') {\n return { owner: intent.to.trim() };\n }\n return { owner: walletPublicKey, privateAddress: intent.to.trim() };\n}\n\nfunction createOutputRecord(input: {\n owner: StellarAddress;\n privateAddress?: string;\n asset: StellarAssetId;\n amount: bigint;\n}): StellarPrivateRecord {\n return {\n id: pendingOutputRecordId(input.owner, input.asset, input.amount),\n owner: input.owner,\n ...(input.privateAddress ? { privateAddress: input.privateAddress } : {}),\n asset: input.asset,\n amount: input.amount,\n consumed: false,\n };\n}\n\nfunction pendingOutputRecordId(\n owner: StellarAddress,\n asset: StellarAssetId,\n amount: bigint,\n): string {\n return `pending-output:${owner}:${asset}:${amount}`;\n}\n","import { assertPrivateRecordsNullifiersAvailable } from '../transact/transfer-source/index.js';\nimport type {\n StellarPreparedOperation,\n StellarPrivateRecord,\n StellarStorageAdapter,\n StellarTransactEngine,\n StellarTransferIntent,\n StellarWalletAdapter,\n} from '../types.js';\nimport { buildTransferOutputRecords } from './transfer-output-records.js';\nimport { selectPrivateRecords, sumRecordAmounts } from './record-selection.js';\n\nexport type TransferPrepareDeps = {\n storage: StellarStorageAdapter;\n wallet: StellarWalletAdapter;\n engine: StellarTransactEngine;\n poolContract: string;\n checkNullifierSpent?: (input: {\n nullifier: string;\n walletPublicKey: string;\n }) => Promise<boolean>;\n};\n\nexport async function prepareTransferOperation(\n intent: StellarTransferIntent,\n deps: TransferPrepareDeps,\n): Promise<StellarPreparedOperation> {\n const spend = await resolvePrivateAddressSpend(intent, deps);\n const walletAddress = await deps.wallet.getAddress();\n const walletPublicKey = walletAddress.trim();\n const consumedTotal = sumRecordAmounts(spend.consumedRecords);\n const prepared: StellarPreparedOperation = {\n kind: 'transfer',\n intent,\n consumedRecords: spend.consumedRecords,\n outputRecords: buildTransferOutputRecords(intent, consumedTotal, walletPublicKey),\n submissionPayload: {\n operationId: crypto.randomUUID(),\n signed: false,\n },\n transactArtifacts: spend.transactArtifacts,\n };\n return deps.engine.prepare(prepared);\n}\n\nasync function resolvePrivateAddressSpend(\n intent: StellarTransferIntent,\n deps: TransferPrepareDeps,\n): Promise<{\n consumedRecords: StellarPrivateRecord[];\n transactArtifacts: NonNullable<StellarPreparedOperation['transactArtifacts']>;\n}> {\n const walletAddress = await deps.wallet.getAddress();\n const walletPublicKey = walletAddress.trim();\n const consumedRecords = await selectPrivateRecords({\n storage: deps.storage,\n kind: 'transfer',\n intent,\n walletPublicKey,\n ...(deps.checkNullifierSpent\n ? { checkNullifierSpent: deps.checkNullifierSpent }\n : {}),\n });\n await assertPrivateRecordsNullifiersAvailable({\n records: consumedRecords,\n walletPublicKey: walletAddress.trim(),\n ...(deps.checkNullifierSpent\n ? { checkNullifierSpent: deps.checkNullifierSpent }\n : {}),\n });\n return {\n consumedRecords,\n transactArtifacts: {\n spendSource: 'privateAddress',\n },\n };\n}\n","import type {\n DepositIntent,\n NetworkAdapter,\n WithdrawIntent,\n} from '@arcanetech/privacy-sdk-core';\nimport { submitPreparedOperation } from '../transact/engine/execution/submit-prepared.js';\nimport type {\n StellarAddress,\n StellarAssetId,\n StellarOperationReceipt,\n StellarPreparedOperation,\n StellarPrivateRecord,\n StellarStorageAdapter,\n StellarTransactEngine,\n StellarTransferFromAddress,\n StellarTransferIntent,\n StellarWalletAdapter,\n} from '../types.js';\nimport {\n buildSpendOutputRecords,\n selectPrivateRecords,\n sumRecordAmounts,\n} from './record-selection.js';\nimport { prepareTransferOperation } from './transfer-prepare.js';\n\ntype StellarIntent =\n | DepositIntent<StellarAddress, StellarAssetId, bigint>\n | StellarTransferIntent\n | WithdrawIntent<StellarAddress, StellarAssetId, bigint>;\n\nexport function createStellarNetworkAdapter(deps: {\n storage: StellarStorageAdapter;\n wallet: StellarWalletAdapter;\n engine: StellarTransactEngine;\n poolContract: string;\n checkNullifierSpent?: (input: {\n nullifier: string;\n walletPublicKey: string;\n }) => Promise<boolean>;\n}): NetworkAdapter<\n StellarAddress,\n StellarAssetId,\n bigint,\n StellarPreparedOperation,\n StellarOperationReceipt\n> {\n return {\n prepareDeposit: async (intent) =>\n prepareOperation({ kind: 'deposit', intent, ...deps }),\n prepareTransfer: async (intent) => prepareTransferOperation(intent, deps),\n prepareWithdraw: async (intent) =>\n prepareOperation({ kind: 'withdraw', intent, ...deps }),\n submit: async (prepared, options) => {\n const submissionInput = {\n prepared,\n storage: deps.storage,\n wallet: deps.wallet,\n engine: deps.engine,\n };\n if (options !== undefined) {\n return submitPreparedOperation({ ...submissionInput, options });\n }\n return submitPreparedOperation(submissionInput);\n },\n };\n}\n\nasync function loadSpendSelectionWalletPublicKey(\n wallet: StellarWalletAdapter,\n): Promise<string> {\n const walletAddress = await wallet.getAddress();\n return walletAddress.trim();\n}\n\nasync function prepareWithdrawRecords(input: {\n storage: StellarStorageAdapter;\n intent: WithdrawIntent<StellarAddress, StellarAssetId, bigint>;\n walletPublicKey: string;\n checkNullifierSpent?: (parameters: {\n nullifier: string;\n walletPublicKey: string;\n }) => Promise<boolean>;\n}): Promise<StellarPrivateRecord[]> {\n return selectPrivateRecords({\n storage: input.storage,\n kind: 'withdraw',\n intent: input.intent,\n walletPublicKey: input.walletPublicKey,\n ...(input.checkNullifierSpent\n ? { checkNullifierSpent: input.checkNullifierSpent }\n : {}),\n });\n}\n\nasync function resolvePrepareConsumedRecords(input: {\n kind: 'deposit' | 'withdraw';\n intent: StellarIntent;\n storage: StellarStorageAdapter;\n wallet: StellarWalletAdapter;\n checkNullifierSpent?: (parameters: {\n nullifier: string;\n walletPublicKey: string;\n }) => Promise<boolean>;\n}): Promise<StellarPrivateRecord[]> {\n if (input.kind === 'deposit') {\n return [];\n }\n return prepareWithdrawRecords({\n storage: input.storage,\n intent: input.intent as WithdrawIntent<StellarAddress, StellarAssetId, bigint>,\n walletPublicKey: await loadSpendSelectionWalletPublicKey(input.wallet),\n ...(input.checkNullifierSpent\n ? { checkNullifierSpent: input.checkNullifierSpent }\n : {}),\n });\n}\n\nfunction buildDepositOrWithdrawPrepared(input: {\n kind: 'deposit' | 'withdraw';\n intent: StellarIntent;\n consumedRecords: StellarPrivateRecord[];\n walletPublicKey: StellarAddress;\n}): StellarPreparedOperation {\n const consumedTotal = sumRecordAmounts(input.consumedRecords);\n const withdrawIntent = input.intent as WithdrawIntent<\n StellarAddress,\n StellarAssetId,\n bigint\n >;\n return {\n kind: input.kind,\n intent: input.intent,\n consumedRecords: input.consumedRecords,\n outputRecords: buildSpendOutputRecords({\n kind: input.kind,\n from: withdrawIntent.from as StellarTransferFromAddress,\n to: input.intent.to,\n asset: input.intent.asset,\n amount: input.intent.amount,\n consumedTotal,\n recipientDisclosedPublicly:\n input.kind === 'withdraw' &&\n withdrawIntent.disclosure.recipientAddress === 'public',\n walletPublicKey: input.walletPublicKey,\n }),\n submissionPayload: {\n operationId: crypto.randomUUID(),\n signed: false,\n },\n };\n}\n\nasync function prepareOperation(input: {\n kind: 'deposit' | 'withdraw';\n intent: StellarIntent;\n storage: StellarStorageAdapter;\n engine: StellarTransactEngine;\n wallet: StellarWalletAdapter;\n checkNullifierSpent?: (parameters: {\n nullifier: string;\n walletPublicKey: string;\n }) => Promise<boolean>;\n}): Promise<StellarPreparedOperation> {\n const consumedRecords = await resolvePrepareConsumedRecords(input);\n const walletPublicKey =\n input.kind === 'deposit'\n ? (input.intent.from as StellarAddress)\n : await loadSpendSelectionWalletPublicKey(input.wallet);\n const prepared = buildDepositOrWithdrawPrepared({\n kind: input.kind,\n intent: input.intent,\n consumedRecords,\n walletPublicKey,\n });\n return input.engine.prepare(prepared);\n}\n","export const STELLAR_STATE_PATHS = {\n privateRecords: '$.privateRecords',\n registryPrivateAddresses: '$.registry.privateAddresses',\n registryRegisteredAddresses: '$.registry.registeredAddresses',\n registryLookups: '$.registry.lookups',\n assets: '$.assets',\n assetsById: '$.assets.byId',\n assetsListOrder: '$.assets.listOrder',\n publicBalances: '$.balances.publicByOwnerAsset',\n poolsByContract: '$.pools.byContract',\n poolsLeafEphemeral: '$.pools.leafEphemeralByContractAndIndex',\n deliveriesIncomingById: '$.deliveries.incomingById',\n deliveriesSync: '$.deliveries.syncByPrivateAddressAsset',\n transactionsByHash: '$.transactions.byHash',\n walletPrivateAddressScalars: '$.wallet.privateAddressScalars',\n walletPrivateAddressRecords: '$.wallet.privateAddressRecords',\n walletDefaultPrivateAddressNonce: '$.wallet.defaultPrivateAddressNonce',\n} as const;\n","import { z } from 'zod';\n\nexport const paginationSchema = z.object({\n total: z.number().int().nonnegative(),\n page: z.number().int().positive(),\n pageSize: z.number().int().positive(),\n hasMore: z.boolean(),\n});\n\nconst stellarPrivateCoinNoteSchema = z.object({\n value: z.string(),\n nullifier: z.string(),\n secret: z.string(),\n commitment: z.string(),\n asset_hi: z.string(),\n asset_lo: z.string(),\n application_id: z.string().optional(),\n});\n\nexport const privateRecordSchema = z.object({\n id: z.string().min(1),\n owner: z.string().min(1),\n asset: z.string().min(1),\n amount: z.coerce.bigint(),\n consumed: z.boolean(),\n status: z.enum(['pending', 'finalized', 'spent']).optional(),\n poolContract: z.string().optional(),\n commitmentHex: z.string().optional(),\n nullifierHex: z.string().optional(),\n amountDisplay: z.number().optional(),\n deliveryId: z.number().int().optional(),\n privateAddress: z.string().optional(),\n txHash: z.string().optional(),\n coinNote: stellarPrivateCoinNoteSchema.optional(),\n depositScalarHex: z.string().optional(),\n precommitementHex: z.string().optional(),\n});\n\nexport const assetSchema = z.object({\n id: z.number().int(),\n assetId: z.string().min(1),\n name: z.string().min(1),\n logoUrl: z.string().nullable(),\n issuerAddress: z.string().nullable(),\n clientContract: z.string().nullable(),\n poolContracts: z.array(z.string()),\n poolContract: z.string().min(1),\n mintable: z.boolean(),\n mintAmount: z.string().nullable(),\n decimals: z.number().int().nullable().optional(),\n});\n\nexport const publicBalanceSchema = z.object({\n owner: z.string().min(1),\n asset: z.string().min(1),\n balance: z.string(),\n trustlineStatus: z.enum(['active', 'inactive', 'none']),\n});\n\nexport const registryLookupSchema = z.object({\n owner: z.string().min(1),\n status: z.enum(['registered', 'unregistered']),\n privateAddressStpl1: z.string().optional(),\n publicKeyXHex: z.string().optional(),\n publicKeyYHex: z.string().optional(),\n updatedAtLedger: z.number().int().optional(),\n cachedAt: z.string().optional(),\n});\n\nexport const walletPrivateAddressScalarSchema = z.object({\n owner: z.string().min(1),\n nonce: z.string().min(1),\n scalarHex: z.string().min(1),\n updatedAt: z.string().optional(),\n});\n\nexport const walletPrivateAddressRecordSchema = z.object({\n owner: z.string().min(1),\n nonce: z.string().min(1),\n privateAddress: z.string().min(1),\n createdAt: z.number(),\n});\n\nexport const poolMerkleStateSchema = z.object({\n poolContract: z.string().min(1),\n commitments: z.array(z.string()),\n commitmentCount: z.number().int().nonnegative(),\n merkleRootHex: z.string().min(1),\n updatedAt: z.number(),\n syncedLedger: z.number().int().optional(),\n});\n\nexport const leafEphemeralSchema = z.object({\n poolContract: z.string().min(1),\n leafIndex: z.number().int().nonnegative(),\n xHex: z.string().min(1),\n yHex: z.string().min(1),\n cachedAt: z.string().optional(),\n});\n\nexport const incomingDeliverySchema = z.object({\n id: z.number().int(),\n privateAddress: z.string().min(1),\n asset: z.string().min(1),\n ciphertextBase64: z.string().min(1),\n ephemeralKey: z.string().min(1),\n tagBase64: z.string().min(1),\n createdAt: z.string().min(1),\n processed: z.boolean().optional(),\n});\n\nexport const deliverySyncStateSchema = z.object({\n privateAddress: z.string().min(1),\n asset: z.string().min(1),\n bloomM: z.number().int().positive(),\n bloomK: z.number().int().positive(),\n bloomBitsBase64: z.string().optional(),\n lastPage: z.number().int().positive().optional(),\n lastPolledAt: z.string().optional(),\n});\n\nexport const transactionStatusSchema = z.object({\n txHash: z.string().min(1),\n status: z.enum(['pending', 'success', 'failed']),\n ledger: z.number().int().optional(),\n createdAt: z.string().optional(),\n});\n","export function withoutUndefinedFields<T extends Record<string, unknown>>(value: T): T {\n const next = {} as T;\n for (const [key, fieldValue] of Object.entries(value)) {\n if (fieldValue !== undefined) {\n Reflect.set(next, key, fieldValue);\n }\n }\n return next;\n}\n","import { assetSchema, publicBalanceSchema } from '../../schemas/shared.js';\nimport type {\n StellarAsset,\n StellarAssetsCatalog,\n StellarPublicBalance,\n} from '../../domain/types.js';\nimport { withoutUndefinedFields } from '../../foundation/coerce.js';\n\nexport function normalizeAssetsCatalog(value: unknown): StellarAssetsCatalog {\n if (typeof value !== 'object' || value === null) {\n return { byId: {}, listOrder: [] };\n }\n const record = value as Record<string, unknown>;\n const byIdRaw = record.byId;\n const listOrderRaw = record.listOrder;\n const byId: Record<string, StellarAsset> = {};\n if (typeof byIdRaw === 'object' && byIdRaw !== null) {\n for (const [key, entry] of Object.entries(byIdRaw)) {\n const parsed = assetSchema.safeParse(entry);\n if (parsed.success) {\n byId[key] = withoutUndefinedFields(parsed.data) as StellarAsset;\n }\n }\n }\n const listOrder = Array.isArray(listOrderRaw)\n ? listOrderRaw.filter((item): item is string => typeof item === 'string')\n : [];\n return { byId, listOrder };\n}\n\nexport function normalizeAsset(value: unknown): StellarAsset | undefined {\n const parsed = assetSchema.safeParse(value);\n return parsed.success\n ? (withoutUndefinedFields(parsed.data) as StellarAsset)\n : undefined;\n}\n\nexport function normalizePublicBalance(\n value: unknown,\n): StellarPublicBalance | undefined {\n const parsed = publicBalanceSchema.safeParse(value);\n return parsed.success ? parsed.data : undefined;\n}\n\nexport function normalizePublicBalancesFromEntries(\n value: unknown,\n owner: string,\n): StellarPublicBalance[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value\n .map((entry) => {\n if (!Array.isArray(entry) || entry.length < 2) {\n return;\n }\n const [key, balanceValue] = entry;\n if (typeof key !== 'string' || !key.startsWith(`${owner}:`)) {\n return;\n }\n return normalizePublicBalance(balanceValue);\n })\n .filter((balance): balance is StellarPublicBalance => balance !== undefined);\n}\n","import {\n deliverySyncStateSchema,\n incomingDeliverySchema,\n} from '../../schemas/shared.js';\nimport type {\n StellarDeliverySyncState,\n StellarIncomingDelivery,\n} from '../../domain/types.js';\nimport { withoutUndefinedFields } from '../../foundation/coerce.js';\n\nexport function normalizeIncomingDeliveries(value: unknown): StellarIncomingDelivery[] {\n const entries =\n typeof value === 'object' && value !== null && !Array.isArray(value)\n ? Object.values(value)\n : value;\n if (!Array.isArray(entries)) {\n return [];\n }\n return entries.flatMap((entry) => {\n const parsed = incomingDeliverySchema.safeParse(entry);\n return parsed.success\n ? [withoutUndefinedFields(parsed.data) as StellarIncomingDelivery]\n : [];\n });\n}\n\nexport function normalizeDeliverySyncState(\n value: unknown,\n): StellarDeliverySyncState | undefined {\n const parsed = deliverySyncStateSchema.safeParse(value);\n return parsed.success\n ? (withoutUndefinedFields(parsed.data) as StellarDeliverySyncState)\n : undefined;\n}\n","import { leafEphemeralSchema, poolMerkleStateSchema } from '../../schemas/shared.js';\nimport type {\n StellarLeafEphemeral,\n StellarPoolMerkleState,\n} from '../../domain/types.js';\nimport { withoutUndefinedFields } from '../../foundation/coerce.js';\n\nexport function normalizePoolMerkleState(\n value: unknown,\n): StellarPoolMerkleState | undefined {\n const parsed = poolMerkleStateSchema.safeParse(value);\n return parsed.success\n ? (withoutUndefinedFields(parsed.data) as StellarPoolMerkleState)\n : undefined;\n}\n\nexport function normalizeLeafEphemeral(\n value: unknown,\n): StellarLeafEphemeral | undefined {\n const parsed = leafEphemeralSchema.safeParse(value);\n return parsed.success\n ? (withoutUndefinedFields(parsed.data) as StellarLeafEphemeral)\n : undefined;\n}\n","import { registryLookupSchema } from '../../schemas/shared.js';\nimport type { StellarRegistryLookup } from '../../domain/types.js';\nimport { withoutUndefinedFields } from '../../foundation/coerce.js';\n\nexport function normalizeCachedPrivateAddress(value: unknown): string | undefined {\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n\nexport function normalizeRegistryLookup(\n value: unknown,\n): StellarRegistryLookup | undefined {\n const parsed = registryLookupSchema.safeParse(value);\n return parsed.success\n ? (withoutUndefinedFields(parsed.data) as StellarRegistryLookup)\n : undefined;\n}\n\nexport function normalizeRegistryLookupFromLegacy(input: {\n address: string;\n registered: unknown;\n privateAddress: unknown;\n}): StellarRegistryLookup | undefined {\n const lookup = normalizeRegistryLookup(\n typeof input.registered === 'object' && input.registered !== null\n ? input.registered\n : undefined,\n );\n if (lookup) {\n return lookup;\n }\n if (input.registered === undefined && input.privateAddress === undefined) {\n return undefined;\n }\n const registered = Boolean(input.registered);\n const privateAddressStpl1 = normalizeCachedPrivateAddress(input.privateAddress);\n if (!registered && privateAddressStpl1 === undefined) {\n return { owner: input.address, status: 'unregistered' };\n }\n return withoutUndefinedFields({\n owner: input.address,\n status: registered ? 'registered' : 'unregistered',\n ...(privateAddressStpl1 === undefined ? {} : { privateAddressStpl1 }),\n }) as StellarRegistryLookup;\n}\n","import { z } from 'zod';\nimport { privateRecordSchema, transactionStatusSchema } from '../../schemas/shared.js';\nimport type {\n StellarPrivateRecord,\n StellarTransactionStatus,\n} from '../../domain/types.js';\nimport { withoutUndefinedFields } from '../../foundation/coerce.js';\n\nexport function normalizePrivateRecords(value: unknown): StellarPrivateRecord[] {\n if (!Array.isArray(value)) {\n return [];\n }\n const records = value.flatMap((item) => {\n const parsed = privateRecordSchema.safeParse(item);\n return parsed.success ? [normalizePrivateRecordFields(parsed.data)] : [];\n });\n return deduplicatePrivateRecords(records);\n}\n\nexport function normalizeTransactionStatus(\n value: unknown,\n): StellarTransactionStatus | undefined {\n const parsed = transactionStatusSchema.safeParse(value);\n return parsed.success\n ? (withoutUndefinedFields(parsed.data) as StellarTransactionStatus)\n : undefined;\n}\n\nfunction privateRecordCommitmentKey(record: StellarPrivateRecord): string {\n return (\n record.commitmentHex?.trim() ||\n record.coinNote?.commitment.trim() ||\n record.id.trim()\n )\n .replace(/^0x/iu, '')\n .toLowerCase();\n}\n\nfunction normalizePrivateRecordFields(\n record: z.infer<typeof privateRecordSchema>,\n): StellarPrivateRecord {\n const normalized = withoutUndefinedFields(record) as StellarPrivateRecord;\n if (!normalized.privateAddress && normalized.owner.trim().startsWith('stpl')) {\n return { ...normalized, privateAddress: normalized.owner.trim() };\n }\n return normalized;\n}\n\nfunction preferPrivateRecord(\n current: StellarPrivateRecord,\n incoming: StellarPrivateRecord,\n key: string,\n): StellarPrivateRecord {\n if (privateRecordIdKey(incoming) === key) {\n return incoming;\n }\n if (privateRecordIdKey(current) === key) {\n return current;\n }\n return incoming;\n}\n\nfunction privateRecordIdKey(record: StellarPrivateRecord): string {\n return record.id.trim().replace(/^0x/iu, '').toLowerCase();\n}\n\nfunction deduplicatePrivateRecords(\n records: StellarPrivateRecord[],\n): StellarPrivateRecord[] {\n const byCommitment = new Map<string, StellarPrivateRecord>();\n for (const record of records) {\n const key = privateRecordCommitmentKey(record);\n const current = byCommitment.get(key);\n byCommitment.set(key, current ? preferPrivateRecord(current, record, key) : record);\n }\n return [...byCommitment.values()];\n}\n","import {\n walletPrivateAddressScalarSchema,\n walletPrivateAddressRecordSchema,\n} from '../../schemas/shared.js';\nimport type {\n StellarWalletPrivateAddressScalar,\n StellarWalletPrivateAddressRecord,\n} from '../../domain/types.js';\nimport { withoutUndefinedFields } from '../../foundation/coerce.js';\n\nexport function normalizeWalletPrivateAddressScalar(\n value: unknown,\n): StellarWalletPrivateAddressScalar | undefined {\n const parsed = walletPrivateAddressScalarSchema.safeParse(value);\n return parsed.success\n ? (withoutUndefinedFields(parsed.data) as StellarWalletPrivateAddressScalar)\n : undefined;\n}\n\nexport function normalizeWalletPrivateAddressRecord(\n value: unknown,\n): StellarWalletPrivateAddressRecord | undefined {\n const parsed = walletPrivateAddressRecordSchema.safeParse(value);\n return parsed.success\n ? (withoutUndefinedFields(parsed.data) as StellarWalletPrivateAddressRecord)\n : undefined;\n}\n\nexport function normalizeWalletDefaultPrivateAddressNonce(\n value: unknown,\n): string | undefined {\n return typeof value === 'string' ? value.trim() || undefined : undefined;\n}\n","import { registerArrayFilterItemSchema } from '@arcanetech/privacy-sdk-core/state';\nimport { privateRecordSchema } from '../schemas/shared.js';\nimport { stellarArrayFilterSchemaKeys } from './ops.js';\n\nlet registered = false;\n\nexport function registerStellarArrayFilterSchemas(): void {\n if (registered) {\n return;\n }\n registerArrayFilterItemSchema(\n stellarArrayFilterSchemaKeys.privateRecord,\n privateRecordSchema,\n );\n registered = true;\n}\n","import { STELLAR_STATE_PATHS } from '../foundation/paths.js';\n\nexport const stellarArrayFilterSchemaKeys = {\n privateRecord: 'privateRecord',\n} as const;\n\nexport function rejectPrivateRecordsByIds(ids: string[]) {\n return {\n opType: 'arrayFilter' as const,\n jsonPath: STELLAR_STATE_PATHS.privateRecords,\n itemSchemaKey: stellarArrayFilterSchemaKeys.privateRecord,\n rejectWhen: {\n op: 'fieldIn' as const,\n field: 'id',\n values: ids,\n },\n };\n}\n\nexport function rejectConsumedPrivateRecords() {\n return {\n opType: 'arrayFilter' as const,\n jsonPath: STELLAR_STATE_PATHS.privateRecords,\n itemSchemaKey: stellarArrayFilterSchemaKeys.privateRecord,\n rejectWhen: {\n op: 'fieldEquals' as const,\n field: 'consumed',\n value: true,\n },\n };\n}\n","import { type StateBridgeDefinition } from '@arcanetech/privacy-sdk-core/state';\nimport type { StellarAddress, StellarAssetId } from '../../types.js';\n\nexport const stellarStateCallTypes = {\n readStellarAddressRegistered: 'readStellarAddressRegistered',\n readCachedPrivateAddress: 'readCachedPrivateAddress',\n readRegistryLookup: 'readRegistryLookup',\n saveRegisteredPrivateAddress: 'saveRegisteredPrivateAddress',\n saveRegistryLookup: 'saveRegistryLookup',\n invalidateRegisteredAddress: 'invalidateRegisteredAddress',\n invalidateRegistryLookup: 'invalidateRegistryLookup',\n readAssetsCatalog: 'readAssetsCatalog',\n readAsset: 'readAsset',\n replaceAssets: 'replaceAssets',\n upsertAssets: 'upsertAssets',\n readPublicBalance: 'readPublicBalance',\n readPublicBalances: 'readPublicBalances',\n setPublicBalance: 'setPublicBalance',\n setPublicBalances: 'setPublicBalances',\n readPoolMerkleState: 'readPoolMerkleState',\n setPoolMerkleState: 'setPoolMerkleState',\n readLeafEphemeral: 'readLeafEphemeral',\n setLeafEphemeral: 'setLeafEphemeral',\n listPrivateRecords: 'listPrivateRecords',\n savePrivateRecords: 'savePrivateRecords',\n replacePrivateRecords: 'replacePrivateRecords',\n upsertPrivateRecords: 'upsertPrivateRecords',\n pruneConsumedPrivateRecords: 'pruneConsumedPrivateRecords',\n readIncomingDeliveries: 'readIncomingDeliveries',\n upsertIncomingDeliveries: 'upsertIncomingDeliveries',\n readDeliverySyncState: 'readDeliverySyncState',\n setDeliverySyncState: 'setDeliverySyncState',\n readTransactionStatus: 'readTransactionStatus',\n setTransactionStatus: 'setTransactionStatus',\n clearTransactionStatus: 'clearTransactionStatus',\n saveWalletPrivateAddressScalar: 'saveWalletPrivateAddressScalar',\n readWalletPrivateAddressScalar: 'readWalletPrivateAddressScalar',\n saveWalletPrivateAddressRecord: 'saveWalletPrivateAddressRecord',\n readWalletPrivateAddressRecord: 'readWalletPrivateAddressRecord',\n setWalletDefaultPrivateAddressNonce: 'setWalletDefaultPrivateAddressNonce',\n readWalletDefaultPrivateAddressNonce: 'readWalletDefaultPrivateAddressNonce',\n deleteWalletPrivateAddressScalar: 'deleteWalletPrivateAddressScalar',\n} as const;\n\nexport type StellarStateDefinition = StateBridgeDefinition;\n\nexport interface StellarPublicBalanceInput {\n owner: StellarAddress;\n asset: StellarAssetId;\n balance: string;\n trustlineStatus: 'active' | 'inactive' | 'none';\n}\n","import { z } from 'zod';\nimport { STELLAR_STATE_PATHS } from '../../foundation/paths.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport { assetSchema } from '../shared.js';\nimport { withoutUndefinedFields } from '../../foundation/coerce.js';\n\nexport const readAssetsCatalogSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.readAssetsCatalog),\n })\n .transform(({ type }) => ({\n type,\n operations: [\n {\n opType: 'primitiveGet' as const,\n jsonPath: STELLAR_STATE_PATHS.assets,\n },\n ],\n }));\n\nexport const readAssetSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.readAsset),\n assetId: z.string().min(1),\n })\n .transform(({ type, assetId }) => ({\n type,\n operations: [\n {\n opType: 'recordGet' as const,\n jsonPath: STELLAR_STATE_PATHS.assetsById,\n key: assetId,\n },\n ],\n }));\n\nexport const replaceAssetsSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.replaceAssets),\n assets: z.array(assetSchema),\n })\n .transform(({ type, assets }) => {\n const byId: Record<string, unknown> = {};\n const listOrder: string[] = [];\n for (const asset of assets) {\n Reflect.set(byId, asset.assetId, withoutUndefinedFields(asset));\n listOrder.push(asset.assetId);\n }\n return {\n type,\n operations: [\n {\n opType: 'primitiveSet' as const,\n jsonPath: STELLAR_STATE_PATHS.assets,\n value: { byId, listOrder },\n },\n ],\n };\n });\n\nexport const upsertAssetsSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.upsertAssets),\n assets: z.array(assetSchema),\n })\n .transform(({ type, assets }) => ({\n type,\n operations: assets.map((asset) => ({\n opType: 'recordSet' as const,\n jsonPath: STELLAR_STATE_PATHS.assetsById,\n key: asset.assetId,\n value: asset,\n })),\n }));\n","import type { StateBridgeDefinition } from '@arcanetech/privacy-sdk-core/state';\nimport { stellarStateCallTypes } from '../bridge/call-types.js';\nimport {\n readAssetsCatalogSchema,\n readAssetSchema,\n replaceAssetsSchema,\n upsertAssetsSchema,\n} from '../schemas/assets/catalog.js';\n\nexport const stellarAssetsStateDefinitions: StateBridgeDefinition[] = [\n {\n type: stellarStateCallTypes.readAssetsCatalog,\n mode: 'read',\n schema: readAssetsCatalogSchema,\n },\n {\n type: stellarStateCallTypes.readAsset,\n mode: 'read',\n schema: readAssetSchema,\n },\n {\n type: stellarStateCallTypes.replaceAssets,\n mode: 'write',\n schema: replaceAssetsSchema,\n },\n {\n type: stellarStateCallTypes.upsertAssets,\n mode: 'write',\n schema: upsertAssetsSchema,\n },\n];\n","import { z } from 'zod';\nimport { STELLAR_STATE_PATHS } from '../../foundation/paths.js';\nimport { ownerAssetKey } from '../../foundation/keys.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport { publicBalanceSchema } from '../shared.js';\n\nexport const readPublicBalanceSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.readPublicBalance),\n owner: z.string().min(1),\n asset: z.string().min(1),\n })\n .transform(({ type, owner, asset }) => ({\n type,\n operations: [\n {\n opType: 'recordGet' as const,\n jsonPath: STELLAR_STATE_PATHS.publicBalances,\n key: ownerAssetKey(owner, asset),\n },\n ],\n }));\n\nexport const readPublicBalancesSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.readPublicBalances),\n owner: z.string().min(1),\n })\n .transform(({ type }) => ({\n type,\n operations: [\n {\n opType: 'recordEntries' as const,\n jsonPath: STELLAR_STATE_PATHS.publicBalances,\n },\n ],\n }));\n\nexport const setPublicBalanceSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.setPublicBalance),\n balance: publicBalanceSchema,\n })\n .transform(({ type, balance }) => ({\n type,\n operations: [\n {\n opType: 'recordSet' as const,\n jsonPath: STELLAR_STATE_PATHS.publicBalances,\n key: ownerAssetKey(balance.owner, balance.asset),\n value: balance,\n },\n ],\n }));\n\nexport const setPublicBalancesSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.setPublicBalances),\n owner: z.string().min(1),\n balances: z.array(publicBalanceSchema),\n })\n .transform(({ type, owner, balances }) => ({\n type,\n operations: balances.map((balance) => ({\n opType: 'recordSet' as const,\n jsonPath: STELLAR_STATE_PATHS.publicBalances,\n key: ownerAssetKey(owner, balance.asset),\n value: { ...balance, owner },\n })),\n }));\n","import type { StellarAddress, StellarAssetId } from '../../types.js';\n\nexport function ownerAssetKey(owner: StellarAddress, asset: StellarAssetId): string {\n return `${owner}:${asset}`;\n}\n\nexport function readRecordValue<T>(\n record: Record<string, T>,\n key: string,\n): T | undefined {\n if (!Object.hasOwn(record, key)) {\n return undefined;\n }\n return Reflect.get(record, key) as T | undefined;\n}\n\nexport function poolLeafKey(poolContract: string, leafIndex: number): string {\n return `${poolContract}:${leafIndex}`;\n}\n\nexport function privateAddressAssetKey(\n privateAddress: string,\n asset: StellarAssetId,\n): string {\n return `${privateAddress}:${asset}`;\n}\n\nexport function walletOwnerNonceKey(owner: StellarAddress, nonce: string): string {\n return `${owner}:${nonce}`;\n}\n","import type { StateBridgeDefinition } from '@arcanetech/privacy-sdk-core/state';\nimport { stellarStateCallTypes } from '../bridge/call-types.js';\nimport {\n readPublicBalanceSchema,\n readPublicBalancesSchema,\n setPublicBalanceSchema,\n setPublicBalancesSchema,\n} from '../schemas/assets/balances.js';\n\nexport const stellarBalancesStateDefinitions: StateBridgeDefinition[] = [\n {\n type: stellarStateCallTypes.readPublicBalance,\n mode: 'read',\n schema: readPublicBalanceSchema,\n },\n {\n type: stellarStateCallTypes.readPublicBalances,\n mode: 'read',\n schema: readPublicBalancesSchema,\n },\n {\n type: stellarStateCallTypes.setPublicBalance,\n mode: 'write',\n schema: setPublicBalanceSchema,\n },\n {\n type: stellarStateCallTypes.setPublicBalances,\n mode: 'write',\n schema: setPublicBalancesSchema,\n },\n];\n","import { z } from 'zod';\nimport { STELLAR_STATE_PATHS } from '../../foundation/paths.js';\nimport { privateAddressAssetKey } from '../../foundation/keys.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport { deliverySyncStateSchema, incomingDeliverySchema } from '../shared.js';\n\nexport const readIncomingDeliveriesSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.readIncomingDeliveries),\n })\n .transform(({ type }) => ({\n type,\n operations: [\n {\n opType: 'primitiveGet' as const,\n jsonPath: STELLAR_STATE_PATHS.deliveriesIncomingById,\n },\n ],\n }));\n\nexport const upsertIncomingDeliveriesSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.upsertIncomingDeliveries),\n deliveries: z.array(incomingDeliverySchema),\n })\n .transform(({ type, deliveries }) => ({\n type,\n operations: deliveries.map((delivery) => ({\n opType: 'recordSet' as const,\n jsonPath: STELLAR_STATE_PATHS.deliveriesIncomingById,\n key: String(delivery.id),\n value: delivery,\n })),\n }));\n\nexport const readDeliverySyncStateSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.readDeliverySyncState),\n privateAddress: z.string().min(1),\n asset: z.string().min(1),\n })\n .transform(({ type, privateAddress, asset }) => ({\n type,\n operations: [\n {\n opType: 'recordGet' as const,\n jsonPath: STELLAR_STATE_PATHS.deliveriesSync,\n key: privateAddressAssetKey(privateAddress, asset),\n },\n ],\n }));\n\nexport const setDeliverySyncStateSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.setDeliverySyncState),\n syncState: deliverySyncStateSchema,\n })\n .transform(({ type, syncState }) => ({\n type,\n operations: [\n {\n opType: 'recordSet' as const,\n jsonPath: STELLAR_STATE_PATHS.deliveriesSync,\n key: privateAddressAssetKey(syncState.privateAddress, syncState.asset),\n value: syncState,\n },\n ],\n }));\n","import type { StateBridgeDefinition } from '@arcanetech/privacy-sdk-core/state';\nimport { stellarStateCallTypes } from '../bridge/call-types.js';\nimport {\n readDeliverySyncStateSchema,\n readIncomingDeliveriesSchema,\n setDeliverySyncStateSchema,\n upsertIncomingDeliveriesSchema,\n} from '../schemas/claims/deliveries.js';\n\nexport const stellarDeliveriesStateDefinitions: StateBridgeDefinition[] = [\n {\n type: stellarStateCallTypes.readIncomingDeliveries,\n mode: 'read',\n schema: readIncomingDeliveriesSchema,\n },\n {\n type: stellarStateCallTypes.upsertIncomingDeliveries,\n mode: 'write',\n schema: upsertIncomingDeliveriesSchema,\n },\n {\n type: stellarStateCallTypes.readDeliverySyncState,\n mode: 'read',\n schema: readDeliverySyncStateSchema,\n },\n {\n type: stellarStateCallTypes.setDeliverySyncState,\n mode: 'write',\n schema: setDeliverySyncStateSchema,\n },\n];\n","import { z } from 'zod';\nimport { STELLAR_STATE_PATHS } from '../../foundation/paths.js';\nimport { poolLeafKey } from '../../foundation/keys.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport { leafEphemeralSchema, poolMerkleStateSchema } from '../shared.js';\n\nexport const readPoolMerkleStateSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.readPoolMerkleState),\n poolContract: z.string().min(1),\n })\n .transform(({ type, poolContract }) => ({\n type,\n operations: [\n {\n opType: 'recordGet' as const,\n jsonPath: STELLAR_STATE_PATHS.poolsByContract,\n key: poolContract,\n },\n ],\n }));\n\nexport const setPoolMerkleStateSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.setPoolMerkleState),\n state: poolMerkleStateSchema,\n })\n .transform(({ type, state }) => ({\n type,\n operations: [\n {\n opType: 'recordSet' as const,\n jsonPath: STELLAR_STATE_PATHS.poolsByContract,\n key: state.poolContract,\n value: state,\n },\n ],\n }));\n\nexport const readLeafEphemeralSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.readLeafEphemeral),\n poolContract: z.string().min(1),\n leafIndex: z.number().int().nonnegative(),\n })\n .transform(({ type, poolContract, leafIndex }) => ({\n type,\n operations: [\n {\n opType: 'recordGet' as const,\n jsonPath: STELLAR_STATE_PATHS.poolsLeafEphemeral,\n key: poolLeafKey(poolContract, leafIndex),\n },\n ],\n }));\n\nexport const setLeafEphemeralSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.setLeafEphemeral),\n ephemeral: leafEphemeralSchema,\n })\n .transform(({ type, ephemeral }) => ({\n type,\n operations: [\n {\n opType: 'recordSet' as const,\n jsonPath: STELLAR_STATE_PATHS.poolsLeafEphemeral,\n key: poolLeafKey(ephemeral.poolContract, ephemeral.leafIndex),\n value: ephemeral,\n },\n ],\n }));\n","import type { StateBridgeDefinition } from '@arcanetech/privacy-sdk-core/state';\nimport { stellarStateCallTypes } from '../bridge/call-types.js';\nimport {\n readLeafEphemeralSchema,\n readPoolMerkleStateSchema,\n setLeafEphemeralSchema,\n setPoolMerkleStateSchema,\n} from '../schemas/pool/merkle.js';\n\nexport const stellarPoolStateDefinitions: StateBridgeDefinition[] = [\n {\n type: stellarStateCallTypes.readPoolMerkleState,\n mode: 'read',\n schema: readPoolMerkleStateSchema,\n },\n {\n type: stellarStateCallTypes.setPoolMerkleState,\n mode: 'write',\n schema: setPoolMerkleStateSchema,\n },\n {\n type: stellarStateCallTypes.readLeafEphemeral,\n mode: 'read',\n schema: readLeafEphemeralSchema,\n },\n {\n type: stellarStateCallTypes.setLeafEphemeral,\n mode: 'write',\n schema: setLeafEphemeralSchema,\n },\n];\n","import { z } from 'zod';\nimport { STELLAR_STATE_PATHS } from '../../foundation/paths.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport { rejectConsumedPrivateRecords } from '../../filters/ops.js';\nimport { privateRecordSchema } from '../shared.js';\n\nexport const listPrivateRecordsSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.listPrivateRecords),\n })\n .transform(({ type }) => ({\n type,\n operations: [\n {\n opType: 'primitiveGet' as const,\n jsonPath: STELLAR_STATE_PATHS.privateRecords,\n },\n ],\n }));\n\nexport const savePrivateRecordsSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.savePrivateRecords),\n records: z.array(privateRecordSchema),\n })\n .transform(({ type, records }) => ({\n type,\n operations: [\n {\n opType: 'arrayPush' as const,\n jsonPath: STELLAR_STATE_PATHS.privateRecords,\n items: records,\n },\n ],\n }));\n\nexport const replacePrivateRecordsSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.replacePrivateRecords),\n records: z.array(privateRecordSchema),\n })\n .transform(({ type, records }) => ({\n type,\n operations: [\n {\n opType: 'arrayClean' as const,\n jsonPath: STELLAR_STATE_PATHS.privateRecords,\n },\n {\n opType: 'arrayPush' as const,\n jsonPath: STELLAR_STATE_PATHS.privateRecords,\n items: records,\n },\n ],\n }));\n\nexport const pruneConsumedPrivateRecordsSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.pruneConsumedPrivateRecords),\n })\n .transform(({ type }) => ({\n type,\n operations: [rejectConsumedPrivateRecords()],\n }));\n","import { z } from 'zod';\nimport { STELLAR_STATE_PATHS } from '../../foundation/paths.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport { rejectPrivateRecordsByIds } from '../../filters/ops.js';\nimport { privateRecordSchema, transactionStatusSchema } from '../shared.js';\n\nexport const upsertPrivateRecordsSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.upsertPrivateRecords),\n records: z.array(privateRecordSchema),\n })\n .transform(({ type, records }) => ({\n type,\n operations: [\n rejectPrivateRecordsByIds(records.map((record) => record.id)),\n {\n opType: 'arrayPush' as const,\n jsonPath: STELLAR_STATE_PATHS.privateRecords,\n items: records,\n },\n ],\n }));\n\nexport const readTransactionStatusSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.readTransactionStatus),\n txHash: z.string().min(1),\n })\n .transform(({ type, txHash }) => ({\n type,\n operations: [\n {\n opType: 'recordGet' as const,\n jsonPath: STELLAR_STATE_PATHS.transactionsByHash,\n key: txHash,\n },\n ],\n }));\n\nexport const setTransactionStatusSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.setTransactionStatus),\n status: transactionStatusSchema,\n })\n .transform(({ type, status }) => ({\n type,\n operations: [\n {\n opType: 'recordSet' as const,\n jsonPath: STELLAR_STATE_PATHS.transactionsByHash,\n key: status.txHash,\n value: status,\n },\n ],\n }));\n\nexport const clearTransactionStatusSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.clearTransactionStatus),\n txHash: z.string().min(1),\n })\n .transform(({ type, txHash }) => ({\n type,\n operations: [\n {\n opType: 'recordDelete' as const,\n jsonPath: STELLAR_STATE_PATHS.transactionsByHash,\n key: txHash,\n },\n ],\n }));\n","import type { StateBridgeDefinition } from '@arcanetech/privacy-sdk-core/state';\nimport { stellarStateCallTypes } from '../bridge/call-types.js';\nimport {\n listPrivateRecordsSchema,\n pruneConsumedPrivateRecordsSchema,\n replacePrivateRecordsSchema,\n savePrivateRecordsSchema,\n} from '../schemas/records/private.js';\nimport { upsertPrivateRecordsSchema } from '../schemas/records/transactions.js';\n\nexport const stellarRecordsStateDefinitions: StateBridgeDefinition[] = [\n {\n type: stellarStateCallTypes.listPrivateRecords,\n mode: 'read',\n schema: listPrivateRecordsSchema,\n },\n {\n type: stellarStateCallTypes.savePrivateRecords,\n mode: 'write',\n schema: savePrivateRecordsSchema,\n },\n {\n type: stellarStateCallTypes.replacePrivateRecords,\n mode: 'write',\n schema: replacePrivateRecordsSchema,\n },\n {\n type: stellarStateCallTypes.upsertPrivateRecords,\n mode: 'write',\n schema: upsertPrivateRecordsSchema,\n },\n {\n type: stellarStateCallTypes.pruneConsumedPrivateRecords,\n mode: 'write',\n schema: pruneConsumedPrivateRecordsSchema,\n },\n];\n","import { z } from 'zod';\nimport { STELLAR_STATE_PATHS } from '../../foundation/paths.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport { registryLookupSchema } from '../shared.js';\n\nexport const readStellarAddressRegisteredSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.readStellarAddressRegistered),\n address: z.string().min(1),\n })\n .transform(({ type, address }) => ({\n type,\n operations: [\n {\n opType: 'recordGet' as const,\n jsonPath: STELLAR_STATE_PATHS.registryRegisteredAddresses,\n key: address,\n },\n ],\n }));\n\nexport const readCachedPrivateAddressSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.readCachedPrivateAddress),\n address: z.string().min(1),\n })\n .transform(({ type, address }) => ({\n type,\n operations: [\n {\n opType: 'recordGet' as const,\n jsonPath: STELLAR_STATE_PATHS.registryPrivateAddresses,\n key: address,\n },\n ],\n }));\n\nexport const saveRegisteredPrivateAddressSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.saveRegisteredPrivateAddress),\n address: z.string().min(1),\n privateAddress: z.string().min(1),\n registered: z.boolean(),\n })\n .transform(({ type, address, privateAddress, registered }) => {\n const lookup = registryLookupSchema.parse({\n owner: address,\n status: registered ? 'registered' : 'unregistered',\n privateAddressStpl1: registered ? privateAddress : undefined,\n cachedAt: new Date().toISOString(),\n });\n return {\n type,\n operations: [\n {\n opType: 'recordSet' as const,\n jsonPath: STELLAR_STATE_PATHS.registryPrivateAddresses,\n key: address,\n value: privateAddress,\n },\n {\n opType: 'recordSet' as const,\n jsonPath: STELLAR_STATE_PATHS.registryRegisteredAddresses,\n key: address,\n value: registered,\n },\n {\n opType: 'recordSet' as const,\n jsonPath: STELLAR_STATE_PATHS.registryLookups,\n key: address,\n value: lookup,\n },\n ],\n };\n });\n\nexport const invalidateRegisteredAddressSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.invalidateRegisteredAddress),\n address: z.string().min(1),\n })\n .transform(({ type, address }) => ({\n type,\n operations: [\n {\n opType: 'recordDelete' as const,\n jsonPath: STELLAR_STATE_PATHS.registryPrivateAddresses,\n key: address,\n },\n {\n opType: 'recordDelete' as const,\n jsonPath: STELLAR_STATE_PATHS.registryRegisteredAddresses,\n key: address,\n },\n {\n opType: 'recordDelete' as const,\n jsonPath: STELLAR_STATE_PATHS.registryLookups,\n key: address,\n },\n ],\n }));\n\nexport const readRegistryLookupSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.readRegistryLookup),\n address: z.string().min(1),\n })\n .transform(({ type, address }) => ({\n type,\n operations: [\n {\n opType: 'recordGet' as const,\n jsonPath: STELLAR_STATE_PATHS.registryLookups,\n key: address,\n },\n ],\n }));\n\nexport const saveRegistryLookupSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.saveRegistryLookup),\n lookup: registryLookupSchema,\n })\n .transform(({ type, lookup }) => {\n const operations: Array<{\n opType: 'recordSet';\n jsonPath: string;\n key: string;\n value: unknown;\n }> = [\n {\n opType: 'recordSet',\n jsonPath: STELLAR_STATE_PATHS.registryLookups,\n key: lookup.owner,\n value: lookup,\n },\n ];\n if (lookup.status === 'registered' && lookup.privateAddressStpl1) {\n operations.push(\n {\n opType: 'recordSet',\n jsonPath: STELLAR_STATE_PATHS.registryPrivateAddresses,\n key: lookup.owner,\n value: lookup.privateAddressStpl1,\n },\n {\n opType: 'recordSet',\n jsonPath: STELLAR_STATE_PATHS.registryRegisteredAddresses,\n key: lookup.owner,\n value: true,\n },\n );\n } else {\n operations.push({\n opType: 'recordSet',\n jsonPath: STELLAR_STATE_PATHS.registryRegisteredAddresses,\n key: lookup.owner,\n value: false,\n });\n }\n return { type, operations };\n });\n\nexport const invalidateRegistryLookupSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.invalidateRegistryLookup),\n address: z.string().min(1),\n })\n .transform(({ type, address }) => ({\n type,\n operations: [\n {\n opType: 'recordDelete' as const,\n jsonPath: STELLAR_STATE_PATHS.registryLookups,\n key: address,\n },\n {\n opType: 'recordDelete' as const,\n jsonPath: STELLAR_STATE_PATHS.registryPrivateAddresses,\n key: address,\n },\n {\n opType: 'recordDelete' as const,\n jsonPath: STELLAR_STATE_PATHS.registryRegisteredAddresses,\n key: address,\n },\n ],\n }));\n","import type { StateBridgeDefinition } from '@arcanetech/privacy-sdk-core/state';\nimport { stellarStateCallTypes } from '../bridge/call-types.js';\nimport {\n invalidateRegisteredAddressSchema,\n invalidateRegistryLookupSchema,\n readCachedPrivateAddressSchema,\n readRegistryLookupSchema,\n readStellarAddressRegisteredSchema,\n saveRegisteredPrivateAddressSchema,\n saveRegistryLookupSchema,\n} from '../schemas/registry/lookup.js';\n\nexport const stellarRegistryStateDefinitions: StateBridgeDefinition[] = [\n {\n type: stellarStateCallTypes.readStellarAddressRegistered,\n mode: 'read',\n schema: readStellarAddressRegisteredSchema,\n },\n {\n type: stellarStateCallTypes.readCachedPrivateAddress,\n mode: 'read',\n schema: readCachedPrivateAddressSchema,\n },\n {\n type: stellarStateCallTypes.readRegistryLookup,\n mode: 'read',\n schema: readRegistryLookupSchema,\n },\n {\n type: stellarStateCallTypes.saveRegisteredPrivateAddress,\n mode: 'write',\n schema: saveRegisteredPrivateAddressSchema,\n },\n {\n type: stellarStateCallTypes.saveRegistryLookup,\n mode: 'write',\n schema: saveRegistryLookupSchema,\n },\n {\n type: stellarStateCallTypes.invalidateRegisteredAddress,\n mode: 'write',\n schema: invalidateRegisteredAddressSchema,\n },\n {\n type: stellarStateCallTypes.invalidateRegistryLookup,\n mode: 'write',\n schema: invalidateRegistryLookupSchema,\n },\n];\n","import type { StateBridgeDefinition } from '@arcanetech/privacy-sdk-core/state';\nimport {\n clearTransactionStatusSchema,\n readTransactionStatusSchema,\n setTransactionStatusSchema,\n} from '../schemas/records/transactions.js';\nimport { stellarStateCallTypes } from '../bridge/call-types.js';\n\nexport const stellarTransactionStateDefinitions: StateBridgeDefinition[] = [\n {\n type: stellarStateCallTypes.readTransactionStatus,\n mode: 'read',\n schema: readTransactionStatusSchema,\n },\n {\n type: stellarStateCallTypes.setTransactionStatus,\n mode: 'write',\n schema: setTransactionStatusSchema,\n },\n {\n type: stellarStateCallTypes.clearTransactionStatus,\n mode: 'write',\n schema: clearTransactionStatusSchema,\n },\n];\n","import { z } from 'zod';\nimport { walletOwnerNonceKey } from '../../foundation/keys.js';\nimport { STELLAR_STATE_PATHS } from '../../foundation/paths.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport { walletPrivateAddressScalarSchema } from '../shared.js';\n\nexport const saveWalletPrivateAddressScalarSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.saveWalletPrivateAddressScalar),\n scalar: walletPrivateAddressScalarSchema,\n })\n .transform(({ type, scalar }) => ({\n type,\n operations: [\n {\n opType: 'recordSet' as const,\n jsonPath: STELLAR_STATE_PATHS.walletPrivateAddressScalars,\n key: walletOwnerNonceKey(scalar.owner, scalar.nonce),\n value: scalar,\n },\n ],\n }));\n\nexport const readWalletPrivateAddressScalarSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.readWalletPrivateAddressScalar),\n owner: z.string().min(1),\n nonce: z.string().min(1),\n })\n .transform(({ type, owner, nonce }) => ({\n type,\n operations: [\n {\n opType: 'recordGet' as const,\n jsonPath: STELLAR_STATE_PATHS.walletPrivateAddressScalars,\n key: walletOwnerNonceKey(owner, nonce),\n },\n ],\n }));\n","import { z } from 'zod';\nimport { walletOwnerNonceKey } from '../../foundation/keys.js';\nimport { STELLAR_STATE_PATHS } from '../../foundation/paths.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport { walletPrivateAddressRecordSchema } from '../shared.js';\n\nexport const saveWalletPrivateAddressRecordSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.saveWalletPrivateAddressRecord),\n record: walletPrivateAddressRecordSchema,\n })\n .transform(({ type, record }) => ({\n type,\n operations: [\n {\n opType: 'recordSet' as const,\n jsonPath: STELLAR_STATE_PATHS.walletPrivateAddressRecords,\n key: walletOwnerNonceKey(record.owner, record.nonce),\n value: record,\n },\n ],\n }));\n\nexport const readWalletPrivateAddressRecordSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.readWalletPrivateAddressRecord),\n owner: z.string().min(1),\n nonce: z.string().min(1),\n })\n .transform(({ type, owner, nonce }) => ({\n type,\n operations: [\n {\n opType: 'recordGet' as const,\n jsonPath: STELLAR_STATE_PATHS.walletPrivateAddressRecords,\n key: walletOwnerNonceKey(owner, nonce),\n },\n ],\n }));\n\nexport const setWalletDefaultPrivateAddressNonceSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.setWalletDefaultPrivateAddressNonce),\n owner: z.string().min(1),\n nonce: z.string().min(1),\n })\n .transform(({ type, owner, nonce }) => ({\n type,\n operations: [\n {\n opType: 'recordSet' as const,\n jsonPath: STELLAR_STATE_PATHS.walletDefaultPrivateAddressNonce,\n key: owner,\n value: nonce,\n },\n ],\n }));\n\nexport const readWalletDefaultPrivateAddressNonceSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.readWalletDefaultPrivateAddressNonce),\n owner: z.string().min(1),\n })\n .transform(({ type, owner }) => ({\n type,\n operations: [\n {\n opType: 'recordGet' as const,\n jsonPath: STELLAR_STATE_PATHS.walletDefaultPrivateAddressNonce,\n key: owner,\n },\n ],\n }));\n\nexport const deleteWalletPrivateAddressScalarSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.deleteWalletPrivateAddressScalar),\n owner: z.string().min(1),\n nonce: z.string().min(1),\n })\n .transform(({ type, owner, nonce }) => ({\n type,\n operations: [\n {\n opType: 'recordDelete' as const,\n jsonPath: STELLAR_STATE_PATHS.walletPrivateAddressScalars,\n key: walletOwnerNonceKey(owner, nonce),\n },\n ],\n }));\n","import type { StateBridgeDefinition } from '@arcanetech/privacy-sdk-core/state';\nimport {\n readWalletPrivateAddressScalarSchema,\n saveWalletPrivateAddressScalarSchema,\n} from '../schemas/wallet/scalar.js';\nimport {\n deleteWalletPrivateAddressScalarSchema,\n readWalletDefaultPrivateAddressNonceSchema,\n readWalletPrivateAddressRecordSchema,\n saveWalletPrivateAddressRecordSchema,\n setWalletDefaultPrivateAddressNonceSchema,\n} from '../schemas/wallet/private-address.js';\nimport { stellarStateCallTypes } from '../bridge/call-types.js';\n\nexport const stellarWalletStateDefinitions: StateBridgeDefinition[] = [\n {\n type: stellarStateCallTypes.saveWalletPrivateAddressScalar,\n mode: 'write',\n schema: saveWalletPrivateAddressScalarSchema,\n },\n {\n type: stellarStateCallTypes.readWalletPrivateAddressScalar,\n mode: 'read',\n schema: readWalletPrivateAddressScalarSchema,\n },\n {\n type: stellarStateCallTypes.saveWalletPrivateAddressRecord,\n mode: 'write',\n schema: saveWalletPrivateAddressRecordSchema,\n },\n {\n type: stellarStateCallTypes.readWalletPrivateAddressRecord,\n mode: 'read',\n schema: readWalletPrivateAddressRecordSchema,\n },\n {\n type: stellarStateCallTypes.setWalletDefaultPrivateAddressNonce,\n mode: 'write',\n schema: setWalletDefaultPrivateAddressNonceSchema,\n },\n {\n type: stellarStateCallTypes.readWalletDefaultPrivateAddressNonce,\n mode: 'read',\n schema: readWalletDefaultPrivateAddressNonceSchema,\n },\n {\n type: stellarStateCallTypes.deleteWalletPrivateAddressScalar,\n mode: 'write',\n schema: deleteWalletPrivateAddressScalarSchema,\n },\n];\n","import type { StateBridgeDefinition } from '@arcanetech/privacy-sdk-core/state';\nimport { registerStellarArrayFilterSchemas } from '../filters/register-schemas.js';\nimport { stellarAssetsStateDefinitions } from './assets.js';\nimport { stellarBalancesStateDefinitions } from './balances.js';\nimport { stellarDeliveriesStateDefinitions } from './deliveries.js';\nimport { stellarPoolStateDefinitions } from './pool.js';\nimport { stellarRecordsStateDefinitions } from './records.js';\nimport { stellarRegistryStateDefinitions } from './registry.js';\nimport { stellarTransactionStateDefinitions } from './transactions.js';\nimport { stellarWalletStateDefinitions } from './wallet.js';\n\nregisterStellarArrayFilterSchemas();\n\nexport const stellarStateDefinitions: StateBridgeDefinition[] = [\n ...stellarRegistryStateDefinitions,\n ...stellarAssetsStateDefinitions,\n ...stellarBalancesStateDefinitions,\n ...stellarPoolStateDefinitions,\n ...stellarRecordsStateDefinitions,\n ...stellarDeliveriesStateDefinitions,\n ...stellarWalletStateDefinitions,\n ...stellarTransactionStateDefinitions,\n];\n","import {\n createStateBridge,\n type StateBridge,\n type StateBridgeAdapter,\n} from '@arcanetech/privacy-sdk-core/state';\nimport { stellarStateDefinitions } from '../definitions/index.js';\n\nexport class StellarStateServiceBase {\n readonly bridge: StateBridge;\n\n constructor(adapter: StateBridgeAdapter) {\n this.bridge = createStateBridge(adapter);\n this.bridge.init(stellarStateDefinitions);\n }\n}\n","import type {\n StellarAddress,\n StellarAssetId,\n StellarPublicBalance,\n} from '../../../types.js';\nimport {\n normalizePublicBalance,\n normalizePublicBalancesFromEntries,\n} from '../../read/normalize.js';\nimport {\n stellarStateCallTypes,\n type StellarPublicBalanceInput,\n} from '../../bridge/call-types.js';\nimport type { StellarStateServiceBase } from '../base.js';\n\nexport function createPublicBalanceMethods(context: StellarStateServiceBase) {\n const { bridge } = context;\n\n return {\n async getPublicBalance(input: {\n owner: StellarAddress;\n asset: StellarAssetId;\n }): Promise<StellarPublicBalance | undefined> {\n const value = await bridge.read<unknown>({\n type: stellarStateCallTypes.readPublicBalance,\n owner: input.owner,\n asset: input.asset,\n });\n return normalizePublicBalance(value);\n },\n\n async getPublicBalances(owner: StellarAddress): Promise<StellarPublicBalance[]> {\n const entries = await bridge.read<unknown>({\n type: stellarStateCallTypes.readPublicBalances,\n owner,\n });\n return normalizePublicBalancesFromEntries(entries, owner);\n },\n\n setPublicBalance(balance: StellarPublicBalanceInput): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.setPublicBalance,\n balance,\n });\n },\n\n setPublicBalances(input: {\n owner: StellarAddress;\n balances: StellarPublicBalanceInput[];\n }): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.setPublicBalances,\n owner: input.owner,\n balances: input.balances,\n });\n },\n };\n}\n","import type { StellarAsset } from '../../../types.js';\nimport { readRecordValue } from '../../foundation/keys.js';\nimport type { StellarStateServiceBase } from '../base.js';\n\ntype AssetsCatalogDeps = {\n getAssetsCatalog: () => Promise<{\n byId: Record<string, StellarAsset>;\n listOrder: string[];\n }>;\n replaceAssets: (assets: StellarAsset[]) => Promise<void>;\n};\n\nexport function createAssetsUpsertMethods(\n _context: StellarStateServiceBase,\n deps: AssetsCatalogDeps,\n) {\n return {\n async upsertAssets(assets: StellarAsset[]): Promise<void> {\n if (assets.length === 0) {\n return;\n }\n const catalog = await deps.getAssetsCatalog();\n const byId = { ...catalog.byId };\n const listOrder = [...catalog.listOrder];\n for (const asset of assets) {\n byId[asset.assetId] = asset;\n if (!listOrder.includes(asset.assetId)) {\n listOrder.push(asset.assetId);\n }\n }\n const merged = listOrder\n .map((assetId) => readRecordValue(byId, assetId))\n .filter((asset): asset is StellarAsset => asset !== undefined);\n await deps.replaceAssets(merged);\n },\n };\n}\n","import type {\n StellarAsset,\n StellarAssetId,\n StellarAssetsCatalog,\n} from '../../../types.js';\nimport { readRecordValue } from '../../foundation/keys.js';\nimport { normalizeAsset, normalizeAssetsCatalog } from '../../read/normalize.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport type { StellarStateServiceBase } from '../base.js';\nimport { createAssetsUpsertMethods } from './upsert-methods.js';\n\nexport function createAssetsCatalogMethods(context: StellarStateServiceBase) {\n const { bridge } = context;\n\n async function getAssetsCatalog(): Promise<StellarAssetsCatalog> {\n const value = await bridge.read<unknown>({\n type: stellarStateCallTypes.readAssetsCatalog,\n });\n return normalizeAssetsCatalog(value);\n }\n\n function replaceAssets(assets: StellarAsset[]): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.replaceAssets,\n assets,\n });\n }\n\n const coreMethods = {\n getAssetsCatalog,\n\n async getAsset(assetId: StellarAssetId): Promise<StellarAsset | undefined> {\n const value = await bridge.read<unknown>({\n type: stellarStateCallTypes.readAsset,\n assetId,\n });\n return normalizeAsset(value);\n },\n\n async getAssets(): Promise<StellarAsset[]> {\n const catalog = await getAssetsCatalog();\n return catalog.listOrder\n .map((assetId) => readRecordValue(catalog.byId, assetId))\n .filter((asset): asset is StellarAsset => asset !== undefined);\n },\n\n async getAssetsForPool(poolContract: string): Promise<StellarAsset[]> {\n const assets = await coreMethods.getAssets();\n return assets.filter((asset) => asset.poolContracts.includes(poolContract));\n },\n\n replaceAssets,\n };\n\n return {\n ...coreMethods,\n ...createAssetsUpsertMethods(context, {\n getAssetsCatalog,\n replaceAssets,\n }),\n };\n}\n","import type { StellarStateServiceBase } from '../base.js';\nimport { createPublicBalanceMethods } from './balance-methods.js';\nimport { createAssetsCatalogMethods } from './catalog-methods.js';\n\nexport function createAssetsService(context: StellarStateServiceBase) {\n return {\n ...createAssetsCatalogMethods(context),\n ...createPublicBalanceMethods(context),\n };\n}\n","import type {\n StellarIncomingDeliveriesFilter,\n StellarIncomingDelivery,\n} from '../../../types.js';\nimport { normalizeIncomingDeliveries } from '../../read/normalize.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport type { StellarStateServiceBase } from '../base.js';\n\nexport function createIncomingDeliveryMethods(context: StellarStateServiceBase) {\n const { bridge } = context;\n\n async function getIncomingDeliveries(\n filter: StellarIncomingDeliveriesFilter,\n ): Promise<StellarIncomingDelivery[]> {\n const values = await bridge.read<unknown>({\n type: stellarStateCallTypes.readIncomingDeliveries,\n });\n const deliveries = normalizeIncomingDeliveries(values);\n return deliveries.filter((delivery: StellarIncomingDelivery) => {\n if (delivery.privateAddress !== filter.privateAddress) {\n return false;\n }\n if (filter.asset !== undefined && delivery.asset !== filter.asset) {\n return false;\n }\n if (!filter.includeProcessed && delivery.processed) {\n return false;\n }\n return true;\n });\n }\n\n function upsertIncomingDeliveries(\n deliveries: StellarIncomingDelivery[],\n ): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.upsertIncomingDeliveries,\n deliveries,\n });\n }\n\n return {\n getIncomingDeliveries,\n upsertIncomingDeliveries,\n\n async markDeliveryProcessed(id: number): Promise<void> {\n const deliveries = await bridge.read<unknown>({\n type: stellarStateCallTypes.readIncomingDeliveries,\n });\n const match = normalizeIncomingDeliveries(deliveries).find(\n (delivery: StellarIncomingDelivery) => delivery.id === id,\n );\n if (!match) {\n return;\n }\n await upsertIncomingDeliveries([{ ...match, processed: true }]);\n },\n };\n}\n","import type { StellarAssetId, StellarDeliverySyncState } from '../../../types.js';\nimport { normalizeDeliverySyncState } from '../../read/normalize.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport type { StellarStateServiceBase } from '../base.js';\n\nexport function createDeliverySyncMethods(context: StellarStateServiceBase) {\n const { bridge } = context;\n\n return {\n async getDeliverySyncState(input: {\n privateAddress: string;\n asset: StellarAssetId;\n }): Promise<StellarDeliverySyncState | undefined> {\n const value = await bridge.read<unknown>({\n type: stellarStateCallTypes.readDeliverySyncState,\n privateAddress: input.privateAddress,\n asset: input.asset,\n });\n return normalizeDeliverySyncState(value);\n },\n\n setDeliverySyncState(syncState: StellarDeliverySyncState): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.setDeliverySyncState,\n syncState,\n });\n },\n };\n}\n","import type { StellarStateServiceBase } from '../base.js';\nimport { createIncomingDeliveryMethods } from './incoming-methods.js';\nimport { createDeliverySyncMethods } from './sync-methods.js';\n\nexport function createDeliveriesService(context: StellarStateServiceBase) {\n return {\n ...createIncomingDeliveryMethods(context),\n ...createDeliverySyncMethods(context),\n };\n}\n","import type { StellarLeafEphemeral } from '../../../types.js';\nimport { normalizeLeafEphemeral } from '../../read/normalize.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport type { StellarStateServiceBase } from '../base.js';\n\nfunction isMissingStatePathError(error: unknown): boolean {\n if (!(error instanceof Error)) {\n return false;\n }\n return (\n error.message.includes('Record path not found:') ||\n error.message.includes('JSONPath segment not found:')\n );\n}\n\nexport function createPoolEphemeralService(context: StellarStateServiceBase) {\n const { bridge } = context;\n\n return {\n async getLeafEphemeral(input: {\n poolContract: string;\n leafIndex: number;\n }): Promise<StellarLeafEphemeral | undefined> {\n try {\n const value = await bridge.read<unknown>({\n type: stellarStateCallTypes.readLeafEphemeral,\n poolContract: input.poolContract,\n leafIndex: input.leafIndex,\n });\n return normalizeLeafEphemeral(value);\n } catch (error) {\n if (isMissingStatePathError(error)) {\n return undefined;\n }\n throw error;\n }\n },\n\n setLeafEphemeral(ephemeral: StellarLeafEphemeral): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.setLeafEphemeral,\n ephemeral,\n });\n },\n };\n}\n","import type { StellarPoolMerkleState } from '../../../types.js';\nimport { withoutUndefinedFields } from '../../foundation/coerce.js';\nimport { normalizePoolMerkleState } from '../../read/normalize.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport type { StellarStateServiceBase } from '../base.js';\n\nfunction isMissingStatePathError(error: unknown): boolean {\n if (!(error instanceof Error)) {\n return false;\n }\n return (\n error.message.includes('Record path not found:') ||\n error.message.includes('JSONPath segment not found:')\n );\n}\n\nexport function createPoolMerkleService(context: StellarStateServiceBase) {\n const { bridge } = context;\n\n return {\n async getPoolMerkleState(\n poolContract: string,\n ): Promise<StellarPoolMerkleState | undefined> {\n try {\n const value = await bridge.read<unknown>({\n type: stellarStateCallTypes.readPoolMerkleState,\n poolContract,\n });\n return normalizePoolMerkleState(value);\n } catch (error) {\n if (isMissingStatePathError(error)) {\n return undefined;\n }\n throw error;\n }\n },\n\n setPoolMerkleState(state: StellarPoolMerkleState): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.setPoolMerkleState,\n state,\n });\n },\n\n async appendPoolCommitments(input: {\n poolContract: string;\n commitments: string[];\n merkleRootHex: string;\n syncedLedger?: number;\n }): Promise<void> {\n const current = await this.getPoolMerkleState(input.poolContract);\n const mergedCommitments = [...(current?.commitments ?? []), ...input.commitments];\n await this.setPoolMerkleState(\n withoutUndefinedFields({\n poolContract: input.poolContract,\n commitments: mergedCommitments,\n commitmentCount: mergedCommitments.length,\n merkleRootHex: input.merkleRootHex,\n updatedAt: Date.now(),\n syncedLedger: input.syncedLedger ?? current?.syncedLedger,\n }) as StellarPoolMerkleState,\n );\n },\n };\n}\n","import type { StellarPrivateRecord } from '../../../types.js';\n\nfunction privateCoinNotesEqual(\n left: StellarPrivateRecord['coinNote'],\n right: StellarPrivateRecord['coinNote'],\n): boolean {\n if (left === undefined || right === undefined) {\n return left === right;\n }\n return (\n left.value === right.value &&\n left.nullifier === right.nullifier &&\n left.secret === right.secret &&\n left.commitment === right.commitment &&\n left.asset_hi === right.asset_hi &&\n left.asset_lo === right.asset_lo &&\n left.application_id === right.application_id\n );\n}\n\nfunction privateRecordCoreFieldsEqual(\n left: StellarPrivateRecord,\n right: StellarPrivateRecord,\n): boolean {\n return (\n left.id === right.id &&\n left.owner === right.owner &&\n left.asset === right.asset &&\n left.amount === right.amount &&\n left.consumed === right.consumed &&\n left.status === right.status &&\n left.poolContract === right.poolContract &&\n left.amountDisplay === right.amountDisplay\n );\n}\n\nfunction privateRecordChainFieldsEqual(\n left: StellarPrivateRecord,\n right: StellarPrivateRecord,\n): boolean {\n return (\n left.commitmentHex === right.commitmentHex &&\n left.nullifierHex === right.nullifierHex &&\n left.deliveryId === right.deliveryId &&\n left.privateAddress === right.privateAddress &&\n left.txHash === right.txHash\n );\n}\n\nfunction privateRecordSecretFieldsEqual(\n left: StellarPrivateRecord,\n right: StellarPrivateRecord,\n): boolean {\n return (\n left.depositScalarHex === right.depositScalarHex &&\n left.precommitementHex === right.precommitementHex &&\n privateCoinNotesEqual(left.coinNote, right.coinNote)\n );\n}\n\nfunction privateRecordsEqual(\n left: StellarPrivateRecord,\n right: StellarPrivateRecord,\n): boolean {\n return (\n privateRecordCoreFieldsEqual(left, right) &&\n privateRecordChainFieldsEqual(left, right) &&\n privateRecordSecretFieldsEqual(left, right)\n );\n}\n\nexport function privateRecordArraysEqual(\n left: StellarPrivateRecord[],\n right: StellarPrivateRecord[],\n): boolean {\n return (\n left.length === right.length &&\n left.every((record, index) => {\n const rightRecord = right.at(index);\n return rightRecord !== undefined && privateRecordsEqual(record, rightRecord);\n })\n );\n}\n\nexport function mergePrivateRecords(\n current: StellarPrivateRecord[],\n records: StellarPrivateRecord[],\n): StellarPrivateRecord[] {\n const ids = new Set(records.map((record) => record.id));\n return [...current.filter((record) => !ids.has(record.id)), ...records];\n}\n","import type {\n StellarAddress,\n StellarAssetId,\n StellarPrivateAssetRow,\n StellarPrivateRecord,\n StellarPrivateRecordStatus,\n} from '../../../types.js';\nimport { normalizePrivateRecords } from '../../read/normalize.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport type { StellarAvailablePrivateRecordsFilter } from '../../domain/types.js';\nimport type { StellarStateServiceBase } from '../base.js';\nimport {\n mergePrivateRecords,\n privateRecordArraysEqual,\n} from './private-record-upsert.js';\n\ntype PrivateRecordBridge = StellarStateServiceBase['bridge'];\n\nasync function readPrivateRecords(\n bridge: PrivateRecordBridge,\n): Promise<StellarPrivateRecord[]> {\n const value = await bridge.read<unknown>({\n type: stellarStateCallTypes.listPrivateRecords,\n });\n return normalizePrivateRecords(value);\n}\n\nfunction writeReplacePrivateRecords(\n bridge: PrivateRecordBridge,\n records: StellarPrivateRecord[],\n): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.replacePrivateRecords,\n records,\n });\n}\n\nasync function readAvailablePrivateRecords(\n bridge: PrivateRecordBridge,\n filter: StellarAvailablePrivateRecordsFilter,\n): Promise<StellarPrivateRecord[]> {\n const records = await readPrivateRecords(bridge);\n return records.filter((record) => matchesPrivateRecordFilter(record, filter, false));\n}\n\nasync function applyPrivateRecordsStatus(\n bridge: PrivateRecordBridge,\n records: StellarPrivateRecord[],\n status: StellarPrivateRecordStatus,\n): Promise<void> {\n const current = await readPrivateRecords(bridge);\n const ids = new Set(records.map((record) => record.id));\n const next = current.map((record) =>\n ids.has(record.id)\n ? {\n ...record,\n status,\n consumed: status === 'spent' ? true : record.consumed,\n }\n : record,\n );\n await writeReplacePrivateRecords(bridge, next);\n}\n\nfunction aggregatePrivateAssetRows(\n records: StellarPrivateRecord[],\n owner: StellarAddress,\n): StellarPrivateAssetRow[] {\n const available = records.filter(\n (record) => record.owner === owner && !record.consumed && record.status !== 'spent',\n );\n const byAsset = new Map<string, StellarPrivateAssetRow>();\n for (const record of available) {\n const existing = byAsset.get(record.asset);\n const amountDisplay = record.amountDisplay ?? Number(record.amount);\n if (existing) {\n existing.totalAmount += record.amount;\n existing.totalAmountDisplay += amountDisplay;\n } else {\n byAsset.set(record.asset, {\n assetId: record.asset,\n poolContract: record.poolContract ?? '',\n totalAmount: record.amount,\n totalAmountDisplay: amountDisplay,\n });\n }\n }\n return [...byAsset.values()].toSorted((left, right) =>\n left.assetId.localeCompare(right.assetId),\n );\n}\n\nfunction pruneConsumedPrivateRecords(bridge: PrivateRecordBridge): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.pruneConsumedPrivateRecords,\n });\n}\n\nfunction savePrivateRecords(\n bridge: PrivateRecordBridge,\n records: StellarPrivateRecord[],\n): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.savePrivateRecords,\n records,\n });\n}\n\nasync function upsertPrivateRecords(\n bridge: PrivateRecordBridge,\n records: StellarPrivateRecord[],\n): Promise<void> {\n if (records.length === 0) {\n return;\n }\n const current = await readPrivateRecords(bridge);\n const next = mergePrivateRecords(current, records);\n if (privateRecordArraysEqual(current, next)) {\n return;\n }\n return bridge.write({\n type: stellarStateCallTypes.upsertPrivateRecords,\n records,\n });\n}\n\nasync function readPrivateBalance(\n bridge: PrivateRecordBridge,\n input: { owner: StellarAddress; asset: StellarAssetId },\n): Promise<bigint> {\n const records = await readAvailablePrivateRecords(bridge, {\n owner: input.owner,\n asset: input.asset,\n });\n return records.reduce((total, record) => total + record.amount, 0n);\n}\n\nasync function readPrivateAssetRows(\n bridge: PrivateRecordBridge,\n owner: StellarAddress,\n): Promise<StellarPrivateAssetRow[]> {\n const records = await readPrivateRecords(bridge);\n return aggregatePrivateAssetRows(records, owner);\n}\n\nexport function createPrivateRecordMethods(context: StellarStateServiceBase) {\n const { bridge } = context;\n\n return {\n pruneConsumedPrivateRecords: () => pruneConsumedPrivateRecords(bridge),\n getPrivateRecords: () => readPrivateRecords(bridge),\n getAvailablePrivateRecords: (filter: StellarAvailablePrivateRecordsFilter) =>\n readAvailablePrivateRecords(bridge, filter),\n listPrivateRecords: (filter: {\n owner?: StellarAddress;\n privateAddress?: string;\n asset?: StellarAssetId;\n amount?: bigint;\n }) => readAvailablePrivateRecords(bridge, filter),\n savePrivateRecords: (records: StellarPrivateRecord[]) =>\n savePrivateRecords(bridge, records),\n upsertPrivateRecords: (records: StellarPrivateRecord[]) =>\n upsertPrivateRecords(bridge, records),\n markPrivateRecordsUsed: (records: StellarPrivateRecord[]) =>\n applyPrivateRecordsStatus(bridge, records, 'spent'),\n markPrivateRecordsStatus: (\n records: StellarPrivateRecord[],\n status: StellarPrivateRecordStatus,\n ) => applyPrivateRecordsStatus(bridge, records, status),\n getPrivateBalance: (input: { owner: StellarAddress; asset: StellarAssetId }) =>\n readPrivateBalance(bridge, input),\n getPrivateAssetRows: (owner: StellarAddress) => readPrivateAssetRows(bridge, owner),\n };\n}\n\nfunction matchesPrivateRecordFilter(\n record: StellarPrivateRecord,\n filter: StellarAvailablePrivateRecordsFilter,\n includeConsumed: boolean,\n): boolean {\n if (filter.owner !== undefined && record.owner !== filter.owner) {\n return false;\n }\n if (\n filter.privateAddress !== undefined &&\n record.privateAddress !== filter.privateAddress\n ) {\n return false;\n }\n if (filter.owner === undefined && filter.privateAddress === undefined) {\n return false;\n }\n if (filter.asset !== undefined && record.asset !== filter.asset) {\n return false;\n }\n if (!includeConsumed && (record.consumed || record.status === 'spent')) {\n return false;\n }\n return true;\n}\n","import type { StellarTransactionStatus } from '../../../types.js';\nimport { normalizeTransactionStatus } from '../../read/normalize.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport type { StellarStateServiceBase } from '../base.js';\n\nexport function createTransactionRecordMethods(context: StellarStateServiceBase) {\n const { bridge } = context;\n\n return {\n async getTransactionStatus(\n txHash: string,\n ): Promise<StellarTransactionStatus | undefined> {\n const value = await bridge.read<unknown>({\n type: stellarStateCallTypes.readTransactionStatus,\n txHash,\n });\n return normalizeTransactionStatus(value);\n },\n\n setTransactionStatus(status: StellarTransactionStatus): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.setTransactionStatus,\n status,\n });\n },\n\n clearTransactionStatus(txHash: string): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.clearTransactionStatus,\n txHash,\n });\n },\n };\n}\n","import type { StellarStateServiceBase } from '../base.js';\nimport { createPrivateRecordMethods } from './private-methods.js';\nimport { createTransactionRecordMethods } from './transaction-methods.js';\n\nexport function createRecordsService(context: StellarStateServiceBase) {\n return {\n ...createPrivateRecordMethods(context),\n ...createTransactionRecordMethods(context),\n };\n}\n","import type { StellarAddress, StellarRegistryLookup } from '../../../types.js';\nimport {\n normalizeCachedPrivateAddress,\n normalizeRegistryLookup,\n normalizeRegistryLookupFromLegacy,\n} from '../../read/normalize.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport type { StellarStateServiceBase } from '../base.js';\n\ntype RegistryLookupBridge = StellarStateServiceBase['bridge'];\n\nasync function readRegistryLookup(\n bridge: RegistryLookupBridge,\n address: StellarAddress,\n): Promise<StellarRegistryLookup | undefined> {\n try {\n const value = await bridge.read<unknown>({\n type: stellarStateCallTypes.readRegistryLookup,\n address,\n });\n const lookup = normalizeRegistryLookup(value);\n if (lookup) {\n return lookup;\n }\n } catch {\n // Legacy states may not have $.registry.lookups yet.\n }\n let registered: unknown;\n let privateAddress: unknown;\n try {\n registered = await bridge.read<unknown>({\n type: stellarStateCallTypes.readStellarAddressRegistered,\n address,\n });\n } catch {\n registered = undefined;\n }\n try {\n privateAddress = await bridge.read<unknown>({\n type: stellarStateCallTypes.readCachedPrivateAddress,\n address,\n });\n } catch {\n privateAddress = undefined;\n }\n return normalizeRegistryLookupFromLegacy({\n address,\n registered,\n privateAddress,\n });\n}\n\nasync function readCachedPrivateAddress(\n bridge: RegistryLookupBridge,\n address: StellarAddress,\n): Promise<string | undefined> {\n const lookup = await readRegistryLookup(bridge, address);\n if (lookup?.privateAddressStpl1) {\n return lookup.privateAddressStpl1;\n }\n const value = await bridge.read<unknown>({\n type: stellarStateCallTypes.readCachedPrivateAddress,\n address,\n });\n return normalizeCachedPrivateAddress(value);\n}\n\nexport function createRegistryLookupReadMethods(context: StellarStateServiceBase) {\n const { bridge } = context;\n\n return {\n getRegistryLookup: (address: StellarAddress) => readRegistryLookup(bridge, address),\n\n async isStellarAddressRegistered(\n address: StellarAddress,\n ): Promise<boolean | undefined> {\n const lookup = await readRegistryLookup(bridge, address);\n if (lookup === undefined) {\n return undefined;\n }\n return lookup.status === 'registered';\n },\n\n getCachedPrivateAddress: (address: StellarAddress) =>\n readCachedPrivateAddress(bridge, address),\n };\n}\n","import type { StellarAddress, StellarRegistryLookup } from '../../../types.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport type { StellarStateServiceBase } from '../base.js';\n\nexport function createRegistryLookupWriteMethods(context: StellarStateServiceBase) {\n const { bridge } = context;\n\n async function invalidateRegistryLookup(address: StellarAddress): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.invalidateRegistryLookup,\n address,\n });\n }\n\n return {\n saveRegistryLookup(lookup: StellarRegistryLookup): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.saveRegistryLookup,\n lookup,\n });\n },\n\n saveRegisteredPrivateAddress(input: {\n address: StellarAddress;\n privateAddress: string;\n registered: boolean;\n }): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.saveRegisteredPrivateAddress,\n address: input.address,\n privateAddress: input.privateAddress,\n registered: input.registered,\n });\n },\n\n invalidateRegistryLookup,\n\n invalidateRegisteredAddress(address: StellarAddress): Promise<void> {\n return invalidateRegistryLookup(address);\n },\n };\n}\n","import type { StellarStateServiceBase } from '../base.js';\nimport { createRegistryLookupReadMethods } from './lookup-read.js';\nimport { createRegistryLookupWriteMethods } from './lookup-write.js';\n\nexport function createRegistryLookupService(context: StellarStateServiceBase) {\n return {\n ...createRegistryLookupReadMethods(context),\n ...createRegistryLookupWriteMethods(context),\n };\n}\n","import type {\n StellarAddress,\n StellarWalletPrivateAddressRecord,\n} from '../../../types.js';\nimport {\n normalizeWalletDefaultPrivateAddressNonce,\n normalizeWalletPrivateAddressRecord,\n} from '../../read/normalize.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport type { StellarStateServiceBase } from '../base.js';\n\nexport function createWalletRecordMethods(context: StellarStateServiceBase) {\n const { bridge } = context;\n\n return {\n async getWalletPrivateAddressRecord(input: {\n owner: StellarAddress;\n nonce: string;\n }): Promise<StellarWalletPrivateAddressRecord | undefined> {\n const value = await bridge.read<unknown>({\n type: stellarStateCallTypes.readWalletPrivateAddressRecord,\n owner: input.owner,\n nonce: input.nonce,\n });\n return normalizeWalletPrivateAddressRecord(value);\n },\n\n saveWalletPrivateAddressRecord(\n record: StellarWalletPrivateAddressRecord,\n ): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.saveWalletPrivateAddressRecord,\n record,\n });\n },\n\n async getWalletDefaultPrivateAddressNonce(\n owner: StellarAddress,\n ): Promise<string | undefined> {\n const value = await bridge.read<unknown>({\n type: stellarStateCallTypes.readWalletDefaultPrivateAddressNonce,\n owner,\n });\n return normalizeWalletDefaultPrivateAddressNonce(value);\n },\n\n setWalletDefaultPrivateAddressNonce(input: {\n owner: StellarAddress;\n nonce: string;\n }): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.setWalletDefaultPrivateAddressNonce,\n owner: input.owner,\n nonce: input.nonce,\n });\n },\n };\n}\n","import type {\n StellarAddress,\n StellarWalletPrivateAddressScalar,\n} from '../../../types.js';\nimport { normalizeWalletPrivateAddressScalar } from '../../read/normalize.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport type { StellarStateServiceBase } from '../base.js';\n\nexport function createWalletScalarMethods(context: StellarStateServiceBase) {\n const { bridge } = context;\n\n return {\n async getWalletPrivateAddressScalar(input: {\n owner: StellarAddress;\n nonce: string;\n }): Promise<StellarWalletPrivateAddressScalar | undefined> {\n const value = await bridge.read<unknown>({\n type: stellarStateCallTypes.readWalletPrivateAddressScalar,\n owner: input.owner,\n nonce: input.nonce,\n });\n return normalizeWalletPrivateAddressScalar(value);\n },\n\n saveWalletPrivateAddressScalar(\n scalar: StellarWalletPrivateAddressScalar,\n ): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.saveWalletPrivateAddressScalar,\n scalar,\n });\n },\n\n deleteWalletPrivateAddressScalar(input: {\n owner: StellarAddress;\n nonce: string;\n }): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.deleteWalletPrivateAddressScalar,\n owner: input.owner,\n nonce: input.nonce,\n });\n },\n };\n}\n","import type { StellarStateServiceBase } from '../base.js';\nimport { createWalletRecordMethods } from './wallet-record-methods.js';\nimport { createWalletScalarMethods } from './wallet-scalar-methods.js';\n\nexport function createWalletAddressService(context: StellarStateServiceBase) {\n return {\n ...createWalletScalarMethods(context),\n ...createWalletRecordMethods(context),\n };\n}\n","import type { StateBridgeAdapter } from '@arcanetech/privacy-sdk-core/state';\nimport { StellarStateServiceBase } from './base.js';\nimport { createAssetsService } from './assets/index.js';\nimport { createDeliveriesService } from './deliveries/index.js';\nimport { createPoolEphemeralService } from './pool/ephemeral.js';\nimport { createPoolMerkleService } from './pool/merkle.js';\nimport { createRecordsService } from './records/index.js';\nimport { createRegistryLookupService } from './registry/lookup.js';\nimport { createWalletAddressService } from './registry/wallet-address.js';\n\nexport function composeStellarStateService(adapter: StateBridgeAdapter) {\n const base = new StellarStateServiceBase(adapter);\n\n return {\n bridge: base.bridge,\n ...createAssetsService(base),\n ...createRegistryLookupService(base),\n ...createWalletAddressService(base),\n ...createPoolMerkleService(base),\n ...createPoolEphemeralService(base),\n ...createDeliveriesService(base),\n ...createRecordsService(base),\n };\n}\n\nexport type ComposedStellarStateService = ReturnType<typeof composeStellarStateService>;\n","import type { StateBridgeAdapter } from '@arcanetech/privacy-sdk-core/state';\nimport type { StellarStorageAdapter } from '../../types.js';\nimport {\n composeStellarStateService,\n type ComposedStellarStateService,\n} from './compose.js';\n\nexport type StellarStateService = ComposedStellarStateService;\n\nexport function createStellarStateService(\n adapter: StateBridgeAdapter,\n): StellarStateService {\n return composeStellarStateService(adapter);\n}\n\nexport function createStellarStorageAdapterFromState(\n state: StellarStateService,\n): StellarStorageAdapter {\n return {\n listPrivateRecords: (filter) => state.listPrivateRecords(filter),\n savePrivateRecords: (records) => state.savePrivateRecords(records),\n markPrivateRecordsUsed: (records) => state.markPrivateRecordsUsed(records),\n };\n}\n","import { Buffer } from 'buffer';\nimport type { StellarAddress, StellarRegistryLookup } from '../../types.js';\nimport {\n decodePrivateAddress,\n encodePrivateAddressFromHexCoordinates,\n} from '../../transact/private-address/codec.js';\nimport { runTtlPreflight } from '../../transact/submit/ttl-preflight.js';\nimport type { StellarContractContext } from '../contract-context.js';\nimport type { PrivateAddressRecord } from './create-registry-client.js';\n\nconst COORDINATE_HEX_LENGTH = 64;\n\nfunction readCoordinateBytes(value: unknown): Buffer | undefined {\n if (value instanceof Buffer) {\n return value;\n }\n if (value instanceof Uint8Array) {\n return Buffer.from(value);\n }\n return undefined;\n}\n\nfunction normalizePrivateAddressRecord(\n value: unknown,\n): PrivateAddressRecord | undefined {\n if (!value || typeof value !== 'object') {\n return undefined;\n }\n const record = value as Record<string, unknown>;\n const publicKeyX = readCoordinateBytes(record.public_key_x);\n const publicKeyY = readCoordinateBytes(record.public_key_y);\n if (typeof record.owner !== 'string' || !publicKeyX || !publicKeyY) {\n return undefined;\n }\n return {\n owner: record.owner,\n public_key_x: publicKeyX,\n public_key_y: publicKeyY,\n updated_at_ledger: Number(record.updated_at_ledger ?? 0),\n };\n}\n\nfunction parseOptionSomeRecord(result: unknown): PrivateAddressRecord | undefined {\n if (!result || typeof result !== 'object' || !('tag' in result)) {\n return undefined;\n }\n const option = result as { tag?: unknown; values?: unknown };\n if (option.tag !== 'Some' || !Array.isArray(option.values)) {\n return undefined;\n }\n return normalizePrivateAddressRecord(option.values[0]);\n}\n\nfunction parseRegistryLookupRecord(result: unknown): PrivateAddressRecord | undefined {\n const directRecord = normalizePrivateAddressRecord(result);\n if (directRecord) {\n return directRecord;\n }\n return parseOptionSomeRecord(result);\n}\n\nfunction recordToLookupResult(record: PrivateAddressRecord): StellarRegistryLookup {\n const publicKeyXHex = Buffer.from(record.public_key_x).toString('hex');\n const publicKeyYHex = Buffer.from(record.public_key_y).toString('hex');\n return {\n owner: record.owner,\n status: 'registered',\n privateAddressStpl1: encodePrivateAddressFromHexCoordinates(\n publicKeyXHex,\n publicKeyYHex,\n ),\n publicKeyXHex,\n publicKeyYHex,\n updatedAtLedger: record.updated_at_ledger,\n cachedAt: new Date().toISOString(),\n };\n}\n\nexport async function readRegistryLookupFromChain(input: {\n contractContext: StellarContractContext;\n owner: StellarAddress;\n walletPublicKey: string;\n}): Promise<StellarRegistryLookup> {\n const owner = input.owner.trim();\n const client = input.contractContext.createRegistryClient({\n contractId: input.contractContext.network.registryContract,\n walletPublicKey: input.walletPublicKey,\n networkPassphrase: input.contractContext.network.networkPassphrase,\n sorobanRpcUrl: input.contractContext.network.rpcUrl,\n });\n const read = await client.get_private_address({ owner });\n const record = parseRegistryLookupRecord(read.result);\n if (!record) {\n return {\n owner,\n status: 'unregistered',\n cachedAt: new Date().toISOString(),\n };\n }\n return recordToLookupResult(record);\n}\n\nexport async function registerPrivateAddressOnChain(input: {\n contractContext: StellarContractContext;\n owner: StellarAddress;\n walletPublicKey: string;\n privateAddressStpl1: string;\n}): Promise<string> {\n const decoded = decodePrivateAddress(input.privateAddressStpl1.trim());\n const client = input.contractContext.createRegistryClient({\n contractId: input.contractContext.network.registryContract,\n walletPublicKey: input.walletPublicKey,\n networkPassphrase: input.contractContext.network.networkPassphrase,\n sorobanRpcUrl: input.contractContext.network.rpcUrl,\n });\n const assembled = await client.register_private_address({\n owner: input.owner.trim(),\n public_key_x: Buffer.from(decoded.x.padStart(COORDINATE_HEX_LENGTH, '0'), 'hex'),\n public_key_y: Buffer.from(decoded.y.padStart(COORDINATE_HEX_LENGTH, '0'), 'hex'),\n });\n await runTtlPreflight(assembled);\n const sent = await assembled.signAndSend();\n const transactionHash = sent.sendTransactionResponse?.hash ?? '';\n if (!transactionHash) {\n throw new Error('Registry registration transaction failed');\n }\n return transactionHash;\n}\n","type UnknownRecord = Record<string, unknown>;\n\nfunction getNested(source: unknown, path: string[]): unknown {\n let cursor: unknown = source;\n for (const key of path) {\n if (typeof cursor !== 'object' || cursor === null) {\n return undefined;\n }\n cursor = (cursor as UnknownRecord)[key];\n }\n return cursor;\n}\n\nfunction needsRestore(simulation: unknown): boolean {\n const restorePreamble =\n getNested(simulation, ['restorePreamble']) ??\n getNested(simulation, ['result', 'restorePreamble']) ??\n getNested(simulation, ['simulation', 'restorePreamble']);\n if (restorePreamble && typeof restorePreamble === 'object') {\n return true;\n }\n const isSimulationError = getNested(simulation, ['error']);\n if (typeof isSimulationError === 'string') {\n return isSimulationError.toLowerCase().includes('restore');\n }\n return false;\n}\n\nasync function maybeCallFunction(\n target: unknown,\n methodName: string,\n): Promise<unknown | undefined> {\n if (typeof target !== 'object' || target === null) {\n return undefined;\n }\n const method = (target as UnknownRecord)[methodName];\n if (typeof method !== 'function') {\n return undefined;\n }\n return (method as () => Promise<unknown>)();\n}\n\nexport async function runTtlPreflight(assembledTransaction: unknown): Promise<void> {\n const simulation = await maybeCallFunction(assembledTransaction, 'simulate');\n if (!simulation || !needsRestore(simulation)) {\n return;\n }\n const restoreResult =\n (await maybeCallFunction(assembledTransaction, 'restoreFootprint')) ??\n (await maybeCallFunction(assembledTransaction, 'restore'));\n if (!restoreResult) {\n return;\n }\n await maybeCallFunction(assembledTransaction, 'simulate');\n}\n","import { StrKey } from '@stellar/stellar-sdk';\nimport type { StellarAddress } from '../../types.js';\nimport type { TransferRecipientExecutionContext } from '../../transact/environment/types.js';\nimport type { StellarContractContext } from '../contract-context.js';\nimport { readRegistryLookupFromChain } from './registry-domain-service.js';\nimport { deriveEscrowRecipientFromStellarAddress } from '../../transact/escrow/derived-escrow-recipient.js';\n\nexport async function resolveTransferRecipientFromChain(input: {\n contractContext: StellarContractContext;\n recipientStellarAddress: StellarAddress;\n walletPublicKey: StellarAddress;\n cachedLookup?: Awaited<ReturnType<typeof readRegistryLookupFromChain>> | undefined;\n}): Promise<TransferRecipientExecutionContext> {\n const recipientStellarAddress = input.recipientStellarAddress.trim();\n const walletPublicKey = input.walletPublicKey.trim();\n const lookup =\n input.cachedLookup ??\n (await readRegistryLookupFromChain({\n contractContext: input.contractContext,\n owner: recipientStellarAddress,\n walletPublicKey,\n }));\n if (lookup.status === 'registered' && lookup.privateAddressStpl1?.trim()) {\n return {\n recipientPrivateAddressStpl1: lookup.privateAddressStpl1.trim(),\n recipientStellarAddress,\n };\n }\n if (!StrKey.isValidEd25519PublicKey(recipientStellarAddress)) {\n throw new Error(\n 'Transfers to unregistered recipients require a Stellar G-address.',\n );\n }\n const escrow = await deriveEscrowRecipientFromStellarAddress({\n recipientStellarAddress,\n });\n return {\n recipientPrivateAddressStpl1: escrow.privateAddressStpl1,\n recipientStellarAddress,\n escrowSend: {\n nonceDecimal: escrow.nonceDecimal,\n recipientHi: escrow.recipientHi,\n recipientLo: escrow.recipientLo,\n recipientStellarAddress,\n },\n };\n}\n","import { Buffer } from 'buffer';\nimport { StrKey } from '@stellar/stellar-sdk';\nimport {\n derivedEscrowKey,\n ed25519PubkeyPayloadHexToWithdrawFrDecimals,\n sampleDerivedEscrowKey,\n} from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport { encodePrivateAddressFromHexCoordinates } from '../private-address/codec.js';\n\nconst COORDINATE_HEX_LENGTH = 64;\n\nexport type DerivedEscrowRecipient = {\n nonceDecimal: string;\n recipientHi: string;\n recipientLo: string;\n recipientStellarAddress: string;\n privateAddressStpl1: string;\n scalarHex: string;\n};\n\nexport type DerivedEscrowKeyFn = (\n nonce: bigint,\n recipientHi: bigint,\n recipientLo: bigint,\n) => Promise<{\n scalarHex: string;\n pointXHex: string;\n pointYHex: string;\n}>;\n\nfunction stellarAccountToFieldLimbs(stellarAddress: string): {\n recipientHi: string;\n recipientLo: string;\n} {\n const pkRaw = StrKey.decodeEd25519PublicKey(stellarAddress.trim());\n const pkHex = Buffer.from(pkRaw).toString('hex');\n const { hi, lo } = ed25519PubkeyPayloadHexToWithdrawFrDecimals(pkHex);\n return { recipientHi: hi, recipientLo: lo };\n}\n\nfunction padCoordinateHex(value: string): string {\n return value.replace(/^0x/iu, '').padStart(COORDINATE_HEX_LENGTH, '0');\n}\n\nexport async function deriveEscrowRecipientFromStellarAddress(input: {\n recipientStellarAddress: string;\n nonceDecimal?: string;\n deriveKey?: DerivedEscrowKeyFn;\n}): Promise<DerivedEscrowRecipient> {\n const recipientStellarAddress = input.recipientStellarAddress.trim();\n if (!StrKey.isValidEd25519PublicKey(recipientStellarAddress)) {\n throw new Error('Escrow recipient must be a Stellar G-address.');\n }\n const { recipientHi, recipientLo } = stellarAccountToFieldLimbs(\n recipientStellarAddress,\n );\n const deriveKey = input.deriveKey ?? derivedEscrowKey;\n let nonceDecimal: string;\n let key: Awaited<ReturnType<DerivedEscrowKeyFn>>;\n if (input.nonceDecimal) {\n nonceDecimal = input.nonceDecimal;\n key = await deriveKey(\n BigInt(nonceDecimal),\n BigInt(recipientHi),\n BigInt(recipientLo),\n );\n } else {\n const sampled = await sampleDerivedEscrowKey(\n BigInt(recipientHi),\n BigInt(recipientLo),\n );\n nonceDecimal = sampled.nonce.toString();\n key = sampled.key;\n }\n return {\n nonceDecimal,\n recipientHi,\n recipientLo,\n recipientStellarAddress,\n privateAddressStpl1: encodePrivateAddressFromHexCoordinates(\n padCoordinateHex(key.pointXHex),\n padCoordinateHex(key.pointYHex),\n ),\n scalarHex: padCoordinateHex(key.scalarHex),\n };\n}\n","import { Api } from '@stellar/stellar-sdk/rpc';\nimport type { StellarTransactionConfirmationStatus } from '../state/domain/types.js';\nimport {\n extractInvokedPoolContractFromEnvelope,\n tryExtractTransferAmountRawFromMeta,\n} from './soroban-transaction-meta.js';\nimport { parseStellarRpcUnixTimestampSeconds } from './stellar-rpc-unix-timestamp.js';\nimport type { StellarRpcServer } from './server.js';\n\nexport type StellarTransactionDetails = {\n txHash: string;\n status: StellarTransactionConfirmationStatus;\n ledger?: number;\n createdAt?: string;\n invokedPoolContractId?: string;\n transferAmountRaw?: string;\n};\n\nexport type StellarTransactionFetchReject =\n | { kind: 'not_found'; message: string }\n | { kind: 'failed'; message: string }\n | { kind: 'rpc_error'; message: string };\n\nfunction readCreatedAtSeconds(\n response: Api.GetTransactionResponse,\n): number | undefined {\n const responseRecord = response as {\n createdAt?: unknown;\n created_at?: unknown;\n };\n return parseStellarRpcUnixTimestampSeconds(\n responseRecord.createdAt ?? responseRecord.created_at,\n );\n}\n\nfunction buildSuccessDetails(\n txHash: string,\n response: Api.GetSuccessfulTransactionResponse,\n): StellarTransactionDetails {\n const invokedPoolContractId = extractInvokedPoolContractFromEnvelope(\n response.envelopeXdr,\n );\n const transferAmountRaw =\n invokedPoolContractId === undefined\n ? undefined\n : tryExtractTransferAmountRawFromMeta(\n response.resultMetaXdr,\n invokedPoolContractId,\n );\n const createdAtSeconds = readCreatedAtSeconds(response);\n return {\n txHash,\n status: 'success',\n ledger: response.ledger,\n ...(createdAtSeconds === undefined\n ? {}\n : { createdAt: new Date(createdAtSeconds * 1000).toISOString() }),\n ...(invokedPoolContractId === undefined ? {} : { invokedPoolContractId }),\n ...(transferAmountRaw === undefined ? {} : { transferAmountRaw }),\n };\n}\n\nexport async function fetchStellarTransactionDetails(\n server: StellarRpcServer,\n txHash: string,\n): Promise<StellarTransactionDetails | StellarTransactionFetchReject> {\n const trimmed = txHash.trim();\n if (!trimmed) {\n return { kind: 'rpc_error', message: 'Missing tx hash' };\n }\n let response: Api.GetTransactionResponse;\n try {\n response = await server.getTransaction(trimmed);\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Soroban request failed';\n return { kind: 'rpc_error', message };\n }\n if (response.status === Api.GetTransactionStatus.NOT_FOUND) {\n return { kind: 'not_found', message: 'Transaction not found' };\n }\n if (response.status === Api.GetTransactionStatus.FAILED) {\n return {\n txHash: trimmed,\n status: 'failed',\n ledger: response.ledger,\n };\n }\n return buildSuccessDetails(trimmed, response as Api.GetSuccessfulTransactionResponse);\n}\n\nfunction transactionDetailsToStatus(details: StellarTransactionDetails): {\n txHash: string;\n status: StellarTransactionConfirmationStatus;\n ledger?: number;\n createdAt?: string;\n} {\n return {\n txHash: details.txHash,\n status: details.status,\n ...(details.ledger === undefined ? {} : { ledger: details.ledger }),\n ...(details.createdAt === undefined ? {} : { createdAt: details.createdAt }),\n };\n}\n\nexport async function readStellarTransactionStatus(\n server: StellarRpcServer,\n txHash: string,\n): Promise<\n | {\n txHash: string;\n status: StellarTransactionConfirmationStatus;\n ledger?: number;\n createdAt?: string;\n }\n | StellarTransactionFetchReject\n> {\n const details = await fetchStellarTransactionDetails(server, txHash);\n if ('kind' in details) {\n return details;\n }\n return transactionDetailsToStatus(details);\n}\n","import { Address, StrKey, xdr } from '@stellar/stellar-sdk';\n\nconst BIGINT_SHIFT_64 = 64n;\nconst TRANSACTION_META_SWITCH_SOROBAN_V3 = 3;\nconst TRANSACTION_META_SWITCH_SOROBAN_V4 = 4;\nconst MIN_TRANSFER_EVENT_TOPIC_COUNT = 3;\nconst CONTRACT_EVENT_BODY_V0 = 0;\n\nfunction extractSymbolFromScValue(value: xdr.ScVal): string | undefined {\n try {\n const variant = value.switch().name;\n if (variant === 'scvSymbol') {\n return value.sym().toString();\n }\n if (variant === 'scvString') {\n return value.str().toString();\n }\n } catch {\n return undefined;\n }\n return undefined;\n}\n\nfunction extractAmountFromScValue(value: xdr.ScVal): string | undefined {\n try {\n const variant = value.switch().name;\n if (variant === 'scvString') {\n return value.str().toString();\n }\n if (variant === 'scvI128') {\n const parts = value.i128();\n const hi = BigInt(parts.hi().toString());\n const lo = BigInt(parts.lo().toString());\n return ((hi << BIGINT_SHIFT_64) + lo).toString();\n }\n if (variant === 'scvI64') {\n return value.i64().toString();\n }\n if (variant === 'scvU64') {\n return value.u64().toString();\n }\n } catch {\n return undefined;\n }\n return undefined;\n}\n\nfunction contractIdToString(contractId: Buffer | Uint8Array): string {\n return StrKey.encodeContract(Buffer.from(contractId));\n}\n\nfunction scAddressToContractString(address: xdr.ScAddress): string | undefined {\n if (address.switch().name !== 'scAddressTypeContract') {\n return undefined;\n }\n try {\n return contractIdToString(\n Buffer.from(address.contractId() as unknown as Uint8Array),\n );\n } catch {\n return undefined;\n }\n}\n\nfunction pushSorobanV3ContractEvents(\n out: xdr.ContractEvent[],\n meta: xdr.TransactionMeta,\n): void {\n const soroban = meta.v3().sorobanMeta();\n if (!soroban) {\n return;\n }\n for (const event of soroban.events()) {\n out.push(event);\n }\n}\n\nfunction pushSorobanV4ContractEvents(\n out: xdr.ContractEvent[],\n meta: xdr.TransactionMeta,\n): void {\n const v4 = meta.v4();\n for (const txEvent of v4.events()) {\n out.push(txEvent.event());\n }\n for (const op of v4.operations()) {\n for (const event of op.events()) {\n out.push(event);\n }\n }\n}\n\nexport function collectContractEventsFromMeta(\n meta: xdr.TransactionMeta,\n): xdr.ContractEvent[] {\n const out: xdr.ContractEvent[] = [];\n const code = meta.switch();\n if (code === TRANSACTION_META_SWITCH_SOROBAN_V3) {\n pushSorobanV3ContractEvents(out, meta);\n }\n if (code === TRANSACTION_META_SWITCH_SOROBAN_V4) {\n pushSorobanV4ContractEvents(out, meta);\n }\n return out;\n}\n\nfunction transferPartyAddressesFromTopics(\n topics: xdr.ScVal[],\n): { from: string; to: string } | undefined {\n if (topics.length < MIN_TRANSFER_EVENT_TOPIC_COUNT) {\n return undefined;\n }\n try {\n const fromTopic = topics[1];\n const toTopic = topics[2];\n if (!fromTopic || !toTopic) {\n return undefined;\n }\n return {\n from: Address.fromScVal(fromTopic).toString(),\n to: Address.fromScVal(toTopic).toString(),\n };\n } catch {\n return undefined;\n }\n}\n\nfunction tryParseTransferFromEvent(\n event: xdr.ContractEvent,\n poolContractId: string,\n): string | undefined {\n if (event.type().name !== 'contract') {\n return undefined;\n }\n const body = event.body();\n if (body.switch() !== CONTRACT_EVENT_BODY_V0) {\n return undefined;\n }\n const v0 = body.v0();\n const topics = v0.topics();\n if (!Array.isArray(topics) || topics.length < MIN_TRANSFER_EVENT_TOPIC_COUNT) {\n return undefined;\n }\n const eventName = extractSymbolFromScValue(topics[0]!);\n if (!eventName || eventName.toLowerCase() !== 'transfer') {\n return undefined;\n }\n const parties = transferPartyAddressesFromTopics(topics);\n if (!parties) {\n return undefined;\n }\n if (parties.from !== poolContractId && parties.to !== poolContractId) {\n return undefined;\n }\n return extractAmountFromScValue(v0.data());\n}\n\nexport function tryExtractTransferAmountRawFromMeta(\n meta: xdr.TransactionMeta | undefined,\n poolContractId: string,\n): string | undefined {\n if (!meta) {\n return undefined;\n }\n const normalizedPool = poolContractId.trim();\n if (!normalizedPool) {\n return undefined;\n }\n for (const event of collectContractEventsFromMeta(meta)) {\n const amount = tryParseTransferFromEvent(event, normalizedPool);\n if (amount !== undefined) {\n return amount;\n }\n }\n return undefined;\n}\n\nfunction firstInvokeContractFromHostFunction(\n hostFunction: xdr.HostFunction,\n): xdr.InvokeContractArgs | undefined {\n if (hostFunction.switch().name !== 'hostFunctionTypeInvokeContract') {\n return undefined;\n }\n return hostFunction.invokeContract();\n}\n\nfunction contractIdFromInvokeHostOperation(op: xdr.Operation): string | undefined {\n const body = op.body();\n if (body.switch().name !== 'invokeHostFunction') {\n return undefined;\n }\n const invoke = body.invokeHostFunctionOp();\n const hostFunction = invoke.hostFunction();\n const invokeContract = firstInvokeContractFromHostFunction(hostFunction);\n if (!invokeContract) {\n return undefined;\n }\n return scAddressToContractString(invokeContract.contractAddress());\n}\n\nfunction operationsFromEnvelope(envelope: xdr.TransactionEnvelope): xdr.Operation[] {\n const kind = envelope.switch().name;\n if (kind === 'envelopeTypeTx') {\n return [...envelope.v1().tx().operations()];\n }\n if (kind === 'envelopeTypeTxV0') {\n return [...envelope.v0().tx().operations()];\n }\n if (kind === 'envelopeTypeTxFeeBump') {\n const inner = envelope.feeBump().tx().innerTx();\n return [...inner.v1().tx().operations()];\n }\n return [];\n}\n\nexport function extractInvokedPoolContractFromEnvelope(\n envelope: xdr.TransactionEnvelope,\n): string | undefined {\n for (const op of operationsFromEnvelope(envelope)) {\n const id = contractIdFromInvokeHostOperation(op);\n if (id) {\n return id;\n }\n }\n return undefined;\n}\n","const MILLISECONDS_PER_SECOND = 1000;\nconst UNIX_TIMESTAMP_SECONDS_ABOVE_WHICH_VALUE_IS_MS = 1_000_000_000_000;\n\nexport function parseStellarRpcUnixTimestampSeconds(\n value: unknown,\n): number | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n if (typeof value === 'string' && value.trim() === '') {\n return undefined;\n }\n const numeric = typeof value === 'number' ? value : Number(value);\n if (!Number.isFinite(numeric)) {\n return undefined;\n }\n const integral = Math.trunc(numeric);\n if (integral >= UNIX_TIMESTAMP_SECONDS_ABOVE_WHICH_VALUE_IS_MS) {\n return Math.trunc(integral / MILLISECONDS_PER_SECOND);\n }\n return integral;\n}\n","import type { StellarTransactionConfirmationStatus } from '../state/domain/types.js';\nimport type { StellarRpcServer } from './server.js';\nimport { readStellarTransactionStatus } from './transactions.js';\n\nconst DEFAULT_POLL_INTERVAL_MS = 1500;\nconst DEFAULT_TIMEOUT_MS = 60_000;\n\nexport async function waitForStellarTransactionConfirmation(input: {\n server: StellarRpcServer;\n txHash: string;\n pollIntervalMs?: number;\n timeoutMs?: number;\n}): Promise<{\n txHash: string;\n status: StellarTransactionConfirmationStatus;\n ledger?: number;\n createdAt?: string;\n}> {\n const pollIntervalMs = input.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;\n const timeoutMs = input.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n const startedAt = Date.now();\n while (Date.now() - startedAt < timeoutMs) {\n const status = await readStellarTransactionStatus(input.server, input.txHash);\n if ('kind' in status) {\n if (status.kind === 'failed') {\n throw new Error('Transaction failed on network');\n }\n if (status.kind === 'rpc_error') {\n throw new Error(status.message);\n }\n } else if (status.status === 'success') {\n return status;\n } else if (status.status === 'failed') {\n throw new Error('Transaction failed on network');\n }\n await new Promise((resolve) => {\n setTimeout(resolve, pollIntervalMs);\n });\n }\n throw new Error('Transaction was not confirmed in time');\n}\n","import type {\n StellarAddress,\n StellarRegistryLookup,\n StellarTransactionStatus,\n} from '../types.js';\nimport { requireContractContext } from '../contracts/contract-context.js';\nimport { readNullifierConsumedOnChain } from '../contracts/pool/pool-domain-service.js';\nimport {\n readRegistryLookupFromChain,\n registerPrivateAddressOnChain,\n} from '../contracts/registry/registry-domain-service.js';\nimport { resolveTransferRecipientFromChain } from '../contracts/registry/resolve-transfer-recipient.js';\nimport {\n fetchStellarTransactionDetails,\n readStellarTransactionStatus,\n waitForStellarTransactionConfirmation,\n type StellarTransactionDetails,\n} from '../rpc/index.js';\nimport { getPrivacyPoolService } from '../transact/pool/singleton.js';\nimport { privKeyScalarDecimalFromRecipientScalarHex } from '../transact/encoding/priv-key-scalar-from-recipient-hex.js';\nimport type {\n StellarTransactEnvironment,\n TransferRecipientExecutionContext,\n} from '../transact/environment/types.js';\n\nfunction requireNetworkEnvironment(\n transactEnvironment: StellarTransactEnvironment | undefined,\n): StellarTransactEnvironment {\n if (!transactEnvironment) {\n throw new Error(\n 'Stellar privacy client network operations require transact environment.',\n );\n }\n return transactEnvironment;\n}\n\nexport async function checkRegistrationStatusWithEnvironment(input: {\n transactEnvironment: StellarTransactEnvironment | undefined;\n address: StellarAddress;\n walletPublicKey: string;\n saveLookup: (lookup: StellarRegistryLookup) => Promise<void>;\n}): Promise<StellarRegistryLookup> {\n const environment = requireNetworkEnvironment(input.transactEnvironment);\n const contractContext = requireContractContext(environment);\n const lookup = await readRegistryLookupFromChain({\n contractContext,\n owner: input.address,\n walletPublicKey: input.walletPublicKey,\n });\n await input.saveLookup(lookup);\n return lookup;\n}\n\nexport async function registerPrivateAddressWithEnvironment(input: {\n transactEnvironment: StellarTransactEnvironment | undefined;\n owner: StellarAddress;\n walletPublicKey: string;\n privateAddressStpl1: string;\n}): Promise<StellarTransactionStatus> {\n const environment = requireNetworkEnvironment(input.transactEnvironment);\n const contractContext = requireContractContext(environment);\n const txHash = await registerPrivateAddressOnChain({\n contractContext,\n owner: input.owner,\n walletPublicKey: input.walletPublicKey,\n privateAddressStpl1: input.privateAddressStpl1,\n });\n return {\n txHash,\n status: 'pending',\n };\n}\n\nexport async function resolveTransferRecipientWithEnvironment(input: {\n transactEnvironment: StellarTransactEnvironment | undefined;\n recipientStellarAddress: StellarAddress;\n walletPublicKey: StellarAddress;\n readCachedLookup: (\n address: StellarAddress,\n ) => Promise<StellarRegistryLookup | undefined>;\n saveLookup: (lookup: StellarRegistryLookup) => Promise<void>;\n}): Promise<TransferRecipientExecutionContext> {\n const environment = requireNetworkEnvironment(input.transactEnvironment);\n const contractContext = requireContractContext(environment);\n const recipientStellarAddress = input.recipientStellarAddress.trim();\n const cachedLookup = await input.readCachedLookup(recipientStellarAddress);\n if (\n cachedLookup?.status === 'registered' &&\n cachedLookup.privateAddressStpl1?.trim()\n ) {\n return {\n recipientPrivateAddressStpl1: cachedLookup.privateAddressStpl1.trim(),\n recipientStellarAddress,\n };\n }\n const lookup = await readRegistryLookupFromChain({\n contractContext,\n owner: recipientStellarAddress,\n walletPublicKey: input.walletPublicKey,\n });\n await input.saveLookup(lookup);\n return resolveTransferRecipientFromChain({\n contractContext,\n recipientStellarAddress,\n walletPublicKey: input.walletPublicKey,\n cachedLookup: lookup,\n });\n}\n\nexport async function checkPrivateRecordSpendStatusWithEnvironment(input: {\n transactEnvironment: StellarTransactEnvironment | undefined;\n poolContractId?: string;\n nullifier: string;\n walletPublicKey: string;\n privKeyScalarHex: string;\n}): Promise<{ spent: boolean; nullifierHashHex: string }> {\n const environment = requireNetworkEnvironment(input.transactEnvironment);\n const contractContext = requireContractContext(environment);\n const nullifierHashHex = await getPrivacyPoolService().calculateNullifierHash(\n input.nullifier,\n privKeyScalarDecimalFromRecipientScalarHex(input.privKeyScalarHex),\n );\n const poolContractId =\n input.poolContractId?.trim() || contractContext.network.poolContract;\n const spent = await readNullifierConsumedOnChain({\n contractContext,\n poolContractId,\n walletPublicKey: input.walletPublicKey,\n nullifierHashHex,\n });\n return { spent, nullifierHashHex };\n}\n\nexport async function waitForTransactionConfirmationWithEnvironment(input: {\n transactEnvironment: StellarTransactEnvironment | undefined;\n txHash: string;\n pollIntervalMs?: number;\n timeoutMs?: number;\n}): Promise<StellarTransactionStatus> {\n const environment = requireNetworkEnvironment(input.transactEnvironment);\n const contractContext = requireContractContext(environment);\n return waitForStellarTransactionConfirmation({\n server: contractContext.rpcServer,\n txHash: input.txHash,\n ...(input.pollIntervalMs === undefined\n ? {}\n : { pollIntervalMs: input.pollIntervalMs }),\n ...(input.timeoutMs === undefined ? {} : { timeoutMs: input.timeoutMs }),\n });\n}\n\nexport async function fetchTransactionConfirmationStatusWithEnvironment(input: {\n transactEnvironment: StellarTransactEnvironment | undefined;\n txHash: string;\n}): Promise<StellarTransactionStatus | undefined> {\n const environment = requireNetworkEnvironment(input.transactEnvironment);\n const contractContext = requireContractContext(environment);\n const status = await readStellarTransactionStatus(\n contractContext.rpcServer,\n input.txHash,\n );\n if ('kind' in status) {\n if (status.kind === 'not_found') {\n return {\n txHash: input.txHash.trim(),\n status: 'pending',\n };\n }\n throw new Error(status.message);\n }\n return status;\n}\n\nexport async function getTransactionDetailsWithEnvironment(input: {\n transactEnvironment: StellarTransactEnvironment | undefined;\n txHash: string;\n}): Promise<StellarTransactionDetails> {\n const environment = requireNetworkEnvironment(input.transactEnvironment);\n const contractContext = requireContractContext(environment);\n const details = await fetchStellarTransactionDetails(\n contractContext.rpcServer,\n input.txHash,\n );\n if ('kind' in details) {\n throw new Error(details.message);\n }\n return details;\n}\n\nexport { type StellarTransactionDetails } from '../rpc/index.js';\n","import type { StellarTransactEnvironment } from '../transact/environment/types.js';\nimport { checkPrivateRecordSpendStatusWithEnvironment } from './network.js';\n\nexport function createNullifierSpentChecker(\n transactEnvironment: StellarTransactEnvironment | undefined,\n) {\n if (!transactEnvironment) {\n return;\n }\n return async ({\n nullifier,\n walletPublicKey,\n privKeyScalarHex,\n privateAddressStpl1,\n }: {\n nullifier: string;\n walletPublicKey: string;\n privKeyScalarHex?: string;\n privateAddressStpl1?: string;\n }) => {\n const addressHint = privateAddressStpl1?.trim() ?? '';\n const resolvedFromEnsure = transactEnvironment.ensureSenderPrivKeyScalarHex\n ? await transactEnvironment.ensureSenderPrivKeyScalarHex(addressHint)\n : undefined;\n const resolvedFromState =\n addressHint && transactEnvironment.resolveSenderPrivKeyScalarFromState\n ? await transactEnvironment.resolveSenderPrivKeyScalarFromState({\n owner: walletPublicKey,\n privateAddressStpl1: addressHint,\n })\n : undefined;\n const resolvedScalarHex =\n privKeyScalarHex?.trim() ||\n resolvedFromEnsure?.trim() ||\n resolvedFromState?.trim();\n if (!resolvedScalarHex) {\n throw new Error('Spend scalar is required to check owner-bound nullifiers.');\n }\n const status = await checkPrivateRecordSpendStatusWithEnvironment({\n transactEnvironment,\n nullifier,\n walletPublicKey,\n privKeyScalarHex: resolvedScalarHex,\n });\n return status.spent;\n };\n}\n","import {\n fetchAndMergeMerkleState,\n readLeafEphemeralHex,\n type FetchContractMerkleResult,\n} from '../transact/merkle/fetch-contract.js';\nimport type { StellarTransactEnvironment } from '../transact/environment/types.js';\n\nfunction requireTransactEnvironment(\n transactEnvironment: StellarTransactEnvironment | undefined,\n): StellarTransactEnvironment {\n if (!transactEnvironment) {\n throw new Error('Pool Merkle sync requires a configured transact environment.');\n }\n return transactEnvironment;\n}\n\nexport async function syncPoolMerkleStateWithEnvironment(\n transactEnvironment: StellarTransactEnvironment | undefined,\n input: {\n poolContractId: string;\n walletPublicKey: string;\n },\n): Promise<FetchContractMerkleResult> {\n const environment = requireTransactEnvironment(transactEnvironment);\n return fetchAndMergeMerkleState({\n poolContractId: input.poolContractId,\n walletPublicKey: input.walletPublicKey,\n transactEnvironment: environment,\n ...(environment.poolMerkleState\n ? { poolMerkleState: environment.poolMerkleState }\n : {}),\n });\n}\n\nexport async function syncPoolMerkleStatesWithEnvironment(\n transactEnvironment: StellarTransactEnvironment | undefined,\n input: {\n poolContractIds: string[];\n walletPublicKey: string;\n },\n): Promise<void> {\n const uniquePoolIds = [\n ...new Set(input.poolContractIds.map((id) => id.trim()).filter(Boolean)),\n ];\n for (const poolContractId of uniquePoolIds) {\n await syncPoolMerkleStateWithEnvironment(transactEnvironment, {\n poolContractId,\n walletPublicKey: input.walletPublicKey,\n });\n }\n}\n\nexport async function readPoolLeafEphemeralHexWithEnvironment(\n transactEnvironment: StellarTransactEnvironment | undefined,\n input: {\n poolContractId: string;\n walletPublicKey: string;\n leafIndex: number;\n },\n): Promise<{ xHex: string; yHex: string }> {\n const environment = requireTransactEnvironment(transactEnvironment);\n return readLeafEphemeralHex({\n poolContractId: input.poolContractId,\n walletPublicKey: input.walletPublicKey,\n leafIndex: input.leafIndex,\n transactEnvironment: environment,\n ...(environment.leafEphemeral ? { leafEphemeral: environment.leafEphemeral } : {}),\n });\n}\n","import type { StellarAddress } from '../types.js';\nimport type { StellarStateService } from '../state/index.js';\nimport type { StellarTransactEnvironment } from '../transact/environment/types.js';\nimport {\n checkPrivateRecordSpendStatusWithEnvironment,\n checkRegistrationStatusWithEnvironment,\n fetchTransactionConfirmationStatusWithEnvironment,\n getTransactionDetailsWithEnvironment,\n registerPrivateAddressWithEnvironment,\n resolveTransferRecipientWithEnvironment,\n waitForTransactionConfirmationWithEnvironment,\n} from './network.js';\nimport {\n readPoolLeafEphemeralHexWithEnvironment,\n syncPoolMerkleStateWithEnvironment,\n syncPoolMerkleStatesWithEnvironment,\n} from './pool-sync.js';\n\nfunction createPoolNetworkFacet(input: {\n transactEnvironment: StellarTransactEnvironment | undefined;\n}) {\n const { transactEnvironment } = input;\n\n return {\n syncPoolMerkleState: (poolInput: {\n poolContractId: string;\n walletPublicKey: string;\n }) => syncPoolMerkleStateWithEnvironment(transactEnvironment, poolInput),\n\n syncPoolMerkleStates: (poolInput: {\n poolContractIds: string[];\n walletPublicKey: string;\n }) => syncPoolMerkleStatesWithEnvironment(transactEnvironment, poolInput),\n\n readPoolLeafEphemeralHex: (poolInput: {\n poolContractId: string;\n walletPublicKey: string;\n leafIndex: number;\n }) => readPoolLeafEphemeralHexWithEnvironment(transactEnvironment, poolInput),\n };\n}\n\nfunction createRegistryNetworkFacet(input: {\n transactEnvironment: StellarTransactEnvironment | undefined;\n state: StellarStateService;\n}) {\n const { transactEnvironment, state } = input;\n\n return {\n checkRegistrationStatus: (registrationInput: {\n address: StellarAddress;\n walletPublicKey: string;\n }) =>\n checkRegistrationStatusWithEnvironment({\n transactEnvironment,\n address: registrationInput.address,\n walletPublicKey: registrationInput.walletPublicKey,\n saveLookup: (lookup) => state.saveRegistryLookup(lookup),\n }),\n\n registerPrivateAddress: (registrationInput: {\n owner: StellarAddress;\n walletPublicKey: string;\n privateAddressStpl1: string;\n }) =>\n registerPrivateAddressWithEnvironment({\n transactEnvironment,\n owner: registrationInput.owner,\n walletPublicKey: registrationInput.walletPublicKey,\n privateAddressStpl1: registrationInput.privateAddressStpl1,\n }),\n\n resolveTransferRecipient: (recipientInput: {\n recipientStellarAddress: StellarAddress;\n walletPublicKey: StellarAddress;\n }) =>\n resolveTransferRecipientWithEnvironment({\n transactEnvironment,\n recipientStellarAddress: recipientInput.recipientStellarAddress,\n walletPublicKey: recipientInput.walletPublicKey,\n readCachedLookup: (address) => state.getRegistryLookup(address),\n saveLookup: (lookup) => state.saveRegistryLookup(lookup),\n }),\n };\n}\n\nfunction createRpcNetworkFacet(input: {\n transactEnvironment: StellarTransactEnvironment | undefined;\n}) {\n const { transactEnvironment } = input;\n\n return {\n checkPrivateRecordSpendStatus: (spendInput: {\n poolContractId?: string;\n nullifier: string;\n walletPublicKey: string;\n privKeyScalarHex: string;\n }) =>\n checkPrivateRecordSpendStatusWithEnvironment({\n transactEnvironment,\n ...spendInput,\n }),\n\n waitForTransactionConfirmation: (confirmationInput: {\n txHash: string;\n pollIntervalMs?: number;\n timeoutMs?: number;\n }) =>\n waitForTransactionConfirmationWithEnvironment({\n transactEnvironment,\n ...confirmationInput,\n }),\n\n fetchTransactionConfirmationStatus: async (txHash: string) => {\n const status = await fetchTransactionConfirmationStatusWithEnvironment({\n transactEnvironment,\n txHash,\n });\n if (!status) {\n throw new Error('Transaction status is unavailable.');\n }\n return status;\n },\n\n getTransactionDetails: (txHash: string) =>\n getTransactionDetailsWithEnvironment({\n transactEnvironment,\n txHash,\n }),\n };\n}\n\nexport function createNetworkFacet(input: {\n transactEnvironment: StellarTransactEnvironment | undefined;\n state: StellarStateService;\n}) {\n return {\n ...createPoolNetworkFacet(input),\n ...createRegistryNetworkFacet(input),\n ...createRpcNetworkFacet(input),\n };\n}\n","import type { StellarStateService } from '../../state/index.js';\n\nexport function createAssetsStateDelegates(state: StellarStateService) {\n return {\n getAssets: () => state.getAssets(),\n getAssetsCatalog: () => state.getAssetsCatalog(),\n getAsset: (assetId: Parameters<StellarStateService['getAsset']>[0]) =>\n state.getAsset(assetId),\n getAssetsForPool: (poolContract: string) => state.getAssetsForPool(poolContract),\n replaceAssets: (assets: Parameters<StellarStateService['replaceAssets']>[0]) =>\n state.replaceAssets(assets),\n upsertAssets: (assets: Parameters<StellarStateService['upsertAssets']>[0]) =>\n state.upsertAssets(assets),\n getPublicBalance: (input: Parameters<StellarStateService['getPublicBalance']>[0]) =>\n state.getPublicBalance(input),\n getPublicBalances: (\n owner: Parameters<StellarStateService['getPublicBalances']>[0],\n ) => state.getPublicBalances(owner),\n setPublicBalance: (\n balance: Parameters<StellarStateService['setPublicBalance']>[0],\n ) => state.setPublicBalance(balance),\n setPublicBalances: (\n input: Parameters<StellarStateService['setPublicBalances']>[0],\n ) => state.setPublicBalances(input),\n };\n}\n","import type { StellarStateService } from '../../state/index.js';\n\nexport function createDeliveriesStateDelegates(state: StellarStateService) {\n return {\n getIncomingDeliveries: (\n filter: Parameters<StellarStateService['getIncomingDeliveries']>[0],\n ) => state.getIncomingDeliveries(filter),\n upsertIncomingDeliveries: (\n deliveries: Parameters<StellarStateService['upsertIncomingDeliveries']>[0],\n ) => state.upsertIncomingDeliveries(deliveries),\n markDeliveryProcessed: (\n id: Parameters<StellarStateService['markDeliveryProcessed']>[0],\n ) => state.markDeliveryProcessed(id),\n getDeliverySyncState: (\n input: Parameters<StellarStateService['getDeliverySyncState']>[0],\n ) => state.getDeliverySyncState(input),\n setDeliverySyncState: (\n syncState: Parameters<StellarStateService['setDeliverySyncState']>[0],\n ) => state.setDeliverySyncState(syncState),\n };\n}\n","import type { StellarStateService } from '../../state/index.js';\n\nexport function createPoolStateDelegates(state: StellarStateService) {\n return {\n getPoolMerkleState: (\n poolContract: Parameters<StellarStateService['getPoolMerkleState']>[0],\n ) => state.getPoolMerkleState(poolContract),\n setPoolMerkleState: (\n poolState: Parameters<StellarStateService['setPoolMerkleState']>[0],\n ) => state.setPoolMerkleState(poolState),\n appendPoolCommitments: (\n input: Parameters<StellarStateService['appendPoolCommitments']>[0],\n ) => state.appendPoolCommitments(input),\n getLeafEphemeral: (input: Parameters<StellarStateService['getLeafEphemeral']>[0]) =>\n state.getLeafEphemeral(input),\n setLeafEphemeral: (\n ephemeral: Parameters<StellarStateService['setLeafEphemeral']>[0],\n ) => state.setLeafEphemeral(ephemeral),\n };\n}\n","import type { StellarStateService } from '../../state/index.js';\n\nexport function createRecordsStateDelegates(state: StellarStateService) {\n return {\n getPrivateRecords: () => state.getPrivateRecords(),\n getAvailablePrivateRecords: (\n filter: Parameters<StellarStateService['getAvailablePrivateRecords']>[0],\n ) => state.getAvailablePrivateRecords(filter),\n getPrivateBalance: (\n input: Parameters<StellarStateService['getPrivateBalance']>[0],\n ) => state.getPrivateBalance(input),\n getPrivateAssetRows: (\n owner: Parameters<StellarStateService['getPrivateAssetRows']>[0],\n ) => state.getPrivateAssetRows(owner),\n upsertPrivateRecords: (\n records: Parameters<StellarStateService['upsertPrivateRecords']>[0],\n ) => state.upsertPrivateRecords(records),\n markPrivateRecordsStatus: (\n records: Parameters<StellarStateService['markPrivateRecordsStatus']>[0],\n status: Parameters<StellarStateService['markPrivateRecordsStatus']>[1],\n ) => state.markPrivateRecordsStatus(records, status),\n pruneConsumedPrivateRecords: () => state.pruneConsumedPrivateRecords(),\n getTransactionStatus: (\n txHash: Parameters<StellarStateService['getTransactionStatus']>[0],\n ) => state.getTransactionStatus(txHash),\n setTransactionStatus: (\n status: Parameters<StellarStateService['setTransactionStatus']>[0],\n ) => state.setTransactionStatus(status),\n clearTransactionStatus: (\n txHash: Parameters<StellarStateService['clearTransactionStatus']>[0],\n ) => state.clearTransactionStatus(txHash),\n };\n}\n","import type { StellarStateService } from '../../state/index.js';\n\nexport function createRegistryStateDelegates(state: StellarStateService) {\n return {\n getRegistryLookup: (\n address: Parameters<StellarStateService['getRegistryLookup']>[0],\n ) => state.getRegistryLookup(address),\n isStellarAddressRegistered: (\n address: Parameters<StellarStateService['isStellarAddressRegistered']>[0],\n ) => state.isStellarAddressRegistered(address),\n getCachedPrivateAddress: (\n address: Parameters<StellarStateService['getCachedPrivateAddress']>[0],\n ) => state.getCachedPrivateAddress(address),\n saveRegistryLookup: (\n lookup: Parameters<StellarStateService['saveRegistryLookup']>[0],\n ) => state.saveRegistryLookup(lookup),\n getWalletPrivateAddressScalar: (\n input: Parameters<StellarStateService['getWalletPrivateAddressScalar']>[0],\n ) => state.getWalletPrivateAddressScalar(input),\n saveWalletPrivateAddressScalar: (\n scalar: Parameters<StellarStateService['saveWalletPrivateAddressScalar']>[0],\n ) => state.saveWalletPrivateAddressScalar(scalar),\n getWalletPrivateAddressRecord: (\n input: Parameters<StellarStateService['getWalletPrivateAddressRecord']>[0],\n ) => state.getWalletPrivateAddressRecord(input),\n saveWalletPrivateAddressRecord: (\n record: Parameters<StellarStateService['saveWalletPrivateAddressRecord']>[0],\n ) => state.saveWalletPrivateAddressRecord(record),\n getWalletDefaultPrivateAddressNonce: (\n owner: Parameters<StellarStateService['getWalletDefaultPrivateAddressNonce']>[0],\n ) => state.getWalletDefaultPrivateAddressNonce(owner),\n setWalletDefaultPrivateAddressNonce: (\n input: Parameters<StellarStateService['setWalletDefaultPrivateAddressNonce']>[0],\n ) => state.setWalletDefaultPrivateAddressNonce(input),\n deleteWalletPrivateAddressScalar: (\n input: Parameters<StellarStateService['deleteWalletPrivateAddressScalar']>[0],\n ) => state.deleteWalletPrivateAddressScalar(input),\n saveRegisteredPrivateAddress: (\n input: Parameters<StellarStateService['saveRegisteredPrivateAddress']>[0],\n ) => state.saveRegisteredPrivateAddress(input),\n invalidateRegistryLookup: (\n address: Parameters<StellarStateService['invalidateRegistryLookup']>[0],\n ) => state.invalidateRegistryLookup(address),\n invalidateRegisteredAddress: (\n address: Parameters<StellarStateService['invalidateRegisteredAddress']>[0],\n ) => state.invalidateRegisteredAddress(address),\n };\n}\n","import type { StellarStateService } from '../../state/index.js';\nimport { createAssetsStateDelegates } from './assets.js';\nimport { createDeliveriesStateDelegates } from './deliveries.js';\nimport { createPoolStateDelegates } from './pool.js';\nimport { createRecordsStateDelegates } from './records.js';\nimport { createRegistryStateDelegates } from './registry.js';\n\nexport function createStateDelegates(state: StellarStateService) {\n return {\n ...createAssetsStateDelegates(state),\n ...createRegistryStateDelegates(state),\n ...createPoolStateDelegates(state),\n ...createDeliveriesStateDelegates(state),\n ...createRecordsStateDelegates(state),\n };\n}\n\nexport type StellarPrivacyClientStateDelegates = ReturnType<\n typeof createStateDelegates\n>;\n","import type {\n ResolvedStellarPrivacyClientConfig,\n StellarTransferIntent,\n} from '../types.js';\nimport {\n composeStellarPrivacyClient,\n type ComposedStellarPrivacyClient,\n} from './compose.js';\nimport {\n createStateDelegates,\n type StellarPrivacyClientStateDelegates,\n} from './state-delegates/index.js';\n\ntype StellarPrivacyClientNetwork = ComposedStellarPrivacyClient['network'];\ntype StellarPrivacyClientOperations = ComposedStellarPrivacyClient['operations'];\n\nexport type StellarPrivacyClient = {\n readonly state: ComposedStellarPrivacyClient['state'];\n deposit: StellarPrivacyClientOperations['deposit'];\n transfer: (\n intent: StellarTransferIntent,\n ) => ReturnType<StellarPrivacyClientOperations['transfer']>;\n withdraw: StellarPrivacyClientOperations['withdraw'];\n syncPoolMerkleState: StellarPrivacyClientNetwork['syncPoolMerkleState'];\n syncPoolMerkleStates: StellarPrivacyClientNetwork['syncPoolMerkleStates'];\n readPoolLeafEphemeralHex: StellarPrivacyClientNetwork['readPoolLeafEphemeralHex'];\n checkRegistrationStatus: StellarPrivacyClientNetwork['checkRegistrationStatus'];\n registerPrivateAddress: StellarPrivacyClientNetwork['registerPrivateAddress'];\n resolveTransferRecipient: StellarPrivacyClientNetwork['resolveTransferRecipient'];\n checkPrivateRecordSpendStatus: StellarPrivacyClientNetwork['checkPrivateRecordSpendStatus'];\n waitForTransactionConfirmation: StellarPrivacyClientNetwork['waitForTransactionConfirmation'];\n fetchTransactionConfirmationStatus: StellarPrivacyClientNetwork['fetchTransactionConfirmationStatus'];\n getTransactionDetails: StellarPrivacyClientNetwork['getTransactionDetails'];\n} & StellarPrivacyClientStateDelegates;\n\nexport function createStellarPrivacyClientInstance(\n config: ResolvedStellarPrivacyClientConfig,\n): StellarPrivacyClient {\n const composed = composeStellarPrivacyClient(config);\n\n return {\n state: composed.state,\n ...createStateDelegates(composed.state),\n deposit: (intent) => composed.operations.deposit(intent),\n transfer: (intent) => composed.operations.transfer(intent),\n withdraw: (intent) => composed.operations.withdraw(intent),\n syncPoolMerkleState: (input) => composed.network.syncPoolMerkleState(input),\n syncPoolMerkleStates: (input) => composed.network.syncPoolMerkleStates(input),\n readPoolLeafEphemeralHex: (input) =>\n composed.network.readPoolLeafEphemeralHex(input),\n checkRegistrationStatus: (input) => composed.network.checkRegistrationStatus(input),\n registerPrivateAddress: (input) => composed.network.registerPrivateAddress(input),\n resolveTransferRecipient: (input) =>\n composed.network.resolveTransferRecipient(input),\n checkPrivateRecordSpendStatus: (input) =>\n composed.network.checkPrivateRecordSpendStatus(input),\n waitForTransactionConfirmation: (input) =>\n composed.network.waitForTransactionConfirmation(input),\n fetchTransactionConfirmationStatus: (txHash) =>\n composed.network.fetchTransactionConfirmationStatus(txHash),\n getTransactionDetails: (txHash) => composed.network.getTransactionDetails(txHash),\n };\n}\n","import type { StateBridgeAdapter } from '@arcanetech/privacy-sdk-core/state';\nimport { createStellarStateService } from '../../state/index.js';\nimport type {\n LeafEphemeralStatePort,\n PoolMerkleStatePort,\n} from '../merkle/state-port.js';\nimport type { StellarTransactEnvironment } from '../environment/types.js';\n\nfunction createPoolMerkleStatePort(state: StateBridgeAdapter): PoolMerkleStatePort {\n const stateService = createStellarStateService(state);\n return {\n get: (poolContract) => stateService.getPoolMerkleState(poolContract),\n set: (merkleState) => stateService.setPoolMerkleState(merkleState),\n };\n}\n\nfunction createLeafEphemeralStatePort(\n state: StateBridgeAdapter,\n): LeafEphemeralStatePort {\n const stateService = createStellarStateService(state);\n return {\n get: (input) => stateService.getLeafEphemeral(input),\n set: (ephemeral) => stateService.setLeafEphemeral(ephemeral),\n };\n}\n\nfunction createSenderScalarStateResolver(state: StateBridgeAdapter) {\n const stateService = createStellarStateService(state);\n return async (input: {\n owner: string;\n privateAddressStpl1: string;\n }): Promise<string | undefined> => {\n const owner = input.owner.trim();\n if (!owner) {\n return;\n }\n const defaultNonce = await stateService.getWalletDefaultPrivateAddressNonce(owner);\n if (!defaultNonce) {\n return;\n }\n const requestedAddress = input.privateAddressStpl1.trim();\n const record = await stateService.getWalletPrivateAddressRecord({\n owner,\n nonce: defaultNonce,\n });\n const recordAddress = record?.privateAddress?.trim();\n if (recordAddress !== requestedAddress) {\n return;\n }\n const scalar = await stateService.getWalletPrivateAddressScalar({\n owner,\n nonce: defaultNonce,\n });\n const normalized = scalar?.scalarHex?.trim() ?? '';\n return normalized.length > 0 ? normalized : undefined;\n };\n}\n\nexport function attachPoolStatePorts(\n transactEnvironment: StellarTransactEnvironment | undefined,\n state: StateBridgeAdapter,\n): StellarTransactEnvironment | undefined {\n if (!transactEnvironment) {\n return undefined;\n }\n return {\n ...transactEnvironment,\n poolMerkleState: createPoolMerkleStatePort(state),\n leafEphemeral: createLeafEphemeralStatePort(state),\n resolveSenderPrivKeyScalarFromState: createSenderScalarStateResolver(state),\n };\n}\n","import { attachContractContext } from '../contracts/contract-context.js';\nimport { attachPoolStatePorts } from '../transact/merkle/attach-state-ports.js';\nimport { parseAuditPublicKeyFromEnvHex } from '../transact/audit/parameters.js';\nimport type { StellarTransactEnvironment } from '../transact/environment/types.js';\nimport type { StellarStateAdapter } from '../types.js';\n\nexport function resolveClientTransactEnvironment(input: {\n sourceTransactEnvironment?: StellarTransactEnvironment;\n auditPublicKeyHex?: string;\n state: StellarStateAdapter;\n}): StellarTransactEnvironment | undefined {\n const transactEnvironmentWithStatePorts = input.sourceTransactEnvironment\n ? attachPoolStatePorts(input.sourceTransactEnvironment, input.state)\n : undefined;\n const transactEnvironmentWithAudit =\n transactEnvironmentWithStatePorts && input.auditPublicKeyHex\n ? {\n ...transactEnvironmentWithStatePorts,\n auditPublicKey: parseAuditPublicKeyFromEnvHex(input.auditPublicKeyHex),\n }\n : transactEnvironmentWithStatePorts;\n if (!transactEnvironmentWithAudit) {\n return undefined;\n }\n return attachContractContext(transactEnvironmentWithAudit);\n}\n","import { PrivacyPoolSDK } from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport {\n configurePrivacyPoolService,\n createPrivacyPoolService,\n getPrivacyPoolService,\n} from '../pool/singleton.js';\nimport { createBrowserStellarTransactEngine } from './browser-stellar.js';\nimport type {\n StellarBrowserAssets,\n StellarOperationReceipt,\n StellarPreparedOperation,\n StellarTransactEngine,\n} from '../../types.js';\nimport type { StellarTransactEnvironment } from '../environment/types.js';\nimport { resolveZkConfigNonce } from '../environment/zk-config-nonce.js';\nimport {\n materializeSelectedZkCircuit,\n optionalZkArtifactBaseUrl,\n} from '../zk/circuit-config.js';\n\nasync function privacyPoolInitOptions(\n assets: StellarBrowserAssets,\n transactEnvironment?: StellarTransactEnvironment,\n): Promise<Parameters<typeof PrivacyPoolSDK.init>[0]> {\n if (!transactEnvironment) {\n return { wasmBinary: assets.sdkWasm };\n }\n const zkConfigNonce = resolveZkConfigNonce(transactEnvironment);\n const zkCircuits = await materializeSelectedZkCircuit(\n transactEnvironment.zkCircuits,\n zkConfigNonce,\n );\n return {\n wasmBinary: assets.sdkWasm,\n zkCircuits,\n zkConfigNonce,\n ...optionalZkArtifactBaseUrl(transactEnvironment.zkArtifactBaseUrl),\n };\n}\n\nexport async function createDefaultTransactEngine(\n assets: StellarBrowserAssets,\n transactEnvironment?: StellarTransactEnvironment,\n): Promise<StellarTransactEngine> {\n await PrivacyPoolSDK.init(await privacyPoolInitOptions(assets, transactEnvironment));\n\n if (transactEnvironment) {\n configurePrivacyPoolService(\n createPrivacyPoolService({\n assets,\n applicationId: transactEnvironment.network.applicationId,\n ...(transactEnvironment.auditPublicKey\n ? { auditPublicKey: transactEnvironment.auditPublicKey }\n : {}),\n ...(transactEnvironment.zkCircuits\n ? { zkCircuits: transactEnvironment.zkCircuits }\n : {}),\n ...(transactEnvironment.zkConfigNonce === undefined\n ? {}\n : { zkConfigNonce: transactEnvironment.zkConfigNonce }),\n ...optionalZkArtifactBaseUrl(transactEnvironment.zkArtifactBaseUrl),\n }),\n );\n return createBrowserStellarTransactEngine({\n environment: transactEnvironment,\n poolService: getPrivacyPoolService(),\n });\n }\n\n return {\n prepare: async (prepared) => prepared,\n submit: async (_prepared, signedPayload): Promise<StellarOperationReceipt> => ({\n operationId: signedPayload.operationId,\n confirmed: signedPayload.signed,\n }),\n };\n}\n\nexport function createStellarPolicyAdapterFromEnvironment(\n transactEnvironment: StellarTransactEnvironment,\n) {\n return {\n inspectOperation: async (\n _kind: StellarPreparedOperation['kind'],\n _intent: StellarPreparedOperation['intent'],\n ) => {\n await Promise.resolve(transactEnvironment.network.applicationId);\n },\n };\n}\n","import type { CoinData, DepositObject } from '@arcanetech/stellar-privacy-pool-zk-sdk';\n\nexport type AlignedDepositSlot = {\n deposit: DepositObject;\n commitment_hex: string;\n coin: CoinData;\n depositScalarHex: string;\n precommitementHex: string;\n};\n\nexport type KytApplicationIdHints = string[];\n\nexport type ProofResult = {\n proof_hex: string;\n public_hex: string;\n applicationIdsPlaintext: KytApplicationIdHints;\n ciphertext_hex?: string;\n output_note_ephemeral_scalars?: string[];\n};\n\nexport type ProofWithChange = ProofResult & {\n changeCoin?: {\n commitment_hex: string;\n coin: CoinData;\n depositScalarHex: string;\n precommitementHex: string;\n };\n};\n\nexport function ciphertextArtifactsFromProof(proof: {\n ciphertext_hex?: string;\n output_note_ephemeral_scalars?: string[];\n}): {\n ciphertextHex?: string;\n outputNoteEphemeralScalars?: string[];\n} {\n return {\n ...(proof.ciphertext_hex === undefined\n ? {}\n : { ciphertextHex: proof.ciphertext_hex }),\n ...(proof.output_note_ephemeral_scalars === undefined\n ? {}\n : {\n outputNoteEphemeralScalars: [...proof.output_note_ephemeral_scalars],\n }),\n };\n}\n","import type { StellarPreparedOperation } from '../../../types.js';\nimport { readPoolClientFactory } from '../../../contracts/contract-context.js';\nimport type { StellarTransactEnvironment } from '../../environment/types.js';\nimport type { PrivacyPoolService } from '../../pool/service.js';\nimport { ciphertextArtifactsFromProof } from '../../pool/proof-types.js';\nimport { buildPrivateRecordFromDeposit } from '../../private-address/record-coin.js';\nimport {\n enrichPreparedOperation,\n resolveTokenContractId,\n resolveWalletPublicKey,\n} from './shared.js';\n\nconst STROOPS_PER_UNIT = 10_000_000n;\n\nasync function createAlignedDepositWithProof(parameters: {\n prepared: StellarPreparedOperation;\n environment: StellarTransactEnvironment;\n poolService: PrivacyPoolService;\n walletPublicKey: string;\n tokenAddress: string;\n}) {\n const aligned = await parameters.poolService.createAlignedShieldCoinData({\n privateAddressStpl1: parameters.prepared.intent.to,\n amountStroops: parameters.prepared.intent.amount,\n tokenAddress: parameters.tokenAddress,\n });\n const poolClient = readPoolClientFactory(parameters.environment)({\n contractId: parameters.environment.network.poolContract,\n walletPublicKey: parameters.walletPublicKey,\n networkPassphrase: parameters.environment.network.networkPassphrase,\n sorobanRpcUrl: parameters.environment.network.rpcUrl,\n });\n const merkleTx = await poolClient.get_merkle_root();\n const proof = await parameters.poolService.prepareDepositTransactProof({\n privateAddressStpl1: parameters.prepared.intent.to,\n coin: aligned.coin,\n depositScalarHex: aligned.depositScalarHex,\n merkleRootBytes: merkleTx.result,\n tokenAddress: parameters.tokenAddress,\n });\n return { ...aligned, proof };\n}\n\nexport async function prepareDepositOperation(\n prepared: StellarPreparedOperation,\n environment: StellarTransactEnvironment,\n poolService: PrivacyPoolService,\n): Promise<StellarPreparedOperation> {\n const walletPublicKey = await resolveWalletPublicKey(environment, prepared);\n const tokenAddress = await resolveTokenContractId(environment, prepared.intent.asset);\n const depositProof = await createAlignedDepositWithProof({\n prepared,\n environment,\n poolService,\n walletPublicKey,\n tokenAddress,\n });\n const outputRecord = buildPrivateRecordFromDeposit({\n owner: walletPublicKey,\n privateAddress: prepared.intent.to,\n assetId: prepared.intent.asset,\n poolContract: environment.network.poolContract,\n amount: prepared.intent.amount,\n amountDisplay: Number(prepared.intent.amount) / Number(STROOPS_PER_UNIT),\n commitmentHex: depositProof.commitment_hex,\n coin: depositProof.coin,\n depositScalarHex: depositProof.depositScalarHex,\n precommitementHex: depositProof.precommitementHex,\n status: 'pending',\n });\n return enrichPreparedOperation(prepared, [outputRecord], {\n proofHex: depositProof.proof.proof_hex,\n publicHex: depositProof.proof.public_hex,\n ...ciphertextArtifactsFromProof(depositProof.proof),\n applicationIdsPlaintext: depositProof.proof.applicationIdsPlaintext,\n tokenAddress,\n depositScalarHex: depositProof.depositScalarHex,\n precommitementHex: depositProof.precommitementHex,\n commitmentHex: depositProof.commitment_hex,\n walletPublicKey,\n });\n}\n","import { StrKey } from '@stellar/stellar-sdk';\nimport type { StellarPreparedOperation } from '../../../types.js';\nimport type { StellarTransactEnvironment } from '../../environment/types.js';\n\nfunction isStellarAccountRecipient(prepared: StellarPreparedOperation): boolean {\n return (\n prepared.kind === 'transfer' &&\n StrKey.isValidEd25519PublicKey(prepared.intent.to.trim())\n );\n}\n\nexport async function stampEscrowSendArtifacts(\n prepared: StellarPreparedOperation,\n environment: StellarTransactEnvironment,\n walletPublicKey: string,\n): Promise<\n Pick<\n NonNullable<StellarPreparedOperation['transactArtifacts']>,\n 'escrowSend' | 'spendSource'\n >\n> {\n if (!isStellarAccountRecipient(prepared)) {\n return {};\n }\n if (!environment.resolveTransferRecipientAtExecute) {\n return {};\n }\n const recipient = await environment.resolveTransferRecipientAtExecute({\n recipientStellarAddress: prepared.intent.to.trim(),\n walletPublicKey,\n });\n if (!recipient.escrowSend) {\n return {};\n }\n return { escrowSend: true, spendSource: 'escrow' };\n}\n\nexport async function resolveTransferRecipientForExecute(\n prepared: StellarPreparedOperation,\n environment: StellarTransactEnvironment,\n walletPublicKey: string,\n) {\n if (!isStellarAccountRecipient(prepared)) {\n return {\n recipientPrivateAddressStpl1: prepared.intent.to.trim(),\n };\n }\n if (!environment.resolveTransferRecipientAtExecute) {\n throw new Error('Transfer recipient resolver is not configured.');\n }\n return environment.resolveTransferRecipientAtExecute({\n recipientStellarAddress: prepared.intent.to.trim(),\n walletPublicKey,\n });\n}\n","import type { StellarPreparedOperation } from '../../../types.js';\nimport type { StellarTransactEnvironment } from '../../environment/types.js';\nimport { resolveTokenContractId, resolveWalletPublicKey } from './shared.js';\nimport { stampEscrowSendArtifacts } from './transfer-helpers.js';\n\nasync function prepareSpendOperation(\n prepared: StellarPreparedOperation,\n environment: StellarTransactEnvironment,\n): Promise<StellarPreparedOperation> {\n const walletPublicKey = await resolveWalletPublicKey(environment, prepared);\n const tokenAddress = await resolveTokenContractId(environment, prepared.intent.asset);\n return {\n ...prepared,\n transactArtifacts: {\n ...prepared.transactArtifacts,\n tokenAddress,\n walletPublicKey,\n executeFinalizeRequired: true,\n ...(await stampEscrowSendArtifacts(prepared, environment, walletPublicKey)),\n },\n };\n}\n\nexport const prepareTransferOperation = prepareSpendOperation;\nexport const prepareWithdrawOperation = prepareSpendOperation;\n","export type EphemeralPointHex = { xHex: string; yHex: string };\n\nconst HEX_64_RE = /^[\\da-f]{64}$/iu;\n\nfunction normalizeCoordinate(value: string): string {\n const hex = value.trim().replace(/^0x/iu, '').toLowerCase();\n if (!HEX_64_RE.test(hex)) {\n throw new Error('Ephemeral key coordinate must be a 32-byte hex string.');\n }\n return hex;\n}\n\nexport function serializeEphemeralKeyString(point: EphemeralPointHex): string {\n return `${normalizeCoordinate(point.xHex)}:${normalizeCoordinate(point.yHex)}`;\n}\n","import type { StellarTransactArtifacts } from '../../types.js';\n\nexport function isEscrowSweepSpend(\n artifacts: StellarTransactArtifacts | undefined,\n): boolean {\n return artifacts?.spendSource === 'escrow' && artifacts.escrowSend !== true;\n}\n\nexport function requireEscrowSpendScalarHex(\n artifacts: StellarTransactArtifacts | undefined,\n): string {\n if (!isEscrowSweepSpend(artifacts)) {\n throw new Error('Escrow sweep requires spendSource escrow.');\n }\n const hex = artifacts?.escrowSpendScalarHex?.trim();\n if (!hex) {\n throw new Error('Escrow sweep requires the reconstructed note owner scalar.');\n }\n return hex;\n}\n\nexport function nullifierCheckSpendScalarHex(\n artifacts: StellarTransactArtifacts | undefined,\n): string | undefined {\n if (!isEscrowSweepSpend(artifacts)) {\n return undefined;\n }\n return requireEscrowSpendScalarHex(artifacts);\n}\n","import type { StellarPreparedOperation, StellarPrivateRecord } from '../../types.js';\nimport type { StellarTransactEnvironment } from '../environment/types.js';\nimport { readLeafEphemeralHex } from '../merkle/fetch-contract.js';\nimport {\n findCommitmentLeafIndex,\n requireCoinNoteFromRecord,\n} from '../private-address/record-coin.js';\nimport {\n ensureSenderPrivKeyScalarHex,\n loadMerkleState,\n resolveTokenContractId,\n} from './prepare/shared.js';\nimport {\n isEscrowSweepSpend,\n requireEscrowSpendScalarHex,\n} from '../escrow/require-escrow-spend-scalar.js';\nimport { readTransferFromPrivateAddress } from '../transfer-source/index.js';\n\nasync function resolveSenderPrivKeyScalarHex(input: {\n prepared: StellarPreparedOperation;\n environment: StellarTransactEnvironment;\n walletPublicKey: string;\n}): Promise<string> {\n if (isEscrowSweepSpend(input.prepared.transactArtifacts)) {\n return requireEscrowSpendScalarHex(input.prepared.transactArtifacts);\n }\n if (input.prepared.kind !== 'transfer' && input.prepared.kind !== 'withdraw') {\n throw new Error('Spend execution requires a transfer or withdraw intent.');\n }\n return ensureSenderPrivKeyScalarHex(\n input.environment,\n readTransferFromPrivateAddress(input.prepared.intent.from),\n input.walletPublicKey,\n );\n}\n\nexport async function buildSpendProofContextAtExecute(input: {\n prepared: StellarPreparedOperation;\n environment: StellarTransactEnvironment;\n recipientPrivateAddressStpl1: string;\n}) {\n const [primaryRecord] = input.prepared.consumedRecords;\n if (!primaryRecord) {\n throw new Error('Spend execution requires at least one private record.');\n }\n const walletPublicKey = primaryRecord.owner.trim();\n if (!walletPublicKey) {\n throw new Error('Spend execution record owner is missing.');\n }\n const senderPrivKeyScalarHex = await resolveSenderPrivKeyScalarHex({\n prepared: input.prepared,\n environment: input.environment,\n walletPublicKey,\n });\n const tokenAddress = await resolveTokenContractId(\n input.environment,\n input.prepared.intent.asset,\n );\n const coin = requireCoinNoteFromRecord(primaryRecord);\n const { commitments } = await loadMerkleState(input.environment, walletPublicKey);\n const leafIndex = findCommitmentLeafIndex(commitments, coin.commitment);\n if (leafIndex < 0) {\n throw new Error('Coin commitment not found in on-chain Merkle state.');\n }\n const ephemeral = await readLeafEphemeralHex({\n poolContractId: input.environment.network.poolContract,\n walletPublicKey,\n leafIndex,\n transactEnvironment: input.environment,\n ...(input.environment.leafEphemeral\n ? { leafEphemeral: input.environment.leafEphemeral }\n : {}),\n });\n return {\n walletPublicKey,\n tokenAddress,\n coin,\n commitments,\n ephemeral,\n senderPrivKeyScalarHex,\n recipientPrivateAddressStpl1: input.recipientPrivateAddressStpl1,\n };\n}\n\nexport async function readCoinEphemeralForRecord(input: {\n record: StellarPrivateRecord;\n environment: StellarTransactEnvironment;\n walletPublicKey: string;\n commitments: string[];\n}) {\n const coin = requireCoinNoteFromRecord(input.record);\n const leafIndex = findCommitmentLeafIndex(input.commitments, coin.commitment);\n if (leafIndex < 0) {\n throw new Error('Coin commitment not found in on-chain Merkle state.');\n }\n const ephemeral = await readLeafEphemeralHex({\n poolContractId: input.environment.network.poolContract,\n walletPublicKey: input.walletPublicKey,\n leafIndex,\n transactEnvironment: input.environment,\n ...(input.environment.leafEphemeral\n ? { leafEphemeral: input.environment.leafEphemeral }\n : {}),\n });\n return { coin, ephemeral };\n}\n","import type { CoinData, DepositSlot } from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport { getPrivacyPoolService } from '../../pool/singleton.js';\nimport { ZERO_STROOPS } from './helpers.js';\nimport type { AlignedDepositSlot } from '../../pool/proof-types.js';\nimport type {\n TransferEscrowClaimantLimbs,\n TransferEscrowSend,\n} from '../../environment/types.js';\n\ntype ChangeCoin = {\n commitment_hex: string;\n coin: CoinData;\n depositScalarHex: string;\n precommitementHex: string;\n};\n\ntype EscrowSlotInput = {\n escrowSend?: TransferEscrowSend;\n escrowClaimantLimbs?: TransferEscrowClaimantLimbs;\n};\n\nfunction escrowOutputFields(input: EscrowSlotInput) {\n if (!input.escrowSend) {\n return {};\n }\n return {\n escrowNonce: input.escrowSend.nonceDecimal,\n recipientHi: input.escrowSend.recipientHi,\n recipientLo: input.escrowSend.recipientLo,\n };\n}\n\nfunction paddingDepositPair(recipientDeposit: DepositSlot): [DepositSlot, DepositSlot] {\n return [recipientDeposit, 'dummy'];\n}\n\nasync function buildChangeDepositPair(parameters: {\n selfPrivateAddressStpl1ForChange: string;\n changeStroops: bigint;\n tokenAddress: string;\n recipientDeposit: DepositSlot;\n}): Promise<{ deposits: [DepositSlot, DepositSlot]; changeCoin: ChangeCoin }> {\n const changeSlot = await getPrivacyPoolService().buildAlignedDepositSlot({\n privateAddressStpl1: parameters.selfPrivateAddressStpl1ForChange.trim(),\n amountStroops: parameters.changeStroops,\n tokenAddress: parameters.tokenAddress,\n });\n return {\n deposits: [parameters.recipientDeposit, changeSlot.deposit],\n changeCoin: {\n commitment_hex: changeSlot.commitment_hex,\n coin: changeSlot.coin,\n depositScalarHex: changeSlot.depositScalarHex,\n precommitementHex: changeSlot.precommitementHex,\n },\n };\n}\n\nexport async function buildRecipientAndOptionalChangeDeposits(parameters: {\n recipientPrivateAddressStpl1: string;\n transferStroops: bigint;\n changeStroops: bigint;\n selfPrivateAddressStpl1ForChange: string | undefined;\n tokenAddress: string;\n escrowSend?: TransferEscrowSend;\n escrowClaimantLimbs?: TransferEscrowClaimantLimbs;\n}): Promise<{\n recipientSlot: AlignedDepositSlot;\n deposits: [DepositSlot, DepositSlot];\n changeCoin?: ChangeCoin;\n}> {\n const escrow: EscrowSlotInput = {\n ...(parameters.escrowSend ? { escrowSend: parameters.escrowSend } : {}),\n ...(parameters.escrowClaimantLimbs\n ? { escrowClaimantLimbs: parameters.escrowClaimantLimbs }\n : {}),\n };\n const recipientPrivateAddress = parameters.recipientPrivateAddressStpl1.trim();\n const recipientSlot = await getPrivacyPoolService().buildAlignedDepositSlot({\n privateAddressStpl1: recipientPrivateAddress,\n amountStroops: parameters.transferStroops,\n tokenAddress: parameters.tokenAddress,\n ...escrowOutputFields(escrow),\n });\n if (parameters.changeStroops <= ZERO_STROOPS) {\n return {\n recipientSlot,\n deposits: paddingDepositPair(recipientSlot.deposit),\n };\n }\n const changeResult = await buildChangeDepositPair({\n selfPrivateAddressStpl1ForChange: parameters.selfPrivateAddressStpl1ForChange!,\n changeStroops: parameters.changeStroops,\n tokenAddress: parameters.tokenAddress,\n recipientDeposit: recipientSlot.deposit,\n });\n return {\n recipientSlot,\n deposits: changeResult.deposits,\n changeCoin: changeResult.changeCoin,\n };\n}\n","import type { CoinData, DepositSlot } from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport { buildRecipientAndOptionalChangeDeposits } from './recipient-change-deposits.js';\nimport { withTokenAddressPublicInputs } from '../../proofs/transaction-input.js';\nimport { privKeyScalarDecimalFromRecipientScalarHex } from '../../encoding/priv-key-scalar-from-recipient-hex.js';\nimport { recipientPublicKeysDecimalFromPrivateAddress } from '../../private-address/codec.js';\nimport type {\n TransferEscrowClaimantLimbs,\n TransferEscrowSend,\n} from '../../environment/types.js';\n\nexport type GeneratedOutputCoin = {\n commitment_hex: string;\n coin: CoinData;\n depositScalarHex: string;\n precommitementHex: string;\n};\n\nexport function generatedOutputCoinFromSlot(\n slot: GeneratedOutputCoin,\n): GeneratedOutputCoin {\n return {\n commitment_hex: slot.commitment_hex,\n coin: slot.coin,\n depositScalarHex: slot.depositScalarHex,\n precommitementHex: slot.precommitementHex,\n };\n}\n\nfunction publicEscrowRecipientLimbs(parameters: {\n escrowSend?: TransferEscrowSend;\n escrowClaimantLimbs?: TransferEscrowClaimantLimbs;\n}): { escrowRecipientHi: string; escrowRecipientLo: string } | undefined {\n const limbs = parameters.escrowClaimantLimbs;\n if (!limbs) {\n return undefined;\n }\n return {\n escrowRecipientHi: limbs.recipientHi,\n escrowRecipientLo: limbs.recipientLo,\n };\n}\n\nexport function sweepWithdrawStamp(parameters: {\n escrowSend?: TransferEscrowSend;\n escrowClaimantLimbs?: TransferEscrowClaimantLimbs;\n}):\n | {\n escrowRecipientHi: string;\n escrowRecipientLo: string;\n escrowNonce?: string;\n }\n | undefined {\n const publicLimbs = publicEscrowRecipientLimbs(parameters);\n if (!publicLimbs) {\n return undefined;\n }\n return {\n ...publicLimbs,\n ...(parameters.escrowClaimantLimbs?.nonceDecimal\n ? { escrowNonce: parameters.escrowClaimantLimbs.nonceDecimal }\n : {}),\n };\n}\n\nexport function stampWithdrawEscrowLimbs<\n T extends { recipientStellar: [string, string]; escrowNonce?: string },\n>(\n withdrawObject: T,\n limbs?: {\n escrowRecipientHi: string;\n escrowRecipientLo: string;\n escrowNonce?: string;\n },\n): T {\n if (!limbs) {\n return withdrawObject;\n }\n return {\n ...withdrawObject,\n recipientStellar: [limbs.escrowRecipientHi, limbs.escrowRecipientLo],\n ...(limbs.escrowNonce ? { escrowNonce: limbs.escrowNonce } : {}),\n };\n}\n\nfunction sweepOutputOwnerFields(parameters: {\n recipientPrivateAddressStpl1: string;\n escrowClaimantLimbs?: TransferEscrowClaimantLimbs;\n}): { sweepOutputOwnerPubX: string; sweepOutputOwnerPubY: string } | undefined {\n if (!parameters.escrowClaimantLimbs) {\n return undefined;\n }\n const [sweepOutputOwnerPubX, sweepOutputOwnerPubY] =\n recipientPublicKeysDecimalFromPrivateAddress(\n parameters.recipientPrivateAddressStpl1,\n ) as [string, string];\n return { sweepOutputOwnerPubX, sweepOutputOwnerPubY };\n}\n\nasync function buildTransferDepositsAndPublicInput(parameters: {\n recipientPrivateAddressStpl1: string;\n transferStroops: bigint;\n changeStroops: bigint;\n selfPrivateAddressStpl1ForChange: string | undefined;\n tokenAddress: string;\n stateRoot: string;\n privKeyScalar: string;\n escrowSend?: TransferEscrowSend;\n escrowClaimantLimbs?: TransferEscrowClaimantLimbs;\n}): Promise<{\n recipientSlot: GeneratedOutputCoin;\n deposits: [DepositSlot, DepositSlot];\n changeCoin?: GeneratedOutputCoin;\n publicInput: ReturnType<typeof withTokenAddressPublicInputs>;\n}> {\n const { recipientSlot, deposits, changeCoin } =\n await buildRecipientAndOptionalChangeDeposits({\n recipientPrivateAddressStpl1: parameters.recipientPrivateAddressStpl1,\n transferStroops: parameters.transferStroops,\n changeStroops: parameters.changeStroops,\n selfPrivateAddressStpl1ForChange: parameters.selfPrivateAddressStpl1ForChange,\n tokenAddress: parameters.tokenAddress,\n ...(parameters.escrowSend ? { escrowSend: parameters.escrowSend } : {}),\n ...(parameters.escrowClaimantLimbs\n ? { escrowClaimantLimbs: parameters.escrowClaimantLimbs }\n : {}),\n });\n const publicInput = withTokenAddressPublicInputs(\n {\n stateRoot: parameters.stateRoot,\n privKeyScalar: parameters.privKeyScalar,\n ...publicEscrowRecipientLimbs(parameters),\n ...sweepOutputOwnerFields(parameters),\n },\n parameters.tokenAddress,\n );\n return {\n recipientSlot,\n deposits,\n ...(changeCoin ? { changeCoin } : {}),\n publicInput,\n };\n}\n\nexport async function buildSenderTransferDepositsAndPublicInput(parameters: {\n senderPrivKeyScalarHex: string;\n recipientPrivateAddressStpl1: string;\n transferStroops: bigint;\n changeStroops: bigint;\n selfPrivateAddressStpl1ForChange: string | undefined;\n tokenAddress: string;\n stateRoot: string;\n escrowSend?: TransferEscrowSend;\n escrowClaimantLimbs?: TransferEscrowClaimantLimbs;\n}): ReturnType<typeof buildTransferDepositsAndPublicInput> {\n return buildTransferDepositsAndPublicInput({\n recipientPrivateAddressStpl1: parameters.recipientPrivateAddressStpl1,\n transferStroops: parameters.transferStroops,\n changeStroops: parameters.changeStroops,\n selfPrivateAddressStpl1ForChange: parameters.selfPrivateAddressStpl1ForChange,\n tokenAddress: parameters.tokenAddress,\n stateRoot: parameters.stateRoot,\n privKeyScalar: privKeyScalarDecimalFromRecipientScalarHex(\n parameters.senderPrivKeyScalarHex,\n ),\n ...(parameters.escrowSend ? { escrowSend: parameters.escrowSend } : {}),\n ...(parameters.escrowClaimantLimbs\n ? { escrowClaimantLimbs: parameters.escrowClaimantLimbs }\n : {}),\n });\n}\n","import type { CoinData, StateFile } from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport { getPrivacyPoolService } from '../../pool/singleton.js';\nimport { buildZeroPublicLegs } from '../../proofs/transaction-input.js';\nimport {\n buildApplicationIdHints,\n padDepositSlotsToLayout,\n padPublicLegsToLayout,\n padWithdrawSlotsToLayout,\n} from '../../zk/slots.js';\nimport {\n changeStroopsAfterDualTransfer,\n dualWithdrawLegsWithSharedRoot,\n requireChangeRecipientWhenPartial,\n} from '../../proofs/confidential/helpers.js';\nimport { buildPoolTransactionAuditParameters } from '../../audit/parameters.js';\nimport type { KytApplicationIdHints } from '../../pool/proof-types.js';\nimport {\n buildSenderTransferDepositsAndPublicInput,\n generatedOutputCoinFromSlot,\n stampWithdrawEscrowLimbs,\n sweepWithdrawStamp,\n type GeneratedOutputCoin,\n} from './shared.js';\nimport { privKeyScalarDecimalFromRecipientScalarHex } from '../../encoding/priv-key-scalar-from-recipient-hex.js';\nimport type {\n TransferEscrowClaimantLimbs,\n TransferEscrowSend,\n} from '../../environment/types.js';\n\ntype PrepareConfidentialTransferProofDualParameters = {\n coinA: CoinData;\n coinB: CoinData;\n state: StateFile;\n senderPrivKeyScalarHex: string;\n ephemeralAKey: string;\n ephemeralBKey: string;\n transferStroops: bigint;\n recipientPrivateAddressStpl1: string;\n selfPrivateAddressStpl1ForChange: string | undefined;\n tokenAddress: string;\n escrowSend?: TransferEscrowSend;\n escrowClaimantLimbs?: TransferEscrowClaimantLimbs;\n};\n\ntype PrepareConfidentialTransferProofDualResult = {\n proof_hex: string;\n public_hex: string;\n ciphertext_hex?: string;\n output_note_ephemeral_scalars?: string[];\n applicationIdsPlaintext: KytApplicationIdHints;\n recipientCoin: GeneratedOutputCoin;\n changeCoin?: GeneratedOutputCoin;\n};\n\nfunction confidentialEscrowFields(\n parameters: PrepareConfidentialTransferProofDualParameters,\n) {\n return {\n ...(parameters.escrowSend ? { escrowSend: parameters.escrowSend } : {}),\n ...(parameters.escrowClaimantLimbs\n ? { escrowClaimantLimbs: parameters.escrowClaimantLimbs }\n : {}),\n };\n}\n\nfunction stampDualWithdrawLegs(\n legs: ReturnType<typeof dualWithdrawLegsWithSharedRoot>,\n parameters: PrepareConfidentialTransferProofDualParameters,\n) {\n const escrowLimbs = sweepWithdrawStamp(confidentialEscrowFields(parameters));\n return {\n legA: {\n ...legs.legA,\n withdrawObject: stampWithdrawEscrowLimbs(legs.legA.withdrawObject, escrowLimbs),\n },\n legB: {\n ...legs.legB,\n withdrawObject: stampWithdrawEscrowLimbs(legs.legB.withdrawObject, escrowLimbs),\n },\n };\n}\n\nfunction buildDualTransferApplicationIds(\n sdk: Awaited<\n ReturnType<ReturnType<typeof getPrivacyPoolService>['getInitializedSdk']>\n >,\n applicationId: string,\n changeCoin?: GeneratedOutputCoin,\n): KytApplicationIdHints {\n return buildApplicationIdHints({\n sdk,\n inputIds: [applicationId, applicationId],\n outputIds: [applicationId, changeCoin ? applicationId : '0'],\n });\n}\n\nasync function proveDualConfidentialTransfer(parameters: {\n sdk: Awaited<\n ReturnType<ReturnType<typeof getPrivacyPoolService>['getInitializedSdk']>\n >;\n publicInput: Awaited<\n ReturnType<typeof buildSenderTransferDepositsAndPublicInput>\n >['publicInput'];\n legA: Awaited<ReturnType<typeof dualWithdrawLegsWithSharedRoot>>['legA'];\n legB: Awaited<ReturnType<typeof dualWithdrawLegsWithSharedRoot>>['legB'];\n deposits: Awaited<\n ReturnType<typeof buildSenderTransferDepositsAndPublicInput>\n >['deposits'];\n applicationId: string;\n auditPublicKey?: [string, string];\n}) {\n const audit = buildPoolTransactionAuditParameters({\n applicationId: parameters.applicationId,\n nAuditSlots: parameters.sdk.getLayout().nAuditSlots,\n ...(parameters.auditPublicKey ? { auditPublicKey: parameters.auditPublicKey } : {}),\n });\n return parameters.sdk.proveTransaction(\n parameters.publicInput as unknown as Parameters<\n typeof parameters.sdk.proveTransaction\n >[0],\n padPublicLegsToLayout(parameters.sdk, buildZeroPublicLegs()),\n padWithdrawSlotsToLayout(parameters.sdk, [\n parameters.legA.withdrawObject,\n parameters.legB.withdrawObject,\n ]),\n padDepositSlotsToLayout(parameters.sdk, parameters.deposits),\n audit,\n );\n}\n\nasync function buildDualTransferProofContext(\n parameters: PrepareConfidentialTransferProofDualParameters,\n applicationId: string,\n sdk: Awaited<\n ReturnType<ReturnType<typeof getPrivacyPoolService>['getInitializedSdk']>\n >,\n) {\n const totalNotes = BigInt(parameters.coinA.value) + BigInt(parameters.coinB.value);\n const changeStroops = changeStroopsAfterDualTransfer(\n parameters.transferStroops,\n totalNotes,\n );\n requireChangeRecipientWhenPartial(\n changeStroops,\n parameters.selfPrivateAddressStpl1ForChange,\n );\n const privKeyScalar = privKeyScalarDecimalFromRecipientScalarHex(\n parameters.senderPrivKeyScalarHex,\n );\n const ownerPubHex = sdk.ecdhEphemeralPublicKeyFromScalarHex(\n parameters.senderPrivKeyScalarHex,\n );\n const { legA, legB } = stampDualWithdrawLegs(\n dualWithdrawLegsWithSharedRoot({\n sdk,\n coinA: parameters.coinA,\n coinB: parameters.coinB,\n state: parameters.state,\n ownerPubHex,\n privKeyScalar,\n applicationId,\n }),\n parameters,\n );\n const transferInputs = await buildSenderTransferDepositsAndPublicInput({\n senderPrivKeyScalarHex: parameters.senderPrivKeyScalarHex,\n recipientPrivateAddressStpl1: parameters.recipientPrivateAddressStpl1,\n transferStroops: parameters.transferStroops,\n changeStroops,\n selfPrivateAddressStpl1ForChange: parameters.selfPrivateAddressStpl1ForChange,\n tokenAddress: parameters.tokenAddress,\n stateRoot: legA.witness.stateRoot,\n ...confidentialEscrowFields(parameters),\n });\n return { legA, legB, applicationId, ...transferInputs };\n}\n\nexport async function prepareConfidentialTransferProofDual(\n parameters: PrepareConfidentialTransferProofDualParameters,\n): Promise<PrepareConfidentialTransferProofDualResult> {\n const poolService = getPrivacyPoolService();\n const sdk = await poolService.getInitializedSdk();\n const applicationId = poolService.getApplicationId();\n const { legA, legB, recipientSlot, deposits, changeCoin, publicInput } =\n await buildDualTransferProofContext(parameters, applicationId, sdk);\n const auditPublicKey = poolService.getAuditPublicKey();\n const proof = await (auditPublicKey\n ? proveDualConfidentialTransfer({\n sdk,\n publicInput,\n legA,\n legB,\n deposits,\n applicationId,\n auditPublicKey,\n })\n : proveDualConfidentialTransfer({\n sdk,\n publicInput,\n legA,\n legB,\n deposits,\n applicationId,\n }));\n return {\n ...proof,\n applicationIdsPlaintext: buildDualTransferApplicationIds(\n sdk,\n applicationId,\n changeCoin,\n ),\n recipientCoin: generatedOutputCoinFromSlot(recipientSlot),\n ...(changeCoin ? { changeCoin } : {}),\n };\n}\n","import type { CoinData, StateFile } from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport { getPrivacyPoolService } from '../../pool/singleton.js';\nimport { buildZeroPublicLegs } from '../../proofs/transaction-input.js';\nimport {\n buildApplicationIdHints,\n padDepositSlotsToLayout,\n padPublicLegsToLayout,\n padWithdrawSlotsToLayout,\n} from '../../zk/slots.js';\nimport {\n MIN_CONFIDENTIAL_TRANSFER_STROOPS,\n requireChangeRecipientWhenPartial,\n withdrawWitnessForCoin,\n} from '../../proofs/confidential/helpers.js';\nimport { privKeyScalarDecimalFromRecipientScalarHex } from '../../encoding/priv-key-scalar-from-recipient-hex.js';\nimport { buildPoolTransactionAuditParameters } from '../../audit/parameters.js';\nimport type { KytApplicationIdHints } from '../../pool/proof-types.js';\nimport {\n buildSenderTransferDepositsAndPublicInput,\n generatedOutputCoinFromSlot,\n stampWithdrawEscrowLimbs,\n sweepWithdrawStamp,\n type GeneratedOutputCoin,\n} from './shared.js';\nimport type {\n TransferEscrowClaimantLimbs,\n TransferEscrowSend,\n} from '../../environment/types.js';\ntype PrepareConfidentialTransferProofParameters = {\n coin: CoinData;\n state: StateFile;\n senderPrivKeyScalarHex: string;\n depositorEphemeralKey: string;\n transferStroops: bigint;\n recipientPrivateAddressStpl1: string;\n selfPrivateAddressStpl1ForChange: string | undefined;\n tokenAddress: string;\n escrowSend?: TransferEscrowSend;\n escrowClaimantLimbs?: TransferEscrowClaimantLimbs;\n};\n\ntype PrepareConfidentialTransferProofResult = {\n proof_hex: string;\n public_hex: string;\n ciphertext_hex?: string;\n output_note_ephemeral_scalars?: string[];\n applicationIdsPlaintext: KytApplicationIdHints;\n recipientCoin: GeneratedOutputCoin;\n changeCoin?: GeneratedOutputCoin;\n};\ntype SenderTransferBuild = Awaited<\n ReturnType<typeof buildSenderTransferDepositsAndPublicInput>\n>;\ntype InitializedPrivacySdk = Awaited<\n ReturnType<ReturnType<typeof getPrivacyPoolService>['getInitializedSdk']>\n>;\n\nfunction validateSingleCoinTransferAmounts(\n transferStroops: bigint,\n noteStroops: bigint,\n selfPrivateAddressStpl1ForChange: string | undefined,\n): bigint {\n if (transferStroops < MIN_CONFIDENTIAL_TRANSFER_STROOPS) {\n throw new Error('Transfer amount must be positive');\n }\n if (transferStroops > noteStroops) {\n throw new Error('Transfer amount exceeds note value');\n }\n const changeStroops = noteStroops - transferStroops;\n requireChangeRecipientWhenPartial(changeStroops, selfPrivateAddressStpl1ForChange);\n return changeStroops;\n}\n\nfunction buildSingleTransferApplicationIds(\n sdk: InitializedPrivacySdk,\n applicationId: string,\n changeCoin?: GeneratedOutputCoin,\n): KytApplicationIdHints {\n return buildApplicationIdHints({\n sdk,\n inputIds: [applicationId],\n outputIds: [applicationId, changeCoin ? applicationId : '0'],\n });\n}\n\nfunction buildTransferAuditParameters(parameters: {\n poolService: ReturnType<typeof getPrivacyPoolService>;\n applicationId: string;\n nAuditSlots: number;\n}) {\n const auditPublicKey = parameters.poolService.getAuditPublicKey();\n return buildPoolTransactionAuditParameters({\n applicationId: parameters.applicationId,\n nAuditSlots: parameters.nAuditSlots,\n ...(auditPublicKey ? { auditPublicKey } : {}),\n });\n}\n\nasync function proveTransaction(parameters: {\n sdk: InitializedPrivacySdk;\n publicInput: SenderTransferBuild['publicInput'];\n withdrawObject: ReturnType<typeof withdrawWitnessForCoin>['withdrawObject'];\n deposits: SenderTransferBuild['deposits'];\n audit: ReturnType<typeof buildTransferAuditParameters>;\n}) {\n return parameters.sdk.proveTransaction(\n parameters.publicInput as unknown as Parameters<\n typeof parameters.sdk.proveTransaction\n >[0],\n padPublicLegsToLayout(parameters.sdk, buildZeroPublicLegs()),\n padWithdrawSlotsToLayout(parameters.sdk, [parameters.withdrawObject]),\n padDepositSlotsToLayout(parameters.sdk, parameters.deposits),\n parameters.audit,\n );\n}\n\ntype TransferProofInputs = {\n witness: ReturnType<typeof withdrawWitnessForCoin>['witness'];\n withdrawObject: ReturnType<typeof withdrawWitnessForCoin>['withdrawObject'];\n recipientSlot: SenderTransferBuild['recipientSlot'];\n deposits: SenderTransferBuild['deposits'];\n changeCoin: SenderTransferBuild['changeCoin'];\n publicInput: SenderTransferBuild['publicInput'];\n};\n\nfunction confidentialEscrowFields(input: PrepareConfidentialTransferProofParameters) {\n return {\n ...(input.escrowSend ? { escrowSend: input.escrowSend } : {}),\n ...(input.escrowClaimantLimbs\n ? { escrowClaimantLimbs: input.escrowClaimantLimbs }\n : {}),\n };\n}\n\nasync function buildTransferProofInputs(parameters: {\n sdk: InitializedPrivacySdk;\n applicationId: string;\n input: PrepareConfidentialTransferProofParameters;\n noteStroops: bigint;\n}): Promise<TransferProofInputs> {\n const changeStroops = validateSingleCoinTransferAmounts(\n parameters.input.transferStroops,\n parameters.noteStroops,\n parameters.input.selfPrivateAddressStpl1ForChange,\n );\n const privKeyScalar = privKeyScalarDecimalFromRecipientScalarHex(\n parameters.input.senderPrivKeyScalarHex,\n );\n const { witness, withdrawObject } = withdrawWitnessForCoin({\n sdk: parameters.sdk,\n coin: parameters.input.coin,\n state: parameters.input.state,\n ownerPubHex: parameters.sdk.ecdhEphemeralPublicKeyFromScalarHex(\n parameters.input.senderPrivKeyScalarHex,\n ),\n privKeyScalar,\n applicationId: parameters.applicationId,\n });\n const stampedWithdraw = stampWithdrawEscrowLimbs(\n withdrawObject,\n sweepWithdrawStamp(confidentialEscrowFields(parameters.input)),\n );\n const { recipientSlot, deposits, changeCoin, publicInput } =\n await buildSenderTransferDepositsAndPublicInput({\n senderPrivKeyScalarHex: parameters.input.senderPrivKeyScalarHex,\n recipientPrivateAddressStpl1: parameters.input.recipientPrivateAddressStpl1,\n transferStroops: parameters.input.transferStroops,\n changeStroops,\n selfPrivateAddressStpl1ForChange:\n parameters.input.selfPrivateAddressStpl1ForChange,\n tokenAddress: parameters.input.tokenAddress,\n stateRoot: witness.stateRoot,\n ...confidentialEscrowFields(parameters.input),\n });\n return {\n witness,\n withdrawObject: stampedWithdraw,\n recipientSlot,\n deposits,\n changeCoin,\n publicInput,\n };\n}\n\nexport async function prepareConfidentialTransferProof(\n parameters: PrepareConfidentialTransferProofParameters,\n): Promise<PrepareConfidentialTransferProofResult> {\n const poolService = getPrivacyPoolService();\n const sdk = await poolService.getInitializedSdk();\n const applicationId = poolService.getApplicationId();\n const noteStroops = BigInt(parameters.coin.value);\n const { withdrawObject, recipientSlot, deposits, changeCoin, publicInput } =\n await buildTransferProofInputs({\n sdk,\n applicationId,\n input: parameters,\n noteStroops,\n });\n const audit = buildTransferAuditParameters({\n poolService,\n applicationId,\n nAuditSlots: sdk.getLayout().nAuditSlots,\n });\n const proof = await proveTransaction({\n sdk,\n publicInput,\n withdrawObject,\n deposits,\n audit,\n });\n return {\n ...proof,\n applicationIdsPlaintext: buildSingleTransferApplicationIds(\n sdk,\n applicationId,\n changeCoin,\n ),\n recipientCoin: generatedOutputCoinFromSlot(recipientSlot),\n ...(changeCoin ? { changeCoin } : {}),\n };\n}\n\nexport { prepareConfidentialTransferProofDual } from '../../proofs/confidential/dual.js';\n","import type { StellarPreparedOperation } from '../../types.js';\nimport type {\n StellarTransactEnvironment,\n TransferEscrowClaimantLimbs,\n TransferEscrowSend,\n} from '../environment/types.js';\nimport {\n prepareConfidentialTransferProof,\n prepareConfidentialTransferProofDual,\n} from '../proofs/confidential/single.js';\nimport {\n buildSpendProofContextAtExecute,\n readCoinEphemeralForRecord,\n} from './spend-proof-context.js';\nimport { serializeEphemeralKeyString } from '../encoding/ephemeral-key.js';\nimport { readTransferFromPrivateAddress } from '../transfer-source/index.js';\n\nfunction readChangeRecipient(\n input: { prepared: StellarPreparedOperation },\n changeStroops: bigint,\n): string | undefined {\n if (changeStroops <= 0n || input.prepared.kind !== 'transfer') {\n return undefined;\n }\n const from = input.prepared.intent.from;\n return readTransferFromPrivateAddress(from);\n}\n\nfunction proofEscrowFields(input: {\n escrowSend?: TransferEscrowSend;\n escrowClaimantLimbs?: TransferEscrowClaimantLimbs;\n}) {\n return {\n ...(input.escrowSend ? { escrowSend: input.escrowSend } : {}),\n ...(input.escrowClaimantLimbs\n ? { escrowClaimantLimbs: input.escrowClaimantLimbs }\n : {}),\n };\n}\n\nasync function buildSingleTransferProofAtExecute(input: {\n prepared: StellarPreparedOperation;\n environment: StellarTransactEnvironment;\n recipientPrivateAddressStpl1: string;\n escrowSend?: TransferEscrowSend;\n escrowClaimantLimbs?: TransferEscrowClaimantLimbs;\n}) {\n const context = await buildSpendProofContextAtExecute(input);\n const changeStroops = BigInt(context.coin.value) - input.prepared.intent.amount;\n const proof = await prepareConfidentialTransferProof({\n coin: context.coin,\n state: { commitments: context.commitments },\n senderPrivKeyScalarHex: context.senderPrivKeyScalarHex,\n depositorEphemeralKey: serializeEphemeralKeyString({\n xHex: context.ephemeral.xHex,\n yHex: context.ephemeral.yHex,\n }),\n transferStroops: input.prepared.intent.amount,\n recipientPrivateAddressStpl1: context.recipientPrivateAddressStpl1,\n selfPrivateAddressStpl1ForChange: readChangeRecipient(input, changeStroops),\n tokenAddress: context.tokenAddress,\n ...proofEscrowFields(input),\n });\n return { context, proof };\n}\n\nasync function buildDualTransferProofAtExecute(input: {\n prepared: StellarPreparedOperation;\n environment: StellarTransactEnvironment;\n recipientPrivateAddressStpl1: string;\n escrowSend?: TransferEscrowSend;\n escrowClaimantLimbs?: TransferEscrowClaimantLimbs;\n}) {\n const [primaryRecord, secondaryRecord] = input.prepared.consumedRecords;\n if (!primaryRecord || !secondaryRecord) {\n throw new Error('Dual transfer execution requires two private input records.');\n }\n const context = await buildSpendProofContextAtExecute(input);\n const secondary = await readCoinEphemeralForRecord({\n record: secondaryRecord,\n environment: input.environment,\n walletPublicKey: context.walletPublicKey,\n commitments: context.commitments,\n });\n const totalNotes = BigInt(context.coin.value) + BigInt(secondary.coin.value);\n const changeStroops = totalNotes - input.prepared.intent.amount;\n const proof = await prepareConfidentialTransferProofDual({\n coinA: context.coin,\n coinB: secondary.coin,\n state: { commitments: context.commitments },\n senderPrivKeyScalarHex: context.senderPrivKeyScalarHex,\n ephemeralAKey: serializeEphemeralKeyString({\n xHex: context.ephemeral.xHex,\n yHex: context.ephemeral.yHex,\n }),\n ephemeralBKey: serializeEphemeralKeyString({\n xHex: secondary.ephemeral.xHex,\n yHex: secondary.ephemeral.yHex,\n }),\n transferStroops: input.prepared.intent.amount,\n recipientPrivateAddressStpl1: context.recipientPrivateAddressStpl1,\n selfPrivateAddressStpl1ForChange: readChangeRecipient(input, changeStroops),\n tokenAddress: context.tokenAddress,\n ...proofEscrowFields(input),\n });\n return { context, proof };\n}\n\nexport async function buildTransferProofAtExecute(input: {\n prepared: StellarPreparedOperation;\n environment: StellarTransactEnvironment;\n recipientPrivateAddressStpl1: string;\n escrowSend?: TransferEscrowSend;\n escrowClaimantLimbs?: TransferEscrowClaimantLimbs;\n}) {\n const recordCount = input.prepared.consumedRecords.length;\n if (recordCount === 1) {\n return buildSingleTransferProofAtExecute(input);\n }\n if (recordCount === 2) {\n return buildDualTransferProofAtExecute(input);\n }\n throw new Error('Confidential transfer execution supports at most two input notes.');\n}\n","import type { StellarPreparedOperation } from '../../types.js';\nimport type { StellarTransactEnvironment } from '../environment/types.js';\nimport { resolveTransferRecipientForExecute } from './prepare/transfer-helpers.js';\nimport { verifyPrivateRecordsNullifiersBeforeExecute } from '../transfer-source/index.js';\nimport { nullifierCheckSpendScalarHex } from '../escrow/require-escrow-spend-scalar.js';\nimport { buildTransferProofAtExecute } from './transfer-proof-at-execute.js';\nimport type { buildSpendProofContextAtExecute } from './spend-proof-context.js';\nimport type { prepareConfidentialTransferProof } from '../proofs/confidential/single.js';\nimport { ciphertextArtifactsFromProof } from '../pool/proof-types.js';\n\nfunction stampEscrowOutputRecords(input: {\n prepared: StellarPreparedOperation;\n proof: Awaited<ReturnType<typeof prepareConfidentialTransferProof>>;\n walletPublicKey: string;\n escrowSendPrivateAddress?: string;\n}): void {\n if (input.escrowSendPrivateAddress) {\n const [recipientRecord, ...rest] = input.prepared.outputRecords;\n if (recipientRecord) {\n input.prepared.outputRecords = [\n {\n ...recipientRecord,\n privateAddress: input.escrowSendPrivateAddress,\n },\n ...rest,\n ];\n }\n }\n seedEscrowSweepOutputsFromProof({\n prepared: input.prepared,\n proof: input.proof,\n walletPublicKey: input.walletPublicKey,\n });\n enrichTransferOutputRecords(input.prepared, input.proof);\n}\n\nfunction seedEscrowSweepOutputsFromProof(input: {\n prepared: StellarPreparedOperation;\n proof: Awaited<ReturnType<typeof prepareConfidentialTransferProof>>;\n walletPublicKey: string;\n}): void {\n if (\n input.prepared.transactArtifacts?.spendSource !== 'escrow' ||\n input.prepared.outputRecords.length > 0\n ) {\n return;\n }\n input.prepared.outputRecords = [\n {\n id: input.proof.recipientCoin.commitment_hex,\n owner: input.walletPublicKey,\n privateAddress: input.prepared.intent.to,\n asset: input.prepared.intent.asset,\n amount: input.prepared.intent.amount,\n consumed: false,\n },\n ];\n}\n\nfunction enrichTransferOutputRecords(\n prepared: StellarPreparedOperation,\n proof: Awaited<ReturnType<typeof prepareConfidentialTransferProof>>,\n): void {\n if (prepared.outputRecords.length === 0) {\n return;\n }\n const generatedOutputCoins = [\n proof.recipientCoin,\n ...(proof.changeCoin ? [proof.changeCoin] : []),\n ];\n prepared.outputRecords = prepared.outputRecords.map((record, index) => {\n const generatedCoin = generatedOutputCoins.at(index);\n if (!generatedCoin) {\n return record;\n }\n return {\n ...record,\n id: generatedCoin.commitment_hex,\n commitmentHex: generatedCoin.commitment_hex,\n coinNote: generatedCoin.coin,\n depositScalarHex: generatedCoin.depositScalarHex,\n precommitementHex: generatedCoin.precommitementHex,\n };\n });\n}\n\nfunction escrowSpendArtifacts(input: {\n escrowSend?: boolean;\n escrowRecipient?: string;\n escrowSpendScalarHex?: string;\n preparedSpendSource?: NonNullable<\n StellarPreparedOperation['transactArtifacts']\n >['spendSource'];\n escrowClaimantLimbs?: NonNullable<\n StellarPreparedOperation['transactArtifacts']\n >['escrowClaimantLimbs'];\n}) {\n if (input.escrowSend) {\n return {\n escrowSend: true as const,\n spendSource: 'escrow' as const,\n ...(input.escrowRecipient ? { escrowRecipient: input.escrowRecipient } : {}),\n };\n }\n if (input.preparedSpendSource === 'escrow') {\n return {\n spendSource: 'escrow' as const,\n ...(input.escrowRecipient ? { escrowRecipient: input.escrowRecipient } : {}),\n ...(input.escrowSpendScalarHex\n ? { escrowSpendScalarHex: input.escrowSpendScalarHex }\n : {}),\n ...(input.escrowClaimantLimbs\n ? { escrowClaimantLimbs: input.escrowClaimantLimbs }\n : {}),\n };\n }\n return {};\n}\n\nfunction buildTransferFinalizeArtifacts(input: {\n proof: Awaited<ReturnType<typeof prepareConfidentialTransferProof>>;\n context: Awaited<ReturnType<typeof buildSpendProofContextAtExecute>>;\n escrowSend?: boolean;\n escrowRecipient?: string;\n escrowSpendScalarHex?: string;\n preparedSpendSource?: NonNullable<\n StellarPreparedOperation['transactArtifacts']\n >['spendSource'];\n escrowClaimantLimbs?: NonNullable<\n StellarPreparedOperation['transactArtifacts']\n >['escrowClaimantLimbs'];\n}) {\n return {\n proofHex: input.proof.proof_hex,\n publicHex: input.proof.public_hex,\n ...ciphertextArtifactsFromProof(input.proof),\n applicationIdsPlaintext: input.proof.applicationIdsPlaintext,\n tokenAddress: input.context.tokenAddress,\n walletPublicKey: input.context.walletPublicKey,\n executeFinalizeRequired: false,\n ...escrowSpendArtifacts(input),\n };\n}\n\nasync function runTransferFinalizeSteps(input: {\n prepared: StellarPreparedOperation;\n environment: StellarTransactEnvironment;\n walletPublicKey: string;\n}) {\n const recipient = await resolveTransferRecipientForExecute(\n input.prepared,\n input.environment,\n input.walletPublicKey,\n );\n const spendScalarHex = nullifierCheckSpendScalarHex(input.prepared.transactArtifacts);\n await verifyPrivateRecordsNullifiersBeforeExecute({\n records: input.prepared.consumedRecords,\n environment: input.environment,\n walletPublicKey: input.walletPublicKey,\n ...(spendScalarHex ? { spendScalarHex } : {}),\n });\n const { context, proof } = await buildTransferProofAtExecute({\n prepared: input.prepared,\n environment: input.environment,\n recipientPrivateAddressStpl1: recipient.recipientPrivateAddressStpl1,\n ...(recipient.escrowSend ? { escrowSend: recipient.escrowSend } : {}),\n ...(input.prepared.transactArtifacts?.escrowClaimantLimbs\n ? {\n escrowClaimantLimbs: input.prepared.transactArtifacts.escrowClaimantLimbs,\n }\n : {}),\n });\n stampEscrowOutputRecords({\n prepared: input.prepared,\n proof,\n walletPublicKey: input.walletPublicKey,\n ...(recipient.escrowSend\n ? { escrowSendPrivateAddress: recipient.recipientPrivateAddressStpl1 }\n : {}),\n });\n return buildTransferFinalizeArtifacts({\n proof,\n context,\n ...sweepFinalizeStamp(input.prepared, recipient),\n });\n}\n\nfunction sweepArtifactStamp(artifacts: StellarPreparedOperation['transactArtifacts']) {\n return {\n ...(artifacts?.escrowSpendScalarHex\n ? { escrowSpendScalarHex: artifacts.escrowSpendScalarHex }\n : {}),\n ...(artifacts?.spendSource ? { preparedSpendSource: artifacts.spendSource } : {}),\n ...(artifacts?.escrowClaimantLimbs\n ? { escrowClaimantLimbs: artifacts.escrowClaimantLimbs }\n : {}),\n };\n}\n\nfunction sweepFinalizeStamp(\n prepared: StellarPreparedOperation,\n recipient: Awaited<ReturnType<typeof resolveTransferRecipientForExecute>>,\n) {\n const artifacts = prepared.transactArtifacts;\n const fromSend = recipient.escrowSend?.recipientStellarAddress?.trim();\n const escrowRecipient = fromSend || artifacts?.escrowRecipient?.trim();\n return {\n ...(recipient.escrowSend ? { escrowSend: true as const } : {}),\n ...(escrowRecipient ? { escrowRecipient } : {}),\n ...sweepArtifactStamp(artifacts),\n };\n}\n\nexport async function finalizeTransferAtExecute(\n prepared: StellarPreparedOperation,\n environment: StellarTransactEnvironment,\n) {\n const [primaryRecord] = prepared.consumedRecords;\n if (!primaryRecord?.owner.trim()) {\n throw new Error('Transfer execution record owner is missing.');\n }\n const walletPublicKey = primaryRecord.owner.trim();\n return runTransferFinalizeSteps({ prepared, environment, walletPublicKey });\n}\n","import type { WithdrawIntent } from '@arcanetech/privacy-sdk-core';\nimport type {\n StellarAddress,\n StellarAssetId,\n StellarPreparedOperation,\n} from '../../types.js';\nimport type { StellarTransactEnvironment } from '../environment/types.js';\nimport {\n ciphertextArtifactsFromProof,\n type ProofWithChange,\n} from '../pool/proof-types.js';\nimport type { PrivacyPoolService } from '../pool/service.js';\nimport { serializeEphemeralKeyString } from '../encoding/ephemeral-key.js';\nimport {\n buildSpendProofContextAtExecute,\n readCoinEphemeralForRecord,\n} from './spend-proof-context.js';\nimport { finalizeTransferAtExecute } from './transfer-finalize.js';\n\nfunction enrichWithdrawOutputRecords(\n prepared: StellarPreparedOperation,\n proof: ProofWithChange,\n): void {\n if (!proof.changeCoin || prepared.outputRecords.length === 0) {\n return;\n }\n const changeCoin = proof.changeCoin;\n prepared.outputRecords = prepared.outputRecords.map((record) => ({\n ...record,\n id: changeCoin.commitment_hex,\n commitmentHex: changeCoin.commitment_hex,\n coinNote: changeCoin.coin,\n depositScalarHex: changeCoin.depositScalarHex,\n precommitementHex: changeCoin.precommitementHex,\n }));\n}\n\nfunction buildWithdrawFinalizeArtifacts(\n proof: ProofWithChange,\n context: Awaited<ReturnType<typeof buildSpendProofContextAtExecute>>,\n) {\n return {\n proofHex: proof.proof_hex,\n publicHex: proof.public_hex,\n ...ciphertextArtifactsFromProof(proof),\n applicationIdsPlaintext: proof.applicationIdsPlaintext,\n tokenAddress: context.tokenAddress,\n walletPublicKey: context.walletPublicKey,\n executeFinalizeRequired: false,\n };\n}\n\nasync function finalizeSingleWithdrawAtExecute(\n prepared: StellarPreparedOperation,\n environment: StellarTransactEnvironment,\n poolService: PrivacyPoolService,\n withdrawFrom: string,\n) {\n const context = await buildSpendProofContextAtExecute({\n prepared,\n environment,\n recipientPrivateAddressStpl1: withdrawFrom,\n });\n const changeStroops = BigInt(context.coin.value) - prepared.intent.amount;\n const proof = await poolService.prepareWithdrawTransactProof({\n coin: context.coin,\n state: { commitments: context.commitments },\n destinationStellarAddress: prepared.intent.to,\n privKeyScalarHex: context.senderPrivKeyScalarHex,\n depositorEphemeralKey: serializeEphemeralKeyString({\n xHex: context.ephemeral.xHex,\n yHex: context.ephemeral.yHex,\n }),\n withdrawAmountStroops: prepared.intent.amount,\n changePrivateAddressStpl1: changeStroops > 0n ? withdrawFrom : undefined,\n tokenAddress: context.tokenAddress,\n });\n enrichWithdrawOutputRecords(prepared, proof);\n return buildWithdrawFinalizeArtifacts(proof, context);\n}\n\nasync function finalizeDualWithdrawAtExecute(\n prepared: StellarPreparedOperation,\n environment: StellarTransactEnvironment,\n poolService: PrivacyPoolService,\n withdrawFrom: string,\n) {\n const [, secondaryRecord] = prepared.consumedRecords;\n if (!secondaryRecord) {\n throw new Error('Dual withdraw execution requires two private input records.');\n }\n const context = await buildSpendProofContextAtExecute({\n prepared,\n environment,\n recipientPrivateAddressStpl1: withdrawFrom,\n });\n const secondary = await readCoinEphemeralForRecord({\n record: secondaryRecord,\n environment,\n walletPublicKey: context.walletPublicKey,\n commitments: context.commitments,\n });\n const totalNotes = BigInt(context.coin.value) + BigInt(secondary.coin.value);\n const changeStroops = totalNotes - prepared.intent.amount;\n const proof = await poolService.prepareWithdrawTransactProofDual({\n coinA: context.coin,\n coinB: secondary.coin,\n state: { commitments: context.commitments },\n destinationStellarAddress: prepared.intent.to,\n privKeyScalarHex: context.senderPrivKeyScalarHex,\n depositorEphemeralAKey: serializeEphemeralKeyString({\n xHex: context.ephemeral.xHex,\n yHex: context.ephemeral.yHex,\n }),\n depositorEphemeralBKey: serializeEphemeralKeyString({\n xHex: secondary.ephemeral.xHex,\n yHex: secondary.ephemeral.yHex,\n }),\n withdrawAmountStroops: prepared.intent.amount,\n changePrivateAddressStpl1: changeStroops > 0n ? withdrawFrom : undefined,\n tokenAddress: context.tokenAddress,\n });\n enrichWithdrawOutputRecords(prepared, proof);\n return buildWithdrawFinalizeArtifacts(proof, context);\n}\n\nasync function finalizeWithdrawAtExecute(\n prepared: StellarPreparedOperation,\n environment: StellarTransactEnvironment,\n poolService: PrivacyPoolService,\n) {\n if (prepared.kind !== 'withdraw') {\n throw new Error('Withdraw finalize requires a withdraw operation.');\n }\n const withdrawIntent = prepared.intent as WithdrawIntent<\n StellarAddress,\n StellarAssetId,\n bigint\n >;\n const withdrawFrom = withdrawIntent.from;\n const recordCount = prepared.consumedRecords.length;\n if (recordCount === 1) {\n return finalizeSingleWithdrawAtExecute(\n prepared,\n environment,\n poolService,\n withdrawFrom,\n );\n }\n if (recordCount === 2) {\n return finalizeDualWithdrawAtExecute(\n prepared,\n environment,\n poolService,\n withdrawFrom,\n );\n }\n throw new Error('Confidential withdraw execution supports at most two input notes.');\n}\n\nexport async function finalizeSpendOperationAtExecute(\n prepared: StellarPreparedOperation,\n environment: StellarTransactEnvironment,\n poolService: PrivacyPoolService,\n): Promise<StellarPreparedOperation> {\n if (prepared.kind !== 'transfer' && prepared.kind !== 'withdraw') {\n return prepared;\n }\n if (prepared.transactArtifacts?.proofHex) {\n return prepared;\n }\n const artifacts =\n prepared.kind === 'transfer'\n ? await finalizeTransferAtExecute(prepared, environment)\n : await finalizeWithdrawAtExecute(prepared, environment, poolService);\n return {\n ...prepared,\n transactArtifacts: {\n ...prepared.transactArtifacts,\n ...artifacts,\n },\n };\n}\n","import {\n layoutForKnownNonce,\n zeroBindingTagsInPublicSignals,\n type InspectKytPassageApproved,\n} from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport { resolvePoolApplicationId } from '../../audit/parameters.js';\nimport type { KytApplicationIdHints } from '../../pool/proof-types.js';\nimport { KytInspectError, parseKytReasonCode } from '../inspect-error.js';\nimport type { StellarTransactEnvironment } from '../../environment/types.js';\nimport { fetchCurrentLedger } from './poll.js';\nimport { registerKytPassage } from './submit.js';\nimport { resolveZkConfigNonce } from '../../environment/zk-config-nonce.js';\nimport { uniformApplicationIdHints } from '../../zk/slots.js';\n\ntype KytInspectResponse =\n | InspectKytPassageApproved\n | {\n status: 'rejected' | 'needs_review';\n reasonCode?: string;\n decisionId?: string;\n };\n\nexport interface DecryptedKytAuditSlot {\n slot: number;\n decryptOk: boolean;\n auditTagValid: boolean;\n noteAuditPublicKey?: [string, string];\n expectedAuditPublicKey?: [string, string];\n plaintext?: string[];\n}\n\nexport interface RequestKytPassageForPoolInteractionInput {\n owner: string;\n poolContract: string;\n proofHex: string;\n publicHex: string;\n ciphertextHex?: string;\n outputNoteEphemeralScalars?: string[];\n decryptedAuditSlots?: DecryptedKytAuditSlot[];\n applicationIdsPlaintext?: KytApplicationIdHints;\n networkPassphrase: string;\n sorobanRpcUrl: string;\n transactEnvironment: StellarTransactEnvironment;\n}\n\nfunction buildApplicationIdHints(\n applicationId: string,\n nAuditSlots: number,\n): KytApplicationIdHints {\n return uniformApplicationIdHints(applicationId, nAuditSlots);\n}\n\nfunction buildNonce(): string {\n return globalThis.crypto?.randomUUID?.() ?? `${Date.now()}`;\n}\n\nfunction kytJsonReplacer(_key: string, value: unknown): unknown {\n if (typeof value === 'bigint') {\n return value.toString();\n }\n return value;\n}\n\nasync function parseInspectResponse(response: Response): Promise<KytInspectResponse> {\n const body = (await response.json()) as KytInspectResponse;\n if (!response.ok) {\n throw new Error(`KYT inspect failed: ${JSON.stringify(body)}`);\n }\n return body;\n}\n\nfunction throwKytInspectRejected(\n body: Exclude<KytInspectResponse, InspectKytPassageApproved>,\n): never {\n const reasonCode = body.reasonCode ?? body.status;\n const parsed = parseKytReasonCode(reasonCode);\n throw new KytInspectError({\n message: reasonCode,\n reasonCode,\n ...(body.decisionId ? { decisionId: body.decisionId } : {}),\n ...(parsed.address ? { detailAddress: parsed.address } : {}),\n });\n}\n\nfunction inspectRequestHeaders(inspectAuthorization?: string): Record<string, string> {\n const token = inspectAuthorization?.trim();\n return {\n 'content-type': 'application/json',\n ...(token ? { authorization: `Bearer ${token}` } : {}),\n };\n}\n\nasync function postKytInspect(\n input: RequestKytPassageForPoolInteractionInput,\n applicationIdsPlaintext: KytApplicationIdHints,\n zkConfigNonce: bigint,\n currentLedger: number,\n): Promise<KytInspectResponse> {\n const response = await fetch(\n `${input.transactEnvironment.kyt.apiBaseUrl}/kyt/passages/inspect`,\n {\n method: 'POST',\n headers: inspectRequestHeaders(\n input.transactEnvironment.kyt.inspectAuthorization,\n ),\n body: JSON.stringify(\n {\n owner: input.owner,\n poolContract: input.poolContract,\n kytRegistry: input.transactEnvironment.kyt.kytPassageRegistryContract,\n proofBytes: input.proofHex,\n publicSignalsBytes: zeroBindingTagsInPublicSignals(\n input.publicHex,\n zkConfigNonce,\n ).toString('hex'),\n applicationIdsPlaintext,\n decryptedAuditSlots: input.decryptedAuditSlots,\n nonce: buildNonce(),\n zkConfigNonce,\n currentLedger,\n ...(input.ciphertextHex ? { ciphertextBytes: input.ciphertextHex } : {}),\n ...(input.outputNoteEphemeralScalars\n ? { outputNoteEphemeralScalars: input.outputNoteEphemeralScalars }\n : {}),\n },\n kytJsonReplacer,\n ),\n },\n );\n return parseInspectResponse(response);\n}\n\nexport async function requestKytPassageForPoolInteraction(\n input: RequestKytPassageForPoolInteractionInput,\n): Promise<InspectKytPassageApproved> {\n const applicationId = resolvePoolApplicationId(\n input.transactEnvironment.network.applicationId,\n );\n const zkConfigNonce = resolveZkConfigNonce(input.transactEnvironment);\n const applicationIdsPlaintext =\n input.applicationIdsPlaintext ??\n buildApplicationIdHints(\n applicationId,\n layoutForKnownNonce(zkConfigNonce).nAuditSlots,\n );\n const currentLedger = await fetchCurrentLedger(input.sorobanRpcUrl);\n const body = await postKytInspect(\n input,\n applicationIdsPlaintext,\n zkConfigNonce,\n currentLedger,\n );\n if (body.status !== 'approved') {\n throwKytInspectRejected(body);\n }\n if (input.transactEnvironment.kyt.registerPassageOnChain) {\n await registerKytPassage({\n approval: body,\n owner: input.owner,\n networkPassphrase: input.networkPassphrase,\n sorobanRpcUrl: input.sorobanRpcUrl,\n transactEnvironment: input.transactEnvironment,\n });\n }\n return body;\n}\n","export class KytInspectError extends Error {\n readonly reasonCode: string;\n readonly decisionId?: string;\n readonly detailAddress?: string;\n\n constructor(parameters: {\n message: string;\n reasonCode: string;\n decisionId?: string;\n detailAddress?: string;\n }) {\n super(parameters.message);\n this.name = 'KytInspectError';\n this.reasonCode = parameters.reasonCode;\n if (parameters.decisionId !== undefined) {\n this.decisionId = parameters.decisionId;\n }\n if (parameters.detailAddress !== undefined) {\n this.detailAddress = parameters.detailAddress;\n }\n }\n}\n\nexport function parseKytReasonCode(reasonCode: string): {\n code: string;\n address?: string;\n} {\n const separatorIndex = reasonCode.indexOf(':');\n if (separatorIndex === -1) {\n return { code: reasonCode };\n }\n return {\n code: reasonCode.slice(0, separatorIndex),\n address: reasonCode.slice(separatorIndex + 1),\n };\n}\n","import { rpc } from '@stellar/stellar-sdk';\n\nconst KYT_REGISTER_MAX_POLLS = 60;\nconst KYT_REGISTER_POLL_INTERVAL_MS = 1000;\n\ntype LatestLedgerRpcResponse = {\n result?: {\n sequence?: number | string;\n latestLedger?: number | string;\n };\n error?: {\n message?: string;\n };\n};\n\nfunction parseLedgerSequence(value: number | string | undefined): number | undefined {\n if (typeof value === 'number' && Number.isSafeInteger(value) && value >= 0) {\n return value;\n }\n if (typeof value === 'string' && value.trim().length > 0) {\n const parsed = Number(value);\n if (Number.isSafeInteger(parsed) && parsed >= 0) {\n return parsed;\n }\n }\n return undefined;\n}\n\nexport async function fetchCurrentLedger(sorobanRpcUrl: string): Promise<number> {\n const response = await fetch(sorobanRpcUrl, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: 1,\n method: 'getLatestLedger',\n }),\n });\n const body = (await response.json()) as LatestLedgerRpcResponse;\n if (!response.ok || body.error) {\n const details = body.error?.message ?? response.statusText;\n throw new Error(`Failed to fetch current ledger from Soroban RPC: ${details}`);\n }\n const sequence =\n parseLedgerSequence(body.result?.sequence) ??\n parseLedgerSequence(body.result?.latestLedger);\n if (sequence === undefined) {\n throw new Error('Failed to fetch current ledger from Soroban RPC: invalid payload');\n }\n return sequence;\n}\n\nexport async function waitForKytRegistration(parameters: {\n server: rpc.Server;\n hash: string;\n}): Promise<void> {\n for (let attempt = 0; attempt < KYT_REGISTER_MAX_POLLS; attempt += 1) {\n const response = await parameters.server.getTransaction(parameters.hash);\n if (response.status === 'SUCCESS') {\n return;\n }\n if (response.status === 'FAILED') {\n throw new Error('KYT passage registration failed on-chain');\n }\n await new Promise((resolve) => {\n setTimeout(resolve, KYT_REGISTER_POLL_INTERVAL_MS);\n });\n }\n throw new Error('KYT passage registration was not confirmed in time');\n}\n","import type { InspectKytPassageApproved } from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport { Buffer } from 'buffer';\nimport { Operation, TransactionBuilder, rpc, xdr } from '@stellar/stellar-sdk';\nimport type { StellarTransactEnvironment } from '../../environment/types.js';\nimport { waitForKytRegistration } from './poll.js';\n\nconst KYT_REGISTER_FEE_STROOPS = '1000000';\nconst KYT_REGISTER_TIMEOUT_SECONDS = 300;\n\nfunction passageIdToScValue(passageId: string): xdr.ScVal {\n return xdr.ScVal.scvBytes(Buffer.from(passageId.replace(/^0x/, ''), 'hex'));\n}\n\nexport function approvalSignatureToBytes(signature: string): Buffer {\n const clean = signature.trim();\n return /^(0x)?[0-9a-fA-F]{128}$/.test(clean)\n ? Buffer.from(clean.replace(/^0x/i, ''), 'hex')\n : Buffer.from(clean, 'base64');\n}\n\nfunction signatureToScValue(signature: string): xdr.ScVal {\n const bytes = approvalSignatureToBytes(signature);\n return xdr.ScVal.scvBytes(bytes);\n}\n\nexport async function registerKytPassage(parameters: {\n approval: InspectKytPassageApproved;\n owner: string;\n networkPassphrase: string;\n sorobanRpcUrl: string;\n transactEnvironment: StellarTransactEnvironment;\n}): Promise<void> {\n const signTransaction = parameters.transactEnvironment.signTransaction;\n if (!signTransaction) {\n throw new Error(\n 'KYT passage registration requires a wallet signTransaction adapter.',\n );\n }\n const kytRegistry = parameters.transactEnvironment.kyt.kytPassageRegistryContract;\n const server = new rpc.Server(parameters.sorobanRpcUrl, { allowHttp: true });\n const sourceAccount = await server.getAccount(parameters.owner);\n const transaction = new TransactionBuilder(sourceAccount, {\n fee: KYT_REGISTER_FEE_STROOPS,\n networkPassphrase: parameters.networkPassphrase,\n })\n .addOperation(\n Operation.invokeContractFunction({\n contract: kytRegistry,\n function: 'register_passage',\n args: [\n passageIdToScValue(parameters.approval.passageId),\n xdr.ScVal.scvU32(parameters.approval.expiresAtLedger),\n signatureToScValue(parameters.approval.signature),\n ],\n }),\n )\n .setTimeout(KYT_REGISTER_TIMEOUT_SECONDS)\n .build();\n const preparedTransaction = await server.prepareTransaction(transaction);\n const { signedTxXdr } = await signTransaction({\n xdr: preparedTransaction.toXDR(),\n networkPassphrase: parameters.networkPassphrase,\n address: parameters.owner,\n });\n const signedTransaction = TransactionBuilder.fromXDR(\n signedTxXdr,\n parameters.networkPassphrase,\n );\n const result = await server.sendTransaction(signedTransaction);\n const status = String(result.status);\n if (status !== 'PENDING' && status !== 'SUCCESS') {\n throw new Error(`KYT passage registration submit failed: ${status}`);\n }\n await waitForKytRegistration({ server, hash: result.hash });\n}\n","import {\n Address,\n Operation,\n SorobanDataBuilder,\n TransactionBuilder,\n rpc,\n xdr,\n} from '@stellar/stellar-sdk';\nimport type { StellarSignTransaction } from '../../contracts/signing.js';\n\nconst ZK_CONFIG_TTL_THRESHOLD_LEDGERS = 100_000;\nconst ZK_CONFIG_TTL_EXTEND_TO_LEDGERS = 500_000;\nconst EXTEND_TTL_FEE_STROOPS = '1000000';\nconst EXTEND_TTL_TIMEOUT_SECONDS = 300;\nconst EXTEND_TTL_MAX_POLLS = 60;\nconst EXTEND_TTL_POLL_INTERVAL_MS = 1000;\n\nasync function waitForExtendFootprintTtlConfirmation(parameters: {\n server: rpc.Server;\n hash: string;\n}): Promise<void> {\n for (let attempt = 0; attempt < EXTEND_TTL_MAX_POLLS; attempt += 1) {\n const response = await parameters.server.getTransaction(parameters.hash);\n if (response.status === 'SUCCESS') {\n return;\n }\n if (response.status === 'FAILED') {\n throw new Error('ZK config TTL extension failed on-chain');\n }\n await new Promise((resolve) => {\n setTimeout(resolve, EXTEND_TTL_POLL_INTERVAL_MS);\n });\n }\n throw new Error('ZK config TTL extension was not confirmed in time');\n}\n\nfunction zkConfigLedgerKey(contractId: string, nonce: bigint): xdr.LedgerKey {\n const configKeyScValue = xdr.ScVal.scvVec([\n xdr.ScVal.scvSymbol('Config'),\n xdr.ScVal.scvU64(xdr.Uint64.fromString(nonce.toString())),\n ]);\n return xdr.LedgerKey.contractData(\n new xdr.LedgerKeyContractData({\n contract: new Address(contractId).toScAddress(),\n key: configKeyScValue,\n durability: xdr.ContractDataDurability.persistent(),\n }),\n );\n}\n\nasync function needsTtlExtension(parameters: {\n server: rpc.Server;\n ledgerKey: xdr.LedgerKey;\n}): Promise<boolean> {\n const [entriesResponse, latestLedger] = await Promise.all([\n parameters.server.getLedgerEntries(parameters.ledgerKey),\n parameters.server.getLatestLedger(),\n ]);\n const entry = entriesResponse.entries.at(0);\n if (!entry || entry.liveUntilLedgerSeq === undefined) {\n return false;\n }\n const remainingLedgers = entry.liveUntilLedgerSeq - latestLedger.sequence;\n return remainingLedgers < ZK_CONFIG_TTL_THRESHOLD_LEDGERS;\n}\n\nasync function submitExtendFootprintTtlTransaction(parameters: {\n server: rpc.Server;\n ledgerKey: xdr.LedgerKey;\n networkPassphrase: string;\n sourcePublicKey: string;\n signTransaction: StellarSignTransaction;\n}): Promise<void> {\n const sourceAccount = await parameters.server.getAccount(parameters.sourcePublicKey);\n const transaction = new TransactionBuilder(sourceAccount, {\n fee: EXTEND_TTL_FEE_STROOPS,\n networkPassphrase: parameters.networkPassphrase,\n })\n .addOperation(\n Operation.extendFootprintTtl({ extendTo: ZK_CONFIG_TTL_EXTEND_TO_LEDGERS }),\n )\n .setSorobanData(\n new SorobanDataBuilder().setReadOnly([parameters.ledgerKey]).build(),\n )\n .setTimeout(EXTEND_TTL_TIMEOUT_SECONDS)\n .build();\n const preparedTransaction = await parameters.server.prepareTransaction(transaction);\n const { signedTxXdr } = await parameters.signTransaction({\n xdr: preparedTransaction.toXDR(),\n networkPassphrase: parameters.networkPassphrase,\n address: parameters.sourcePublicKey,\n });\n const signedTransaction = TransactionBuilder.fromXDR(\n signedTxXdr,\n parameters.networkPassphrase,\n );\n const result = await parameters.server.sendTransaction(signedTransaction);\n const status = String(result.status);\n if (status !== 'PENDING' && status !== 'SUCCESS') {\n throw new Error(`ZK config TTL extension submit failed: ${status}`);\n }\n await waitForExtendFootprintTtlConfirmation({\n server: parameters.server,\n hash: result.hash,\n });\n}\n\n/**\n * Checks the remaining TTL of the pool's per-nonce `ZkConfig` persistent\n * ledger entry and, if it is below the extend threshold, submits a\n * standalone `extendFootprintTtl` transaction to bump it before the main\n * `transact` call is sent. No-ops when the entry does not exist yet (it\n * will be created and TTL-bumped by `add_zk_config` instead) or when no\n * `signTransaction` adapter is configured.\n */\nexport async function extendZkConfigTtlIfNeeded(parameters: {\n sorobanRpcUrl: string;\n networkPassphrase: string;\n contractId: string;\n nonce: bigint;\n sourcePublicKey: string;\n signTransaction: StellarSignTransaction | undefined;\n}): Promise<void> {\n if (!parameters.signTransaction) {\n return;\n }\n const server = new rpc.Server(parameters.sorobanRpcUrl, { allowHttp: true });\n const ledgerKey = zkConfigLedgerKey(parameters.contractId, parameters.nonce);\n if (!(await needsTtlExtension({ server, ledgerKey }))) {\n return;\n }\n await submitExtendFootprintTtlTransaction({\n server,\n ledgerKey,\n networkPassphrase: parameters.networkPassphrase,\n sourcePublicKey: parameters.sourcePublicKey,\n signTransaction: parameters.signTransaction,\n });\n}\n","import { approvalSignatureToBytes } from '../kyt/passage-inspect.js';\nimport { runTtlPreflight } from './ttl-preflight.js';\nimport { extendZkConfigTtlIfNeeded } from './zk-config-ttl.js';\nimport type { PoolTransactClient } from '../pool/types.js';\nimport type { InspectKytPassageApproved } from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport type { StellarTransactEnvironment } from '../environment/types.js';\nimport { Buffer } from 'buffer';\n\nexport async function submitPoolTransact(parameters: {\n contractClient: PoolTransactClient;\n contractId: string;\n from: string;\n nonce: bigint;\n proofHex: string;\n publicHex: string;\n ciphertextHex?: string;\n approval: InspectKytPassageApproved;\n networkPassphrase: string;\n sorobanRpcUrl: string;\n transactEnvironment: StellarTransactEnvironment;\n}): Promise<string> {\n await extendZkConfigTtlIfNeeded({\n sorobanRpcUrl: parameters.sorobanRpcUrl,\n networkPassphrase: parameters.networkPassphrase,\n contractId: parameters.contractId,\n nonce: parameters.nonce,\n sourcePublicKey: parameters.from,\n signTransaction: parameters.transactEnvironment.signTransaction,\n });\n const assembledTransaction = await parameters.contractClient.transact({\n from: parameters.from,\n nonce: parameters.nonce,\n proof_bytes: Buffer.from(parameters.proofHex.replace(/^0x/iu, ''), 'hex'),\n pub_signals_bytes: Buffer.from(parameters.publicHex.replace(/^0x/iu, ''), 'hex'),\n ciphertext_bytes: Buffer.from(\n (parameters.ciphertextHex ?? '').replace(/^0x/iu, ''),\n 'hex',\n ),\n kyt_authorization: {\n expiration_ledger: parameters.approval.expiresAtLedger,\n signature: approvalSignatureToBytes(parameters.approval.signature),\n },\n });\n await runTtlPreflight(assembledTransaction);\n const sentTransaction = await assembledTransaction.signAndSend();\n const transactionHash = sentTransaction.sendTransactionResponse?.hash ?? '';\n if (!transactionHash) {\n throw new Error('Transaction failed');\n }\n return transactionHash;\n}\n","import { readPoolClientFactory } from '../../contracts/contract-context.js';\nimport { requestKytPassageForPoolInteraction } from '../kyt/passage-inspect.js';\nimport type { KytApplicationIdHints } from '../pool/proof-types.js';\nimport { submitPoolTransact } from './pool-transact.js';\nimport { resolveZkConfigNonce } from '../environment/zk-config-nonce.js';\nimport type { StellarTransactEnvironment } from '../environment/types.js';\n\nexport interface SubmitSorobanConfidentialTransferInput {\n contractId: string;\n walletPublicKey: string;\n proofHex: string;\n publicHex: string;\n ciphertextHex?: string;\n outputNoteEphemeralScalars?: string[];\n applicationIdsPlaintext?: KytApplicationIdHints;\n networkPassphrase: string;\n sorobanRpcUrl: string;\n transactEnvironment: StellarTransactEnvironment;\n}\n\nexport async function submitSorobanConfidentialTransfer(\n input: SubmitSorobanConfidentialTransferInput,\n): Promise<string> {\n const poolClient = readPoolClientFactory(input.transactEnvironment)({\n contractId: input.contractId,\n walletPublicKey: input.walletPublicKey,\n networkPassphrase: input.networkPassphrase,\n sorobanRpcUrl: input.sorobanRpcUrl,\n });\n const approval = await requestKytPassageForPoolInteraction({\n owner: input.walletPublicKey,\n poolContract: input.contractId,\n proofHex: input.proofHex,\n publicHex: input.publicHex,\n ...(input.ciphertextHex ? { ciphertextHex: input.ciphertextHex } : {}),\n ...(input.outputNoteEphemeralScalars\n ? { outputNoteEphemeralScalars: input.outputNoteEphemeralScalars }\n : {}),\n ...(input.applicationIdsPlaintext\n ? { applicationIdsPlaintext: input.applicationIdsPlaintext }\n : {}),\n networkPassphrase: input.networkPassphrase,\n sorobanRpcUrl: input.sorobanRpcUrl,\n transactEnvironment: input.transactEnvironment,\n });\n return submitPoolTransact({\n contractClient: poolClient,\n contractId: input.contractId,\n from: input.walletPublicKey,\n nonce: resolveZkConfigNonce(input.transactEnvironment),\n proofHex: input.proofHex,\n publicHex: input.publicHex,\n ...(input.ciphertextHex ? { ciphertextHex: input.ciphertextHex } : {}),\n approval,\n networkPassphrase: input.networkPassphrase,\n sorobanRpcUrl: input.sorobanRpcUrl,\n transactEnvironment: input.transactEnvironment,\n });\n}\n","import type { StellarPreparedOperation } from '../../types.js';\nimport { readPoolClientFactory } from '../../contracts/contract-context.js';\nimport type { StellarTransactEnvironment } from '../environment/types.js';\nimport type { PrivacyPoolService } from '../pool/service.js';\nimport { finalizeSpendOperationAtExecute } from './execute.js';\nimport { submitSorobanConfidentialTransfer } from '../submit/soroban-confidential-transfer.js';\nimport { requestKytPassageForPoolInteraction } from '../kyt/passage-inspect.js';\nimport { submitPoolTransact } from '../submit/pool-transact.js';\nimport { resolveZkConfigNonce } from '../environment/zk-config-nonce.js';\n\nfunction optionalInspectCiphertext(\n artifacts: NonNullable<StellarPreparedOperation['transactArtifacts']>,\n): Pick<\n NonNullable<StellarPreparedOperation['transactArtifacts']>,\n 'ciphertextHex' | 'outputNoteEphemeralScalars' | 'applicationIdsPlaintext'\n> {\n return {\n ...(artifacts.ciphertextHex ? { ciphertextHex: artifacts.ciphertextHex } : {}),\n ...(artifacts.outputNoteEphemeralScalars\n ? { outputNoteEphemeralScalars: artifacts.outputNoteEphemeralScalars }\n : {}),\n ...(artifacts.applicationIdsPlaintext\n ? { applicationIdsPlaintext: artifacts.applicationIdsPlaintext }\n : {}),\n };\n}\n\nasync function submitPreparedDeposit(\n prepared: StellarPreparedOperation,\n environment: StellarTransactEnvironment,\n): Promise<string> {\n const artifacts = prepared.transactArtifacts;\n const outputRecord = prepared.outputRecords[0];\n if (\n !artifacts?.proofHex ||\n !artifacts.publicHex ||\n !artifacts.walletPublicKey ||\n !artifacts.depositScalarHex ||\n !outputRecord?.coinNote\n ) {\n throw new Error('Prepared deposit is missing transact artifacts.');\n }\n const poolClient = readPoolClientFactory(environment)({\n contractId: environment.network.poolContract,\n walletPublicKey: artifacts.walletPublicKey,\n networkPassphrase: environment.network.networkPassphrase,\n sorobanRpcUrl: environment.network.rpcUrl,\n });\n const approval = await requestKytPassageForPoolInteraction({\n owner: artifacts.walletPublicKey,\n poolContract: environment.network.poolContract,\n proofHex: artifacts.proofHex,\n publicHex: artifacts.publicHex,\n ...optionalInspectCiphertext(artifacts),\n networkPassphrase: environment.network.networkPassphrase,\n sorobanRpcUrl: environment.network.rpcUrl,\n transactEnvironment: environment,\n });\n return submitPoolTransact({\n contractClient: poolClient,\n contractId: environment.network.poolContract,\n from: artifacts.walletPublicKey,\n nonce: resolveZkConfigNonce(environment),\n proofHex: artifacts.proofHex,\n publicHex: artifacts.publicHex,\n ...(artifacts.ciphertextHex ? { ciphertextHex: artifacts.ciphertextHex } : {}),\n approval,\n networkPassphrase: environment.network.networkPassphrase,\n sorobanRpcUrl: environment.network.rpcUrl,\n transactEnvironment: environment,\n });\n}\n\nasync function submitPreparedPoolTransact(\n prepared: StellarPreparedOperation,\n environment: StellarTransactEnvironment,\n): Promise<string> {\n const artifacts = prepared.transactArtifacts;\n if (!artifacts?.proofHex || !artifacts.publicHex || !artifacts.walletPublicKey) {\n throw new Error('Prepared operation is missing transact artifacts.');\n }\n return submitSorobanConfidentialTransfer({\n contractId: environment.network.poolContract,\n walletPublicKey: artifacts.walletPublicKey,\n proofHex: artifacts.proofHex,\n publicHex: artifacts.publicHex,\n ...optionalInspectCiphertext(artifacts),\n networkPassphrase: environment.network.networkPassphrase,\n sorobanRpcUrl: environment.network.rpcUrl,\n transactEnvironment: environment,\n });\n}\n\nexport async function submitPreparedOperation(\n prepared: StellarPreparedOperation,\n environment: StellarTransactEnvironment,\n poolService: PrivacyPoolService,\n): Promise<string> {\n const finalized =\n prepared.kind === 'deposit'\n ? prepared\n : await finalizeSpendOperationAtExecute(prepared, environment, poolService);\n if (finalized.kind === 'deposit') {\n return submitPreparedDeposit(finalized, environment);\n }\n return submitPreparedPoolTransact(finalized, environment);\n}\n","import type {\n StellarOperationReceipt,\n StellarPreparedOperation,\n StellarSubmissionPayload,\n StellarTransactEngine,\n} from '../../types.js';\nimport type { StellarTransactEnvironment } from '../environment/types.js';\nimport type { PrivacyPoolService } from '../pool/service.js';\nimport {\n prepareDepositOperation,\n prepareTransferOperation,\n prepareWithdrawOperation,\n} from './prepare/index.js';\nimport { submitPreparedOperation } from './submit.js';\n\nexport function createBrowserStellarTransactEngine(input: {\n environment: StellarTransactEnvironment;\n poolService: PrivacyPoolService;\n}): StellarTransactEngine {\n const { environment, poolService } = input;\n return {\n prepare: async (prepared) => {\n if (prepared.kind === 'deposit') {\n return prepareDepositOperation(prepared, environment, poolService);\n }\n if (prepared.kind === 'transfer') {\n return prepareTransferOperation(prepared, environment);\n }\n return prepareWithdrawOperation(prepared, environment);\n },\n submit: async (\n prepared: StellarPreparedOperation,\n _signedPayload: StellarSubmissionPayload,\n ): Promise<StellarOperationReceipt> => {\n const txHash = await submitPreparedOperation(prepared, environment, poolService);\n return {\n operationId: txHash,\n confirmed: true,\n };\n },\n };\n}\n","import { createRejectedOperation } from '@arcanetech/privacy-sdk-core';\nimport {\n createStellarPrivacyClientFromResolvedConfig,\n resolveStellarPrivacyClientConfig,\n} from './resolve-config.js';\nimport type { StellarPrivacyClient } from './client.js';\nimport { createDefaultTransactEngine } from '../transact/engine/default-factory.js';\nimport type { StellarBrowserPrivacyClientConfig } from '../types.js';\n\nexport type CreateStellarPrivacyClientResult =\n StellarPrivacyClient | ReturnType<typeof createRejectedOperation>;\n\nexport function isStellarPrivacyClient(\n result: CreateStellarPrivacyClientResult,\n): result is StellarPrivacyClient {\n return !('status' in result);\n}\n\nexport async function createStellarPrivacyClient(\n config: StellarBrowserPrivacyClientConfig,\n): Promise<CreateStellarPrivacyClientResult> {\n const resolved = await resolveStellarPrivacyClientConfig(config, async (input) => {\n if (input.transactEngine !== undefined) {\n return input.transactEngine;\n }\n return createDefaultTransactEngine(input.assets, input.transactEnvironment);\n });\n\n if (!resolved.ok) {\n return resolved.result;\n }\n\n return createStellarPrivacyClientFromResolvedConfig(resolved.config);\n}\n\nexport { isPreparedOperation } from '@arcanetech/privacy-sdk-core';\n\nexport type {\n StellarBrowserPrivacyClientConfig,\n StellarPrivacyClientConfig,\n} from '../types.js';\n"],"mappings":"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","names":["unsupportedDisclosureError","unsupportedDisclosureError","executionError","insufficientStateError","executionError","Buffer","PrivacyPoolSDK","scalarHexToFrDecimal","Buffer","withdrawObjectFromMerkleWitness","Buffer","StrKey","Buffer","Buffer","StrKey","Buffer","StrKey","Buffer","DECIMAL_RADIX","withdrawObjectFromMerkleWitness","BundledZkCircuit","PrivacyPoolSDK","scalarHexToFrDecimal","Buffer","Buffer","resolveTokenContractId","executionError","insufficientStateError","registered","z","z","z","z","z","z","z","z","z","z","z","z","z","z","registered","z","z","z","z","isMissingStatePathError","registered","Buffer","Buffer","StrKey","Buffer","StrKey","ed25519PubkeyPayloadHexToWithdrawFrDecimals","COORDINATE_HEX_LENGTH","StrKey","Buffer","ed25519PubkeyPayloadHexToWithdrawFrDecimals","StrKey","StrKey","PrivacyPoolSDK","resolveTokenContractId","StrKey","resolveTokenContractId","prepareTransferOperation","resolveSenderPrivKeyScalarHex","resolveTokenContractId","confidentialEscrowFields","Buffer","rpc","xdr","xdr","Buffer","rpc","buildApplicationIdHints","Address","Operation","TransactionBuilder","rpc","xdr","Buffer","submitPreparedOperation","prepareTransferOperation","submitPreparedOperation","PrivacyPoolSDK"]}
|
|
1
|
+
{"version":3,"sources":["../src/node.ts","../src/assets/load-node.ts","../src/client/resolve-config.ts","../src/client/validate-config.ts","../src/client/compose.ts","../src/adapters/policy.ts","../src/policy/disclosure.ts","../src/policy/disclosure-routes.ts","../src/transact/engine/execution/submit-prepared.ts","../src/adapters/record-selection.ts","../src/transact/transfer-source/types.ts","../src/transact/transfer-source/resolve.ts","../src/transact/transfer-source/verify-private-records.ts","../src/contracts/pool/pool-domain-service.ts","../src/rpc/server.ts","../src/contracts/pool/create-pool-client.ts","../src/contracts/signing.ts","../src/contracts/registry/create-registry-client.ts","../src/contracts/contract-context.ts","../src/transact/private-address/record-coin.ts","../src/transact/pool/service.ts","../src/transact/merkle/field-decimal.ts","../src/transact/private-address/codec.ts","../src/transact/proofs/withdraw/transact-proof.ts","../src/transact/proofs/transaction-input.ts","../src/transact/stellar/token-contract.ts","../src/transact/zk/slots.ts","../src/transact/proofs/confidential/helpers.ts","../src/transact/audit/parameters.ts","../src/transact/proofs/withdraw/helpers.ts","../src/transact/stellar/account.ts","../src/transact/encoding/priv-key-scalar-from-recipient-hex.ts","../src/transact/zk/circuit-config.ts","../src/transact/environment/zk-config-nonce.ts","../src/transact/zk/browser-artifact-cache.ts","../src/transact/zk/prefetch-bundled-circuit.ts","../src/transact/pool/aligned-deposit.ts","../src/transact/pool/singleton.ts","../src/transact/merkle/fetch-contract.ts","../src/transact/merkle/encoding.ts","../src/transact/merkle/state-port.ts","../src/transact/engine/prepare/shared.ts","../src/adapters/transfer-output-records.ts","../src/adapters/transfer-prepare.ts","../src/adapters/network.ts","../src/state/foundation/paths.ts","../src/state/schemas/shared.ts","../src/state/foundation/coerce.ts","../src/state/read/normalize/assets.ts","../src/state/read/normalize/deliveries.ts","../src/state/read/normalize/pool.ts","../src/state/read/normalize/registry.ts","../src/state/read/normalize/records.ts","../src/state/read/normalize/wallet.ts","../src/state/filters/register-schemas.ts","../src/state/filters/ops.ts","../src/state/bridge/call-types.ts","../src/state/schemas/assets/catalog.ts","../src/state/definitions/assets.ts","../src/state/schemas/assets/balances.ts","../src/state/foundation/keys.ts","../src/state/definitions/balances.ts","../src/state/schemas/claims/deliveries.ts","../src/state/definitions/deliveries.ts","../src/state/schemas/pool/merkle.ts","../src/state/definitions/pool.ts","../src/state/schemas/records/private.ts","../src/state/schemas/records/transactions.ts","../src/state/definitions/records.ts","../src/state/schemas/registry/lookup.ts","../src/state/definitions/registry.ts","../src/state/definitions/transactions.ts","../src/state/schemas/wallet/scalar.ts","../src/state/schemas/wallet/private-address.ts","../src/state/definitions/wallet.ts","../src/state/definitions/index.ts","../src/state/service/base.ts","../src/state/service/assets/balance-methods.ts","../src/state/service/assets/upsert-methods.ts","../src/state/service/assets/catalog-methods.ts","../src/state/service/assets/index.ts","../src/state/service/deliveries/incoming-methods.ts","../src/state/service/deliveries/sync-methods.ts","../src/state/service/deliveries/index.ts","../src/state/service/pool/ephemeral.ts","../src/state/service/pool/merkle.ts","../src/state/service/records/private-record-upsert.ts","../src/state/service/records/private-methods.ts","../src/state/service/records/transaction-methods.ts","../src/state/service/records/index.ts","../src/state/service/registry/lookup-read.ts","../src/state/service/registry/lookup-write.ts","../src/state/service/registry/lookup.ts","../src/state/service/registry/wallet-record-methods.ts","../src/state/service/registry/wallet-scalar-methods.ts","../src/state/service/registry/wallet-address.ts","../src/state/service/compose.ts","../src/state/service/index.ts","../src/contracts/registry/registry-domain-service.ts","../src/transact/submit/ttl-preflight.ts","../src/contracts/registry/resolve-transfer-recipient.ts","../src/transact/escrow/derived-escrow-recipient.ts","../src/rpc/transactions.ts","../src/rpc/soroban-transaction-meta.ts","../src/rpc/stellar-rpc-unix-timestamp.ts","../src/rpc/polling.ts","../src/client/network.ts","../src/client/nullifier-checker.ts","../src/client/pool-sync.ts","../src/client/network-facet.ts","../src/client/state-delegates/assets.ts","../src/client/state-delegates/deliveries.ts","../src/client/state-delegates/pool.ts","../src/client/state-delegates/records.ts","../src/client/state-delegates/registry.ts","../src/client/state-delegates/index.ts","../src/client/client.ts","../src/transact/merkle/attach-state-ports.ts","../src/client/resolve-transact-environment.ts","../src/transact/engine/default-factory.ts","../src/transact/pool/proof-types.ts","../src/transact/engine/prepare/deposit.ts","../src/transact/engine/prepare/transfer-helpers.ts","../src/transact/engine/prepare/spend.ts","../src/transact/encoding/ephemeral-key.ts","../src/transact/escrow/require-escrow-spend-scalar.ts","../src/transact/engine/spend-proof-context.ts","../src/transact/proofs/confidential/recipient-change-deposits.ts","../src/transact/proofs/confidential/shared.ts","../src/transact/proofs/confidential/dual.ts","../src/transact/proofs/confidential/single.ts","../src/transact/engine/transfer-proof-at-execute.ts","../src/transact/engine/transfer-finalize.ts","../src/transact/engine/execute.ts","../src/transact/kyt/passage/inspect.ts","../src/transact/kyt/inspect-error.ts","../src/transact/kyt/passage/poll.ts","../src/transact/kyt/passage/submit.ts","../src/transact/submit/zk-config-ttl.ts","../src/transact/submit/pool-transact.ts","../src/transact/submit/soroban-confidential-transfer.ts","../src/transact/engine/submit.ts","../src/transact/engine/browser-stellar.ts","../src/client/create.ts"],"sourcesContent":["import { createRejectedOperation } from '@arcanetech/privacy-sdk-core';\nimport { loadNodeAssets } from './assets/load-node.js';\nimport {\n createStellarPrivacyClientFromResolvedConfig,\n resolveStellarPrivacyClientConfig,\n} from './client/resolve-config.js';\nimport { createDefaultTransactEngine } from './transact/engine/default-factory.js';\nimport type { StellarNodePrivacyClientConfig } from './types.node.js';\n\nexport type { CreateStellarPrivacyClientResult } from './client/create.js';\nexport {\n createStellarPrivacyClient,\n isPreparedOperation,\n isStellarPrivacyClient,\n} from './client/create.js';\nexport type {\n StellarBrowserPrivacyClientConfig,\n StellarPrivacyClientConfig,\n} from './client/create.js';\n\nexport type {\n StellarNodeAssets,\n StellarNodePrivacyClientConfig,\n} from './types.node.js';\n\nexport async function createStellarPrivacyClientFromNodeConfig(\n config: StellarNodePrivacyClientConfig,\n): Promise<\n | ReturnType<typeof createStellarPrivacyClientFromResolvedConfig>\n | ReturnType<typeof createRejectedOperation>\n> {\n const resolved = await resolveStellarPrivacyClientConfig(config, async (input) => {\n if (input.transactEngine !== undefined) {\n return input.transactEngine;\n }\n const browserAssets = await loadNodeAssets(input.assets);\n return createDefaultTransactEngine(browserAssets, input.transactEnvironment);\n });\n\n if (!resolved.ok) {\n return resolved.result;\n }\n\n return createStellarPrivacyClientFromResolvedConfig(resolved.config);\n}\n","import type { StellarNodeAssets } from '../types.node.js';\n\nexport async function loadNodeAssets(assets: StellarNodeAssets): Promise<{\n sdkWasm: ArrayBuffer;\n}> {\n const sdkWasm = await readAssetFile(assets.sdkWasmPath);\n return { sdkWasm };\n}\n\nasync function readAssetFile(path: string): Promise<ArrayBuffer> {\n const { readFile } = await import('fs/promises');\n const buffer = await readFile(path);\n return buffer.buffer.slice(\n buffer.byteOffset,\n buffer.byteOffset + buffer.byteLength,\n ) as ArrayBuffer;\n}\n","import { createRejectedOperation } from '@arcanetech/privacy-sdk-core';\nimport type { StellarTransactEnvironment } from '../transact/environment/types.js';\nimport type {\n ResolvedStellarPrivacyClientConfig,\n StellarPrivacyClientConfigBase,\n StellarTransactEngine,\n} from '../types.js';\nimport { validateStellarConfig } from './validate-config.js';\nimport {\n createStellarPrivacyClientInstance,\n type StellarPrivacyClient,\n} from './client.js';\nimport { resolveClientTransactEnvironment } from './resolve-transact-environment.js';\n\nexport async function resolveStellarPrivacyClientConfig<\n TConfig extends StellarPrivacyClientConfigBase,\n>(\n config: TConfig,\n createEngine: (config: TConfig) => Promise<StellarTransactEngine>,\n): Promise<\n | { ok: true; config: ResolvedStellarPrivacyClientConfig & TConfig }\n | { ok: false; result: ReturnType<typeof createRejectedOperation> }\n> {\n const errors = validateStellarConfig(config);\n if (errors.length > 0) {\n return { ok: false, result: createRejectedOperation(errors) };\n }\n\n const browserConfig = config as {\n transactEnvironment?: StellarTransactEnvironment;\n auditPublicKeyHex?: string;\n };\n const sourceTransactEnvironment = browserConfig.transactEnvironment;\n const auditPublicKeyHex = browserConfig.auditPublicKeyHex;\n const transactEnvironment = resolveClientTransactEnvironment({\n ...(sourceTransactEnvironment ? { sourceTransactEnvironment } : {}),\n ...(auditPublicKeyHex ? { auditPublicKeyHex } : {}),\n state: config.state,\n });\n const engineConfig =\n transactEnvironment === undefined\n ? config\n : ({ ...config, transactEnvironment } as TConfig);\n\n const transactEngine = config.transactEngine ?? (await createEngine(engineConfig));\n\n const resolvedConfig: ResolvedStellarPrivacyClientConfig & TConfig = {\n ...config,\n transactEngine,\n ...(transactEnvironment === undefined ? {} : { transactEnvironment }),\n };\n\n return {\n ok: true,\n config: resolvedConfig,\n };\n}\n\nexport function createStellarPrivacyClientFromResolvedConfig(\n config: ResolvedStellarPrivacyClientConfig,\n): StellarPrivacyClient {\n return createStellarPrivacyClientInstance(config);\n}\n\nexport type { ResolvedStellarPrivacyClientConfig } from '../types.js';\n","import {\n missingDependencyError,\n type PrivacySdkError,\n} from '@arcanetech/privacy-sdk-core';\nimport type { StellarPrivacyClientConfigBase } from '../types.js';\n\nexport function validateStellarConfig(\n config: Partial<StellarPrivacyClientConfigBase & { assets?: unknown }>,\n): PrivacySdkError[] {\n const errors: PrivacySdkError[] = [];\n\n if (config.network === undefined) {\n errors.push(\n missingDependencyError('network', 'Network configuration is required.'),\n );\n }\n if (config.wallet === undefined) {\n errors.push(missingDependencyError('wallet', 'Wallet adapter is required.'));\n }\n if (config.state === undefined) {\n errors.push(missingDependencyError('state', 'State adapter is required.'));\n }\n if (config.assets === undefined) {\n errors.push(missingDependencyError('crypto', 'ZK assets are required.'));\n }\n\n return errors;\n}\n","import {\n AdapterPrivacyClient,\n type TransferIntent,\n} from '@arcanetech/privacy-sdk-core';\nimport {\n createStellarNetworkAdapter,\n createStellarPolicyAdapter,\n} from '../adapters/index.js';\nimport {\n createStellarStateService,\n createStellarStorageAdapterFromState,\n type StellarStateService,\n} from '../state/index.js';\nimport type {\n ResolvedStellarPrivacyClientConfig,\n StellarAddress,\n StellarAssetId,\n StellarOperationReceipt,\n StellarPreparedOperation,\n StellarPrivateRecord,\n StellarTransferIntent,\n} from '../types.js';\nimport { createNullifierSpentChecker } from './nullifier-checker.js';\nimport { createNetworkFacet } from './network-facet.js';\n\nfunction createOperationsFacet(\n config: ResolvedStellarPrivacyClientConfig,\n state: StellarStateService,\n) {\n const storage = createStellarStorageAdapterFromState(state);\n const checkNullifierSpent = createNullifierSpentChecker(config.transactEnvironment);\n const client = new AdapterPrivacyClient<\n StellarAddress,\n StellarAssetId,\n bigint,\n StellarPreparedOperation['submissionPayload'],\n StellarPrivateRecord,\n StellarPreparedOperation,\n StellarOperationReceipt\n >({\n wallet: {\n getAddress: () => config.wallet.getAddress(),\n authorizeMessage: (message) => config.wallet.authorizeMessage(message),\n authorizePayload: (payload) => config.wallet.signTransactionPayload(payload),\n },\n storage,\n network: createStellarNetworkAdapter({\n storage,\n wallet: config.wallet,\n engine: config.transactEngine,\n poolContract: config.network.poolContract,\n ...(checkNullifierSpent ? { checkNullifierSpent } : {}),\n }),\n policy: createStellarPolicyAdapter(config.policy),\n });\n\n return {\n deposit: client.deposit.bind(client),\n withdraw: client.withdraw.bind(client),\n transfer: (intent: StellarTransferIntent) =>\n client.transfer(\n intent as unknown as TransferIntent<StellarAddress, StellarAssetId, bigint>,\n ),\n };\n}\n\nexport function composeStellarPrivacyClient(\n config: ResolvedStellarPrivacyClientConfig,\n) {\n const state = createStellarStateService(config.state);\n const operations = createOperationsFacet(config, state);\n const network = createNetworkFacet({\n transactEnvironment: config.transactEnvironment,\n state,\n });\n\n return {\n state,\n operations,\n network,\n transactEnvironment: config.transactEnvironment,\n };\n}\n\nexport type ComposedStellarPrivacyClient = ReturnType<\n typeof composeStellarPrivacyClient\n>;\n","import type {\n DepositIntent,\n PolicyAdapter,\n PrivacySdkError,\n WithdrawIntent,\n} from '@arcanetech/privacy-sdk-core';\nimport { executionError } from '@arcanetech/privacy-sdk-core';\nimport { validateStellarDisclosure } from '../policy/disclosure.js';\nimport type {\n StellarAddress,\n StellarAssetId,\n StellarPolicyAdapter,\n StellarTransferIntent,\n} from '../types.js';\n\ntype StellarIntent =\n | DepositIntent<StellarAddress, StellarAssetId, bigint>\n | StellarTransferIntent\n | WithdrawIntent<StellarAddress, StellarAssetId, bigint>;\n\nexport function createStellarPolicyAdapter(\n policy?: StellarPolicyAdapter,\n): PolicyAdapter<StellarAddress, StellarAssetId, bigint> {\n return {\n validateDeposit: async (intent) => [\n ...validateStellarDisclosure('deposit', intent),\n ...(await runExternalPolicy('deposit', intent, policy)),\n ],\n validateTransfer: async (intent) => [\n ...validateStellarDisclosure('transfer', intent),\n ...(await runExternalPolicy('transfer', intent, policy)),\n ],\n validateWithdraw: async (intent) => [\n ...validateStellarDisclosure('withdraw', intent),\n ...(await runExternalPolicy('withdraw', intent, policy)),\n ],\n };\n}\n\nasync function runExternalPolicy(\n kind: 'deposit' | 'transfer' | 'withdraw',\n intent: StellarIntent,\n policy: StellarPolicyAdapter | undefined,\n): Promise<PrivacySdkError[]> {\n if (policy === undefined) {\n return [];\n }\n\n try {\n await policy.inspectOperation(kind, intent);\n return [];\n } catch (error) {\n return [\n executionError(\n error instanceof Error ? error.message : 'Policy inspection failed.',\n 'policyCheck',\n ),\n ];\n }\n}\n","import {\n unsupportedDisclosureError,\n type DepositIntent,\n type PrivacySdkError,\n type WithdrawIntent,\n} from '@arcanetech/privacy-sdk-core';\nimport type {\n StellarAddress,\n StellarAssetId,\n StellarTransferIntent,\n} from '../types.js';\nimport {\n isPublicStellarRecipientTransfer,\n validatePublicRecipientTransferDisclosure,\n} from './disclosure-routes.js';\n\ntype Intent =\n | DepositIntent<StellarAddress, StellarAssetId, bigint>\n | StellarTransferIntent\n | WithdrawIntent<StellarAddress, StellarAssetId, bigint>;\n\nfunction isPublicWithdrawRoute(intent: Intent): boolean {\n return (\n intent.disclosure.recipientAddress === 'public' ||\n intent.disclosure.assetAddress === 'public' ||\n intent.disclosure.amount === 'public'\n );\n}\n\nfunction rejectPrivatePublicRouteFields(\n intent: Intent,\n errors: PrivacySdkError[],\n assetMessage: string,\n amountMessage: string,\n): void {\n if (intent.disclosure.assetAddress === 'private') {\n errors.push(\n unsupportedDisclosureError('assetAddress', 'private', ['public'], assetMessage),\n );\n }\n if (intent.disclosure.amount === 'private') {\n errors.push(\n unsupportedDisclosureError('amount', 'private', ['public'], amountMessage),\n );\n }\n}\n\nexport function validateStellarDisclosure(\n kind: 'deposit' | 'transfer' | 'withdraw',\n intent: Intent,\n): PrivacySdkError[] {\n const errors: PrivacySdkError[] = [];\n\n if (kind === 'transfer' && isPublicStellarRecipientTransfer(intent)) {\n errors.push(...validatePublicRecipientTransferDisclosure(intent.disclosure));\n }\n\n if (kind === 'withdraw' && isPublicWithdrawRoute(intent)) {\n rejectPrivatePublicRouteFields(\n intent,\n errors,\n 'This withdrawal route publishes the asset identifier.',\n 'This withdrawal route publishes the withdrawal amount.',\n );\n }\n\n if (kind === 'deposit' && intent.disclosure.senderAddress === 'private') {\n errors.push(\n unsupportedDisclosureError(\n 'senderAddress',\n 'private',\n ['public'],\n 'Deposits from a public signer account cannot hide the sender address.',\n ),\n );\n }\n\n return errors;\n}\n","import {\n unsupportedDisclosureError,\n type DisclosurePolicy,\n type PrivacySdkError,\n} from '@arcanetech/privacy-sdk-core';\nimport type { StellarTransferIntent } from '../types.js';\n\nexport function validatePublicRecipientTransferDisclosure(\n disclosure: DisclosurePolicy,\n): PrivacySdkError[] {\n const errors: PrivacySdkError[] = [];\n const fields: Array<keyof DisclosurePolicy> = [\n 'recipientAddress',\n 'assetAddress',\n 'amount',\n ];\n const messages: Partial<Record<keyof DisclosurePolicy, string>> = {\n recipientAddress:\n 'Transfers to a public Stellar recipient must publish the recipient address.',\n assetAddress:\n 'Transfers to a public Stellar recipient must publish the asset identifier.',\n amount: 'Transfers to a public Stellar recipient must publish the transfer amount.',\n };\n for (const field of fields) {\n if (disclosure[field] === 'private') {\n errors.push(\n unsupportedDisclosureError(\n field,\n 'private',\n ['public'],\n messages[field] ?? 'This transfer route requires public disclosure.',\n ),\n );\n }\n }\n return errors;\n}\n\nexport function isPublicStellarRecipientTransfer(\n intent: StellarTransferIntent,\n): boolean {\n return intent.disclosure.recipientAddress === 'public';\n}\n","import type { ExecuteOptions } from '@arcanetech/privacy-sdk-core';\nimport {\n assertNotAborted,\n createOperationEventId,\n emitOperationEvent,\n executionError,\n isPrivacySdkError,\n userRejectedError,\n} from '@arcanetech/privacy-sdk-core';\nimport type {\n StellarOperationReceipt,\n StellarPreparedOperation,\n StellarStorageAdapter,\n StellarSubmissionPayload,\n StellarTransactEngine,\n StellarWalletAdapter,\n} from '../../../types.js';\n\nconst PRE_SUBMISSION_STAGES = [\n 'validation',\n 'stateRead',\n 'authorization',\n 'preparation',\n 'policyCheck',\n] as const;\n\ninterface SubmitPreparedOperationInput {\n prepared: StellarPreparedOperation;\n storage: StellarStorageAdapter;\n wallet: StellarWalletAdapter;\n engine: StellarTransactEngine;\n options?: ExecuteOptions;\n}\n\nexport async function submitPreparedOperation(\n input: SubmitPreparedOperationInput,\n): Promise<StellarOperationReceipt> {\n const eventId = createOperationEventId();\n\n try {\n emitPreSubmissionStages(input.options, eventId);\n const signedPayload = await signSubmissionPayload(input.wallet, input.prepared);\n const receipt = await submitAndConfirm(input, eventId, signedPayload);\n try {\n await commitStorageChanges(input, eventId, receipt);\n } catch (error) {\n handleStorageCommitFailure(error, input.options, eventId, receipt);\n }\n return receipt;\n } catch (error) {\n handleSubmissionFailure(error, input.options, eventId);\n }\n}\n\nfunction emitPreSubmissionStages(\n options: ExecuteOptions | undefined,\n eventId: string,\n): void {\n for (const stage of PRE_SUBMISSION_STAGES) {\n assertNotAborted(options?.signal);\n emitOperationEvent(options, { id: eventId, stage, status: 'begin' });\n emitOperationEvent(options, { id: eventId, stage, status: 'end' });\n }\n}\n\nasync function signSubmissionPayload(\n wallet: StellarWalletAdapter,\n prepared: StellarPreparedOperation,\n): Promise<StellarSubmissionPayload> {\n try {\n return await wallet.signTransactionPayload(prepared.submissionPayload);\n } catch (error) {\n throw userRejectedError(\n error instanceof Error ? error.message : 'Wallet rejected the transaction.',\n );\n }\n}\n\nasync function submitAndConfirm(\n input: SubmitPreparedOperationInput,\n eventId: string,\n signedPayload: StellarSubmissionPayload,\n): Promise<StellarOperationReceipt> {\n assertNotAborted(input.options?.signal);\n emitOperationEvent(input.options, {\n id: eventId,\n stage: 'submission',\n status: 'begin',\n });\n\n const receipt = await input.engine.submit(input.prepared, signedPayload);\n emitOperationEvent(input.options, {\n id: eventId,\n stage: 'submission',\n status: 'end',\n });\n emitOperationEvent(input.options, {\n id: eventId,\n stage: 'confirmation',\n status: 'begin',\n });\n emitOperationEvent(input.options, {\n id: eventId,\n stage: 'confirmation',\n status: 'end',\n });\n return receipt;\n}\n\nasync function commitStorageChanges(\n input: SubmitPreparedOperationInput,\n eventId: string,\n receipt: StellarOperationReceipt,\n): Promise<void> {\n emitOperationEvent(input.options, {\n id: eventId,\n stage: 'storageCommit',\n status: 'begin',\n });\n if (input.prepared.outputRecords.length > 0) {\n await input.storage.savePrivateRecords(\n input.prepared.outputRecords.map((record) => {\n const nextStatus = receipt.confirmed ? 'finalized' : record.status;\n return {\n ...record,\n txHash: receipt.operationId,\n ...(nextStatus === undefined ? {} : { status: nextStatus }),\n };\n }),\n );\n }\n if (input.prepared.consumedRecords.length > 0) {\n await input.storage.markPrivateRecordsUsed(input.prepared.consumedRecords);\n }\n emitOperationEvent(input.options, {\n id: eventId,\n stage: 'storageCommit',\n status: 'end',\n });\n}\n\nfunction toSubmissionError(error: unknown) {\n if (isPrivacySdkError(error)) {\n return error;\n }\n const message = error instanceof Error ? error.message : 'Execution failed.';\n return executionError(message, 'submission');\n}\n\nfunction storageCommitFailureMessage(error: unknown): string {\n if (isPrivacySdkError(error)) {\n return error.message;\n }\n if (error instanceof Error) {\n return error.message;\n }\n return 'Storage commit failed.';\n}\n\nfunction handleStorageCommitFailure(\n error: unknown,\n options: ExecuteOptions | undefined,\n eventId: string,\n receipt: StellarOperationReceipt,\n): never {\n const sdkError = executionError(storageCommitFailureMessage(error), 'storageCommit', {\n receipt,\n });\n emitOperationEvent(options, {\n id: eventId,\n stage: 'storageCommit',\n status: 'error',\n error: sdkError,\n });\n throw sdkError;\n}\n\nfunction handleSubmissionFailure(\n error: unknown,\n options: ExecuteOptions | undefined,\n eventId: string,\n): never {\n const sdkError = toSubmissionError(error);\n emitOperationEvent(options, {\n id: eventId,\n stage: 'submission',\n status: 'error',\n error: sdkError,\n });\n throw sdkError;\n}\n","import type { WithdrawIntent } from '@arcanetech/privacy-sdk-core';\nimport { insufficientStateError } from '@arcanetech/privacy-sdk-core';\nimport { isPrivateAddressTransferFrom } from '../transact/transfer-source/index.js';\nimport { requireCoinNoteFromRecord } from '../transact/private-address/record-coin.js';\nimport type {\n StellarAddress,\n StellarAssetId,\n StellarPrivateRecord,\n StellarStorageAdapter,\n StellarTransferFromAddress,\n StellarTransferIntent,\n} from '../types.js';\nimport {\n buildDepositOutputRecords,\n buildWithdrawOutputRecords,\n} from './transfer-output-records.js';\n\ntype SpendIntent =\n StellarTransferIntent | WithdrawIntent<StellarAddress, StellarAssetId, bigint>;\n\nfunction readRecordSpendAmount(record: StellarPrivateRecord): bigint {\n const coinValue = record.coinNote?.value;\n if (coinValue !== undefined && String(coinValue).trim() !== '') {\n return BigInt(String(coinValue));\n }\n return record.amount;\n}\n\nfunction compareRecordsForSpendSelection(\n left: StellarPrivateRecord,\n right: StellarPrivateRecord,\n): number {\n const leftValue = readRecordSpendAmount(left);\n const rightValue = readRecordSpendAmount(right);\n if (rightValue > leftValue) {\n return 1;\n }\n if (rightValue < leftValue) {\n return -1;\n }\n return left.id.localeCompare(right.id);\n}\n\nasync function filterUnspentPrivateRecords(input: {\n records: StellarPrivateRecord[];\n walletPublicKey: string;\n checkNullifierSpent: (parameters: {\n nullifier: string;\n walletPublicKey: string;\n privKeyScalarHex?: string;\n privateAddressStpl1?: string;\n }) => Promise<boolean>;\n}): Promise<StellarPrivateRecord[]> {\n const unspent: StellarPrivateRecord[] = [];\n for (const record of input.records) {\n if (!record.coinNote) {\n unspent.push(record);\n continue;\n }\n const coin = requireCoinNoteFromRecord(record);\n const spent = await input.checkNullifierSpent({\n nullifier: coin.nullifier,\n walletPublicKey: input.walletPublicKey,\n ...(record.privateAddress ? { privateAddressStpl1: record.privateAddress } : {}),\n });\n if (!spent) {\n unspent.push(record);\n }\n }\n return unspent;\n}\n\nfunction pickRecordsForSpendAmount(input: {\n available: StellarPrivateRecord[];\n kind: 'transfer' | 'withdraw';\n amount: bigint;\n}): StellarPrivateRecord[] {\n let selectedTotal = 0n;\n const selected: StellarPrivateRecord[] = [];\n for (const record of input.available) {\n selected.push(record);\n selectedTotal += readRecordSpendAmount(record);\n if (selectedTotal >= input.amount) {\n return selected;\n }\n if (\n (input.kind === 'transfer' || input.kind === 'withdraw') &&\n selected.length >= 2\n ) {\n throw insufficientStateError(\n 'missing_private_records',\n 'Storage does not contain enough private records for this operation.',\n { requestedAmount: input.amount, availableAmount: selectedTotal },\n );\n }\n }\n throw insufficientStateError(\n 'missing_private_records',\n 'Storage does not contain enough private records for this operation.',\n { requestedAmount: input.amount, availableAmount: selectedTotal },\n );\n}\n\nexport async function selectPrivateRecords(input: {\n storage: StellarStorageAdapter;\n kind: 'transfer' | 'withdraw';\n intent: SpendIntent;\n walletPublicKey?: string;\n checkNullifierSpent?: (parameters: {\n nullifier: string;\n walletPublicKey: string;\n privKeyScalarHex?: string;\n privateAddressStpl1?: string;\n }) => Promise<boolean>;\n}): Promise<StellarPrivateRecord[]> {\n const from = input.intent.from;\n if (!isPrivateAddressTransferFrom(from)) {\n throw insufficientStateError(\n 'invalid_transfer_source',\n 'Private record selection requires a private address transfer source.',\n );\n }\n const spendFromPrivateAddress = from.trim().startsWith('stpl');\n const records = await input.storage.listPrivateRecords({\n ...(spendFromPrivateAddress ? { privateAddress: from } : { owner: from }),\n asset: input.intent.asset,\n });\n const locallyAvailable = [...records]\n .filter((record) => !record.consumed)\n .toSorted(compareRecordsForSpendSelection);\n const walletPublicKey = input.walletPublicKey?.trim();\n const available =\n input.checkNullifierSpent && walletPublicKey\n ? await filterUnspentPrivateRecords({\n records: locallyAvailable,\n walletPublicKey,\n checkNullifierSpent: input.checkNullifierSpent,\n })\n : locallyAvailable;\n\n if (available.length === 0) {\n throw insufficientStateError(\n 'missing_private_records',\n 'Storage does not contain enough private records for this operation.',\n { requestedAmount: input.intent.amount, availableAmount: 0n },\n );\n }\n\n return pickRecordsForSpendAmount({\n available,\n kind: input.kind,\n amount: input.intent.amount,\n });\n}\n\nexport function sumRecordAmounts(records: StellarPrivateRecord[]): bigint {\n return records.reduce((total, record) => total + readRecordSpendAmount(record), 0n);\n}\n\nexport function buildSpendOutputRecords(input: {\n kind: 'deposit' | 'withdraw';\n from: StellarTransferFromAddress;\n to: StellarAddress;\n asset: StellarAssetId;\n amount: bigint;\n consumedTotal: bigint;\n recipientDisclosedPublicly: boolean;\n walletPublicKey: StellarAddress;\n}): StellarPrivateRecord[] {\n if (input.kind === 'deposit') {\n return buildDepositOutputRecords(\n input.walletPublicKey,\n input.to,\n input.asset,\n input.amount,\n );\n }\n return buildWithdrawOutputRecords(input);\n}\n","import type { StellarAddress } from '../../types.js';\n\nexport type StellarTransferFromAddress = StellarAddress;\n\nexport function isPrivateAddressTransferFrom(\n from: StellarTransferFromAddress,\n): from is StellarAddress {\n return typeof from === 'string';\n}\n","import type { StellarTransferFromAddress } from './types.js';\n\nexport function readTransferFromPrivateAddress(\n from: StellarTransferFromAddress,\n): string {\n return from.trim();\n}\n","import { executionError, insufficientStateError } from '@arcanetech/privacy-sdk-core';\nimport { readNullifierConsumedOnChain } from '../../contracts/pool/pool-domain-service.js';\nimport { requireContractContext } from '../../contracts/contract-context.js';\nimport { requireCoinNoteFromRecord } from '../private-address/record-coin.js';\nimport { getPrivacyPoolService } from '../pool/singleton.js';\nimport { ensureSenderPrivKeyScalarHex } from '../engine/prepare/shared.js';\nimport { privKeyScalarDecimalFromRecipientScalarHex } from '../encoding/priv-key-scalar-from-recipient-hex.js';\nimport type { StellarPrivateRecord } from '../../types.js';\nimport type { StellarTransactEnvironment } from '../environment/types.js';\n\nasync function resolveNullifierSpendScalarHex(input: {\n record: StellarPrivateRecord;\n environment: StellarTransactEnvironment;\n walletPublicKey: string;\n spendScalarHex?: string;\n}): Promise<string> {\n const stamped = input.spendScalarHex?.trim();\n if (stamped) {\n return stamped;\n }\n const privateAddress = input.record.privateAddress?.trim();\n if (!privateAddress) {\n throw executionError(\n 'Private record is missing a private address; cannot derive the owner-bound spend scalar.',\n 'validation',\n {\n reason: 'private_record_missing_private_address',\n recordId: input.record.id,\n },\n );\n }\n return ensureSenderPrivKeyScalarHex(\n input.environment,\n privateAddress,\n input.walletPublicKey,\n );\n}\n\nasync function readPrivateRecordNullifierSpendStatus(input: {\n record: StellarPrivateRecord;\n environment: StellarTransactEnvironment;\n walletPublicKey: string;\n poolContractId?: string;\n spendScalarHex?: string;\n}): Promise<{ spent: boolean; nullifierHashHex: string }> {\n const coin = requireCoinNoteFromRecord(input.record);\n const scalarHex = await resolveNullifierSpendScalarHex(input);\n const nullifierHashHex = await getPrivacyPoolService().calculateNullifierHash(\n coin.nullifier,\n privKeyScalarDecimalFromRecipientScalarHex(scalarHex),\n );\n const contractContext = requireContractContext(input.environment);\n const poolContractId =\n input.poolContractId?.trim() || contractContext.network.poolContract;\n const spent = await readNullifierConsumedOnChain({\n contractContext,\n poolContractId,\n walletPublicKey: input.walletPublicKey.trim(),\n nullifierHashHex,\n });\n return { spent, nullifierHashHex };\n}\n\nexport async function verifyPrivateRecordsNullifiersBeforeExecute(input: {\n records: StellarPrivateRecord[];\n environment: StellarTransactEnvironment;\n walletPublicKey: string;\n poolContractId?: string;\n spendScalarHex?: string;\n}): Promise<void> {\n for (const record of input.records) {\n const status = await readPrivateRecordNullifierSpendStatus({\n record,\n environment: input.environment,\n walletPublicKey: input.walletPublicKey,\n ...(input.poolContractId ? { poolContractId: input.poolContractId } : {}),\n ...(input.spendScalarHex ? { spendScalarHex: input.spendScalarHex } : {}),\n });\n if (status.spent) {\n throw executionError(\n 'Private input note nullifier was already spent on-chain.',\n 'validation',\n {\n reason: 'private_record_nullifier_spent',\n recordId: record.id,\n nullifierHashHex: status.nullifierHashHex,\n },\n );\n }\n }\n}\n\nexport async function assertPrivateRecordsNullifiersAvailable(input: {\n records: StellarPrivateRecord[];\n walletPublicKey: string;\n checkNullifierSpent?: (parameters: {\n nullifier: string;\n walletPublicKey: string;\n privKeyScalarHex?: string;\n privateAddressStpl1?: string;\n }) => Promise<boolean>;\n}): Promise<void> {\n if (!input.checkNullifierSpent) {\n return;\n }\n for (const record of input.records) {\n const coin = requireCoinNoteFromRecord(record);\n const spent = await input.checkNullifierSpent({\n nullifier: coin.nullifier,\n walletPublicKey: input.walletPublicKey,\n ...(record.privateAddress ? { privateAddressStpl1: record.privateAddress } : {}),\n });\n if (spent) {\n throw insufficientStateError(\n 'private_record_nullifier_spent',\n 'Private input note nullifier was already spent on-chain.',\n { recordId: record.id },\n );\n }\n }\n}\n","import { Buffer } from 'buffer';\nimport type { StellarContractContext } from '../contract-context.js';\n\nfunction hexToBuffer(hex: string): Buffer {\n const clean = hex.startsWith('0x') ? hex.slice(2) : hex;\n return Buffer.from(clean, 'hex');\n}\n\nexport async function readNullifierConsumedOnChain(input: {\n contractContext: StellarContractContext;\n poolContractId: string;\n walletPublicKey: string;\n nullifierHashHex: string;\n}): Promise<boolean> {\n const client = input.contractContext.createPoolClient({\n contractId: input.poolContractId,\n walletPublicKey: input.walletPublicKey,\n networkPassphrase: input.contractContext.network.networkPassphrase,\n sorobanRpcUrl: input.contractContext.network.rpcUrl,\n });\n const read = await client.is_nulifier_hash_consumed({\n hash: hexToBuffer(input.nullifierHashHex),\n });\n return read.result as boolean;\n}\n","import { rpc } from '@stellar/stellar-sdk';\n\nexport type StellarRpcServer = rpc.Server;\n\nexport function createStellarRpcServer(rpcUrl: string): StellarRpcServer {\n return new rpc.Server(rpcUrl.trim(), { allowHttp: true });\n}\n","import { Client as PrivacyPoolContractClient } from 'contract';\nimport type { PoolTransactClient } from '../../transact/pool/types.js';\nimport {\n adaptSignTransactionForGeneratedBinding,\n type StellarSignTransaction,\n} from '../signing.js';\n\nexport function createInternalPoolContractClient(input: {\n contractId: string;\n walletPublicKey: string;\n networkPassphrase: string;\n sorobanRpcUrl: string;\n signTransaction: StellarSignTransaction;\n}): PoolTransactClient {\n const signBinding = adaptSignTransactionForGeneratedBinding(input.signTransaction, {\n networkPassphrase: input.networkPassphrase,\n walletPublicKey: input.walletPublicKey,\n });\n const client = new PrivacyPoolContractClient({\n contractId: input.contractId,\n networkPassphrase: input.networkPassphrase,\n rpcUrl: input.sorobanRpcUrl,\n allowHttp: true,\n publicKey: input.walletPublicKey,\n signTransaction: signBinding,\n });\n return client as unknown as PoolTransactClient;\n}\n","export type StellarSignTransaction = (input: {\n xdr: string;\n networkPassphrase: string;\n address: string;\n}) => Promise<{ signedTxXdr: string }>;\n\nexport type GeneratedBindingSignTransaction = (\n xdrInput: string,\n options?: {\n networkPassphrase?: string;\n address?: string;\n },\n) => Promise<{ signedTxXdr: string }>;\n\nexport function adaptSignTransactionForGeneratedBinding(\n signTransaction: StellarSignTransaction,\n defaults: {\n networkPassphrase: string;\n walletPublicKey: string;\n },\n): GeneratedBindingSignTransaction {\n return async (xdrInput, options) => {\n const networkPassphrase =\n options?.networkPassphrase?.trim() || defaults.networkPassphrase;\n const address = options?.address?.trim() || defaults.walletPublicKey;\n return signTransaction({\n xdr: xdrInput,\n networkPassphrase,\n address,\n });\n };\n}\n","import { Buffer } from 'buffer';\nimport { Client as RegistryContractClient } from 'registry';\nimport {\n adaptSignTransactionForGeneratedBinding,\n type StellarSignTransaction,\n} from '../signing.js';\n\nexport type RegistryContractReadClient = {\n get_private_address: (input: { owner: string }) => Promise<{ result: unknown }>;\n};\n\nexport type RegistryContractWriteClient = RegistryContractReadClient & {\n register_private_address: (input: {\n owner: string;\n public_key_x: Buffer;\n public_key_y: Buffer;\n }) => Promise<{\n signAndSend: () => Promise<{\n sendTransactionResponse?: {\n hash?: string;\n };\n }>;\n }>;\n};\n\nexport function createInternalRegistryContractClient(input: {\n contractId: string;\n walletPublicKey: string;\n networkPassphrase: string;\n sorobanRpcUrl: string;\n signTransaction: StellarSignTransaction;\n}): RegistryContractWriteClient {\n const signBinding = adaptSignTransactionForGeneratedBinding(input.signTransaction, {\n networkPassphrase: input.networkPassphrase,\n walletPublicKey: input.walletPublicKey,\n });\n return new RegistryContractClient({\n contractId: input.contractId,\n networkPassphrase: input.networkPassphrase,\n rpcUrl: input.sorobanRpcUrl,\n allowHttp: true,\n publicKey: input.walletPublicKey,\n signTransaction: signBinding,\n }) as unknown as RegistryContractWriteClient;\n}\n\nexport type { PrivateAddressRecord } from 'registry';\n","import type { StellarNetworkConfig } from '../types.js';\nimport type { PoolClientFactory } from '../transact/pool/types.js';\nimport { createStellarRpcServer, type StellarRpcServer } from '../rpc/server.js';\nimport { createInternalPoolContractClient } from './pool/create-pool-client.js';\nimport {\n createInternalRegistryContractClient,\n type RegistryContractWriteClient,\n} from './registry/create-registry-client.js';\nimport type { StellarSignTransaction } from './signing.js';\n\nexport type RegistryClientFactory = (input: {\n contractId: string;\n walletPublicKey: string;\n networkPassphrase: string;\n sorobanRpcUrl: string;\n}) => RegistryContractWriteClient;\n\nexport type StellarContractContext = {\n network: StellarNetworkConfig;\n signTransaction: StellarSignTransaction;\n rpcServer: StellarRpcServer;\n createPoolClient: PoolClientFactory;\n createRegistryClient: RegistryClientFactory;\n};\n\nfunction composeStellarContractContext(input: {\n network: StellarNetworkConfig;\n signTransaction: StellarSignTransaction;\n}): StellarContractContext {\n const rpcServer = createStellarRpcServer(input.network.rpcUrl);\n return {\n network: input.network,\n signTransaction: input.signTransaction,\n rpcServer,\n createPoolClient: (parameters) =>\n createInternalPoolContractClient({\n ...parameters,\n signTransaction: input.signTransaction,\n }),\n createRegistryClient: (parameters) =>\n createInternalRegistryContractClient({\n ...parameters,\n signTransaction: input.signTransaction,\n }),\n };\n}\n\nexport type ResolvedStellarTransactEnvironment =\n import('../transact/environment/types.js').StellarTransactEnvironment & {\n contractContext: StellarContractContext;\n };\n\nexport function attachContractContext(\n environment: import('../transact/environment/types.js').StellarTransactEnvironment,\n): ResolvedStellarTransactEnvironment {\n if (!environment.signTransaction) {\n throw new Error(\n 'Stellar transact environment requires signTransaction for on-chain contract access.',\n );\n }\n return {\n ...environment,\n contractContext: composeStellarContractContext({\n network: environment.network,\n signTransaction: environment.signTransaction,\n }),\n };\n}\n\nexport function requireContractContext(\n environment:\n import('../transact/environment/types.js').StellarTransactEnvironment | undefined,\n): StellarContractContext {\n if (!environment || !('contractContext' in environment)) {\n throw new Error('Contract context is not configured on the transact environment.');\n }\n const resolved = environment as ResolvedStellarTransactEnvironment;\n return resolved.contractContext;\n}\n\nexport function readPoolClientFactory(\n environment: import('../transact/environment/types.js').StellarTransactEnvironment,\n): PoolClientFactory {\n return requireContractContext(environment).createPoolClient;\n}\n","import type { CoinData } from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport type {\n StellarPrivateCoinNote,\n StellarPrivateRecord,\n} from '../../state/domain/types.js';\n\nexport function requireCoinNoteFromRecord(record: StellarPrivateRecord): CoinData {\n if (!record.coinNote) {\n throw new Error(`Private record ${record.id} is missing coin note data.`);\n }\n return record.coinNote;\n}\n\nexport function findCommitmentLeafIndex(\n commitments: string[],\n commitment: string,\n): number {\n return commitments.indexOf(commitment);\n}\n\nexport function buildPrivateRecordFromDeposit(input: {\n owner: string;\n privateAddress: string;\n assetId: string;\n poolContract: string;\n amount: bigint;\n amountDisplay: number;\n commitmentHex: string;\n coin: CoinData;\n depositScalarHex: string;\n precommitementHex: string;\n txHash?: string;\n status?: StellarPrivateRecord['status'];\n}): StellarPrivateRecord {\n return {\n id: input.commitmentHex,\n owner: input.owner,\n asset: input.assetId,\n amount: input.amount,\n consumed: false,\n status: input.status ?? 'pending',\n poolContract: input.poolContract,\n commitmentHex: input.commitmentHex,\n privateAddress: input.privateAddress,\n amountDisplay: input.amountDisplay,\n coinNote: input.coin as StellarPrivateCoinNote,\n depositScalarHex: input.depositScalarHex,\n precommitementHex: input.precommitementHex,\n ...(input.txHash ? { txHash: input.txHash } : {}),\n };\n}\n","import {\n PrivacyPoolSDK,\n decodeDecodedEphemeralKey,\n randomFrDecimal253,\n scalarHexToFrDecimal,\n type CoinData,\n type StateFile,\n} from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport { merkleRootBufferToFrDecimal } from '../merkle/field-decimal.js';\nimport {\n privateAddressSdk,\n recipientPublicKeysDecimalFromPrivateAddress,\n type SpendScalarDomain,\n} from '../private-address/codec.js';\nimport {\n proveWithdrawTransact,\n proveWithdrawTransactDual,\n} from '../proofs/withdraw/transact-proof.js';\nimport { Buffer } from 'buffer';\nimport {\n buildPublicDepositLegs,\n withTokenAddressPublicInputs,\n} from '../proofs/transaction-input.js';\nimport {\n buildPoolTransactionAuditParameters,\n resolvePoolApplicationId,\n} from '../audit/parameters.js';\nimport type { StellarBrowserAssets } from '../../types.js';\nimport {\n materializeSelectedZkCircuit,\n optionalZkArtifactBaseUrl,\n type StellarZkCircuitDefinition,\n} from '../zk/circuit-config.js';\nimport { DEFAULT_ZK_CONFIG_NONCE } from '../environment/zk-config-nonce.js';\nimport {\n buildApplicationIdHints,\n padDepositSlotsToLayout,\n padPublicLegsToLayout,\n padWithdrawSlotsToLayout,\n} from '../zk/slots.js';\nimport type {\n AlignedDepositSlot,\n ProofResult,\n ProofWithChange,\n} from '../pool/proof-types.js';\nimport { buildAlignedDepositSlotForSdk } from '../pool/aligned-deposit.js';\n\nexport class PrivacyPoolService {\n private sdk: PrivacyPoolSDK | undefined = undefined;\n private initPromise: Promise<void> | undefined = undefined;\n\n constructor(\n private readonly assets?: StellarBrowserAssets,\n private readonly applicationId?: string,\n private readonly auditPublicKey?: [string, string],\n private readonly zkCircuits?: Record<string, StellarZkCircuitDefinition>,\n private readonly zkConfigNonce?: bigint,\n private readonly zkArtifactBaseUrl?: string,\n ) {}\n\n private async ensureInit(): Promise<void> {\n if (this.sdk) {\n return;\n }\n if (this.initPromise) {\n return this.initPromise;\n }\n this.initPromise = (async () => {\n if (!this.assets) {\n throw new Error(\n 'PrivacyPoolService requires browser ZK assets before initialization.',\n );\n }\n const zkConfigNonce = this.zkConfigNonce ?? DEFAULT_ZK_CONFIG_NONCE;\n const zkCircuits = await materializeSelectedZkCircuit(\n this.zkCircuits,\n zkConfigNonce,\n this.zkArtifactBaseUrl,\n );\n this.sdk = await PrivacyPoolSDK.init({\n wasmBinary: this.assets.sdkWasm,\n zkCircuits,\n zkConfigNonce,\n ...optionalZkArtifactBaseUrl(this.zkArtifactBaseUrl),\n });\n })();\n return this.initPromise;\n }\n\n async getInitializedSdk(): Promise<PrivacyPoolSDK> {\n await this.ensureInit();\n if (!this.sdk) {\n throw new Error('SDK not initialized');\n }\n return this.sdk;\n }\n\n getAuditPublicKey(): [string, string] | undefined {\n return this.auditPublicKey;\n }\n\n getApplicationId(): string {\n return resolvePoolApplicationId(this.applicationId);\n }\n\n async generatePrivateAddressFromStellarSignature(\n signature: string,\n domain: SpendScalarDomain,\n ): Promise<string> {\n const sdk = await this.getInitializedSdk();\n return privateAddressSdk(sdk).generatePrivateAddressFromStellarSignature(\n signature,\n domain,\n );\n }\n\n async sharedSecretX(\n recipientScalarHex: string,\n ephemeralKeyEncoded: string,\n ): Promise<string> {\n const sdk = await this.getInitializedSdk();\n const ephemeralKey = decodeDecodedEphemeralKey(ephemeralKeyEncoded);\n const shared = sdk.sharedSecretFromRecipientPreimage({\n recipientScalar: recipientScalarHex,\n ephemeralKey,\n });\n return shared.x;\n }\n\n async buildAlignedDepositSlot(parameters: {\n privateAddressStpl1: string;\n amountStroops: bigint;\n tokenAddress: string;\n escrowNonce?: string;\n recipientHi?: string;\n recipientLo?: string;\n }) {\n const sdk = await this.getInitializedSdk();\n return buildAlignedDepositSlotForSdk(sdk, this.getApplicationId(), parameters);\n }\n\n async createAlignedShieldCoinData(parameters: {\n privateAddressStpl1: string;\n amountStroops: bigint;\n tokenAddress: string;\n }): Promise<Omit<AlignedDepositSlot, 'deposit'>> {\n const { commitment_hex, coin, depositScalarHex, precommitementHex } =\n await this.buildAlignedDepositSlot(parameters);\n return { commitment_hex, coin, depositScalarHex, precommitementHex };\n }\n\n async prepareDepositTransactProof(parameters: {\n privateAddressStpl1: string;\n coin: CoinData;\n depositScalarHex: string;\n merkleRootBytes: Buffer;\n tokenAddress: string;\n }): Promise<ProofResult> {\n const sdk = await this.getInitializedSdk();\n const stateRoot = merkleRootBufferToFrDecimal(parameters.merkleRootBytes);\n const recipientPublicKeys = recipientPublicKeysDecimalFromPrivateAddress(\n parameters.privateAddressStpl1,\n ) as [string, string];\n const applicationId = this.getApplicationId();\n const audit = buildPoolTransactionAuditParameters({\n applicationId,\n nAuditSlots: sdk.getLayout().nAuditSlots,\n ...(this.auditPublicKey ? { auditPublicKey: this.auditPublicKey } : {}),\n });\n const deposit = {\n value: parameters.coin.value,\n nullifier: parameters.coin.nullifier,\n ephemeralKeyScalar: scalarHexToFrDecimal(parameters.depositScalarHex),\n asset: [parameters.coin.asset_hi, parameters.coin.asset_lo] as [string, string],\n applicationId,\n recipientPublicKeys,\n };\n const publicInput = withTokenAddressPublicInputs(\n {\n stateRoot,\n privKeyScalar: randomFrDecimal253(),\n },\n parameters.tokenAddress,\n );\n const proof = await sdk.proveTransaction(\n publicInput as unknown as Parameters<typeof sdk.proveTransaction>[0],\n padPublicLegsToLayout(\n sdk,\n buildPublicDepositLegs(parameters.tokenAddress, parameters.coin.value),\n ),\n padWithdrawSlotsToLayout(sdk, []),\n padDepositSlotsToLayout(sdk, [deposit]),\n audit,\n );\n const applicationIdsPlaintext = buildApplicationIdHints({\n sdk,\n inputIds: [],\n outputIds: [applicationId],\n });\n return { ...proof, applicationIdsPlaintext };\n }\n\n async calculateNullifierHash(\n nullifier: string,\n privKeyScalar: string,\n ): Promise<string> {\n const sdk = await this.getInitializedSdk();\n return sdk.calculateNullifierHash(nullifier, privKeyScalar);\n }\n async prepareWithdrawTransactProof(parameters: {\n coin: CoinData;\n state: StateFile;\n destinationStellarAddress: string;\n privKeyScalarHex: string;\n depositorEphemeralKey: string;\n withdrawAmountStroops: bigint;\n changePrivateAddressStpl1: string | undefined;\n tokenAddress: string;\n }): Promise<ProofWithChange> {\n const sdk = await this.getInitializedSdk();\n return proveWithdrawTransact({\n sdk,\n applicationId: this.getApplicationId(),\n buildAlignedDepositSlot: (input) => this.buildAlignedDepositSlot(input),\n ...(this.auditPublicKey ? { auditPublicKey: this.auditPublicKey } : {}),\n ...parameters,\n });\n }\n async prepareWithdrawTransactProofDual(parameters: {\n coinA: CoinData;\n coinB: CoinData;\n state: StateFile;\n destinationStellarAddress: string;\n privKeyScalarHex: string;\n depositorEphemeralAKey: string;\n depositorEphemeralBKey: string;\n withdrawAmountStroops: bigint;\n changePrivateAddressStpl1: string | undefined;\n tokenAddress: string;\n }): Promise<ProofWithChange> {\n const sdk = await this.getInitializedSdk();\n return proveWithdrawTransactDual({\n sdk,\n applicationId: this.getApplicationId(),\n buildAlignedDepositSlot: (input) => this.buildAlignedDepositSlot(input),\n ...(this.auditPublicKey ? { auditPublicKey: this.auditPublicKey } : {}),\n coinA: parameters.coinA,\n coinB: parameters.coinB,\n state: parameters.state,\n destinationStellarAddress: parameters.destinationStellarAddress,\n privKeyScalarHex: parameters.privKeyScalarHex,\n ephemeralAKey: parameters.depositorEphemeralAKey,\n ephemeralBKey: parameters.depositorEphemeralBKey,\n withdrawAmountStroops: parameters.withdrawAmountStroops,\n changePrivateAddressStpl1: parameters.changePrivateAddressStpl1,\n tokenAddress: parameters.tokenAddress,\n });\n }\n}\n","import { Buffer } from 'buffer';\n\nconst BN254 =\n 21_888_242_871_839_275_222_246_405_745_257_275_088_548_364_400_416_034_343_698_204_186_575_808_495_617n;\nconst MERKLE_ROOT_BYTE_LENGTH = 32;\nconst DECIMAL_STRING_RADIX = 10;\n\nexport function merkleRootBufferToFrDecimal(root: Buffer): string {\n if (root.length !== MERKLE_ROOT_BYTE_LENGTH) {\n throw new Error(\n `expected ${MERKLE_ROOT_BYTE_LENGTH}-byte merkle root, got ${root.length}`,\n );\n }\n const hex = Buffer.from(root).toString('hex');\n return (BigInt(`0x${hex}`) % BN254).toString(DECIMAL_STRING_RADIX);\n}\n","import {\n buildStealthAddressSignMessage,\n decodeStealthAddress,\n encodeStealthAddress,\n recipientPublicKeysDecimalFromStealthAddress,\n} from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport type {\n PrivacyPoolSDK,\n SpendScalarDomain,\n} from '@arcanetech/stellar-privacy-pool-zk-sdk';\nexport { DEFAULT_STEALTH_SIGN_NONCE as DEFAULT_PRIVATE_ADDRESS_SIGN_NONCE } from '@arcanetech/stellar-privacy-pool-zk-sdk';\nexport {\n OWNER_BOUND_NOTE_SCHEMA_VERSION,\n spendScalarHexFromStellarSignature,\n} from '@arcanetech/stellar-privacy-pool-zk-sdk';\nexport type { SpendScalarDomain } from '@arcanetech/stellar-privacy-pool-zk-sdk';\n\ntype DecodedPrivateAddress = { x: string; y: string };\ntype PrivateAddressDecoder = (value: string) => DecodedPrivateAddress;\ntype PrivateAddressEncoder = (decoded: DecodedPrivateAddress) => string;\ntype PrivateAddressPublicKeyReader = (value: string) => unknown;\ntype PrivateAddressMessageBuilder = (\n publicKey: string,\n domain: SpendScalarDomain,\n nonce?: string,\n) => string;\ntype PrivateAddressGenerator = (\n signature: string,\n domain: SpendScalarDomain,\n) => string | Promise<string>;\n\ntype PrivateAddressSdk = {\n generatePrivateAddressFromStellarSignature: PrivateAddressGenerator;\n};\n\ntype PrivacyPoolSdkPrivateAddressMethods = {\n generateStealthAddressFromStellarSignature?: PrivateAddressGenerator;\n};\n\nexport function buildPrivateAddressSignMessage(\n publicKey: string,\n domain: SpendScalarDomain,\n nonce?: string,\n): string {\n const buildMessage: PrivateAddressMessageBuilder = buildStealthAddressSignMessage;\n if (nonce === undefined) {\n return buildMessage(publicKey, domain);\n }\n return buildMessage(publicKey, domain, nonce);\n}\n\nexport function decodePrivateAddress(value: string): DecodedPrivateAddress {\n const decodeAddress: PrivateAddressDecoder = decodeStealthAddress;\n return decodeAddress(value);\n}\n\nexport function encodePrivateAddress(decoded: DecodedPrivateAddress): string {\n const encodeAddress: PrivateAddressEncoder = encodeStealthAddress;\n return encodeAddress(decoded);\n}\n\nexport function encodePrivateAddressFromHexCoordinates(\n publicKeyXHex: string,\n publicKeyYHex: string,\n): string {\n return encodePrivateAddress(\n Object.fromEntries([\n ['x', publicKeyXHex],\n ['y', publicKeyYHex],\n ]) as DecodedPrivateAddress,\n );\n}\n\nexport function recipientPublicKeysDecimalFromPrivateAddress(value: string): unknown {\n const readPublicKeys: PrivateAddressPublicKeyReader =\n recipientPublicKeysDecimalFromStealthAddress;\n return readPublicKeys(value);\n}\n\nexport function privateAddressSdk(sdk: PrivacyPoolSDK): PrivateAddressSdk {\n const generator = (sdk as unknown as PrivacyPoolSdkPrivateAddressMethods)\n .generateStealthAddressFromStellarSignature;\n if (typeof generator !== 'function') {\n throw new TypeError(\n 'Missing privacy pool SDK method: generateStealthAddressFromStellarSignature',\n );\n }\n return {\n generatePrivateAddressFromStellarSignature: (signature, domain) =>\n generator.call(sdk, signature, domain),\n };\n}\n","import { withdrawObjectFromMerkleWitness } from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport type {\n CoinData,\n PrivacyPoolSDK,\n StateFile,\n} from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport { buildPublicWithdrawLegs } from '../../proofs/transaction-input.js';\nimport {\n buildApplicationIdHints,\n padDepositSlotsToLayout,\n padPublicLegsToLayout,\n padWithdrawSlotsToLayout,\n} from '../../zk/slots.js';\nimport { MIN_CONFIDENTIAL_TRANSFER_STROOPS } from '../../proofs/confidential/helpers.js';\nimport { buildPoolTransactionAuditParameters } from '../../audit/parameters.js';\nimport {\n buildWithdrawPublicInput,\n prepareDualWithdrawProofInputs,\n resolveWithdrawChangeDeposits,\n type AlignedDepositSlotBuilder,\n type DualWithdrawProofParameters,\n type WithdrawChangeCoin,\n} from '../../proofs/withdraw/helpers.js';\nimport type { KytApplicationIdHints } from '../../pool/proof-types.js';\nimport { privKeyScalarDecimalFromRecipientScalarHex } from '../../encoding/priv-key-scalar-from-recipient-hex.js';\n\nfunction validateSingleWithdrawAmounts(\n withdrawAmountStroops: bigint,\n noteStroops: bigint,\n): bigint {\n if (withdrawAmountStroops < MIN_CONFIDENTIAL_TRANSFER_STROOPS) {\n throw new Error('Withdraw amount must be positive');\n }\n if (withdrawAmountStroops > noteStroops) {\n throw new Error('Withdraw amount exceeds note value');\n }\n return noteStroops - withdrawAmountStroops;\n}\n\nasync function proveSingleWithdrawTransaction(parameters: {\n sdk: PrivacyPoolSDK;\n publicInput: ReturnType<typeof buildWithdrawPublicInput>;\n audit: ReturnType<typeof buildPoolTransactionAuditParameters>;\n primaryWithdraw: ReturnType<typeof withdrawObjectFromMerkleWitness>;\n deposits: Awaited<ReturnType<typeof resolveWithdrawChangeDeposits>>['deposits'];\n tokenAddress: string;\n withdrawAmountStroops: bigint;\n}) {\n return parameters.sdk.proveTransaction(\n parameters.publicInput as unknown as Parameters<\n typeof parameters.sdk.proveTransaction\n >[0],\n padPublicLegsToLayout(\n parameters.sdk,\n buildPublicWithdrawLegs(\n parameters.tokenAddress,\n parameters.withdrawAmountStroops.toString(),\n ),\n ),\n padWithdrawSlotsToLayout(parameters.sdk, [parameters.primaryWithdraw]),\n padDepositSlotsToLayout(parameters.sdk, parameters.deposits),\n parameters.audit,\n );\n}\n\nfunction buildPrimaryWithdrawForCoin(parameters: {\n sdk: PrivacyPoolSDK;\n applicationId: string;\n coin: CoinData;\n state: StateFile;\n privKeyScalarHex: string;\n}) {\n const witness = parameters.sdk.buildWithdrawMerkleWitness(\n parameters.coin,\n parameters.state,\n );\n const privKeyScalar = privKeyScalarDecimalFromRecipientScalarHex(\n parameters.privKeyScalarHex,\n );\n const ownerPubHex = parameters.sdk.ecdhEphemeralPublicKeyFromScalarHex(\n parameters.privKeyScalarHex,\n );\n const primaryWithdraw = withdrawObjectFromMerkleWitness(\n witness,\n ownerPubHex,\n parameters.applicationId,\n privKeyScalar,\n );\n return { witness, primaryWithdraw };\n}\n\ntype SingleWithdrawProofInputParams = {\n sdk: PrivacyPoolSDK;\n applicationId: string;\n buildAlignedDepositSlot: AlignedDepositSlotBuilder;\n coin: CoinData;\n state: StateFile;\n destinationStellarAddress: string;\n privKeyScalarHex: string;\n depositorEphemeralKey: string;\n withdrawAmountStroops: bigint;\n changePrivateAddressStpl1: string | undefined;\n tokenAddress: string;\n auditPublicKey?: [string, string];\n};\n\nasync function prepareSingleWithdrawProofInputs(\n parameters: SingleWithdrawProofInputParams,\n) {\n const changeStroops = validateSingleWithdrawAmounts(\n parameters.withdrawAmountStroops,\n BigInt(parameters.coin.value),\n );\n const { witness, primaryWithdraw } = buildPrimaryWithdrawForCoin({\n sdk: parameters.sdk,\n applicationId: parameters.applicationId,\n coin: parameters.coin,\n state: parameters.state,\n privKeyScalarHex: parameters.privKeyScalarHex,\n });\n const { deposits, changeCoin } = await resolveWithdrawChangeDeposits({\n changeStroops,\n changePrivateAddressStpl1: parameters.changePrivateAddressStpl1,\n buildAlignedDepositSlot: parameters.buildAlignedDepositSlot,\n tokenAddress: parameters.tokenAddress,\n });\n const publicInput = buildWithdrawPublicInput({\n stateRoot: witness.stateRoot,\n destinationStellarAddress: parameters.destinationStellarAddress,\n privKeyScalarHex: parameters.privKeyScalarHex,\n tokenAddress: parameters.tokenAddress,\n publicWithdrawalAmount: parameters.withdrawAmountStroops.toString(),\n });\n return {\n primaryWithdraw,\n deposits,\n changeCoin,\n publicInput,\n audit: buildPoolTransactionAuditParameters({\n applicationId: parameters.applicationId,\n nAuditSlots: parameters.sdk.getLayout().nAuditSlots,\n ...(parameters.auditPublicKey\n ? { auditPublicKey: parameters.auditPublicKey }\n : {}),\n }),\n };\n}\n\nexport async function proveWithdrawTransact(parameters: {\n sdk: PrivacyPoolSDK;\n applicationId: string;\n buildAlignedDepositSlot: AlignedDepositSlotBuilder;\n coin: CoinData;\n state: StateFile;\n destinationStellarAddress: string;\n privKeyScalarHex: string;\n depositorEphemeralKey: string;\n withdrawAmountStroops: bigint;\n changePrivateAddressStpl1: string | undefined;\n tokenAddress: string;\n auditPublicKey?: [string, string];\n}): Promise<{\n proof_hex: string;\n public_hex: string;\n ciphertext_hex?: string;\n output_note_ephemeral_scalars?: string[];\n applicationIdsPlaintext: KytApplicationIdHints;\n changeCoin?: WithdrawChangeCoin;\n}> {\n const { primaryWithdraw, deposits, changeCoin, publicInput, audit } =\n await prepareSingleWithdrawProofInputs(parameters);\n const proof = await proveSingleWithdrawTransaction({\n sdk: parameters.sdk,\n publicInput,\n audit,\n primaryWithdraw,\n deposits,\n tokenAddress: parameters.tokenAddress,\n withdrawAmountStroops: parameters.withdrawAmountStroops,\n });\n return {\n ...proof,\n applicationIdsPlaintext: buildApplicationIdHints({\n sdk: parameters.sdk,\n inputIds: [parameters.applicationId],\n outputIds: [changeCoin ? parameters.applicationId : '0'],\n }),\n ...(changeCoin ? { changeCoin } : {}),\n };\n}\n\nexport async function proveWithdrawTransactDual(\n parameters: DualWithdrawProofParameters & { applicationId: string },\n): Promise<{\n proof_hex: string;\n public_hex: string;\n ciphertext_hex?: string;\n output_note_ephemeral_scalars?: string[];\n applicationIdsPlaintext: KytApplicationIdHints;\n changeCoin?: WithdrawChangeCoin;\n}> {\n const { publicInput, audit, withdrawLegs, deposits, changeCoin } =\n await prepareDualWithdrawProofInputs(parameters);\n const proof = await parameters.sdk.proveTransaction(\n publicInput as unknown as Parameters<typeof parameters.sdk.proveTransaction>[0],\n padPublicLegsToLayout(\n parameters.sdk,\n buildPublicWithdrawLegs(\n parameters.tokenAddress,\n parameters.withdrawAmountStroops.toString(),\n ),\n ),\n padWithdrawSlotsToLayout(parameters.sdk, withdrawLegs),\n padDepositSlotsToLayout(parameters.sdk, deposits),\n audit,\n );\n return {\n ...proof,\n applicationIdsPlaintext: buildApplicationIdHints({\n sdk: parameters.sdk,\n inputIds: [audit.applicationId, audit.applicationId],\n outputIds: [changeCoin ? audit.applicationId : '0'],\n }),\n ...(changeCoin ? { changeCoin } : {}),\n };\n}\n\nexport { type AlignedDepositSlotBuilder } from '../../proofs/withdraw/helpers.js';\n","import { Buffer } from 'buffer';\nimport { StrKey } from '@stellar/stellar-sdk';\nimport { resolveTokenContractId } from '../stellar/token-contract.js';\n\nexport interface TransactionPublicLegParameters {\n publicWithdrawnAssets: Array<[string, string]>;\n publicDepositedAssets: Array<[string, string]>;\n publicDeposits: string[];\n publicWithdrawals: string[];\n}\n\ntype BasePublicInput = {\n stateRoot: string;\n withdrawAddressHi?: string;\n withdrawAddressLo?: string;\n privKeyScalar: string;\n escrowRecipientHi?: string;\n escrowRecipientLo?: string;\n sweepOutputOwnerPubX?: string;\n sweepOutputOwnerPubY?: string;\n};\n\nconst ZERO_PUBLIC_WITHDRAW_ADDRESS = {\n withdrawAddressHi: '0',\n withdrawAddressLo: '0',\n} as const;\n\nconst CONTRACT_ADDRESS_HALF_BYTES = 16;\nconst CONTRACT_ADDRESS_BYTES = 32;\n\nfunction bytes16ToDecimal(bytes: Uint8Array): string {\n return BigInt(`0x${Buffer.from(bytes).toString('hex')}`).toString();\n}\n\nfunction decimalToBytes16(value: string): Buffer {\n const hex = BigInt(value)\n .toString(16)\n .padStart(CONTRACT_ADDRESS_HALF_BYTES * 2, '0');\n if (hex.length > CONTRACT_ADDRESS_HALF_BYTES * 2) {\n throw new Error('Asset leg does not fit into 16 bytes.');\n }\n return Buffer.from(hex, 'hex');\n}\n\nfunction tokenAddressFrParts(tokenAddress: string): { hi: string; lo: string } {\n const normalized = resolveTokenContractId(tokenAddress);\n const payload = StrKey.decodeContract(normalized);\n const hi = bytes16ToDecimal(payload.subarray(0, CONTRACT_ADDRESS_HALF_BYTES));\n const lo = bytes16ToDecimal(\n payload.subarray(CONTRACT_ADDRESS_HALF_BYTES, CONTRACT_ADDRESS_BYTES),\n );\n return { hi, lo };\n}\n\nexport function withTokenAddressPublicInputs(\n base: BasePublicInput,\n tokenAddress: string,\n): Record<string, string> {\n const { hi, lo } = tokenAddressFrParts(tokenAddress);\n return {\n ...base,\n tokenAddressHi: hi,\n tokenAddressLo: lo,\n withdrawAddressHi:\n base.withdrawAddressHi ?? ZERO_PUBLIC_WITHDRAW_ADDRESS.withdrawAddressHi,\n withdrawAddressLo:\n base.withdrawAddressLo ?? ZERO_PUBLIC_WITHDRAW_ADDRESS.withdrawAddressLo,\n escrowRecipientHi: base.escrowRecipientHi ?? '0',\n escrowRecipientLo: base.escrowRecipientLo ?? '0',\n sweepOutputOwnerPubX: base.sweepOutputOwnerPubX ?? '0',\n sweepOutputOwnerPubY: base.sweepOutputOwnerPubY ?? '0',\n };\n}\n\nexport function publicWithdrawAddressLimbs(parameters: {\n publicWithdrawalAmount: string;\n destinationHi: string;\n destinationLo: string;\n}): {\n withdrawAddressHi: string;\n withdrawAddressLo: string;\n} {\n if (parameters.publicWithdrawalAmount === '0') {\n return {\n withdrawAddressHi: ZERO_PUBLIC_WITHDRAW_ADDRESS.withdrawAddressHi,\n withdrawAddressLo: ZERO_PUBLIC_WITHDRAW_ADDRESS.withdrawAddressLo,\n };\n }\n return {\n withdrawAddressHi: parameters.destinationHi,\n withdrawAddressLo: parameters.destinationLo,\n };\n}\n\nexport function tokenAddressToAssetLeg(tokenAddress: string): [string, string] {\n const { hi, lo } = tokenAddressFrParts(tokenAddress);\n return [hi, lo];\n}\n\nexport function assetLegToTokenAddress(assetHi: string, assetLo: string): string {\n const payload = Buffer.concat([decimalToBytes16(assetHi), decimalToBytes16(assetLo)]);\n return StrKey.encodeContract(payload);\n}\n\nexport function buildZeroPublicLegs(\n publicNInputs = 1,\n publicNOutputs = 1,\n): TransactionPublicLegParameters {\n return {\n publicWithdrawnAssets: Array.from(\n { length: publicNOutputs },\n () => ['0', '0'] as [string, string],\n ),\n publicDepositedAssets: Array.from(\n { length: publicNInputs },\n () => ['0', '0'] as [string, string],\n ),\n publicDeposits: Array.from({ length: publicNInputs }, () => '0'),\n publicWithdrawals: Array.from({ length: publicNOutputs }, () => '0'),\n };\n}\n\nexport function buildPublicDepositLegs(\n tokenAddress: string,\n amount: string,\n publicNInputs = 1,\n publicNOutputs = 1,\n): TransactionPublicLegParameters {\n const legs = buildZeroPublicLegs(publicNInputs, publicNOutputs);\n return {\n ...legs,\n publicDepositedAssets: [\n tokenAddressToAssetLeg(tokenAddress),\n ...legs.publicDepositedAssets.slice(1),\n ],\n publicDeposits: [amount, ...legs.publicDeposits.slice(1)],\n };\n}\n\nexport function buildPublicWithdrawLegs(\n tokenAddress: string,\n amount: string,\n publicNInputs = 1,\n publicNOutputs = 1,\n): TransactionPublicLegParameters {\n const legs = buildZeroPublicLegs(publicNInputs, publicNOutputs);\n return {\n ...legs,\n publicWithdrawnAssets: [\n tokenAddressToAssetLeg(tokenAddress),\n ...legs.publicWithdrawnAssets.slice(1),\n ],\n publicWithdrawals: [amount, ...legs.publicWithdrawals.slice(1)],\n };\n}\n","import { Buffer } from 'buffer';\nimport { StrKey } from '@stellar/stellar-sdk';\n\nconst CONTRACT_ID_BYTE_LENGTH = 32;\nconst HEX_CHARS_PER_BYTE = 2;\nconst CONTRACT_ID_HEX_CHAR_LENGTH = CONTRACT_ID_BYTE_LENGTH * HEX_CHARS_PER_BYTE;\nconst CONTRACT_ID_HEX = /^(?:0x)?([0-9a-f]{64})$/i;\n\nfunction encodeContractFromHex(hexPayload: string): string {\n return StrKey.encodeContract(Buffer.from(hexPayload, 'hex'));\n}\n\nfunction normalizeSorobanContractId(raw: string): string {\n const trimmed = raw.trim();\n if (trimmed.length === 0) {\n throw new Error('Contract ID is empty');\n }\n if (StrKey.isValidContract(trimmed)) {\n return trimmed;\n }\n const hexMatch = CONTRACT_ID_HEX.exec(trimmed);\n const hexPayload = hexMatch?.[1];\n if (hexPayload !== undefined && hexPayload.length === CONTRACT_ID_HEX_CHAR_LENGTH) {\n return encodeContractFromHex(hexPayload);\n }\n throw new Error(`Invalid Soroban contract address: ${trimmed}`);\n}\n\nexport function resolveTokenContractId(\n tokenContractRaw: string | null | undefined,\n): string {\n const raw = tokenContractRaw?.trim();\n if (!raw) {\n throw new Error('Selected asset has no client contract');\n }\n return normalizeSorobanContractId(raw);\n}\n","import {\n padDepositSlots,\n padPublicLegs,\n padWithdrawSlots,\n type DepositSlot,\n type PrivacyPoolSDK,\n type WithdrawSlot,\n} from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport type { TransactionPublicLegParameters } from '../proofs/transaction-input.js';\n\nexport function padWithdrawSlotsToLayout(\n sdk: PrivacyPoolSDK,\n slots: WithdrawSlot[],\n): WithdrawSlot[] {\n return padWithdrawSlots(slots, sdk.getLayout().nIns);\n}\n\nexport function padDepositSlotsToLayout(\n sdk: PrivacyPoolSDK,\n slots: DepositSlot[],\n): DepositSlot[] {\n return padDepositSlots(slots, sdk.getLayout().nOuts);\n}\n\nexport function padPublicLegsToLayout(\n sdk: PrivacyPoolSDK,\n legs: TransactionPublicLegParameters,\n): TransactionPublicLegParameters {\n const { publicNInputs, publicNOutputs } = sdk.getLayout();\n return padPublicLegs(legs, publicNInputs, publicNOutputs);\n}\n\nfunction padStrings(values: string[], length: number, fill: string): string[] {\n if (values.length > length) {\n throw new Error(\n `expected at most ${String(length)} application-id slots, got ${String(values.length)}`,\n );\n }\n return [...values, ...Array.from({ length: length - values.length }, () => fill)];\n}\n\nexport function buildApplicationIdHints(input: {\n sdk: PrivacyPoolSDK;\n inputIds: string[];\n outputIds: string[];\n}): string[] {\n const { nIns, nOuts } = input.sdk.getLayout();\n return [\n ...padStrings(input.inputIds, nIns, '0'),\n ...padStrings(input.outputIds, nOuts, '0'),\n ];\n}\n\nexport function uniformApplicationIdHints(\n applicationId: string,\n nAuditSlots: number,\n): string[] {\n return Array.from({ length: nAuditSlots }, () => applicationId);\n}\n","import { withdrawObjectFromMerkleWitness } from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport type {\n CoinData,\n PrivacyPoolSDK,\n StateFile,\n} from '@arcanetech/stellar-privacy-pool-zk-sdk';\n\nexport const MIN_CONFIDENTIAL_TRANSFER_STROOPS = 1n;\nexport const ZERO_STROOPS = 0n;\n\nexport function withdrawWitnessForCoin(parameters: {\n sdk: PrivacyPoolSDK;\n coin: CoinData;\n state: StateFile;\n ownerPubHex: { x: string; y: string };\n privKeyScalar: string;\n applicationId: string;\n}) {\n const { sdk, coin, state } = parameters;\n const witness = sdk.buildWithdrawMerkleWitness(coin, state);\n const withdrawApplicationId = coin.application_id ?? parameters.applicationId;\n const withdrawObject = withdrawObjectFromMerkleWitness(\n witness,\n parameters.ownerPubHex,\n withdrawApplicationId,\n parameters.privKeyScalar,\n );\n return { witness, withdrawObject };\n}\n\nexport function dualWithdrawLegsWithSharedRoot(parameters: {\n sdk: PrivacyPoolSDK;\n coinA: CoinData;\n coinB: CoinData;\n state: StateFile;\n ownerPubHex: { x: string; y: string };\n privKeyScalar: string;\n applicationId: string;\n}) {\n const legA = withdrawWitnessForCoin({\n sdk: parameters.sdk,\n coin: parameters.coinA,\n state: parameters.state,\n ownerPubHex: parameters.ownerPubHex,\n privKeyScalar: parameters.privKeyScalar,\n applicationId: parameters.applicationId,\n });\n const legB = withdrawWitnessForCoin({\n sdk: parameters.sdk,\n coin: parameters.coinB,\n state: parameters.state,\n ownerPubHex: parameters.ownerPubHex,\n privKeyScalar: parameters.privKeyScalar,\n applicationId: parameters.applicationId,\n });\n if (legA.witness.stateRoot !== legB.witness.stateRoot) {\n throw new Error('Merkle state root mismatch between input coins');\n }\n return { legA, legB };\n}\n\nexport function requireChangeRecipientWhenPartial(\n changeStroops: bigint,\n selfPrivateAddressStpl1ForChange: string | undefined,\n): void {\n if (changeStroops > ZERO_STROOPS) {\n const stpl1 = selfPrivateAddressStpl1ForChange?.trim() ?? '';\n if (!stpl1) {\n throw new Error(\n 'Private address is required to receive the remaining balance after a partial transfer',\n );\n }\n }\n}\n\nexport function changeStroopsAfterDualTransfer(\n transferStroops: bigint,\n totalNotes: bigint,\n): bigint {\n if (transferStroops < MIN_CONFIDENTIAL_TRANSFER_STROOPS) {\n throw new Error('Transfer amount must be positive');\n }\n if (transferStroops > totalNotes) {\n throw new Error('Transfer amount exceeds combined note value');\n }\n return totalNotes - transferStroops;\n}\n","import {\n DEMO_AUDIT_PUBLIC_KEY,\n resolveTransactionAuditParams,\n type AuditPublicKey,\n type TransactionAuditParams,\n} from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport { Buffer } from 'buffer';\n\nconst UNCOMPRESSED_PREFIX = '04';\nconst UNCOMPRESSED_HEX_LENGTH = 130;\nconst XY_HEX_LENGTH = 128;\nconst X_OFFSET_END = 32;\nconst Y_OFFSET_START = 32;\nconst Y_OFFSET_END = 64;\nconst DECIMAL_RADIX = 10;\nconst BN254_FR_MODULUS =\n 21_888_242_871_839_275_222_246_405_745_257_275_088_548_364_400_416_034_343_698_204_186_575_808_495_617n;\nconst BABYJUBJUB_A = 168_700n;\nconst BABYJUBJUB_D = 168_696n;\nconst BABYJUB_CURVE_ONE = 1n;\n\nfunction passesBabyJubCurveCheck(coordinateX: bigint, coordinateY: bigint): boolean {\n const xSquared = (coordinateX * coordinateX) % BN254_FR_MODULUS;\n const ySquared = (coordinateY * coordinateY) % BN254_FR_MODULUS;\n const lhs = (BABYJUBJUB_A * xSquared + ySquared) % BN254_FR_MODULUS;\n const rhs =\n (BABYJUB_CURVE_ONE + BABYJUBJUB_D * xSquared * ySquared) % BN254_FR_MODULUS;\n return lhs === rhs;\n}\n\nexport function parseAuditPublicKeyFromEnvHex(raw: string): AuditPublicKey {\n const normalized = raw.replace(/^0x/i, '');\n const payload =\n normalized.length === UNCOMPRESSED_HEX_LENGTH &&\n normalized.startsWith(UNCOMPRESSED_PREFIX)\n ? normalized.slice(UNCOMPRESSED_PREFIX.length)\n : normalized;\n if (payload.length !== XY_HEX_LENGTH || !/^[\\da-fA-F]+$/.test(payload)) {\n throw new Error(\n 'Audit public key must be uncompressed 65-byte hex (04 + X + Y) or 64-byte X+Y hex',\n );\n }\n const bytes = Buffer.from(payload, 'hex');\n const auditPublicKeyXDecimal = BigInt(\n `0x${bytes.subarray(0, X_OFFSET_END).toString('hex')}`,\n ).toString(DECIMAL_RADIX);\n const auditPublicKeyYDecimal = BigInt(\n `0x${bytes.subarray(Y_OFFSET_START, Y_OFFSET_END).toString('hex')}`,\n ).toString(DECIMAL_RADIX);\n if (\n !passesBabyJubCurveCheck(\n BigInt(auditPublicKeyXDecimal),\n BigInt(auditPublicKeyYDecimal),\n )\n ) {\n throw new Error('Audit public key is not a valid BabyJubJub point.');\n }\n return [auditPublicKeyXDecimal, auditPublicKeyYDecimal];\n}\n\nexport function buildPoolTransactionAuditParameters(input: {\n applicationId: string;\n auditPublicKey?: AuditPublicKey;\n nAuditSlots?: number;\n}): TransactionAuditParams {\n return resolveTransactionAuditParams(\n input.applicationId,\n input.auditPublicKey ?? DEMO_AUDIT_PUBLIC_KEY,\n input.nAuditSlots,\n );\n}\n\nexport function resolvePoolApplicationId(applicationId: string | undefined): string {\n const trimmed = applicationId?.trim();\n if (!trimmed) {\n throw new Error(\n 'Privacy pool applicationId is required. Pass it in client factory config.',\n );\n }\n return trimmed;\n}\n","import { ed25519PubkeyPayloadHexToWithdrawFrDecimals } from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport type {\n CoinData,\n DepositObject,\n DepositSlot,\n PrivacyPoolSDK,\n StateFile,\n WithdrawObject,\n} from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport {\n dualWithdrawLegsWithSharedRoot,\n MIN_CONFIDENTIAL_TRANSFER_STROOPS,\n requireChangeRecipientWhenPartial,\n ZERO_STROOPS,\n} from '../../proofs/confidential/helpers.js';\nimport { ed25519PublicKeyHexFromStellarAccount } from '../../stellar/account.js';\nimport { privKeyScalarDecimalFromRecipientScalarHex } from '../../encoding/priv-key-scalar-from-recipient-hex.js';\nimport {\n publicWithdrawAddressLimbs,\n withTokenAddressPublicInputs,\n} from '../../proofs/transaction-input.js';\nimport { buildPoolTransactionAuditParameters } from '../../audit/parameters.js';\nimport type { TransactionAuditParams } from '@arcanetech/stellar-privacy-pool-zk-sdk';\n\nexport type AlignedDepositSlotBuilder = (parameters: {\n privateAddressStpl1: string;\n amountStroops: bigint;\n tokenAddress: string;\n}) => Promise<{\n deposit: DepositObject;\n commitment_hex: string;\n coin: CoinData;\n depositScalarHex: string;\n precommitementHex: string;\n}>;\n\nexport type WithdrawChangeCoin = {\n commitment_hex: string;\n coin: CoinData;\n depositScalarHex: string;\n precommitementHex: string;\n};\n\nexport type DualWithdrawProofParameters = {\n sdk: PrivacyPoolSDK;\n buildAlignedDepositSlot: AlignedDepositSlotBuilder;\n coinA: CoinData;\n coinB: CoinData;\n state: StateFile;\n destinationStellarAddress: string;\n privKeyScalarHex: string;\n ephemeralAKey: string;\n ephemeralBKey: string;\n withdrawAmountStroops: bigint;\n changePrivateAddressStpl1: string | undefined;\n tokenAddress: string;\n auditPublicKey?: [string, string];\n};\n\nfunction destinationWithdrawFrAndScalar(parameters: {\n destinationStellarAddress: string;\n privKeyScalarHex: string;\n}): {\n hi: string;\n lo: string;\n privKeyScalar: string;\n} {\n const pkHex = ed25519PublicKeyHexFromStellarAccount(\n parameters.destinationStellarAddress,\n );\n const { hi, lo } = ed25519PubkeyPayloadHexToWithdrawFrDecimals(pkHex);\n const privKeyScalar = privKeyScalarDecimalFromRecipientScalarHex(\n parameters.privKeyScalarHex,\n );\n return { hi, lo, privKeyScalar };\n}\n\nexport function buildWithdrawPublicInput(parameters: {\n stateRoot: string;\n destinationStellarAddress: string;\n privKeyScalarHex: string;\n tokenAddress: string;\n publicWithdrawalAmount: string;\n}): ReturnType<typeof withTokenAddressPublicInputs> {\n const { hi, lo, privKeyScalar } = destinationWithdrawFrAndScalar({\n destinationStellarAddress: parameters.destinationStellarAddress,\n privKeyScalarHex: parameters.privKeyScalarHex,\n });\n return withTokenAddressPublicInputs(\n {\n stateRoot: parameters.stateRoot,\n ...publicWithdrawAddressLimbs({\n publicWithdrawalAmount: parameters.publicWithdrawalAmount,\n destinationHi: hi,\n destinationLo: lo,\n }),\n privKeyScalar,\n },\n parameters.tokenAddress,\n );\n}\n\nexport async function resolveWithdrawChangeDeposits(parameters: {\n changeStroops: bigint;\n changePrivateAddressStpl1: string | undefined;\n buildAlignedDepositSlot: AlignedDepositSlotBuilder;\n tokenAddress: string;\n}): Promise<{\n deposits: DepositSlot[];\n changeCoin?: WithdrawChangeCoin;\n}> {\n if (parameters.changeStroops <= ZERO_STROOPS) {\n return { deposits: [] };\n }\n const stpl1 = parameters.changePrivateAddressStpl1?.trim() ?? '';\n if (!stpl1) {\n throw new Error(\n 'Private address is required to return the unused balance to the pool (partial withdraw)',\n );\n }\n const slot = await parameters.buildAlignedDepositSlot({\n privateAddressStpl1: stpl1,\n amountStroops: parameters.changeStroops,\n tokenAddress: parameters.tokenAddress,\n });\n return {\n deposits: [slot.deposit],\n changeCoin: {\n commitment_hex: slot.commitment_hex,\n coin: slot.coin,\n depositScalarHex: slot.depositScalarHex,\n precommitementHex: slot.precommitementHex,\n },\n };\n}\n\nfunction validateDualWithdrawAmounts(\n withdrawAmountStroops: bigint,\n totalNotes: bigint,\n changePrivateAddressStpl1: string | undefined,\n): bigint {\n if (withdrawAmountStroops < MIN_CONFIDENTIAL_TRANSFER_STROOPS) {\n throw new Error('Withdraw amount must be positive');\n }\n if (withdrawAmountStroops > totalNotes) {\n throw new Error('Withdraw amount exceeds combined note value');\n }\n const changeStroops = totalNotes - withdrawAmountStroops;\n requireChangeRecipientWhenPartial(changeStroops, changePrivateAddressStpl1);\n return changeStroops;\n}\n\nfunction buildDualWithdrawPublicInput(parameters: {\n destinationStellarAddress: string;\n privKeyScalarHex: string;\n tokenAddress: string;\n stateRoot: string;\n publicWithdrawalAmount: string;\n}): ReturnType<typeof withTokenAddressPublicInputs> {\n return buildWithdrawPublicInput({\n stateRoot: parameters.stateRoot,\n destinationStellarAddress: parameters.destinationStellarAddress,\n privKeyScalarHex: parameters.privKeyScalarHex,\n tokenAddress: parameters.tokenAddress,\n publicWithdrawalAmount: parameters.publicWithdrawalAmount,\n });\n}\n\ntype DualWithdrawProofInputs = {\n publicInput: ReturnType<typeof withTokenAddressPublicInputs>;\n audit: TransactionAuditParams;\n withdrawLegs: [WithdrawObject, WithdrawObject];\n deposits: DepositSlot[];\n changeCoin?: WithdrawChangeCoin;\n};\n\nexport async function prepareDualWithdrawProofInputs(\n parameters: DualWithdrawProofParameters & { applicationId: string },\n): Promise<DualWithdrawProofInputs> {\n const changeStroops = validateDualWithdrawAmounts(\n parameters.withdrawAmountStroops,\n BigInt(parameters.coinA.value) + BigInt(parameters.coinB.value),\n parameters.changePrivateAddressStpl1,\n );\n const { legA, legB } = dualWithdrawLegsWithSharedRoot({\n sdk: parameters.sdk,\n coinA: parameters.coinA,\n coinB: parameters.coinB,\n state: parameters.state,\n ownerPubHex: parameters.sdk.ecdhEphemeralPublicKeyFromScalarHex(\n parameters.privKeyScalarHex,\n ),\n privKeyScalar: privKeyScalarDecimalFromRecipientScalarHex(\n parameters.privKeyScalarHex,\n ),\n applicationId: parameters.applicationId,\n });\n const { deposits, changeCoin } = await resolveWithdrawChangeDeposits({\n changeStroops,\n changePrivateAddressStpl1: parameters.changePrivateAddressStpl1,\n buildAlignedDepositSlot: parameters.buildAlignedDepositSlot,\n tokenAddress: parameters.tokenAddress,\n });\n const publicInput = buildDualWithdrawPublicInput({\n destinationStellarAddress: parameters.destinationStellarAddress,\n privKeyScalarHex: parameters.privKeyScalarHex,\n tokenAddress: parameters.tokenAddress,\n stateRoot: legA.witness.stateRoot,\n publicWithdrawalAmount: parameters.withdrawAmountStroops.toString(),\n });\n const audit = buildPoolTransactionAuditParameters({\n applicationId: parameters.applicationId,\n nAuditSlots: parameters.sdk.getLayout().nAuditSlots,\n ...(parameters.auditPublicKey ? { auditPublicKey: parameters.auditPublicKey } : {}),\n });\n return {\n publicInput,\n audit,\n deposits,\n withdrawLegs: [legA.withdrawObject, legB.withdrawObject],\n ...(changeCoin ? { changeCoin } : {}),\n };\n}\n","import { StrKey } from '@stellar/stellar-sdk';\nimport { Buffer } from 'buffer';\n\nconst MUXED_ACCOUNT_ID_BYTE_LENGTH = 8;\nconst ED25519_PUBLIC_KEY_BYTE_LENGTH = 32;\n\nfunction ed25519HexFromGAddress(trimmed: string): string | undefined {\n try {\n const raw = StrKey.decodeEd25519PublicKey(trimmed);\n return Buffer.from(raw).toString('hex');\n } catch {\n return undefined;\n }\n}\n\nfunction ed25519HexFromMuxedAddress(trimmed: string): string | undefined {\n try {\n const raw = StrKey.decodeMed25519PublicKey(trimmed);\n if (raw.length === MUXED_ACCOUNT_ID_BYTE_LENGTH + ED25519_PUBLIC_KEY_BYTE_LENGTH) {\n return raw.subarray(MUXED_ACCOUNT_ID_BYTE_LENGTH).toString('hex');\n }\n if (raw.length === ED25519_PUBLIC_KEY_BYTE_LENGTH) {\n return raw.toString('hex');\n }\n return undefined;\n } catch {\n return undefined;\n }\n}\n\nexport function ed25519PublicKeyHexFromStellarAccount(address: string): string {\n const trimmed = address.trim();\n const fromG = ed25519HexFromGAddress(trimmed);\n if (fromG !== undefined) {\n return fromG;\n }\n const fromMuxed = ed25519HexFromMuxedAddress(trimmed);\n if (fromMuxed !== undefined) {\n return fromMuxed;\n }\n throw new Error('Invalid destination Stellar address');\n}\n","import { canonicalBabyJubScalarFromInteger } from '@arcanetech/stellar-privacy-pool-zk-sdk';\n\nconst SCALAR_HEX_CHAR_LENGTH = 64;\nconst DECIMAL_RADIX = 10;\n\nfunction normalizeRecipientScalarHex(hexInput: string): string {\n const trimmed = hexInput.trim().replace(/^0x/iu, '');\n if (!/^[0-9a-f]*$/iu.test(trimmed)) {\n throw new Error('recipient scalar hex must be hexadecimal');\n }\n const withLeadingNibble = trimmed.length % 2 === 0 ? trimmed : `0${trimmed}`;\n const lower = withLeadingNibble.toLowerCase();\n const padded = lower\n .padStart(SCALAR_HEX_CHAR_LENGTH, '0')\n .slice(-SCALAR_HEX_CHAR_LENGTH);\n if (padded.length !== SCALAR_HEX_CHAR_LENGTH) {\n throw new Error(\n `recipient scalar hex must fit 32 bytes (${SCALAR_HEX_CHAR_LENGTH} hex chars)`,\n );\n }\n return padded;\n}\n\nexport function privKeyScalarDecimalFromRecipientScalarHex(hexInput: string): string {\n const hex = normalizeRecipientScalarHex(hexInput);\n const value = BigInt(`0x${hex}`);\n return canonicalBabyJubScalarFromInteger(value).toString(DECIMAL_RADIX);\n}\n","import {\n BundledZkCircuit,\n type BundledZkCircuitConfig,\n type DevZkCircuitConfig,\n type ZkCircuitConfig,\n type ZkCircuitLayoutFields,\n} from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport {\n BINDING_ZK_NONCE,\n SIX_BY_SIX_BINDING_ZK_NONCE,\n} from '../environment/zk-config-nonce.js';\nimport {\n fetchArrayBufferWithBrowserCache,\n isBrowserCacheApiAvailable,\n} from './browser-artifact-cache.js';\nimport { materializeBundledCircuitWithBrowserCache } from './prefetch-bundled-circuit.js';\n\nexport { BundledZkCircuit } from '@arcanetech/stellar-privacy-pool-zk-sdk';\n\nexport type StellarBundledZkCircuitDefinition = ZkCircuitLayoutFields & {\n circuit: BundledZkCircuit;\n};\n\nexport type StellarCustomZkCircuitDefinition = ZkCircuitLayoutFields & {\n zkeyUrl: string;\n circuitGraphUrl: string;\n r1csUrl: string;\n provingKeyUrl: string;\n};\n\nexport type StellarZkCircuitDefinition =\n StellarBundledZkCircuitDefinition | StellarCustomZkCircuitDefinition;\n\nexport const DEFAULT_STELLAR_ZK_CIRCUITS: Record<\n string,\n StellarBundledZkCircuitDefinition\n> = {\n [BINDING_ZK_NONCE.toString()]: {\n nIns: 2,\n nOuts: 2,\n publicNInputs: 1,\n publicNOutputs: 1,\n circuit: BundledZkCircuit.TwoByTwo,\n },\n [SIX_BY_SIX_BINDING_ZK_NONCE.toString()]: {\n nIns: 6,\n nOuts: 6,\n publicNInputs: 1,\n publicNOutputs: 1,\n circuit: BundledZkCircuit.SixBySix,\n },\n};\n\nfunction isBundledDefinition(\n definition: StellarZkCircuitDefinition,\n): definition is StellarBundledZkCircuitDefinition {\n return 'circuit' in definition;\n}\n\nfunction bundledConfig(\n definition: StellarBundledZkCircuitDefinition,\n): BundledZkCircuitConfig {\n return {\n nIns: definition.nIns,\n nOuts: definition.nOuts,\n publicNInputs: definition.publicNInputs,\n publicNOutputs: definition.publicNOutputs,\n circuit: definition.circuit,\n };\n}\n\nasync function materializeCustomDefinition(\n definition: StellarCustomZkCircuitDefinition,\n): Promise<DevZkCircuitConfig> {\n const [zkey, circuitGraph, r1cs, provingKey] = await Promise.all([\n fetchArrayBufferWithBrowserCache(definition.zkeyUrl),\n fetchArrayBufferWithBrowserCache(definition.circuitGraphUrl),\n fetchArrayBufferWithBrowserCache(definition.r1csUrl),\n fetchArrayBufferWithBrowserCache(definition.provingKeyUrl),\n ]);\n return {\n nIns: definition.nIns,\n nOuts: definition.nOuts,\n publicNInputs: definition.publicNInputs,\n publicNOutputs: definition.publicNOutputs,\n zkey,\n circuitGraph,\n r1cs,\n provingKey,\n };\n}\n\nasync function materializeDefinition(\n definition: StellarZkCircuitDefinition,\n zkArtifactBaseUrl?: string,\n): Promise<ZkCircuitConfig> {\n if (!isBundledDefinition(definition)) {\n return materializeCustomDefinition(definition);\n }\n if (isBrowserCacheApiAvailable()) {\n return materializeBundledCircuitWithBrowserCache(definition, zkArtifactBaseUrl);\n }\n return bundledConfig(definition);\n}\n\nexport async function materializeSelectedZkCircuit(\n circuits: Record<string, StellarZkCircuitDefinition> | undefined,\n nonce: bigint,\n zkArtifactBaseUrl?: string,\n): Promise<Record<string, ZkCircuitConfig>> {\n const map = stellarCircuitsOrDefault(circuits);\n const key = nonce.toString();\n const definition = Object.entries(map).find(([nonceKey]) => nonceKey === key)?.[1];\n if (!definition) {\n throw new Error(`no zk circuit configured for nonce ${key}`);\n }\n return { [key]: await materializeDefinition(definition, zkArtifactBaseUrl) };\n}\n\nfunction stellarCircuitsOrDefault(\n circuits: Record<string, StellarZkCircuitDefinition> | undefined,\n): Record<string, StellarZkCircuitDefinition> {\n return circuits ?? DEFAULT_STELLAR_ZK_CIRCUITS;\n}\n\nexport function optionalZkArtifactBaseUrl(value: string | undefined): {\n zkArtifactBaseUrl?: string;\n} {\n if (value === undefined) {\n return {};\n }\n const trimmed = value.trim();\n if (trimmed === '') {\n return {};\n }\n let withoutSlash = trimmed;\n while (withoutSlash.endsWith('/')) {\n withoutSlash = withoutSlash.slice(0, -1);\n }\n return { zkArtifactBaseUrl: withoutSlash };\n}\n","import type { StellarTransactEnvironment } from './types.js';\n\nexport const STANDARD_ZK_CONFIG_NONCE = 0n;\nexport const COMMITMENT_V2_ZK_NONCE = 2n;\nexport const BINDING_ZK_NONCE = 3n;\nexport const SIX_BY_SIX_ZK_NONCE = 6n;\nexport const SIX_BY_SIX_BINDING_ZK_NONCE = 7n;\nexport const DEFAULT_ZK_CONFIG_NONCE = BINDING_ZK_NONCE;\n\nexport function resolveZkConfigNonce(\n transactEnvironment: StellarTransactEnvironment,\n): bigint {\n return transactEnvironment.zkConfigNonce ?? DEFAULT_ZK_CONFIG_NONCE;\n}\n","import { ZK_ARTIFACT_VERSION } from '@arcanetech/stellar-privacy-pool-zk-sdk';\n\nconst ZK_ARTIFACT_CACHE_NAME = `privacy-sdk-stellar-zk-artifacts:${ZK_ARTIFACT_VERSION}`;\n\ntype ArtifactResponse = {\n ok: boolean;\n status: number;\n clone(): ArtifactResponse;\n arrayBuffer(): Promise<ArrayBuffer>;\n};\n\ntype BrowserCache = {\n match(url: string): Promise<ArtifactResponse | undefined>;\n put(url: string, response: ArtifactResponse): Promise<void>;\n};\n\ntype BrowserCacheStorage = {\n open(cacheName: string): Promise<BrowserCache>;\n};\n\nexport function isBrowserCacheApiAvailable(): boolean {\n return browserCacheStorage() !== undefined;\n}\n\nfunction readCaches(): BrowserCacheStorage | null | undefined {\n return (globalThis as unknown as { caches?: BrowserCacheStorage | null }).caches;\n}\n\nfunction browserCacheStorage(): BrowserCacheStorage | undefined {\n const cachesValue = readCaches();\n if (cachesValue === undefined || cachesValue === null) {\n return undefined;\n }\n return cachesValue;\n}\n\nfunction absoluteArtifactUrl(url: string): string {\n if (/^[a-z][a-z0-9+.-]*:/i.test(url)) {\n return url;\n }\n const href = (globalThis as { location?: { href: string } }).location?.href;\n if (href === undefined) {\n return url;\n }\n return new URL(url, href).href;\n}\n\nasync function rememberResponse(\n url: string,\n response: ArtifactResponse,\n): Promise<void> {\n const storage = browserCacheStorage();\n if (storage === undefined) {\n return;\n }\n try {\n const cache = await storage.open(ZK_ARTIFACT_CACHE_NAME);\n await cache.put(url, response.clone());\n } catch {\n return;\n }\n}\n\nasync function fetchNetworkArrayBuffer(url: string): Promise<ArrayBuffer> {\n const response = (await fetch(url)) as unknown as ArtifactResponse;\n if (!response.ok) {\n throw new Error(`Failed to fetch ZK artifact ${url}: ${String(response.status)}`);\n }\n await rememberResponse(url, response);\n return response.arrayBuffer();\n}\n\nexport async function fetchArrayBufferWithBrowserCache(\n url: string,\n): Promise<ArrayBuffer> {\n const requestUrl = absoluteArtifactUrl(url);\n const storage = browserCacheStorage();\n if (storage !== undefined) {\n const cache = await storage.open(ZK_ARTIFACT_CACHE_NAME);\n const cached = await cache.match(requestUrl);\n if (cached?.ok === true) {\n return cached.arrayBuffer();\n }\n }\n return fetchNetworkArrayBuffer(requestUrl);\n}\n","import {\n bundledCircuitFileNames,\n defaultZkArtifactBaseUrl,\n type DevZkCircuitConfig,\n} from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport { fetchArrayBufferWithBrowserCache } from './browser-artifact-cache.js';\nimport type { StellarBundledZkCircuitDefinition } from './circuit-config.js';\n\nfunction resolveArtifactBaseUrl(explicit?: string): string {\n const trimmed = explicit?.trim();\n if (trimmed === undefined || trimmed === '') {\n return defaultZkArtifactBaseUrl();\n }\n let withoutSlash = trimmed;\n while (withoutSlash.endsWith('/')) {\n withoutSlash = withoutSlash.slice(0, -1);\n }\n return withoutSlash;\n}\n\nfunction artifactHref(base: string, fileName: string): string {\n const withSlash = `${base}/`;\n if (/^https?:\\/\\//i.test(withSlash) || withSlash.startsWith('file:')) {\n return new URL(fileName, withSlash).href;\n }\n const href = (globalThis as { location?: { href: string } }).location?.href;\n if (href !== undefined) {\n return new URL(fileName, new URL(withSlash, href)).href;\n }\n return `${withSlash}${fileName}`;\n}\n\nexport async function materializeBundledCircuitWithBrowserCache(\n definition: StellarBundledZkCircuitDefinition,\n zkArtifactBaseUrl?: string,\n): Promise<DevZkCircuitConfig> {\n const base = resolveArtifactBaseUrl(zkArtifactBaseUrl);\n const names = bundledCircuitFileNames(definition.circuit);\n const [circuitGraph, r1cs, provingKey] = await Promise.all([\n fetchArrayBufferWithBrowserCache(artifactHref(base, names.graphFileName)),\n fetchArrayBufferWithBrowserCache(artifactHref(base, names.r1csFileName)),\n fetchArrayBufferWithBrowserCache(artifactHref(base, names.provingKeyFileName)),\n ]);\n return {\n nIns: definition.nIns,\n nOuts: definition.nOuts,\n publicNInputs: definition.publicNInputs,\n publicNOutputs: definition.publicNOutputs,\n circuitGraph,\n r1cs,\n provingKey,\n };\n}\n","import {\n PrivacyPoolSDK,\n scalarHexToFrDecimal,\n} from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport type { DepositObject } from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport {\n decodePrivateAddress,\n recipientPublicKeysDecimalFromPrivateAddress,\n} from '../private-address/codec.js';\nimport { tokenAddressToAssetLeg } from '../proofs/transaction-input.js';\nimport { resolvePoolApplicationId } from '../audit/parameters.js';\nimport type { AlignedDepositSlot } from '../pool/proof-types.js';\n\nconst SAMPLE_SCALAR_ATTEMPTS = 10;\n\nfunction escrowDepositFields(parameters: {\n escrowNonce?: string;\n recipientHi?: string;\n recipientLo?: string;\n}): Partial<Pick<DepositObject, 'escrowNonce' | 'recipientStellar'>> {\n if (!parameters.recipientHi || !parameters.recipientLo) {\n return {};\n }\n return {\n ...(parameters.escrowNonce ? { escrowNonce: parameters.escrowNonce } : {}),\n recipientStellar: [parameters.recipientHi, parameters.recipientLo],\n };\n}\n\nfunction sampleValidDepositScalarHex(): string {\n for (let index = 0; index < SAMPLE_SCALAR_ATTEMPTS; index++) {\n const candidate = PrivacyPoolSDK.generateRandomScalarHex32();\n try {\n scalarHexToFrDecimal(candidate);\n return candidate;\n } catch {\n continue;\n }\n }\n throw new Error('could not sample valid depositor ephemeral scalar');\n}\n\nexport async function buildAlignedDepositSlotForSdk(\n sdk: PrivacyPoolSDK,\n applicationId: string,\n parameters: {\n privateAddressStpl1: string;\n amountStroops: bigint;\n tokenAddress: string;\n escrowNonce?: string;\n recipientHi?: string;\n recipientLo?: string;\n },\n): Promise<AlignedDepositSlot> {\n const privateAddressPoint = decodePrivateAddress(parameters.privateAddressStpl1);\n const scalarHex = sampleValidDepositScalarHex();\n const [assetHi, assetLo] = tokenAddressToAssetLeg(parameters.tokenAddress);\n const resolvedApplicationId = resolvePoolApplicationId(applicationId);\n const generated = sdk.generateCoinForDepositWithOwnerPubHex(\n scalarHex,\n privateAddressPoint.x,\n privateAddressPoint.y,\n parameters.amountStroops,\n assetHi,\n assetLo,\n resolvedApplicationId,\n );\n const recipientPublicKeys = recipientPublicKeysDecimalFromPrivateAddress(\n parameters.privateAddressStpl1,\n ) as [string, string];\n const deposit: DepositObject = {\n value: generated.coin.value,\n nullifier: generated.coin.nullifier,\n ephemeralKeyScalar: scalarHexToFrDecimal(scalarHex),\n asset: [generated.coin.asset_hi, generated.coin.asset_lo],\n applicationId: resolvedApplicationId,\n recipientPublicKeys,\n ...escrowDepositFields(parameters),\n };\n return {\n deposit,\n commitment_hex: generated.commitment_hex,\n coin: generated.coin,\n depositScalarHex: scalarHex,\n precommitementHex: generated.precommitementHex,\n };\n}\n","import type { StellarBrowserAssets } from '../../types.js';\nimport { PrivacyPoolService } from '../pool/service.js';\nimport type { StellarZkCircuitDefinition } from '../zk/circuit-config.js';\n\nexport function createPrivacyPoolService(input?: {\n assets?: StellarBrowserAssets;\n applicationId?: string;\n auditPublicKey?: [string, string];\n zkCircuits?: Record<string, StellarZkCircuitDefinition>;\n zkConfigNonce?: bigint;\n zkArtifactBaseUrl?: string;\n}): PrivacyPoolService {\n return new PrivacyPoolService(\n input?.assets,\n input?.applicationId,\n input?.auditPublicKey,\n input?.zkCircuits,\n input?.zkConfigNonce,\n input?.zkArtifactBaseUrl,\n );\n}\n\nlet configuredPrivacyPoolService: PrivacyPoolService | undefined;\n\nexport function configurePrivacyPoolService(service: PrivacyPoolService): void {\n configuredPrivacyPoolService = service;\n}\n\nexport function getPrivacyPoolService(): PrivacyPoolService {\n if (!configuredPrivacyPoolService) {\n throw new Error(\n 'PrivacyPoolService is not configured. Call configurePrivacyPoolService first.',\n );\n }\n return configuredPrivacyPoolService;\n}\n","import { Buffer } from 'buffer';\nimport { commitmentsBuffersToDecimal } from './encoding.js';\nimport type {\n CachedPoolMerkleView,\n PoolMerkleStatePort,\n LeafEphemeralStatePort,\n} from '../merkle/state-port.js';\nimport { poolMerkleStateToCachedView } from '../merkle/state-port.js';\nimport { readPoolClientFactory } from '../../contracts/contract-context.js';\nimport type { StellarTransactEnvironment } from '../environment/types.js';\n\nexport interface FetchContractMerkleResult {\n commitmentCount: number;\n commitments: string[];\n merkleRootHex: string;\n updatedAt: number;\n}\n\nfunction normalizeCommitmentBuffers(rawBuffers: Buffer[]): Buffer[] {\n return rawBuffers.map((bufferRow) =>\n Buffer.isBuffer(bufferRow) ? bufferRow : Buffer.from(bufferRow),\n );\n}\n\nfunction mergeContractMerkleWithCache(parameters: {\n poolContractId: string;\n contractCommitments: string[];\n contractCount: number;\n merkleRootHex: string;\n cachedState: CachedPoolMerkleView | undefined;\n poolMerkleState?: PoolMerkleStatePort;\n}): FetchContractMerkleResult {\n const cachedCount = parameters.cachedState?.commitments.length ?? 0;\n const shouldPreferContract =\n parameters.contractCount > cachedCount ||\n !parameters.cachedState ||\n cachedCount === 0;\n if (shouldPreferContract) {\n const updatedAt = Date.now();\n void parameters.poolMerkleState?.set({\n poolContract: parameters.poolContractId,\n commitments: parameters.contractCommitments,\n commitmentCount: parameters.contractCount,\n merkleRootHex: parameters.merkleRootHex,\n updatedAt,\n });\n return {\n commitments: parameters.contractCommitments,\n updatedAt,\n merkleRootHex: parameters.merkleRootHex,\n commitmentCount: parameters.contractCount,\n };\n }\n return {\n commitments: parameters.cachedState!.commitments,\n updatedAt: parameters.cachedState!.updatedAt,\n merkleRootHex: parameters.cachedState!.merkleRootHex ?? parameters.merkleRootHex,\n commitmentCount: parameters.cachedState!.commitments.length,\n };\n}\n\nasync function readCachedPoolMerkleView(\n poolMerkleState: PoolMerkleStatePort | undefined,\n poolContractId: string,\n): Promise<CachedPoolMerkleView | undefined> {\n if (!poolMerkleState) {\n return undefined;\n }\n const cached = await poolMerkleState.get(poolContractId);\n return cached ? poolMerkleStateToCachedView(cached) : undefined;\n}\n\nexport async function fetchAndMergeMerkleState(parameters: {\n poolContractId: string;\n walletPublicKey: string;\n transactEnvironment: StellarTransactEnvironment;\n poolMerkleState?: PoolMerkleStatePort;\n}): Promise<FetchContractMerkleResult> {\n const client = readPoolClientFactory(parameters.transactEnvironment)({\n contractId: parameters.poolContractId,\n walletPublicKey: parameters.walletPublicKey,\n networkPassphrase: parameters.transactEnvironment.network.networkPassphrase,\n sorobanRpcUrl: parameters.transactEnvironment.network.rpcUrl,\n });\n\n const commitmentsRead = await client.get_commitments();\n const rawBuffers = commitmentsRead.result as Buffer[];\n const buffers = normalizeCommitmentBuffers(rawBuffers);\n const contractCommitments = commitmentsBuffersToDecimal(buffers);\n const contractCount = contractCommitments.length;\n\n const rootRead = await client.get_merkle_root();\n const merkleRootBuffer = rootRead.result as Buffer;\n const merkleRootHex = Buffer.from(merkleRootBuffer).toString('hex');\n\n const cachedState = await readCachedPoolMerkleView(\n parameters.poolMerkleState,\n parameters.poolContractId,\n );\n return mergeContractMerkleWithCache({\n poolContractId: parameters.poolContractId,\n contractCommitments,\n contractCount,\n merkleRootHex,\n cachedState,\n ...(parameters.poolMerkleState\n ? { poolMerkleState: parameters.poolMerkleState }\n : {}),\n });\n}\n\nexport async function readLeafEphemeralHex(parameters: {\n poolContractId: string;\n walletPublicKey: string;\n leafIndex: number;\n transactEnvironment: StellarTransactEnvironment;\n leafEphemeral?: LeafEphemeralStatePort;\n}): Promise<{ xHex: string; yHex: string }> {\n const cached = await parameters.leafEphemeral?.get({\n poolContract: parameters.poolContractId,\n leafIndex: parameters.leafIndex,\n });\n if (cached?.xHex && cached.yHex) {\n return { xHex: cached.xHex, yHex: cached.yHex };\n }\n const client = readPoolClientFactory(parameters.transactEnvironment)({\n contractId: parameters.poolContractId,\n walletPublicKey: parameters.walletPublicKey,\n networkPassphrase: parameters.transactEnvironment.network.networkPassphrase,\n sorobanRpcUrl: parameters.transactEnvironment.network.rpcUrl,\n });\n const read = await client.get_leaf_ephemeral({ leaf_index: parameters.leafIndex });\n const coords = read.result;\n if (!coords?.x || !coords?.y) {\n throw new Error('Missing leaf ephemeral key on contract');\n }\n const xHex = Buffer.from(coords.x).toString('hex');\n const yHex = Buffer.from(coords.y).toString('hex');\n await parameters.leafEphemeral?.set({\n poolContract: parameters.poolContractId,\n leafIndex: parameters.leafIndex,\n xHex,\n yHex,\n cachedAt: new Date().toISOString(),\n });\n return { xHex, yHex };\n}\n","import { Buffer } from 'buffer';\n\nconst FR_ORDER =\n 0x73_ed_a7_53_29_9d_7d_48_33_39_d8_08_09_a1_d8_05_53_bd_a4_02_ff_fe_5b_fe_ff_ff_ff_ff_00_00_00_01n;\n\nfunction bufferToDecimal(buf: Buffer): string {\n const hex = buf.toString('hex');\n const bigintFromHex = BigInt(`0x${hex}`);\n const reduced = bigintFromHex % FR_ORDER;\n return reduced.toString();\n}\n\nexport function commitmentsBuffersToDecimal(buffers: Buffer[]): string[] {\n return buffers.map((bufferRow) => bufferToDecimal(bufferRow));\n}\n","import type {\n StellarLeafEphemeral,\n StellarPoolMerkleState,\n} from '../../state/domain/types.js';\n\nexport interface PoolMerkleStatePort {\n get(poolContract: string): Promise<StellarPoolMerkleState | undefined>;\n set(state: StellarPoolMerkleState): Promise<void>;\n}\n\nexport interface LeafEphemeralStatePort {\n get(input: {\n poolContract: string;\n leafIndex: number;\n }): Promise<StellarLeafEphemeral | undefined>;\n set(ephemeral: StellarLeafEphemeral): Promise<void>;\n}\n\nexport interface CachedPoolMerkleView {\n commitments: string[];\n updatedAt: number;\n merkleRootHex?: string;\n}\n\nexport function poolMerkleStateToCachedView(\n state: StellarPoolMerkleState,\n): CachedPoolMerkleView {\n return {\n commitments: state.commitments,\n updatedAt: state.updatedAt,\n merkleRootHex: state.merkleRootHex,\n };\n}\n","import type { DepositIntent } from '@arcanetech/privacy-sdk-core';\nimport type {\n StellarAddress,\n StellarAssetId,\n StellarPreparedOperation,\n} from '../../../types.js';\nimport type { StellarTransactEnvironment } from '../../environment/types.js';\nimport { fetchAndMergeMerkleState } from '../../merkle/fetch-contract.js';\n\nexport async function resolveTokenContractId(\n environment: StellarTransactEnvironment,\n assetId: string,\n): Promise<string> {\n if (environment.resolveTokenContractId) {\n return environment.resolveTokenContractId(assetId);\n }\n throw new Error(`Token contract is not configured for asset ${assetId}.`);\n}\n\nexport async function resolveWalletPublicKey(\n environment: StellarTransactEnvironment,\n prepared: StellarPreparedOperation,\n): Promise<string> {\n if (environment.resolveWalletPublicKey) {\n return environment.resolveWalletPublicKey();\n }\n if (prepared.kind === 'deposit') {\n const depositIntent = prepared.intent as DepositIntent<\n StellarAddress,\n StellarAssetId,\n bigint\n >;\n return depositIntent.from;\n }\n throw new Error('Wallet public key resolver is not configured.');\n}\n\nasync function resolveSenderPrivKeyScalarHex(\n environment: StellarTransactEnvironment,\n privateAddressStpl1: string,\n owner?: string,\n): Promise<string> {\n const cached = await readSenderPrivKeyScalarHex(\n environment,\n privateAddressStpl1,\n owner,\n );\n if (cached) {\n return cached;\n }\n if (environment.ensureSenderPrivKeyScalarHex) {\n return environment.ensureSenderPrivKeyScalarHex(privateAddressStpl1);\n }\n if (!environment.resolveSenderPrivKeyScalarHex) {\n throw new Error('Sender private key scalar resolver is not configured.');\n }\n return environment.resolveSenderPrivKeyScalarHex(privateAddressStpl1);\n}\n\nasync function readSenderPrivKeyScalarHex(\n environment: StellarTransactEnvironment,\n privateAddressStpl1: string,\n owner?: string,\n): Promise<string | undefined> {\n if (owner && environment.resolveSenderPrivKeyScalarFromState) {\n const fromState = await environment.resolveSenderPrivKeyScalarFromState({\n owner,\n privateAddressStpl1,\n });\n if (fromState?.trim()) {\n return fromState.trim();\n }\n }\n if (environment.readSenderPrivKeyScalarHex) {\n const cached = await environment.readSenderPrivKeyScalarHex(privateAddressStpl1);\n if (cached?.trim()) {\n return cached.trim();\n }\n }\n return undefined;\n}\n\nexport async function ensureSenderPrivKeyScalarHex(\n environment: StellarTransactEnvironment,\n privateAddressStpl1: string,\n owner?: string,\n): Promise<string> {\n const cached = await readSenderPrivKeyScalarHex(\n environment,\n privateAddressStpl1,\n owner,\n );\n if (cached) {\n return cached;\n }\n if (environment.ensureSenderPrivKeyScalarHex) {\n return environment.ensureSenderPrivKeyScalarHex(privateAddressStpl1);\n }\n return resolveSenderPrivKeyScalarHex(environment, privateAddressStpl1, owner);\n}\n\nexport async function loadMerkleState(\n environment: StellarTransactEnvironment,\n walletPublicKey: string,\n): Promise<{ commitments: string[] }> {\n const merged = await fetchAndMergeMerkleState({\n poolContractId: environment.network.poolContract,\n walletPublicKey,\n transactEnvironment: environment,\n ...(environment.poolMerkleState\n ? { poolMerkleState: environment.poolMerkleState }\n : {}),\n });\n return { commitments: merged.commitments };\n}\n\nexport function enrichPreparedOperation(\n prepared: StellarPreparedOperation,\n outputRecords: StellarPreparedOperation['outputRecords'],\n artifacts: NonNullable<StellarPreparedOperation['transactArtifacts']>,\n): StellarPreparedOperation {\n return {\n ...prepared,\n outputRecords,\n transactArtifacts: artifacts,\n submissionPayload: {\n operationId: crypto.randomUUID(),\n signed: false,\n },\n };\n}\n","import {\n isPrivateAddressTransferFrom,\n readTransferFromPrivateAddress,\n} from '../transact/transfer-source/index.js';\nimport type {\n StellarAddress,\n StellarAssetId,\n StellarPrivateRecord,\n StellarTransferFromAddress,\n StellarTransferIntent,\n} from '../types.js';\n\nexport function buildTransferOutputRecords(\n intent: StellarTransferIntent,\n consumedTotal: bigint,\n walletPublicKey: StellarAddress,\n): StellarPrivateRecord[] {\n const recipientOwner = recipientOutputOwner(intent, walletPublicKey);\n const changeAmount = consumedTotal - intent.amount;\n const outputs = [\n createOutputRecord({\n ...recipientOwner,\n asset: intent.asset,\n amount: intent.amount,\n }),\n ];\n if (changeAmount > 0n && isPrivateAddressTransferFrom(intent.from)) {\n outputs.push(\n createOutputRecord({\n owner: walletPublicKey,\n privateAddress: intent.from,\n asset: intent.asset,\n amount: changeAmount,\n }),\n );\n }\n return outputs;\n}\n\nexport function buildWithdrawOutputRecords(input: {\n from: StellarTransferFromAddress;\n to: StellarAddress;\n asset: StellarAssetId;\n amount: bigint;\n consumedTotal: bigint;\n recipientDisclosedPublicly: boolean;\n walletPublicKey: StellarAddress;\n}): StellarPrivateRecord[] {\n const changeAmount = input.consumedTotal - input.amount;\n if (input.recipientDisclosedPublicly) {\n if (changeAmount > 0n) {\n return [\n createOutputRecord({\n owner: input.walletPublicKey,\n privateAddress: readTransferFromPrivateAddress(input.from),\n asset: input.asset,\n amount: changeAmount,\n }),\n ];\n }\n return [];\n }\n const outputs = [\n createOutputRecord({\n owner: input.to,\n asset: input.asset,\n amount: input.amount,\n }),\n ];\n if (changeAmount > 0n && isPrivateAddressTransferFrom(input.from)) {\n outputs.push(\n createOutputRecord({\n owner: input.walletPublicKey,\n privateAddress: input.from,\n asset: input.asset,\n amount: changeAmount,\n }),\n );\n }\n return outputs;\n}\n\nexport function buildDepositOutputRecords(\n owner: StellarAddress,\n privateAddress: string,\n asset: StellarAssetId,\n amount: bigint,\n): StellarPrivateRecord[] {\n return [createOutputRecord({ owner, privateAddress, asset, amount })];\n}\n\nfunction recipientOutputOwner(\n intent: StellarTransferIntent,\n walletPublicKey: StellarAddress,\n): { owner: StellarAddress; privateAddress?: string } {\n if (intent.disclosure.recipientAddress === 'public') {\n return { owner: intent.to.trim() };\n }\n return { owner: walletPublicKey, privateAddress: intent.to.trim() };\n}\n\nfunction createOutputRecord(input: {\n owner: StellarAddress;\n privateAddress?: string;\n asset: StellarAssetId;\n amount: bigint;\n}): StellarPrivateRecord {\n return {\n id: pendingOutputRecordId(input.owner, input.asset, input.amount),\n owner: input.owner,\n ...(input.privateAddress ? { privateAddress: input.privateAddress } : {}),\n asset: input.asset,\n amount: input.amount,\n consumed: false,\n };\n}\n\nfunction pendingOutputRecordId(\n owner: StellarAddress,\n asset: StellarAssetId,\n amount: bigint,\n): string {\n return `pending-output:${owner}:${asset}:${amount}`;\n}\n","import { assertPrivateRecordsNullifiersAvailable } from '../transact/transfer-source/index.js';\nimport type {\n StellarPreparedOperation,\n StellarPrivateRecord,\n StellarStorageAdapter,\n StellarTransactEngine,\n StellarTransferIntent,\n StellarWalletAdapter,\n} from '../types.js';\nimport { buildTransferOutputRecords } from './transfer-output-records.js';\nimport { selectPrivateRecords, sumRecordAmounts } from './record-selection.js';\n\nexport type TransferPrepareDeps = {\n storage: StellarStorageAdapter;\n wallet: StellarWalletAdapter;\n engine: StellarTransactEngine;\n poolContract: string;\n checkNullifierSpent?: (input: {\n nullifier: string;\n walletPublicKey: string;\n }) => Promise<boolean>;\n};\n\nexport async function prepareTransferOperation(\n intent: StellarTransferIntent,\n deps: TransferPrepareDeps,\n): Promise<StellarPreparedOperation> {\n const spend = await resolvePrivateAddressSpend(intent, deps);\n const walletAddress = await deps.wallet.getAddress();\n const walletPublicKey = walletAddress.trim();\n const consumedTotal = sumRecordAmounts(spend.consumedRecords);\n const prepared: StellarPreparedOperation = {\n kind: 'transfer',\n intent,\n consumedRecords: spend.consumedRecords,\n outputRecords: buildTransferOutputRecords(intent, consumedTotal, walletPublicKey),\n submissionPayload: {\n operationId: crypto.randomUUID(),\n signed: false,\n },\n transactArtifacts: spend.transactArtifacts,\n };\n return deps.engine.prepare(prepared);\n}\n\nasync function resolvePrivateAddressSpend(\n intent: StellarTransferIntent,\n deps: TransferPrepareDeps,\n): Promise<{\n consumedRecords: StellarPrivateRecord[];\n transactArtifacts: NonNullable<StellarPreparedOperation['transactArtifacts']>;\n}> {\n const walletAddress = await deps.wallet.getAddress();\n const walletPublicKey = walletAddress.trim();\n const consumedRecords = await selectPrivateRecords({\n storage: deps.storage,\n kind: 'transfer',\n intent,\n walletPublicKey,\n ...(deps.checkNullifierSpent\n ? { checkNullifierSpent: deps.checkNullifierSpent }\n : {}),\n });\n await assertPrivateRecordsNullifiersAvailable({\n records: consumedRecords,\n walletPublicKey: walletAddress.trim(),\n ...(deps.checkNullifierSpent\n ? { checkNullifierSpent: deps.checkNullifierSpent }\n : {}),\n });\n return {\n consumedRecords,\n transactArtifacts: {\n spendSource: 'privateAddress',\n },\n };\n}\n","import type {\n DepositIntent,\n NetworkAdapter,\n WithdrawIntent,\n} from '@arcanetech/privacy-sdk-core';\nimport { submitPreparedOperation } from '../transact/engine/execution/submit-prepared.js';\nimport type {\n StellarAddress,\n StellarAssetId,\n StellarOperationReceipt,\n StellarPreparedOperation,\n StellarPrivateRecord,\n StellarStorageAdapter,\n StellarTransactEngine,\n StellarTransferFromAddress,\n StellarTransferIntent,\n StellarWalletAdapter,\n} from '../types.js';\nimport {\n buildSpendOutputRecords,\n selectPrivateRecords,\n sumRecordAmounts,\n} from './record-selection.js';\nimport { prepareTransferOperation } from './transfer-prepare.js';\n\ntype StellarIntent =\n | DepositIntent<StellarAddress, StellarAssetId, bigint>\n | StellarTransferIntent\n | WithdrawIntent<StellarAddress, StellarAssetId, bigint>;\n\nexport function createStellarNetworkAdapter(deps: {\n storage: StellarStorageAdapter;\n wallet: StellarWalletAdapter;\n engine: StellarTransactEngine;\n poolContract: string;\n checkNullifierSpent?: (input: {\n nullifier: string;\n walletPublicKey: string;\n }) => Promise<boolean>;\n}): NetworkAdapter<\n StellarAddress,\n StellarAssetId,\n bigint,\n StellarPreparedOperation,\n StellarOperationReceipt\n> {\n return {\n prepareDeposit: async (intent) =>\n prepareOperation({ kind: 'deposit', intent, ...deps }),\n prepareTransfer: async (intent) => prepareTransferOperation(intent, deps),\n prepareWithdraw: async (intent) =>\n prepareOperation({ kind: 'withdraw', intent, ...deps }),\n submit: async (prepared, options) => {\n const submissionInput = {\n prepared,\n storage: deps.storage,\n wallet: deps.wallet,\n engine: deps.engine,\n };\n if (options !== undefined) {\n return submitPreparedOperation({ ...submissionInput, options });\n }\n return submitPreparedOperation(submissionInput);\n },\n };\n}\n\nasync function loadSpendSelectionWalletPublicKey(\n wallet: StellarWalletAdapter,\n): Promise<string> {\n const walletAddress = await wallet.getAddress();\n return walletAddress.trim();\n}\n\nasync function prepareWithdrawRecords(input: {\n storage: StellarStorageAdapter;\n intent: WithdrawIntent<StellarAddress, StellarAssetId, bigint>;\n walletPublicKey: string;\n checkNullifierSpent?: (parameters: {\n nullifier: string;\n walletPublicKey: string;\n }) => Promise<boolean>;\n}): Promise<StellarPrivateRecord[]> {\n return selectPrivateRecords({\n storage: input.storage,\n kind: 'withdraw',\n intent: input.intent,\n walletPublicKey: input.walletPublicKey,\n ...(input.checkNullifierSpent\n ? { checkNullifierSpent: input.checkNullifierSpent }\n : {}),\n });\n}\n\nasync function resolvePrepareConsumedRecords(input: {\n kind: 'deposit' | 'withdraw';\n intent: StellarIntent;\n storage: StellarStorageAdapter;\n wallet: StellarWalletAdapter;\n checkNullifierSpent?: (parameters: {\n nullifier: string;\n walletPublicKey: string;\n }) => Promise<boolean>;\n}): Promise<StellarPrivateRecord[]> {\n if (input.kind === 'deposit') {\n return [];\n }\n return prepareWithdrawRecords({\n storage: input.storage,\n intent: input.intent as WithdrawIntent<StellarAddress, StellarAssetId, bigint>,\n walletPublicKey: await loadSpendSelectionWalletPublicKey(input.wallet),\n ...(input.checkNullifierSpent\n ? { checkNullifierSpent: input.checkNullifierSpent }\n : {}),\n });\n}\n\nfunction buildDepositOrWithdrawPrepared(input: {\n kind: 'deposit' | 'withdraw';\n intent: StellarIntent;\n consumedRecords: StellarPrivateRecord[];\n walletPublicKey: StellarAddress;\n}): StellarPreparedOperation {\n const consumedTotal = sumRecordAmounts(input.consumedRecords);\n const withdrawIntent = input.intent as WithdrawIntent<\n StellarAddress,\n StellarAssetId,\n bigint\n >;\n return {\n kind: input.kind,\n intent: input.intent,\n consumedRecords: input.consumedRecords,\n outputRecords: buildSpendOutputRecords({\n kind: input.kind,\n from: withdrawIntent.from as StellarTransferFromAddress,\n to: input.intent.to,\n asset: input.intent.asset,\n amount: input.intent.amount,\n consumedTotal,\n recipientDisclosedPublicly:\n input.kind === 'withdraw' &&\n withdrawIntent.disclosure.recipientAddress === 'public',\n walletPublicKey: input.walletPublicKey,\n }),\n submissionPayload: {\n operationId: crypto.randomUUID(),\n signed: false,\n },\n };\n}\n\nasync function prepareOperation(input: {\n kind: 'deposit' | 'withdraw';\n intent: StellarIntent;\n storage: StellarStorageAdapter;\n engine: StellarTransactEngine;\n wallet: StellarWalletAdapter;\n checkNullifierSpent?: (parameters: {\n nullifier: string;\n walletPublicKey: string;\n }) => Promise<boolean>;\n}): Promise<StellarPreparedOperation> {\n const consumedRecords = await resolvePrepareConsumedRecords(input);\n const walletPublicKey =\n input.kind === 'deposit'\n ? (input.intent.from as StellarAddress)\n : await loadSpendSelectionWalletPublicKey(input.wallet);\n const prepared = buildDepositOrWithdrawPrepared({\n kind: input.kind,\n intent: input.intent,\n consumedRecords,\n walletPublicKey,\n });\n return input.engine.prepare(prepared);\n}\n","export const STELLAR_STATE_PATHS = {\n privateRecords: '$.privateRecords',\n registryPrivateAddresses: '$.registry.privateAddresses',\n registryRegisteredAddresses: '$.registry.registeredAddresses',\n registryLookups: '$.registry.lookups',\n assets: '$.assets',\n assetsById: '$.assets.byId',\n assetsListOrder: '$.assets.listOrder',\n publicBalances: '$.balances.publicByOwnerAsset',\n poolsByContract: '$.pools.byContract',\n poolsLeafEphemeral: '$.pools.leafEphemeralByContractAndIndex',\n deliveriesIncomingById: '$.deliveries.incomingById',\n deliveriesSync: '$.deliveries.syncByPrivateAddressAsset',\n transactionsByHash: '$.transactions.byHash',\n walletPrivateAddressScalars: '$.wallet.privateAddressScalars',\n walletPrivateAddressRecords: '$.wallet.privateAddressRecords',\n walletDefaultPrivateAddressNonce: '$.wallet.defaultPrivateAddressNonce',\n} as const;\n","import { z } from 'zod';\n\nexport const paginationSchema = z.object({\n total: z.number().int().nonnegative(),\n page: z.number().int().positive(),\n pageSize: z.number().int().positive(),\n hasMore: z.boolean(),\n});\n\nconst stellarPrivateCoinNoteSchema = z.object({\n value: z.string(),\n nullifier: z.string(),\n secret: z.string(),\n commitment: z.string(),\n asset_hi: z.string(),\n asset_lo: z.string(),\n application_id: z.string().optional(),\n});\n\nexport const privateRecordSchema = z.object({\n id: z.string().min(1),\n owner: z.string().min(1),\n asset: z.string().min(1),\n amount: z.coerce.bigint(),\n consumed: z.boolean(),\n status: z.enum(['pending', 'finalized', 'spent']).optional(),\n poolContract: z.string().optional(),\n commitmentHex: z.string().optional(),\n nullifierHex: z.string().optional(),\n amountDisplay: z.number().optional(),\n deliveryId: z.number().int().optional(),\n privateAddress: z.string().optional(),\n txHash: z.string().optional(),\n coinNote: stellarPrivateCoinNoteSchema.optional(),\n depositScalarHex: z.string().optional(),\n precommitementHex: z.string().optional(),\n});\n\nexport const assetSchema = z.object({\n id: z.number().int(),\n assetId: z.string().min(1),\n name: z.string().min(1),\n logoUrl: z.string().nullable(),\n issuerAddress: z.string().nullable(),\n clientContract: z.string().nullable(),\n poolContracts: z.array(z.string()),\n poolContract: z.string().min(1),\n mintable: z.boolean(),\n mintAmount: z.string().nullable(),\n decimals: z.number().int().nullable().optional(),\n});\n\nexport const publicBalanceSchema = z.object({\n owner: z.string().min(1),\n asset: z.string().min(1),\n balance: z.string(),\n trustlineStatus: z.enum(['active', 'inactive', 'none']),\n});\n\nexport const registryLookupSchema = z.object({\n owner: z.string().min(1),\n status: z.enum(['registered', 'unregistered']),\n privateAddressStpl1: z.string().optional(),\n publicKeyXHex: z.string().optional(),\n publicKeyYHex: z.string().optional(),\n updatedAtLedger: z.number().int().optional(),\n cachedAt: z.string().optional(),\n});\n\nexport const walletPrivateAddressScalarSchema = z.object({\n owner: z.string().min(1),\n nonce: z.string().min(1),\n scalarHex: z.string().min(1),\n updatedAt: z.string().optional(),\n});\n\nexport const walletPrivateAddressRecordSchema = z.object({\n owner: z.string().min(1),\n nonce: z.string().min(1),\n privateAddress: z.string().min(1),\n createdAt: z.number(),\n});\n\nexport const poolMerkleStateSchema = z.object({\n poolContract: z.string().min(1),\n commitments: z.array(z.string()),\n commitmentCount: z.number().int().nonnegative(),\n merkleRootHex: z.string().min(1),\n updatedAt: z.number(),\n syncedLedger: z.number().int().optional(),\n});\n\nexport const leafEphemeralSchema = z.object({\n poolContract: z.string().min(1),\n leafIndex: z.number().int().nonnegative(),\n xHex: z.string().min(1),\n yHex: z.string().min(1),\n cachedAt: z.string().optional(),\n});\n\nexport const incomingDeliverySchema = z.object({\n id: z.number().int(),\n privateAddress: z.string().min(1),\n asset: z.string().min(1),\n ciphertextBase64: z.string().min(1),\n ephemeralKey: z.string().min(1),\n tagBase64: z.string().min(1),\n createdAt: z.string().min(1),\n processed: z.boolean().optional(),\n});\n\nexport const deliverySyncStateSchema = z.object({\n privateAddress: z.string().min(1),\n asset: z.string().min(1),\n bloomM: z.number().int().positive(),\n bloomK: z.number().int().positive(),\n bloomBitsBase64: z.string().optional(),\n lastPage: z.number().int().positive().optional(),\n lastPolledAt: z.string().optional(),\n});\n\nexport const transactionStatusSchema = z.object({\n txHash: z.string().min(1),\n status: z.enum(['pending', 'success', 'failed']),\n ledger: z.number().int().optional(),\n createdAt: z.string().optional(),\n});\n","export function withoutUndefinedFields<T extends Record<string, unknown>>(value: T): T {\n const next = {} as T;\n for (const [key, fieldValue] of Object.entries(value)) {\n if (fieldValue !== undefined) {\n Reflect.set(next, key, fieldValue);\n }\n }\n return next;\n}\n","import { assetSchema, publicBalanceSchema } from '../../schemas/shared.js';\nimport type {\n StellarAsset,\n StellarAssetsCatalog,\n StellarPublicBalance,\n} from '../../domain/types.js';\nimport { withoutUndefinedFields } from '../../foundation/coerce.js';\n\nexport function normalizeAssetsCatalog(value: unknown): StellarAssetsCatalog {\n if (typeof value !== 'object' || value === null) {\n return { byId: {}, listOrder: [] };\n }\n const record = value as Record<string, unknown>;\n const byIdRaw = record.byId;\n const listOrderRaw = record.listOrder;\n const byId: Record<string, StellarAsset> = {};\n if (typeof byIdRaw === 'object' && byIdRaw !== null) {\n for (const [key, entry] of Object.entries(byIdRaw)) {\n const parsed = assetSchema.safeParse(entry);\n if (parsed.success) {\n byId[key] = withoutUndefinedFields(parsed.data) as StellarAsset;\n }\n }\n }\n const listOrder = Array.isArray(listOrderRaw)\n ? listOrderRaw.filter((item): item is string => typeof item === 'string')\n : [];\n return { byId, listOrder };\n}\n\nexport function normalizeAsset(value: unknown): StellarAsset | undefined {\n const parsed = assetSchema.safeParse(value);\n return parsed.success\n ? (withoutUndefinedFields(parsed.data) as StellarAsset)\n : undefined;\n}\n\nexport function normalizePublicBalance(\n value: unknown,\n): StellarPublicBalance | undefined {\n const parsed = publicBalanceSchema.safeParse(value);\n return parsed.success ? parsed.data : undefined;\n}\n\nexport function normalizePublicBalancesFromEntries(\n value: unknown,\n owner: string,\n): StellarPublicBalance[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value\n .map((entry) => {\n if (!Array.isArray(entry) || entry.length < 2) {\n return;\n }\n const [key, balanceValue] = entry;\n if (typeof key !== 'string' || !key.startsWith(`${owner}:`)) {\n return;\n }\n return normalizePublicBalance(balanceValue);\n })\n .filter((balance): balance is StellarPublicBalance => balance !== undefined);\n}\n","import {\n deliverySyncStateSchema,\n incomingDeliverySchema,\n} from '../../schemas/shared.js';\nimport type {\n StellarDeliverySyncState,\n StellarIncomingDelivery,\n} from '../../domain/types.js';\nimport { withoutUndefinedFields } from '../../foundation/coerce.js';\n\nexport function normalizeIncomingDeliveries(value: unknown): StellarIncomingDelivery[] {\n const entries =\n typeof value === 'object' && value !== null && !Array.isArray(value)\n ? Object.values(value)\n : value;\n if (!Array.isArray(entries)) {\n return [];\n }\n return entries.flatMap((entry) => {\n const parsed = incomingDeliverySchema.safeParse(entry);\n return parsed.success\n ? [withoutUndefinedFields(parsed.data) as StellarIncomingDelivery]\n : [];\n });\n}\n\nexport function normalizeDeliverySyncState(\n value: unknown,\n): StellarDeliverySyncState | undefined {\n const parsed = deliverySyncStateSchema.safeParse(value);\n return parsed.success\n ? (withoutUndefinedFields(parsed.data) as StellarDeliverySyncState)\n : undefined;\n}\n","import { leafEphemeralSchema, poolMerkleStateSchema } from '../../schemas/shared.js';\nimport type {\n StellarLeafEphemeral,\n StellarPoolMerkleState,\n} from '../../domain/types.js';\nimport { withoutUndefinedFields } from '../../foundation/coerce.js';\n\nexport function normalizePoolMerkleState(\n value: unknown,\n): StellarPoolMerkleState | undefined {\n const parsed = poolMerkleStateSchema.safeParse(value);\n return parsed.success\n ? (withoutUndefinedFields(parsed.data) as StellarPoolMerkleState)\n : undefined;\n}\n\nexport function normalizeLeafEphemeral(\n value: unknown,\n): StellarLeafEphemeral | undefined {\n const parsed = leafEphemeralSchema.safeParse(value);\n return parsed.success\n ? (withoutUndefinedFields(parsed.data) as StellarLeafEphemeral)\n : undefined;\n}\n","import { registryLookupSchema } from '../../schemas/shared.js';\nimport type { StellarRegistryLookup } from '../../domain/types.js';\nimport { withoutUndefinedFields } from '../../foundation/coerce.js';\n\nexport function normalizeCachedPrivateAddress(value: unknown): string | undefined {\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n\nexport function normalizeRegistryLookup(\n value: unknown,\n): StellarRegistryLookup | undefined {\n const parsed = registryLookupSchema.safeParse(value);\n return parsed.success\n ? (withoutUndefinedFields(parsed.data) as StellarRegistryLookup)\n : undefined;\n}\n\nexport function normalizeRegistryLookupFromLegacy(input: {\n address: string;\n registered: unknown;\n privateAddress: unknown;\n}): StellarRegistryLookup | undefined {\n const lookup = normalizeRegistryLookup(\n typeof input.registered === 'object' && input.registered !== null\n ? input.registered\n : undefined,\n );\n if (lookup) {\n return lookup;\n }\n if (input.registered === undefined && input.privateAddress === undefined) {\n return undefined;\n }\n const registered = Boolean(input.registered);\n const privateAddressStpl1 = normalizeCachedPrivateAddress(input.privateAddress);\n if (!registered && privateAddressStpl1 === undefined) {\n return { owner: input.address, status: 'unregistered' };\n }\n return withoutUndefinedFields({\n owner: input.address,\n status: registered ? 'registered' : 'unregistered',\n ...(privateAddressStpl1 === undefined ? {} : { privateAddressStpl1 }),\n }) as StellarRegistryLookup;\n}\n","import { z } from 'zod';\nimport { privateRecordSchema, transactionStatusSchema } from '../../schemas/shared.js';\nimport type {\n StellarPrivateRecord,\n StellarTransactionStatus,\n} from '../../domain/types.js';\nimport { withoutUndefinedFields } from '../../foundation/coerce.js';\n\nexport function normalizePrivateRecords(value: unknown): StellarPrivateRecord[] {\n if (!Array.isArray(value)) {\n return [];\n }\n const records = value.flatMap((item) => {\n const parsed = privateRecordSchema.safeParse(item);\n return parsed.success ? [normalizePrivateRecordFields(parsed.data)] : [];\n });\n return deduplicatePrivateRecords(records);\n}\n\nexport function normalizeTransactionStatus(\n value: unknown,\n): StellarTransactionStatus | undefined {\n const parsed = transactionStatusSchema.safeParse(value);\n return parsed.success\n ? (withoutUndefinedFields(parsed.data) as StellarTransactionStatus)\n : undefined;\n}\n\nfunction privateRecordCommitmentKey(record: StellarPrivateRecord): string {\n return (\n record.commitmentHex?.trim() ||\n record.coinNote?.commitment.trim() ||\n record.id.trim()\n )\n .replace(/^0x/iu, '')\n .toLowerCase();\n}\n\nfunction normalizePrivateRecordFields(\n record: z.infer<typeof privateRecordSchema>,\n): StellarPrivateRecord {\n const normalized = withoutUndefinedFields(record) as StellarPrivateRecord;\n if (!normalized.privateAddress && normalized.owner.trim().startsWith('stpl')) {\n return { ...normalized, privateAddress: normalized.owner.trim() };\n }\n return normalized;\n}\n\nfunction preferPrivateRecord(\n current: StellarPrivateRecord,\n incoming: StellarPrivateRecord,\n key: string,\n): StellarPrivateRecord {\n if (privateRecordIdKey(incoming) === key) {\n return incoming;\n }\n if (privateRecordIdKey(current) === key) {\n return current;\n }\n return incoming;\n}\n\nfunction privateRecordIdKey(record: StellarPrivateRecord): string {\n return record.id.trim().replace(/^0x/iu, '').toLowerCase();\n}\n\nfunction deduplicatePrivateRecords(\n records: StellarPrivateRecord[],\n): StellarPrivateRecord[] {\n const byCommitment = new Map<string, StellarPrivateRecord>();\n for (const record of records) {\n const key = privateRecordCommitmentKey(record);\n const current = byCommitment.get(key);\n byCommitment.set(key, current ? preferPrivateRecord(current, record, key) : record);\n }\n return [...byCommitment.values()];\n}\n","import {\n walletPrivateAddressScalarSchema,\n walletPrivateAddressRecordSchema,\n} from '../../schemas/shared.js';\nimport type {\n StellarWalletPrivateAddressScalar,\n StellarWalletPrivateAddressRecord,\n} from '../../domain/types.js';\nimport { withoutUndefinedFields } from '../../foundation/coerce.js';\n\nexport function normalizeWalletPrivateAddressScalar(\n value: unknown,\n): StellarWalletPrivateAddressScalar | undefined {\n const parsed = walletPrivateAddressScalarSchema.safeParse(value);\n return parsed.success\n ? (withoutUndefinedFields(parsed.data) as StellarWalletPrivateAddressScalar)\n : undefined;\n}\n\nexport function normalizeWalletPrivateAddressRecord(\n value: unknown,\n): StellarWalletPrivateAddressRecord | undefined {\n const parsed = walletPrivateAddressRecordSchema.safeParse(value);\n return parsed.success\n ? (withoutUndefinedFields(parsed.data) as StellarWalletPrivateAddressRecord)\n : undefined;\n}\n\nexport function normalizeWalletDefaultPrivateAddressNonce(\n value: unknown,\n): string | undefined {\n return typeof value === 'string' ? value.trim() || undefined : undefined;\n}\n","import { registerArrayFilterItemSchema } from '@arcanetech/privacy-sdk-core/state';\nimport { privateRecordSchema } from '../schemas/shared.js';\nimport { stellarArrayFilterSchemaKeys } from './ops.js';\n\nlet registered = false;\n\nexport function registerStellarArrayFilterSchemas(): void {\n if (registered) {\n return;\n }\n registerArrayFilterItemSchema(\n stellarArrayFilterSchemaKeys.privateRecord,\n privateRecordSchema,\n );\n registered = true;\n}\n","import { STELLAR_STATE_PATHS } from '../foundation/paths.js';\n\nexport const stellarArrayFilterSchemaKeys = {\n privateRecord: 'privateRecord',\n} as const;\n\nexport function rejectPrivateRecordsByIds(ids: string[]) {\n return {\n opType: 'arrayFilter' as const,\n jsonPath: STELLAR_STATE_PATHS.privateRecords,\n itemSchemaKey: stellarArrayFilterSchemaKeys.privateRecord,\n rejectWhen: {\n op: 'fieldIn' as const,\n field: 'id',\n values: ids,\n },\n };\n}\n\nexport function rejectConsumedPrivateRecords() {\n return {\n opType: 'arrayFilter' as const,\n jsonPath: STELLAR_STATE_PATHS.privateRecords,\n itemSchemaKey: stellarArrayFilterSchemaKeys.privateRecord,\n rejectWhen: {\n op: 'fieldEquals' as const,\n field: 'consumed',\n value: true,\n },\n };\n}\n","import { type StateBridgeDefinition } from '@arcanetech/privacy-sdk-core/state';\nimport type { StellarAddress, StellarAssetId } from '../../types.js';\n\nexport const stellarStateCallTypes = {\n readStellarAddressRegistered: 'readStellarAddressRegistered',\n readCachedPrivateAddress: 'readCachedPrivateAddress',\n readRegistryLookup: 'readRegistryLookup',\n saveRegisteredPrivateAddress: 'saveRegisteredPrivateAddress',\n saveRegistryLookup: 'saveRegistryLookup',\n invalidateRegisteredAddress: 'invalidateRegisteredAddress',\n invalidateRegistryLookup: 'invalidateRegistryLookup',\n readAssetsCatalog: 'readAssetsCatalog',\n readAsset: 'readAsset',\n replaceAssets: 'replaceAssets',\n upsertAssets: 'upsertAssets',\n readPublicBalance: 'readPublicBalance',\n readPublicBalances: 'readPublicBalances',\n setPublicBalance: 'setPublicBalance',\n setPublicBalances: 'setPublicBalances',\n readPoolMerkleState: 'readPoolMerkleState',\n setPoolMerkleState: 'setPoolMerkleState',\n readLeafEphemeral: 'readLeafEphemeral',\n setLeafEphemeral: 'setLeafEphemeral',\n listPrivateRecords: 'listPrivateRecords',\n savePrivateRecords: 'savePrivateRecords',\n replacePrivateRecords: 'replacePrivateRecords',\n upsertPrivateRecords: 'upsertPrivateRecords',\n pruneConsumedPrivateRecords: 'pruneConsumedPrivateRecords',\n readIncomingDeliveries: 'readIncomingDeliveries',\n upsertIncomingDeliveries: 'upsertIncomingDeliveries',\n readDeliverySyncState: 'readDeliverySyncState',\n setDeliverySyncState: 'setDeliverySyncState',\n readTransactionStatus: 'readTransactionStatus',\n setTransactionStatus: 'setTransactionStatus',\n clearTransactionStatus: 'clearTransactionStatus',\n saveWalletPrivateAddressScalar: 'saveWalletPrivateAddressScalar',\n readWalletPrivateAddressScalar: 'readWalletPrivateAddressScalar',\n saveWalletPrivateAddressRecord: 'saveWalletPrivateAddressRecord',\n readWalletPrivateAddressRecord: 'readWalletPrivateAddressRecord',\n setWalletDefaultPrivateAddressNonce: 'setWalletDefaultPrivateAddressNonce',\n readWalletDefaultPrivateAddressNonce: 'readWalletDefaultPrivateAddressNonce',\n deleteWalletPrivateAddressScalar: 'deleteWalletPrivateAddressScalar',\n} as const;\n\nexport type StellarStateDefinition = StateBridgeDefinition;\n\nexport interface StellarPublicBalanceInput {\n owner: StellarAddress;\n asset: StellarAssetId;\n balance: string;\n trustlineStatus: 'active' | 'inactive' | 'none';\n}\n","import { z } from 'zod';\nimport { STELLAR_STATE_PATHS } from '../../foundation/paths.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport { assetSchema } from '../shared.js';\nimport { withoutUndefinedFields } from '../../foundation/coerce.js';\n\nexport const readAssetsCatalogSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.readAssetsCatalog),\n })\n .transform(({ type }) => ({\n type,\n operations: [\n {\n opType: 'primitiveGet' as const,\n jsonPath: STELLAR_STATE_PATHS.assets,\n },\n ],\n }));\n\nexport const readAssetSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.readAsset),\n assetId: z.string().min(1),\n })\n .transform(({ type, assetId }) => ({\n type,\n operations: [\n {\n opType: 'recordGet' as const,\n jsonPath: STELLAR_STATE_PATHS.assetsById,\n key: assetId,\n },\n ],\n }));\n\nexport const replaceAssetsSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.replaceAssets),\n assets: z.array(assetSchema),\n })\n .transform(({ type, assets }) => {\n const byId: Record<string, unknown> = {};\n const listOrder: string[] = [];\n for (const asset of assets) {\n Reflect.set(byId, asset.assetId, withoutUndefinedFields(asset));\n listOrder.push(asset.assetId);\n }\n return {\n type,\n operations: [\n {\n opType: 'primitiveSet' as const,\n jsonPath: STELLAR_STATE_PATHS.assets,\n value: { byId, listOrder },\n },\n ],\n };\n });\n\nexport const upsertAssetsSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.upsertAssets),\n assets: z.array(assetSchema),\n })\n .transform(({ type, assets }) => ({\n type,\n operations: assets.map((asset) => ({\n opType: 'recordSet' as const,\n jsonPath: STELLAR_STATE_PATHS.assetsById,\n key: asset.assetId,\n value: asset,\n })),\n }));\n","import type { StateBridgeDefinition } from '@arcanetech/privacy-sdk-core/state';\nimport { stellarStateCallTypes } from '../bridge/call-types.js';\nimport {\n readAssetsCatalogSchema,\n readAssetSchema,\n replaceAssetsSchema,\n upsertAssetsSchema,\n} from '../schemas/assets/catalog.js';\n\nexport const stellarAssetsStateDefinitions: StateBridgeDefinition[] = [\n {\n type: stellarStateCallTypes.readAssetsCatalog,\n mode: 'read',\n schema: readAssetsCatalogSchema,\n },\n {\n type: stellarStateCallTypes.readAsset,\n mode: 'read',\n schema: readAssetSchema,\n },\n {\n type: stellarStateCallTypes.replaceAssets,\n mode: 'write',\n schema: replaceAssetsSchema,\n },\n {\n type: stellarStateCallTypes.upsertAssets,\n mode: 'write',\n schema: upsertAssetsSchema,\n },\n];\n","import { z } from 'zod';\nimport { STELLAR_STATE_PATHS } from '../../foundation/paths.js';\nimport { ownerAssetKey } from '../../foundation/keys.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport { publicBalanceSchema } from '../shared.js';\n\nexport const readPublicBalanceSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.readPublicBalance),\n owner: z.string().min(1),\n asset: z.string().min(1),\n })\n .transform(({ type, owner, asset }) => ({\n type,\n operations: [\n {\n opType: 'recordGet' as const,\n jsonPath: STELLAR_STATE_PATHS.publicBalances,\n key: ownerAssetKey(owner, asset),\n },\n ],\n }));\n\nexport const readPublicBalancesSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.readPublicBalances),\n owner: z.string().min(1),\n })\n .transform(({ type }) => ({\n type,\n operations: [\n {\n opType: 'recordEntries' as const,\n jsonPath: STELLAR_STATE_PATHS.publicBalances,\n },\n ],\n }));\n\nexport const setPublicBalanceSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.setPublicBalance),\n balance: publicBalanceSchema,\n })\n .transform(({ type, balance }) => ({\n type,\n operations: [\n {\n opType: 'recordSet' as const,\n jsonPath: STELLAR_STATE_PATHS.publicBalances,\n key: ownerAssetKey(balance.owner, balance.asset),\n value: balance,\n },\n ],\n }));\n\nexport const setPublicBalancesSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.setPublicBalances),\n owner: z.string().min(1),\n balances: z.array(publicBalanceSchema),\n })\n .transform(({ type, owner, balances }) => ({\n type,\n operations: balances.map((balance) => ({\n opType: 'recordSet' as const,\n jsonPath: STELLAR_STATE_PATHS.publicBalances,\n key: ownerAssetKey(owner, balance.asset),\n value: { ...balance, owner },\n })),\n }));\n","import type { StellarAddress, StellarAssetId } from '../../types.js';\n\nexport function ownerAssetKey(owner: StellarAddress, asset: StellarAssetId): string {\n return `${owner}:${asset}`;\n}\n\nexport function readRecordValue<T>(\n record: Record<string, T>,\n key: string,\n): T | undefined {\n if (!Object.hasOwn(record, key)) {\n return undefined;\n }\n return Reflect.get(record, key) as T | undefined;\n}\n\nexport function poolLeafKey(poolContract: string, leafIndex: number): string {\n return `${poolContract}:${leafIndex}`;\n}\n\nexport function privateAddressAssetKey(\n privateAddress: string,\n asset: StellarAssetId,\n): string {\n return `${privateAddress}:${asset}`;\n}\n\nexport function walletOwnerNonceKey(owner: StellarAddress, nonce: string): string {\n return `${owner}:${nonce}`;\n}\n","import type { StateBridgeDefinition } from '@arcanetech/privacy-sdk-core/state';\nimport { stellarStateCallTypes } from '../bridge/call-types.js';\nimport {\n readPublicBalanceSchema,\n readPublicBalancesSchema,\n setPublicBalanceSchema,\n setPublicBalancesSchema,\n} from '../schemas/assets/balances.js';\n\nexport const stellarBalancesStateDefinitions: StateBridgeDefinition[] = [\n {\n type: stellarStateCallTypes.readPublicBalance,\n mode: 'read',\n schema: readPublicBalanceSchema,\n },\n {\n type: stellarStateCallTypes.readPublicBalances,\n mode: 'read',\n schema: readPublicBalancesSchema,\n },\n {\n type: stellarStateCallTypes.setPublicBalance,\n mode: 'write',\n schema: setPublicBalanceSchema,\n },\n {\n type: stellarStateCallTypes.setPublicBalances,\n mode: 'write',\n schema: setPublicBalancesSchema,\n },\n];\n","import { z } from 'zod';\nimport { STELLAR_STATE_PATHS } from '../../foundation/paths.js';\nimport { privateAddressAssetKey } from '../../foundation/keys.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport { deliverySyncStateSchema, incomingDeliverySchema } from '../shared.js';\n\nexport const readIncomingDeliveriesSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.readIncomingDeliveries),\n })\n .transform(({ type }) => ({\n type,\n operations: [\n {\n opType: 'primitiveGet' as const,\n jsonPath: STELLAR_STATE_PATHS.deliveriesIncomingById,\n },\n ],\n }));\n\nexport const upsertIncomingDeliveriesSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.upsertIncomingDeliveries),\n deliveries: z.array(incomingDeliverySchema),\n })\n .transform(({ type, deliveries }) => ({\n type,\n operations: deliveries.map((delivery) => ({\n opType: 'recordSet' as const,\n jsonPath: STELLAR_STATE_PATHS.deliveriesIncomingById,\n key: String(delivery.id),\n value: delivery,\n })),\n }));\n\nexport const readDeliverySyncStateSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.readDeliverySyncState),\n privateAddress: z.string().min(1),\n asset: z.string().min(1),\n })\n .transform(({ type, privateAddress, asset }) => ({\n type,\n operations: [\n {\n opType: 'recordGet' as const,\n jsonPath: STELLAR_STATE_PATHS.deliveriesSync,\n key: privateAddressAssetKey(privateAddress, asset),\n },\n ],\n }));\n\nexport const setDeliverySyncStateSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.setDeliverySyncState),\n syncState: deliverySyncStateSchema,\n })\n .transform(({ type, syncState }) => ({\n type,\n operations: [\n {\n opType: 'recordSet' as const,\n jsonPath: STELLAR_STATE_PATHS.deliveriesSync,\n key: privateAddressAssetKey(syncState.privateAddress, syncState.asset),\n value: syncState,\n },\n ],\n }));\n","import type { StateBridgeDefinition } from '@arcanetech/privacy-sdk-core/state';\nimport { stellarStateCallTypes } from '../bridge/call-types.js';\nimport {\n readDeliverySyncStateSchema,\n readIncomingDeliveriesSchema,\n setDeliverySyncStateSchema,\n upsertIncomingDeliveriesSchema,\n} from '../schemas/claims/deliveries.js';\n\nexport const stellarDeliveriesStateDefinitions: StateBridgeDefinition[] = [\n {\n type: stellarStateCallTypes.readIncomingDeliveries,\n mode: 'read',\n schema: readIncomingDeliveriesSchema,\n },\n {\n type: stellarStateCallTypes.upsertIncomingDeliveries,\n mode: 'write',\n schema: upsertIncomingDeliveriesSchema,\n },\n {\n type: stellarStateCallTypes.readDeliverySyncState,\n mode: 'read',\n schema: readDeliverySyncStateSchema,\n },\n {\n type: stellarStateCallTypes.setDeliverySyncState,\n mode: 'write',\n schema: setDeliverySyncStateSchema,\n },\n];\n","import { z } from 'zod';\nimport { STELLAR_STATE_PATHS } from '../../foundation/paths.js';\nimport { poolLeafKey } from '../../foundation/keys.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport { leafEphemeralSchema, poolMerkleStateSchema } from '../shared.js';\n\nexport const readPoolMerkleStateSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.readPoolMerkleState),\n poolContract: z.string().min(1),\n })\n .transform(({ type, poolContract }) => ({\n type,\n operations: [\n {\n opType: 'recordGet' as const,\n jsonPath: STELLAR_STATE_PATHS.poolsByContract,\n key: poolContract,\n },\n ],\n }));\n\nexport const setPoolMerkleStateSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.setPoolMerkleState),\n state: poolMerkleStateSchema,\n })\n .transform(({ type, state }) => ({\n type,\n operations: [\n {\n opType: 'recordSet' as const,\n jsonPath: STELLAR_STATE_PATHS.poolsByContract,\n key: state.poolContract,\n value: state,\n },\n ],\n }));\n\nexport const readLeafEphemeralSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.readLeafEphemeral),\n poolContract: z.string().min(1),\n leafIndex: z.number().int().nonnegative(),\n })\n .transform(({ type, poolContract, leafIndex }) => ({\n type,\n operations: [\n {\n opType: 'recordGet' as const,\n jsonPath: STELLAR_STATE_PATHS.poolsLeafEphemeral,\n key: poolLeafKey(poolContract, leafIndex),\n },\n ],\n }));\n\nexport const setLeafEphemeralSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.setLeafEphemeral),\n ephemeral: leafEphemeralSchema,\n })\n .transform(({ type, ephemeral }) => ({\n type,\n operations: [\n {\n opType: 'recordSet' as const,\n jsonPath: STELLAR_STATE_PATHS.poolsLeafEphemeral,\n key: poolLeafKey(ephemeral.poolContract, ephemeral.leafIndex),\n value: ephemeral,\n },\n ],\n }));\n","import type { StateBridgeDefinition } from '@arcanetech/privacy-sdk-core/state';\nimport { stellarStateCallTypes } from '../bridge/call-types.js';\nimport {\n readLeafEphemeralSchema,\n readPoolMerkleStateSchema,\n setLeafEphemeralSchema,\n setPoolMerkleStateSchema,\n} from '../schemas/pool/merkle.js';\n\nexport const stellarPoolStateDefinitions: StateBridgeDefinition[] = [\n {\n type: stellarStateCallTypes.readPoolMerkleState,\n mode: 'read',\n schema: readPoolMerkleStateSchema,\n },\n {\n type: stellarStateCallTypes.setPoolMerkleState,\n mode: 'write',\n schema: setPoolMerkleStateSchema,\n },\n {\n type: stellarStateCallTypes.readLeafEphemeral,\n mode: 'read',\n schema: readLeafEphemeralSchema,\n },\n {\n type: stellarStateCallTypes.setLeafEphemeral,\n mode: 'write',\n schema: setLeafEphemeralSchema,\n },\n];\n","import { z } from 'zod';\nimport { STELLAR_STATE_PATHS } from '../../foundation/paths.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport { rejectConsumedPrivateRecords } from '../../filters/ops.js';\nimport { privateRecordSchema } from '../shared.js';\n\nexport const listPrivateRecordsSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.listPrivateRecords),\n })\n .transform(({ type }) => ({\n type,\n operations: [\n {\n opType: 'primitiveGet' as const,\n jsonPath: STELLAR_STATE_PATHS.privateRecords,\n },\n ],\n }));\n\nexport const savePrivateRecordsSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.savePrivateRecords),\n records: z.array(privateRecordSchema),\n })\n .transform(({ type, records }) => ({\n type,\n operations: [\n {\n opType: 'arrayPush' as const,\n jsonPath: STELLAR_STATE_PATHS.privateRecords,\n items: records,\n },\n ],\n }));\n\nexport const replacePrivateRecordsSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.replacePrivateRecords),\n records: z.array(privateRecordSchema),\n })\n .transform(({ type, records }) => ({\n type,\n operations: [\n {\n opType: 'arrayClean' as const,\n jsonPath: STELLAR_STATE_PATHS.privateRecords,\n },\n {\n opType: 'arrayPush' as const,\n jsonPath: STELLAR_STATE_PATHS.privateRecords,\n items: records,\n },\n ],\n }));\n\nexport const pruneConsumedPrivateRecordsSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.pruneConsumedPrivateRecords),\n })\n .transform(({ type }) => ({\n type,\n operations: [rejectConsumedPrivateRecords()],\n }));\n","import { z } from 'zod';\nimport { STELLAR_STATE_PATHS } from '../../foundation/paths.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport { rejectPrivateRecordsByIds } from '../../filters/ops.js';\nimport { privateRecordSchema, transactionStatusSchema } from '../shared.js';\n\nexport const upsertPrivateRecordsSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.upsertPrivateRecords),\n records: z.array(privateRecordSchema),\n })\n .transform(({ type, records }) => ({\n type,\n operations: [\n rejectPrivateRecordsByIds(records.map((record) => record.id)),\n {\n opType: 'arrayPush' as const,\n jsonPath: STELLAR_STATE_PATHS.privateRecords,\n items: records,\n },\n ],\n }));\n\nexport const readTransactionStatusSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.readTransactionStatus),\n txHash: z.string().min(1),\n })\n .transform(({ type, txHash }) => ({\n type,\n operations: [\n {\n opType: 'recordGet' as const,\n jsonPath: STELLAR_STATE_PATHS.transactionsByHash,\n key: txHash,\n },\n ],\n }));\n\nexport const setTransactionStatusSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.setTransactionStatus),\n status: transactionStatusSchema,\n })\n .transform(({ type, status }) => ({\n type,\n operations: [\n {\n opType: 'recordSet' as const,\n jsonPath: STELLAR_STATE_PATHS.transactionsByHash,\n key: status.txHash,\n value: status,\n },\n ],\n }));\n\nexport const clearTransactionStatusSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.clearTransactionStatus),\n txHash: z.string().min(1),\n })\n .transform(({ type, txHash }) => ({\n type,\n operations: [\n {\n opType: 'recordDelete' as const,\n jsonPath: STELLAR_STATE_PATHS.transactionsByHash,\n key: txHash,\n },\n ],\n }));\n","import type { StateBridgeDefinition } from '@arcanetech/privacy-sdk-core/state';\nimport { stellarStateCallTypes } from '../bridge/call-types.js';\nimport {\n listPrivateRecordsSchema,\n pruneConsumedPrivateRecordsSchema,\n replacePrivateRecordsSchema,\n savePrivateRecordsSchema,\n} from '../schemas/records/private.js';\nimport { upsertPrivateRecordsSchema } from '../schemas/records/transactions.js';\n\nexport const stellarRecordsStateDefinitions: StateBridgeDefinition[] = [\n {\n type: stellarStateCallTypes.listPrivateRecords,\n mode: 'read',\n schema: listPrivateRecordsSchema,\n },\n {\n type: stellarStateCallTypes.savePrivateRecords,\n mode: 'write',\n schema: savePrivateRecordsSchema,\n },\n {\n type: stellarStateCallTypes.replacePrivateRecords,\n mode: 'write',\n schema: replacePrivateRecordsSchema,\n },\n {\n type: stellarStateCallTypes.upsertPrivateRecords,\n mode: 'write',\n schema: upsertPrivateRecordsSchema,\n },\n {\n type: stellarStateCallTypes.pruneConsumedPrivateRecords,\n mode: 'write',\n schema: pruneConsumedPrivateRecordsSchema,\n },\n];\n","import { z } from 'zod';\nimport { STELLAR_STATE_PATHS } from '../../foundation/paths.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport { registryLookupSchema } from '../shared.js';\n\nexport const readStellarAddressRegisteredSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.readStellarAddressRegistered),\n address: z.string().min(1),\n })\n .transform(({ type, address }) => ({\n type,\n operations: [\n {\n opType: 'recordGet' as const,\n jsonPath: STELLAR_STATE_PATHS.registryRegisteredAddresses,\n key: address,\n },\n ],\n }));\n\nexport const readCachedPrivateAddressSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.readCachedPrivateAddress),\n address: z.string().min(1),\n })\n .transform(({ type, address }) => ({\n type,\n operations: [\n {\n opType: 'recordGet' as const,\n jsonPath: STELLAR_STATE_PATHS.registryPrivateAddresses,\n key: address,\n },\n ],\n }));\n\nexport const saveRegisteredPrivateAddressSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.saveRegisteredPrivateAddress),\n address: z.string().min(1),\n privateAddress: z.string().min(1),\n registered: z.boolean(),\n })\n .transform(({ type, address, privateAddress, registered }) => {\n const lookup = registryLookupSchema.parse({\n owner: address,\n status: registered ? 'registered' : 'unregistered',\n privateAddressStpl1: registered ? privateAddress : undefined,\n cachedAt: new Date().toISOString(),\n });\n return {\n type,\n operations: [\n {\n opType: 'recordSet' as const,\n jsonPath: STELLAR_STATE_PATHS.registryPrivateAddresses,\n key: address,\n value: privateAddress,\n },\n {\n opType: 'recordSet' as const,\n jsonPath: STELLAR_STATE_PATHS.registryRegisteredAddresses,\n key: address,\n value: registered,\n },\n {\n opType: 'recordSet' as const,\n jsonPath: STELLAR_STATE_PATHS.registryLookups,\n key: address,\n value: lookup,\n },\n ],\n };\n });\n\nexport const invalidateRegisteredAddressSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.invalidateRegisteredAddress),\n address: z.string().min(1),\n })\n .transform(({ type, address }) => ({\n type,\n operations: [\n {\n opType: 'recordDelete' as const,\n jsonPath: STELLAR_STATE_PATHS.registryPrivateAddresses,\n key: address,\n },\n {\n opType: 'recordDelete' as const,\n jsonPath: STELLAR_STATE_PATHS.registryRegisteredAddresses,\n key: address,\n },\n {\n opType: 'recordDelete' as const,\n jsonPath: STELLAR_STATE_PATHS.registryLookups,\n key: address,\n },\n ],\n }));\n\nexport const readRegistryLookupSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.readRegistryLookup),\n address: z.string().min(1),\n })\n .transform(({ type, address }) => ({\n type,\n operations: [\n {\n opType: 'recordGet' as const,\n jsonPath: STELLAR_STATE_PATHS.registryLookups,\n key: address,\n },\n ],\n }));\n\nexport const saveRegistryLookupSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.saveRegistryLookup),\n lookup: registryLookupSchema,\n })\n .transform(({ type, lookup }) => {\n const operations: Array<{\n opType: 'recordSet';\n jsonPath: string;\n key: string;\n value: unknown;\n }> = [\n {\n opType: 'recordSet',\n jsonPath: STELLAR_STATE_PATHS.registryLookups,\n key: lookup.owner,\n value: lookup,\n },\n ];\n if (lookup.status === 'registered' && lookup.privateAddressStpl1) {\n operations.push(\n {\n opType: 'recordSet',\n jsonPath: STELLAR_STATE_PATHS.registryPrivateAddresses,\n key: lookup.owner,\n value: lookup.privateAddressStpl1,\n },\n {\n opType: 'recordSet',\n jsonPath: STELLAR_STATE_PATHS.registryRegisteredAddresses,\n key: lookup.owner,\n value: true,\n },\n );\n } else {\n operations.push({\n opType: 'recordSet',\n jsonPath: STELLAR_STATE_PATHS.registryRegisteredAddresses,\n key: lookup.owner,\n value: false,\n });\n }\n return { type, operations };\n });\n\nexport const invalidateRegistryLookupSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.invalidateRegistryLookup),\n address: z.string().min(1),\n })\n .transform(({ type, address }) => ({\n type,\n operations: [\n {\n opType: 'recordDelete' as const,\n jsonPath: STELLAR_STATE_PATHS.registryLookups,\n key: address,\n },\n {\n opType: 'recordDelete' as const,\n jsonPath: STELLAR_STATE_PATHS.registryPrivateAddresses,\n key: address,\n },\n {\n opType: 'recordDelete' as const,\n jsonPath: STELLAR_STATE_PATHS.registryRegisteredAddresses,\n key: address,\n },\n ],\n }));\n","import type { StateBridgeDefinition } from '@arcanetech/privacy-sdk-core/state';\nimport { stellarStateCallTypes } from '../bridge/call-types.js';\nimport {\n invalidateRegisteredAddressSchema,\n invalidateRegistryLookupSchema,\n readCachedPrivateAddressSchema,\n readRegistryLookupSchema,\n readStellarAddressRegisteredSchema,\n saveRegisteredPrivateAddressSchema,\n saveRegistryLookupSchema,\n} from '../schemas/registry/lookup.js';\n\nexport const stellarRegistryStateDefinitions: StateBridgeDefinition[] = [\n {\n type: stellarStateCallTypes.readStellarAddressRegistered,\n mode: 'read',\n schema: readStellarAddressRegisteredSchema,\n },\n {\n type: stellarStateCallTypes.readCachedPrivateAddress,\n mode: 'read',\n schema: readCachedPrivateAddressSchema,\n },\n {\n type: stellarStateCallTypes.readRegistryLookup,\n mode: 'read',\n schema: readRegistryLookupSchema,\n },\n {\n type: stellarStateCallTypes.saveRegisteredPrivateAddress,\n mode: 'write',\n schema: saveRegisteredPrivateAddressSchema,\n },\n {\n type: stellarStateCallTypes.saveRegistryLookup,\n mode: 'write',\n schema: saveRegistryLookupSchema,\n },\n {\n type: stellarStateCallTypes.invalidateRegisteredAddress,\n mode: 'write',\n schema: invalidateRegisteredAddressSchema,\n },\n {\n type: stellarStateCallTypes.invalidateRegistryLookup,\n mode: 'write',\n schema: invalidateRegistryLookupSchema,\n },\n];\n","import type { StateBridgeDefinition } from '@arcanetech/privacy-sdk-core/state';\nimport {\n clearTransactionStatusSchema,\n readTransactionStatusSchema,\n setTransactionStatusSchema,\n} from '../schemas/records/transactions.js';\nimport { stellarStateCallTypes } from '../bridge/call-types.js';\n\nexport const stellarTransactionStateDefinitions: StateBridgeDefinition[] = [\n {\n type: stellarStateCallTypes.readTransactionStatus,\n mode: 'read',\n schema: readTransactionStatusSchema,\n },\n {\n type: stellarStateCallTypes.setTransactionStatus,\n mode: 'write',\n schema: setTransactionStatusSchema,\n },\n {\n type: stellarStateCallTypes.clearTransactionStatus,\n mode: 'write',\n schema: clearTransactionStatusSchema,\n },\n];\n","import { z } from 'zod';\nimport { walletOwnerNonceKey } from '../../foundation/keys.js';\nimport { STELLAR_STATE_PATHS } from '../../foundation/paths.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport { walletPrivateAddressScalarSchema } from '../shared.js';\n\nexport const saveWalletPrivateAddressScalarSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.saveWalletPrivateAddressScalar),\n scalar: walletPrivateAddressScalarSchema,\n })\n .transform(({ type, scalar }) => ({\n type,\n operations: [\n {\n opType: 'recordSet' as const,\n jsonPath: STELLAR_STATE_PATHS.walletPrivateAddressScalars,\n key: walletOwnerNonceKey(scalar.owner, scalar.nonce),\n value: scalar,\n },\n ],\n }));\n\nexport const readWalletPrivateAddressScalarSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.readWalletPrivateAddressScalar),\n owner: z.string().min(1),\n nonce: z.string().min(1),\n })\n .transform(({ type, owner, nonce }) => ({\n type,\n operations: [\n {\n opType: 'recordGet' as const,\n jsonPath: STELLAR_STATE_PATHS.walletPrivateAddressScalars,\n key: walletOwnerNonceKey(owner, nonce),\n },\n ],\n }));\n","import { z } from 'zod';\nimport { walletOwnerNonceKey } from '../../foundation/keys.js';\nimport { STELLAR_STATE_PATHS } from '../../foundation/paths.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport { walletPrivateAddressRecordSchema } from '../shared.js';\n\nexport const saveWalletPrivateAddressRecordSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.saveWalletPrivateAddressRecord),\n record: walletPrivateAddressRecordSchema,\n })\n .transform(({ type, record }) => ({\n type,\n operations: [\n {\n opType: 'recordSet' as const,\n jsonPath: STELLAR_STATE_PATHS.walletPrivateAddressRecords,\n key: walletOwnerNonceKey(record.owner, record.nonce),\n value: record,\n },\n ],\n }));\n\nexport const readWalletPrivateAddressRecordSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.readWalletPrivateAddressRecord),\n owner: z.string().min(1),\n nonce: z.string().min(1),\n })\n .transform(({ type, owner, nonce }) => ({\n type,\n operations: [\n {\n opType: 'recordGet' as const,\n jsonPath: STELLAR_STATE_PATHS.walletPrivateAddressRecords,\n key: walletOwnerNonceKey(owner, nonce),\n },\n ],\n }));\n\nexport const setWalletDefaultPrivateAddressNonceSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.setWalletDefaultPrivateAddressNonce),\n owner: z.string().min(1),\n nonce: z.string().min(1),\n })\n .transform(({ type, owner, nonce }) => ({\n type,\n operations: [\n {\n opType: 'recordSet' as const,\n jsonPath: STELLAR_STATE_PATHS.walletDefaultPrivateAddressNonce,\n key: owner,\n value: nonce,\n },\n ],\n }));\n\nexport const readWalletDefaultPrivateAddressNonceSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.readWalletDefaultPrivateAddressNonce),\n owner: z.string().min(1),\n })\n .transform(({ type, owner }) => ({\n type,\n operations: [\n {\n opType: 'recordGet' as const,\n jsonPath: STELLAR_STATE_PATHS.walletDefaultPrivateAddressNonce,\n key: owner,\n },\n ],\n }));\n\nexport const deleteWalletPrivateAddressScalarSchema = z\n .object({\n type: z.literal(stellarStateCallTypes.deleteWalletPrivateAddressScalar),\n owner: z.string().min(1),\n nonce: z.string().min(1),\n })\n .transform(({ type, owner, nonce }) => ({\n type,\n operations: [\n {\n opType: 'recordDelete' as const,\n jsonPath: STELLAR_STATE_PATHS.walletPrivateAddressScalars,\n key: walletOwnerNonceKey(owner, nonce),\n },\n ],\n }));\n","import type { StateBridgeDefinition } from '@arcanetech/privacy-sdk-core/state';\nimport {\n readWalletPrivateAddressScalarSchema,\n saveWalletPrivateAddressScalarSchema,\n} from '../schemas/wallet/scalar.js';\nimport {\n deleteWalletPrivateAddressScalarSchema,\n readWalletDefaultPrivateAddressNonceSchema,\n readWalletPrivateAddressRecordSchema,\n saveWalletPrivateAddressRecordSchema,\n setWalletDefaultPrivateAddressNonceSchema,\n} from '../schemas/wallet/private-address.js';\nimport { stellarStateCallTypes } from '../bridge/call-types.js';\n\nexport const stellarWalletStateDefinitions: StateBridgeDefinition[] = [\n {\n type: stellarStateCallTypes.saveWalletPrivateAddressScalar,\n mode: 'write',\n schema: saveWalletPrivateAddressScalarSchema,\n },\n {\n type: stellarStateCallTypes.readWalletPrivateAddressScalar,\n mode: 'read',\n schema: readWalletPrivateAddressScalarSchema,\n },\n {\n type: stellarStateCallTypes.saveWalletPrivateAddressRecord,\n mode: 'write',\n schema: saveWalletPrivateAddressRecordSchema,\n },\n {\n type: stellarStateCallTypes.readWalletPrivateAddressRecord,\n mode: 'read',\n schema: readWalletPrivateAddressRecordSchema,\n },\n {\n type: stellarStateCallTypes.setWalletDefaultPrivateAddressNonce,\n mode: 'write',\n schema: setWalletDefaultPrivateAddressNonceSchema,\n },\n {\n type: stellarStateCallTypes.readWalletDefaultPrivateAddressNonce,\n mode: 'read',\n schema: readWalletDefaultPrivateAddressNonceSchema,\n },\n {\n type: stellarStateCallTypes.deleteWalletPrivateAddressScalar,\n mode: 'write',\n schema: deleteWalletPrivateAddressScalarSchema,\n },\n];\n","import type { StateBridgeDefinition } from '@arcanetech/privacy-sdk-core/state';\nimport { registerStellarArrayFilterSchemas } from '../filters/register-schemas.js';\nimport { stellarAssetsStateDefinitions } from './assets.js';\nimport { stellarBalancesStateDefinitions } from './balances.js';\nimport { stellarDeliveriesStateDefinitions } from './deliveries.js';\nimport { stellarPoolStateDefinitions } from './pool.js';\nimport { stellarRecordsStateDefinitions } from './records.js';\nimport { stellarRegistryStateDefinitions } from './registry.js';\nimport { stellarTransactionStateDefinitions } from './transactions.js';\nimport { stellarWalletStateDefinitions } from './wallet.js';\n\nregisterStellarArrayFilterSchemas();\n\nexport const stellarStateDefinitions: StateBridgeDefinition[] = [\n ...stellarRegistryStateDefinitions,\n ...stellarAssetsStateDefinitions,\n ...stellarBalancesStateDefinitions,\n ...stellarPoolStateDefinitions,\n ...stellarRecordsStateDefinitions,\n ...stellarDeliveriesStateDefinitions,\n ...stellarWalletStateDefinitions,\n ...stellarTransactionStateDefinitions,\n];\n","import {\n createStateBridge,\n type StateBridge,\n type StateBridgeAdapter,\n} from '@arcanetech/privacy-sdk-core/state';\nimport { stellarStateDefinitions } from '../definitions/index.js';\n\nexport class StellarStateServiceBase {\n readonly bridge: StateBridge;\n\n constructor(adapter: StateBridgeAdapter) {\n this.bridge = createStateBridge(adapter);\n this.bridge.init(stellarStateDefinitions);\n }\n}\n","import type {\n StellarAddress,\n StellarAssetId,\n StellarPublicBalance,\n} from '../../../types.js';\nimport {\n normalizePublicBalance,\n normalizePublicBalancesFromEntries,\n} from '../../read/normalize.js';\nimport {\n stellarStateCallTypes,\n type StellarPublicBalanceInput,\n} from '../../bridge/call-types.js';\nimport type { StellarStateServiceBase } from '../base.js';\n\nexport function createPublicBalanceMethods(context: StellarStateServiceBase) {\n const { bridge } = context;\n\n return {\n async getPublicBalance(input: {\n owner: StellarAddress;\n asset: StellarAssetId;\n }): Promise<StellarPublicBalance | undefined> {\n const value = await bridge.read<unknown>({\n type: stellarStateCallTypes.readPublicBalance,\n owner: input.owner,\n asset: input.asset,\n });\n return normalizePublicBalance(value);\n },\n\n async getPublicBalances(owner: StellarAddress): Promise<StellarPublicBalance[]> {\n const entries = await bridge.read<unknown>({\n type: stellarStateCallTypes.readPublicBalances,\n owner,\n });\n return normalizePublicBalancesFromEntries(entries, owner);\n },\n\n setPublicBalance(balance: StellarPublicBalanceInput): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.setPublicBalance,\n balance,\n });\n },\n\n setPublicBalances(input: {\n owner: StellarAddress;\n balances: StellarPublicBalanceInput[];\n }): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.setPublicBalances,\n owner: input.owner,\n balances: input.balances,\n });\n },\n };\n}\n","import type { StellarAsset } from '../../../types.js';\nimport { readRecordValue } from '../../foundation/keys.js';\nimport type { StellarStateServiceBase } from '../base.js';\n\ntype AssetsCatalogDeps = {\n getAssetsCatalog: () => Promise<{\n byId: Record<string, StellarAsset>;\n listOrder: string[];\n }>;\n replaceAssets: (assets: StellarAsset[]) => Promise<void>;\n};\n\nexport function createAssetsUpsertMethods(\n _context: StellarStateServiceBase,\n deps: AssetsCatalogDeps,\n) {\n return {\n async upsertAssets(assets: StellarAsset[]): Promise<void> {\n if (assets.length === 0) {\n return;\n }\n const catalog = await deps.getAssetsCatalog();\n const byId = { ...catalog.byId };\n const listOrder = [...catalog.listOrder];\n for (const asset of assets) {\n byId[asset.assetId] = asset;\n if (!listOrder.includes(asset.assetId)) {\n listOrder.push(asset.assetId);\n }\n }\n const merged = listOrder\n .map((assetId) => readRecordValue(byId, assetId))\n .filter((asset): asset is StellarAsset => asset !== undefined);\n await deps.replaceAssets(merged);\n },\n };\n}\n","import type {\n StellarAsset,\n StellarAssetId,\n StellarAssetsCatalog,\n} from '../../../types.js';\nimport { readRecordValue } from '../../foundation/keys.js';\nimport { normalizeAsset, normalizeAssetsCatalog } from '../../read/normalize.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport type { StellarStateServiceBase } from '../base.js';\nimport { createAssetsUpsertMethods } from './upsert-methods.js';\n\nexport function createAssetsCatalogMethods(context: StellarStateServiceBase) {\n const { bridge } = context;\n\n async function getAssetsCatalog(): Promise<StellarAssetsCatalog> {\n const value = await bridge.read<unknown>({\n type: stellarStateCallTypes.readAssetsCatalog,\n });\n return normalizeAssetsCatalog(value);\n }\n\n function replaceAssets(assets: StellarAsset[]): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.replaceAssets,\n assets,\n });\n }\n\n const coreMethods = {\n getAssetsCatalog,\n\n async getAsset(assetId: StellarAssetId): Promise<StellarAsset | undefined> {\n const value = await bridge.read<unknown>({\n type: stellarStateCallTypes.readAsset,\n assetId,\n });\n return normalizeAsset(value);\n },\n\n async getAssets(): Promise<StellarAsset[]> {\n const catalog = await getAssetsCatalog();\n return catalog.listOrder\n .map((assetId) => readRecordValue(catalog.byId, assetId))\n .filter((asset): asset is StellarAsset => asset !== undefined);\n },\n\n async getAssetsForPool(poolContract: string): Promise<StellarAsset[]> {\n const assets = await coreMethods.getAssets();\n return assets.filter((asset) => asset.poolContracts.includes(poolContract));\n },\n\n replaceAssets,\n };\n\n return {\n ...coreMethods,\n ...createAssetsUpsertMethods(context, {\n getAssetsCatalog,\n replaceAssets,\n }),\n };\n}\n","import type { StellarStateServiceBase } from '../base.js';\nimport { createPublicBalanceMethods } from './balance-methods.js';\nimport { createAssetsCatalogMethods } from './catalog-methods.js';\n\nexport function createAssetsService(context: StellarStateServiceBase) {\n return {\n ...createAssetsCatalogMethods(context),\n ...createPublicBalanceMethods(context),\n };\n}\n","import type {\n StellarIncomingDeliveriesFilter,\n StellarIncomingDelivery,\n} from '../../../types.js';\nimport { normalizeIncomingDeliveries } from '../../read/normalize.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport type { StellarStateServiceBase } from '../base.js';\n\nexport function createIncomingDeliveryMethods(context: StellarStateServiceBase) {\n const { bridge } = context;\n\n async function getIncomingDeliveries(\n filter: StellarIncomingDeliveriesFilter,\n ): Promise<StellarIncomingDelivery[]> {\n const values = await bridge.read<unknown>({\n type: stellarStateCallTypes.readIncomingDeliveries,\n });\n const deliveries = normalizeIncomingDeliveries(values);\n return deliveries.filter((delivery: StellarIncomingDelivery) => {\n if (delivery.privateAddress !== filter.privateAddress) {\n return false;\n }\n if (filter.asset !== undefined && delivery.asset !== filter.asset) {\n return false;\n }\n if (!filter.includeProcessed && delivery.processed) {\n return false;\n }\n return true;\n });\n }\n\n function upsertIncomingDeliveries(\n deliveries: StellarIncomingDelivery[],\n ): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.upsertIncomingDeliveries,\n deliveries,\n });\n }\n\n return {\n getIncomingDeliveries,\n upsertIncomingDeliveries,\n\n async markDeliveryProcessed(id: number): Promise<void> {\n const deliveries = await bridge.read<unknown>({\n type: stellarStateCallTypes.readIncomingDeliveries,\n });\n const match = normalizeIncomingDeliveries(deliveries).find(\n (delivery: StellarIncomingDelivery) => delivery.id === id,\n );\n if (!match) {\n return;\n }\n await upsertIncomingDeliveries([{ ...match, processed: true }]);\n },\n };\n}\n","import type { StellarAssetId, StellarDeliverySyncState } from '../../../types.js';\nimport { normalizeDeliverySyncState } from '../../read/normalize.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport type { StellarStateServiceBase } from '../base.js';\n\nexport function createDeliverySyncMethods(context: StellarStateServiceBase) {\n const { bridge } = context;\n\n return {\n async getDeliverySyncState(input: {\n privateAddress: string;\n asset: StellarAssetId;\n }): Promise<StellarDeliverySyncState | undefined> {\n const value = await bridge.read<unknown>({\n type: stellarStateCallTypes.readDeliverySyncState,\n privateAddress: input.privateAddress,\n asset: input.asset,\n });\n return normalizeDeliverySyncState(value);\n },\n\n setDeliverySyncState(syncState: StellarDeliverySyncState): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.setDeliverySyncState,\n syncState,\n });\n },\n };\n}\n","import type { StellarStateServiceBase } from '../base.js';\nimport { createIncomingDeliveryMethods } from './incoming-methods.js';\nimport { createDeliverySyncMethods } from './sync-methods.js';\n\nexport function createDeliveriesService(context: StellarStateServiceBase) {\n return {\n ...createIncomingDeliveryMethods(context),\n ...createDeliverySyncMethods(context),\n };\n}\n","import type { StellarLeafEphemeral } from '../../../types.js';\nimport { normalizeLeafEphemeral } from '../../read/normalize.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport type { StellarStateServiceBase } from '../base.js';\n\nfunction isMissingStatePathError(error: unknown): boolean {\n if (!(error instanceof Error)) {\n return false;\n }\n return (\n error.message.includes('Record path not found:') ||\n error.message.includes('JSONPath segment not found:')\n );\n}\n\nexport function createPoolEphemeralService(context: StellarStateServiceBase) {\n const { bridge } = context;\n\n return {\n async getLeafEphemeral(input: {\n poolContract: string;\n leafIndex: number;\n }): Promise<StellarLeafEphemeral | undefined> {\n try {\n const value = await bridge.read<unknown>({\n type: stellarStateCallTypes.readLeafEphemeral,\n poolContract: input.poolContract,\n leafIndex: input.leafIndex,\n });\n return normalizeLeafEphemeral(value);\n } catch (error) {\n if (isMissingStatePathError(error)) {\n return undefined;\n }\n throw error;\n }\n },\n\n setLeafEphemeral(ephemeral: StellarLeafEphemeral): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.setLeafEphemeral,\n ephemeral,\n });\n },\n };\n}\n","import type { StellarPoolMerkleState } from '../../../types.js';\nimport { withoutUndefinedFields } from '../../foundation/coerce.js';\nimport { normalizePoolMerkleState } from '../../read/normalize.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport type { StellarStateServiceBase } from '../base.js';\n\nfunction isMissingStatePathError(error: unknown): boolean {\n if (!(error instanceof Error)) {\n return false;\n }\n return (\n error.message.includes('Record path not found:') ||\n error.message.includes('JSONPath segment not found:')\n );\n}\n\nexport function createPoolMerkleService(context: StellarStateServiceBase) {\n const { bridge } = context;\n\n return {\n async getPoolMerkleState(\n poolContract: string,\n ): Promise<StellarPoolMerkleState | undefined> {\n try {\n const value = await bridge.read<unknown>({\n type: stellarStateCallTypes.readPoolMerkleState,\n poolContract,\n });\n return normalizePoolMerkleState(value);\n } catch (error) {\n if (isMissingStatePathError(error)) {\n return undefined;\n }\n throw error;\n }\n },\n\n setPoolMerkleState(state: StellarPoolMerkleState): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.setPoolMerkleState,\n state,\n });\n },\n\n async appendPoolCommitments(input: {\n poolContract: string;\n commitments: string[];\n merkleRootHex: string;\n syncedLedger?: number;\n }): Promise<void> {\n const current = await this.getPoolMerkleState(input.poolContract);\n const mergedCommitments = [...(current?.commitments ?? []), ...input.commitments];\n await this.setPoolMerkleState(\n withoutUndefinedFields({\n poolContract: input.poolContract,\n commitments: mergedCommitments,\n commitmentCount: mergedCommitments.length,\n merkleRootHex: input.merkleRootHex,\n updatedAt: Date.now(),\n syncedLedger: input.syncedLedger ?? current?.syncedLedger,\n }) as StellarPoolMerkleState,\n );\n },\n };\n}\n","import type { StellarPrivateRecord } from '../../../types.js';\n\nfunction privateCoinNotesEqual(\n left: StellarPrivateRecord['coinNote'],\n right: StellarPrivateRecord['coinNote'],\n): boolean {\n if (left === undefined || right === undefined) {\n return left === right;\n }\n return (\n left.value === right.value &&\n left.nullifier === right.nullifier &&\n left.secret === right.secret &&\n left.commitment === right.commitment &&\n left.asset_hi === right.asset_hi &&\n left.asset_lo === right.asset_lo &&\n left.application_id === right.application_id\n );\n}\n\nfunction privateRecordCoreFieldsEqual(\n left: StellarPrivateRecord,\n right: StellarPrivateRecord,\n): boolean {\n return (\n left.id === right.id &&\n left.owner === right.owner &&\n left.asset === right.asset &&\n left.amount === right.amount &&\n left.consumed === right.consumed &&\n left.status === right.status &&\n left.poolContract === right.poolContract &&\n left.amountDisplay === right.amountDisplay\n );\n}\n\nfunction privateRecordChainFieldsEqual(\n left: StellarPrivateRecord,\n right: StellarPrivateRecord,\n): boolean {\n return (\n left.commitmentHex === right.commitmentHex &&\n left.nullifierHex === right.nullifierHex &&\n left.deliveryId === right.deliveryId &&\n left.privateAddress === right.privateAddress &&\n left.txHash === right.txHash\n );\n}\n\nfunction privateRecordSecretFieldsEqual(\n left: StellarPrivateRecord,\n right: StellarPrivateRecord,\n): boolean {\n return (\n left.depositScalarHex === right.depositScalarHex &&\n left.precommitementHex === right.precommitementHex &&\n privateCoinNotesEqual(left.coinNote, right.coinNote)\n );\n}\n\nfunction privateRecordsEqual(\n left: StellarPrivateRecord,\n right: StellarPrivateRecord,\n): boolean {\n return (\n privateRecordCoreFieldsEqual(left, right) &&\n privateRecordChainFieldsEqual(left, right) &&\n privateRecordSecretFieldsEqual(left, right)\n );\n}\n\nexport function privateRecordArraysEqual(\n left: StellarPrivateRecord[],\n right: StellarPrivateRecord[],\n): boolean {\n return (\n left.length === right.length &&\n left.every((record, index) => {\n const rightRecord = right.at(index);\n return rightRecord !== undefined && privateRecordsEqual(record, rightRecord);\n })\n );\n}\n\nexport function mergePrivateRecords(\n current: StellarPrivateRecord[],\n records: StellarPrivateRecord[],\n): StellarPrivateRecord[] {\n const ids = new Set(records.map((record) => record.id));\n return [...current.filter((record) => !ids.has(record.id)), ...records];\n}\n","import type {\n StellarAddress,\n StellarAssetId,\n StellarPrivateAssetRow,\n StellarPrivateRecord,\n StellarPrivateRecordStatus,\n} from '../../../types.js';\nimport { normalizePrivateRecords } from '../../read/normalize.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport type { StellarAvailablePrivateRecordsFilter } from '../../domain/types.js';\nimport type { StellarStateServiceBase } from '../base.js';\nimport {\n mergePrivateRecords,\n privateRecordArraysEqual,\n} from './private-record-upsert.js';\n\ntype PrivateRecordBridge = StellarStateServiceBase['bridge'];\n\nasync function readPrivateRecords(\n bridge: PrivateRecordBridge,\n): Promise<StellarPrivateRecord[]> {\n const value = await bridge.read<unknown>({\n type: stellarStateCallTypes.listPrivateRecords,\n });\n return normalizePrivateRecords(value);\n}\n\nfunction writeReplacePrivateRecords(\n bridge: PrivateRecordBridge,\n records: StellarPrivateRecord[],\n): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.replacePrivateRecords,\n records,\n });\n}\n\nasync function readAvailablePrivateRecords(\n bridge: PrivateRecordBridge,\n filter: StellarAvailablePrivateRecordsFilter,\n): Promise<StellarPrivateRecord[]> {\n const records = await readPrivateRecords(bridge);\n return records.filter((record) => matchesPrivateRecordFilter(record, filter, false));\n}\n\nasync function applyPrivateRecordsStatus(\n bridge: PrivateRecordBridge,\n records: StellarPrivateRecord[],\n status: StellarPrivateRecordStatus,\n): Promise<void> {\n const current = await readPrivateRecords(bridge);\n const ids = new Set(records.map((record) => record.id));\n const next = current.map((record) =>\n ids.has(record.id)\n ? {\n ...record,\n status,\n consumed: status === 'spent' ? true : record.consumed,\n }\n : record,\n );\n await writeReplacePrivateRecords(bridge, next);\n}\n\nfunction aggregatePrivateAssetRows(\n records: StellarPrivateRecord[],\n owner: StellarAddress,\n): StellarPrivateAssetRow[] {\n const available = records.filter(\n (record) => record.owner === owner && !record.consumed && record.status !== 'spent',\n );\n const byAsset = new Map<string, StellarPrivateAssetRow>();\n for (const record of available) {\n const existing = byAsset.get(record.asset);\n const amountDisplay = record.amountDisplay ?? Number(record.amount);\n if (existing) {\n existing.totalAmount += record.amount;\n existing.totalAmountDisplay += amountDisplay;\n } else {\n byAsset.set(record.asset, {\n assetId: record.asset,\n poolContract: record.poolContract ?? '',\n totalAmount: record.amount,\n totalAmountDisplay: amountDisplay,\n });\n }\n }\n return [...byAsset.values()].toSorted((left, right) =>\n left.assetId.localeCompare(right.assetId),\n );\n}\n\nfunction pruneConsumedPrivateRecords(bridge: PrivateRecordBridge): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.pruneConsumedPrivateRecords,\n });\n}\n\nfunction savePrivateRecords(\n bridge: PrivateRecordBridge,\n records: StellarPrivateRecord[],\n): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.savePrivateRecords,\n records,\n });\n}\n\nasync function upsertPrivateRecords(\n bridge: PrivateRecordBridge,\n records: StellarPrivateRecord[],\n): Promise<void> {\n if (records.length === 0) {\n return;\n }\n const current = await readPrivateRecords(bridge);\n const next = mergePrivateRecords(current, records);\n if (privateRecordArraysEqual(current, next)) {\n return;\n }\n return bridge.write({\n type: stellarStateCallTypes.upsertPrivateRecords,\n records,\n });\n}\n\nasync function readPrivateBalance(\n bridge: PrivateRecordBridge,\n input: { owner: StellarAddress; asset: StellarAssetId },\n): Promise<bigint> {\n const records = await readAvailablePrivateRecords(bridge, {\n owner: input.owner,\n asset: input.asset,\n });\n return records.reduce((total, record) => total + record.amount, 0n);\n}\n\nasync function readPrivateAssetRows(\n bridge: PrivateRecordBridge,\n owner: StellarAddress,\n): Promise<StellarPrivateAssetRow[]> {\n const records = await readPrivateRecords(bridge);\n return aggregatePrivateAssetRows(records, owner);\n}\n\nexport function createPrivateRecordMethods(context: StellarStateServiceBase) {\n const { bridge } = context;\n\n return {\n pruneConsumedPrivateRecords: () => pruneConsumedPrivateRecords(bridge),\n getPrivateRecords: () => readPrivateRecords(bridge),\n getAvailablePrivateRecords: (filter: StellarAvailablePrivateRecordsFilter) =>\n readAvailablePrivateRecords(bridge, filter),\n listPrivateRecords: (filter: {\n owner?: StellarAddress;\n privateAddress?: string;\n asset?: StellarAssetId;\n amount?: bigint;\n }) => readAvailablePrivateRecords(bridge, filter),\n savePrivateRecords: (records: StellarPrivateRecord[]) =>\n savePrivateRecords(bridge, records),\n upsertPrivateRecords: (records: StellarPrivateRecord[]) =>\n upsertPrivateRecords(bridge, records),\n markPrivateRecordsUsed: (records: StellarPrivateRecord[]) =>\n applyPrivateRecordsStatus(bridge, records, 'spent'),\n markPrivateRecordsStatus: (\n records: StellarPrivateRecord[],\n status: StellarPrivateRecordStatus,\n ) => applyPrivateRecordsStatus(bridge, records, status),\n getPrivateBalance: (input: { owner: StellarAddress; asset: StellarAssetId }) =>\n readPrivateBalance(bridge, input),\n getPrivateAssetRows: (owner: StellarAddress) => readPrivateAssetRows(bridge, owner),\n };\n}\n\nfunction matchesPrivateRecordFilter(\n record: StellarPrivateRecord,\n filter: StellarAvailablePrivateRecordsFilter,\n includeConsumed: boolean,\n): boolean {\n if (filter.owner !== undefined && record.owner !== filter.owner) {\n return false;\n }\n if (\n filter.privateAddress !== undefined &&\n record.privateAddress !== filter.privateAddress\n ) {\n return false;\n }\n if (filter.owner === undefined && filter.privateAddress === undefined) {\n return false;\n }\n if (filter.asset !== undefined && record.asset !== filter.asset) {\n return false;\n }\n if (!includeConsumed && (record.consumed || record.status === 'spent')) {\n return false;\n }\n return true;\n}\n","import type { StellarTransactionStatus } from '../../../types.js';\nimport { normalizeTransactionStatus } from '../../read/normalize.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport type { StellarStateServiceBase } from '../base.js';\n\nexport function createTransactionRecordMethods(context: StellarStateServiceBase) {\n const { bridge } = context;\n\n return {\n async getTransactionStatus(\n txHash: string,\n ): Promise<StellarTransactionStatus | undefined> {\n const value = await bridge.read<unknown>({\n type: stellarStateCallTypes.readTransactionStatus,\n txHash,\n });\n return normalizeTransactionStatus(value);\n },\n\n setTransactionStatus(status: StellarTransactionStatus): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.setTransactionStatus,\n status,\n });\n },\n\n clearTransactionStatus(txHash: string): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.clearTransactionStatus,\n txHash,\n });\n },\n };\n}\n","import type { StellarStateServiceBase } from '../base.js';\nimport { createPrivateRecordMethods } from './private-methods.js';\nimport { createTransactionRecordMethods } from './transaction-methods.js';\n\nexport function createRecordsService(context: StellarStateServiceBase) {\n return {\n ...createPrivateRecordMethods(context),\n ...createTransactionRecordMethods(context),\n };\n}\n","import type { StellarAddress, StellarRegistryLookup } from '../../../types.js';\nimport {\n normalizeCachedPrivateAddress,\n normalizeRegistryLookup,\n normalizeRegistryLookupFromLegacy,\n} from '../../read/normalize.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport type { StellarStateServiceBase } from '../base.js';\n\ntype RegistryLookupBridge = StellarStateServiceBase['bridge'];\n\nasync function readRegistryLookup(\n bridge: RegistryLookupBridge,\n address: StellarAddress,\n): Promise<StellarRegistryLookup | undefined> {\n try {\n const value = await bridge.read<unknown>({\n type: stellarStateCallTypes.readRegistryLookup,\n address,\n });\n const lookup = normalizeRegistryLookup(value);\n if (lookup) {\n return lookup;\n }\n } catch {\n // Legacy states may not have $.registry.lookups yet.\n }\n let registered: unknown;\n let privateAddress: unknown;\n try {\n registered = await bridge.read<unknown>({\n type: stellarStateCallTypes.readStellarAddressRegistered,\n address,\n });\n } catch {\n registered = undefined;\n }\n try {\n privateAddress = await bridge.read<unknown>({\n type: stellarStateCallTypes.readCachedPrivateAddress,\n address,\n });\n } catch {\n privateAddress = undefined;\n }\n return normalizeRegistryLookupFromLegacy({\n address,\n registered,\n privateAddress,\n });\n}\n\nasync function readCachedPrivateAddress(\n bridge: RegistryLookupBridge,\n address: StellarAddress,\n): Promise<string | undefined> {\n const lookup = await readRegistryLookup(bridge, address);\n if (lookup?.privateAddressStpl1) {\n return lookup.privateAddressStpl1;\n }\n const value = await bridge.read<unknown>({\n type: stellarStateCallTypes.readCachedPrivateAddress,\n address,\n });\n return normalizeCachedPrivateAddress(value);\n}\n\nexport function createRegistryLookupReadMethods(context: StellarStateServiceBase) {\n const { bridge } = context;\n\n return {\n getRegistryLookup: (address: StellarAddress) => readRegistryLookup(bridge, address),\n\n async isStellarAddressRegistered(\n address: StellarAddress,\n ): Promise<boolean | undefined> {\n const lookup = await readRegistryLookup(bridge, address);\n if (lookup === undefined) {\n return undefined;\n }\n return lookup.status === 'registered';\n },\n\n getCachedPrivateAddress: (address: StellarAddress) =>\n readCachedPrivateAddress(bridge, address),\n };\n}\n","import type { StellarAddress, StellarRegistryLookup } from '../../../types.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport type { StellarStateServiceBase } from '../base.js';\n\nexport function createRegistryLookupWriteMethods(context: StellarStateServiceBase) {\n const { bridge } = context;\n\n async function invalidateRegistryLookup(address: StellarAddress): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.invalidateRegistryLookup,\n address,\n });\n }\n\n return {\n saveRegistryLookup(lookup: StellarRegistryLookup): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.saveRegistryLookup,\n lookup,\n });\n },\n\n saveRegisteredPrivateAddress(input: {\n address: StellarAddress;\n privateAddress: string;\n registered: boolean;\n }): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.saveRegisteredPrivateAddress,\n address: input.address,\n privateAddress: input.privateAddress,\n registered: input.registered,\n });\n },\n\n invalidateRegistryLookup,\n\n invalidateRegisteredAddress(address: StellarAddress): Promise<void> {\n return invalidateRegistryLookup(address);\n },\n };\n}\n","import type { StellarStateServiceBase } from '../base.js';\nimport { createRegistryLookupReadMethods } from './lookup-read.js';\nimport { createRegistryLookupWriteMethods } from './lookup-write.js';\n\nexport function createRegistryLookupService(context: StellarStateServiceBase) {\n return {\n ...createRegistryLookupReadMethods(context),\n ...createRegistryLookupWriteMethods(context),\n };\n}\n","import type {\n StellarAddress,\n StellarWalletPrivateAddressRecord,\n} from '../../../types.js';\nimport {\n normalizeWalletDefaultPrivateAddressNonce,\n normalizeWalletPrivateAddressRecord,\n} from '../../read/normalize.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport type { StellarStateServiceBase } from '../base.js';\n\nexport function createWalletRecordMethods(context: StellarStateServiceBase) {\n const { bridge } = context;\n\n return {\n async getWalletPrivateAddressRecord(input: {\n owner: StellarAddress;\n nonce: string;\n }): Promise<StellarWalletPrivateAddressRecord | undefined> {\n const value = await bridge.read<unknown>({\n type: stellarStateCallTypes.readWalletPrivateAddressRecord,\n owner: input.owner,\n nonce: input.nonce,\n });\n return normalizeWalletPrivateAddressRecord(value);\n },\n\n saveWalletPrivateAddressRecord(\n record: StellarWalletPrivateAddressRecord,\n ): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.saveWalletPrivateAddressRecord,\n record,\n });\n },\n\n async getWalletDefaultPrivateAddressNonce(\n owner: StellarAddress,\n ): Promise<string | undefined> {\n const value = await bridge.read<unknown>({\n type: stellarStateCallTypes.readWalletDefaultPrivateAddressNonce,\n owner,\n });\n return normalizeWalletDefaultPrivateAddressNonce(value);\n },\n\n setWalletDefaultPrivateAddressNonce(input: {\n owner: StellarAddress;\n nonce: string;\n }): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.setWalletDefaultPrivateAddressNonce,\n owner: input.owner,\n nonce: input.nonce,\n });\n },\n };\n}\n","import type {\n StellarAddress,\n StellarWalletPrivateAddressScalar,\n} from '../../../types.js';\nimport { normalizeWalletPrivateAddressScalar } from '../../read/normalize.js';\nimport { stellarStateCallTypes } from '../../bridge/call-types.js';\nimport type { StellarStateServiceBase } from '../base.js';\n\nexport function createWalletScalarMethods(context: StellarStateServiceBase) {\n const { bridge } = context;\n\n return {\n async getWalletPrivateAddressScalar(input: {\n owner: StellarAddress;\n nonce: string;\n }): Promise<StellarWalletPrivateAddressScalar | undefined> {\n const value = await bridge.read<unknown>({\n type: stellarStateCallTypes.readWalletPrivateAddressScalar,\n owner: input.owner,\n nonce: input.nonce,\n });\n return normalizeWalletPrivateAddressScalar(value);\n },\n\n saveWalletPrivateAddressScalar(\n scalar: StellarWalletPrivateAddressScalar,\n ): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.saveWalletPrivateAddressScalar,\n scalar,\n });\n },\n\n deleteWalletPrivateAddressScalar(input: {\n owner: StellarAddress;\n nonce: string;\n }): Promise<void> {\n return bridge.write({\n type: stellarStateCallTypes.deleteWalletPrivateAddressScalar,\n owner: input.owner,\n nonce: input.nonce,\n });\n },\n };\n}\n","import type { StellarStateServiceBase } from '../base.js';\nimport { createWalletRecordMethods } from './wallet-record-methods.js';\nimport { createWalletScalarMethods } from './wallet-scalar-methods.js';\n\nexport function createWalletAddressService(context: StellarStateServiceBase) {\n return {\n ...createWalletScalarMethods(context),\n ...createWalletRecordMethods(context),\n };\n}\n","import type { StateBridgeAdapter } from '@arcanetech/privacy-sdk-core/state';\nimport { StellarStateServiceBase } from './base.js';\nimport { createAssetsService } from './assets/index.js';\nimport { createDeliveriesService } from './deliveries/index.js';\nimport { createPoolEphemeralService } from './pool/ephemeral.js';\nimport { createPoolMerkleService } from './pool/merkle.js';\nimport { createRecordsService } from './records/index.js';\nimport { createRegistryLookupService } from './registry/lookup.js';\nimport { createWalletAddressService } from './registry/wallet-address.js';\n\nexport function composeStellarStateService(adapter: StateBridgeAdapter) {\n const base = new StellarStateServiceBase(adapter);\n\n return {\n bridge: base.bridge,\n ...createAssetsService(base),\n ...createRegistryLookupService(base),\n ...createWalletAddressService(base),\n ...createPoolMerkleService(base),\n ...createPoolEphemeralService(base),\n ...createDeliveriesService(base),\n ...createRecordsService(base),\n };\n}\n\nexport type ComposedStellarStateService = ReturnType<typeof composeStellarStateService>;\n","import type { StateBridgeAdapter } from '@arcanetech/privacy-sdk-core/state';\nimport type { StellarStorageAdapter } from '../../types.js';\nimport {\n composeStellarStateService,\n type ComposedStellarStateService,\n} from './compose.js';\n\nexport type StellarStateService = ComposedStellarStateService;\n\nexport function createStellarStateService(\n adapter: StateBridgeAdapter,\n): StellarStateService {\n return composeStellarStateService(adapter);\n}\n\nexport function createStellarStorageAdapterFromState(\n state: StellarStateService,\n): StellarStorageAdapter {\n return {\n listPrivateRecords: (filter) => state.listPrivateRecords(filter),\n savePrivateRecords: (records) => state.savePrivateRecords(records),\n markPrivateRecordsUsed: (records) => state.markPrivateRecordsUsed(records),\n };\n}\n","import { Buffer } from 'buffer';\nimport type { StellarAddress, StellarRegistryLookup } from '../../types.js';\nimport {\n decodePrivateAddress,\n encodePrivateAddressFromHexCoordinates,\n} from '../../transact/private-address/codec.js';\nimport { runTtlPreflight } from '../../transact/submit/ttl-preflight.js';\nimport type { StellarContractContext } from '../contract-context.js';\nimport type { PrivateAddressRecord } from './create-registry-client.js';\n\nconst COORDINATE_HEX_LENGTH = 64;\n\nfunction readCoordinateBytes(value: unknown): Buffer | undefined {\n if (value instanceof Buffer) {\n return value;\n }\n if (value instanceof Uint8Array) {\n return Buffer.from(value);\n }\n return undefined;\n}\n\nfunction normalizePrivateAddressRecord(\n value: unknown,\n): PrivateAddressRecord | undefined {\n if (!value || typeof value !== 'object') {\n return undefined;\n }\n const record = value as Record<string, unknown>;\n const publicKeyX = readCoordinateBytes(record.public_key_x);\n const publicKeyY = readCoordinateBytes(record.public_key_y);\n if (typeof record.owner !== 'string' || !publicKeyX || !publicKeyY) {\n return undefined;\n }\n return {\n owner: record.owner,\n public_key_x: publicKeyX,\n public_key_y: publicKeyY,\n updated_at_ledger: Number(record.updated_at_ledger ?? 0),\n };\n}\n\nfunction parseOptionSomeRecord(result: unknown): PrivateAddressRecord | undefined {\n if (!result || typeof result !== 'object' || !('tag' in result)) {\n return undefined;\n }\n const option = result as { tag?: unknown; values?: unknown };\n if (option.tag !== 'Some' || !Array.isArray(option.values)) {\n return undefined;\n }\n return normalizePrivateAddressRecord(option.values[0]);\n}\n\nfunction parseRegistryLookupRecord(result: unknown): PrivateAddressRecord | undefined {\n const directRecord = normalizePrivateAddressRecord(result);\n if (directRecord) {\n return directRecord;\n }\n return parseOptionSomeRecord(result);\n}\n\nfunction recordToLookupResult(record: PrivateAddressRecord): StellarRegistryLookup {\n const publicKeyXHex = Buffer.from(record.public_key_x).toString('hex');\n const publicKeyYHex = Buffer.from(record.public_key_y).toString('hex');\n return {\n owner: record.owner,\n status: 'registered',\n privateAddressStpl1: encodePrivateAddressFromHexCoordinates(\n publicKeyXHex,\n publicKeyYHex,\n ),\n publicKeyXHex,\n publicKeyYHex,\n updatedAtLedger: record.updated_at_ledger,\n cachedAt: new Date().toISOString(),\n };\n}\n\nexport async function readRegistryLookupFromChain(input: {\n contractContext: StellarContractContext;\n owner: StellarAddress;\n walletPublicKey: string;\n}): Promise<StellarRegistryLookup> {\n const owner = input.owner.trim();\n const client = input.contractContext.createRegistryClient({\n contractId: input.contractContext.network.registryContract,\n walletPublicKey: input.walletPublicKey,\n networkPassphrase: input.contractContext.network.networkPassphrase,\n sorobanRpcUrl: input.contractContext.network.rpcUrl,\n });\n const read = await client.get_private_address({ owner });\n const record = parseRegistryLookupRecord(read.result);\n if (!record) {\n return {\n owner,\n status: 'unregistered',\n cachedAt: new Date().toISOString(),\n };\n }\n return recordToLookupResult(record);\n}\n\nexport async function registerPrivateAddressOnChain(input: {\n contractContext: StellarContractContext;\n owner: StellarAddress;\n walletPublicKey: string;\n privateAddressStpl1: string;\n}): Promise<string> {\n const decoded = decodePrivateAddress(input.privateAddressStpl1.trim());\n const client = input.contractContext.createRegistryClient({\n contractId: input.contractContext.network.registryContract,\n walletPublicKey: input.walletPublicKey,\n networkPassphrase: input.contractContext.network.networkPassphrase,\n sorobanRpcUrl: input.contractContext.network.rpcUrl,\n });\n const assembled = await client.register_private_address({\n owner: input.owner.trim(),\n public_key_x: Buffer.from(decoded.x.padStart(COORDINATE_HEX_LENGTH, '0'), 'hex'),\n public_key_y: Buffer.from(decoded.y.padStart(COORDINATE_HEX_LENGTH, '0'), 'hex'),\n });\n await runTtlPreflight(assembled);\n const sent = await assembled.signAndSend();\n const transactionHash = sent.sendTransactionResponse?.hash ?? '';\n if (!transactionHash) {\n throw new Error('Registry registration transaction failed');\n }\n return transactionHash;\n}\n","type UnknownRecord = Record<string, unknown>;\n\nfunction getNested(source: unknown, path: string[]): unknown {\n let cursor: unknown = source;\n for (const key of path) {\n if (typeof cursor !== 'object' || cursor === null) {\n return undefined;\n }\n cursor = (cursor as UnknownRecord)[key];\n }\n return cursor;\n}\n\nfunction needsRestore(simulation: unknown): boolean {\n const restorePreamble =\n getNested(simulation, ['restorePreamble']) ??\n getNested(simulation, ['result', 'restorePreamble']) ??\n getNested(simulation, ['simulation', 'restorePreamble']);\n if (restorePreamble && typeof restorePreamble === 'object') {\n return true;\n }\n const isSimulationError = getNested(simulation, ['error']);\n if (typeof isSimulationError === 'string') {\n return isSimulationError.toLowerCase().includes('restore');\n }\n return false;\n}\n\nasync function maybeCallFunction(\n target: unknown,\n methodName: string,\n): Promise<unknown | undefined> {\n if (typeof target !== 'object' || target === null) {\n return undefined;\n }\n const method = (target as UnknownRecord)[methodName];\n if (typeof method !== 'function') {\n return undefined;\n }\n return (method as () => Promise<unknown>)();\n}\n\nexport async function runTtlPreflight(assembledTransaction: unknown): Promise<void> {\n const simulation = await maybeCallFunction(assembledTransaction, 'simulate');\n if (!simulation || !needsRestore(simulation)) {\n return;\n }\n const restoreResult =\n (await maybeCallFunction(assembledTransaction, 'restoreFootprint')) ??\n (await maybeCallFunction(assembledTransaction, 'restore'));\n if (!restoreResult) {\n return;\n }\n await maybeCallFunction(assembledTransaction, 'simulate');\n}\n","import { StrKey } from '@stellar/stellar-sdk';\nimport type { StellarAddress } from '../../types.js';\nimport type { TransferRecipientExecutionContext } from '../../transact/environment/types.js';\nimport type { StellarContractContext } from '../contract-context.js';\nimport { readRegistryLookupFromChain } from './registry-domain-service.js';\nimport { deriveEscrowRecipientFromStellarAddress } from '../../transact/escrow/derived-escrow-recipient.js';\n\nexport async function resolveTransferRecipientFromChain(input: {\n contractContext: StellarContractContext;\n recipientStellarAddress: StellarAddress;\n walletPublicKey: StellarAddress;\n cachedLookup?: Awaited<ReturnType<typeof readRegistryLookupFromChain>> | undefined;\n}): Promise<TransferRecipientExecutionContext> {\n const recipientStellarAddress = input.recipientStellarAddress.trim();\n const walletPublicKey = input.walletPublicKey.trim();\n const lookup =\n input.cachedLookup ??\n (await readRegistryLookupFromChain({\n contractContext: input.contractContext,\n owner: recipientStellarAddress,\n walletPublicKey,\n }));\n if (lookup.status === 'registered' && lookup.privateAddressStpl1?.trim()) {\n return {\n recipientPrivateAddressStpl1: lookup.privateAddressStpl1.trim(),\n recipientStellarAddress,\n };\n }\n if (!StrKey.isValidEd25519PublicKey(recipientStellarAddress)) {\n throw new Error(\n 'Transfers to unregistered recipients require a Stellar G-address.',\n );\n }\n const escrow = await deriveEscrowRecipientFromStellarAddress({\n recipientStellarAddress,\n });\n return {\n recipientPrivateAddressStpl1: escrow.privateAddressStpl1,\n recipientStellarAddress,\n escrowSend: {\n nonceDecimal: escrow.nonceDecimal,\n recipientHi: escrow.recipientHi,\n recipientLo: escrow.recipientLo,\n recipientStellarAddress,\n },\n };\n}\n","import { Buffer } from 'buffer';\nimport { StrKey } from '@stellar/stellar-sdk';\nimport {\n derivedEscrowKey,\n ed25519PubkeyPayloadHexToWithdrawFrDecimals,\n sampleDerivedEscrowKey,\n} from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport { encodePrivateAddressFromHexCoordinates } from '../private-address/codec.js';\n\nconst COORDINATE_HEX_LENGTH = 64;\n\nexport type DerivedEscrowRecipient = {\n nonceDecimal: string;\n recipientHi: string;\n recipientLo: string;\n recipientStellarAddress: string;\n privateAddressStpl1: string;\n scalarHex: string;\n};\n\nexport type DerivedEscrowKeyFn = (\n nonce: bigint,\n recipientHi: bigint,\n recipientLo: bigint,\n) => Promise<{\n scalarHex: string;\n pointXHex: string;\n pointYHex: string;\n}>;\n\nfunction stellarAccountToFieldLimbs(stellarAddress: string): {\n recipientHi: string;\n recipientLo: string;\n} {\n const pkRaw = StrKey.decodeEd25519PublicKey(stellarAddress.trim());\n const pkHex = Buffer.from(pkRaw).toString('hex');\n const { hi, lo } = ed25519PubkeyPayloadHexToWithdrawFrDecimals(pkHex);\n return { recipientHi: hi, recipientLo: lo };\n}\n\nfunction padCoordinateHex(value: string): string {\n return value.replace(/^0x/iu, '').padStart(COORDINATE_HEX_LENGTH, '0');\n}\n\nexport async function deriveEscrowRecipientFromStellarAddress(input: {\n recipientStellarAddress: string;\n nonceDecimal?: string;\n deriveKey?: DerivedEscrowKeyFn;\n}): Promise<DerivedEscrowRecipient> {\n const recipientStellarAddress = input.recipientStellarAddress.trim();\n if (!StrKey.isValidEd25519PublicKey(recipientStellarAddress)) {\n throw new Error('Escrow recipient must be a Stellar G-address.');\n }\n const { recipientHi, recipientLo } = stellarAccountToFieldLimbs(\n recipientStellarAddress,\n );\n const deriveKey = input.deriveKey ?? derivedEscrowKey;\n let nonceDecimal: string;\n let key: Awaited<ReturnType<DerivedEscrowKeyFn>>;\n if (input.nonceDecimal) {\n nonceDecimal = input.nonceDecimal;\n key = await deriveKey(\n BigInt(nonceDecimal),\n BigInt(recipientHi),\n BigInt(recipientLo),\n );\n } else {\n const sampled = await sampleDerivedEscrowKey(\n BigInt(recipientHi),\n BigInt(recipientLo),\n );\n nonceDecimal = sampled.nonce.toString();\n key = sampled.key;\n }\n return {\n nonceDecimal,\n recipientHi,\n recipientLo,\n recipientStellarAddress,\n privateAddressStpl1: encodePrivateAddressFromHexCoordinates(\n padCoordinateHex(key.pointXHex),\n padCoordinateHex(key.pointYHex),\n ),\n scalarHex: padCoordinateHex(key.scalarHex),\n };\n}\n","import { Api } from '@stellar/stellar-sdk/rpc';\nimport type { StellarTransactionConfirmationStatus } from '../state/domain/types.js';\nimport {\n extractInvokedPoolContractFromEnvelope,\n tryExtractTransferAmountRawFromMeta,\n} from './soroban-transaction-meta.js';\nimport { parseStellarRpcUnixTimestampSeconds } from './stellar-rpc-unix-timestamp.js';\nimport type { StellarRpcServer } from './server.js';\n\nexport type StellarTransactionDetails = {\n txHash: string;\n status: StellarTransactionConfirmationStatus;\n ledger?: number;\n createdAt?: string;\n invokedPoolContractId?: string;\n transferAmountRaw?: string;\n};\n\nexport type StellarTransactionFetchReject =\n | { kind: 'not_found'; message: string }\n | { kind: 'failed'; message: string }\n | { kind: 'rpc_error'; message: string };\n\nfunction readCreatedAtSeconds(\n response: Api.GetTransactionResponse,\n): number | undefined {\n const responseRecord = response as {\n createdAt?: unknown;\n created_at?: unknown;\n };\n return parseStellarRpcUnixTimestampSeconds(\n responseRecord.createdAt ?? responseRecord.created_at,\n );\n}\n\nfunction buildSuccessDetails(\n txHash: string,\n response: Api.GetSuccessfulTransactionResponse,\n): StellarTransactionDetails {\n const invokedPoolContractId = extractInvokedPoolContractFromEnvelope(\n response.envelopeXdr,\n );\n const transferAmountRaw =\n invokedPoolContractId === undefined\n ? undefined\n : tryExtractTransferAmountRawFromMeta(\n response.resultMetaXdr,\n invokedPoolContractId,\n );\n const createdAtSeconds = readCreatedAtSeconds(response);\n return {\n txHash,\n status: 'success',\n ledger: response.ledger,\n ...(createdAtSeconds === undefined\n ? {}\n : { createdAt: new Date(createdAtSeconds * 1000).toISOString() }),\n ...(invokedPoolContractId === undefined ? {} : { invokedPoolContractId }),\n ...(transferAmountRaw === undefined ? {} : { transferAmountRaw }),\n };\n}\n\nexport async function fetchStellarTransactionDetails(\n server: StellarRpcServer,\n txHash: string,\n): Promise<StellarTransactionDetails | StellarTransactionFetchReject> {\n const trimmed = txHash.trim();\n if (!trimmed) {\n return { kind: 'rpc_error', message: 'Missing tx hash' };\n }\n let response: Api.GetTransactionResponse;\n try {\n response = await server.getTransaction(trimmed);\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Soroban request failed';\n return { kind: 'rpc_error', message };\n }\n if (response.status === Api.GetTransactionStatus.NOT_FOUND) {\n return { kind: 'not_found', message: 'Transaction not found' };\n }\n if (response.status === Api.GetTransactionStatus.FAILED) {\n return {\n txHash: trimmed,\n status: 'failed',\n ledger: response.ledger,\n };\n }\n return buildSuccessDetails(trimmed, response as Api.GetSuccessfulTransactionResponse);\n}\n\nfunction transactionDetailsToStatus(details: StellarTransactionDetails): {\n txHash: string;\n status: StellarTransactionConfirmationStatus;\n ledger?: number;\n createdAt?: string;\n} {\n return {\n txHash: details.txHash,\n status: details.status,\n ...(details.ledger === undefined ? {} : { ledger: details.ledger }),\n ...(details.createdAt === undefined ? {} : { createdAt: details.createdAt }),\n };\n}\n\nexport async function readStellarTransactionStatus(\n server: StellarRpcServer,\n txHash: string,\n): Promise<\n | {\n txHash: string;\n status: StellarTransactionConfirmationStatus;\n ledger?: number;\n createdAt?: string;\n }\n | StellarTransactionFetchReject\n> {\n const details = await fetchStellarTransactionDetails(server, txHash);\n if ('kind' in details) {\n return details;\n }\n return transactionDetailsToStatus(details);\n}\n","import { Address, StrKey, xdr } from '@stellar/stellar-sdk';\n\nconst BIGINT_SHIFT_64 = 64n;\nconst TRANSACTION_META_SWITCH_SOROBAN_V3 = 3;\nconst TRANSACTION_META_SWITCH_SOROBAN_V4 = 4;\nconst MIN_TRANSFER_EVENT_TOPIC_COUNT = 3;\nconst CONTRACT_EVENT_BODY_V0 = 0;\n\nfunction extractSymbolFromScValue(value: xdr.ScVal): string | undefined {\n try {\n const variant = value.switch().name;\n if (variant === 'scvSymbol') {\n return value.sym().toString();\n }\n if (variant === 'scvString') {\n return value.str().toString();\n }\n } catch {\n return undefined;\n }\n return undefined;\n}\n\nfunction extractAmountFromScValue(value: xdr.ScVal): string | undefined {\n try {\n const variant = value.switch().name;\n if (variant === 'scvString') {\n return value.str().toString();\n }\n if (variant === 'scvI128') {\n const parts = value.i128();\n const hi = BigInt(parts.hi().toString());\n const lo = BigInt(parts.lo().toString());\n return ((hi << BIGINT_SHIFT_64) + lo).toString();\n }\n if (variant === 'scvI64') {\n return value.i64().toString();\n }\n if (variant === 'scvU64') {\n return value.u64().toString();\n }\n } catch {\n return undefined;\n }\n return undefined;\n}\n\nfunction contractIdToString(contractId: Buffer | Uint8Array): string {\n return StrKey.encodeContract(Buffer.from(contractId));\n}\n\nfunction scAddressToContractString(address: xdr.ScAddress): string | undefined {\n if (address.switch().name !== 'scAddressTypeContract') {\n return undefined;\n }\n try {\n return contractIdToString(\n Buffer.from(address.contractId() as unknown as Uint8Array),\n );\n } catch {\n return undefined;\n }\n}\n\nfunction pushSorobanV3ContractEvents(\n out: xdr.ContractEvent[],\n meta: xdr.TransactionMeta,\n): void {\n const soroban = meta.v3().sorobanMeta();\n if (!soroban) {\n return;\n }\n for (const event of soroban.events()) {\n out.push(event);\n }\n}\n\nfunction pushSorobanV4ContractEvents(\n out: xdr.ContractEvent[],\n meta: xdr.TransactionMeta,\n): void {\n const v4 = meta.v4();\n for (const txEvent of v4.events()) {\n out.push(txEvent.event());\n }\n for (const op of v4.operations()) {\n for (const event of op.events()) {\n out.push(event);\n }\n }\n}\n\nexport function collectContractEventsFromMeta(\n meta: xdr.TransactionMeta,\n): xdr.ContractEvent[] {\n const out: xdr.ContractEvent[] = [];\n const code = meta.switch();\n if (code === TRANSACTION_META_SWITCH_SOROBAN_V3) {\n pushSorobanV3ContractEvents(out, meta);\n }\n if (code === TRANSACTION_META_SWITCH_SOROBAN_V4) {\n pushSorobanV4ContractEvents(out, meta);\n }\n return out;\n}\n\nfunction transferPartyAddressesFromTopics(\n topics: xdr.ScVal[],\n): { from: string; to: string } | undefined {\n if (topics.length < MIN_TRANSFER_EVENT_TOPIC_COUNT) {\n return undefined;\n }\n try {\n const fromTopic = topics[1];\n const toTopic = topics[2];\n if (!fromTopic || !toTopic) {\n return undefined;\n }\n return {\n from: Address.fromScVal(fromTopic).toString(),\n to: Address.fromScVal(toTopic).toString(),\n };\n } catch {\n return undefined;\n }\n}\n\nfunction tryParseTransferFromEvent(\n event: xdr.ContractEvent,\n poolContractId: string,\n): string | undefined {\n if (event.type().name !== 'contract') {\n return undefined;\n }\n const body = event.body();\n if (body.switch() !== CONTRACT_EVENT_BODY_V0) {\n return undefined;\n }\n const v0 = body.v0();\n const topics = v0.topics();\n if (!Array.isArray(topics) || topics.length < MIN_TRANSFER_EVENT_TOPIC_COUNT) {\n return undefined;\n }\n const eventName = extractSymbolFromScValue(topics[0]!);\n if (!eventName || eventName.toLowerCase() !== 'transfer') {\n return undefined;\n }\n const parties = transferPartyAddressesFromTopics(topics);\n if (!parties) {\n return undefined;\n }\n if (parties.from !== poolContractId && parties.to !== poolContractId) {\n return undefined;\n }\n return extractAmountFromScValue(v0.data());\n}\n\nexport function tryExtractTransferAmountRawFromMeta(\n meta: xdr.TransactionMeta | undefined,\n poolContractId: string,\n): string | undefined {\n if (!meta) {\n return undefined;\n }\n const normalizedPool = poolContractId.trim();\n if (!normalizedPool) {\n return undefined;\n }\n for (const event of collectContractEventsFromMeta(meta)) {\n const amount = tryParseTransferFromEvent(event, normalizedPool);\n if (amount !== undefined) {\n return amount;\n }\n }\n return undefined;\n}\n\nfunction firstInvokeContractFromHostFunction(\n hostFunction: xdr.HostFunction,\n): xdr.InvokeContractArgs | undefined {\n if (hostFunction.switch().name !== 'hostFunctionTypeInvokeContract') {\n return undefined;\n }\n return hostFunction.invokeContract();\n}\n\nfunction contractIdFromInvokeHostOperation(op: xdr.Operation): string | undefined {\n const body = op.body();\n if (body.switch().name !== 'invokeHostFunction') {\n return undefined;\n }\n const invoke = body.invokeHostFunctionOp();\n const hostFunction = invoke.hostFunction();\n const invokeContract = firstInvokeContractFromHostFunction(hostFunction);\n if (!invokeContract) {\n return undefined;\n }\n return scAddressToContractString(invokeContract.contractAddress());\n}\n\nfunction operationsFromEnvelope(envelope: xdr.TransactionEnvelope): xdr.Operation[] {\n const kind = envelope.switch().name;\n if (kind === 'envelopeTypeTx') {\n return [...envelope.v1().tx().operations()];\n }\n if (kind === 'envelopeTypeTxV0') {\n return [...envelope.v0().tx().operations()];\n }\n if (kind === 'envelopeTypeTxFeeBump') {\n const inner = envelope.feeBump().tx().innerTx();\n return [...inner.v1().tx().operations()];\n }\n return [];\n}\n\nexport function extractInvokedPoolContractFromEnvelope(\n envelope: xdr.TransactionEnvelope,\n): string | undefined {\n for (const op of operationsFromEnvelope(envelope)) {\n const id = contractIdFromInvokeHostOperation(op);\n if (id) {\n return id;\n }\n }\n return undefined;\n}\n","const MILLISECONDS_PER_SECOND = 1000;\nconst UNIX_TIMESTAMP_SECONDS_ABOVE_WHICH_VALUE_IS_MS = 1_000_000_000_000;\n\nexport function parseStellarRpcUnixTimestampSeconds(\n value: unknown,\n): number | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n if (typeof value === 'string' && value.trim() === '') {\n return undefined;\n }\n const numeric = typeof value === 'number' ? value : Number(value);\n if (!Number.isFinite(numeric)) {\n return undefined;\n }\n const integral = Math.trunc(numeric);\n if (integral >= UNIX_TIMESTAMP_SECONDS_ABOVE_WHICH_VALUE_IS_MS) {\n return Math.trunc(integral / MILLISECONDS_PER_SECOND);\n }\n return integral;\n}\n","import type { StellarTransactionConfirmationStatus } from '../state/domain/types.js';\nimport type { StellarRpcServer } from './server.js';\nimport { readStellarTransactionStatus } from './transactions.js';\n\nconst DEFAULT_POLL_INTERVAL_MS = 1500;\nconst DEFAULT_TIMEOUT_MS = 60_000;\n\nexport async function waitForStellarTransactionConfirmation(input: {\n server: StellarRpcServer;\n txHash: string;\n pollIntervalMs?: number;\n timeoutMs?: number;\n}): Promise<{\n txHash: string;\n status: StellarTransactionConfirmationStatus;\n ledger?: number;\n createdAt?: string;\n}> {\n const pollIntervalMs = input.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;\n const timeoutMs = input.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n const startedAt = Date.now();\n while (Date.now() - startedAt < timeoutMs) {\n const status = await readStellarTransactionStatus(input.server, input.txHash);\n if ('kind' in status) {\n if (status.kind === 'failed') {\n throw new Error('Transaction failed on network');\n }\n if (status.kind === 'rpc_error') {\n throw new Error(status.message);\n }\n } else if (status.status === 'success') {\n return status;\n } else if (status.status === 'failed') {\n throw new Error('Transaction failed on network');\n }\n await new Promise((resolve) => {\n setTimeout(resolve, pollIntervalMs);\n });\n }\n throw new Error('Transaction was not confirmed in time');\n}\n","import type {\n StellarAddress,\n StellarRegistryLookup,\n StellarTransactionStatus,\n} from '../types.js';\nimport { requireContractContext } from '../contracts/contract-context.js';\nimport { readNullifierConsumedOnChain } from '../contracts/pool/pool-domain-service.js';\nimport {\n readRegistryLookupFromChain,\n registerPrivateAddressOnChain,\n} from '../contracts/registry/registry-domain-service.js';\nimport { resolveTransferRecipientFromChain } from '../contracts/registry/resolve-transfer-recipient.js';\nimport {\n fetchStellarTransactionDetails,\n readStellarTransactionStatus,\n waitForStellarTransactionConfirmation,\n type StellarTransactionDetails,\n} from '../rpc/index.js';\nimport { getPrivacyPoolService } from '../transact/pool/singleton.js';\nimport { privKeyScalarDecimalFromRecipientScalarHex } from '../transact/encoding/priv-key-scalar-from-recipient-hex.js';\nimport type {\n StellarTransactEnvironment,\n TransferRecipientExecutionContext,\n} from '../transact/environment/types.js';\n\nfunction requireNetworkEnvironment(\n transactEnvironment: StellarTransactEnvironment | undefined,\n): StellarTransactEnvironment {\n if (!transactEnvironment) {\n throw new Error(\n 'Stellar privacy client network operations require transact environment.',\n );\n }\n return transactEnvironment;\n}\n\nexport async function checkRegistrationStatusWithEnvironment(input: {\n transactEnvironment: StellarTransactEnvironment | undefined;\n address: StellarAddress;\n walletPublicKey: string;\n saveLookup: (lookup: StellarRegistryLookup) => Promise<void>;\n}): Promise<StellarRegistryLookup> {\n const environment = requireNetworkEnvironment(input.transactEnvironment);\n const contractContext = requireContractContext(environment);\n const lookup = await readRegistryLookupFromChain({\n contractContext,\n owner: input.address,\n walletPublicKey: input.walletPublicKey,\n });\n await input.saveLookup(lookup);\n return lookup;\n}\n\nexport async function registerPrivateAddressWithEnvironment(input: {\n transactEnvironment: StellarTransactEnvironment | undefined;\n owner: StellarAddress;\n walletPublicKey: string;\n privateAddressStpl1: string;\n}): Promise<StellarTransactionStatus> {\n const environment = requireNetworkEnvironment(input.transactEnvironment);\n const contractContext = requireContractContext(environment);\n const txHash = await registerPrivateAddressOnChain({\n contractContext,\n owner: input.owner,\n walletPublicKey: input.walletPublicKey,\n privateAddressStpl1: input.privateAddressStpl1,\n });\n return {\n txHash,\n status: 'pending',\n };\n}\n\nexport async function resolveTransferRecipientWithEnvironment(input: {\n transactEnvironment: StellarTransactEnvironment | undefined;\n recipientStellarAddress: StellarAddress;\n walletPublicKey: StellarAddress;\n readCachedLookup: (\n address: StellarAddress,\n ) => Promise<StellarRegistryLookup | undefined>;\n saveLookup: (lookup: StellarRegistryLookup) => Promise<void>;\n}): Promise<TransferRecipientExecutionContext> {\n const environment = requireNetworkEnvironment(input.transactEnvironment);\n const contractContext = requireContractContext(environment);\n const recipientStellarAddress = input.recipientStellarAddress.trim();\n const cachedLookup = await input.readCachedLookup(recipientStellarAddress);\n if (\n cachedLookup?.status === 'registered' &&\n cachedLookup.privateAddressStpl1?.trim()\n ) {\n return {\n recipientPrivateAddressStpl1: cachedLookup.privateAddressStpl1.trim(),\n recipientStellarAddress,\n };\n }\n const lookup = await readRegistryLookupFromChain({\n contractContext,\n owner: recipientStellarAddress,\n walletPublicKey: input.walletPublicKey,\n });\n await input.saveLookup(lookup);\n return resolveTransferRecipientFromChain({\n contractContext,\n recipientStellarAddress,\n walletPublicKey: input.walletPublicKey,\n cachedLookup: lookup,\n });\n}\n\nexport async function checkPrivateRecordSpendStatusWithEnvironment(input: {\n transactEnvironment: StellarTransactEnvironment | undefined;\n poolContractId?: string;\n nullifier: string;\n walletPublicKey: string;\n privKeyScalarHex: string;\n}): Promise<{ spent: boolean; nullifierHashHex: string }> {\n const environment = requireNetworkEnvironment(input.transactEnvironment);\n const contractContext = requireContractContext(environment);\n const nullifierHashHex = await getPrivacyPoolService().calculateNullifierHash(\n input.nullifier,\n privKeyScalarDecimalFromRecipientScalarHex(input.privKeyScalarHex),\n );\n const poolContractId =\n input.poolContractId?.trim() || contractContext.network.poolContract;\n const spent = await readNullifierConsumedOnChain({\n contractContext,\n poolContractId,\n walletPublicKey: input.walletPublicKey,\n nullifierHashHex,\n });\n return { spent, nullifierHashHex };\n}\n\nexport async function waitForTransactionConfirmationWithEnvironment(input: {\n transactEnvironment: StellarTransactEnvironment | undefined;\n txHash: string;\n pollIntervalMs?: number;\n timeoutMs?: number;\n}): Promise<StellarTransactionStatus> {\n const environment = requireNetworkEnvironment(input.transactEnvironment);\n const contractContext = requireContractContext(environment);\n return waitForStellarTransactionConfirmation({\n server: contractContext.rpcServer,\n txHash: input.txHash,\n ...(input.pollIntervalMs === undefined\n ? {}\n : { pollIntervalMs: input.pollIntervalMs }),\n ...(input.timeoutMs === undefined ? {} : { timeoutMs: input.timeoutMs }),\n });\n}\n\nexport async function fetchTransactionConfirmationStatusWithEnvironment(input: {\n transactEnvironment: StellarTransactEnvironment | undefined;\n txHash: string;\n}): Promise<StellarTransactionStatus | undefined> {\n const environment = requireNetworkEnvironment(input.transactEnvironment);\n const contractContext = requireContractContext(environment);\n const status = await readStellarTransactionStatus(\n contractContext.rpcServer,\n input.txHash,\n );\n if ('kind' in status) {\n if (status.kind === 'not_found') {\n return {\n txHash: input.txHash.trim(),\n status: 'pending',\n };\n }\n throw new Error(status.message);\n }\n return status;\n}\n\nexport async function getTransactionDetailsWithEnvironment(input: {\n transactEnvironment: StellarTransactEnvironment | undefined;\n txHash: string;\n}): Promise<StellarTransactionDetails> {\n const environment = requireNetworkEnvironment(input.transactEnvironment);\n const contractContext = requireContractContext(environment);\n const details = await fetchStellarTransactionDetails(\n contractContext.rpcServer,\n input.txHash,\n );\n if ('kind' in details) {\n throw new Error(details.message);\n }\n return details;\n}\n\nexport { type StellarTransactionDetails } from '../rpc/index.js';\n","import type { StellarTransactEnvironment } from '../transact/environment/types.js';\nimport { checkPrivateRecordSpendStatusWithEnvironment } from './network.js';\n\nexport function createNullifierSpentChecker(\n transactEnvironment: StellarTransactEnvironment | undefined,\n) {\n if (!transactEnvironment) {\n return;\n }\n return async ({\n nullifier,\n walletPublicKey,\n privKeyScalarHex,\n privateAddressStpl1,\n }: {\n nullifier: string;\n walletPublicKey: string;\n privKeyScalarHex?: string;\n privateAddressStpl1?: string;\n }) => {\n const addressHint = privateAddressStpl1?.trim() ?? '';\n const resolvedFromEnsure = transactEnvironment.ensureSenderPrivKeyScalarHex\n ? await transactEnvironment.ensureSenderPrivKeyScalarHex(addressHint)\n : undefined;\n const resolvedFromState =\n addressHint && transactEnvironment.resolveSenderPrivKeyScalarFromState\n ? await transactEnvironment.resolveSenderPrivKeyScalarFromState({\n owner: walletPublicKey,\n privateAddressStpl1: addressHint,\n })\n : undefined;\n const resolvedScalarHex =\n privKeyScalarHex?.trim() ||\n resolvedFromEnsure?.trim() ||\n resolvedFromState?.trim();\n if (!resolvedScalarHex) {\n throw new Error('Spend scalar is required to check owner-bound nullifiers.');\n }\n const status = await checkPrivateRecordSpendStatusWithEnvironment({\n transactEnvironment,\n nullifier,\n walletPublicKey,\n privKeyScalarHex: resolvedScalarHex,\n });\n return status.spent;\n };\n}\n","import {\n fetchAndMergeMerkleState,\n readLeafEphemeralHex,\n type FetchContractMerkleResult,\n} from '../transact/merkle/fetch-contract.js';\nimport type { StellarTransactEnvironment } from '../transact/environment/types.js';\n\nfunction requireTransactEnvironment(\n transactEnvironment: StellarTransactEnvironment | undefined,\n): StellarTransactEnvironment {\n if (!transactEnvironment) {\n throw new Error('Pool Merkle sync requires a configured transact environment.');\n }\n return transactEnvironment;\n}\n\nexport async function syncPoolMerkleStateWithEnvironment(\n transactEnvironment: StellarTransactEnvironment | undefined,\n input: {\n poolContractId: string;\n walletPublicKey: string;\n },\n): Promise<FetchContractMerkleResult> {\n const environment = requireTransactEnvironment(transactEnvironment);\n return fetchAndMergeMerkleState({\n poolContractId: input.poolContractId,\n walletPublicKey: input.walletPublicKey,\n transactEnvironment: environment,\n ...(environment.poolMerkleState\n ? { poolMerkleState: environment.poolMerkleState }\n : {}),\n });\n}\n\nexport async function syncPoolMerkleStatesWithEnvironment(\n transactEnvironment: StellarTransactEnvironment | undefined,\n input: {\n poolContractIds: string[];\n walletPublicKey: string;\n },\n): Promise<void> {\n const uniquePoolIds = [\n ...new Set(input.poolContractIds.map((id) => id.trim()).filter(Boolean)),\n ];\n for (const poolContractId of uniquePoolIds) {\n await syncPoolMerkleStateWithEnvironment(transactEnvironment, {\n poolContractId,\n walletPublicKey: input.walletPublicKey,\n });\n }\n}\n\nexport async function readPoolLeafEphemeralHexWithEnvironment(\n transactEnvironment: StellarTransactEnvironment | undefined,\n input: {\n poolContractId: string;\n walletPublicKey: string;\n leafIndex: number;\n },\n): Promise<{ xHex: string; yHex: string }> {\n const environment = requireTransactEnvironment(transactEnvironment);\n return readLeafEphemeralHex({\n poolContractId: input.poolContractId,\n walletPublicKey: input.walletPublicKey,\n leafIndex: input.leafIndex,\n transactEnvironment: environment,\n ...(environment.leafEphemeral ? { leafEphemeral: environment.leafEphemeral } : {}),\n });\n}\n","import type { StellarAddress } from '../types.js';\nimport type { StellarStateService } from '../state/index.js';\nimport type { StellarTransactEnvironment } from '../transact/environment/types.js';\nimport {\n checkPrivateRecordSpendStatusWithEnvironment,\n checkRegistrationStatusWithEnvironment,\n fetchTransactionConfirmationStatusWithEnvironment,\n getTransactionDetailsWithEnvironment,\n registerPrivateAddressWithEnvironment,\n resolveTransferRecipientWithEnvironment,\n waitForTransactionConfirmationWithEnvironment,\n} from './network.js';\nimport {\n readPoolLeafEphemeralHexWithEnvironment,\n syncPoolMerkleStateWithEnvironment,\n syncPoolMerkleStatesWithEnvironment,\n} from './pool-sync.js';\n\nfunction createPoolNetworkFacet(input: {\n transactEnvironment: StellarTransactEnvironment | undefined;\n}) {\n const { transactEnvironment } = input;\n\n return {\n syncPoolMerkleState: (poolInput: {\n poolContractId: string;\n walletPublicKey: string;\n }) => syncPoolMerkleStateWithEnvironment(transactEnvironment, poolInput),\n\n syncPoolMerkleStates: (poolInput: {\n poolContractIds: string[];\n walletPublicKey: string;\n }) => syncPoolMerkleStatesWithEnvironment(transactEnvironment, poolInput),\n\n readPoolLeafEphemeralHex: (poolInput: {\n poolContractId: string;\n walletPublicKey: string;\n leafIndex: number;\n }) => readPoolLeafEphemeralHexWithEnvironment(transactEnvironment, poolInput),\n };\n}\n\nfunction createRegistryNetworkFacet(input: {\n transactEnvironment: StellarTransactEnvironment | undefined;\n state: StellarStateService;\n}) {\n const { transactEnvironment, state } = input;\n\n return {\n checkRegistrationStatus: (registrationInput: {\n address: StellarAddress;\n walletPublicKey: string;\n }) =>\n checkRegistrationStatusWithEnvironment({\n transactEnvironment,\n address: registrationInput.address,\n walletPublicKey: registrationInput.walletPublicKey,\n saveLookup: (lookup) => state.saveRegistryLookup(lookup),\n }),\n\n registerPrivateAddress: (registrationInput: {\n owner: StellarAddress;\n walletPublicKey: string;\n privateAddressStpl1: string;\n }) =>\n registerPrivateAddressWithEnvironment({\n transactEnvironment,\n owner: registrationInput.owner,\n walletPublicKey: registrationInput.walletPublicKey,\n privateAddressStpl1: registrationInput.privateAddressStpl1,\n }),\n\n resolveTransferRecipient: (recipientInput: {\n recipientStellarAddress: StellarAddress;\n walletPublicKey: StellarAddress;\n }) =>\n resolveTransferRecipientWithEnvironment({\n transactEnvironment,\n recipientStellarAddress: recipientInput.recipientStellarAddress,\n walletPublicKey: recipientInput.walletPublicKey,\n readCachedLookup: (address) => state.getRegistryLookup(address),\n saveLookup: (lookup) => state.saveRegistryLookup(lookup),\n }),\n };\n}\n\nfunction createRpcNetworkFacet(input: {\n transactEnvironment: StellarTransactEnvironment | undefined;\n}) {\n const { transactEnvironment } = input;\n\n return {\n checkPrivateRecordSpendStatus: (spendInput: {\n poolContractId?: string;\n nullifier: string;\n walletPublicKey: string;\n privKeyScalarHex: string;\n }) =>\n checkPrivateRecordSpendStatusWithEnvironment({\n transactEnvironment,\n ...spendInput,\n }),\n\n waitForTransactionConfirmation: (confirmationInput: {\n txHash: string;\n pollIntervalMs?: number;\n timeoutMs?: number;\n }) =>\n waitForTransactionConfirmationWithEnvironment({\n transactEnvironment,\n ...confirmationInput,\n }),\n\n fetchTransactionConfirmationStatus: async (txHash: string) => {\n const status = await fetchTransactionConfirmationStatusWithEnvironment({\n transactEnvironment,\n txHash,\n });\n if (!status) {\n throw new Error('Transaction status is unavailable.');\n }\n return status;\n },\n\n getTransactionDetails: (txHash: string) =>\n getTransactionDetailsWithEnvironment({\n transactEnvironment,\n txHash,\n }),\n };\n}\n\nexport function createNetworkFacet(input: {\n transactEnvironment: StellarTransactEnvironment | undefined;\n state: StellarStateService;\n}) {\n return {\n ...createPoolNetworkFacet(input),\n ...createRegistryNetworkFacet(input),\n ...createRpcNetworkFacet(input),\n };\n}\n","import type { StellarStateService } from '../../state/index.js';\n\nexport function createAssetsStateDelegates(state: StellarStateService) {\n return {\n getAssets: () => state.getAssets(),\n getAssetsCatalog: () => state.getAssetsCatalog(),\n getAsset: (assetId: Parameters<StellarStateService['getAsset']>[0]) =>\n state.getAsset(assetId),\n getAssetsForPool: (poolContract: string) => state.getAssetsForPool(poolContract),\n replaceAssets: (assets: Parameters<StellarStateService['replaceAssets']>[0]) =>\n state.replaceAssets(assets),\n upsertAssets: (assets: Parameters<StellarStateService['upsertAssets']>[0]) =>\n state.upsertAssets(assets),\n getPublicBalance: (input: Parameters<StellarStateService['getPublicBalance']>[0]) =>\n state.getPublicBalance(input),\n getPublicBalances: (\n owner: Parameters<StellarStateService['getPublicBalances']>[0],\n ) => state.getPublicBalances(owner),\n setPublicBalance: (\n balance: Parameters<StellarStateService['setPublicBalance']>[0],\n ) => state.setPublicBalance(balance),\n setPublicBalances: (\n input: Parameters<StellarStateService['setPublicBalances']>[0],\n ) => state.setPublicBalances(input),\n };\n}\n","import type { StellarStateService } from '../../state/index.js';\n\nexport function createDeliveriesStateDelegates(state: StellarStateService) {\n return {\n getIncomingDeliveries: (\n filter: Parameters<StellarStateService['getIncomingDeliveries']>[0],\n ) => state.getIncomingDeliveries(filter),\n upsertIncomingDeliveries: (\n deliveries: Parameters<StellarStateService['upsertIncomingDeliveries']>[0],\n ) => state.upsertIncomingDeliveries(deliveries),\n markDeliveryProcessed: (\n id: Parameters<StellarStateService['markDeliveryProcessed']>[0],\n ) => state.markDeliveryProcessed(id),\n getDeliverySyncState: (\n input: Parameters<StellarStateService['getDeliverySyncState']>[0],\n ) => state.getDeliverySyncState(input),\n setDeliverySyncState: (\n syncState: Parameters<StellarStateService['setDeliverySyncState']>[0],\n ) => state.setDeliverySyncState(syncState),\n };\n}\n","import type { StellarStateService } from '../../state/index.js';\n\nexport function createPoolStateDelegates(state: StellarStateService) {\n return {\n getPoolMerkleState: (\n poolContract: Parameters<StellarStateService['getPoolMerkleState']>[0],\n ) => state.getPoolMerkleState(poolContract),\n setPoolMerkleState: (\n poolState: Parameters<StellarStateService['setPoolMerkleState']>[0],\n ) => state.setPoolMerkleState(poolState),\n appendPoolCommitments: (\n input: Parameters<StellarStateService['appendPoolCommitments']>[0],\n ) => state.appendPoolCommitments(input),\n getLeafEphemeral: (input: Parameters<StellarStateService['getLeafEphemeral']>[0]) =>\n state.getLeafEphemeral(input),\n setLeafEphemeral: (\n ephemeral: Parameters<StellarStateService['setLeafEphemeral']>[0],\n ) => state.setLeafEphemeral(ephemeral),\n };\n}\n","import type { StellarStateService } from '../../state/index.js';\n\nexport function createRecordsStateDelegates(state: StellarStateService) {\n return {\n getPrivateRecords: () => state.getPrivateRecords(),\n getAvailablePrivateRecords: (\n filter: Parameters<StellarStateService['getAvailablePrivateRecords']>[0],\n ) => state.getAvailablePrivateRecords(filter),\n getPrivateBalance: (\n input: Parameters<StellarStateService['getPrivateBalance']>[0],\n ) => state.getPrivateBalance(input),\n getPrivateAssetRows: (\n owner: Parameters<StellarStateService['getPrivateAssetRows']>[0],\n ) => state.getPrivateAssetRows(owner),\n upsertPrivateRecords: (\n records: Parameters<StellarStateService['upsertPrivateRecords']>[0],\n ) => state.upsertPrivateRecords(records),\n markPrivateRecordsStatus: (\n records: Parameters<StellarStateService['markPrivateRecordsStatus']>[0],\n status: Parameters<StellarStateService['markPrivateRecordsStatus']>[1],\n ) => state.markPrivateRecordsStatus(records, status),\n pruneConsumedPrivateRecords: () => state.pruneConsumedPrivateRecords(),\n getTransactionStatus: (\n txHash: Parameters<StellarStateService['getTransactionStatus']>[0],\n ) => state.getTransactionStatus(txHash),\n setTransactionStatus: (\n status: Parameters<StellarStateService['setTransactionStatus']>[0],\n ) => state.setTransactionStatus(status),\n clearTransactionStatus: (\n txHash: Parameters<StellarStateService['clearTransactionStatus']>[0],\n ) => state.clearTransactionStatus(txHash),\n };\n}\n","import type { StellarStateService } from '../../state/index.js';\n\nexport function createRegistryStateDelegates(state: StellarStateService) {\n return {\n getRegistryLookup: (\n address: Parameters<StellarStateService['getRegistryLookup']>[0],\n ) => state.getRegistryLookup(address),\n isStellarAddressRegistered: (\n address: Parameters<StellarStateService['isStellarAddressRegistered']>[0],\n ) => state.isStellarAddressRegistered(address),\n getCachedPrivateAddress: (\n address: Parameters<StellarStateService['getCachedPrivateAddress']>[0],\n ) => state.getCachedPrivateAddress(address),\n saveRegistryLookup: (\n lookup: Parameters<StellarStateService['saveRegistryLookup']>[0],\n ) => state.saveRegistryLookup(lookup),\n getWalletPrivateAddressScalar: (\n input: Parameters<StellarStateService['getWalletPrivateAddressScalar']>[0],\n ) => state.getWalletPrivateAddressScalar(input),\n saveWalletPrivateAddressScalar: (\n scalar: Parameters<StellarStateService['saveWalletPrivateAddressScalar']>[0],\n ) => state.saveWalletPrivateAddressScalar(scalar),\n getWalletPrivateAddressRecord: (\n input: Parameters<StellarStateService['getWalletPrivateAddressRecord']>[0],\n ) => state.getWalletPrivateAddressRecord(input),\n saveWalletPrivateAddressRecord: (\n record: Parameters<StellarStateService['saveWalletPrivateAddressRecord']>[0],\n ) => state.saveWalletPrivateAddressRecord(record),\n getWalletDefaultPrivateAddressNonce: (\n owner: Parameters<StellarStateService['getWalletDefaultPrivateAddressNonce']>[0],\n ) => state.getWalletDefaultPrivateAddressNonce(owner),\n setWalletDefaultPrivateAddressNonce: (\n input: Parameters<StellarStateService['setWalletDefaultPrivateAddressNonce']>[0],\n ) => state.setWalletDefaultPrivateAddressNonce(input),\n deleteWalletPrivateAddressScalar: (\n input: Parameters<StellarStateService['deleteWalletPrivateAddressScalar']>[0],\n ) => state.deleteWalletPrivateAddressScalar(input),\n saveRegisteredPrivateAddress: (\n input: Parameters<StellarStateService['saveRegisteredPrivateAddress']>[0],\n ) => state.saveRegisteredPrivateAddress(input),\n invalidateRegistryLookup: (\n address: Parameters<StellarStateService['invalidateRegistryLookup']>[0],\n ) => state.invalidateRegistryLookup(address),\n invalidateRegisteredAddress: (\n address: Parameters<StellarStateService['invalidateRegisteredAddress']>[0],\n ) => state.invalidateRegisteredAddress(address),\n };\n}\n","import type { StellarStateService } from '../../state/index.js';\nimport { createAssetsStateDelegates } from './assets.js';\nimport { createDeliveriesStateDelegates } from './deliveries.js';\nimport { createPoolStateDelegates } from './pool.js';\nimport { createRecordsStateDelegates } from './records.js';\nimport { createRegistryStateDelegates } from './registry.js';\n\nexport function createStateDelegates(state: StellarStateService) {\n return {\n ...createAssetsStateDelegates(state),\n ...createRegistryStateDelegates(state),\n ...createPoolStateDelegates(state),\n ...createDeliveriesStateDelegates(state),\n ...createRecordsStateDelegates(state),\n };\n}\n\nexport type StellarPrivacyClientStateDelegates = ReturnType<\n typeof createStateDelegates\n>;\n","import type {\n ResolvedStellarPrivacyClientConfig,\n StellarTransferIntent,\n} from '../types.js';\nimport {\n composeStellarPrivacyClient,\n type ComposedStellarPrivacyClient,\n} from './compose.js';\nimport {\n createStateDelegates,\n type StellarPrivacyClientStateDelegates,\n} from './state-delegates/index.js';\n\ntype StellarPrivacyClientNetwork = ComposedStellarPrivacyClient['network'];\ntype StellarPrivacyClientOperations = ComposedStellarPrivacyClient['operations'];\n\nexport type StellarPrivacyClient = {\n readonly state: ComposedStellarPrivacyClient['state'];\n deposit: StellarPrivacyClientOperations['deposit'];\n transfer: (\n intent: StellarTransferIntent,\n ) => ReturnType<StellarPrivacyClientOperations['transfer']>;\n withdraw: StellarPrivacyClientOperations['withdraw'];\n syncPoolMerkleState: StellarPrivacyClientNetwork['syncPoolMerkleState'];\n syncPoolMerkleStates: StellarPrivacyClientNetwork['syncPoolMerkleStates'];\n readPoolLeafEphemeralHex: StellarPrivacyClientNetwork['readPoolLeafEphemeralHex'];\n checkRegistrationStatus: StellarPrivacyClientNetwork['checkRegistrationStatus'];\n registerPrivateAddress: StellarPrivacyClientNetwork['registerPrivateAddress'];\n resolveTransferRecipient: StellarPrivacyClientNetwork['resolveTransferRecipient'];\n checkPrivateRecordSpendStatus: StellarPrivacyClientNetwork['checkPrivateRecordSpendStatus'];\n waitForTransactionConfirmation: StellarPrivacyClientNetwork['waitForTransactionConfirmation'];\n fetchTransactionConfirmationStatus: StellarPrivacyClientNetwork['fetchTransactionConfirmationStatus'];\n getTransactionDetails: StellarPrivacyClientNetwork['getTransactionDetails'];\n} & StellarPrivacyClientStateDelegates;\n\nexport function createStellarPrivacyClientInstance(\n config: ResolvedStellarPrivacyClientConfig,\n): StellarPrivacyClient {\n const composed = composeStellarPrivacyClient(config);\n\n return {\n state: composed.state,\n ...createStateDelegates(composed.state),\n deposit: (intent) => composed.operations.deposit(intent),\n transfer: (intent) => composed.operations.transfer(intent),\n withdraw: (intent) => composed.operations.withdraw(intent),\n syncPoolMerkleState: (input) => composed.network.syncPoolMerkleState(input),\n syncPoolMerkleStates: (input) => composed.network.syncPoolMerkleStates(input),\n readPoolLeafEphemeralHex: (input) =>\n composed.network.readPoolLeafEphemeralHex(input),\n checkRegistrationStatus: (input) => composed.network.checkRegistrationStatus(input),\n registerPrivateAddress: (input) => composed.network.registerPrivateAddress(input),\n resolveTransferRecipient: (input) =>\n composed.network.resolveTransferRecipient(input),\n checkPrivateRecordSpendStatus: (input) =>\n composed.network.checkPrivateRecordSpendStatus(input),\n waitForTransactionConfirmation: (input) =>\n composed.network.waitForTransactionConfirmation(input),\n fetchTransactionConfirmationStatus: (txHash) =>\n composed.network.fetchTransactionConfirmationStatus(txHash),\n getTransactionDetails: (txHash) => composed.network.getTransactionDetails(txHash),\n };\n}\n","import type { StateBridgeAdapter } from '@arcanetech/privacy-sdk-core/state';\nimport { createStellarStateService } from '../../state/index.js';\nimport type {\n LeafEphemeralStatePort,\n PoolMerkleStatePort,\n} from '../merkle/state-port.js';\nimport type { StellarTransactEnvironment } from '../environment/types.js';\n\nfunction createPoolMerkleStatePort(state: StateBridgeAdapter): PoolMerkleStatePort {\n const stateService = createStellarStateService(state);\n return {\n get: (poolContract) => stateService.getPoolMerkleState(poolContract),\n set: (merkleState) => stateService.setPoolMerkleState(merkleState),\n };\n}\n\nfunction createLeafEphemeralStatePort(\n state: StateBridgeAdapter,\n): LeafEphemeralStatePort {\n const stateService = createStellarStateService(state);\n return {\n get: (input) => stateService.getLeafEphemeral(input),\n set: (ephemeral) => stateService.setLeafEphemeral(ephemeral),\n };\n}\n\nfunction createSenderScalarStateResolver(state: StateBridgeAdapter) {\n const stateService = createStellarStateService(state);\n return async (input: {\n owner: string;\n privateAddressStpl1: string;\n }): Promise<string | undefined> => {\n const owner = input.owner.trim();\n if (!owner) {\n return;\n }\n const defaultNonce = await stateService.getWalletDefaultPrivateAddressNonce(owner);\n if (!defaultNonce) {\n return;\n }\n const requestedAddress = input.privateAddressStpl1.trim();\n const record = await stateService.getWalletPrivateAddressRecord({\n owner,\n nonce: defaultNonce,\n });\n const recordAddress = record?.privateAddress?.trim();\n if (recordAddress !== requestedAddress) {\n return;\n }\n const scalar = await stateService.getWalletPrivateAddressScalar({\n owner,\n nonce: defaultNonce,\n });\n const normalized = scalar?.scalarHex?.trim() ?? '';\n return normalized.length > 0 ? normalized : undefined;\n };\n}\n\nexport function attachPoolStatePorts(\n transactEnvironment: StellarTransactEnvironment | undefined,\n state: StateBridgeAdapter,\n): StellarTransactEnvironment | undefined {\n if (!transactEnvironment) {\n return undefined;\n }\n return {\n ...transactEnvironment,\n poolMerkleState: createPoolMerkleStatePort(state),\n leafEphemeral: createLeafEphemeralStatePort(state),\n resolveSenderPrivKeyScalarFromState: createSenderScalarStateResolver(state),\n };\n}\n","import { attachContractContext } from '../contracts/contract-context.js';\nimport { attachPoolStatePorts } from '../transact/merkle/attach-state-ports.js';\nimport { parseAuditPublicKeyFromEnvHex } from '../transact/audit/parameters.js';\nimport type { StellarTransactEnvironment } from '../transact/environment/types.js';\nimport type { StellarStateAdapter } from '../types.js';\n\nexport function resolveClientTransactEnvironment(input: {\n sourceTransactEnvironment?: StellarTransactEnvironment;\n auditPublicKeyHex?: string;\n state: StellarStateAdapter;\n}): StellarTransactEnvironment | undefined {\n const transactEnvironmentWithStatePorts = input.sourceTransactEnvironment\n ? attachPoolStatePorts(input.sourceTransactEnvironment, input.state)\n : undefined;\n const transactEnvironmentWithAudit =\n transactEnvironmentWithStatePorts && input.auditPublicKeyHex\n ? {\n ...transactEnvironmentWithStatePorts,\n auditPublicKey: parseAuditPublicKeyFromEnvHex(input.auditPublicKeyHex),\n }\n : transactEnvironmentWithStatePorts;\n if (!transactEnvironmentWithAudit) {\n return undefined;\n }\n return attachContractContext(transactEnvironmentWithAudit);\n}\n","import { PrivacyPoolSDK } from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport {\n configurePrivacyPoolService,\n createPrivacyPoolService,\n getPrivacyPoolService,\n} from '../pool/singleton.js';\nimport { createBrowserStellarTransactEngine } from './browser-stellar.js';\nimport type {\n StellarBrowserAssets,\n StellarOperationReceipt,\n StellarPreparedOperation,\n StellarTransactEngine,\n} from '../../types.js';\nimport type { StellarTransactEnvironment } from '../environment/types.js';\nimport { resolveZkConfigNonce } from '../environment/zk-config-nonce.js';\nimport {\n materializeSelectedZkCircuit,\n optionalZkArtifactBaseUrl,\n} from '../zk/circuit-config.js';\n\nasync function privacyPoolInitOptions(\n assets: StellarBrowserAssets,\n transactEnvironment?: StellarTransactEnvironment,\n): Promise<Parameters<typeof PrivacyPoolSDK.init>[0]> {\n if (!transactEnvironment) {\n return { wasmBinary: assets.sdkWasm };\n }\n const zkConfigNonce = resolveZkConfigNonce(transactEnvironment);\n const zkCircuits = await materializeSelectedZkCircuit(\n transactEnvironment.zkCircuits,\n zkConfigNonce,\n transactEnvironment.zkArtifactBaseUrl,\n );\n return {\n wasmBinary: assets.sdkWasm,\n zkCircuits,\n zkConfigNonce,\n ...optionalZkArtifactBaseUrl(transactEnvironment.zkArtifactBaseUrl),\n };\n}\n\nexport async function createDefaultTransactEngine(\n assets: StellarBrowserAssets,\n transactEnvironment?: StellarTransactEnvironment,\n): Promise<StellarTransactEngine> {\n await PrivacyPoolSDK.init(await privacyPoolInitOptions(assets, transactEnvironment));\n\n if (transactEnvironment) {\n configurePrivacyPoolService(\n createPrivacyPoolService({\n assets,\n applicationId: transactEnvironment.network.applicationId,\n ...(transactEnvironment.auditPublicKey\n ? { auditPublicKey: transactEnvironment.auditPublicKey }\n : {}),\n ...(transactEnvironment.zkCircuits\n ? { zkCircuits: transactEnvironment.zkCircuits }\n : {}),\n ...(transactEnvironment.zkConfigNonce === undefined\n ? {}\n : { zkConfigNonce: transactEnvironment.zkConfigNonce }),\n ...optionalZkArtifactBaseUrl(transactEnvironment.zkArtifactBaseUrl),\n }),\n );\n return createBrowserStellarTransactEngine({\n environment: transactEnvironment,\n poolService: getPrivacyPoolService(),\n });\n }\n\n return {\n prepare: async (prepared) => prepared,\n submit: async (_prepared, signedPayload): Promise<StellarOperationReceipt> => ({\n operationId: signedPayload.operationId,\n confirmed: signedPayload.signed,\n }),\n };\n}\n\nexport function createStellarPolicyAdapterFromEnvironment(\n transactEnvironment: StellarTransactEnvironment,\n) {\n return {\n inspectOperation: async (\n _kind: StellarPreparedOperation['kind'],\n _intent: StellarPreparedOperation['intent'],\n ) => {\n await Promise.resolve(transactEnvironment.network.applicationId);\n },\n };\n}\n","import type { CoinData, DepositObject } from '@arcanetech/stellar-privacy-pool-zk-sdk';\n\nexport type AlignedDepositSlot = {\n deposit: DepositObject;\n commitment_hex: string;\n coin: CoinData;\n depositScalarHex: string;\n precommitementHex: string;\n};\n\nexport type KytApplicationIdHints = string[];\n\nexport type ProofResult = {\n proof_hex: string;\n public_hex: string;\n applicationIdsPlaintext: KytApplicationIdHints;\n ciphertext_hex?: string;\n output_note_ephemeral_scalars?: string[];\n};\n\nexport type ProofWithChange = ProofResult & {\n changeCoin?: {\n commitment_hex: string;\n coin: CoinData;\n depositScalarHex: string;\n precommitementHex: string;\n };\n};\n\nexport function ciphertextArtifactsFromProof(proof: {\n ciphertext_hex?: string;\n output_note_ephemeral_scalars?: string[];\n}): {\n ciphertextHex?: string;\n outputNoteEphemeralScalars?: string[];\n} {\n return {\n ...(proof.ciphertext_hex === undefined\n ? {}\n : { ciphertextHex: proof.ciphertext_hex }),\n ...(proof.output_note_ephemeral_scalars === undefined\n ? {}\n : {\n outputNoteEphemeralScalars: [...proof.output_note_ephemeral_scalars],\n }),\n };\n}\n","import type { StellarPreparedOperation } from '../../../types.js';\nimport { readPoolClientFactory } from '../../../contracts/contract-context.js';\nimport type { StellarTransactEnvironment } from '../../environment/types.js';\nimport type { PrivacyPoolService } from '../../pool/service.js';\nimport { ciphertextArtifactsFromProof } from '../../pool/proof-types.js';\nimport { buildPrivateRecordFromDeposit } from '../../private-address/record-coin.js';\nimport {\n enrichPreparedOperation,\n resolveTokenContractId,\n resolveWalletPublicKey,\n} from './shared.js';\n\nconst STROOPS_PER_UNIT = 10_000_000n;\n\nasync function createAlignedDepositWithProof(parameters: {\n prepared: StellarPreparedOperation;\n environment: StellarTransactEnvironment;\n poolService: PrivacyPoolService;\n walletPublicKey: string;\n tokenAddress: string;\n}) {\n const aligned = await parameters.poolService.createAlignedShieldCoinData({\n privateAddressStpl1: parameters.prepared.intent.to,\n amountStroops: parameters.prepared.intent.amount,\n tokenAddress: parameters.tokenAddress,\n });\n const poolClient = readPoolClientFactory(parameters.environment)({\n contractId: parameters.environment.network.poolContract,\n walletPublicKey: parameters.walletPublicKey,\n networkPassphrase: parameters.environment.network.networkPassphrase,\n sorobanRpcUrl: parameters.environment.network.rpcUrl,\n });\n const merkleTx = await poolClient.get_merkle_root();\n const proof = await parameters.poolService.prepareDepositTransactProof({\n privateAddressStpl1: parameters.prepared.intent.to,\n coin: aligned.coin,\n depositScalarHex: aligned.depositScalarHex,\n merkleRootBytes: merkleTx.result,\n tokenAddress: parameters.tokenAddress,\n });\n return { ...aligned, proof };\n}\n\nexport async function prepareDepositOperation(\n prepared: StellarPreparedOperation,\n environment: StellarTransactEnvironment,\n poolService: PrivacyPoolService,\n): Promise<StellarPreparedOperation> {\n const walletPublicKey = await resolveWalletPublicKey(environment, prepared);\n const tokenAddress = await resolveTokenContractId(environment, prepared.intent.asset);\n const depositProof = await createAlignedDepositWithProof({\n prepared,\n environment,\n poolService,\n walletPublicKey,\n tokenAddress,\n });\n const outputRecord = buildPrivateRecordFromDeposit({\n owner: walletPublicKey,\n privateAddress: prepared.intent.to,\n assetId: prepared.intent.asset,\n poolContract: environment.network.poolContract,\n amount: prepared.intent.amount,\n amountDisplay: Number(prepared.intent.amount) / Number(STROOPS_PER_UNIT),\n commitmentHex: depositProof.commitment_hex,\n coin: depositProof.coin,\n depositScalarHex: depositProof.depositScalarHex,\n precommitementHex: depositProof.precommitementHex,\n status: 'pending',\n });\n return enrichPreparedOperation(prepared, [outputRecord], {\n proofHex: depositProof.proof.proof_hex,\n publicHex: depositProof.proof.public_hex,\n ...ciphertextArtifactsFromProof(depositProof.proof),\n applicationIdsPlaintext: depositProof.proof.applicationIdsPlaintext,\n tokenAddress,\n depositScalarHex: depositProof.depositScalarHex,\n precommitementHex: depositProof.precommitementHex,\n commitmentHex: depositProof.commitment_hex,\n walletPublicKey,\n });\n}\n","import { StrKey } from '@stellar/stellar-sdk';\nimport type { StellarPreparedOperation } from '../../../types.js';\nimport type { StellarTransactEnvironment } from '../../environment/types.js';\n\nfunction isStellarAccountRecipient(prepared: StellarPreparedOperation): boolean {\n return (\n prepared.kind === 'transfer' &&\n StrKey.isValidEd25519PublicKey(prepared.intent.to.trim())\n );\n}\n\nexport async function stampEscrowSendArtifacts(\n prepared: StellarPreparedOperation,\n environment: StellarTransactEnvironment,\n walletPublicKey: string,\n): Promise<\n Pick<\n NonNullable<StellarPreparedOperation['transactArtifacts']>,\n 'escrowSend' | 'spendSource'\n >\n> {\n if (!isStellarAccountRecipient(prepared)) {\n return {};\n }\n if (!environment.resolveTransferRecipientAtExecute) {\n return {};\n }\n const recipient = await environment.resolveTransferRecipientAtExecute({\n recipientStellarAddress: prepared.intent.to.trim(),\n walletPublicKey,\n });\n if (!recipient.escrowSend) {\n return {};\n }\n return { escrowSend: true, spendSource: 'escrow' };\n}\n\nexport async function resolveTransferRecipientForExecute(\n prepared: StellarPreparedOperation,\n environment: StellarTransactEnvironment,\n walletPublicKey: string,\n) {\n if (!isStellarAccountRecipient(prepared)) {\n return {\n recipientPrivateAddressStpl1: prepared.intent.to.trim(),\n };\n }\n if (!environment.resolveTransferRecipientAtExecute) {\n throw new Error('Transfer recipient resolver is not configured.');\n }\n return environment.resolveTransferRecipientAtExecute({\n recipientStellarAddress: prepared.intent.to.trim(),\n walletPublicKey,\n });\n}\n","import type { StellarPreparedOperation } from '../../../types.js';\nimport type { StellarTransactEnvironment } from '../../environment/types.js';\nimport { resolveTokenContractId, resolveWalletPublicKey } from './shared.js';\nimport { stampEscrowSendArtifacts } from './transfer-helpers.js';\n\nasync function prepareSpendOperation(\n prepared: StellarPreparedOperation,\n environment: StellarTransactEnvironment,\n): Promise<StellarPreparedOperation> {\n const walletPublicKey = await resolveWalletPublicKey(environment, prepared);\n const tokenAddress = await resolveTokenContractId(environment, prepared.intent.asset);\n return {\n ...prepared,\n transactArtifacts: {\n ...prepared.transactArtifacts,\n tokenAddress,\n walletPublicKey,\n executeFinalizeRequired: true,\n ...(await stampEscrowSendArtifacts(prepared, environment, walletPublicKey)),\n },\n };\n}\n\nexport const prepareTransferOperation = prepareSpendOperation;\nexport const prepareWithdrawOperation = prepareSpendOperation;\n","export type EphemeralPointHex = { xHex: string; yHex: string };\n\nconst HEX_64_RE = /^[\\da-f]{64}$/iu;\n\nfunction normalizeCoordinate(value: string): string {\n const hex = value.trim().replace(/^0x/iu, '').toLowerCase();\n if (!HEX_64_RE.test(hex)) {\n throw new Error('Ephemeral key coordinate must be a 32-byte hex string.');\n }\n return hex;\n}\n\nexport function serializeEphemeralKeyString(point: EphemeralPointHex): string {\n return `${normalizeCoordinate(point.xHex)}:${normalizeCoordinate(point.yHex)}`;\n}\n","import type { StellarTransactArtifacts } from '../../types.js';\n\nexport function isEscrowSweepSpend(\n artifacts: StellarTransactArtifacts | undefined,\n): boolean {\n return artifacts?.spendSource === 'escrow' && artifacts.escrowSend !== true;\n}\n\nexport function requireEscrowSpendScalarHex(\n artifacts: StellarTransactArtifacts | undefined,\n): string {\n if (!isEscrowSweepSpend(artifacts)) {\n throw new Error('Escrow sweep requires spendSource escrow.');\n }\n const hex = artifacts?.escrowSpendScalarHex?.trim();\n if (!hex) {\n throw new Error('Escrow sweep requires the reconstructed note owner scalar.');\n }\n return hex;\n}\n\nexport function nullifierCheckSpendScalarHex(\n artifacts: StellarTransactArtifacts | undefined,\n): string | undefined {\n if (!isEscrowSweepSpend(artifacts)) {\n return undefined;\n }\n return requireEscrowSpendScalarHex(artifacts);\n}\n","import type { StellarPreparedOperation, StellarPrivateRecord } from '../../types.js';\nimport type { StellarTransactEnvironment } from '../environment/types.js';\nimport { readLeafEphemeralHex } from '../merkle/fetch-contract.js';\nimport {\n findCommitmentLeafIndex,\n requireCoinNoteFromRecord,\n} from '../private-address/record-coin.js';\nimport {\n ensureSenderPrivKeyScalarHex,\n loadMerkleState,\n resolveTokenContractId,\n} from './prepare/shared.js';\nimport {\n isEscrowSweepSpend,\n requireEscrowSpendScalarHex,\n} from '../escrow/require-escrow-spend-scalar.js';\nimport { readTransferFromPrivateAddress } from '../transfer-source/index.js';\n\nasync function resolveSenderPrivKeyScalarHex(input: {\n prepared: StellarPreparedOperation;\n environment: StellarTransactEnvironment;\n walletPublicKey: string;\n}): Promise<string> {\n if (isEscrowSweepSpend(input.prepared.transactArtifacts)) {\n return requireEscrowSpendScalarHex(input.prepared.transactArtifacts);\n }\n if (input.prepared.kind !== 'transfer' && input.prepared.kind !== 'withdraw') {\n throw new Error('Spend execution requires a transfer or withdraw intent.');\n }\n return ensureSenderPrivKeyScalarHex(\n input.environment,\n readTransferFromPrivateAddress(input.prepared.intent.from),\n input.walletPublicKey,\n );\n}\n\nexport async function buildSpendProofContextAtExecute(input: {\n prepared: StellarPreparedOperation;\n environment: StellarTransactEnvironment;\n recipientPrivateAddressStpl1: string;\n}) {\n const [primaryRecord] = input.prepared.consumedRecords;\n if (!primaryRecord) {\n throw new Error('Spend execution requires at least one private record.');\n }\n const walletPublicKey = primaryRecord.owner.trim();\n if (!walletPublicKey) {\n throw new Error('Spend execution record owner is missing.');\n }\n const senderPrivKeyScalarHex = await resolveSenderPrivKeyScalarHex({\n prepared: input.prepared,\n environment: input.environment,\n walletPublicKey,\n });\n const tokenAddress = await resolveTokenContractId(\n input.environment,\n input.prepared.intent.asset,\n );\n const coin = requireCoinNoteFromRecord(primaryRecord);\n const { commitments } = await loadMerkleState(input.environment, walletPublicKey);\n const leafIndex = findCommitmentLeafIndex(commitments, coin.commitment);\n if (leafIndex < 0) {\n throw new Error('Coin commitment not found in on-chain Merkle state.');\n }\n const ephemeral = await readLeafEphemeralHex({\n poolContractId: input.environment.network.poolContract,\n walletPublicKey,\n leafIndex,\n transactEnvironment: input.environment,\n ...(input.environment.leafEphemeral\n ? { leafEphemeral: input.environment.leafEphemeral }\n : {}),\n });\n return {\n walletPublicKey,\n tokenAddress,\n coin,\n commitments,\n ephemeral,\n senderPrivKeyScalarHex,\n recipientPrivateAddressStpl1: input.recipientPrivateAddressStpl1,\n };\n}\n\nexport async function readCoinEphemeralForRecord(input: {\n record: StellarPrivateRecord;\n environment: StellarTransactEnvironment;\n walletPublicKey: string;\n commitments: string[];\n}) {\n const coin = requireCoinNoteFromRecord(input.record);\n const leafIndex = findCommitmentLeafIndex(input.commitments, coin.commitment);\n if (leafIndex < 0) {\n throw new Error('Coin commitment not found in on-chain Merkle state.');\n }\n const ephemeral = await readLeafEphemeralHex({\n poolContractId: input.environment.network.poolContract,\n walletPublicKey: input.walletPublicKey,\n leafIndex,\n transactEnvironment: input.environment,\n ...(input.environment.leafEphemeral\n ? { leafEphemeral: input.environment.leafEphemeral }\n : {}),\n });\n return { coin, ephemeral };\n}\n","import type { CoinData, DepositSlot } from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport { getPrivacyPoolService } from '../../pool/singleton.js';\nimport { ZERO_STROOPS } from './helpers.js';\nimport type { AlignedDepositSlot } from '../../pool/proof-types.js';\nimport type {\n TransferEscrowClaimantLimbs,\n TransferEscrowSend,\n} from '../../environment/types.js';\n\ntype ChangeCoin = {\n commitment_hex: string;\n coin: CoinData;\n depositScalarHex: string;\n precommitementHex: string;\n};\n\ntype EscrowSlotInput = {\n escrowSend?: TransferEscrowSend;\n escrowClaimantLimbs?: TransferEscrowClaimantLimbs;\n};\n\nfunction escrowOutputFields(input: EscrowSlotInput) {\n if (!input.escrowSend) {\n return {};\n }\n return {\n escrowNonce: input.escrowSend.nonceDecimal,\n recipientHi: input.escrowSend.recipientHi,\n recipientLo: input.escrowSend.recipientLo,\n };\n}\n\nfunction paddingDepositPair(recipientDeposit: DepositSlot): [DepositSlot, DepositSlot] {\n return [recipientDeposit, 'dummy'];\n}\n\nasync function buildChangeDepositPair(parameters: {\n selfPrivateAddressStpl1ForChange: string;\n changeStroops: bigint;\n tokenAddress: string;\n recipientDeposit: DepositSlot;\n}): Promise<{ deposits: [DepositSlot, DepositSlot]; changeCoin: ChangeCoin }> {\n const changeSlot = await getPrivacyPoolService().buildAlignedDepositSlot({\n privateAddressStpl1: parameters.selfPrivateAddressStpl1ForChange.trim(),\n amountStroops: parameters.changeStroops,\n tokenAddress: parameters.tokenAddress,\n });\n return {\n deposits: [parameters.recipientDeposit, changeSlot.deposit],\n changeCoin: {\n commitment_hex: changeSlot.commitment_hex,\n coin: changeSlot.coin,\n depositScalarHex: changeSlot.depositScalarHex,\n precommitementHex: changeSlot.precommitementHex,\n },\n };\n}\n\nexport async function buildRecipientAndOptionalChangeDeposits(parameters: {\n recipientPrivateAddressStpl1: string;\n transferStroops: bigint;\n changeStroops: bigint;\n selfPrivateAddressStpl1ForChange: string | undefined;\n tokenAddress: string;\n escrowSend?: TransferEscrowSend;\n escrowClaimantLimbs?: TransferEscrowClaimantLimbs;\n}): Promise<{\n recipientSlot: AlignedDepositSlot;\n deposits: [DepositSlot, DepositSlot];\n changeCoin?: ChangeCoin;\n}> {\n const escrow: EscrowSlotInput = {\n ...(parameters.escrowSend ? { escrowSend: parameters.escrowSend } : {}),\n ...(parameters.escrowClaimantLimbs\n ? { escrowClaimantLimbs: parameters.escrowClaimantLimbs }\n : {}),\n };\n const recipientPrivateAddress = parameters.recipientPrivateAddressStpl1.trim();\n const recipientSlot = await getPrivacyPoolService().buildAlignedDepositSlot({\n privateAddressStpl1: recipientPrivateAddress,\n amountStroops: parameters.transferStroops,\n tokenAddress: parameters.tokenAddress,\n ...escrowOutputFields(escrow),\n });\n if (parameters.changeStroops <= ZERO_STROOPS) {\n return {\n recipientSlot,\n deposits: paddingDepositPair(recipientSlot.deposit),\n };\n }\n const changeResult = await buildChangeDepositPair({\n selfPrivateAddressStpl1ForChange: parameters.selfPrivateAddressStpl1ForChange!,\n changeStroops: parameters.changeStroops,\n tokenAddress: parameters.tokenAddress,\n recipientDeposit: recipientSlot.deposit,\n });\n return {\n recipientSlot,\n deposits: changeResult.deposits,\n changeCoin: changeResult.changeCoin,\n };\n}\n","import type { CoinData, DepositSlot } from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport { buildRecipientAndOptionalChangeDeposits } from './recipient-change-deposits.js';\nimport { withTokenAddressPublicInputs } from '../../proofs/transaction-input.js';\nimport { privKeyScalarDecimalFromRecipientScalarHex } from '../../encoding/priv-key-scalar-from-recipient-hex.js';\nimport { recipientPublicKeysDecimalFromPrivateAddress } from '../../private-address/codec.js';\nimport type {\n TransferEscrowClaimantLimbs,\n TransferEscrowSend,\n} from '../../environment/types.js';\n\nexport type GeneratedOutputCoin = {\n commitment_hex: string;\n coin: CoinData;\n depositScalarHex: string;\n precommitementHex: string;\n};\n\nexport function generatedOutputCoinFromSlot(\n slot: GeneratedOutputCoin,\n): GeneratedOutputCoin {\n return {\n commitment_hex: slot.commitment_hex,\n coin: slot.coin,\n depositScalarHex: slot.depositScalarHex,\n precommitementHex: slot.precommitementHex,\n };\n}\n\nfunction publicEscrowRecipientLimbs(parameters: {\n escrowSend?: TransferEscrowSend;\n escrowClaimantLimbs?: TransferEscrowClaimantLimbs;\n}): { escrowRecipientHi: string; escrowRecipientLo: string } | undefined {\n const limbs = parameters.escrowClaimantLimbs;\n if (!limbs) {\n return undefined;\n }\n return {\n escrowRecipientHi: limbs.recipientHi,\n escrowRecipientLo: limbs.recipientLo,\n };\n}\n\nexport function sweepWithdrawStamp(parameters: {\n escrowSend?: TransferEscrowSend;\n escrowClaimantLimbs?: TransferEscrowClaimantLimbs;\n}):\n | {\n escrowRecipientHi: string;\n escrowRecipientLo: string;\n escrowNonce?: string;\n }\n | undefined {\n const publicLimbs = publicEscrowRecipientLimbs(parameters);\n if (!publicLimbs) {\n return undefined;\n }\n return {\n ...publicLimbs,\n ...(parameters.escrowClaimantLimbs?.nonceDecimal\n ? { escrowNonce: parameters.escrowClaimantLimbs.nonceDecimal }\n : {}),\n };\n}\n\nexport function stampWithdrawEscrowLimbs<\n T extends { recipientStellar: [string, string]; escrowNonce?: string },\n>(\n withdrawObject: T,\n limbs?: {\n escrowRecipientHi: string;\n escrowRecipientLo: string;\n escrowNonce?: string;\n },\n): T {\n if (!limbs) {\n return withdrawObject;\n }\n return {\n ...withdrawObject,\n recipientStellar: [limbs.escrowRecipientHi, limbs.escrowRecipientLo],\n ...(limbs.escrowNonce ? { escrowNonce: limbs.escrowNonce } : {}),\n };\n}\n\nfunction sweepOutputOwnerFields(parameters: {\n recipientPrivateAddressStpl1: string;\n escrowClaimantLimbs?: TransferEscrowClaimantLimbs;\n}): { sweepOutputOwnerPubX: string; sweepOutputOwnerPubY: string } | undefined {\n if (!parameters.escrowClaimantLimbs) {\n return undefined;\n }\n const [sweepOutputOwnerPubX, sweepOutputOwnerPubY] =\n recipientPublicKeysDecimalFromPrivateAddress(\n parameters.recipientPrivateAddressStpl1,\n ) as [string, string];\n return { sweepOutputOwnerPubX, sweepOutputOwnerPubY };\n}\n\nasync function buildTransferDepositsAndPublicInput(parameters: {\n recipientPrivateAddressStpl1: string;\n transferStroops: bigint;\n changeStroops: bigint;\n selfPrivateAddressStpl1ForChange: string | undefined;\n tokenAddress: string;\n stateRoot: string;\n privKeyScalar: string;\n escrowSend?: TransferEscrowSend;\n escrowClaimantLimbs?: TransferEscrowClaimantLimbs;\n}): Promise<{\n recipientSlot: GeneratedOutputCoin;\n deposits: [DepositSlot, DepositSlot];\n changeCoin?: GeneratedOutputCoin;\n publicInput: ReturnType<typeof withTokenAddressPublicInputs>;\n}> {\n const { recipientSlot, deposits, changeCoin } =\n await buildRecipientAndOptionalChangeDeposits({\n recipientPrivateAddressStpl1: parameters.recipientPrivateAddressStpl1,\n transferStroops: parameters.transferStroops,\n changeStroops: parameters.changeStroops,\n selfPrivateAddressStpl1ForChange: parameters.selfPrivateAddressStpl1ForChange,\n tokenAddress: parameters.tokenAddress,\n ...(parameters.escrowSend ? { escrowSend: parameters.escrowSend } : {}),\n ...(parameters.escrowClaimantLimbs\n ? { escrowClaimantLimbs: parameters.escrowClaimantLimbs }\n : {}),\n });\n const publicInput = withTokenAddressPublicInputs(\n {\n stateRoot: parameters.stateRoot,\n privKeyScalar: parameters.privKeyScalar,\n ...publicEscrowRecipientLimbs(parameters),\n ...sweepOutputOwnerFields(parameters),\n },\n parameters.tokenAddress,\n );\n return {\n recipientSlot,\n deposits,\n ...(changeCoin ? { changeCoin } : {}),\n publicInput,\n };\n}\n\nexport async function buildSenderTransferDepositsAndPublicInput(parameters: {\n senderPrivKeyScalarHex: string;\n recipientPrivateAddressStpl1: string;\n transferStroops: bigint;\n changeStroops: bigint;\n selfPrivateAddressStpl1ForChange: string | undefined;\n tokenAddress: string;\n stateRoot: string;\n escrowSend?: TransferEscrowSend;\n escrowClaimantLimbs?: TransferEscrowClaimantLimbs;\n}): ReturnType<typeof buildTransferDepositsAndPublicInput> {\n return buildTransferDepositsAndPublicInput({\n recipientPrivateAddressStpl1: parameters.recipientPrivateAddressStpl1,\n transferStroops: parameters.transferStroops,\n changeStroops: parameters.changeStroops,\n selfPrivateAddressStpl1ForChange: parameters.selfPrivateAddressStpl1ForChange,\n tokenAddress: parameters.tokenAddress,\n stateRoot: parameters.stateRoot,\n privKeyScalar: privKeyScalarDecimalFromRecipientScalarHex(\n parameters.senderPrivKeyScalarHex,\n ),\n ...(parameters.escrowSend ? { escrowSend: parameters.escrowSend } : {}),\n ...(parameters.escrowClaimantLimbs\n ? { escrowClaimantLimbs: parameters.escrowClaimantLimbs }\n : {}),\n });\n}\n","import type { CoinData, StateFile } from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport { getPrivacyPoolService } from '../../pool/singleton.js';\nimport { buildZeroPublicLegs } from '../../proofs/transaction-input.js';\nimport {\n buildApplicationIdHints,\n padDepositSlotsToLayout,\n padPublicLegsToLayout,\n padWithdrawSlotsToLayout,\n} from '../../zk/slots.js';\nimport {\n changeStroopsAfterDualTransfer,\n dualWithdrawLegsWithSharedRoot,\n requireChangeRecipientWhenPartial,\n} from '../../proofs/confidential/helpers.js';\nimport { buildPoolTransactionAuditParameters } from '../../audit/parameters.js';\nimport type { KytApplicationIdHints } from '../../pool/proof-types.js';\nimport {\n buildSenderTransferDepositsAndPublicInput,\n generatedOutputCoinFromSlot,\n stampWithdrawEscrowLimbs,\n sweepWithdrawStamp,\n type GeneratedOutputCoin,\n} from './shared.js';\nimport { privKeyScalarDecimalFromRecipientScalarHex } from '../../encoding/priv-key-scalar-from-recipient-hex.js';\nimport type {\n TransferEscrowClaimantLimbs,\n TransferEscrowSend,\n} from '../../environment/types.js';\n\ntype PrepareConfidentialTransferProofDualParameters = {\n coinA: CoinData;\n coinB: CoinData;\n state: StateFile;\n senderPrivKeyScalarHex: string;\n ephemeralAKey: string;\n ephemeralBKey: string;\n transferStroops: bigint;\n recipientPrivateAddressStpl1: string;\n selfPrivateAddressStpl1ForChange: string | undefined;\n tokenAddress: string;\n escrowSend?: TransferEscrowSend;\n escrowClaimantLimbs?: TransferEscrowClaimantLimbs;\n};\n\ntype PrepareConfidentialTransferProofDualResult = {\n proof_hex: string;\n public_hex: string;\n ciphertext_hex?: string;\n output_note_ephemeral_scalars?: string[];\n applicationIdsPlaintext: KytApplicationIdHints;\n recipientCoin: GeneratedOutputCoin;\n changeCoin?: GeneratedOutputCoin;\n};\n\nfunction confidentialEscrowFields(\n parameters: PrepareConfidentialTransferProofDualParameters,\n) {\n return {\n ...(parameters.escrowSend ? { escrowSend: parameters.escrowSend } : {}),\n ...(parameters.escrowClaimantLimbs\n ? { escrowClaimantLimbs: parameters.escrowClaimantLimbs }\n : {}),\n };\n}\n\nfunction stampDualWithdrawLegs(\n legs: ReturnType<typeof dualWithdrawLegsWithSharedRoot>,\n parameters: PrepareConfidentialTransferProofDualParameters,\n) {\n const escrowLimbs = sweepWithdrawStamp(confidentialEscrowFields(parameters));\n return {\n legA: {\n ...legs.legA,\n withdrawObject: stampWithdrawEscrowLimbs(legs.legA.withdrawObject, escrowLimbs),\n },\n legB: {\n ...legs.legB,\n withdrawObject: stampWithdrawEscrowLimbs(legs.legB.withdrawObject, escrowLimbs),\n },\n };\n}\n\nfunction buildDualTransferApplicationIds(\n sdk: Awaited<\n ReturnType<ReturnType<typeof getPrivacyPoolService>['getInitializedSdk']>\n >,\n applicationId: string,\n changeCoin?: GeneratedOutputCoin,\n): KytApplicationIdHints {\n return buildApplicationIdHints({\n sdk,\n inputIds: [applicationId, applicationId],\n outputIds: [applicationId, changeCoin ? applicationId : '0'],\n });\n}\n\nasync function proveDualConfidentialTransfer(parameters: {\n sdk: Awaited<\n ReturnType<ReturnType<typeof getPrivacyPoolService>['getInitializedSdk']>\n >;\n publicInput: Awaited<\n ReturnType<typeof buildSenderTransferDepositsAndPublicInput>\n >['publicInput'];\n legA: Awaited<ReturnType<typeof dualWithdrawLegsWithSharedRoot>>['legA'];\n legB: Awaited<ReturnType<typeof dualWithdrawLegsWithSharedRoot>>['legB'];\n deposits: Awaited<\n ReturnType<typeof buildSenderTransferDepositsAndPublicInput>\n >['deposits'];\n applicationId: string;\n auditPublicKey?: [string, string];\n}) {\n const audit = buildPoolTransactionAuditParameters({\n applicationId: parameters.applicationId,\n nAuditSlots: parameters.sdk.getLayout().nAuditSlots,\n ...(parameters.auditPublicKey ? { auditPublicKey: parameters.auditPublicKey } : {}),\n });\n return parameters.sdk.proveTransaction(\n parameters.publicInput as unknown as Parameters<\n typeof parameters.sdk.proveTransaction\n >[0],\n padPublicLegsToLayout(parameters.sdk, buildZeroPublicLegs()),\n padWithdrawSlotsToLayout(parameters.sdk, [\n parameters.legA.withdrawObject,\n parameters.legB.withdrawObject,\n ]),\n padDepositSlotsToLayout(parameters.sdk, parameters.deposits),\n audit,\n );\n}\n\nasync function buildDualTransferProofContext(\n parameters: PrepareConfidentialTransferProofDualParameters,\n applicationId: string,\n sdk: Awaited<\n ReturnType<ReturnType<typeof getPrivacyPoolService>['getInitializedSdk']>\n >,\n) {\n const totalNotes = BigInt(parameters.coinA.value) + BigInt(parameters.coinB.value);\n const changeStroops = changeStroopsAfterDualTransfer(\n parameters.transferStroops,\n totalNotes,\n );\n requireChangeRecipientWhenPartial(\n changeStroops,\n parameters.selfPrivateAddressStpl1ForChange,\n );\n const privKeyScalar = privKeyScalarDecimalFromRecipientScalarHex(\n parameters.senderPrivKeyScalarHex,\n );\n const ownerPubHex = sdk.ecdhEphemeralPublicKeyFromScalarHex(\n parameters.senderPrivKeyScalarHex,\n );\n const { legA, legB } = stampDualWithdrawLegs(\n dualWithdrawLegsWithSharedRoot({\n sdk,\n coinA: parameters.coinA,\n coinB: parameters.coinB,\n state: parameters.state,\n ownerPubHex,\n privKeyScalar,\n applicationId,\n }),\n parameters,\n );\n const transferInputs = await buildSenderTransferDepositsAndPublicInput({\n senderPrivKeyScalarHex: parameters.senderPrivKeyScalarHex,\n recipientPrivateAddressStpl1: parameters.recipientPrivateAddressStpl1,\n transferStroops: parameters.transferStroops,\n changeStroops,\n selfPrivateAddressStpl1ForChange: parameters.selfPrivateAddressStpl1ForChange,\n tokenAddress: parameters.tokenAddress,\n stateRoot: legA.witness.stateRoot,\n ...confidentialEscrowFields(parameters),\n });\n return { legA, legB, applicationId, ...transferInputs };\n}\n\nexport async function prepareConfidentialTransferProofDual(\n parameters: PrepareConfidentialTransferProofDualParameters,\n): Promise<PrepareConfidentialTransferProofDualResult> {\n const poolService = getPrivacyPoolService();\n const sdk = await poolService.getInitializedSdk();\n const applicationId = poolService.getApplicationId();\n const { legA, legB, recipientSlot, deposits, changeCoin, publicInput } =\n await buildDualTransferProofContext(parameters, applicationId, sdk);\n const auditPublicKey = poolService.getAuditPublicKey();\n const proof = await (auditPublicKey\n ? proveDualConfidentialTransfer({\n sdk,\n publicInput,\n legA,\n legB,\n deposits,\n applicationId,\n auditPublicKey,\n })\n : proveDualConfidentialTransfer({\n sdk,\n publicInput,\n legA,\n legB,\n deposits,\n applicationId,\n }));\n return {\n ...proof,\n applicationIdsPlaintext: buildDualTransferApplicationIds(\n sdk,\n applicationId,\n changeCoin,\n ),\n recipientCoin: generatedOutputCoinFromSlot(recipientSlot),\n ...(changeCoin ? { changeCoin } : {}),\n };\n}\n","import type { CoinData, StateFile } from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport { getPrivacyPoolService } from '../../pool/singleton.js';\nimport { buildZeroPublicLegs } from '../../proofs/transaction-input.js';\nimport {\n buildApplicationIdHints,\n padDepositSlotsToLayout,\n padPublicLegsToLayout,\n padWithdrawSlotsToLayout,\n} from '../../zk/slots.js';\nimport {\n MIN_CONFIDENTIAL_TRANSFER_STROOPS,\n requireChangeRecipientWhenPartial,\n withdrawWitnessForCoin,\n} from '../../proofs/confidential/helpers.js';\nimport { privKeyScalarDecimalFromRecipientScalarHex } from '../../encoding/priv-key-scalar-from-recipient-hex.js';\nimport { buildPoolTransactionAuditParameters } from '../../audit/parameters.js';\nimport type { KytApplicationIdHints } from '../../pool/proof-types.js';\nimport {\n buildSenderTransferDepositsAndPublicInput,\n generatedOutputCoinFromSlot,\n stampWithdrawEscrowLimbs,\n sweepWithdrawStamp,\n type GeneratedOutputCoin,\n} from './shared.js';\nimport type {\n TransferEscrowClaimantLimbs,\n TransferEscrowSend,\n} from '../../environment/types.js';\ntype PrepareConfidentialTransferProofParameters = {\n coin: CoinData;\n state: StateFile;\n senderPrivKeyScalarHex: string;\n depositorEphemeralKey: string;\n transferStroops: bigint;\n recipientPrivateAddressStpl1: string;\n selfPrivateAddressStpl1ForChange: string | undefined;\n tokenAddress: string;\n escrowSend?: TransferEscrowSend;\n escrowClaimantLimbs?: TransferEscrowClaimantLimbs;\n};\n\ntype PrepareConfidentialTransferProofResult = {\n proof_hex: string;\n public_hex: string;\n ciphertext_hex?: string;\n output_note_ephemeral_scalars?: string[];\n applicationIdsPlaintext: KytApplicationIdHints;\n recipientCoin: GeneratedOutputCoin;\n changeCoin?: GeneratedOutputCoin;\n};\ntype SenderTransferBuild = Awaited<\n ReturnType<typeof buildSenderTransferDepositsAndPublicInput>\n>;\ntype InitializedPrivacySdk = Awaited<\n ReturnType<ReturnType<typeof getPrivacyPoolService>['getInitializedSdk']>\n>;\n\nfunction validateSingleCoinTransferAmounts(\n transferStroops: bigint,\n noteStroops: bigint,\n selfPrivateAddressStpl1ForChange: string | undefined,\n): bigint {\n if (transferStroops < MIN_CONFIDENTIAL_TRANSFER_STROOPS) {\n throw new Error('Transfer amount must be positive');\n }\n if (transferStroops > noteStroops) {\n throw new Error('Transfer amount exceeds note value');\n }\n const changeStroops = noteStroops - transferStroops;\n requireChangeRecipientWhenPartial(changeStroops, selfPrivateAddressStpl1ForChange);\n return changeStroops;\n}\n\nfunction buildSingleTransferApplicationIds(\n sdk: InitializedPrivacySdk,\n applicationId: string,\n changeCoin?: GeneratedOutputCoin,\n): KytApplicationIdHints {\n return buildApplicationIdHints({\n sdk,\n inputIds: [applicationId],\n outputIds: [applicationId, changeCoin ? applicationId : '0'],\n });\n}\n\nfunction buildTransferAuditParameters(parameters: {\n poolService: ReturnType<typeof getPrivacyPoolService>;\n applicationId: string;\n nAuditSlots: number;\n}) {\n const auditPublicKey = parameters.poolService.getAuditPublicKey();\n return buildPoolTransactionAuditParameters({\n applicationId: parameters.applicationId,\n nAuditSlots: parameters.nAuditSlots,\n ...(auditPublicKey ? { auditPublicKey } : {}),\n });\n}\n\nasync function proveTransaction(parameters: {\n sdk: InitializedPrivacySdk;\n publicInput: SenderTransferBuild['publicInput'];\n withdrawObject: ReturnType<typeof withdrawWitnessForCoin>['withdrawObject'];\n deposits: SenderTransferBuild['deposits'];\n audit: ReturnType<typeof buildTransferAuditParameters>;\n}) {\n return parameters.sdk.proveTransaction(\n parameters.publicInput as unknown as Parameters<\n typeof parameters.sdk.proveTransaction\n >[0],\n padPublicLegsToLayout(parameters.sdk, buildZeroPublicLegs()),\n padWithdrawSlotsToLayout(parameters.sdk, [parameters.withdrawObject]),\n padDepositSlotsToLayout(parameters.sdk, parameters.deposits),\n parameters.audit,\n );\n}\n\ntype TransferProofInputs = {\n witness: ReturnType<typeof withdrawWitnessForCoin>['witness'];\n withdrawObject: ReturnType<typeof withdrawWitnessForCoin>['withdrawObject'];\n recipientSlot: SenderTransferBuild['recipientSlot'];\n deposits: SenderTransferBuild['deposits'];\n changeCoin: SenderTransferBuild['changeCoin'];\n publicInput: SenderTransferBuild['publicInput'];\n};\n\nfunction confidentialEscrowFields(input: PrepareConfidentialTransferProofParameters) {\n return {\n ...(input.escrowSend ? { escrowSend: input.escrowSend } : {}),\n ...(input.escrowClaimantLimbs\n ? { escrowClaimantLimbs: input.escrowClaimantLimbs }\n : {}),\n };\n}\n\nasync function buildTransferProofInputs(parameters: {\n sdk: InitializedPrivacySdk;\n applicationId: string;\n input: PrepareConfidentialTransferProofParameters;\n noteStroops: bigint;\n}): Promise<TransferProofInputs> {\n const changeStroops = validateSingleCoinTransferAmounts(\n parameters.input.transferStroops,\n parameters.noteStroops,\n parameters.input.selfPrivateAddressStpl1ForChange,\n );\n const privKeyScalar = privKeyScalarDecimalFromRecipientScalarHex(\n parameters.input.senderPrivKeyScalarHex,\n );\n const { witness, withdrawObject } = withdrawWitnessForCoin({\n sdk: parameters.sdk,\n coin: parameters.input.coin,\n state: parameters.input.state,\n ownerPubHex: parameters.sdk.ecdhEphemeralPublicKeyFromScalarHex(\n parameters.input.senderPrivKeyScalarHex,\n ),\n privKeyScalar,\n applicationId: parameters.applicationId,\n });\n const stampedWithdraw = stampWithdrawEscrowLimbs(\n withdrawObject,\n sweepWithdrawStamp(confidentialEscrowFields(parameters.input)),\n );\n const { recipientSlot, deposits, changeCoin, publicInput } =\n await buildSenderTransferDepositsAndPublicInput({\n senderPrivKeyScalarHex: parameters.input.senderPrivKeyScalarHex,\n recipientPrivateAddressStpl1: parameters.input.recipientPrivateAddressStpl1,\n transferStroops: parameters.input.transferStroops,\n changeStroops,\n selfPrivateAddressStpl1ForChange:\n parameters.input.selfPrivateAddressStpl1ForChange,\n tokenAddress: parameters.input.tokenAddress,\n stateRoot: witness.stateRoot,\n ...confidentialEscrowFields(parameters.input),\n });\n return {\n witness,\n withdrawObject: stampedWithdraw,\n recipientSlot,\n deposits,\n changeCoin,\n publicInput,\n };\n}\n\nexport async function prepareConfidentialTransferProof(\n parameters: PrepareConfidentialTransferProofParameters,\n): Promise<PrepareConfidentialTransferProofResult> {\n const poolService = getPrivacyPoolService();\n const sdk = await poolService.getInitializedSdk();\n const applicationId = poolService.getApplicationId();\n const noteStroops = BigInt(parameters.coin.value);\n const { withdrawObject, recipientSlot, deposits, changeCoin, publicInput } =\n await buildTransferProofInputs({\n sdk,\n applicationId,\n input: parameters,\n noteStroops,\n });\n const audit = buildTransferAuditParameters({\n poolService,\n applicationId,\n nAuditSlots: sdk.getLayout().nAuditSlots,\n });\n const proof = await proveTransaction({\n sdk,\n publicInput,\n withdrawObject,\n deposits,\n audit,\n });\n return {\n ...proof,\n applicationIdsPlaintext: buildSingleTransferApplicationIds(\n sdk,\n applicationId,\n changeCoin,\n ),\n recipientCoin: generatedOutputCoinFromSlot(recipientSlot),\n ...(changeCoin ? { changeCoin } : {}),\n };\n}\n\nexport { prepareConfidentialTransferProofDual } from '../../proofs/confidential/dual.js';\n","import type { StellarPreparedOperation } from '../../types.js';\nimport type {\n StellarTransactEnvironment,\n TransferEscrowClaimantLimbs,\n TransferEscrowSend,\n} from '../environment/types.js';\nimport {\n prepareConfidentialTransferProof,\n prepareConfidentialTransferProofDual,\n} from '../proofs/confidential/single.js';\nimport {\n buildSpendProofContextAtExecute,\n readCoinEphemeralForRecord,\n} from './spend-proof-context.js';\nimport { serializeEphemeralKeyString } from '../encoding/ephemeral-key.js';\nimport { readTransferFromPrivateAddress } from '../transfer-source/index.js';\n\nfunction readChangeRecipient(\n input: { prepared: StellarPreparedOperation },\n changeStroops: bigint,\n): string | undefined {\n if (changeStroops <= 0n || input.prepared.kind !== 'transfer') {\n return undefined;\n }\n const from = input.prepared.intent.from;\n return readTransferFromPrivateAddress(from);\n}\n\nfunction proofEscrowFields(input: {\n escrowSend?: TransferEscrowSend;\n escrowClaimantLimbs?: TransferEscrowClaimantLimbs;\n}) {\n return {\n ...(input.escrowSend ? { escrowSend: input.escrowSend } : {}),\n ...(input.escrowClaimantLimbs\n ? { escrowClaimantLimbs: input.escrowClaimantLimbs }\n : {}),\n };\n}\n\nasync function buildSingleTransferProofAtExecute(input: {\n prepared: StellarPreparedOperation;\n environment: StellarTransactEnvironment;\n recipientPrivateAddressStpl1: string;\n escrowSend?: TransferEscrowSend;\n escrowClaimantLimbs?: TransferEscrowClaimantLimbs;\n}) {\n const context = await buildSpendProofContextAtExecute(input);\n const changeStroops = BigInt(context.coin.value) - input.prepared.intent.amount;\n const proof = await prepareConfidentialTransferProof({\n coin: context.coin,\n state: { commitments: context.commitments },\n senderPrivKeyScalarHex: context.senderPrivKeyScalarHex,\n depositorEphemeralKey: serializeEphemeralKeyString({\n xHex: context.ephemeral.xHex,\n yHex: context.ephemeral.yHex,\n }),\n transferStroops: input.prepared.intent.amount,\n recipientPrivateAddressStpl1: context.recipientPrivateAddressStpl1,\n selfPrivateAddressStpl1ForChange: readChangeRecipient(input, changeStroops),\n tokenAddress: context.tokenAddress,\n ...proofEscrowFields(input),\n });\n return { context, proof };\n}\n\nasync function buildDualTransferProofAtExecute(input: {\n prepared: StellarPreparedOperation;\n environment: StellarTransactEnvironment;\n recipientPrivateAddressStpl1: string;\n escrowSend?: TransferEscrowSend;\n escrowClaimantLimbs?: TransferEscrowClaimantLimbs;\n}) {\n const [primaryRecord, secondaryRecord] = input.prepared.consumedRecords;\n if (!primaryRecord || !secondaryRecord) {\n throw new Error('Dual transfer execution requires two private input records.');\n }\n const context = await buildSpendProofContextAtExecute(input);\n const secondary = await readCoinEphemeralForRecord({\n record: secondaryRecord,\n environment: input.environment,\n walletPublicKey: context.walletPublicKey,\n commitments: context.commitments,\n });\n const totalNotes = BigInt(context.coin.value) + BigInt(secondary.coin.value);\n const changeStroops = totalNotes - input.prepared.intent.amount;\n const proof = await prepareConfidentialTransferProofDual({\n coinA: context.coin,\n coinB: secondary.coin,\n state: { commitments: context.commitments },\n senderPrivKeyScalarHex: context.senderPrivKeyScalarHex,\n ephemeralAKey: serializeEphemeralKeyString({\n xHex: context.ephemeral.xHex,\n yHex: context.ephemeral.yHex,\n }),\n ephemeralBKey: serializeEphemeralKeyString({\n xHex: secondary.ephemeral.xHex,\n yHex: secondary.ephemeral.yHex,\n }),\n transferStroops: input.prepared.intent.amount,\n recipientPrivateAddressStpl1: context.recipientPrivateAddressStpl1,\n selfPrivateAddressStpl1ForChange: readChangeRecipient(input, changeStroops),\n tokenAddress: context.tokenAddress,\n ...proofEscrowFields(input),\n });\n return { context, proof };\n}\n\nexport async function buildTransferProofAtExecute(input: {\n prepared: StellarPreparedOperation;\n environment: StellarTransactEnvironment;\n recipientPrivateAddressStpl1: string;\n escrowSend?: TransferEscrowSend;\n escrowClaimantLimbs?: TransferEscrowClaimantLimbs;\n}) {\n const recordCount = input.prepared.consumedRecords.length;\n if (recordCount === 1) {\n return buildSingleTransferProofAtExecute(input);\n }\n if (recordCount === 2) {\n return buildDualTransferProofAtExecute(input);\n }\n throw new Error('Confidential transfer execution supports at most two input notes.');\n}\n","import type { StellarPreparedOperation } from '../../types.js';\nimport type { StellarTransactEnvironment } from '../environment/types.js';\nimport { resolveTransferRecipientForExecute } from './prepare/transfer-helpers.js';\nimport { verifyPrivateRecordsNullifiersBeforeExecute } from '../transfer-source/index.js';\nimport { nullifierCheckSpendScalarHex } from '../escrow/require-escrow-spend-scalar.js';\nimport { buildTransferProofAtExecute } from './transfer-proof-at-execute.js';\nimport type { buildSpendProofContextAtExecute } from './spend-proof-context.js';\nimport type { prepareConfidentialTransferProof } from '../proofs/confidential/single.js';\nimport { ciphertextArtifactsFromProof } from '../pool/proof-types.js';\n\nfunction stampEscrowOutputRecords(input: {\n prepared: StellarPreparedOperation;\n proof: Awaited<ReturnType<typeof prepareConfidentialTransferProof>>;\n walletPublicKey: string;\n escrowSendPrivateAddress?: string;\n}): void {\n if (input.escrowSendPrivateAddress) {\n const [recipientRecord, ...rest] = input.prepared.outputRecords;\n if (recipientRecord) {\n input.prepared.outputRecords = [\n {\n ...recipientRecord,\n privateAddress: input.escrowSendPrivateAddress,\n },\n ...rest,\n ];\n }\n }\n seedEscrowSweepOutputsFromProof({\n prepared: input.prepared,\n proof: input.proof,\n walletPublicKey: input.walletPublicKey,\n });\n enrichTransferOutputRecords(input.prepared, input.proof);\n}\n\nfunction seedEscrowSweepOutputsFromProof(input: {\n prepared: StellarPreparedOperation;\n proof: Awaited<ReturnType<typeof prepareConfidentialTransferProof>>;\n walletPublicKey: string;\n}): void {\n if (\n input.prepared.transactArtifacts?.spendSource !== 'escrow' ||\n input.prepared.outputRecords.length > 0\n ) {\n return;\n }\n input.prepared.outputRecords = [\n {\n id: input.proof.recipientCoin.commitment_hex,\n owner: input.walletPublicKey,\n privateAddress: input.prepared.intent.to,\n asset: input.prepared.intent.asset,\n amount: input.prepared.intent.amount,\n consumed: false,\n },\n ];\n}\n\nfunction enrichTransferOutputRecords(\n prepared: StellarPreparedOperation,\n proof: Awaited<ReturnType<typeof prepareConfidentialTransferProof>>,\n): void {\n if (prepared.outputRecords.length === 0) {\n return;\n }\n const generatedOutputCoins = [\n proof.recipientCoin,\n ...(proof.changeCoin ? [proof.changeCoin] : []),\n ];\n prepared.outputRecords = prepared.outputRecords.map((record, index) => {\n const generatedCoin = generatedOutputCoins.at(index);\n if (!generatedCoin) {\n return record;\n }\n return {\n ...record,\n id: generatedCoin.commitment_hex,\n commitmentHex: generatedCoin.commitment_hex,\n coinNote: generatedCoin.coin,\n depositScalarHex: generatedCoin.depositScalarHex,\n precommitementHex: generatedCoin.precommitementHex,\n };\n });\n}\n\nfunction escrowSpendArtifacts(input: {\n escrowSend?: boolean;\n escrowRecipient?: string;\n escrowSpendScalarHex?: string;\n preparedSpendSource?: NonNullable<\n StellarPreparedOperation['transactArtifacts']\n >['spendSource'];\n escrowClaimantLimbs?: NonNullable<\n StellarPreparedOperation['transactArtifacts']\n >['escrowClaimantLimbs'];\n}) {\n if (input.escrowSend) {\n return {\n escrowSend: true as const,\n spendSource: 'escrow' as const,\n ...(input.escrowRecipient ? { escrowRecipient: input.escrowRecipient } : {}),\n };\n }\n if (input.preparedSpendSource === 'escrow') {\n return {\n spendSource: 'escrow' as const,\n ...(input.escrowRecipient ? { escrowRecipient: input.escrowRecipient } : {}),\n ...(input.escrowSpendScalarHex\n ? { escrowSpendScalarHex: input.escrowSpendScalarHex }\n : {}),\n ...(input.escrowClaimantLimbs\n ? { escrowClaimantLimbs: input.escrowClaimantLimbs }\n : {}),\n };\n }\n return {};\n}\n\nfunction buildTransferFinalizeArtifacts(input: {\n proof: Awaited<ReturnType<typeof prepareConfidentialTransferProof>>;\n context: Awaited<ReturnType<typeof buildSpendProofContextAtExecute>>;\n escrowSend?: boolean;\n escrowRecipient?: string;\n escrowSpendScalarHex?: string;\n preparedSpendSource?: NonNullable<\n StellarPreparedOperation['transactArtifacts']\n >['spendSource'];\n escrowClaimantLimbs?: NonNullable<\n StellarPreparedOperation['transactArtifacts']\n >['escrowClaimantLimbs'];\n}) {\n return {\n proofHex: input.proof.proof_hex,\n publicHex: input.proof.public_hex,\n ...ciphertextArtifactsFromProof(input.proof),\n applicationIdsPlaintext: input.proof.applicationIdsPlaintext,\n tokenAddress: input.context.tokenAddress,\n walletPublicKey: input.context.walletPublicKey,\n executeFinalizeRequired: false,\n ...escrowSpendArtifacts(input),\n };\n}\n\nasync function runTransferFinalizeSteps(input: {\n prepared: StellarPreparedOperation;\n environment: StellarTransactEnvironment;\n walletPublicKey: string;\n}) {\n const recipient = await resolveTransferRecipientForExecute(\n input.prepared,\n input.environment,\n input.walletPublicKey,\n );\n const spendScalarHex = nullifierCheckSpendScalarHex(input.prepared.transactArtifacts);\n await verifyPrivateRecordsNullifiersBeforeExecute({\n records: input.prepared.consumedRecords,\n environment: input.environment,\n walletPublicKey: input.walletPublicKey,\n ...(spendScalarHex ? { spendScalarHex } : {}),\n });\n const { context, proof } = await buildTransferProofAtExecute({\n prepared: input.prepared,\n environment: input.environment,\n recipientPrivateAddressStpl1: recipient.recipientPrivateAddressStpl1,\n ...(recipient.escrowSend ? { escrowSend: recipient.escrowSend } : {}),\n ...(input.prepared.transactArtifacts?.escrowClaimantLimbs\n ? {\n escrowClaimantLimbs: input.prepared.transactArtifacts.escrowClaimantLimbs,\n }\n : {}),\n });\n stampEscrowOutputRecords({\n prepared: input.prepared,\n proof,\n walletPublicKey: input.walletPublicKey,\n ...(recipient.escrowSend\n ? { escrowSendPrivateAddress: recipient.recipientPrivateAddressStpl1 }\n : {}),\n });\n return buildTransferFinalizeArtifacts({\n proof,\n context,\n ...sweepFinalizeStamp(input.prepared, recipient),\n });\n}\n\nfunction sweepArtifactStamp(artifacts: StellarPreparedOperation['transactArtifacts']) {\n return {\n ...(artifacts?.escrowSpendScalarHex\n ? { escrowSpendScalarHex: artifacts.escrowSpendScalarHex }\n : {}),\n ...(artifacts?.spendSource ? { preparedSpendSource: artifacts.spendSource } : {}),\n ...(artifacts?.escrowClaimantLimbs\n ? { escrowClaimantLimbs: artifacts.escrowClaimantLimbs }\n : {}),\n };\n}\n\nfunction sweepFinalizeStamp(\n prepared: StellarPreparedOperation,\n recipient: Awaited<ReturnType<typeof resolveTransferRecipientForExecute>>,\n) {\n const artifacts = prepared.transactArtifacts;\n const fromSend = recipient.escrowSend?.recipientStellarAddress?.trim();\n const escrowRecipient = fromSend || artifacts?.escrowRecipient?.trim();\n return {\n ...(recipient.escrowSend ? { escrowSend: true as const } : {}),\n ...(escrowRecipient ? { escrowRecipient } : {}),\n ...sweepArtifactStamp(artifacts),\n };\n}\n\nexport async function finalizeTransferAtExecute(\n prepared: StellarPreparedOperation,\n environment: StellarTransactEnvironment,\n) {\n const [primaryRecord] = prepared.consumedRecords;\n if (!primaryRecord?.owner.trim()) {\n throw new Error('Transfer execution record owner is missing.');\n }\n const walletPublicKey = primaryRecord.owner.trim();\n return runTransferFinalizeSteps({ prepared, environment, walletPublicKey });\n}\n","import type { WithdrawIntent } from '@arcanetech/privacy-sdk-core';\nimport type {\n StellarAddress,\n StellarAssetId,\n StellarPreparedOperation,\n} from '../../types.js';\nimport type { StellarTransactEnvironment } from '../environment/types.js';\nimport {\n ciphertextArtifactsFromProof,\n type ProofWithChange,\n} from '../pool/proof-types.js';\nimport type { PrivacyPoolService } from '../pool/service.js';\nimport { serializeEphemeralKeyString } from '../encoding/ephemeral-key.js';\nimport {\n buildSpendProofContextAtExecute,\n readCoinEphemeralForRecord,\n} from './spend-proof-context.js';\nimport { finalizeTransferAtExecute } from './transfer-finalize.js';\n\nfunction enrichWithdrawOutputRecords(\n prepared: StellarPreparedOperation,\n proof: ProofWithChange,\n): void {\n if (!proof.changeCoin || prepared.outputRecords.length === 0) {\n return;\n }\n const changeCoin = proof.changeCoin;\n prepared.outputRecords = prepared.outputRecords.map((record) => ({\n ...record,\n id: changeCoin.commitment_hex,\n commitmentHex: changeCoin.commitment_hex,\n coinNote: changeCoin.coin,\n depositScalarHex: changeCoin.depositScalarHex,\n precommitementHex: changeCoin.precommitementHex,\n }));\n}\n\nfunction buildWithdrawFinalizeArtifacts(\n proof: ProofWithChange,\n context: Awaited<ReturnType<typeof buildSpendProofContextAtExecute>>,\n) {\n return {\n proofHex: proof.proof_hex,\n publicHex: proof.public_hex,\n ...ciphertextArtifactsFromProof(proof),\n applicationIdsPlaintext: proof.applicationIdsPlaintext,\n tokenAddress: context.tokenAddress,\n walletPublicKey: context.walletPublicKey,\n executeFinalizeRequired: false,\n };\n}\n\nasync function finalizeSingleWithdrawAtExecute(\n prepared: StellarPreparedOperation,\n environment: StellarTransactEnvironment,\n poolService: PrivacyPoolService,\n withdrawFrom: string,\n) {\n const context = await buildSpendProofContextAtExecute({\n prepared,\n environment,\n recipientPrivateAddressStpl1: withdrawFrom,\n });\n const changeStroops = BigInt(context.coin.value) - prepared.intent.amount;\n const proof = await poolService.prepareWithdrawTransactProof({\n coin: context.coin,\n state: { commitments: context.commitments },\n destinationStellarAddress: prepared.intent.to,\n privKeyScalarHex: context.senderPrivKeyScalarHex,\n depositorEphemeralKey: serializeEphemeralKeyString({\n xHex: context.ephemeral.xHex,\n yHex: context.ephemeral.yHex,\n }),\n withdrawAmountStroops: prepared.intent.amount,\n changePrivateAddressStpl1: changeStroops > 0n ? withdrawFrom : undefined,\n tokenAddress: context.tokenAddress,\n });\n enrichWithdrawOutputRecords(prepared, proof);\n return buildWithdrawFinalizeArtifacts(proof, context);\n}\n\nasync function finalizeDualWithdrawAtExecute(\n prepared: StellarPreparedOperation,\n environment: StellarTransactEnvironment,\n poolService: PrivacyPoolService,\n withdrawFrom: string,\n) {\n const [, secondaryRecord] = prepared.consumedRecords;\n if (!secondaryRecord) {\n throw new Error('Dual withdraw execution requires two private input records.');\n }\n const context = await buildSpendProofContextAtExecute({\n prepared,\n environment,\n recipientPrivateAddressStpl1: withdrawFrom,\n });\n const secondary = await readCoinEphemeralForRecord({\n record: secondaryRecord,\n environment,\n walletPublicKey: context.walletPublicKey,\n commitments: context.commitments,\n });\n const totalNotes = BigInt(context.coin.value) + BigInt(secondary.coin.value);\n const changeStroops = totalNotes - prepared.intent.amount;\n const proof = await poolService.prepareWithdrawTransactProofDual({\n coinA: context.coin,\n coinB: secondary.coin,\n state: { commitments: context.commitments },\n destinationStellarAddress: prepared.intent.to,\n privKeyScalarHex: context.senderPrivKeyScalarHex,\n depositorEphemeralAKey: serializeEphemeralKeyString({\n xHex: context.ephemeral.xHex,\n yHex: context.ephemeral.yHex,\n }),\n depositorEphemeralBKey: serializeEphemeralKeyString({\n xHex: secondary.ephemeral.xHex,\n yHex: secondary.ephemeral.yHex,\n }),\n withdrawAmountStroops: prepared.intent.amount,\n changePrivateAddressStpl1: changeStroops > 0n ? withdrawFrom : undefined,\n tokenAddress: context.tokenAddress,\n });\n enrichWithdrawOutputRecords(prepared, proof);\n return buildWithdrawFinalizeArtifacts(proof, context);\n}\n\nasync function finalizeWithdrawAtExecute(\n prepared: StellarPreparedOperation,\n environment: StellarTransactEnvironment,\n poolService: PrivacyPoolService,\n) {\n if (prepared.kind !== 'withdraw') {\n throw new Error('Withdraw finalize requires a withdraw operation.');\n }\n const withdrawIntent = prepared.intent as WithdrawIntent<\n StellarAddress,\n StellarAssetId,\n bigint\n >;\n const withdrawFrom = withdrawIntent.from;\n const recordCount = prepared.consumedRecords.length;\n if (recordCount === 1) {\n return finalizeSingleWithdrawAtExecute(\n prepared,\n environment,\n poolService,\n withdrawFrom,\n );\n }\n if (recordCount === 2) {\n return finalizeDualWithdrawAtExecute(\n prepared,\n environment,\n poolService,\n withdrawFrom,\n );\n }\n throw new Error('Confidential withdraw execution supports at most two input notes.');\n}\n\nexport async function finalizeSpendOperationAtExecute(\n prepared: StellarPreparedOperation,\n environment: StellarTransactEnvironment,\n poolService: PrivacyPoolService,\n): Promise<StellarPreparedOperation> {\n if (prepared.kind !== 'transfer' && prepared.kind !== 'withdraw') {\n return prepared;\n }\n if (prepared.transactArtifacts?.proofHex) {\n return prepared;\n }\n const artifacts =\n prepared.kind === 'transfer'\n ? await finalizeTransferAtExecute(prepared, environment)\n : await finalizeWithdrawAtExecute(prepared, environment, poolService);\n return {\n ...prepared,\n transactArtifacts: {\n ...prepared.transactArtifacts,\n ...artifacts,\n },\n };\n}\n","import {\n layoutForKnownNonce,\n zeroBindingTagsInPublicSignals,\n type InspectKytPassageApproved,\n} from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport { resolvePoolApplicationId } from '../../audit/parameters.js';\nimport type { KytApplicationIdHints } from '../../pool/proof-types.js';\nimport { KytInspectError, parseKytReasonCode } from '../inspect-error.js';\nimport type { StellarTransactEnvironment } from '../../environment/types.js';\nimport { fetchCurrentLedger } from './poll.js';\nimport { registerKytPassage } from './submit.js';\nimport { resolveZkConfigNonce } from '../../environment/zk-config-nonce.js';\nimport { uniformApplicationIdHints } from '../../zk/slots.js';\n\ntype KytInspectResponse =\n | InspectKytPassageApproved\n | {\n status: 'rejected' | 'needs_review';\n reasonCode?: string;\n decisionId?: string;\n };\n\nexport interface DecryptedKytAuditSlot {\n slot: number;\n decryptOk: boolean;\n auditTagValid: boolean;\n noteAuditPublicKey?: [string, string];\n expectedAuditPublicKey?: [string, string];\n plaintext?: string[];\n}\n\nexport interface RequestKytPassageForPoolInteractionInput {\n owner: string;\n poolContract: string;\n proofHex: string;\n publicHex: string;\n ciphertextHex?: string;\n outputNoteEphemeralScalars?: string[];\n decryptedAuditSlots?: DecryptedKytAuditSlot[];\n applicationIdsPlaintext?: KytApplicationIdHints;\n networkPassphrase: string;\n sorobanRpcUrl: string;\n transactEnvironment: StellarTransactEnvironment;\n}\n\nfunction buildApplicationIdHints(\n applicationId: string,\n nAuditSlots: number,\n): KytApplicationIdHints {\n return uniformApplicationIdHints(applicationId, nAuditSlots);\n}\n\nfunction buildNonce(): string {\n return globalThis.crypto?.randomUUID?.() ?? `${Date.now()}`;\n}\n\nfunction kytJsonReplacer(_key: string, value: unknown): unknown {\n if (typeof value === 'bigint') {\n return value.toString();\n }\n return value;\n}\n\nasync function parseInspectResponse(response: Response): Promise<KytInspectResponse> {\n const body = (await response.json()) as KytInspectResponse;\n if (!response.ok) {\n throw new Error(`KYT inspect failed: ${JSON.stringify(body)}`);\n }\n return body;\n}\n\nfunction throwKytInspectRejected(\n body: Exclude<KytInspectResponse, InspectKytPassageApproved>,\n): never {\n const reasonCode = body.reasonCode ?? body.status;\n const parsed = parseKytReasonCode(reasonCode);\n throw new KytInspectError({\n message: reasonCode,\n reasonCode,\n ...(body.decisionId ? { decisionId: body.decisionId } : {}),\n ...(parsed.address ? { detailAddress: parsed.address } : {}),\n });\n}\n\nfunction inspectRequestHeaders(inspectAuthorization?: string): Record<string, string> {\n const token = inspectAuthorization?.trim();\n return {\n 'content-type': 'application/json',\n ...(token ? { authorization: `Bearer ${token}` } : {}),\n };\n}\n\nasync function postKytInspect(\n input: RequestKytPassageForPoolInteractionInput,\n applicationIdsPlaintext: KytApplicationIdHints,\n zkConfigNonce: bigint,\n currentLedger: number,\n): Promise<KytInspectResponse> {\n const response = await fetch(\n `${input.transactEnvironment.kyt.apiBaseUrl}/kyt/passages/inspect`,\n {\n method: 'POST',\n headers: inspectRequestHeaders(\n input.transactEnvironment.kyt.inspectAuthorization,\n ),\n body: JSON.stringify(\n {\n owner: input.owner,\n poolContract: input.poolContract,\n kytRegistry: input.transactEnvironment.kyt.kytPassageRegistryContract,\n proofBytes: input.proofHex,\n publicSignalsBytes: zeroBindingTagsInPublicSignals(\n input.publicHex,\n zkConfigNonce,\n ).toString('hex'),\n applicationIdsPlaintext,\n decryptedAuditSlots: input.decryptedAuditSlots,\n nonce: buildNonce(),\n zkConfigNonce,\n currentLedger,\n ...(input.ciphertextHex ? { ciphertextBytes: input.ciphertextHex } : {}),\n ...(input.outputNoteEphemeralScalars\n ? { outputNoteEphemeralScalars: input.outputNoteEphemeralScalars }\n : {}),\n },\n kytJsonReplacer,\n ),\n },\n );\n return parseInspectResponse(response);\n}\n\nexport async function requestKytPassageForPoolInteraction(\n input: RequestKytPassageForPoolInteractionInput,\n): Promise<InspectKytPassageApproved> {\n const applicationId = resolvePoolApplicationId(\n input.transactEnvironment.network.applicationId,\n );\n const zkConfigNonce = resolveZkConfigNonce(input.transactEnvironment);\n const applicationIdsPlaintext =\n input.applicationIdsPlaintext ??\n buildApplicationIdHints(\n applicationId,\n layoutForKnownNonce(zkConfigNonce).nAuditSlots,\n );\n const currentLedger = await fetchCurrentLedger(input.sorobanRpcUrl);\n const body = await postKytInspect(\n input,\n applicationIdsPlaintext,\n zkConfigNonce,\n currentLedger,\n );\n if (body.status !== 'approved') {\n throwKytInspectRejected(body);\n }\n if (input.transactEnvironment.kyt.registerPassageOnChain) {\n await registerKytPassage({\n approval: body,\n owner: input.owner,\n networkPassphrase: input.networkPassphrase,\n sorobanRpcUrl: input.sorobanRpcUrl,\n transactEnvironment: input.transactEnvironment,\n });\n }\n return body;\n}\n","export class KytInspectError extends Error {\n readonly reasonCode: string;\n readonly decisionId?: string;\n readonly detailAddress?: string;\n\n constructor(parameters: {\n message: string;\n reasonCode: string;\n decisionId?: string;\n detailAddress?: string;\n }) {\n super(parameters.message);\n this.name = 'KytInspectError';\n this.reasonCode = parameters.reasonCode;\n if (parameters.decisionId !== undefined) {\n this.decisionId = parameters.decisionId;\n }\n if (parameters.detailAddress !== undefined) {\n this.detailAddress = parameters.detailAddress;\n }\n }\n}\n\nexport function parseKytReasonCode(reasonCode: string): {\n code: string;\n address?: string;\n} {\n const separatorIndex = reasonCode.indexOf(':');\n if (separatorIndex === -1) {\n return { code: reasonCode };\n }\n return {\n code: reasonCode.slice(0, separatorIndex),\n address: reasonCode.slice(separatorIndex + 1),\n };\n}\n","import { rpc } from '@stellar/stellar-sdk';\n\nconst KYT_REGISTER_MAX_POLLS = 60;\nconst KYT_REGISTER_POLL_INTERVAL_MS = 1000;\n\ntype LatestLedgerRpcResponse = {\n result?: {\n sequence?: number | string;\n latestLedger?: number | string;\n };\n error?: {\n message?: string;\n };\n};\n\nfunction parseLedgerSequence(value: number | string | undefined): number | undefined {\n if (typeof value === 'number' && Number.isSafeInteger(value) && value >= 0) {\n return value;\n }\n if (typeof value === 'string' && value.trim().length > 0) {\n const parsed = Number(value);\n if (Number.isSafeInteger(parsed) && parsed >= 0) {\n return parsed;\n }\n }\n return undefined;\n}\n\nexport async function fetchCurrentLedger(sorobanRpcUrl: string): Promise<number> {\n const response = await fetch(sorobanRpcUrl, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: 1,\n method: 'getLatestLedger',\n }),\n });\n const body = (await response.json()) as LatestLedgerRpcResponse;\n if (!response.ok || body.error) {\n const details = body.error?.message ?? response.statusText;\n throw new Error(`Failed to fetch current ledger from Soroban RPC: ${details}`);\n }\n const sequence =\n parseLedgerSequence(body.result?.sequence) ??\n parseLedgerSequence(body.result?.latestLedger);\n if (sequence === undefined) {\n throw new Error('Failed to fetch current ledger from Soroban RPC: invalid payload');\n }\n return sequence;\n}\n\nexport async function waitForKytRegistration(parameters: {\n server: rpc.Server;\n hash: string;\n}): Promise<void> {\n for (let attempt = 0; attempt < KYT_REGISTER_MAX_POLLS; attempt += 1) {\n const response = await parameters.server.getTransaction(parameters.hash);\n if (response.status === 'SUCCESS') {\n return;\n }\n if (response.status === 'FAILED') {\n throw new Error('KYT passage registration failed on-chain');\n }\n await new Promise((resolve) => {\n setTimeout(resolve, KYT_REGISTER_POLL_INTERVAL_MS);\n });\n }\n throw new Error('KYT passage registration was not confirmed in time');\n}\n","import type { InspectKytPassageApproved } from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport { Buffer } from 'buffer';\nimport { Operation, TransactionBuilder, rpc, xdr } from '@stellar/stellar-sdk';\nimport type { StellarTransactEnvironment } from '../../environment/types.js';\nimport { waitForKytRegistration } from './poll.js';\n\nconst KYT_REGISTER_FEE_STROOPS = '1000000';\nconst KYT_REGISTER_TIMEOUT_SECONDS = 300;\n\nfunction passageIdToScValue(passageId: string): xdr.ScVal {\n return xdr.ScVal.scvBytes(Buffer.from(passageId.replace(/^0x/, ''), 'hex'));\n}\n\nexport function approvalSignatureToBytes(signature: string): Buffer {\n const clean = signature.trim();\n return /^(0x)?[0-9a-fA-F]{128}$/.test(clean)\n ? Buffer.from(clean.replace(/^0x/i, ''), 'hex')\n : Buffer.from(clean, 'base64');\n}\n\nfunction signatureToScValue(signature: string): xdr.ScVal {\n const bytes = approvalSignatureToBytes(signature);\n return xdr.ScVal.scvBytes(bytes);\n}\n\nexport async function registerKytPassage(parameters: {\n approval: InspectKytPassageApproved;\n owner: string;\n networkPassphrase: string;\n sorobanRpcUrl: string;\n transactEnvironment: StellarTransactEnvironment;\n}): Promise<void> {\n const signTransaction = parameters.transactEnvironment.signTransaction;\n if (!signTransaction) {\n throw new Error(\n 'KYT passage registration requires a wallet signTransaction adapter.',\n );\n }\n const kytRegistry = parameters.transactEnvironment.kyt.kytPassageRegistryContract;\n const server = new rpc.Server(parameters.sorobanRpcUrl, { allowHttp: true });\n const sourceAccount = await server.getAccount(parameters.owner);\n const transaction = new TransactionBuilder(sourceAccount, {\n fee: KYT_REGISTER_FEE_STROOPS,\n networkPassphrase: parameters.networkPassphrase,\n })\n .addOperation(\n Operation.invokeContractFunction({\n contract: kytRegistry,\n function: 'register_passage',\n args: [\n passageIdToScValue(parameters.approval.passageId),\n xdr.ScVal.scvU32(parameters.approval.expiresAtLedger),\n signatureToScValue(parameters.approval.signature),\n ],\n }),\n )\n .setTimeout(KYT_REGISTER_TIMEOUT_SECONDS)\n .build();\n const preparedTransaction = await server.prepareTransaction(transaction);\n const { signedTxXdr } = await signTransaction({\n xdr: preparedTransaction.toXDR(),\n networkPassphrase: parameters.networkPassphrase,\n address: parameters.owner,\n });\n const signedTransaction = TransactionBuilder.fromXDR(\n signedTxXdr,\n parameters.networkPassphrase,\n );\n const result = await server.sendTransaction(signedTransaction);\n const status = String(result.status);\n if (status !== 'PENDING' && status !== 'SUCCESS') {\n throw new Error(`KYT passage registration submit failed: ${status}`);\n }\n await waitForKytRegistration({ server, hash: result.hash });\n}\n","import {\n Address,\n Operation,\n SorobanDataBuilder,\n TransactionBuilder,\n rpc,\n xdr,\n} from '@stellar/stellar-sdk';\nimport type { StellarSignTransaction } from '../../contracts/signing.js';\n\nconst ZK_CONFIG_TTL_THRESHOLD_LEDGERS = 100_000;\nconst ZK_CONFIG_TTL_EXTEND_TO_LEDGERS = 500_000;\nconst EXTEND_TTL_FEE_STROOPS = '1000000';\nconst EXTEND_TTL_TIMEOUT_SECONDS = 300;\nconst EXTEND_TTL_MAX_POLLS = 60;\nconst EXTEND_TTL_POLL_INTERVAL_MS = 1000;\n\nasync function waitForExtendFootprintTtlConfirmation(parameters: {\n server: rpc.Server;\n hash: string;\n}): Promise<void> {\n for (let attempt = 0; attempt < EXTEND_TTL_MAX_POLLS; attempt += 1) {\n const response = await parameters.server.getTransaction(parameters.hash);\n if (response.status === 'SUCCESS') {\n return;\n }\n if (response.status === 'FAILED') {\n throw new Error('ZK config TTL extension failed on-chain');\n }\n await new Promise((resolve) => {\n setTimeout(resolve, EXTEND_TTL_POLL_INTERVAL_MS);\n });\n }\n throw new Error('ZK config TTL extension was not confirmed in time');\n}\n\nfunction zkConfigLedgerKey(contractId: string, nonce: bigint): xdr.LedgerKey {\n const configKeyScValue = xdr.ScVal.scvVec([\n xdr.ScVal.scvSymbol('Config'),\n xdr.ScVal.scvU64(xdr.Uint64.fromString(nonce.toString())),\n ]);\n return xdr.LedgerKey.contractData(\n new xdr.LedgerKeyContractData({\n contract: new Address(contractId).toScAddress(),\n key: configKeyScValue,\n durability: xdr.ContractDataDurability.persistent(),\n }),\n );\n}\n\nasync function needsTtlExtension(parameters: {\n server: rpc.Server;\n ledgerKey: xdr.LedgerKey;\n}): Promise<boolean> {\n const [entriesResponse, latestLedger] = await Promise.all([\n parameters.server.getLedgerEntries(parameters.ledgerKey),\n parameters.server.getLatestLedger(),\n ]);\n const entry = entriesResponse.entries.at(0);\n if (!entry || entry.liveUntilLedgerSeq === undefined) {\n return false;\n }\n const remainingLedgers = entry.liveUntilLedgerSeq - latestLedger.sequence;\n return remainingLedgers < ZK_CONFIG_TTL_THRESHOLD_LEDGERS;\n}\n\nasync function submitExtendFootprintTtlTransaction(parameters: {\n server: rpc.Server;\n ledgerKey: xdr.LedgerKey;\n networkPassphrase: string;\n sourcePublicKey: string;\n signTransaction: StellarSignTransaction;\n}): Promise<void> {\n const sourceAccount = await parameters.server.getAccount(parameters.sourcePublicKey);\n const transaction = new TransactionBuilder(sourceAccount, {\n fee: EXTEND_TTL_FEE_STROOPS,\n networkPassphrase: parameters.networkPassphrase,\n })\n .addOperation(\n Operation.extendFootprintTtl({ extendTo: ZK_CONFIG_TTL_EXTEND_TO_LEDGERS }),\n )\n .setSorobanData(\n new SorobanDataBuilder().setReadOnly([parameters.ledgerKey]).build(),\n )\n .setTimeout(EXTEND_TTL_TIMEOUT_SECONDS)\n .build();\n const preparedTransaction = await parameters.server.prepareTransaction(transaction);\n const { signedTxXdr } = await parameters.signTransaction({\n xdr: preparedTransaction.toXDR(),\n networkPassphrase: parameters.networkPassphrase,\n address: parameters.sourcePublicKey,\n });\n const signedTransaction = TransactionBuilder.fromXDR(\n signedTxXdr,\n parameters.networkPassphrase,\n );\n const result = await parameters.server.sendTransaction(signedTransaction);\n const status = String(result.status);\n if (status !== 'PENDING' && status !== 'SUCCESS') {\n throw new Error(`ZK config TTL extension submit failed: ${status}`);\n }\n await waitForExtendFootprintTtlConfirmation({\n server: parameters.server,\n hash: result.hash,\n });\n}\n\n/**\n * Checks the remaining TTL of the pool's per-nonce `ZkConfig` persistent\n * ledger entry and, if it is below the extend threshold, submits a\n * standalone `extendFootprintTtl` transaction to bump it before the main\n * `transact` call is sent. No-ops when the entry does not exist yet (it\n * will be created and TTL-bumped by `add_zk_config` instead) or when no\n * `signTransaction` adapter is configured.\n */\nexport async function extendZkConfigTtlIfNeeded(parameters: {\n sorobanRpcUrl: string;\n networkPassphrase: string;\n contractId: string;\n nonce: bigint;\n sourcePublicKey: string;\n signTransaction: StellarSignTransaction | undefined;\n}): Promise<void> {\n if (!parameters.signTransaction) {\n return;\n }\n const server = new rpc.Server(parameters.sorobanRpcUrl, { allowHttp: true });\n const ledgerKey = zkConfigLedgerKey(parameters.contractId, parameters.nonce);\n if (!(await needsTtlExtension({ server, ledgerKey }))) {\n return;\n }\n await submitExtendFootprintTtlTransaction({\n server,\n ledgerKey,\n networkPassphrase: parameters.networkPassphrase,\n sourcePublicKey: parameters.sourcePublicKey,\n signTransaction: parameters.signTransaction,\n });\n}\n","import { approvalSignatureToBytes } from '../kyt/passage-inspect.js';\nimport { runTtlPreflight } from './ttl-preflight.js';\nimport { extendZkConfigTtlIfNeeded } from './zk-config-ttl.js';\nimport type { PoolTransactClient } from '../pool/types.js';\nimport type { InspectKytPassageApproved } from '@arcanetech/stellar-privacy-pool-zk-sdk';\nimport type { StellarTransactEnvironment } from '../environment/types.js';\nimport { Buffer } from 'buffer';\n\nexport async function submitPoolTransact(parameters: {\n contractClient: PoolTransactClient;\n contractId: string;\n from: string;\n nonce: bigint;\n proofHex: string;\n publicHex: string;\n ciphertextHex?: string;\n approval: InspectKytPassageApproved;\n networkPassphrase: string;\n sorobanRpcUrl: string;\n transactEnvironment: StellarTransactEnvironment;\n}): Promise<string> {\n await extendZkConfigTtlIfNeeded({\n sorobanRpcUrl: parameters.sorobanRpcUrl,\n networkPassphrase: parameters.networkPassphrase,\n contractId: parameters.contractId,\n nonce: parameters.nonce,\n sourcePublicKey: parameters.from,\n signTransaction: parameters.transactEnvironment.signTransaction,\n });\n const assembledTransaction = await parameters.contractClient.transact({\n from: parameters.from,\n nonce: parameters.nonce,\n proof_bytes: Buffer.from(parameters.proofHex.replace(/^0x/iu, ''), 'hex'),\n pub_signals_bytes: Buffer.from(parameters.publicHex.replace(/^0x/iu, ''), 'hex'),\n ciphertext_bytes: Buffer.from(\n (parameters.ciphertextHex ?? '').replace(/^0x/iu, ''),\n 'hex',\n ),\n kyt_authorization: {\n expiration_ledger: parameters.approval.expiresAtLedger,\n signature: approvalSignatureToBytes(parameters.approval.signature),\n },\n });\n await runTtlPreflight(assembledTransaction);\n const sentTransaction = await assembledTransaction.signAndSend();\n const transactionHash = sentTransaction.sendTransactionResponse?.hash ?? '';\n if (!transactionHash) {\n throw new Error('Transaction failed');\n }\n return transactionHash;\n}\n","import { readPoolClientFactory } from '../../contracts/contract-context.js';\nimport { requestKytPassageForPoolInteraction } from '../kyt/passage-inspect.js';\nimport type { KytApplicationIdHints } from '../pool/proof-types.js';\nimport { submitPoolTransact } from './pool-transact.js';\nimport { resolveZkConfigNonce } from '../environment/zk-config-nonce.js';\nimport type { StellarTransactEnvironment } from '../environment/types.js';\n\nexport interface SubmitSorobanConfidentialTransferInput {\n contractId: string;\n walletPublicKey: string;\n proofHex: string;\n publicHex: string;\n ciphertextHex?: string;\n outputNoteEphemeralScalars?: string[];\n applicationIdsPlaintext?: KytApplicationIdHints;\n networkPassphrase: string;\n sorobanRpcUrl: string;\n transactEnvironment: StellarTransactEnvironment;\n}\n\nexport async function submitSorobanConfidentialTransfer(\n input: SubmitSorobanConfidentialTransferInput,\n): Promise<string> {\n const poolClient = readPoolClientFactory(input.transactEnvironment)({\n contractId: input.contractId,\n walletPublicKey: input.walletPublicKey,\n networkPassphrase: input.networkPassphrase,\n sorobanRpcUrl: input.sorobanRpcUrl,\n });\n const approval = await requestKytPassageForPoolInteraction({\n owner: input.walletPublicKey,\n poolContract: input.contractId,\n proofHex: input.proofHex,\n publicHex: input.publicHex,\n ...(input.ciphertextHex ? { ciphertextHex: input.ciphertextHex } : {}),\n ...(input.outputNoteEphemeralScalars\n ? { outputNoteEphemeralScalars: input.outputNoteEphemeralScalars }\n : {}),\n ...(input.applicationIdsPlaintext\n ? { applicationIdsPlaintext: input.applicationIdsPlaintext }\n : {}),\n networkPassphrase: input.networkPassphrase,\n sorobanRpcUrl: input.sorobanRpcUrl,\n transactEnvironment: input.transactEnvironment,\n });\n return submitPoolTransact({\n contractClient: poolClient,\n contractId: input.contractId,\n from: input.walletPublicKey,\n nonce: resolveZkConfigNonce(input.transactEnvironment),\n proofHex: input.proofHex,\n publicHex: input.publicHex,\n ...(input.ciphertextHex ? { ciphertextHex: input.ciphertextHex } : {}),\n approval,\n networkPassphrase: input.networkPassphrase,\n sorobanRpcUrl: input.sorobanRpcUrl,\n transactEnvironment: input.transactEnvironment,\n });\n}\n","import type { StellarPreparedOperation } from '../../types.js';\nimport { readPoolClientFactory } from '../../contracts/contract-context.js';\nimport type { StellarTransactEnvironment } from '../environment/types.js';\nimport type { PrivacyPoolService } from '../pool/service.js';\nimport { finalizeSpendOperationAtExecute } from './execute.js';\nimport { submitSorobanConfidentialTransfer } from '../submit/soroban-confidential-transfer.js';\nimport { requestKytPassageForPoolInteraction } from '../kyt/passage-inspect.js';\nimport { submitPoolTransact } from '../submit/pool-transact.js';\nimport { resolveZkConfigNonce } from '../environment/zk-config-nonce.js';\n\nfunction optionalInspectCiphertext(\n artifacts: NonNullable<StellarPreparedOperation['transactArtifacts']>,\n): Pick<\n NonNullable<StellarPreparedOperation['transactArtifacts']>,\n 'ciphertextHex' | 'outputNoteEphemeralScalars' | 'applicationIdsPlaintext'\n> {\n return {\n ...(artifacts.ciphertextHex ? { ciphertextHex: artifacts.ciphertextHex } : {}),\n ...(artifacts.outputNoteEphemeralScalars\n ? { outputNoteEphemeralScalars: artifacts.outputNoteEphemeralScalars }\n : {}),\n ...(artifacts.applicationIdsPlaintext\n ? { applicationIdsPlaintext: artifacts.applicationIdsPlaintext }\n : {}),\n };\n}\n\nasync function submitPreparedDeposit(\n prepared: StellarPreparedOperation,\n environment: StellarTransactEnvironment,\n): Promise<string> {\n const artifacts = prepared.transactArtifacts;\n const outputRecord = prepared.outputRecords[0];\n if (\n !artifacts?.proofHex ||\n !artifacts.publicHex ||\n !artifacts.walletPublicKey ||\n !artifacts.depositScalarHex ||\n !outputRecord?.coinNote\n ) {\n throw new Error('Prepared deposit is missing transact artifacts.');\n }\n const poolClient = readPoolClientFactory(environment)({\n contractId: environment.network.poolContract,\n walletPublicKey: artifacts.walletPublicKey,\n networkPassphrase: environment.network.networkPassphrase,\n sorobanRpcUrl: environment.network.rpcUrl,\n });\n const approval = await requestKytPassageForPoolInteraction({\n owner: artifacts.walletPublicKey,\n poolContract: environment.network.poolContract,\n proofHex: artifacts.proofHex,\n publicHex: artifacts.publicHex,\n ...optionalInspectCiphertext(artifacts),\n networkPassphrase: environment.network.networkPassphrase,\n sorobanRpcUrl: environment.network.rpcUrl,\n transactEnvironment: environment,\n });\n return submitPoolTransact({\n contractClient: poolClient,\n contractId: environment.network.poolContract,\n from: artifacts.walletPublicKey,\n nonce: resolveZkConfigNonce(environment),\n proofHex: artifacts.proofHex,\n publicHex: artifacts.publicHex,\n ...(artifacts.ciphertextHex ? { ciphertextHex: artifacts.ciphertextHex } : {}),\n approval,\n networkPassphrase: environment.network.networkPassphrase,\n sorobanRpcUrl: environment.network.rpcUrl,\n transactEnvironment: environment,\n });\n}\n\nasync function submitPreparedPoolTransact(\n prepared: StellarPreparedOperation,\n environment: StellarTransactEnvironment,\n): Promise<string> {\n const artifacts = prepared.transactArtifacts;\n if (!artifacts?.proofHex || !artifacts.publicHex || !artifacts.walletPublicKey) {\n throw new Error('Prepared operation is missing transact artifacts.');\n }\n return submitSorobanConfidentialTransfer({\n contractId: environment.network.poolContract,\n walletPublicKey: artifacts.walletPublicKey,\n proofHex: artifacts.proofHex,\n publicHex: artifacts.publicHex,\n ...optionalInspectCiphertext(artifacts),\n networkPassphrase: environment.network.networkPassphrase,\n sorobanRpcUrl: environment.network.rpcUrl,\n transactEnvironment: environment,\n });\n}\n\nexport async function submitPreparedOperation(\n prepared: StellarPreparedOperation,\n environment: StellarTransactEnvironment,\n poolService: PrivacyPoolService,\n): Promise<string> {\n const finalized =\n prepared.kind === 'deposit'\n ? prepared\n : await finalizeSpendOperationAtExecute(prepared, environment, poolService);\n if (finalized.kind === 'deposit') {\n return submitPreparedDeposit(finalized, environment);\n }\n return submitPreparedPoolTransact(finalized, environment);\n}\n","import type {\n StellarOperationReceipt,\n StellarPreparedOperation,\n StellarSubmissionPayload,\n StellarTransactEngine,\n} from '../../types.js';\nimport type { StellarTransactEnvironment } from '../environment/types.js';\nimport type { PrivacyPoolService } from '../pool/service.js';\nimport {\n prepareDepositOperation,\n prepareTransferOperation,\n prepareWithdrawOperation,\n} from './prepare/index.js';\nimport { submitPreparedOperation } from './submit.js';\n\nexport function createBrowserStellarTransactEngine(input: {\n environment: StellarTransactEnvironment;\n poolService: PrivacyPoolService;\n}): StellarTransactEngine {\n const { environment, poolService } = input;\n return {\n prepare: async (prepared) => {\n if (prepared.kind === 'deposit') {\n return prepareDepositOperation(prepared, environment, poolService);\n }\n if (prepared.kind === 'transfer') {\n return prepareTransferOperation(prepared, environment);\n }\n return prepareWithdrawOperation(prepared, environment);\n },\n submit: async (\n prepared: StellarPreparedOperation,\n _signedPayload: StellarSubmissionPayload,\n ): Promise<StellarOperationReceipt> => {\n const txHash = await submitPreparedOperation(prepared, environment, poolService);\n return {\n operationId: txHash,\n confirmed: true,\n };\n },\n };\n}\n","import { createRejectedOperation } from '@arcanetech/privacy-sdk-core';\nimport {\n createStellarPrivacyClientFromResolvedConfig,\n resolveStellarPrivacyClientConfig,\n} from './resolve-config.js';\nimport type { StellarPrivacyClient } from './client.js';\nimport { createDefaultTransactEngine } from '../transact/engine/default-factory.js';\nimport type { StellarBrowserPrivacyClientConfig } from '../types.js';\n\nexport type CreateStellarPrivacyClientResult =\n StellarPrivacyClient | ReturnType<typeof createRejectedOperation>;\n\nexport function isStellarPrivacyClient(\n result: CreateStellarPrivacyClientResult,\n): result is StellarPrivacyClient {\n return !('status' in result);\n}\n\nexport async function createStellarPrivacyClient(\n config: StellarBrowserPrivacyClientConfig,\n): Promise<CreateStellarPrivacyClientResult> {\n const resolved = await resolveStellarPrivacyClientConfig(config, async (input) => {\n if (input.transactEngine !== undefined) {\n return input.transactEngine;\n }\n return createDefaultTransactEngine(input.assets, input.transactEnvironment);\n });\n\n if (!resolved.ok) {\n return resolved.result;\n }\n\n return createStellarPrivacyClientFromResolvedConfig(resolved.config);\n}\n\nexport { isPreparedOperation } from '@arcanetech/privacy-sdk-core';\n\nexport type {\n StellarBrowserPrivacyClientConfig,\n StellarPrivacyClientConfig,\n} from '../types.js';\n"],"mappings":"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","names":["unsupportedDisclosureError","unsupportedDisclosureError","executionError","insufficientStateError","executionError","Buffer","PrivacyPoolSDK","scalarHexToFrDecimal","Buffer","withdrawObjectFromMerkleWitness","Buffer","StrKey","Buffer","Buffer","StrKey","Buffer","StrKey","Buffer","DECIMAL_RADIX","withdrawObjectFromMerkleWitness","BundledZkCircuit","PrivacyPoolSDK","scalarHexToFrDecimal","Buffer","Buffer","resolveTokenContractId","executionError","insufficientStateError","registered","z","z","z","z","z","z","z","z","z","z","z","z","z","z","registered","z","z","z","z","isMissingStatePathError","registered","Buffer","Buffer","StrKey","Buffer","StrKey","ed25519PubkeyPayloadHexToWithdrawFrDecimals","COORDINATE_HEX_LENGTH","StrKey","Buffer","ed25519PubkeyPayloadHexToWithdrawFrDecimals","StrKey","StrKey","PrivacyPoolSDK","resolveTokenContractId","StrKey","resolveTokenContractId","prepareTransferOperation","resolveSenderPrivKeyScalarHex","resolveTokenContractId","confidentialEscrowFields","Buffer","rpc","xdr","xdr","Buffer","rpc","buildApplicationIdHints","Address","Operation","TransactionBuilder","rpc","xdr","Buffer","submitPreparedOperation","prepareTransferOperation","submitPreparedOperation","PrivacyPoolSDK"]}
|