@layerzerolabs/test-utils-stellar 1.2.99 → 1.2.101

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.
@@ -1,4 +1,4 @@
1
- import { deployNativeSac, deployZroToken } from './TYAJMKGY.js';
1
+ import { deployNativeSac, deployZroToken } from './SU67PCBT.js';
2
2
  import { __name } from './VUOMXK5T.js';
3
3
  import { rpc, TransactionBuilder, BASE_FEE, Operation } from '@stellar/stellar-sdk';
4
4
  import { spawnSync } from 'child_process';
@@ -348,5 +348,5 @@ async function stopStellarLocalnet({ env, commandRunner = runDockerCommand }) {
348
348
  __name(stopStellarLocalnet, "stopStellarLocalnet");
349
349
 
350
350
  export { FUNDING_RETRY_INTERVAL_MS, STELLAR_LOCALNET_OWNER_LABEL, accountExists, assertDockerArgs, buildDockerContainerIdLookupArgs, buildDockerOwnershipLabelLookupArgs, buildDockerRemoveArgs, buildDockerRunArgs, fundAccount, fundAccountViaFriendbot, getDefaultStellarLocalnetImage, getNamedContainerRemovalPolicy, pauseBeforeFundingRetry, startStellarLocalnet, stopStellarLocalnet, waitForAccountOnRpc };
351
- //# sourceMappingURL=4ECTIPRV.js.map
352
- //# sourceMappingURL=4ECTIPRV.js.map
351
+ //# sourceMappingURL=ECVGEAZI.js.map
352
+ //# sourceMappingURL=ECVGEAZI.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/localnet.ts"],"names":["getDefaultStellarLocalnetImage","posix","join","getRegistry","getImageDirectory","CONTAINER_PORT","STELLAR_LOCALNET_OWNER_LABEL","STELLAR_LOCALNET_OWNER_LABEL_KEY","split","STARTUP_TIMEOUT_MS","REQUEST_TIMEOUT_MS","FUNDING_RETRY_INTERVAL_MS","DOCKER_NAME_RE","DOCKER_IMAGE_RE","DOCKER_COMMAND_ARG_RE","assertDockerArgs","env","test","CONTAINER_NAME","Error","JSON","stringify","Number","isInteger","HOST_PORT","DOCKER_IMAGE","undefined","arg","DOCKER_COMMAND","buildDockerRunArgs","dockerImage","image","buildDockerContainerIdLookupArgs","containerName","buildDockerOwnershipLabelLookupArgs","containerId","buildDockerRemoveArgs","getNamedContainerRemovalPolicy","ownerLabel","runDockerCommand","args","result","spawnSync","encoding","error","message","cause","status","stdout","stderr","runDockerOrThrow","runner","action","trim","removeOwnedContainerIfPresent","commandRunner","normalizedContainerId","policy","dockerRunLocalnet","startStellarLocalnet","console","log","waitForRpcHealth","fundAccountViaFriendbot","JUNK_WALLET","publicKey","fundTestAccounts","deployNativeSac","deployZroToken","err","stopStellarLocalnet","fundAccountQueue","Promise","resolve","fundAccount","then","fundAccountInternal","catch","MAX_RETRIES","lastError","attempt","transactionSubmitted","getDestinationAccount","server","rpc","Server","RPC_URL","allowHttp","accountId","getAccount","junkAccount","tx","TransactionBuilder","fee","BASE_FEE","networkPassphrase","NETWORK_PASSPHRASE","addOperation","Operation","createAccount","destination","startingBalance","setTimeout","build","sign","sendResult","sendTransaction","txResult","pollTransaction","hash","accountExists","String","pauseBeforeFundingRetry","maxAttempts","sleep","ms","intervalMs","startTime","Date","now","response","fetch","method","headers","body","jsonrpc","id","signal","AbortSignal","timeout","data","json","waitForAccountOnRpc","timeoutMs","friendbotUrl","encodeURIComponent","text","ok","includes","remainingMs","Math","max","alreadyFunded","DEFAULT_DEPLOYER","FUNDING_ATTEMPTS","ZRO_DISTRIBUTOR","EXECUTOR_ADMIN","CHAIN_B_DEPLOYER","attempts","warn"],"mappings":"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","file":"4ECTIPRV.js","sourcesContent":["import { BASE_FEE, Operation, rpc, TransactionBuilder } from '@stellar/stellar-sdk';\nimport { spawnSync } from 'node:child_process';\nimport { posix } from 'node:path';\n\nimport { getImageDirectory, getRegistry } from '@layerzerolabs/vm-tooling';\n\nimport { deployNativeSac, deployZroToken } from './deploy.js';\nimport type { StellarTestEnv } from './env.js';\n\n/**\n * The LayerZero Stellar localnet snapshot, pulled from the same registry as vm-tooling's images:\n * ECR in this repo, LayerZero's public mirror in the external repos, or `VM_TOOLING_REGISTRY` /\n * `VM_TOOLING_IMAGE_DIRECTORY` when both are set.\n */\nexport async function getDefaultStellarLocalnetImage(): Promise<string> {\n return posix.join(await getRegistry(), await getImageDirectory(), 'stellar:2026-03-02');\n}\n\nconst CONTAINER_PORT = 8000;\nexport const STELLAR_LOCALNET_OWNER_LABEL = 'com.layerzerolabs.test-utils-stellar=1';\nconst STELLAR_LOCALNET_OWNER_LABEL_KEY = STELLAR_LOCALNET_OWNER_LABEL.split('=')[0];\n\n// Timeout configuration (in milliseconds)\nconst STARTUP_TIMEOUT_MS = 120_000; // 2 minutes\nconst REQUEST_TIMEOUT_MS = 5_000;\nexport const FUNDING_RETRY_INTERVAL_MS = 2_000;\n\n/** Docker container names: alphanumeric start, then alnum / `_` / `.` / `-`. */\nconst DOCKER_NAME_RE = /^[a-zA-Z0-9][a-zA-Z0-9_.-]*$/;\nconst DOCKER_IMAGE_RE =\n /^(?!-)[a-z0-9][a-z0-9._/-]*(?::[a-zA-Z0-9][a-zA-Z0-9_.-]*)?(?:@[a-zA-Z0-9][a-zA-Z0-9_+.-]*:[a-fA-F0-9]{32,})?$/;\n/** Safe argv tokens for `docker run … IMAGE <args>` (flags / simple values only). */\nconst DOCKER_COMMAND_ARG_RE = /^(?:--)?[a-zA-Z0-9][a-zA-Z0-9._/=+-]*$/;\n\nexport interface DockerCommandResult {\n status: number;\n stdout: string;\n stderr: string;\n}\n\n/** Injectable so container lifecycle policy can be tested without a Docker daemon. */\nexport type DockerCommandRunner = (args: readonly string[]) => DockerCommandResult;\n\nexport interface LocalnetLifecycleOptions {\n env: StellarTestEnv;\n commandRunner?: DockerCommandRunner;\n}\n\nexport type NamedContainerRemovalPolicy = 'absent' | 'remove' | 'reject';\n\nexport function assertDockerArgs(env: StellarTestEnv): void {\n if (!DOCKER_NAME_RE.test(env.CONTAINER_NAME)) {\n throw new Error(`Invalid docker container name: ${JSON.stringify(env.CONTAINER_NAME)}`);\n }\n if (!Number.isInteger(env.HOST_PORT) || env.HOST_PORT < 1 || env.HOST_PORT > 65535) {\n throw new Error(`Invalid docker host port: ${env.HOST_PORT}`);\n }\n if (env.DOCKER_IMAGE !== undefined && !DOCKER_IMAGE_RE.test(env.DOCKER_IMAGE)) {\n throw new Error(`Invalid docker image: ${JSON.stringify(env.DOCKER_IMAGE)}`);\n }\n for (const arg of env.DOCKER_COMMAND ?? []) {\n if (!DOCKER_COMMAND_ARG_RE.test(arg)) {\n throw new Error(`Invalid docker command arg: ${JSON.stringify(arg)}`);\n }\n }\n}\n\n/** `dockerImage` is the image to run when the env has no override (see getDefaultStellarLocalnetImage). */\nexport function buildDockerRunArgs(env: StellarTestEnv, dockerImage?: string): string[] {\n assertDockerArgs(env);\n const image = env.DOCKER_IMAGE ?? dockerImage;\n if (image === undefined) {\n throw new Error('No docker image: set dockerImage or pass the default image');\n }\n return [\n 'run',\n '-d',\n '--name',\n env.CONTAINER_NAME,\n '--label',\n STELLAR_LOCALNET_OWNER_LABEL,\n '-p',\n `127.0.0.1:${env.HOST_PORT}:${CONTAINER_PORT}`,\n image,\n ...(env.DOCKER_COMMAND ?? []),\n ];\n}\n\nexport function buildDockerContainerIdLookupArgs(containerName: string): string[] {\n return ['container', 'ls', '-aq', '--filter', `name=^/${containerName}$`];\n}\n\nexport function buildDockerOwnershipLabelLookupArgs(containerId: string): string[] {\n return [\n 'container',\n 'inspect',\n '--format',\n `{{ index .Config.Labels \"${STELLAR_LOCALNET_OWNER_LABEL_KEY}\" }}`,\n containerId,\n ];\n}\n\nexport function buildDockerRemoveArgs(containerId: string): string[] {\n return ['rm', '-f', containerId];\n}\n\nexport function getNamedContainerRemovalPolicy(\n containerId: string | undefined,\n ownerLabel: string | undefined,\n): NamedContainerRemovalPolicy {\n if (containerId == null) return 'absent';\n return ownerLabel === '1' ? 'remove' : 'reject';\n}\n\nconst runDockerCommand: DockerCommandRunner = (args) => {\n const result = spawnSync('docker', args, { encoding: 'utf8' });\n if (result.error != null) {\n throw new Error(`Unable to run docker ${args[0]}: ${result.error.message}`, {\n cause: result.error,\n });\n }\n return {\n status: result.status ?? 1,\n stdout: result.stdout ?? '',\n stderr: result.stderr ?? '',\n };\n};\n\nfunction runDockerOrThrow(\n runner: DockerCommandRunner,\n args: readonly string[],\n action: string,\n): DockerCommandResult {\n const result = runner(args);\n if (result.status !== 0) {\n throw new Error(\n `Docker ${action} failed (exit ${result.status}): ${result.stderr.trim() || result.stdout.trim()}`,\n );\n }\n return result;\n}\n\nfunction removeOwnedContainerIfPresent(\n env: StellarTestEnv,\n commandRunner: DockerCommandRunner,\n): void {\n const containerId = runDockerOrThrow(\n commandRunner,\n buildDockerContainerIdLookupArgs(env.CONTAINER_NAME),\n `container lookup for ${env.CONTAINER_NAME}`,\n ).stdout.trim();\n const normalizedContainerId = containerId === '' ? undefined : containerId;\n\n if (normalizedContainerId == null) return;\n\n const ownerLabel = runDockerOrThrow(\n commandRunner,\n buildDockerOwnershipLabelLookupArgs(normalizedContainerId),\n `ownership lookup for ${env.CONTAINER_NAME}`,\n ).stdout.trim();\n const policy = getNamedContainerRemovalPolicy(normalizedContainerId, ownerLabel);\n if (policy === 'reject') {\n throw new Error(\n `Refusing to remove existing container ${env.CONTAINER_NAME}: it is not owned by ${STELLAR_LOCALNET_OWNER_LABEL}`,\n );\n }\n runDockerOrThrow(\n commandRunner,\n buildDockerRemoveArgs(normalizedContainerId),\n `removal of ${env.CONTAINER_NAME}`,\n );\n}\n\nasync function dockerRunLocalnet(\n env: StellarTestEnv,\n commandRunner: DockerCommandRunner,\n): Promise<void> {\n const dockerImage = env.DOCKER_IMAGE ?? (await getDefaultStellarLocalnetImage());\n runDockerOrThrow(commandRunner, buildDockerRunArgs(env, dockerImage), 'localnet start');\n}\n\nexport async function startStellarLocalnet({\n env,\n commandRunner = runDockerCommand,\n}: LocalnetLifecycleOptions): Promise<void> {\n assertDockerArgs(env);\n console.log('🚀 Starting Stellar localnet...');\n\n removeOwnedContainerIfPresent(env, commandRunner);\n await dockerRunLocalnet(env, commandRunner);\n\n // Container is up; if any startup step fails, tear it down before rethrowing.\n // globalSetup only registers its teardown once startup fully succeeds, so\n // without this a failed startup (e.g. a funding flake) would leak the container.\n try {\n console.log('⏳ Waiting for Stellar RPC to be healthy...');\n await waitForRpcHealth(env);\n console.log('✅ Stellar RPC is healthy');\n\n // Stock stellar/quickstart does not pre-fund the junk wallet; friendbot does.\n // Idempotent on the LayerZero ECR snapshot where the account already exists.\n await fundAccountViaFriendbot(env, env.JUNK_WALLET.publicKey());\n await fundTestAccounts(env);\n await deployNativeSac(env);\n await deployZroToken(env);\n } catch (err) {\n await stopStellarLocalnet({ env, commandRunner });\n throw err;\n }\n}\n\n// Serialization queue for fundAccount — the junk wallet can only have one pending tx at a time.\n// Chaining onto this promise ensures concurrent calls are sequenced correctly.\nlet fundAccountQueue: Promise<void> = Promise.resolve();\n\n/**\n * Fund a single account from the junk wallet (for ad-hoc test accounts).\n * Calls are serialized to avoid sequence number conflicts on the junk wallet.\n */\nexport function fundAccount(env: StellarTestEnv, publicKey: string): Promise<void> {\n const result = fundAccountQueue.then(() => fundAccountInternal(env, publicKey));\n fundAccountQueue = result.catch(() => {}); // keep queue alive if this call fails\n return result;\n}\n\nasync function fundAccountInternal(env: StellarTestEnv, publicKey: string): Promise<void> {\n const MAX_RETRIES = 5;\n let lastError: unknown;\n\n for (let attempt = 1; attempt <= MAX_RETRIES; attempt++) {\n let transactionSubmitted = false;\n let getDestinationAccount: ((accountId: string) => Promise<unknown>) | undefined;\n try {\n const server = new rpc.Server(env.RPC_URL, { allowHttp: true });\n getDestinationAccount = (accountId) => server.getAccount(accountId);\n // Re-fetch account on every attempt to get the latest sequence number\n const junkAccount = await server.getAccount(env.JUNK_WALLET.publicKey());\n\n const tx = new TransactionBuilder(junkAccount, {\n fee: BASE_FEE,\n networkPassphrase: env.NETWORK_PASSPHRASE,\n })\n .addOperation(\n Operation.createAccount({\n destination: publicKey,\n startingBalance: '100',\n }),\n )\n .setTimeout(30)\n .build();\n\n tx.sign(env.JUNK_WALLET);\n\n const sendResult = await server.sendTransaction(tx);\n if (sendResult.status !== 'PENDING') {\n throw new Error(\n `Failed to fund account ${publicKey}: ${JSON.stringify(sendResult)}`,\n );\n }\n transactionSubmitted = true;\n\n const txResult = await server.pollTransaction(sendResult.hash);\n if (txResult.status !== 'SUCCESS') {\n throw new Error(\n `Account funding failed for ${publicKey}: ${JSON.stringify(txResult)}`,\n );\n }\n\n return; // success\n } catch (err) {\n lastError = err;\n if (\n transactionSubmitted &&\n getDestinationAccount != null &&\n (await accountExists(getDestinationAccount, publicKey))\n ) {\n return;\n }\n if (attempt < MAX_RETRIES) {\n await new Promise((resolve) => setTimeout(resolve, FUNDING_RETRY_INTERVAL_MS));\n }\n }\n }\n\n throw new Error(\n `Failed to fund account ${publicKey} after ${MAX_RETRIES} attempts: ${lastError instanceof Error ? lastError.message : String(lastError)}`,\n );\n}\n\n/** Returns true when a destination account was created despite an ambiguous transaction poll. */\nexport async function accountExists(\n getAccount: (accountId: string) => Promise<unknown>,\n accountId: string,\n): Promise<boolean> {\n try {\n await getAccount(accountId);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Back off between fundTestAccounts rebuilds so a lagging localnet can confirm\n * the previous attempt before we burn another try.\n */\nexport async function pauseBeforeFundingRetry(\n attempt: number,\n maxAttempts: number,\n sleep: (ms: number) => Promise<void> = (ms) =>\n new Promise((resolve) => setTimeout(resolve, ms)),\n intervalMs: number = FUNDING_RETRY_INTERVAL_MS,\n): Promise<void> {\n if (attempt < maxAttempts) {\n await sleep(intervalMs);\n }\n}\n\nasync function waitForRpcHealth(env: StellarTestEnv): Promise<void> {\n const startTime = Date.now();\n while (Date.now() - startTime < STARTUP_TIMEOUT_MS) {\n try {\n const response = await fetch(env.RPC_URL, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ jsonrpc: '2.0', id: 1, method: 'getHealth' }),\n signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),\n });\n const data = (await response.json()) as { result?: { status?: string } };\n if (data.result?.status === 'healthy') return;\n } catch {\n // Not ready yet\n }\n await new Promise((resolve) => setTimeout(resolve, FUNDING_RETRY_INTERVAL_MS));\n }\n throw new Error(\n `Stellar RPC failed to become healthy within ${STARTUP_TIMEOUT_MS / 1000} seconds`,\n );\n}\n\n/**\n * Poll until an account is visible to Soroban RPC `getAccount`.\n * Friendbot / Horizon can acknowledge createAccount before RPC indexes it.\n */\nexport async function waitForAccountOnRpc(\n getAccount: (accountId: string) => Promise<unknown>,\n publicKey: string,\n {\n timeoutMs = STARTUP_TIMEOUT_MS,\n intervalMs = FUNDING_RETRY_INTERVAL_MS,\n sleep = (ms: number) => new Promise<void>((resolve) => setTimeout(resolve, ms)),\n }: {\n timeoutMs?: number;\n intervalMs?: number;\n sleep?: (ms: number) => Promise<void>;\n } = {},\n): Promise<void> {\n const startTime = Date.now();\n while (Date.now() - startTime < timeoutMs) {\n if (await accountExists(getAccount, publicKey)) {\n return;\n }\n await sleep(intervalMs);\n }\n throw new Error(\n `Account ${publicKey} not visible to Soroban RPC within ${timeoutMs / 1000} seconds`,\n );\n}\n\n/**\n * Fund an account via quickstart friendbot (creates the account if missing).\n * Idempotent when the account already exists. Waits until Soroban RPC can see\n * the account so subsequent `getAccount` calls (e.g. fundTestAccounts) do not race.\n */\nexport async function fundAccountViaFriendbot(\n env: StellarTestEnv,\n publicKey: string,\n): Promise<void> {\n const friendbotUrl = `http://localhost:${env.HOST_PORT}/friendbot?addr=${encodeURIComponent(publicKey)}`;\n const startTime = Date.now();\n let lastError: unknown;\n\n while (Date.now() - startTime < STARTUP_TIMEOUT_MS) {\n try {\n const response = await fetch(friendbotUrl, {\n signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),\n });\n const body = await response.text();\n if (\n response.ok ||\n body.includes('already funded') ||\n body.includes('op_already_exists')\n ) {\n console.log(`✅ Friendbot funded ${publicKey}; waiting for RPC visibility…`);\n const server = new rpc.Server(env.RPC_URL, { allowHttp: true });\n const remainingMs = Math.max(1, STARTUP_TIMEOUT_MS - (Date.now() - startTime));\n await waitForAccountOnRpc((accountId) => server.getAccount(accountId), publicKey, {\n timeoutMs: remainingMs,\n });\n console.log(`✅ Account ${publicKey} visible to Soroban RPC`);\n return;\n }\n lastError = new Error(`friendbot HTTP ${response.status}: ${body}`);\n } catch (err) {\n lastError = err;\n }\n await new Promise((resolve) => setTimeout(resolve, FUNDING_RETRY_INTERVAL_MS));\n }\n\n throw new Error(\n `Friendbot failed to fund ${publicKey} within ${STARTUP_TIMEOUT_MS / 1000} seconds: ${\n lastError instanceof Error ? lastError.message : String(lastError)\n }`,\n );\n}\n\nasync function fundTestAccounts(env: StellarTestEnv): Promise<void> {\n console.log('💰 Funding test accounts from junk wallet...');\n const server = new rpc.Server(env.RPC_URL, { allowHttp: true });\n\n // A funded DEFAULT_DEPLOYER is the signal that funding already landed — lets us\n // short-circuit when a prior attempt's tx confirmed after the poll gave up.\n const alreadyFunded = async (): Promise<boolean> => {\n try {\n await server.getAccount(env.DEFAULT_DEPLOYER.publicKey());\n return true;\n } catch {\n return false;\n }\n };\n\n // Running localnets concurrently makes the chain lag, so a funding tx can outrun\n // the poll window or expire (NOT_FOUND). Use a longer validity + poll window, and\n // rebuild-and-retry a bounded number of times before giving up.\n const FUNDING_ATTEMPTS = 3;\n for (let attempt = 1; attempt <= FUNDING_ATTEMPTS; attempt++) {\n const junkAccount = await server.getAccount(env.JUNK_WALLET.publicKey());\n const tx = new TransactionBuilder(junkAccount, {\n fee: BASE_FEE,\n networkPassphrase: env.NETWORK_PASSPHRASE,\n })\n .addOperation(\n Operation.createAccount({\n destination: env.DEFAULT_DEPLOYER.publicKey(),\n startingBalance: '2000',\n }),\n )\n .addOperation(\n Operation.createAccount({\n destination: env.ZRO_DISTRIBUTOR.publicKey(),\n startingBalance: '2000',\n }),\n )\n .addOperation(\n Operation.createAccount({\n destination: env.EXECUTOR_ADMIN.publicKey(),\n startingBalance: '2000',\n }),\n )\n .addOperation(\n Operation.createAccount({\n destination: env.CHAIN_B_DEPLOYER.publicKey(),\n startingBalance: '2000',\n }),\n )\n .setTimeout(120)\n .build();\n\n tx.sign(env.JUNK_WALLET);\n\n const sendResult = await server.sendTransaction(tx);\n if (sendResult.status === 'PENDING') {\n const txResult = await server.pollTransaction(sendResult.hash, { attempts: 60 });\n if (txResult.status === 'SUCCESS') {\n console.log('✅ All test accounts funded');\n return;\n }\n }\n\n // Send rejected or poll didn't confirm — but on a lagging chain the tx may\n // have landed anyway. If the accounts now exist, funding is effectively done.\n if (await alreadyFunded()) {\n console.log('✅ All test accounts funded (confirmed after poll window)');\n return;\n }\n\n console.warn(\n `⚠️ Funding attempt ${attempt}/${FUNDING_ATTEMPTS} did not confirm; retrying…`,\n );\n // Match fundAccountInternal: give a lagging localnet time to confirm before\n // rebuilding/retrying, otherwise we can burn all attempts while the first tx lands.\n await pauseBeforeFundingRetry(attempt, FUNDING_ATTEMPTS);\n }\n\n throw new Error(`Account funding failed to confirm after ${FUNDING_ATTEMPTS} attempts`);\n}\n\nexport async function stopStellarLocalnet({\n env,\n commandRunner = runDockerCommand,\n}: LocalnetLifecycleOptions): Promise<void> {\n // Guarded (like the startup docker rm -f) so a cleanup failure never throws —\n // otherwise it would mask the original error when called from a startup catch.\n try {\n assertDockerArgs(env);\n removeOwnedContainerIfPresent(env, commandRunner);\n console.log('✅ Stellar localnet stopped');\n } catch (err) {\n console.warn(`⚠️ Failed to remove container ${env.CONTAINER_NAME}:`, err);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/localnet.ts"],"names":["getDefaultStellarLocalnetImage","posix","join","getRegistry","getImageDirectory","CONTAINER_PORT","STELLAR_LOCALNET_OWNER_LABEL","STELLAR_LOCALNET_OWNER_LABEL_KEY","split","STARTUP_TIMEOUT_MS","REQUEST_TIMEOUT_MS","FUNDING_RETRY_INTERVAL_MS","DOCKER_NAME_RE","DOCKER_IMAGE_RE","DOCKER_COMMAND_ARG_RE","assertDockerArgs","env","test","CONTAINER_NAME","Error","JSON","stringify","Number","isInteger","HOST_PORT","DOCKER_IMAGE","undefined","arg","DOCKER_COMMAND","buildDockerRunArgs","dockerImage","image","buildDockerContainerIdLookupArgs","containerName","buildDockerOwnershipLabelLookupArgs","containerId","buildDockerRemoveArgs","getNamedContainerRemovalPolicy","ownerLabel","runDockerCommand","args","result","spawnSync","encoding","error","message","cause","status","stdout","stderr","runDockerOrThrow","runner","action","trim","removeOwnedContainerIfPresent","commandRunner","normalizedContainerId","policy","dockerRunLocalnet","startStellarLocalnet","console","log","waitForRpcHealth","fundAccountViaFriendbot","JUNK_WALLET","publicKey","fundTestAccounts","deployNativeSac","deployZroToken","err","stopStellarLocalnet","fundAccountQueue","Promise","resolve","fundAccount","then","fundAccountInternal","catch","MAX_RETRIES","lastError","attempt","transactionSubmitted","getDestinationAccount","server","rpc","Server","RPC_URL","allowHttp","accountId","getAccount","junkAccount","tx","TransactionBuilder","fee","BASE_FEE","networkPassphrase","NETWORK_PASSPHRASE","addOperation","Operation","createAccount","destination","startingBalance","setTimeout","build","sign","sendResult","sendTransaction","txResult","pollTransaction","hash","accountExists","String","pauseBeforeFundingRetry","maxAttempts","sleep","ms","intervalMs","startTime","Date","now","response","fetch","method","headers","body","jsonrpc","id","signal","AbortSignal","timeout","data","json","waitForAccountOnRpc","timeoutMs","friendbotUrl","encodeURIComponent","text","ok","includes","remainingMs","Math","max","alreadyFunded","DEFAULT_DEPLOYER","FUNDING_ATTEMPTS","ZRO_DISTRIBUTOR","EXECUTOR_ADMIN","CHAIN_B_DEPLOYER","attempts","warn"],"mappings":"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","file":"ECVGEAZI.js","sourcesContent":["import { BASE_FEE, Operation, rpc, TransactionBuilder } from '@stellar/stellar-sdk';\nimport { spawnSync } from 'node:child_process';\nimport { posix } from 'node:path';\n\nimport { getImageDirectory, getRegistry } from '@layerzerolabs/vm-tooling';\n\nimport { deployNativeSac, deployZroToken } from './deploy.js';\nimport type { StellarTestEnv } from './env.js';\n\n/**\n * The LayerZero Stellar localnet snapshot, pulled from the same registry as vm-tooling's images:\n * ECR in this repo, LayerZero's public mirror in the external repos, or `VM_TOOLING_REGISTRY` /\n * `VM_TOOLING_IMAGE_DIRECTORY` when both are set.\n */\nexport async function getDefaultStellarLocalnetImage(): Promise<string> {\n return posix.join(await getRegistry(), await getImageDirectory(), 'stellar:2026-03-02');\n}\n\nconst CONTAINER_PORT = 8000;\nexport const STELLAR_LOCALNET_OWNER_LABEL = 'com.layerzerolabs.test-utils-stellar=1';\nconst STELLAR_LOCALNET_OWNER_LABEL_KEY = STELLAR_LOCALNET_OWNER_LABEL.split('=')[0];\n\n// Timeout configuration (in milliseconds)\nconst STARTUP_TIMEOUT_MS = 120_000; // 2 minutes\nconst REQUEST_TIMEOUT_MS = 5_000;\nexport const FUNDING_RETRY_INTERVAL_MS = 2_000;\n\n/** Docker container names: alphanumeric start, then alnum / `_` / `.` / `-`. */\nconst DOCKER_NAME_RE = /^[a-zA-Z0-9][a-zA-Z0-9_.-]*$/;\nconst DOCKER_IMAGE_RE =\n /^(?!-)[a-z0-9][a-z0-9._/-]*(?::[a-zA-Z0-9][a-zA-Z0-9_.-]*)?(?:@[a-zA-Z0-9][a-zA-Z0-9_+.-]*:[a-fA-F0-9]{32,})?$/;\n/** Safe argv tokens for `docker run … IMAGE <args>` (flags / simple values only). */\nconst DOCKER_COMMAND_ARG_RE = /^(?:--)?[a-zA-Z0-9][a-zA-Z0-9._/=+-]*$/;\n\nexport interface DockerCommandResult {\n status: number;\n stdout: string;\n stderr: string;\n}\n\n/** Injectable so container lifecycle policy can be tested without a Docker daemon. */\nexport type DockerCommandRunner = (args: readonly string[]) => DockerCommandResult;\n\nexport interface LocalnetLifecycleOptions {\n env: StellarTestEnv;\n commandRunner?: DockerCommandRunner;\n}\n\nexport type NamedContainerRemovalPolicy = 'absent' | 'remove' | 'reject';\n\nexport function assertDockerArgs(env: StellarTestEnv): void {\n if (!DOCKER_NAME_RE.test(env.CONTAINER_NAME)) {\n throw new Error(`Invalid docker container name: ${JSON.stringify(env.CONTAINER_NAME)}`);\n }\n if (!Number.isInteger(env.HOST_PORT) || env.HOST_PORT < 1 || env.HOST_PORT > 65535) {\n throw new Error(`Invalid docker host port: ${env.HOST_PORT}`);\n }\n if (env.DOCKER_IMAGE !== undefined && !DOCKER_IMAGE_RE.test(env.DOCKER_IMAGE)) {\n throw new Error(`Invalid docker image: ${JSON.stringify(env.DOCKER_IMAGE)}`);\n }\n for (const arg of env.DOCKER_COMMAND ?? []) {\n if (!DOCKER_COMMAND_ARG_RE.test(arg)) {\n throw new Error(`Invalid docker command arg: ${JSON.stringify(arg)}`);\n }\n }\n}\n\n/** `dockerImage` is the image to run when the env has no override (see getDefaultStellarLocalnetImage). */\nexport function buildDockerRunArgs(env: StellarTestEnv, dockerImage?: string): string[] {\n assertDockerArgs(env);\n const image = env.DOCKER_IMAGE ?? dockerImage;\n if (image === undefined) {\n throw new Error('No docker image: set dockerImage or pass the default image');\n }\n return [\n 'run',\n '-d',\n '--name',\n env.CONTAINER_NAME,\n '--label',\n STELLAR_LOCALNET_OWNER_LABEL,\n '-p',\n `127.0.0.1:${env.HOST_PORT}:${CONTAINER_PORT}`,\n image,\n ...(env.DOCKER_COMMAND ?? []),\n ];\n}\n\nexport function buildDockerContainerIdLookupArgs(containerName: string): string[] {\n return ['container', 'ls', '-aq', '--filter', `name=^/${containerName}$`];\n}\n\nexport function buildDockerOwnershipLabelLookupArgs(containerId: string): string[] {\n return [\n 'container',\n 'inspect',\n '--format',\n `{{ index .Config.Labels \"${STELLAR_LOCALNET_OWNER_LABEL_KEY}\" }}`,\n containerId,\n ];\n}\n\nexport function buildDockerRemoveArgs(containerId: string): string[] {\n return ['rm', '-f', containerId];\n}\n\nexport function getNamedContainerRemovalPolicy(\n containerId: string | undefined,\n ownerLabel: string | undefined,\n): NamedContainerRemovalPolicy {\n if (containerId == null) return 'absent';\n return ownerLabel === '1' ? 'remove' : 'reject';\n}\n\nconst runDockerCommand: DockerCommandRunner = (args) => {\n const result = spawnSync('docker', args, { encoding: 'utf8' });\n if (result.error != null) {\n throw new Error(`Unable to run docker ${args[0]}: ${result.error.message}`, {\n cause: result.error,\n });\n }\n return {\n status: result.status ?? 1,\n stdout: result.stdout ?? '',\n stderr: result.stderr ?? '',\n };\n};\n\nfunction runDockerOrThrow(\n runner: DockerCommandRunner,\n args: readonly string[],\n action: string,\n): DockerCommandResult {\n const result = runner(args);\n if (result.status !== 0) {\n throw new Error(\n `Docker ${action} failed (exit ${result.status}): ${result.stderr.trim() || result.stdout.trim()}`,\n );\n }\n return result;\n}\n\nfunction removeOwnedContainerIfPresent(\n env: StellarTestEnv,\n commandRunner: DockerCommandRunner,\n): void {\n const containerId = runDockerOrThrow(\n commandRunner,\n buildDockerContainerIdLookupArgs(env.CONTAINER_NAME),\n `container lookup for ${env.CONTAINER_NAME}`,\n ).stdout.trim();\n const normalizedContainerId = containerId === '' ? undefined : containerId;\n\n if (normalizedContainerId == null) return;\n\n const ownerLabel = runDockerOrThrow(\n commandRunner,\n buildDockerOwnershipLabelLookupArgs(normalizedContainerId),\n `ownership lookup for ${env.CONTAINER_NAME}`,\n ).stdout.trim();\n const policy = getNamedContainerRemovalPolicy(normalizedContainerId, ownerLabel);\n if (policy === 'reject') {\n throw new Error(\n `Refusing to remove existing container ${env.CONTAINER_NAME}: it is not owned by ${STELLAR_LOCALNET_OWNER_LABEL}`,\n );\n }\n runDockerOrThrow(\n commandRunner,\n buildDockerRemoveArgs(normalizedContainerId),\n `removal of ${env.CONTAINER_NAME}`,\n );\n}\n\nasync function dockerRunLocalnet(\n env: StellarTestEnv,\n commandRunner: DockerCommandRunner,\n): Promise<void> {\n const dockerImage = env.DOCKER_IMAGE ?? (await getDefaultStellarLocalnetImage());\n runDockerOrThrow(commandRunner, buildDockerRunArgs(env, dockerImage), 'localnet start');\n}\n\nexport async function startStellarLocalnet({\n env,\n commandRunner = runDockerCommand,\n}: LocalnetLifecycleOptions): Promise<void> {\n assertDockerArgs(env);\n console.log('🚀 Starting Stellar localnet...');\n\n removeOwnedContainerIfPresent(env, commandRunner);\n await dockerRunLocalnet(env, commandRunner);\n\n // Container is up; if any startup step fails, tear it down before rethrowing.\n // globalSetup only registers its teardown once startup fully succeeds, so\n // without this a failed startup (e.g. a funding flake) would leak the container.\n try {\n console.log('⏳ Waiting for Stellar RPC to be healthy...');\n await waitForRpcHealth(env);\n console.log('✅ Stellar RPC is healthy');\n\n // Stock stellar/quickstart does not pre-fund the junk wallet; friendbot does.\n // Idempotent on the LayerZero ECR snapshot where the account already exists.\n await fundAccountViaFriendbot(env, env.JUNK_WALLET.publicKey());\n await fundTestAccounts(env);\n await deployNativeSac(env);\n await deployZroToken(env);\n } catch (err) {\n await stopStellarLocalnet({ env, commandRunner });\n throw err;\n }\n}\n\n// Serialization queue for fundAccount — the junk wallet can only have one pending tx at a time.\n// Chaining onto this promise ensures concurrent calls are sequenced correctly.\nlet fundAccountQueue: Promise<void> = Promise.resolve();\n\n/**\n * Fund a single account from the junk wallet (for ad-hoc test accounts).\n * Calls are serialized to avoid sequence number conflicts on the junk wallet.\n */\nexport function fundAccount(env: StellarTestEnv, publicKey: string): Promise<void> {\n const result = fundAccountQueue.then(() => fundAccountInternal(env, publicKey));\n fundAccountQueue = result.catch(() => {}); // keep queue alive if this call fails\n return result;\n}\n\nasync function fundAccountInternal(env: StellarTestEnv, publicKey: string): Promise<void> {\n const MAX_RETRIES = 5;\n let lastError: unknown;\n\n for (let attempt = 1; attempt <= MAX_RETRIES; attempt++) {\n let transactionSubmitted = false;\n let getDestinationAccount: ((accountId: string) => Promise<unknown>) | undefined;\n try {\n const server = new rpc.Server(env.RPC_URL, { allowHttp: true });\n getDestinationAccount = (accountId) => server.getAccount(accountId);\n // Re-fetch account on every attempt to get the latest sequence number\n const junkAccount = await server.getAccount(env.JUNK_WALLET.publicKey());\n\n const tx = new TransactionBuilder(junkAccount, {\n fee: BASE_FEE,\n networkPassphrase: env.NETWORK_PASSPHRASE,\n })\n .addOperation(\n Operation.createAccount({\n destination: publicKey,\n startingBalance: '100',\n }),\n )\n .setTimeout(30)\n .build();\n\n tx.sign(env.JUNK_WALLET);\n\n const sendResult = await server.sendTransaction(tx);\n if (sendResult.status !== 'PENDING') {\n throw new Error(\n `Failed to fund account ${publicKey}: ${JSON.stringify(sendResult)}`,\n );\n }\n transactionSubmitted = true;\n\n const txResult = await server.pollTransaction(sendResult.hash);\n if (txResult.status !== 'SUCCESS') {\n throw new Error(\n `Account funding failed for ${publicKey}: ${JSON.stringify(txResult)}`,\n );\n }\n\n return; // success\n } catch (err) {\n lastError = err;\n if (\n transactionSubmitted &&\n getDestinationAccount != null &&\n (await accountExists(getDestinationAccount, publicKey))\n ) {\n return;\n }\n if (attempt < MAX_RETRIES) {\n await new Promise((resolve) => setTimeout(resolve, FUNDING_RETRY_INTERVAL_MS));\n }\n }\n }\n\n throw new Error(\n `Failed to fund account ${publicKey} after ${MAX_RETRIES} attempts: ${lastError instanceof Error ? lastError.message : String(lastError)}`,\n );\n}\n\n/** Returns true when a destination account was created despite an ambiguous transaction poll. */\nexport async function accountExists(\n getAccount: (accountId: string) => Promise<unknown>,\n accountId: string,\n): Promise<boolean> {\n try {\n await getAccount(accountId);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Back off between fundTestAccounts rebuilds so a lagging localnet can confirm\n * the previous attempt before we burn another try.\n */\nexport async function pauseBeforeFundingRetry(\n attempt: number,\n maxAttempts: number,\n sleep: (ms: number) => Promise<void> = (ms) =>\n new Promise((resolve) => setTimeout(resolve, ms)),\n intervalMs: number = FUNDING_RETRY_INTERVAL_MS,\n): Promise<void> {\n if (attempt < maxAttempts) {\n await sleep(intervalMs);\n }\n}\n\nasync function waitForRpcHealth(env: StellarTestEnv): Promise<void> {\n const startTime = Date.now();\n while (Date.now() - startTime < STARTUP_TIMEOUT_MS) {\n try {\n const response = await fetch(env.RPC_URL, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ jsonrpc: '2.0', id: 1, method: 'getHealth' }),\n signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),\n });\n const data = (await response.json()) as { result?: { status?: string } };\n if (data.result?.status === 'healthy') return;\n } catch {\n // Not ready yet\n }\n await new Promise((resolve) => setTimeout(resolve, FUNDING_RETRY_INTERVAL_MS));\n }\n throw new Error(\n `Stellar RPC failed to become healthy within ${STARTUP_TIMEOUT_MS / 1000} seconds`,\n );\n}\n\n/**\n * Poll until an account is visible to Soroban RPC `getAccount`.\n * Friendbot / Horizon can acknowledge createAccount before RPC indexes it.\n */\nexport async function waitForAccountOnRpc(\n getAccount: (accountId: string) => Promise<unknown>,\n publicKey: string,\n {\n timeoutMs = STARTUP_TIMEOUT_MS,\n intervalMs = FUNDING_RETRY_INTERVAL_MS,\n sleep = (ms: number) => new Promise<void>((resolve) => setTimeout(resolve, ms)),\n }: {\n timeoutMs?: number;\n intervalMs?: number;\n sleep?: (ms: number) => Promise<void>;\n } = {},\n): Promise<void> {\n const startTime = Date.now();\n while (Date.now() - startTime < timeoutMs) {\n if (await accountExists(getAccount, publicKey)) {\n return;\n }\n await sleep(intervalMs);\n }\n throw new Error(\n `Account ${publicKey} not visible to Soroban RPC within ${timeoutMs / 1000} seconds`,\n );\n}\n\n/**\n * Fund an account via quickstart friendbot (creates the account if missing).\n * Idempotent when the account already exists. Waits until Soroban RPC can see\n * the account so subsequent `getAccount` calls (e.g. fundTestAccounts) do not race.\n */\nexport async function fundAccountViaFriendbot(\n env: StellarTestEnv,\n publicKey: string,\n): Promise<void> {\n const friendbotUrl = `http://localhost:${env.HOST_PORT}/friendbot?addr=${encodeURIComponent(publicKey)}`;\n const startTime = Date.now();\n let lastError: unknown;\n\n while (Date.now() - startTime < STARTUP_TIMEOUT_MS) {\n try {\n const response = await fetch(friendbotUrl, {\n signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),\n });\n const body = await response.text();\n if (\n response.ok ||\n body.includes('already funded') ||\n body.includes('op_already_exists')\n ) {\n console.log(`✅ Friendbot funded ${publicKey}; waiting for RPC visibility…`);\n const server = new rpc.Server(env.RPC_URL, { allowHttp: true });\n const remainingMs = Math.max(1, STARTUP_TIMEOUT_MS - (Date.now() - startTime));\n await waitForAccountOnRpc((accountId) => server.getAccount(accountId), publicKey, {\n timeoutMs: remainingMs,\n });\n console.log(`✅ Account ${publicKey} visible to Soroban RPC`);\n return;\n }\n lastError = new Error(`friendbot HTTP ${response.status}: ${body}`);\n } catch (err) {\n lastError = err;\n }\n await new Promise((resolve) => setTimeout(resolve, FUNDING_RETRY_INTERVAL_MS));\n }\n\n throw new Error(\n `Friendbot failed to fund ${publicKey} within ${STARTUP_TIMEOUT_MS / 1000} seconds: ${\n lastError instanceof Error ? lastError.message : String(lastError)\n }`,\n );\n}\n\nasync function fundTestAccounts(env: StellarTestEnv): Promise<void> {\n console.log('💰 Funding test accounts from junk wallet...');\n const server = new rpc.Server(env.RPC_URL, { allowHttp: true });\n\n // A funded DEFAULT_DEPLOYER is the signal that funding already landed — lets us\n // short-circuit when a prior attempt's tx confirmed after the poll gave up.\n const alreadyFunded = async (): Promise<boolean> => {\n try {\n await server.getAccount(env.DEFAULT_DEPLOYER.publicKey());\n return true;\n } catch {\n return false;\n }\n };\n\n // Running localnets concurrently makes the chain lag, so a funding tx can outrun\n // the poll window or expire (NOT_FOUND). Use a longer validity + poll window, and\n // rebuild-and-retry a bounded number of times before giving up.\n const FUNDING_ATTEMPTS = 3;\n for (let attempt = 1; attempt <= FUNDING_ATTEMPTS; attempt++) {\n const junkAccount = await server.getAccount(env.JUNK_WALLET.publicKey());\n const tx = new TransactionBuilder(junkAccount, {\n fee: BASE_FEE,\n networkPassphrase: env.NETWORK_PASSPHRASE,\n })\n .addOperation(\n Operation.createAccount({\n destination: env.DEFAULT_DEPLOYER.publicKey(),\n startingBalance: '2000',\n }),\n )\n .addOperation(\n Operation.createAccount({\n destination: env.ZRO_DISTRIBUTOR.publicKey(),\n startingBalance: '2000',\n }),\n )\n .addOperation(\n Operation.createAccount({\n destination: env.EXECUTOR_ADMIN.publicKey(),\n startingBalance: '2000',\n }),\n )\n .addOperation(\n Operation.createAccount({\n destination: env.CHAIN_B_DEPLOYER.publicKey(),\n startingBalance: '2000',\n }),\n )\n .setTimeout(120)\n .build();\n\n tx.sign(env.JUNK_WALLET);\n\n const sendResult = await server.sendTransaction(tx);\n if (sendResult.status === 'PENDING') {\n const txResult = await server.pollTransaction(sendResult.hash, { attempts: 60 });\n if (txResult.status === 'SUCCESS') {\n console.log('✅ All test accounts funded');\n return;\n }\n }\n\n // Send rejected or poll didn't confirm — but on a lagging chain the tx may\n // have landed anyway. If the accounts now exist, funding is effectively done.\n if (await alreadyFunded()) {\n console.log('✅ All test accounts funded (confirmed after poll window)');\n return;\n }\n\n console.warn(\n `⚠️ Funding attempt ${attempt}/${FUNDING_ATTEMPTS} did not confirm; retrying…`,\n );\n // Match fundAccountInternal: give a lagging localnet time to confirm before\n // rebuilding/retrying, otherwise we can burn all attempts while the first tx lands.\n await pauseBeforeFundingRetry(attempt, FUNDING_ATTEMPTS);\n }\n\n throw new Error(`Account funding failed to confirm after ${FUNDING_ATTEMPTS} attempts`);\n}\n\nexport async function stopStellarLocalnet({\n env,\n commandRunner = runDockerCommand,\n}: LocalnetLifecycleOptions): Promise<void> {\n // Guarded (like the startup docker rm -f) so a cleanup failure never throws —\n // otherwise it would mask the original error when called from a startup catch.\n try {\n assertDockerArgs(env);\n removeOwnedContainerIfPresent(env, commandRunner);\n console.log('✅ Stellar localnet stopped');\n } catch (err) {\n console.warn(`⚠️ Failed to remove container ${env.CONTAINER_NAME}:`, err);\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import { createClient } from './GAGBEOCZ.js';
2
- import { startStellarLocalnet, stopStellarLocalnet } from './4ECTIPRV.js';
3
- import { uploadWasm, deployContract } from './TYAJMKGY.js';
2
+ import { startStellarLocalnet, stopStellarLocalnet } from './ECVGEAZI.js';
3
+ import { uploadWasm, deployContract } from './SU67PCBT.js';
4
4
  import { __name } from './VUOMXK5T.js';
5
5
  import { rpc } from '@stellar/stellar-sdk';
6
6
  import { readFileSync } from 'fs';
@@ -390,5 +390,5 @@ function createProtocolStackGlobalSetup(env, options) {
390
390
  __name(createProtocolStackGlobalSetup, "createProtocolStackGlobalSetup");
391
391
 
392
392
  export { createProtocolStackGlobalSetup };
393
- //# sourceMappingURL=UQE7SBZI.js.map
394
- //# sourceMappingURL=UQE7SBZI.js.map
393
+ //# sourceMappingURL=NLZSE6LF.js.map
394
+ //# sourceMappingURL=NLZSE6LF.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/protocol-global-setup.ts"],"names":["getProtocolClientConstructor","client","moduleName","TypeError","getDeployableProtocolClient","deploy","createProtocolClient","env","contractId","createClient","uploadAllWasms","wasmDir","server","rpc","Server","RPC_URL","allowHttp","wasmFiles","endpoint","treasury","uln302","sml","priceFeed","executorFeeLib","dvnFeeLib","dvn","executorHelper","executor","hashes","name","file","Object","entries","wasmBuffer","readFileSync","path","join","console","log","length","toFixed","uploadWasm","DEFAULT_DEPLOYER","deployChainContracts","protocol","eid","chainLabel","deployer","wasmHashes","addresses","endpointV2","deployedEndpoint","deployContract","Client","owner","publicKey","native_token","NATIVE_TOKEN_ADDRESS","wasmHash","options","deployedTreasury","deployedUln302","deployedSml","fee_recipient","deployedPriceFeed","price_updater","deployedExecutorFeeLib","deployedDvnFeeLib","deployedDvn","vid","DVN_VID","signers","DVN_SIGNER","ethAddress","threshold","admins","supported_msglibs","price_feed","default_multiplier_bps","worker_fee_lib","deposit_address","deployedExecutorHelper","undefined","deployedExecutor","EXECUTOR_ADMIN","message_libs","initChainClients","executorClient","set_executor_helper","helper","allowed_functions","signAndSend","clients","endpointClient","uln302Client","smlClient","treasuryClient","executorHelperClient","executorFeeLibClient","priceFeedClient","dvnFeeLibClient","dvnClient","wireChainContracts","chain","otherChain","thisEid","otherEid","register_library","new_lib","set_zro","zro","ZRO_TOKEN_ADDRESS","set_default_executor_configs","params","dst_eid","config","max_message_size","set_default_send_uln_configs","confirmations","required_dvns","optional_dvns","optional_dvn_threshold","set_default_receive_uln_configs","set_default_send_library","set_default_receive_library","src_eid","grace_period","set_price_ratio_denominator","denominator","set_native_token_price_usd","native_token_price_usd","NORMALIZED_OTHER_EID","set_price","prices","price","gas_per_byte","gas_price_in_unit","price_ratio","set_dst_config","admin","dst_config","floor_margin_usd","lz_compose_base_gas","lz_receive_base_gas","multiplier_bps","native_cap","gas","createProtocolStackGlobalSetup","globalSetup","provide","startStellarLocalnet","addressesA","addressesB","Promise","all","EID_A","EID_B","CHAIN_B_DEPLOYER","chainA","chainB","error","stopStellarLocalnet"],"mappings":"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","file":"UQE7SBZI.js","sourcesContent":["import type { Keypair } from '@stellar/stellar-sdk';\nimport { rpc } from '@stellar/stellar-sdk';\nimport { readFileSync } from 'fs';\nimport path from 'path';\n\nimport { createClient } from './client.js';\nimport { type DeployableContractClient, deployContract, uploadWasm } from './deploy.js';\nimport type { StellarTestEnv } from './env.js';\nimport { startStellarLocalnet, stopStellarLocalnet } from './localnet.js';\n\n/** Vitest globalSetup context subset (avoids a hard vitest type dependency in src/). */\nexport type ProtocolGlobalSetupContext = {\n provide: (key: 'chainA' | 'chainB', value: ChainAddresses) => void;\n};\n\ntype SigningTransaction = {\n signAndSend: () => Promise<unknown>;\n};\n\n/**\n * Generated Soroban clients expose asynchronous methods that construct a signable transaction.\n * Their method names and argument types remain owned by the generated SDK.\n */\ntype ProtocolClient = Record<string, (args: object) => Promise<SigningTransaction>>;\n\ntype ProtocolClientConstructor<TClient extends ProtocolClient> = new (options: {\n contractId: string;\n publicKey: string;\n signTransaction: (tx: string) => Promise<{ signedTxXdr: string; signerAddress: string }>;\n rpcUrl: string;\n networkPassphrase: string;\n allowHttp: boolean;\n}) => TClient;\n\nexport interface ProtocolContractModule {\n /** The generated SDK Client constructor. Validated at the adapter boundary before use. */\n Client: unknown;\n}\n\n/**\n * Protocol contract modules from `@layerzerolabs/lz-v2-stellar-sdk`.\n * Injected by consumers to avoid a workspace cycle (test-utils ↔ sdk).\n */\nexport interface ProtocolStackModules {\n endpoint: ProtocolContractModule;\n treasury: ProtocolContractModule;\n uln302: ProtocolContractModule;\n sml: ProtocolContractModule;\n priceFeed: ProtocolContractModule;\n executorFeeLib: ProtocolContractModule;\n dvnFeeLib: ProtocolContractModule;\n dvn: ProtocolContractModule;\n executorHelper: ProtocolContractModule;\n executor: ProtocolContractModule;\n}\n\n/**\n * Addresses for a single chain's protocol contracts\n */\nexport interface ChainAddresses {\n eid: number;\n endpointV2: string;\n uln302: string;\n sml: string;\n treasury: string;\n executor: string;\n executorHelper: string;\n executorFeeLib: string;\n priceFeed: string;\n dvnFeeLib: string;\n dvn: string;\n}\n\n/**\n * Clients for a single chain's protocol contracts\n */\ninterface ChainClients {\n endpointClient: ProtocolClient;\n uln302Client: ProtocolClient;\n smlClient: ProtocolClient;\n treasuryClient: ProtocolClient;\n executorClient: ProtocolClient;\n executorHelperClient: ProtocolClient;\n executorFeeLibClient: ProtocolClient;\n priceFeedClient: ProtocolClient;\n dvnFeeLibClient: ProtocolClient;\n dvnClient: ProtocolClient;\n}\n\n/**\n * Complete chain setup with addresses and clients\n */\ninterface ChainSetup {\n addresses: ChainAddresses;\n clients: ChainClients;\n}\n\ninterface WasmHashes {\n endpoint: string;\n treasury: string;\n uln302: string;\n sml: string;\n priceFeed: string;\n executorFeeLib: string;\n dvnFeeLib: string;\n dvn: string;\n executorHelper: string;\n executor: string;\n}\n\nfunction getProtocolClientConstructor<TClient extends ProtocolClient>(\n client: unknown,\n moduleName: string,\n): ProtocolClientConstructor<TClient> {\n if (typeof client !== 'function') {\n throw new TypeError(`${moduleName}.Client must be a generated contract client constructor`);\n }\n return client as ProtocolClientConstructor<TClient>;\n}\n\nfunction getDeployableProtocolClient<TClient extends { options: { contractId: string } }>(\n client: unknown,\n moduleName: string,\n): DeployableContractClient<TClient> {\n if (\n typeof client !== 'function' ||\n !('deploy' in client) ||\n typeof client.deploy !== 'function'\n ) {\n throw new TypeError(`${moduleName}.Client must expose a deploy method`);\n }\n return client as DeployableContractClient<TClient>;\n}\n\nfunction createProtocolClient(\n env: StellarTestEnv,\n client: unknown,\n contractId: string,\n moduleName: string,\n): ProtocolClient {\n return createClient(\n env,\n getProtocolClientConstructor<ProtocolClient>(client, moduleName),\n contractId,\n );\n}\n\n/**\n * Upload all protocol WASM files once and return their hashes.\n */\nasync function uploadAllWasms(env: StellarTestEnv, wasmDir: string): Promise<WasmHashes> {\n const server = new rpc.Server(env.RPC_URL, { allowHttp: true });\n\n const wasmFiles = {\n endpoint: 'endpoint_v2.wasm',\n treasury: 'treasury.wasm',\n uln302: 'uln302.wasm',\n sml: 'simple_message_lib.wasm',\n priceFeed: 'price_feed.wasm',\n executorFeeLib: 'executor_fee_lib.wasm',\n dvnFeeLib: 'dvn_fee_lib.wasm',\n dvn: 'dvn.wasm',\n executorHelper: 'executor_helper.wasm',\n executor: 'executor.wasm',\n };\n\n const hashes: Record<string, string> = {};\n for (const [name, file] of Object.entries(wasmFiles)) {\n const wasmBuffer = readFileSync(path.join(wasmDir, file));\n console.log(`📤 Uploading ${name} WASM (${(wasmBuffer.length / 1024).toFixed(1)} KB)...`);\n hashes[name] = await uploadWasm(env, wasmBuffer, env.DEFAULT_DEPLOYER, server);\n }\n\n return hashes as unknown as WasmHashes;\n}\n\n/**\n * Deploy all protocol contracts for a single chain using pre-uploaded WASM hashes.\n * The deployer pays gas; contract ownership is always DEFAULT_DEPLOYER.\n */\nasync function deployChainContracts(\n env: StellarTestEnv,\n protocol: ProtocolStackModules,\n eid: number,\n chainLabel: string,\n deployer: Keypair,\n wasmDir: string,\n wasmHashes: WasmHashes,\n): Promise<ChainAddresses> {\n const addresses: ChainAddresses = {\n eid,\n endpointV2: '',\n uln302: '',\n sml: '',\n treasury: '',\n executor: '',\n executorHelper: '',\n executorFeeLib: '',\n priceFeed: '',\n dvnFeeLib: '',\n dvn: '',\n };\n\n // 1. Deploy Endpoint\n console.log(`🚀 [${chainLabel}] Deploying Endpoint (EID: ${eid})...`);\n const deployedEndpoint = await deployContract<\n ProtocolClient & { options: { contractId: string } }\n >(\n env,\n getDeployableProtocolClient(protocol.endpoint.Client, 'endpoint'),\n path.join(wasmDir, 'endpoint_v2.wasm'),\n {\n eid,\n owner: env.DEFAULT_DEPLOYER.publicKey(),\n native_token: env.NATIVE_TOKEN_ADDRESS,\n },\n deployer,\n { wasmHash: wasmHashes.endpoint },\n );\n addresses.endpointV2 = deployedEndpoint.options.contractId;\n console.log(`✅ [${chainLabel}] Endpoint deployed:`, addresses.endpointV2);\n\n // 2. Deploy Treasury\n console.log(`🚀 [${chainLabel}] Deploying Treasury...`);\n const deployedTreasury = await deployContract<\n ProtocolClient & { options: { contractId: string } }\n >(\n env,\n getDeployableProtocolClient(protocol.treasury.Client, 'treasury'),\n path.join(wasmDir, 'treasury.wasm'),\n { owner: env.DEFAULT_DEPLOYER.publicKey() },\n deployer,\n { wasmHash: wasmHashes.treasury },\n );\n addresses.treasury = deployedTreasury.options.contractId;\n console.log(`✅ [${chainLabel}] Treasury deployed:`, addresses.treasury);\n\n // 3. Deploy ULN302\n console.log(`🚀 [${chainLabel}] Deploying ULN302...`);\n const deployedUln302 = await deployContract<\n ProtocolClient & { options: { contractId: string } }\n >(\n env,\n getDeployableProtocolClient(protocol.uln302.Client, 'uln302'),\n path.join(wasmDir, 'uln302.wasm'),\n {\n owner: env.DEFAULT_DEPLOYER.publicKey(),\n endpoint: addresses.endpointV2,\n treasury: addresses.treasury,\n },\n deployer,\n { wasmHash: wasmHashes.uln302 },\n );\n addresses.uln302 = deployedUln302.options.contractId;\n console.log(`✅ [${chainLabel}] ULN302 deployed:`, addresses.uln302);\n\n // 4. Deploy SML (SimpleMessageLib)\n console.log(`🚀 [${chainLabel}] Deploying SimpleMessageLib...`);\n const deployedSml = await deployContract<ProtocolClient & { options: { contractId: string } }>(\n env,\n getDeployableProtocolClient(protocol.sml.Client, 'sml'),\n path.join(wasmDir, 'simple_message_lib.wasm'),\n {\n owner: env.DEFAULT_DEPLOYER.publicKey(),\n endpoint: addresses.endpointV2,\n fee_recipient: env.DEFAULT_DEPLOYER.publicKey(),\n },\n deployer,\n { wasmHash: wasmHashes.sml },\n );\n addresses.sml = deployedSml.options.contractId;\n console.log(`✅ [${chainLabel}] SimpleMessageLib deployed:`, addresses.sml);\n\n // 5. Deploy Price Feed\n console.log(`🚀 [${chainLabel}] Deploying Price Feed...`);\n const deployedPriceFeed = await deployContract<\n ProtocolClient & { options: { contractId: string } }\n >(\n env,\n getDeployableProtocolClient(protocol.priceFeed.Client, 'priceFeed'),\n path.join(wasmDir, 'price_feed.wasm'),\n {\n owner: env.DEFAULT_DEPLOYER.publicKey(),\n price_updater: env.DEFAULT_DEPLOYER.publicKey(),\n },\n deployer,\n { wasmHash: wasmHashes.priceFeed },\n );\n addresses.priceFeed = deployedPriceFeed.options.contractId;\n console.log(`✅ [${chainLabel}] Price Feed deployed:`, addresses.priceFeed);\n\n // 6. Deploy Executor Fee Lib\n console.log(`🚀 [${chainLabel}] Deploying Executor Fee Lib...`);\n const deployedExecutorFeeLib = await deployContract<\n ProtocolClient & { options: { contractId: string } }\n >(\n env,\n getDeployableProtocolClient(protocol.executorFeeLib.Client, 'executorFeeLib'),\n path.join(wasmDir, 'executor_fee_lib.wasm'),\n { owner: env.DEFAULT_DEPLOYER.publicKey() },\n deployer,\n { wasmHash: wasmHashes.executorFeeLib },\n );\n addresses.executorFeeLib = deployedExecutorFeeLib.options.contractId;\n console.log(`✅ [${chainLabel}] Executor Fee Lib deployed:`, addresses.executorFeeLib);\n\n // 7. Deploy DVN Fee Lib\n console.log(`🚀 [${chainLabel}] Deploying DVN Fee Lib...`);\n const deployedDvnFeeLib = await deployContract<\n ProtocolClient & { options: { contractId: string } }\n >(\n env,\n getDeployableProtocolClient(protocol.dvnFeeLib.Client, 'dvnFeeLib'),\n path.join(wasmDir, 'dvn_fee_lib.wasm'),\n { owner: env.DEFAULT_DEPLOYER.publicKey() },\n deployer,\n { wasmHash: wasmHashes.dvnFeeLib },\n );\n addresses.dvnFeeLib = deployedDvnFeeLib.options.contractId;\n console.log(`✅ [${chainLabel}] DVN Fee Lib deployed:`, addresses.dvnFeeLib);\n\n // 8. Deploy DVN (same signer for both chains)\n console.log(`🚀 [${chainLabel}] Deploying DVN...`);\n const deployedDvn = await deployContract<ProtocolClient & { options: { contractId: string } }>(\n env,\n getDeployableProtocolClient(protocol.dvn.Client, 'dvn'),\n path.join(wasmDir, 'dvn.wasm'),\n {\n vid: env.DVN_VID,\n signers: [env.DVN_SIGNER.ethAddress],\n threshold: 1,\n admins: [env.DEFAULT_DEPLOYER.publicKey()],\n supported_msglibs: [addresses.uln302],\n price_feed: addresses.priceFeed,\n default_multiplier_bps: 10000,\n worker_fee_lib: addresses.dvnFeeLib,\n deposit_address: env.DEFAULT_DEPLOYER.publicKey(),\n },\n deployer,\n { wasmHash: wasmHashes.dvn },\n );\n addresses.dvn = deployedDvn.options.contractId;\n console.log(`✅ [${chainLabel}] DVN deployed:`, addresses.dvn);\n\n // 9. Deploy Executor Helper\n console.log(`🚀 [${chainLabel}] Deploying Executor Helper...`);\n const deployedExecutorHelper = await deployContract<\n ProtocolClient & { options: { contractId: string } }\n >(\n env,\n getDeployableProtocolClient(protocol.executorHelper.Client, 'executorHelper'),\n path.join(wasmDir, 'executor_helper.wasm'),\n undefined,\n deployer,\n { wasmHash: wasmHashes.executorHelper },\n );\n addresses.executorHelper = deployedExecutorHelper.options.contractId;\n console.log(`✅ [${chainLabel}] Executor Helper deployed:`, addresses.executorHelper);\n\n // 10. Deploy Executor (supports both ULN302 and SML)\n console.log(`🚀 [${chainLabel}] Deploying Executor...`);\n const deployedExecutor = await deployContract<\n ProtocolClient & { options: { contractId: string } }\n >(\n env,\n getDeployableProtocolClient(protocol.executor.Client, 'executor'),\n path.join(wasmDir, 'executor.wasm'),\n {\n owner: env.DEFAULT_DEPLOYER.publicKey(),\n endpoint: addresses.endpointV2,\n admins: [env.EXECUTOR_ADMIN.publicKey(), env.DEFAULT_DEPLOYER.publicKey()],\n message_libs: [addresses.uln302, addresses.sml],\n price_feed: addresses.priceFeed,\n default_multiplier_bps: 10000,\n worker_fee_lib: addresses.executorFeeLib,\n deposit_address: env.DEFAULT_DEPLOYER.publicKey(),\n },\n deployer,\n { wasmHash: wasmHashes.executor },\n );\n addresses.executor = deployedExecutor.options.contractId;\n console.log(`✅ [${chainLabel}] Executor deployed:`, addresses.executor);\n\n return addresses;\n}\n\n/**\n * Register executor helper and create owner-signed clients for a chain.\n * Must be called sequentially (uses DEFAULT_DEPLOYER for signing).\n */\nasync function initChainClients(\n env: StellarTestEnv,\n protocol: ProtocolStackModules,\n addresses: ChainAddresses,\n chainLabel: string,\n): Promise<ChainSetup> {\n // Register Executor Helper with Executor (needs owner-signed client)\n console.log(`🚀 [${chainLabel}] Registering Executor Helper with Executor...`);\n const executorClient = createProtocolClient(\n env,\n protocol.executor.Client,\n addresses.executor,\n 'executor',\n );\n await (\n await executorClient.set_executor_helper({\n helper: addresses.executorHelper,\n allowed_functions: ['execute', 'compose'],\n })\n ).signAndSend();\n console.log(`✅ [${chainLabel}] Executor Helper registered`);\n\n const clients: ChainClients = {\n endpointClient: createProtocolClient(\n env,\n protocol.endpoint.Client,\n addresses.endpointV2,\n 'endpoint',\n ),\n uln302Client: createProtocolClient(env, protocol.uln302.Client, addresses.uln302, 'uln302'),\n smlClient: createProtocolClient(env, protocol.sml.Client, addresses.sml, 'sml'),\n treasuryClient: createProtocolClient(\n env,\n protocol.treasury.Client,\n addresses.treasury,\n 'treasury',\n ),\n executorClient,\n executorHelperClient: createProtocolClient(\n env,\n protocol.executorHelper.Client,\n addresses.executorHelper,\n 'executorHelper',\n ),\n executorFeeLibClient: createProtocolClient(\n env,\n protocol.executorFeeLib.Client,\n addresses.executorFeeLib,\n 'executorFeeLib',\n ),\n priceFeedClient: createProtocolClient(\n env,\n protocol.priceFeed.Client,\n addresses.priceFeed,\n 'priceFeed',\n ),\n dvnFeeLibClient: createProtocolClient(\n env,\n protocol.dvnFeeLib.Client,\n addresses.dvnFeeLib,\n 'dvnFeeLib',\n ),\n dvnClient: createProtocolClient(env, protocol.dvn.Client, addresses.dvn, 'dvn'),\n };\n\n return { addresses, clients };\n}\n\n/**\n * Wire a single chain's protocol contracts for cross-chain communication\n *\n * @param chain - The chain to wire (this chain)\n * @param otherChain - The other chain (for cross-references)\n * @param chainLabel - Label for logging\n */\nasync function wireChainContracts(\n env: StellarTestEnv,\n chain: ChainSetup,\n otherChain: ChainSetup,\n chainLabel: string,\n): Promise<void> {\n const { addresses, clients } = chain;\n const { endpointClient, uln302Client, priceFeedClient, executorClient, dvnClient } = clients;\n\n const thisEid = addresses.eid;\n const otherEid = otherChain.addresses.eid;\n\n console.log(\n `\\n🔗 [${chainLabel}] Wiring protocol contracts (EID: ${thisEid} ↔ ${otherEid})...`,\n );\n\n // Register libraries\n await (await endpointClient.register_library({ new_lib: addresses.uln302 })).signAndSend();\n await (await endpointClient.register_library({ new_lib: addresses.sml })).signAndSend();\n console.log(`✅ [${chainLabel}] Libraries registered (ULN302 + SML)`);\n\n // Set ZRO token\n await (await endpointClient.set_zro({ zro: env.ZRO_TOKEN_ADDRESS })).signAndSend();\n console.log(`✅ [${chainLabel}] ZRO token set`);\n\n // ========================================================================\n // Configure for SENDING to the other chain (dst_eid = otherEid)\n // ========================================================================\n\n // ULN302 executor config for sending to other chain\n await (\n await uln302Client.set_default_executor_configs({\n params: [\n {\n dst_eid: otherEid,\n config: { executor: addresses.executor, max_message_size: 10000 },\n },\n ],\n })\n ).signAndSend();\n console.log(`✅ [${chainLabel}] ULN302 executor config set for dst_eid=${otherEid}`);\n\n // ULN302 send config: when sending to otherEid, use THIS chain's DVN for fee quoting\n // (The DVN needs dst_config for the destination EID to calculate fees)\n await (\n await uln302Client.set_default_send_uln_configs({\n params: [\n {\n eid: otherEid,\n config: {\n confirmations: 1n,\n required_dvns: [addresses.dvn], // THIS chain's DVN (has dst_config for otherEid)\n optional_dvns: [],\n optional_dvn_threshold: 0,\n },\n },\n ],\n })\n ).signAndSend();\n console.log(\n `✅ [${chainLabel}] ULN302 send config set for eid=${otherEid} (DVN: ${addresses.dvn})`,\n );\n\n // ========================================================================\n // Configure for RECEIVING from the other chain (src_eid = otherEid)\n // ========================================================================\n\n // ULN302 receive config: when receiving from otherEid, THIS chain's DVN verifies\n await (\n await uln302Client.set_default_receive_uln_configs({\n params: [\n {\n eid: otherEid,\n config: {\n confirmations: 1n,\n required_dvns: [addresses.dvn], // THIS chain's DVN verifies incoming\n optional_dvns: [],\n optional_dvn_threshold: 0,\n },\n },\n ],\n })\n ).signAndSend();\n console.log(\n `✅ [${chainLabel}] ULN302 receive config set for eid=${otherEid} (DVN: ${addresses.dvn})`,\n );\n\n // Set default send/receive libraries for the other chain\n await (\n await endpointClient.set_default_send_library({\n dst_eid: otherEid,\n new_lib: addresses.uln302,\n })\n ).signAndSend();\n await (\n await endpointClient.set_default_receive_library({\n src_eid: otherEid,\n new_lib: addresses.uln302,\n grace_period: 0n,\n })\n ).signAndSend();\n console.log(`✅ [${chainLabel}] Default libraries set to ULN302 for eid=${otherEid}`);\n\n // ========================================================================\n // Configure Price Feed for both chains\n // ========================================================================\n\n await (\n await priceFeedClient.set_price_ratio_denominator({ denominator: 100000000000000000000n })\n ).signAndSend();\n await (\n await priceFeedClient.set_native_token_price_usd({\n price_updater: env.DEFAULT_DEPLOYER.publicKey(),\n native_token_price_usd: 1000000000000000000n,\n })\n ).signAndSend();\n\n // Set prices for the other chain\n const NORMALIZED_OTHER_EID = otherEid % 30000;\n await (\n await priceFeedClient.set_price({\n price_updater: env.DEFAULT_DEPLOYER.publicKey(),\n prices: [\n {\n eid: NORMALIZED_OTHER_EID,\n price: {\n gas_per_byte: 1,\n gas_price_in_unit: 1n,\n price_ratio: 100000000000000000000n,\n },\n },\n ],\n })\n ).signAndSend();\n console.log(`✅ [${chainLabel}] Price Feed configured for eid=${otherEid}`);\n\n // ========================================================================\n // Configure Executor for sending to other chain\n // ========================================================================\n\n await (\n await executorClient.set_dst_config({\n admin: env.DEFAULT_DEPLOYER.publicKey(),\n params: [\n {\n dst_eid: otherEid,\n dst_config: {\n floor_margin_usd: 0n,\n lz_compose_base_gas: 50000n,\n lz_receive_base_gas: 100000n,\n multiplier_bps: 10000,\n native_cap: 1000000000000n,\n },\n },\n ],\n })\n ).signAndSend();\n console.log(`✅ [${chainLabel}] Executor configured for dst_eid=${otherEid}`);\n\n // ========================================================================\n // Configure DVN for verifying packets going to other chain\n // ========================================================================\n\n await (\n await dvnClient.set_dst_config({\n admin: env.DEFAULT_DEPLOYER.publicKey(),\n params: [\n {\n dst_eid: otherEid,\n config: {\n floor_margin_usd: 0n,\n gas: 100000n,\n multiplier_bps: 10000,\n },\n },\n ],\n })\n ).signAndSend();\n console.log(`✅ [${chainLabel}] DVN configured for dst_eid=${otherEid}`);\n\n console.log(`🎉 [${chainLabel}] Protocol wiring complete!`);\n}\n\nexport interface ProtocolStackGlobalSetupOptions {\n /**\n * Directory containing protocol WASM artifacts, or an async resolver.\n * Consumers typically resolve via getFullyQualifiedRepoRootPath.\n */\n wasmDir: string | (() => string | Promise<string>);\n /**\n * Protocol contract modules from `@layerzerolabs/lz-v2-stellar-sdk`.\n * Passed by the consumer to avoid a workspace dependency cycle.\n */\n protocol: ProtocolStackModules;\n}\n\n/**\n * Returns a Vitest globalSetup that deploys two protocol stacks and wires them.\n */\nexport function createProtocolStackGlobalSetup(\n env: StellarTestEnv,\n options: ProtocolStackGlobalSetupOptions,\n): (ctx: ProtocolGlobalSetupContext) => Promise<() => Promise<void>> {\n return async function globalSetup({\n provide,\n }: ProtocolGlobalSetupContext): Promise<() => Promise<void>> {\n console.log('\\n========================================');\n console.log('🌐 GLOBAL SETUP: Starting Stellar Localnet');\n console.log('========================================\\n');\n\n await startStellarLocalnet({ env });\n\n try {\n const wasmDir =\n typeof options.wasmDir === 'function' ? await options.wasmDir() : options.wasmDir;\n\n console.log('\\n========================================');\n console.log('📤 GLOBAL SETUP: Uploading WASM (once)');\n console.log('========================================\\n');\n\n const wasmHashes = await uploadAllWasms(env, wasmDir);\n\n console.log('\\n========================================');\n console.log('📦 GLOBAL SETUP: Deploying Protocol Contracts (Two Chains in Parallel)');\n console.log('========================================\\n');\n\n const { protocol } = options;\n\n const [addressesA, addressesB] = await Promise.all([\n deployChainContracts(\n env,\n protocol,\n env.EID_A,\n 'Chain A',\n env.DEFAULT_DEPLOYER,\n wasmDir,\n wasmHashes,\n ),\n deployChainContracts(\n env,\n protocol,\n env.EID_B,\n 'Chain B',\n env.CHAIN_B_DEPLOYER,\n wasmDir,\n wasmHashes,\n ),\n ]);\n\n const chainA = await initChainClients(env, protocol, addressesA, 'Chain A');\n const chainB = await initChainClients(env, protocol, addressesB, 'Chain B');\n\n console.log('\\n========================================');\n console.log('🔗 GLOBAL SETUP: Wiring Protocol Contracts (Cross-Chain)');\n console.log('========================================\\n');\n\n await wireChainContracts(env, chainA, chainB, 'Chain A');\n await wireChainContracts(env, chainB, chainA, 'Chain B');\n\n provide('chainA', chainA.addresses);\n provide('chainB', chainB.addresses);\n console.log('\\n✅ Chain addresses provided to tests (in-memory)');\n console.log(' Chain A (EID ' + env.EID_A + '):', chainA.addresses.endpointV2);\n console.log(' Chain B (EID ' + env.EID_B + '):', chainB.addresses.endpointV2);\n\n console.log('\\n========================================');\n console.log('✅ GLOBAL SETUP COMPLETE (Two-Chain Cross-Chain Ready)');\n console.log('========================================\\n');\n } catch (error) {\n await stopStellarLocalnet({ env });\n throw error;\n }\n\n return async () => {\n console.log('\\n========================================');\n console.log('🛑 GLOBAL TEARDOWN: Stopping Stellar Localnet');\n console.log('========================================\\n');\n\n await stopStellarLocalnet({ env });\n };\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/protocol-global-setup.ts"],"names":["getProtocolClientConstructor","client","moduleName","TypeError","getDeployableProtocolClient","deploy","createProtocolClient","env","contractId","createClient","uploadAllWasms","wasmDir","server","rpc","Server","RPC_URL","allowHttp","wasmFiles","endpoint","treasury","uln302","sml","priceFeed","executorFeeLib","dvnFeeLib","dvn","executorHelper","executor","hashes","name","file","Object","entries","wasmBuffer","readFileSync","path","join","console","log","length","toFixed","uploadWasm","DEFAULT_DEPLOYER","deployChainContracts","protocol","eid","chainLabel","deployer","wasmHashes","addresses","endpointV2","deployedEndpoint","deployContract","Client","owner","publicKey","native_token","NATIVE_TOKEN_ADDRESS","wasmHash","options","deployedTreasury","deployedUln302","deployedSml","fee_recipient","deployedPriceFeed","price_updater","deployedExecutorFeeLib","deployedDvnFeeLib","deployedDvn","vid","DVN_VID","signers","DVN_SIGNER","ethAddress","threshold","admins","supported_msglibs","price_feed","default_multiplier_bps","worker_fee_lib","deposit_address","deployedExecutorHelper","undefined","deployedExecutor","EXECUTOR_ADMIN","message_libs","initChainClients","executorClient","set_executor_helper","helper","allowed_functions","signAndSend","clients","endpointClient","uln302Client","smlClient","treasuryClient","executorHelperClient","executorFeeLibClient","priceFeedClient","dvnFeeLibClient","dvnClient","wireChainContracts","chain","otherChain","thisEid","otherEid","register_library","new_lib","set_zro","zro","ZRO_TOKEN_ADDRESS","set_default_executor_configs","params","dst_eid","config","max_message_size","set_default_send_uln_configs","confirmations","required_dvns","optional_dvns","optional_dvn_threshold","set_default_receive_uln_configs","set_default_send_library","set_default_receive_library","src_eid","grace_period","set_price_ratio_denominator","denominator","set_native_token_price_usd","native_token_price_usd","NORMALIZED_OTHER_EID","set_price","prices","price","gas_per_byte","gas_price_in_unit","price_ratio","set_dst_config","admin","dst_config","floor_margin_usd","lz_compose_base_gas","lz_receive_base_gas","multiplier_bps","native_cap","gas","createProtocolStackGlobalSetup","globalSetup","provide","startStellarLocalnet","addressesA","addressesB","Promise","all","EID_A","EID_B","CHAIN_B_DEPLOYER","chainA","chainB","error","stopStellarLocalnet"],"mappings":"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","file":"NLZSE6LF.js","sourcesContent":["import type { Keypair } from '@stellar/stellar-sdk';\nimport { rpc } from '@stellar/stellar-sdk';\nimport { readFileSync } from 'fs';\nimport path from 'path';\n\nimport { createClient } from './client.js';\nimport { type DeployableContractClient, deployContract, uploadWasm } from './deploy.js';\nimport type { StellarTestEnv } from './env.js';\nimport { startStellarLocalnet, stopStellarLocalnet } from './localnet.js';\n\n/** Vitest globalSetup context subset (avoids a hard vitest type dependency in src/). */\nexport type ProtocolGlobalSetupContext = {\n provide: (key: 'chainA' | 'chainB', value: ChainAddresses) => void;\n};\n\ntype SigningTransaction = {\n signAndSend: () => Promise<unknown>;\n};\n\n/**\n * Generated Soroban clients expose asynchronous methods that construct a signable transaction.\n * Their method names and argument types remain owned by the generated SDK.\n */\ntype ProtocolClient = Record<string, (args: object) => Promise<SigningTransaction>>;\n\ntype ProtocolClientConstructor<TClient extends ProtocolClient> = new (options: {\n contractId: string;\n publicKey: string;\n signTransaction: (tx: string) => Promise<{ signedTxXdr: string; signerAddress: string }>;\n rpcUrl: string;\n networkPassphrase: string;\n allowHttp: boolean;\n}) => TClient;\n\nexport interface ProtocolContractModule {\n /** The generated SDK Client constructor. Validated at the adapter boundary before use. */\n Client: unknown;\n}\n\n/**\n * Protocol contract modules from `@layerzerolabs/lz-v2-stellar-sdk`.\n * Injected by consumers to avoid a workspace cycle (test-utils ↔ sdk).\n */\nexport interface ProtocolStackModules {\n endpoint: ProtocolContractModule;\n treasury: ProtocolContractModule;\n uln302: ProtocolContractModule;\n sml: ProtocolContractModule;\n priceFeed: ProtocolContractModule;\n executorFeeLib: ProtocolContractModule;\n dvnFeeLib: ProtocolContractModule;\n dvn: ProtocolContractModule;\n executorHelper: ProtocolContractModule;\n executor: ProtocolContractModule;\n}\n\n/**\n * Addresses for a single chain's protocol contracts\n */\nexport interface ChainAddresses {\n eid: number;\n endpointV2: string;\n uln302: string;\n sml: string;\n treasury: string;\n executor: string;\n executorHelper: string;\n executorFeeLib: string;\n priceFeed: string;\n dvnFeeLib: string;\n dvn: string;\n}\n\n/**\n * Clients for a single chain's protocol contracts\n */\ninterface ChainClients {\n endpointClient: ProtocolClient;\n uln302Client: ProtocolClient;\n smlClient: ProtocolClient;\n treasuryClient: ProtocolClient;\n executorClient: ProtocolClient;\n executorHelperClient: ProtocolClient;\n executorFeeLibClient: ProtocolClient;\n priceFeedClient: ProtocolClient;\n dvnFeeLibClient: ProtocolClient;\n dvnClient: ProtocolClient;\n}\n\n/**\n * Complete chain setup with addresses and clients\n */\ninterface ChainSetup {\n addresses: ChainAddresses;\n clients: ChainClients;\n}\n\ninterface WasmHashes {\n endpoint: string;\n treasury: string;\n uln302: string;\n sml: string;\n priceFeed: string;\n executorFeeLib: string;\n dvnFeeLib: string;\n dvn: string;\n executorHelper: string;\n executor: string;\n}\n\nfunction getProtocolClientConstructor<TClient extends ProtocolClient>(\n client: unknown,\n moduleName: string,\n): ProtocolClientConstructor<TClient> {\n if (typeof client !== 'function') {\n throw new TypeError(`${moduleName}.Client must be a generated contract client constructor`);\n }\n return client as ProtocolClientConstructor<TClient>;\n}\n\nfunction getDeployableProtocolClient<TClient extends { options: { contractId: string } }>(\n client: unknown,\n moduleName: string,\n): DeployableContractClient<TClient> {\n if (\n typeof client !== 'function' ||\n !('deploy' in client) ||\n typeof client.deploy !== 'function'\n ) {\n throw new TypeError(`${moduleName}.Client must expose a deploy method`);\n }\n return client as DeployableContractClient<TClient>;\n}\n\nfunction createProtocolClient(\n env: StellarTestEnv,\n client: unknown,\n contractId: string,\n moduleName: string,\n): ProtocolClient {\n return createClient(\n env,\n getProtocolClientConstructor<ProtocolClient>(client, moduleName),\n contractId,\n );\n}\n\n/**\n * Upload all protocol WASM files once and return their hashes.\n */\nasync function uploadAllWasms(env: StellarTestEnv, wasmDir: string): Promise<WasmHashes> {\n const server = new rpc.Server(env.RPC_URL, { allowHttp: true });\n\n const wasmFiles = {\n endpoint: 'endpoint_v2.wasm',\n treasury: 'treasury.wasm',\n uln302: 'uln302.wasm',\n sml: 'simple_message_lib.wasm',\n priceFeed: 'price_feed.wasm',\n executorFeeLib: 'executor_fee_lib.wasm',\n dvnFeeLib: 'dvn_fee_lib.wasm',\n dvn: 'dvn.wasm',\n executorHelper: 'executor_helper.wasm',\n executor: 'executor.wasm',\n };\n\n const hashes: Record<string, string> = {};\n for (const [name, file] of Object.entries(wasmFiles)) {\n const wasmBuffer = readFileSync(path.join(wasmDir, file));\n console.log(`📤 Uploading ${name} WASM (${(wasmBuffer.length / 1024).toFixed(1)} KB)...`);\n hashes[name] = await uploadWasm(env, wasmBuffer, env.DEFAULT_DEPLOYER, server);\n }\n\n return hashes as unknown as WasmHashes;\n}\n\n/**\n * Deploy all protocol contracts for a single chain using pre-uploaded WASM hashes.\n * The deployer pays gas; contract ownership is always DEFAULT_DEPLOYER.\n */\nasync function deployChainContracts(\n env: StellarTestEnv,\n protocol: ProtocolStackModules,\n eid: number,\n chainLabel: string,\n deployer: Keypair,\n wasmDir: string,\n wasmHashes: WasmHashes,\n): Promise<ChainAddresses> {\n const addresses: ChainAddresses = {\n eid,\n endpointV2: '',\n uln302: '',\n sml: '',\n treasury: '',\n executor: '',\n executorHelper: '',\n executorFeeLib: '',\n priceFeed: '',\n dvnFeeLib: '',\n dvn: '',\n };\n\n // 1. Deploy Endpoint\n console.log(`🚀 [${chainLabel}] Deploying Endpoint (EID: ${eid})...`);\n const deployedEndpoint = await deployContract<\n ProtocolClient & { options: { contractId: string } }\n >(\n env,\n getDeployableProtocolClient(protocol.endpoint.Client, 'endpoint'),\n path.join(wasmDir, 'endpoint_v2.wasm'),\n {\n eid,\n owner: env.DEFAULT_DEPLOYER.publicKey(),\n native_token: env.NATIVE_TOKEN_ADDRESS,\n },\n deployer,\n { wasmHash: wasmHashes.endpoint },\n );\n addresses.endpointV2 = deployedEndpoint.options.contractId;\n console.log(`✅ [${chainLabel}] Endpoint deployed:`, addresses.endpointV2);\n\n // 2. Deploy Treasury\n console.log(`🚀 [${chainLabel}] Deploying Treasury...`);\n const deployedTreasury = await deployContract<\n ProtocolClient & { options: { contractId: string } }\n >(\n env,\n getDeployableProtocolClient(protocol.treasury.Client, 'treasury'),\n path.join(wasmDir, 'treasury.wasm'),\n { owner: env.DEFAULT_DEPLOYER.publicKey() },\n deployer,\n { wasmHash: wasmHashes.treasury },\n );\n addresses.treasury = deployedTreasury.options.contractId;\n console.log(`✅ [${chainLabel}] Treasury deployed:`, addresses.treasury);\n\n // 3. Deploy ULN302\n console.log(`🚀 [${chainLabel}] Deploying ULN302...`);\n const deployedUln302 = await deployContract<\n ProtocolClient & { options: { contractId: string } }\n >(\n env,\n getDeployableProtocolClient(protocol.uln302.Client, 'uln302'),\n path.join(wasmDir, 'uln302.wasm'),\n {\n owner: env.DEFAULT_DEPLOYER.publicKey(),\n endpoint: addresses.endpointV2,\n treasury: addresses.treasury,\n },\n deployer,\n { wasmHash: wasmHashes.uln302 },\n );\n addresses.uln302 = deployedUln302.options.contractId;\n console.log(`✅ [${chainLabel}] ULN302 deployed:`, addresses.uln302);\n\n // 4. Deploy SML (SimpleMessageLib)\n console.log(`🚀 [${chainLabel}] Deploying SimpleMessageLib...`);\n const deployedSml = await deployContract<ProtocolClient & { options: { contractId: string } }>(\n env,\n getDeployableProtocolClient(protocol.sml.Client, 'sml'),\n path.join(wasmDir, 'simple_message_lib.wasm'),\n {\n owner: env.DEFAULT_DEPLOYER.publicKey(),\n endpoint: addresses.endpointV2,\n fee_recipient: env.DEFAULT_DEPLOYER.publicKey(),\n },\n deployer,\n { wasmHash: wasmHashes.sml },\n );\n addresses.sml = deployedSml.options.contractId;\n console.log(`✅ [${chainLabel}] SimpleMessageLib deployed:`, addresses.sml);\n\n // 5. Deploy Price Feed\n console.log(`🚀 [${chainLabel}] Deploying Price Feed...`);\n const deployedPriceFeed = await deployContract<\n ProtocolClient & { options: { contractId: string } }\n >(\n env,\n getDeployableProtocolClient(protocol.priceFeed.Client, 'priceFeed'),\n path.join(wasmDir, 'price_feed.wasm'),\n {\n owner: env.DEFAULT_DEPLOYER.publicKey(),\n price_updater: env.DEFAULT_DEPLOYER.publicKey(),\n },\n deployer,\n { wasmHash: wasmHashes.priceFeed },\n );\n addresses.priceFeed = deployedPriceFeed.options.contractId;\n console.log(`✅ [${chainLabel}] Price Feed deployed:`, addresses.priceFeed);\n\n // 6. Deploy Executor Fee Lib\n console.log(`🚀 [${chainLabel}] Deploying Executor Fee Lib...`);\n const deployedExecutorFeeLib = await deployContract<\n ProtocolClient & { options: { contractId: string } }\n >(\n env,\n getDeployableProtocolClient(protocol.executorFeeLib.Client, 'executorFeeLib'),\n path.join(wasmDir, 'executor_fee_lib.wasm'),\n { owner: env.DEFAULT_DEPLOYER.publicKey() },\n deployer,\n { wasmHash: wasmHashes.executorFeeLib },\n );\n addresses.executorFeeLib = deployedExecutorFeeLib.options.contractId;\n console.log(`✅ [${chainLabel}] Executor Fee Lib deployed:`, addresses.executorFeeLib);\n\n // 7. Deploy DVN Fee Lib\n console.log(`🚀 [${chainLabel}] Deploying DVN Fee Lib...`);\n const deployedDvnFeeLib = await deployContract<\n ProtocolClient & { options: { contractId: string } }\n >(\n env,\n getDeployableProtocolClient(protocol.dvnFeeLib.Client, 'dvnFeeLib'),\n path.join(wasmDir, 'dvn_fee_lib.wasm'),\n { owner: env.DEFAULT_DEPLOYER.publicKey() },\n deployer,\n { wasmHash: wasmHashes.dvnFeeLib },\n );\n addresses.dvnFeeLib = deployedDvnFeeLib.options.contractId;\n console.log(`✅ [${chainLabel}] DVN Fee Lib deployed:`, addresses.dvnFeeLib);\n\n // 8. Deploy DVN (same signer for both chains)\n console.log(`🚀 [${chainLabel}] Deploying DVN...`);\n const deployedDvn = await deployContract<ProtocolClient & { options: { contractId: string } }>(\n env,\n getDeployableProtocolClient(protocol.dvn.Client, 'dvn'),\n path.join(wasmDir, 'dvn.wasm'),\n {\n vid: env.DVN_VID,\n signers: [env.DVN_SIGNER.ethAddress],\n threshold: 1,\n admins: [env.DEFAULT_DEPLOYER.publicKey()],\n supported_msglibs: [addresses.uln302],\n price_feed: addresses.priceFeed,\n default_multiplier_bps: 10000,\n worker_fee_lib: addresses.dvnFeeLib,\n deposit_address: env.DEFAULT_DEPLOYER.publicKey(),\n },\n deployer,\n { wasmHash: wasmHashes.dvn },\n );\n addresses.dvn = deployedDvn.options.contractId;\n console.log(`✅ [${chainLabel}] DVN deployed:`, addresses.dvn);\n\n // 9. Deploy Executor Helper\n console.log(`🚀 [${chainLabel}] Deploying Executor Helper...`);\n const deployedExecutorHelper = await deployContract<\n ProtocolClient & { options: { contractId: string } }\n >(\n env,\n getDeployableProtocolClient(protocol.executorHelper.Client, 'executorHelper'),\n path.join(wasmDir, 'executor_helper.wasm'),\n undefined,\n deployer,\n { wasmHash: wasmHashes.executorHelper },\n );\n addresses.executorHelper = deployedExecutorHelper.options.contractId;\n console.log(`✅ [${chainLabel}] Executor Helper deployed:`, addresses.executorHelper);\n\n // 10. Deploy Executor (supports both ULN302 and SML)\n console.log(`🚀 [${chainLabel}] Deploying Executor...`);\n const deployedExecutor = await deployContract<\n ProtocolClient & { options: { contractId: string } }\n >(\n env,\n getDeployableProtocolClient(protocol.executor.Client, 'executor'),\n path.join(wasmDir, 'executor.wasm'),\n {\n owner: env.DEFAULT_DEPLOYER.publicKey(),\n endpoint: addresses.endpointV2,\n admins: [env.EXECUTOR_ADMIN.publicKey(), env.DEFAULT_DEPLOYER.publicKey()],\n message_libs: [addresses.uln302, addresses.sml],\n price_feed: addresses.priceFeed,\n default_multiplier_bps: 10000,\n worker_fee_lib: addresses.executorFeeLib,\n deposit_address: env.DEFAULT_DEPLOYER.publicKey(),\n },\n deployer,\n { wasmHash: wasmHashes.executor },\n );\n addresses.executor = deployedExecutor.options.contractId;\n console.log(`✅ [${chainLabel}] Executor deployed:`, addresses.executor);\n\n return addresses;\n}\n\n/**\n * Register executor helper and create owner-signed clients for a chain.\n * Must be called sequentially (uses DEFAULT_DEPLOYER for signing).\n */\nasync function initChainClients(\n env: StellarTestEnv,\n protocol: ProtocolStackModules,\n addresses: ChainAddresses,\n chainLabel: string,\n): Promise<ChainSetup> {\n // Register Executor Helper with Executor (needs owner-signed client)\n console.log(`🚀 [${chainLabel}] Registering Executor Helper with Executor...`);\n const executorClient = createProtocolClient(\n env,\n protocol.executor.Client,\n addresses.executor,\n 'executor',\n );\n await (\n await executorClient.set_executor_helper({\n helper: addresses.executorHelper,\n allowed_functions: ['execute', 'compose'],\n })\n ).signAndSend();\n console.log(`✅ [${chainLabel}] Executor Helper registered`);\n\n const clients: ChainClients = {\n endpointClient: createProtocolClient(\n env,\n protocol.endpoint.Client,\n addresses.endpointV2,\n 'endpoint',\n ),\n uln302Client: createProtocolClient(env, protocol.uln302.Client, addresses.uln302, 'uln302'),\n smlClient: createProtocolClient(env, protocol.sml.Client, addresses.sml, 'sml'),\n treasuryClient: createProtocolClient(\n env,\n protocol.treasury.Client,\n addresses.treasury,\n 'treasury',\n ),\n executorClient,\n executorHelperClient: createProtocolClient(\n env,\n protocol.executorHelper.Client,\n addresses.executorHelper,\n 'executorHelper',\n ),\n executorFeeLibClient: createProtocolClient(\n env,\n protocol.executorFeeLib.Client,\n addresses.executorFeeLib,\n 'executorFeeLib',\n ),\n priceFeedClient: createProtocolClient(\n env,\n protocol.priceFeed.Client,\n addresses.priceFeed,\n 'priceFeed',\n ),\n dvnFeeLibClient: createProtocolClient(\n env,\n protocol.dvnFeeLib.Client,\n addresses.dvnFeeLib,\n 'dvnFeeLib',\n ),\n dvnClient: createProtocolClient(env, protocol.dvn.Client, addresses.dvn, 'dvn'),\n };\n\n return { addresses, clients };\n}\n\n/**\n * Wire a single chain's protocol contracts for cross-chain communication\n *\n * @param chain - The chain to wire (this chain)\n * @param otherChain - The other chain (for cross-references)\n * @param chainLabel - Label for logging\n */\nasync function wireChainContracts(\n env: StellarTestEnv,\n chain: ChainSetup,\n otherChain: ChainSetup,\n chainLabel: string,\n): Promise<void> {\n const { addresses, clients } = chain;\n const { endpointClient, uln302Client, priceFeedClient, executorClient, dvnClient } = clients;\n\n const thisEid = addresses.eid;\n const otherEid = otherChain.addresses.eid;\n\n console.log(\n `\\n🔗 [${chainLabel}] Wiring protocol contracts (EID: ${thisEid} ↔ ${otherEid})...`,\n );\n\n // Register libraries\n await (await endpointClient.register_library({ new_lib: addresses.uln302 })).signAndSend();\n await (await endpointClient.register_library({ new_lib: addresses.sml })).signAndSend();\n console.log(`✅ [${chainLabel}] Libraries registered (ULN302 + SML)`);\n\n // Set ZRO token\n await (await endpointClient.set_zro({ zro: env.ZRO_TOKEN_ADDRESS })).signAndSend();\n console.log(`✅ [${chainLabel}] ZRO token set`);\n\n // ========================================================================\n // Configure for SENDING to the other chain (dst_eid = otherEid)\n // ========================================================================\n\n // ULN302 executor config for sending to other chain\n await (\n await uln302Client.set_default_executor_configs({\n params: [\n {\n dst_eid: otherEid,\n config: { executor: addresses.executor, max_message_size: 10000 },\n },\n ],\n })\n ).signAndSend();\n console.log(`✅ [${chainLabel}] ULN302 executor config set for dst_eid=${otherEid}`);\n\n // ULN302 send config: when sending to otherEid, use THIS chain's DVN for fee quoting\n // (The DVN needs dst_config for the destination EID to calculate fees)\n await (\n await uln302Client.set_default_send_uln_configs({\n params: [\n {\n eid: otherEid,\n config: {\n confirmations: 1n,\n required_dvns: [addresses.dvn], // THIS chain's DVN (has dst_config for otherEid)\n optional_dvns: [],\n optional_dvn_threshold: 0,\n },\n },\n ],\n })\n ).signAndSend();\n console.log(\n `✅ [${chainLabel}] ULN302 send config set for eid=${otherEid} (DVN: ${addresses.dvn})`,\n );\n\n // ========================================================================\n // Configure for RECEIVING from the other chain (src_eid = otherEid)\n // ========================================================================\n\n // ULN302 receive config: when receiving from otherEid, THIS chain's DVN verifies\n await (\n await uln302Client.set_default_receive_uln_configs({\n params: [\n {\n eid: otherEid,\n config: {\n confirmations: 1n,\n required_dvns: [addresses.dvn], // THIS chain's DVN verifies incoming\n optional_dvns: [],\n optional_dvn_threshold: 0,\n },\n },\n ],\n })\n ).signAndSend();\n console.log(\n `✅ [${chainLabel}] ULN302 receive config set for eid=${otherEid} (DVN: ${addresses.dvn})`,\n );\n\n // Set default send/receive libraries for the other chain\n await (\n await endpointClient.set_default_send_library({\n dst_eid: otherEid,\n new_lib: addresses.uln302,\n })\n ).signAndSend();\n await (\n await endpointClient.set_default_receive_library({\n src_eid: otherEid,\n new_lib: addresses.uln302,\n grace_period: 0n,\n })\n ).signAndSend();\n console.log(`✅ [${chainLabel}] Default libraries set to ULN302 for eid=${otherEid}`);\n\n // ========================================================================\n // Configure Price Feed for both chains\n // ========================================================================\n\n await (\n await priceFeedClient.set_price_ratio_denominator({ denominator: 100000000000000000000n })\n ).signAndSend();\n await (\n await priceFeedClient.set_native_token_price_usd({\n price_updater: env.DEFAULT_DEPLOYER.publicKey(),\n native_token_price_usd: 1000000000000000000n,\n })\n ).signAndSend();\n\n // Set prices for the other chain\n const NORMALIZED_OTHER_EID = otherEid % 30000;\n await (\n await priceFeedClient.set_price({\n price_updater: env.DEFAULT_DEPLOYER.publicKey(),\n prices: [\n {\n eid: NORMALIZED_OTHER_EID,\n price: {\n gas_per_byte: 1,\n gas_price_in_unit: 1n,\n price_ratio: 100000000000000000000n,\n },\n },\n ],\n })\n ).signAndSend();\n console.log(`✅ [${chainLabel}] Price Feed configured for eid=${otherEid}`);\n\n // ========================================================================\n // Configure Executor for sending to other chain\n // ========================================================================\n\n await (\n await executorClient.set_dst_config({\n admin: env.DEFAULT_DEPLOYER.publicKey(),\n params: [\n {\n dst_eid: otherEid,\n dst_config: {\n floor_margin_usd: 0n,\n lz_compose_base_gas: 50000n,\n lz_receive_base_gas: 100000n,\n multiplier_bps: 10000,\n native_cap: 1000000000000n,\n },\n },\n ],\n })\n ).signAndSend();\n console.log(`✅ [${chainLabel}] Executor configured for dst_eid=${otherEid}`);\n\n // ========================================================================\n // Configure DVN for verifying packets going to other chain\n // ========================================================================\n\n await (\n await dvnClient.set_dst_config({\n admin: env.DEFAULT_DEPLOYER.publicKey(),\n params: [\n {\n dst_eid: otherEid,\n config: {\n floor_margin_usd: 0n,\n gas: 100000n,\n multiplier_bps: 10000,\n },\n },\n ],\n })\n ).signAndSend();\n console.log(`✅ [${chainLabel}] DVN configured for dst_eid=${otherEid}`);\n\n console.log(`🎉 [${chainLabel}] Protocol wiring complete!`);\n}\n\nexport interface ProtocolStackGlobalSetupOptions {\n /**\n * Directory containing protocol WASM artifacts, or an async resolver.\n * Consumers typically resolve via getFullyQualifiedRepoRootPath.\n */\n wasmDir: string | (() => string | Promise<string>);\n /**\n * Protocol contract modules from `@layerzerolabs/lz-v2-stellar-sdk`.\n * Passed by the consumer to avoid a workspace dependency cycle.\n */\n protocol: ProtocolStackModules;\n}\n\n/**\n * Returns a Vitest globalSetup that deploys two protocol stacks and wires them.\n */\nexport function createProtocolStackGlobalSetup(\n env: StellarTestEnv,\n options: ProtocolStackGlobalSetupOptions,\n): (ctx: ProtocolGlobalSetupContext) => Promise<() => Promise<void>> {\n return async function globalSetup({\n provide,\n }: ProtocolGlobalSetupContext): Promise<() => Promise<void>> {\n console.log('\\n========================================');\n console.log('🌐 GLOBAL SETUP: Starting Stellar Localnet');\n console.log('========================================\\n');\n\n await startStellarLocalnet({ env });\n\n try {\n const wasmDir =\n typeof options.wasmDir === 'function' ? await options.wasmDir() : options.wasmDir;\n\n console.log('\\n========================================');\n console.log('📤 GLOBAL SETUP: Uploading WASM (once)');\n console.log('========================================\\n');\n\n const wasmHashes = await uploadAllWasms(env, wasmDir);\n\n console.log('\\n========================================');\n console.log('📦 GLOBAL SETUP: Deploying Protocol Contracts (Two Chains in Parallel)');\n console.log('========================================\\n');\n\n const { protocol } = options;\n\n const [addressesA, addressesB] = await Promise.all([\n deployChainContracts(\n env,\n protocol,\n env.EID_A,\n 'Chain A',\n env.DEFAULT_DEPLOYER,\n wasmDir,\n wasmHashes,\n ),\n deployChainContracts(\n env,\n protocol,\n env.EID_B,\n 'Chain B',\n env.CHAIN_B_DEPLOYER,\n wasmDir,\n wasmHashes,\n ),\n ]);\n\n const chainA = await initChainClients(env, protocol, addressesA, 'Chain A');\n const chainB = await initChainClients(env, protocol, addressesB, 'Chain B');\n\n console.log('\\n========================================');\n console.log('🔗 GLOBAL SETUP: Wiring Protocol Contracts (Cross-Chain)');\n console.log('========================================\\n');\n\n await wireChainContracts(env, chainA, chainB, 'Chain A');\n await wireChainContracts(env, chainB, chainA, 'Chain B');\n\n provide('chainA', chainA.addresses);\n provide('chainB', chainB.addresses);\n console.log('\\n✅ Chain addresses provided to tests (in-memory)');\n console.log(' Chain A (EID ' + env.EID_A + '):', chainA.addresses.endpointV2);\n console.log(' Chain B (EID ' + env.EID_B + '):', chainB.addresses.endpointV2);\n\n console.log('\\n========================================');\n console.log('✅ GLOBAL SETUP COMPLETE (Two-Chain Cross-Chain Ready)');\n console.log('========================================\\n');\n } catch (error) {\n await stopStellarLocalnet({ env });\n throw error;\n }\n\n return async () => {\n console.log('\\n========================================');\n console.log('🛑 GLOBAL TEARDOWN: Stopping Stellar Localnet');\n console.log('========================================\\n');\n\n await stopStellarLocalnet({ env });\n };\n };\n}\n"]}
@@ -179,5 +179,5 @@ async function deployAssetSac(env, asset) {
179
179
  __name(deployAssetSac, "deployAssetSac");
180
180
 
181
181
  export { deployAssetSac, deployContract, deployNativeSac, deployZroToken, uploadWasm };
182
- //# sourceMappingURL=TYAJMKGY.js.map
183
- //# sourceMappingURL=TYAJMKGY.js.map
182
+ //# sourceMappingURL=SU67PCBT.js.map
183
+ //# sourceMappingURL=SU67PCBT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/deploy.ts"],"names":["queryWasmTtl","env","wasmHash","server","latestLedger","getLatestLedger","currentLedger","sequence","wasmHashBuffer","Buffer","from","hashBytes","length","slice","ledgerKeyContractCode","xdr","LedgerKeyContractCode","hash","ledgerKey","LedgerKey","contractCode","ledgerKeyXdr","toXDR","response","fetch","RPC_URL","method","headers","body","JSON","stringify","jsonrpc","id","params","keys","result","json","error","console","warn","message","entries","liveUntilLedgerSeq","ttlLedgers","ttlDays","log","toFixed","Error","String","uploadWasm","wasmBuffer","keypair","account","getAccount","publicKey","uploadTx","TransactionBuilder","fee","BASE_FEE","networkPassphrase","NETWORK_PASSPHRASE","addOperation","Operation","uploadContractWasm","wasm","setTimeout","build","simulated","simulateTransaction","preparedTx","rpc","assembleTransaction","Number","sign","sendResult","sendTransaction","status","txResult","pollTransaction","toString","deployContract","ClientClass","wasmFilePath","constructorArgs","deployer","options","rpcUrl","allowHttp","salt","Server","readFileSync","deployOptions","signTransaction","tx","transaction","fromXDR","signedTxXdr","signerAddress","deployTx","deploy","sentTx","signAndSend","contractClient","contractId","deployNativeSac","deployAssetSac","Asset","native","deployZroToken","DEFAULT_DEPLOYER","changeTrust","asset","ZRO_ASSET","source","ZRO_DISTRIBUTOR","payment","amount","destination","createStellarAssetContract","Api","isSimulationError","includes"],"mappings":"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","file":"SU67PCBT.js","sourcesContent":["import type { Keypair } from '@stellar/stellar-sdk';\nimport {\n Asset,\n BASE_FEE,\n hash,\n Operation,\n rpc,\n TransactionBuilder,\n xdr,\n} from '@stellar/stellar-sdk';\nimport { readFileSync } from 'fs';\n\nimport type { StellarTestEnv } from './env.js';\n\nexport interface DeployableContractClient<T extends { options: { contractId: string } }> {\n deploy(\n argsOrOptions: unknown,\n options?: unknown,\n ): Promise<{ signAndSend: () => Promise<{ result: T }> }>;\n}\n\n/**\n * Query and display the TTL (Time To Live) of uploaded WASM code.\n *\n * @param env - Stellar test environment (RPC URL, etc.)\n * @param wasmHash - The hex-encoded SHA-256 hash of the WASM code\n * @param server - The Stellar RPC server instance\n */\nasync function queryWasmTtl(\n env: StellarTestEnv,\n wasmHash: string,\n server: rpc.Server,\n): Promise<void> {\n try {\n const latestLedger = await server.getLatestLedger();\n const currentLedger = latestLedger.sequence;\n\n // Create the LedgerKey for contract code using XDR encoding\n const wasmHashBuffer = Buffer.from(wasmHash, 'hex');\n // Ensure hash is exactly 32 bytes\n const hashBytes =\n wasmHashBuffer.length === 32 ? wasmHashBuffer : wasmHashBuffer.slice(0, 32);\n // Create LedgerKeyContractCode with hash\n const ledgerKeyContractCode = new xdr.LedgerKeyContractCode({\n hash: hashBytes,\n });\n const ledgerKey = xdr.LedgerKey.contractCode(ledgerKeyContractCode);\n const ledgerKeyXdr = ledgerKey.toXDR('base64');\n\n // Query contract code entry using direct RPC call\n const response = await fetch(env.RPC_URL, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: 1,\n method: 'getLedgerEntries',\n params: {\n keys: [ledgerKeyXdr],\n },\n }),\n });\n\n const result = (await response.json()) as any;\n if (result.error) {\n console.warn(`Warning: Could not retrieve WASM TTL: ${result.error.message}`);\n } else if (result.result?.entries?.[0]?.liveUntilLedgerSeq) {\n const liveUntilLedgerSeq = result.result.entries[0].liveUntilLedgerSeq;\n const ttlLedgers = liveUntilLedgerSeq - currentLedger;\n const ttlDays = (ttlLedgers * 5) / (24 * 3600); // ~5 seconds per ledger\n console.log(\n `⏰ WASM TTL: live until ledger ${liveUntilLedgerSeq} (${ttlLedgers} ledgers remaining, ~${ttlDays.toFixed(2)} days)`,\n );\n }\n } catch (error) {\n // If querying TTL fails, it might be because the code isn't indexed yet\n // This is non-fatal, so we just log a warning\n console.warn(\n `Warning: Could not retrieve WASM TTL: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n}\n\nexport async function uploadWasm(\n env: StellarTestEnv,\n wasmBuffer: Buffer,\n keypair: Keypair,\n server: rpc.Server,\n): Promise<string> {\n console.log(\n `📦 WASM buffer size: ${wasmBuffer.length} bytes (${(wasmBuffer.length / 1024).toFixed(2)} KB)`,\n );\n\n const account = await server.getAccount(keypair.publicKey());\n\n const uploadTx = new TransactionBuilder(account, {\n fee: BASE_FEE,\n networkPassphrase: env.NETWORK_PASSPHRASE,\n })\n .addOperation(Operation.uploadContractWasm({ wasm: wasmBuffer }))\n .setTimeout(30)\n .build();\n\n const simulated = await server.simulateTransaction(uploadTx);\n const preparedTx = rpc.assembleTransaction(uploadTx, simulated).build();\n\n console.log(\n `💰 Upload transaction fee: ${preparedTx.fee} stroops (${(Number(preparedTx.fee) / 10000000).toFixed(7)} XLM)`,\n );\n\n preparedTx.sign(keypair);\n\n const sendResult = await server.sendTransaction(preparedTx);\n\n if (sendResult.status !== 'PENDING') {\n throw new Error(`Transaction failed: ${JSON.stringify(sendResult)}`);\n }\n\n // Wait for transaction to be confirmed\n const txResult = await server.pollTransaction(sendResult.hash);\n\n if (txResult.status !== 'SUCCESS') {\n throw new Error(`Transaction not successful: ${JSON.stringify(txResult)}`);\n }\n\n // Compute the WASM hash (SHA-256 of the WASM bytes)\n const wasmHash = hash(wasmBuffer).toString('hex');\n\n // Query and display the WASM code TTL\n await queryWasmTtl(env, wasmHash, server);\n\n return wasmHash;\n}\n\n/**\n * Generic contract deployment helper that works with any contract Client\n *\n * @param ClientClass - The contract Client class (e.g., EndpointClient, SMLClient)\n * @param wasmFilePath - Path to the compiled WASM file\n * @param constructorArgs - Arguments for the contract's constructor\n * @param deployer - The keypair that will deploy the contract\n * @param options - Optional deployment options (salt, fee, timeout, etc.)\n * @returns The deployed contract's Client instance with the contractId\n */\nexport async function deployContract<T extends { options: { contractId: string } }>(\n env: StellarTestEnv,\n ClientClass: DeployableContractClient<T>,\n wasmFilePath: string,\n constructorArgs: unknown,\n deployer: Keypair,\n options: {\n salt?: Buffer;\n wasmHash?: string;\n rpcUrl?: string;\n networkPassphrase?: string;\n allowHttp?: boolean;\n } = {},\n): Promise<T> {\n const {\n rpcUrl = env.RPC_URL,\n networkPassphrase = env.NETWORK_PASSPHRASE,\n allowHttp = true,\n salt,\n } = options;\n\n const server = new rpc.Server(rpcUrl, {\n allowHttp: allowHttp,\n });\n\n let wasmHash = options.wasmHash;\n if (wasmHash) {\n console.log('📦 Using pre-uploaded WASM hash:', wasmHash);\n } else {\n // Step 1: Read WASM file\n console.log('📖 Reading WASM file from:', wasmFilePath);\n const wasmBuffer = readFileSync(wasmFilePath);\n\n // Step 2: Upload WASM and get hash\n console.log('📤 Uploading WASM...');\n wasmHash = await uploadWasm(env, wasmBuffer, deployer, server);\n console.log('✅ WASM uploaded, hash:', wasmHash);\n }\n\n // Step 3: Deploy the contract\n console.log('🚀 Deploying contract...');\n const deployOptions = {\n wasmHash,\n publicKey: deployer.publicKey(),\n signTransaction: async (tx: string) => {\n const transaction = TransactionBuilder.fromXDR(tx, networkPassphrase);\n transaction.sign(deployer);\n return {\n signedTxXdr: transaction.toXDR(),\n signerAddress: deployer.publicKey(),\n };\n },\n rpcUrl,\n networkPassphrase,\n allowHttp,\n salt,\n };\n const deployTx =\n constructorArgs == null\n ? await ClientClass.deploy(deployOptions)\n : await ClientClass.deploy(constructorArgs, deployOptions);\n\n // Step 4: Sign and send\n const sentTx = await deployTx.signAndSend();\n\n // Step 5: Extract contract ID from result\n const contractClient = sentTx.result;\n const contractId = contractClient.options.contractId;\n console.log('✅ Contract deployed at:', contractId);\n\n return contractClient;\n}\n\nexport async function deployNativeSac(env: StellarTestEnv): Promise<void> {\n await deployAssetSac(env, Asset.native());\n console.log('✅ Native SAC deployed');\n}\n\nexport async function deployZroToken(env: StellarTestEnv): Promise<void> {\n const server = new rpc.Server(env.RPC_URL, {\n allowHttp: true,\n });\n\n // First, issue the ZRO token.\n // We can't changeTrust of Issuer account, because the Issuer can't hold the asset.\n const account = await server.getAccount(env.DEFAULT_DEPLOYER.publicKey());\n const transaction = new TransactionBuilder(account, {\n fee: BASE_FEE,\n networkPassphrase: env.NETWORK_PASSPHRASE,\n })\n .addOperation(\n Operation.changeTrust({\n asset: env.ZRO_ASSET,\n source: env.ZRO_DISTRIBUTOR.publicKey(),\n }),\n )\n .addOperation(\n Operation.payment({\n asset: env.ZRO_ASSET,\n amount: '10000',\n destination: env.ZRO_DISTRIBUTOR.publicKey(),\n }),\n )\n .setTimeout(10)\n .build();\n transaction.sign(env.DEFAULT_DEPLOYER, env.ZRO_DISTRIBUTOR);\n\n const sendResult = await server.sendTransaction(transaction);\n if (sendResult.status !== 'PENDING') {\n throw new Error(`Failed to issue ZRO token: ${JSON.stringify(sendResult)}`);\n }\n const txResult = await server.pollTransaction(sendResult.hash);\n if (txResult.status !== 'SUCCESS') {\n throw new Error(`Failed to issue ZRO token: ${JSON.stringify(txResult)}`);\n }\n console.log('✅ ZRO asset issued');\n\n // Deploy the Stellar Asset Contract (SAC)\n await deployAssetSac(env, env.ZRO_ASSET);\n console.log('✅ ZRO SAC deployed');\n}\n\n/**\n * Deploy SAC for a custom asset using TypeScript\n */\nexport async function deployAssetSac(env: StellarTestEnv, asset: Asset): Promise<string> {\n console.log('Deploying SAC for asset:', asset.toString());\n\n const server = new rpc.Server(env.RPC_URL, { allowHttp: true });\n const account = await server.getAccount(env.DEFAULT_DEPLOYER.publicKey());\n\n // Build transaction with createStellarAssetContract operation\n const deployTx = new TransactionBuilder(account, {\n fee: BASE_FEE,\n networkPassphrase: env.NETWORK_PASSPHRASE,\n })\n .addOperation(\n Operation.createStellarAssetContract({\n asset: asset,\n }),\n )\n .setTimeout(30)\n .build();\n\n // Simulate transaction first (required for contract operations)\n const simulated = await server.simulateTransaction(deployTx);\n\n // Check if simulation was successful\n if (rpc.Api.isSimulationError(simulated)) {\n // Soroban returns ExistingValue when the contract is already deployed.\n // This is expected on container reuse (local dev reruns).\n if (simulated.error?.includes('ExistingValue')) {\n console.log(`SAC for ${asset.toString()} already deployed, skipping`);\n return asset.contractId(env.NETWORK_PASSPHRASE);\n }\n throw new Error(`Transaction simulation failed: ${JSON.stringify(simulated)}`);\n }\n\n const preparedTx = rpc.assembleTransaction(deployTx, simulated).build();\n\n // Sign and send\n preparedTx.sign(env.DEFAULT_DEPLOYER);\n const sendResult = await server.sendTransaction(preparedTx);\n if (sendResult.status !== 'PENDING') {\n throw new Error(`Failed to deploy SAC: ${JSON.stringify(sendResult)}`);\n }\n const txResult = await server.pollTransaction(sendResult.hash);\n if (txResult.status !== 'SUCCESS') {\n throw new Error(`SAC deployment not successful: ${JSON.stringify(txResult)}`);\n }\n return asset.contractId(env.NETWORK_PASSPHRASE);\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { startStellarLocalnet, stopStellarLocalnet } from './4ECTIPRV.js';
1
+ import { startStellarLocalnet, stopStellarLocalnet } from './ECVGEAZI.js';
2
2
  import { __name } from './VUOMXK5T.js';
3
3
 
4
4
  // src/localnet-global-setup.ts
@@ -26,5 +26,5 @@ function createLocalnetOnlyGlobalSetup(env) {
26
26
  __name(createLocalnetOnlyGlobalSetup, "createLocalnetOnlyGlobalSetup");
27
27
 
28
28
  export { createLocalnetOnlyGlobalSetup };
29
- //# sourceMappingURL=GGIP6PRC.js.map
30
- //# sourceMappingURL=GGIP6PRC.js.map
29
+ //# sourceMappingURL=TCK6I5FQ.js.map
30
+ //# sourceMappingURL=TCK6I5FQ.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/localnet-global-setup.ts"],"names":["createLocalnetOnlyGlobalSetup","env","globalSetup","_ctx","console","log","startStellarLocalnet","stopStellarLocalnet"],"mappings":";;;;AAOO,SAASA,8BACZC,GAAAA,EAAmB;AAEnB,EAAA,uBAAO,MAAA,CAAA,eAAeC,YAAYC,IAAAA,EAAc;AAC5CC,IAAAA,OAAAA,CAAQC,IAAI,4CAAA,CAAA;AACZD,IAAAA,OAAAA,CAAQC,IAAI,mDAAA,CAAA;AACZD,IAAAA,OAAAA,CAAQC,IAAI,4CAAA,CAAA;AAEZ,IAAA,MAAMC,oBAAAA,CAAqB;AAAEL,MAAAA;KAAI,CAAA;AAEjCG,IAAAA,OAAAA,CAAQC,IAAI,4CAAA,CAAA;AACZD,IAAAA,OAAAA,CAAQC,IAAI,8CAAA,CAAA;AACZD,IAAAA,OAAAA,CAAQC,IAAI,4CAAA,CAAA;AAEZ,IAAA,OAAO,YAAA;AACHD,MAAAA,OAAAA,CAAQC,IAAI,4CAAA,CAAA;AACZD,MAAAA,OAAAA,CAAQC,IAAI,sDAAA,CAAA;AACZD,MAAAA,OAAAA,CAAQC,IAAI,4CAAA,CAAA;AAEZ,MAAA,MAAME,mBAAAA,CAAoB;AAAEN,QAAAA;OAAI,CAAA;AACpC,IAAA,CAAA;EACJ,CAAA,EAlBO,aAAA,CAAA;AAmBX;AAtBgBD,MAAAA,CAAAA,6BAAAA,EAAAA,+BAAAA,CAAAA","file":"GGIP6PRC.js","sourcesContent":["import type { StellarTestEnv } from './env.js';\nimport { startStellarLocalnet, stopStellarLocalnet } from './localnet.js';\n\n/**\n * Vitest globalSetup that only starts/stops Stellar localnet.\n * Use when the suite deploys its own contracts (e.g. protocol SDK upgrader tests).\n */\nexport function createLocalnetOnlyGlobalSetup(\n env: StellarTestEnv,\n): (_ctx?: unknown) => Promise<() => Promise<void>> {\n return async function globalSetup(_ctx?: unknown): Promise<() => Promise<void>> {\n console.log('\\n========================================');\n console.log('🌐 GLOBAL SETUP: Starting Stellar Localnet');\n console.log('========================================\\n');\n\n await startStellarLocalnet({ env });\n\n console.log('\\n========================================');\n console.log('✅ GLOBAL SETUP COMPLETE (localnet only)');\n console.log('========================================\\n');\n\n return async () => {\n console.log('\\n========================================');\n console.log('🛑 GLOBAL TEARDOWN: Stopping Stellar Localnet');\n console.log('========================================\\n');\n\n await stopStellarLocalnet({ env });\n };\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/localnet-global-setup.ts"],"names":["createLocalnetOnlyGlobalSetup","env","globalSetup","_ctx","console","log","startStellarLocalnet","stopStellarLocalnet"],"mappings":";;;;AAOO,SAASA,8BACZC,GAAAA,EAAmB;AAEnB,EAAA,uBAAO,MAAA,CAAA,eAAeC,YAAYC,IAAAA,EAAc;AAC5CC,IAAAA,OAAAA,CAAQC,IAAI,4CAAA,CAAA;AACZD,IAAAA,OAAAA,CAAQC,IAAI,mDAAA,CAAA;AACZD,IAAAA,OAAAA,CAAQC,IAAI,4CAAA,CAAA;AAEZ,IAAA,MAAMC,oBAAAA,CAAqB;AAAEL,MAAAA;KAAI,CAAA;AAEjCG,IAAAA,OAAAA,CAAQC,IAAI,4CAAA,CAAA;AACZD,IAAAA,OAAAA,CAAQC,IAAI,8CAAA,CAAA;AACZD,IAAAA,OAAAA,CAAQC,IAAI,4CAAA,CAAA;AAEZ,IAAA,OAAO,YAAA;AACHD,MAAAA,OAAAA,CAAQC,IAAI,4CAAA,CAAA;AACZD,MAAAA,OAAAA,CAAQC,IAAI,sDAAA,CAAA;AACZD,MAAAA,OAAAA,CAAQC,IAAI,4CAAA,CAAA;AAEZ,MAAA,MAAME,mBAAAA,CAAoB;AAAEN,QAAAA;OAAI,CAAA;AACpC,IAAA,CAAA;EACJ,CAAA,EAlBO,aAAA,CAAA;AAmBX;AAtBgBD,MAAAA,CAAAA,6BAAAA,EAAAA,+BAAAA,CAAAA","file":"TCK6I5FQ.js","sourcesContent":["import type { StellarTestEnv } from './env.js';\nimport { startStellarLocalnet, stopStellarLocalnet } from './localnet.js';\n\n/**\n * Vitest globalSetup that only starts/stops Stellar localnet.\n * Use when the suite deploys its own contracts (e.g. protocol SDK upgrader tests).\n */\nexport function createLocalnetOnlyGlobalSetup(\n env: StellarTestEnv,\n): (_ctx?: unknown) => Promise<() => Promise<void>> {\n return async function globalSetup(_ctx?: unknown): Promise<() => Promise<void>> {\n console.log('\\n========================================');\n console.log('🌐 GLOBAL SETUP: Starting Stellar Localnet');\n console.log('========================================\\n');\n\n await startStellarLocalnet({ env });\n\n console.log('\\n========================================');\n console.log('✅ GLOBAL SETUP COMPLETE (localnet only)');\n console.log('========================================\\n');\n\n return async () => {\n console.log('\\n========================================');\n console.log('🛑 GLOBAL TEARDOWN: Stopping Stellar Localnet');\n console.log('========================================\\n');\n\n await stopStellarLocalnet({ env });\n };\n };\n}\n"]}
package/dist/deploy.d.ts CHANGED
@@ -6,7 +6,7 @@ export interface DeployableContractClient<T extends {
6
6
  contractId: string;
7
7
  };
8
8
  }> {
9
- deploy: (argsOrOptions: unknown, options?: unknown) => Promise<{
9
+ deploy(argsOrOptions: unknown, options?: unknown): Promise<{
10
10
  signAndSend: () => Promise<{
11
11
  result: T;
12
12
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../src/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EACH,KAAK,EAIL,GAAG,EAGN,MAAM,sBAAsB,CAAC;AAG9B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,MAAM,WAAW,wBAAwB,CAAC,CAAC,SAAS;IAAE,OAAO,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE;IACnF,MAAM,EAAE,CACJ,aAAa,EAAE,OAAO,EACtB,OAAO,CAAC,EAAE,OAAO,KAChB,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,OAAO,CAAC;YAAE,MAAM,EAAE,CAAC,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC,CAAC;CAC/D;AAgED,wBAAsB,UAAU,CAC5B,GAAG,EAAE,cAAc,EACnB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,GAAG,CAAC,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC,CA4CjB;AAED;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAAC,CAAC,SAAS;IAAE,OAAO,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,EAC9E,GAAG,EAAE,cAAc,EACnB,WAAW,EAAE,wBAAwB,CAAC,CAAC,CAAC,EACxC,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,OAAO,EACxB,QAAQ,EAAE,OAAO,EACjB,OAAO,GAAE;IACL,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;CAClB,GACP,OAAO,CAAC,CAAC,CAAC,CA0DZ;AAED,wBAAsB,eAAe,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAGxE;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA0CvE;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CA8CvF"}
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../src/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EACH,KAAK,EAIL,GAAG,EAGN,MAAM,sBAAsB,CAAC;AAG9B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,MAAM,WAAW,wBAAwB,CAAC,CAAC,SAAS;IAAE,OAAO,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE;IACnF,MAAM,CACF,aAAa,EAAE,OAAO,EACtB,OAAO,CAAC,EAAE,OAAO,GAClB,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,OAAO,CAAC;YAAE,MAAM,EAAE,CAAC,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC,CAAC;CAC7D;AAgED,wBAAsB,UAAU,CAC5B,GAAG,EAAE,cAAc,EACnB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,GAAG,CAAC,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC,CA4CjB;AAED;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAAC,CAAC,SAAS;IAAE,OAAO,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,EAC9E,GAAG,EAAE,cAAc,EACnB,WAAW,EAAE,wBAAwB,CAAC,CAAC,CAAC,EACxC,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,OAAO,EACxB,QAAQ,EAAE,OAAO,EACjB,OAAO,GAAE;IACL,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;CAClB,GACP,OAAO,CAAC,CAAC,CAAC,CA0DZ;AAED,wBAAsB,eAAe,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAGxE;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA0CvE;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CA8CvF"}
package/dist/deploy.js CHANGED
@@ -1,4 +1,4 @@
1
- export { deployAssetSac, deployContract, deployNativeSac, deployZroToken, uploadWasm } from './TYAJMKGY.js';
1
+ export { deployAssetSac, deployContract, deployNativeSac, deployZroToken, uploadWasm } from './SU67PCBT.js';
2
2
  import './VUOMXK5T.js';
3
3
  //# sourceMappingURL=deploy.js.map
4
4
  //# sourceMappingURL=deploy.js.map
package/dist/index.js CHANGED
@@ -1,11 +1,11 @@
1
1
  export { assertTransactionSucceeded, getNativeBalance, getTokenAuthorized, getTokenBalance, signAndSendWithExecutorAuth, signDvnAuthEntries } from './QLQUPRDU.js';
2
2
  export { createStellarTestEnv } from './LGL6MCID.js';
3
3
  export { Secp256k1KeyPair } from './DNRE4ENZ.js';
4
- export { createLocalnetOnlyGlobalSetup } from './GGIP6PRC.js';
5
- export { createProtocolStackGlobalSetup } from './UQE7SBZI.js';
4
+ export { createLocalnetOnlyGlobalSetup } from './TCK6I5FQ.js';
5
+ export { createProtocolStackGlobalSetup } from './NLZSE6LF.js';
6
6
  export { createClient } from './GAGBEOCZ.js';
7
- export { fundAccount, startStellarLocalnet, stopStellarLocalnet } from './4ECTIPRV.js';
8
- export { deployAssetSac, deployContract, deployNativeSac, deployZroToken, uploadWasm } from './TYAJMKGY.js';
7
+ export { fundAccount, startStellarLocalnet, stopStellarLocalnet } from './ECVGEAZI.js';
8
+ export { deployAssetSac, deployContract, deployNativeSac, deployZroToken, uploadWasm } from './SU67PCBT.js';
9
9
  export { scanEvents, scanPacketSentEvents, waitAndScanEvents } from './PMDPSIA2.js';
10
10
  import './VUOMXK5T.js';
11
11
  //# sourceMappingURL=index.js.map
@@ -1,6 +1,6 @@
1
- export { createLocalnetOnlyGlobalSetup } from './GGIP6PRC.js';
2
- import './4ECTIPRV.js';
3
- import './TYAJMKGY.js';
1
+ export { createLocalnetOnlyGlobalSetup } from './TCK6I5FQ.js';
2
+ import './ECVGEAZI.js';
3
+ import './SU67PCBT.js';
4
4
  import './VUOMXK5T.js';
5
5
  //# sourceMappingURL=localnet-global-setup.js.map
6
6
  //# sourceMappingURL=localnet-global-setup.js.map
package/dist/localnet.js CHANGED
@@ -1,5 +1,5 @@
1
- export { FUNDING_RETRY_INTERVAL_MS, STELLAR_LOCALNET_OWNER_LABEL, accountExists, assertDockerArgs, buildDockerContainerIdLookupArgs, buildDockerOwnershipLabelLookupArgs, buildDockerRemoveArgs, buildDockerRunArgs, fundAccount, fundAccountViaFriendbot, getDefaultStellarLocalnetImage, getNamedContainerRemovalPolicy, pauseBeforeFundingRetry, startStellarLocalnet, stopStellarLocalnet, waitForAccountOnRpc } from './4ECTIPRV.js';
2
- import './TYAJMKGY.js';
1
+ export { FUNDING_RETRY_INTERVAL_MS, STELLAR_LOCALNET_OWNER_LABEL, accountExists, assertDockerArgs, buildDockerContainerIdLookupArgs, buildDockerOwnershipLabelLookupArgs, buildDockerRemoveArgs, buildDockerRunArgs, fundAccount, fundAccountViaFriendbot, getDefaultStellarLocalnetImage, getNamedContainerRemovalPolicy, pauseBeforeFundingRetry, startStellarLocalnet, stopStellarLocalnet, waitForAccountOnRpc } from './ECVGEAZI.js';
2
+ import './SU67PCBT.js';
3
3
  import './VUOMXK5T.js';
4
4
  //# sourceMappingURL=localnet.js.map
5
5
  //# sourceMappingURL=localnet.js.map
@@ -1,7 +1,7 @@
1
- export { createProtocolStackGlobalSetup } from './UQE7SBZI.js';
1
+ export { createProtocolStackGlobalSetup } from './NLZSE6LF.js';
2
2
  import './GAGBEOCZ.js';
3
- import './4ECTIPRV.js';
4
- import './TYAJMKGY.js';
3
+ import './ECVGEAZI.js';
4
+ import './SU67PCBT.js';
5
5
  import './VUOMXK5T.js';
6
6
  //# sourceMappingURL=protocol-global-setup.js.map
7
7
  //# sourceMappingURL=protocol-global-setup.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@layerzerolabs/test-utils-stellar",
3
- "version": "1.2.99",
3
+ "version": "1.2.101",
4
4
  "private": false,
5
5
  "description": "Shared Stellar/Soroban test harness (localnet, funding, deploy helpers) for LayerZero V2 protocol SDK and custom OApp/OFT tests",
6
6
  "license": "MIT",
@@ -18,14 +18,14 @@
18
18
  "src"
19
19
  ],
20
20
  "dependencies": {
21
- "@layerzerolabs/vm-tooling": "1.2.99",
21
+ "@layerzerolabs/vm-tooling": "1.2.101",
22
22
  "@noble/hashes": "^1.8.0",
23
23
  "@noble/secp256k1": "1.7.1",
24
24
  "@stellar/stellar-sdk": "^16.4.0"
25
25
  },
26
26
  "devDependencies": {
27
- "@layerzerolabs/tsup-configuration": "1.2.99",
28
- "@layerzerolabs/typescript-configuration": "1.2.99",
27
+ "@layerzerolabs/tsup-configuration": "1.2.101",
28
+ "@layerzerolabs/typescript-configuration": "1.2.101",
29
29
  "tsup": "^8.4.0",
30
30
  "typescript": "^7.0.2",
31
31
  "vitest": "^4.1.10"
package/src/deploy.ts CHANGED
@@ -13,10 +13,10 @@ import { readFileSync } from 'fs';
13
13
  import type { StellarTestEnv } from './env.js';
14
14
 
15
15
  export interface DeployableContractClient<T extends { options: { contractId: string } }> {
16
- deploy: (
16
+ deploy(
17
17
  argsOrOptions: unknown,
18
18
  options?: unknown,
19
- ) => Promise<{ signAndSend: () => Promise<{ result: T }> }>;
19
+ ): Promise<{ signAndSend: () => Promise<{ result: T }> }>;
20
20
  }
21
21
 
22
22
  /**
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/deploy.ts"],"names":["queryWasmTtl","env","wasmHash","server","latestLedger","getLatestLedger","currentLedger","sequence","wasmHashBuffer","Buffer","from","hashBytes","length","slice","ledgerKeyContractCode","xdr","LedgerKeyContractCode","hash","ledgerKey","LedgerKey","contractCode","ledgerKeyXdr","toXDR","response","fetch","RPC_URL","method","headers","body","JSON","stringify","jsonrpc","id","params","keys","result","json","error","console","warn","message","entries","liveUntilLedgerSeq","ttlLedgers","ttlDays","log","toFixed","Error","String","uploadWasm","wasmBuffer","keypair","account","getAccount","publicKey","uploadTx","TransactionBuilder","fee","BASE_FEE","networkPassphrase","NETWORK_PASSPHRASE","addOperation","Operation","uploadContractWasm","wasm","setTimeout","build","simulated","simulateTransaction","preparedTx","rpc","assembleTransaction","Number","sign","sendResult","sendTransaction","status","txResult","pollTransaction","toString","deployContract","ClientClass","wasmFilePath","constructorArgs","deployer","options","rpcUrl","allowHttp","salt","Server","readFileSync","deployOptions","signTransaction","tx","transaction","fromXDR","signedTxXdr","signerAddress","deployTx","deploy","sentTx","signAndSend","contractClient","contractId","deployNativeSac","deployAssetSac","Asset","native","deployZroToken","DEFAULT_DEPLOYER","changeTrust","asset","ZRO_ASSET","source","ZRO_DISTRIBUTOR","payment","amount","destination","createStellarAssetContract","Api","isSimulationError","includes"],"mappings":"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","file":"TYAJMKGY.js","sourcesContent":["import type { Keypair } from '@stellar/stellar-sdk';\nimport {\n Asset,\n BASE_FEE,\n hash,\n Operation,\n rpc,\n TransactionBuilder,\n xdr,\n} from '@stellar/stellar-sdk';\nimport { readFileSync } from 'fs';\n\nimport type { StellarTestEnv } from './env.js';\n\nexport interface DeployableContractClient<T extends { options: { contractId: string } }> {\n deploy: (\n argsOrOptions: unknown,\n options?: unknown,\n ) => Promise<{ signAndSend: () => Promise<{ result: T }> }>;\n}\n\n/**\n * Query and display the TTL (Time To Live) of uploaded WASM code.\n *\n * @param env - Stellar test environment (RPC URL, etc.)\n * @param wasmHash - The hex-encoded SHA-256 hash of the WASM code\n * @param server - The Stellar RPC server instance\n */\nasync function queryWasmTtl(\n env: StellarTestEnv,\n wasmHash: string,\n server: rpc.Server,\n): Promise<void> {\n try {\n const latestLedger = await server.getLatestLedger();\n const currentLedger = latestLedger.sequence;\n\n // Create the LedgerKey for contract code using XDR encoding\n const wasmHashBuffer = Buffer.from(wasmHash, 'hex');\n // Ensure hash is exactly 32 bytes\n const hashBytes =\n wasmHashBuffer.length === 32 ? wasmHashBuffer : wasmHashBuffer.slice(0, 32);\n // Create LedgerKeyContractCode with hash\n const ledgerKeyContractCode = new xdr.LedgerKeyContractCode({\n hash: hashBytes,\n });\n const ledgerKey = xdr.LedgerKey.contractCode(ledgerKeyContractCode);\n const ledgerKeyXdr = ledgerKey.toXDR('base64');\n\n // Query contract code entry using direct RPC call\n const response = await fetch(env.RPC_URL, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: 1,\n method: 'getLedgerEntries',\n params: {\n keys: [ledgerKeyXdr],\n },\n }),\n });\n\n const result = (await response.json()) as any;\n if (result.error) {\n console.warn(`Warning: Could not retrieve WASM TTL: ${result.error.message}`);\n } else if (result.result?.entries?.[0]?.liveUntilLedgerSeq) {\n const liveUntilLedgerSeq = result.result.entries[0].liveUntilLedgerSeq;\n const ttlLedgers = liveUntilLedgerSeq - currentLedger;\n const ttlDays = (ttlLedgers * 5) / (24 * 3600); // ~5 seconds per ledger\n console.log(\n `⏰ WASM TTL: live until ledger ${liveUntilLedgerSeq} (${ttlLedgers} ledgers remaining, ~${ttlDays.toFixed(2)} days)`,\n );\n }\n } catch (error) {\n // If querying TTL fails, it might be because the code isn't indexed yet\n // This is non-fatal, so we just log a warning\n console.warn(\n `Warning: Could not retrieve WASM TTL: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n}\n\nexport async function uploadWasm(\n env: StellarTestEnv,\n wasmBuffer: Buffer,\n keypair: Keypair,\n server: rpc.Server,\n): Promise<string> {\n console.log(\n `📦 WASM buffer size: ${wasmBuffer.length} bytes (${(wasmBuffer.length / 1024).toFixed(2)} KB)`,\n );\n\n const account = await server.getAccount(keypair.publicKey());\n\n const uploadTx = new TransactionBuilder(account, {\n fee: BASE_FEE,\n networkPassphrase: env.NETWORK_PASSPHRASE,\n })\n .addOperation(Operation.uploadContractWasm({ wasm: wasmBuffer }))\n .setTimeout(30)\n .build();\n\n const simulated = await server.simulateTransaction(uploadTx);\n const preparedTx = rpc.assembleTransaction(uploadTx, simulated).build();\n\n console.log(\n `💰 Upload transaction fee: ${preparedTx.fee} stroops (${(Number(preparedTx.fee) / 10000000).toFixed(7)} XLM)`,\n );\n\n preparedTx.sign(keypair);\n\n const sendResult = await server.sendTransaction(preparedTx);\n\n if (sendResult.status !== 'PENDING') {\n throw new Error(`Transaction failed: ${JSON.stringify(sendResult)}`);\n }\n\n // Wait for transaction to be confirmed\n const txResult = await server.pollTransaction(sendResult.hash);\n\n if (txResult.status !== 'SUCCESS') {\n throw new Error(`Transaction not successful: ${JSON.stringify(txResult)}`);\n }\n\n // Compute the WASM hash (SHA-256 of the WASM bytes)\n const wasmHash = hash(wasmBuffer).toString('hex');\n\n // Query and display the WASM code TTL\n await queryWasmTtl(env, wasmHash, server);\n\n return wasmHash;\n}\n\n/**\n * Generic contract deployment helper that works with any contract Client\n *\n * @param ClientClass - The contract Client class (e.g., EndpointClient, SMLClient)\n * @param wasmFilePath - Path to the compiled WASM file\n * @param constructorArgs - Arguments for the contract's constructor\n * @param deployer - The keypair that will deploy the contract\n * @param options - Optional deployment options (salt, fee, timeout, etc.)\n * @returns The deployed contract's Client instance with the contractId\n */\nexport async function deployContract<T extends { options: { contractId: string } }>(\n env: StellarTestEnv,\n ClientClass: DeployableContractClient<T>,\n wasmFilePath: string,\n constructorArgs: unknown,\n deployer: Keypair,\n options: {\n salt?: Buffer;\n wasmHash?: string;\n rpcUrl?: string;\n networkPassphrase?: string;\n allowHttp?: boolean;\n } = {},\n): Promise<T> {\n const {\n rpcUrl = env.RPC_URL,\n networkPassphrase = env.NETWORK_PASSPHRASE,\n allowHttp = true,\n salt,\n } = options;\n\n const server = new rpc.Server(rpcUrl, {\n allowHttp: allowHttp,\n });\n\n let wasmHash = options.wasmHash;\n if (wasmHash) {\n console.log('📦 Using pre-uploaded WASM hash:', wasmHash);\n } else {\n // Step 1: Read WASM file\n console.log('📖 Reading WASM file from:', wasmFilePath);\n const wasmBuffer = readFileSync(wasmFilePath);\n\n // Step 2: Upload WASM and get hash\n console.log('📤 Uploading WASM...');\n wasmHash = await uploadWasm(env, wasmBuffer, deployer, server);\n console.log('✅ WASM uploaded, hash:', wasmHash);\n }\n\n // Step 3: Deploy the contract\n console.log('🚀 Deploying contract...');\n const deployOptions = {\n wasmHash,\n publicKey: deployer.publicKey(),\n signTransaction: async (tx: string) => {\n const transaction = TransactionBuilder.fromXDR(tx, networkPassphrase);\n transaction.sign(deployer);\n return {\n signedTxXdr: transaction.toXDR(),\n signerAddress: deployer.publicKey(),\n };\n },\n rpcUrl,\n networkPassphrase,\n allowHttp,\n salt,\n };\n const deployTx =\n constructorArgs == null\n ? await ClientClass.deploy(deployOptions)\n : await ClientClass.deploy(constructorArgs, deployOptions);\n\n // Step 4: Sign and send\n const sentTx = await deployTx.signAndSend();\n\n // Step 5: Extract contract ID from result\n const contractClient = sentTx.result;\n const contractId = contractClient.options.contractId;\n console.log('✅ Contract deployed at:', contractId);\n\n return contractClient;\n}\n\nexport async function deployNativeSac(env: StellarTestEnv): Promise<void> {\n await deployAssetSac(env, Asset.native());\n console.log('✅ Native SAC deployed');\n}\n\nexport async function deployZroToken(env: StellarTestEnv): Promise<void> {\n const server = new rpc.Server(env.RPC_URL, {\n allowHttp: true,\n });\n\n // First, issue the ZRO token.\n // We can't changeTrust of Issuer account, because the Issuer can't hold the asset.\n const account = await server.getAccount(env.DEFAULT_DEPLOYER.publicKey());\n const transaction = new TransactionBuilder(account, {\n fee: BASE_FEE,\n networkPassphrase: env.NETWORK_PASSPHRASE,\n })\n .addOperation(\n Operation.changeTrust({\n asset: env.ZRO_ASSET,\n source: env.ZRO_DISTRIBUTOR.publicKey(),\n }),\n )\n .addOperation(\n Operation.payment({\n asset: env.ZRO_ASSET,\n amount: '10000',\n destination: env.ZRO_DISTRIBUTOR.publicKey(),\n }),\n )\n .setTimeout(10)\n .build();\n transaction.sign(env.DEFAULT_DEPLOYER, env.ZRO_DISTRIBUTOR);\n\n const sendResult = await server.sendTransaction(transaction);\n if (sendResult.status !== 'PENDING') {\n throw new Error(`Failed to issue ZRO token: ${JSON.stringify(sendResult)}`);\n }\n const txResult = await server.pollTransaction(sendResult.hash);\n if (txResult.status !== 'SUCCESS') {\n throw new Error(`Failed to issue ZRO token: ${JSON.stringify(txResult)}`);\n }\n console.log('✅ ZRO asset issued');\n\n // Deploy the Stellar Asset Contract (SAC)\n await deployAssetSac(env, env.ZRO_ASSET);\n console.log('✅ ZRO SAC deployed');\n}\n\n/**\n * Deploy SAC for a custom asset using TypeScript\n */\nexport async function deployAssetSac(env: StellarTestEnv, asset: Asset): Promise<string> {\n console.log('Deploying SAC for asset:', asset.toString());\n\n const server = new rpc.Server(env.RPC_URL, { allowHttp: true });\n const account = await server.getAccount(env.DEFAULT_DEPLOYER.publicKey());\n\n // Build transaction with createStellarAssetContract operation\n const deployTx = new TransactionBuilder(account, {\n fee: BASE_FEE,\n networkPassphrase: env.NETWORK_PASSPHRASE,\n })\n .addOperation(\n Operation.createStellarAssetContract({\n asset: asset,\n }),\n )\n .setTimeout(30)\n .build();\n\n // Simulate transaction first (required for contract operations)\n const simulated = await server.simulateTransaction(deployTx);\n\n // Check if simulation was successful\n if (rpc.Api.isSimulationError(simulated)) {\n // Soroban returns ExistingValue when the contract is already deployed.\n // This is expected on container reuse (local dev reruns).\n if (simulated.error?.includes('ExistingValue')) {\n console.log(`SAC for ${asset.toString()} already deployed, skipping`);\n return asset.contractId(env.NETWORK_PASSPHRASE);\n }\n throw new Error(`Transaction simulation failed: ${JSON.stringify(simulated)}`);\n }\n\n const preparedTx = rpc.assembleTransaction(deployTx, simulated).build();\n\n // Sign and send\n preparedTx.sign(env.DEFAULT_DEPLOYER);\n const sendResult = await server.sendTransaction(preparedTx);\n if (sendResult.status !== 'PENDING') {\n throw new Error(`Failed to deploy SAC: ${JSON.stringify(sendResult)}`);\n }\n const txResult = await server.pollTransaction(sendResult.hash);\n if (txResult.status !== 'SUCCESS') {\n throw new Error(`SAC deployment not successful: ${JSON.stringify(txResult)}`);\n }\n return asset.contractId(env.NETWORK_PASSPHRASE);\n}\n"]}