Skip to content

Commit dd3a43b

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

File tree

5 files changed

+21
-15
lines changed

5 files changed

+21
-15
lines changed

Diff for: 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

Diff for: 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>;

Diff for: 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

Diff for: packages/core/test/Serialization/TransactionBody/ProposalProcedure/ParameterChangeAction.test.ts

+6-4
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { ParameterChangeAction } from '../../../../src/Serialization';
77

88
// Test data used in the following tests was generated with the cardano-serialization-lib
99
const cbor = HexBlob(
10-
'8400825820000000000000000000000000000000000000000000000000000000000000000003b8200018640118c80219012c03190190041901f4051a001e8480061a0bebc200071903200819038409d81e8201020ad81e8201030bd81e8201040cd81e8201050d8201582000000000000000000000000000000000000000000000000000000000000000000e820103101903e8111988b812a20098a61a0003236119032c01011903e819023b00011903e8195e7104011903e818201a0001ca761928eb041959d818641959d818641959d818641959d818641959d818641959d81864186418641959d81864194c5118201a0002acfa182019b551041a000363151901ff00011a00015c3518201a000797751936f404021a0002ff941a0006ea7818dc0001011903e8196ff604021a0003bd081a00034ec5183e011a00102e0f19312a011a00032e801901a5011a0002da781903e819cf06011a00013a34182019a8f118201903e818201a00013aac0119e143041903e80a1a00030219189c011a00030219189c011a0003207c1901d9011a000330001901ff0119ccf3182019fd40182019ffd5182019581e18201940b318201a00012adf18201a0002ff941a0006ea7818dc0001011a00010f92192da7000119eabb18201a0002ff941a0006ea7818dc0001011a0002ff941a0006ea7818dc0001011a000c504e197712041a001d6af61a0001425b041a00040c660004001a00014fab18201a0003236119032c010119a0de18201a00033d7618201979f41820197fb8182019a95d1820197df718201995aa18201a0374f693194a1f0a0198af1a0003236119032c01011903e819023b00011903e8195e7104011903e818201a0001ca761928eb041959d818641959d818641959d818641959d818641959d818641959d81864186418641959d81864194c5118201a0002acfa182019b551041a000363151901ff00011a00015c3518201a000797751936f404021a0002ff941a0006ea7818dc0001011903e8196ff604021a0003bd081a00034ec5183e011a00102e0f19312a011a00032e801901a5011a0002da781903e819cf06011a00013a34182019a8f118201903e818201a00013aac0119e143041903e80a1a00030219189c011a00030219189c011a0003207c1901d9011a000330001901ff0119ccf3182019fd40182019ffd5182019581e18201940b318201a00012adf18201a0002ff941a0006ea7818dc0001011a00010f92192da7000119eabb18201a0002ff941a0006ea7818dc0001011a0002ff941a0006ea7818dc0001011a0011b22c1a0005fdde00021a000c504e197712041a001d6af61a0001425b041a00040c660004001a00014fab18201a0003236119032c010119a0de18201a00033d7618201979f41820197fb8182019a95d1820197df718201995aa18201a0223accc0a1a0374f693194a1f0a1a02515e841980b30a1382d81e820102d81e82010214821b00000001000000001b000000010000000015821b00000001000000001b0000000100000000161903ba1719035418181864181985d81e820000d81e820101d81e820202d81e820303d81e820101181a8ad81e820000d81e820101d81e820202d81e820303d81e820404d81e820505d81e820606d81e820707d81e820808d81e820909181b1864181c18c8181d19012c181e1903e8181f1907d01820191388581c8293d319ef5b3ac72366dd28006bd315b715f7e7cfcbd3004129b80d'
10+
'8400825820000000000000000000000000000000000000000000000000000000000000000003b81f0018640118c80219012c03190190041901f4051a001e8480061a0bebc200071903200819038409d81e8201020ad81e8201030bd81e8201040cd81e8201050d820158200000000000000000000000000000000000000000000000000000000000000000101903e8111988b812a20098a61a0003236119032c01011903e819023b00011903e8195e7104011903e818201a0001ca761928eb041959d818641959d818641959d818641959d818641959d818641959d81864186418641959d81864194c5118201a0002acfa182019b551041a000363151901ff00011a00015c3518201a000797751936f404021a0002ff941a0006ea7818dc0001011903e8196ff604021a0003bd081a00034ec5183e011a00102e0f19312a011a00032e801901a5011a0002da781903e819cf06011a00013a34182019a8f118201903e818201a00013aac0119e143041903e80a1a00030219189c011a00030219189c011a0003207c1901d9011a000330001901ff0119ccf3182019fd40182019ffd5182019581e18201940b318201a00012adf18201a0002ff941a0006ea7818dc0001011a00010f92192da7000119eabb18201a0002ff941a0006ea7818dc0001011a0002ff941a0006ea7818dc0001011a000c504e197712041a001d6af61a0001425b041a00040c660004001a00014fab18201a0003236119032c010119a0de18201a00033d7618201979f41820197fb8182019a95d1820197df718201995aa18201a0374f693194a1f0a0198af1a0003236119032c01011903e819023b00011903e8195e7104011903e818201a0001ca761928eb041959d818641959d818641959d818641959d818641959d818641959d81864186418641959d81864194c5118201a0002acfa182019b551041a000363151901ff00011a00015c3518201a000797751936f404021a0002ff941a0006ea7818dc0001011903e8196ff604021a0003bd081a00034ec5183e011a00102e0f19312a011a00032e801901a5011a0002da781903e819cf06011a00013a34182019a8f118201903e818201a00013aac0119e143041903e80a1a00030219189c011a00030219189c011a0003207c1901d9011a000330001901ff0119ccf3182019fd40182019ffd5182019581e18201940b318201a00012adf18201a0002ff941a0006ea7818dc0001011a00010f92192da7000119eabb18201a0002ff941a0006ea7818dc0001011a0002ff941a0006ea7818dc0001011a0011b22c1a0005fdde00021a000c504e197712041a001d6af61a0001425b041a00040c660004001a00014fab18201a0003236119032c010119a0de18201a00033d7618201979f41820197fb8182019a95d1820197df718201995aa18201a0223accc0a1a0374f693194a1f0a1a02515e841980b30a1382d81e820102d81e82010214821b00000001000000001b000000010000000015821b00000001000000001b0000000100000000161903ba1719035418181864181985d81e820000d81e820101d81e820202d81e820303d81e820101181a8ad81e820000d81e820101d81e820202d81e820303d81e820404d81e820505d81e820606d81e820707d81e820808d81e820909181b1864181c18c8181d19012c181e1903e8181f1907d01820191388581c8293d319ef5b3ac72366dd28006bd315b715f7e7cfcbd3004129b80d'
1111
);
1212

1313
const vasilPlutusV1Costmdls = [
@@ -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
}

Diff for: 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)