diff --git a/test/.papi/descriptors/package.json b/test/.papi/descriptors/package.json index 97b3c850..8a0c66ea 100644 --- a/test/.papi/descriptors/package.json +++ b/test/.papi/descriptors/package.json @@ -1,5 +1,5 @@ { - "version": "0.1.0-autogenerated.10935097084839855391", + "version": "0.1.0-autogenerated.16491361595784249435", "name": "@polkadot-api/descriptors", "files": [ "dist" diff --git a/test/.papi/metadata/datahaven.scale b/test/.papi/metadata/datahaven.scale index 087b482c..3be132d6 100644 Binary files a/test/.papi/metadata/datahaven.scale and b/test/.papi/metadata/datahaven.scale differ diff --git a/test/launcher/storagehub-docker.ts b/test/launcher/storagehub-docker.ts index 9cb9c7df..70e972b5 100644 --- a/test/launcher/storagehub-docker.ts +++ b/test/launcher/storagehub-docker.ts @@ -110,24 +110,25 @@ export const getPostgresUrl = (networkId: string): string => { }; /** - * Injects a BCSV ECDSA key into a StorageHub provider node's keystore. - * - * @param containerName - Name of the Docker container - * @param secretKey - The secret key (or private key) we want to add to the node + * Prepares a persistent data volume for a StorageHub provider and seeds its keystore + * before the node starts. Provider nodes can now require `bcsv` on first block import, + * so post-start injection is too late. */ -export const injectStorageHubKey = async ( - containerName: string, +const prepareStorageHubProviderVolume = async ( + volumeName: string, + imageTag: string, secretKey: string ): Promise => { - logger.info(`🔑 Injecting key into ${containerName}...`); + logger.info(`🔑 Preparing provider volume ${volumeName}...`); + + await $`docker volume rm -f ${volumeName}`.nothrow().quiet(); + await $`docker volume create ${volumeName}`.quiet(); - // Use Bun's $ directly with docker exec (no sh -c wrapper needed) - // This properly handles the spaces in the seed phrase try { - await $`docker exec ${containerName} datahaven-node key insert --chain local --key-type bcsv --scheme ecdsa --suri ${secretKey}`; - logger.success("Key injected successfully"); + await $`docker run --rm -v ${volumeName}:/data ${imageTag} key insert --base-path /data --chain local --key-type bcsv --scheme ecdsa --suri ${secretKey}`; + logger.success(`Provider volume ${volumeName} seeded with bcsv key`); } catch (error) { - logger.error(`Failed to inject key : ${error}`); + logger.error(`Failed to seed provider volume ${volumeName}: ${error}`); throw error; } }; @@ -146,8 +147,15 @@ export const launchMspNode = async ( const containerName = `storagehub-msp-${options.networkId}`; const dockerNetworkName = `datahaven-${options.networkId}`; + const dataVolumeName = `${containerName}-data`; const wsPort = 9945; // External port for MSP node + await prepareStorageHubProviderVolume( + dataVolumeName, + options.datahavenImageTag, + SUBSTRATE_FUNDED_ACCOUNTS.CHARLETH.privateKey + ); + const command: string[] = [ "docker", "run", @@ -156,6 +164,8 @@ export const launchMspNode = async ( containerName, "--network", dockerNetworkName, + "-v", + `${dataVolumeName}:/data`, "-p", `${wsPort}:${DEFAULT_SUBSTRATE_WS_PORT}`, options.datahavenImageTag, @@ -193,14 +203,6 @@ export const launchMspNode = async ( await waitForContainerToStart(containerName); - // Inject key - await injectStorageHubKey(containerName, SUBSTRATE_FUNDED_ACCOUNTS.CHARLETH.privateKey); - - // Restart container to load key - logger.info("🔄 Restarting MSP node to load key..."); - await $`docker restart ${containerName}`.nothrow(); - await waitForContainerToStart(containerName); - // Wait for node to be ready logger.info("⌛️ Waiting for MSP node to be ready..."); await waitFor({ @@ -238,8 +240,15 @@ export const launchBspNode = async ( const containerName = `storagehub-bsp-${options.networkId}`; const dockerNetworkName = `datahaven-${options.networkId}`; + const dataVolumeName = `${containerName}-data`; const wsPort = 9946; // External port for BSP node + await prepareStorageHubProviderVolume( + dataVolumeName, + options.datahavenImageTag, + SUBSTRATE_FUNDED_ACCOUNTS.DOROTHY.privateKey + ); + const command: string[] = [ "docker", "run", @@ -248,6 +257,8 @@ export const launchBspNode = async ( containerName, "--network", dockerNetworkName, + "-v", + `${dataVolumeName}:/data`, "-p", `${wsPort}:${DEFAULT_SUBSTRATE_WS_PORT}`, options.datahavenImageTag, @@ -280,14 +291,6 @@ export const launchBspNode = async ( await waitForContainerToStart(containerName); - // Inject key - await injectStorageHubKey(containerName, SUBSTRATE_FUNDED_ACCOUNTS.DOROTHY.privateKey); - - // Restart container to load key - logger.info("🔄 Restarting BSP node to load key..."); - await $`docker restart ${containerName}`.nothrow(); - await waitForContainerToStart(containerName); - // Wait for node to be ready logger.info("⌛️ Waiting for BSP node to be ready..."); await waitFor({