diff --git a/packages/cardano-services/src/Utxo/DbSyncUtxoProvider/mappers.ts b/packages/cardano-services/src/Utxo/DbSyncUtxoProvider/mappers.ts index efb14b8d76e..cc56fa0a567 100644 --- a/packages/cardano-services/src/Utxo/DbSyncUtxoProvider/mappers.ts +++ b/packages/cardano-services/src/Utxo/DbSyncUtxoProvider/mappers.ts @@ -53,6 +53,18 @@ const parseReferenceScript = (model: UtxoModel): Cardano.Script => { version: Cardano.PlutusLanguageVersion.V2 }; break; + case ReferenceScriptType.PlutusV3: + if (!isNotNil(model.reference_script_bytes)) + throw new SerializationError( + SerializationFailure.InvalidScript, + 'Unexpected error deserializing PlutusV2 script. Data is null' + ); + script = { + __type: Cardano.ScriptType.Plutus, + bytes: model.reference_script_bytes as unknown as HexBlob, + version: Cardano.PlutusLanguageVersion.V3 + }; + break; default: throw new SerializationError( SerializationFailure.InvalidScriptType, diff --git a/packages/cardano-services/src/Utxo/DbSyncUtxoProvider/types.ts b/packages/cardano-services/src/Utxo/DbSyncUtxoProvider/types.ts index 99d8f0fe4cd..9476ef34b0e 100644 --- a/packages/cardano-services/src/Utxo/DbSyncUtxoProvider/types.ts +++ b/packages/cardano-services/src/Utxo/DbSyncUtxoProvider/types.ts @@ -28,5 +28,6 @@ export enum ReferenceScriptType { Multisig = 'multisig', Timelock = 'timelock', PlutusV1 = 'plutusV1', - PlutusV2 = 'plutusV2' + PlutusV2 = 'plutusV2', + PlutusV3 = 'plutusV3' } diff --git a/packages/core/src/Serialization/Update/Costmdls/CostModel.ts b/packages/core/src/Serialization/Update/Costmdls/CostModel.ts index 22bda39484f..f4e1324144b 100644 --- a/packages/core/src/Serialization/Update/Costmdls/CostModel.ts +++ b/packages/core/src/Serialization/Update/Costmdls/CostModel.ts @@ -1,10 +1,6 @@ -import { InvalidArgumentError, InvalidStateError } from '@cardano-sdk/util'; +import { InvalidArgumentError } from '@cardano-sdk/util'; import { PlutusLanguageVersion } from '../../../Cardano/types/Script'; -const PLUTUS_V1_COST_MODEL_OP_COUNT = 166; -const PLUTUS_V2_COST_MODEL_OP_COUNT = 175; -const PLUTUS_V3_COST_MODEL_OP_COUNT = 179; - /** * The execution of plutus scripts consumes resources. To make sure that these * scripts don't run indefinitely or consume excessive resources (which would be @@ -28,32 +24,6 @@ export class CostModel { constructor(language: PlutusLanguageVersion, costs: Array) { this.#language = language; this.#costs = costs; - - switch (this.#language) { - case PlutusLanguageVersion.V1: - if (costs.length !== PLUTUS_V1_COST_MODEL_OP_COUNT) - throw new InvalidArgumentError( - 'costs', - `Cost model for PlutusV2 language should have ${PLUTUS_V2_COST_MODEL_OP_COUNT} operations, but got ${costs.length}.` - ); - break; - case PlutusLanguageVersion.V2: - if (costs.length !== PLUTUS_V2_COST_MODEL_OP_COUNT) - throw new InvalidArgumentError( - 'costs', - `Cost model for PlutusV2 language should have ${PLUTUS_V2_COST_MODEL_OP_COUNT} operations, but got ${costs.length}.` - ); - break; - case PlutusLanguageVersion.V3: - if (costs.length !== PLUTUS_V3_COST_MODEL_OP_COUNT) - throw new InvalidArgumentError( - 'costs', - `Cost model for PlutusV3 language should have ${PLUTUS_V3_COST_MODEL_OP_COUNT} operations, but got ${costs.length}.` - ); - break; - default: - throw new InvalidStateError('Invalid plutus language version.'); - } } /** @@ -141,21 +111,6 @@ export class CostModel { * @returns true if is a valid operation; otherwise; false. */ #isOperationValid(operation: number): boolean { - let isValid = false; - switch (this.#language) { - case PlutusLanguageVersion.V1: - isValid = operation >= 0 && operation < PLUTUS_V1_COST_MODEL_OP_COUNT; - break; - case PlutusLanguageVersion.V2: - isValid = operation >= 0 && operation < PLUTUS_V2_COST_MODEL_OP_COUNT; - break; - case PlutusLanguageVersion.V3: - isValid = operation >= 0 && operation < PLUTUS_V3_COST_MODEL_OP_COUNT; - break; - default: - throw new InvalidStateError('Invalid plutus language version.'); - } - - return isValid; + return operation >= 0; } }