From 3a29a1bf79f662a518c23d2d096a27d4f27b63cb Mon Sep 17 00:00:00 2001 From: Hernan Rajchert Date: Fri, 8 Mar 2024 10:15:16 -0300 Subject: [PATCH] Add cache of ContractInstanceAPIs --- .../lifecycle/src/generic/new-contract-api.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/packages/runtime/lifecycle/src/generic/new-contract-api.ts b/packages/runtime/lifecycle/src/generic/new-contract-api.ts index c29d9701..3b0de110 100644 --- a/packages/runtime/lifecycle/src/generic/new-contract-api.ts +++ b/packages/runtime/lifecycle/src/generic/new-contract-api.ts @@ -55,14 +55,21 @@ export interface ContractsAPI { } export function mkContractsAPI(di: ContractsDI): ContractsAPI { - // TODO: Cache of API's + // The ContractInstance API is stateful as it has some cache, so whenever + // possible we want to reuse the same instance of the API for the same contractId + const apis = new Map(); return { createContract: async (request) => { const [contractId, _] = await createContract(di)(request); - return mkContractInstanceAPI(di, contractId); + apis.set(contractId, mkContractInstanceAPI(di, contractId)); + return apis.get(contractId)!; }, loadContract: async (contractId) => { - return mkContractInstanceAPI(di, contractId); + if (apis.has(contractId)) { + return apis.get(contractId)!; + } else { + return mkContractInstanceAPI(di, contractId); + } }, }; }