Skip to content

Commit 5e368f1

Browse files
committed
feat: serialize only valid conway params in gov action
1 parent 86bba7b commit 5e368f1

File tree

5 files changed

+20
-14
lines changed

5 files changed

+20
-14
lines changed

packages/core/src/Cardano/types/Governance.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import * as Crypto from '@cardano-sdk/crypto';
22
import { Credential, CredentialType, RewardAccount } from '../Address';
33
import { EpochNo, Fraction, ProtocolVersion, TransactionId } from '.';
44
import { Lovelace } from './Value';
5-
import { ProtocolParametersUpdate } from './ProtocolParameters';
5+
import { ProtocolParametersUpdateConway } from './ProtocolParameters';
66

77
export type Anchor = {
88
url: string;
@@ -43,7 +43,7 @@ export type Constitution = {
4343
export type ParameterChangeAction = {
4444
__typename: GovernanceActionType.parameter_change_action;
4545
governanceActionId: GovernanceActionId | null;
46-
protocolParamUpdate: ProtocolParametersUpdate;
46+
protocolParamUpdate: ProtocolParametersUpdateConway;
4747
policyHash: Crypto.Hash28ByteBase16 | null;
4848
};
4949

packages/core/src/Cardano/types/ProtocolParameters.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -137,13 +137,13 @@ type NewProtocolParamsInConway = {
137137
minFeeRefScriptCostPerByte: string;
138138
};
139139

140-
type ConwayProtocolParameters = BabbageProtocolParameters & NewProtocolParamsInConway;
141-
142-
export type ProtocolParameters = ConwayProtocolParameters;
140+
export type ProtocolParameters = BabbageProtocolParameters & NewProtocolParamsInConway;
141+
export type ConwayProtocolParameters = Omit<ProtocolParameters, 'protocolVersion'>;
143142

144143
// Even tho extraEntropy was deprecated on babbage era, and protocolVersion was deprecated in conway era,
145144
// they are still present in the ProtocolParametersUpdate structure since this structure is backward compatible with all eras.
146145
export type ProtocolParametersUpdate = Partial<ProtocolParameters & Pick<AlonzoProtocolParams, 'extraEntropy'>>;
146+
export type ProtocolParametersUpdateConway = Partial<ConwayProtocolParameters>;
147147

148148
export type GenesisDelegateKeyHash = Crypto.Hash28ByteBase16;
149149
export type ProposedProtocolParameterUpdates = Map<GenesisDelegateKeyHash, ProtocolParametersUpdate>;

packages/core/src/Serialization/Update/ProtocolParamUpdate.ts

+9-5
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,9 @@ export class ProtocolParamUpdate {
446446
*
447447
* @param parametersUpdate core parametersUpdate object.
448448
*/
449-
static fromCore(parametersUpdate: Cardano.ProtocolParametersUpdate) {
449+
static fromCore<T extends Cardano.ProtocolParametersUpdateConway = Cardano.ProtocolParametersUpdate>(
450+
parametersUpdate: T
451+
) {
450452
const params = new ProtocolParamUpdate();
451453

452454
params.#minFeeA = parametersUpdate.minFeeCoefficient ? BigInt(parametersUpdate.minFeeCoefficient) : undefined;
@@ -470,14 +472,10 @@ export class ProtocolParamUpdate {
470472
? UnitInterval.fromFloat(Number(parametersUpdate.decentralizationParameter))
471473
: undefined;
472474
params.#minPoolCost = parametersUpdate.minPoolCost ? BigInt(parametersUpdate.minPoolCost) : undefined;
473-
params.#protocolVersion = parametersUpdate.protocolVersion
474-
? ProtocolVersion.fromCore(parametersUpdate.protocolVersion)
475-
: undefined;
476475
params.#maxValueSize = parametersUpdate.maxValueSize;
477476
params.#maxTxSize = parametersUpdate.maxTxSize;
478477
params.#collateralPercentage = parametersUpdate.collateralPercentage;
479478
params.#maxCollateralInputs = parametersUpdate.maxCollateralInputs;
480-
params.#extraEntropy = parametersUpdate.extraEntropy ? HexBlob(parametersUpdate.extraEntropy) : undefined;
481479
params.#costModels = parametersUpdate.costModels ? Costmdls.fromCore(parametersUpdate.costModels) : undefined;
482480
params.#executionCosts = parametersUpdate.prices ? ExUnitPrices.fromCore(parametersUpdate.prices) : undefined;
483481
params.#maxTxExUnits = parametersUpdate.maxExecutionUnitsPerTransaction
@@ -503,6 +501,12 @@ export class ProtocolParamUpdate {
503501
? UnitInterval.fromFloat(Number(parametersUpdate.minFeeRefScriptCostPerByte))
504502
: undefined;
505503

504+
const { protocolVersion, extraEntropy } = parametersUpdate as unknown as Cardano.ProtocolParametersUpdate;
505+
if (protocolVersion !== undefined || extraEntropy !== undefined) {
506+
params.#protocolVersion = protocolVersion ? ProtocolVersion.fromCore(protocolVersion) : undefined;
507+
params.#extraEntropy = extraEntropy ? HexBlob(extraEntropy) : undefined;
508+
}
509+
506510
return params;
507511
}
508512

packages/core/test/Serialization/TransactionBody/ProposalProcedure/ParameterChangeAction.test.ts

+5-3
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,15 @@ const vasilPlutusV2Costmdls = [
3636

3737
const core = {
3838
__typename: Cardano.GovernanceActionType.parameter_change_action,
39-
governanceActionId: { actionIndex: 3, id: '0000000000000000000000000000000000000000000000000000000000000000' },
39+
governanceActionId: {
40+
actionIndex: 3,
41+
id: Cardano.TransactionId('0000000000000000000000000000000000000000000000000000000000000000')
42+
},
4043
policyHash: Hash28ByteBase16('8293d319ef5b3ac72366dd28006bd315b715f7e7cfcbd3004129b80d'),
4144
protocolParamUpdate: {
4245
coinsPerUtxoByte: 35_000,
4346
collateralPercentage: 852,
44-
committeeTermLimit: 200,
47+
committeeTermLimit: Cardano.EpochNo(200),
4548
costModels: new Map([
4649
[PlutusLanguageVersion.V1, vasilPlutusV1Costmdls],
4750
[PlutusLanguageVersion.V2, vasilPlutusV2Costmdls]
@@ -88,7 +91,6 @@ const core = {
8891
securityRelevantParamVotingThreshold: { denominator: 1, numerator: 1 }
8992
},
9093
prices: { memory: 0.5, steps: 0.5 },
91-
protocolVersion: { major: 1, minor: 3 },
9294
stakeKeyDeposit: 2_000_000,
9395
treasuryExpansion: '0.25'
9496
}

packages/util-dev/src/mockProviders/mockData.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ export const protocolParameters = {
4242
prices: { memory: 0.0577, steps: 0.000_007_21 },
4343
protocolVersion: { major: 5, minor: 0 },
4444
stakeKeyDeposit: 2_000_000
45-
} as Cardano.ProtocolParameters;
45+
} as Required<Cardano.ProtocolParametersUpdate>;
4646

4747
export const epochRewards = [
4848
{

0 commit comments

Comments
 (0)