From 7672da988448a1b3f00f98c225525f28689d971b Mon Sep 17 00:00:00 2001 From: udit-gulati Date: Thu, 21 Dec 2023 22:25:29 +0530 Subject: [PATCH] playground creation now parsing multiple instance of same codeId --- .../src/internal/cli/playground-creation.ts | 52 +++++++++---------- packages/wasmkit/src/lib/deploy/contract.ts | 6 ++- 2 files changed, 30 insertions(+), 28 deletions(-) diff --git a/packages/wasmkit/src/internal/cli/playground-creation.ts b/packages/wasmkit/src/internal/cli/playground-creation.ts index 1a9cbbe..a7d8f14 100644 --- a/packages/wasmkit/src/internal/cli/playground-creation.ts +++ b/packages/wasmkit/src/internal/cli/playground-creation.ts @@ -36,33 +36,31 @@ export function createContractListJson ( destinationDir: string, env: WasmkitRuntimeEnvironment ): void { - const files = fs.readdirSync(contractDir); // Get an array of all files in the directory + const checkpointFiles = fs.readdirSync(contractDir); // Get an array of all files in the directory const dest = path.join(destinationDir, "contractList.json"); - const jsonData: Record> = {}; - for (const file of files) { - const fileName = path.parse(file).name; - const filePath = path.join(contractDir, file); - const yamlData = loadCheckpoint(filePath); - const temp = Object.keys(yamlData); - temp.forEach((keys) => { - const info: CheckpointInfo = yamlData[keys]; - const checkpointInf: ContractListInfo = { - chainId: env.config.networks[keys].chainId, - codeId: info.deployInfo?.codeId, - contractAddress: info.instantiateInfo?.[0].contractAddress, - contractTag: (info.instantiateInfo?.[0].instantiateTag !== 'default_instantiate') - ? info.instantiateInfo?.[0].instantiateTag : undefined - }; - const data: Record = { - [keys]: checkpointInf - }; - if (jsonData[fileName]) { - // Merge existing data with new data - jsonData[fileName] = { ...jsonData[fileName], ...data }; - } else { - // Add new data - jsonData[fileName] = data; - } + const checkpointJsonData: Record> = {}; + for (const checkpointFile of checkpointFiles) { + const checkpointFileName = path.parse(checkpointFile).name; + const checkpointFilePath = path.join(contractDir, checkpointFile); + const checkpointYamlData = loadCheckpoint(checkpointFilePath); + const networkNames = Object.keys(checkpointYamlData); + + checkpointJsonData[checkpointFileName] = {}; + networkNames.forEach((networkName) => { + const info: CheckpointInfo = checkpointYamlData[networkName]; + const contractCodeId = info.deployInfo?.codeId; + const networkChainId = env.config.networks[networkName].chainId; + info.instantiateInfo?.forEach((instance) => { + const checkpointInf: ContractListInfo = { + chainId: networkChainId, + codeId: contractCodeId, + contractAddress: instance.contractAddress, + contractTag: (instance.instantiateTag !== 'default_instantiate') + ? instance.instantiateTag : undefined + }; + const instanceKey = `${networkName}_${instance.instantiateTag}`; + checkpointJsonData[checkpointFileName][instanceKey] = checkpointInf; + }); }); // let existingData: Record = {}; NOTE: need not merge, simply overwrite // if (fs.existsSync(dest)) { @@ -72,7 +70,7 @@ export function createContractListJson ( // const mergedData = { ...existingData, ...jsonData }; } // write json schema of all contracts - fs.writeFileSync(dest, JSON.stringify(jsonData, null, 2)); + fs.writeFileSync(dest, JSON.stringify(checkpointJsonData, null, 2)); } export function convertTypescriptFileToJson ( diff --git a/packages/wasmkit/src/lib/deploy/contract.ts b/packages/wasmkit/src/lib/deploy/contract.ts index 3327e6a..8232270 100644 --- a/packages/wasmkit/src/lib/deploy/contract.ts +++ b/packages/wasmkit/src/lib/deploy/contract.ts @@ -21,7 +21,11 @@ import type { WasmkitRuntimeEnvironment } from "../../types"; import { loadCheckpoint, persistCheckpoint } from "../checkpoints"; -import { executeTransaction, getClient, getSigningClient, instantiateContract, sendQuery, storeCode } from "../client"; +import { + executeTransaction, getClient, getSigningClient, + instantiateContract, sendQuery, + storeCode +} from "../client"; export interface ExecArgs { account: Account | UserAccount