cardano-hw-interop-lib 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/LICENSE +16 -0
  2. package/README.md +55 -0
  3. package/dist/src/errors/index.d.ts +3 -0
  4. package/dist/src/errors/index.d.ts.map +1 -0
  5. package/dist/src/errors/index.js +15 -0
  6. package/dist/src/errors/parseError.d.ts +58 -0
  7. package/dist/src/errors/parseError.d.ts.map +1 -0
  8. package/dist/src/errors/parseError.js +66 -0
  9. package/dist/src/errors/validationError.d.ts +24 -0
  10. package/dist/src/errors/validationError.d.ts.map +1 -0
  11. package/dist/src/errors/validationError.js +47 -0
  12. package/dist/src/index.d.ts +18 -0
  13. package/dist/src/index.d.ts.map +1 -0
  14. package/dist/src/index.js +65 -0
  15. package/dist/src/parsers.d.ts +39 -0
  16. package/dist/src/parsers.d.ts.map +1 -0
  17. package/dist/src/parsers.js +98 -0
  18. package/dist/src/txParsers.d.ts +15 -0
  19. package/dist/src/txParsers.d.ts.map +1 -0
  20. package/dist/src/txParsers.js +161 -0
  21. package/dist/src/txSerializers.d.ts +5 -0
  22. package/dist/src/txSerializers.d.ts.map +1 -0
  23. package/dist/src/txSerializers.js +97 -0
  24. package/dist/src/txTransformers.d.ts +5 -0
  25. package/dist/src/txTransformers.d.ts.map +1 -0
  26. package/dist/src/txTransformers.js +50 -0
  27. package/dist/src/txValidators.d.ts +5 -0
  28. package/dist/src/txValidators.d.ts.map +1 -0
  29. package/dist/src/txValidators.js +129 -0
  30. package/dist/src/types.d.ts +192 -0
  31. package/dist/src/types.d.ts.map +1 -0
  32. package/dist/src/types.js +45 -0
  33. package/dist/src/utils.d.ts +8 -0
  34. package/dist/src/utils.d.ts.map +1 -0
  35. package/dist/src/utils.js +36 -0
  36. package/dist/test/integration/__fixtures__/encode.d.ts +9 -0
  37. package/dist/test/integration/__fixtures__/encode.d.ts.map +1 -0
  38. package/dist/test/integration/__fixtures__/encode.js +203 -0
  39. package/dist/test/integration/__fixtures__/parse.d.ts +21 -0
  40. package/dist/test/integration/__fixtures__/parse.d.ts.map +1 -0
  41. package/dist/test/integration/__fixtures__/parse.js +238 -0
  42. package/dist/test/integration/encode.test.d.ts +2 -0
  43. package/dist/test/integration/encode.test.d.ts.map +1 -0
  44. package/dist/test/integration/encode.test.js +16 -0
  45. package/dist/test/integration/parse.test.d.ts +2 -0
  46. package/dist/test/integration/parse.test.d.ts.map +1 -0
  47. package/dist/test/integration/parse.test.js +53 -0
  48. package/dist/test/test_utils.d.ts +24 -0
  49. package/dist/test/test_utils.d.ts.map +1 -0
  50. package/dist/test/test_utils.js +40 -0
  51. package/dist/test/unit/certificates.test.d.ts +1 -0
  52. package/dist/test/unit/certificates.test.d.ts.map +1 -0
  53. package/dist/test/unit/certificates.test.js +2 -0
  54. package/dist/test/unit/inputs.test.d.ts +2 -0
  55. package/dist/test/unit/inputs.test.d.ts.map +1 -0
  56. package/dist/test/unit/inputs.test.js +57 -0
  57. package/dist/test/unit/mint.test.d.ts +2 -0
  58. package/dist/test/unit/mint.test.d.ts.map +1 -0
  59. package/dist/test/unit/mint.test.js +74 -0
  60. package/dist/test/unit/outputs.test.d.ts +2 -0
  61. package/dist/test/unit/outputs.test.d.ts.map +1 -0
  62. package/dist/test/unit/outputs.test.js +77 -0
  63. package/dist/test/unit/withdrawals.test.d.ts +2 -0
  64. package/dist/test/unit/withdrawals.test.d.ts.map +1 -0
  65. package/dist/test/unit/withdrawals.test.js +48 -0
  66. package/package.json +50 -0
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseRawTx = exports.parseTx = exports.parseTxBody = exports.parseMint = exports.parseValidityIntervalStart = exports.parseMetadataHash = exports.parseCertificates = exports.parseTtl = exports.parseFee = exports.parseOutputs = exports.parseInputs = exports.parseWithdrawals = void 0;
4
+ const cbor_1 = require("cbor");
5
+ const errors_1 = require("./errors");
6
+ const parsers_1 = require("./parsers");
7
+ const parsers_2 = require("./parsers");
8
+ const parsers_3 = require("./parsers");
9
+ const types_1 = require("./types");
10
+ const types_2 = require("./types");
11
+ const types_3 = require("./types");
12
+ const dontParse = (data) => data;
13
+ const parseRewardAccount = (0, parsers_3.createParser)(parsers_3.parseBufferOfLength, types_1.REWARD_ACCOUNT_LENGTH, errors_1.ParseErrorReason.INVALID_REWARD_ACCOUNT);
14
+ const parseCoin = (0, parsers_3.createParser)(parsers_3.parseUint, errors_1.ParseErrorReason.INVALID_COIN);
15
+ const parseEpoch = (0, parsers_3.createParser)(parsers_3.parseUint, errors_1.ParseErrorReason.INVALID_COIN);
16
+ const parsePolicyId = (0, parsers_3.createParser)(parsers_3.parseBufferOfLength, types_3.SCRIPT_HASH_LENGTH, errors_1.ParseErrorReason.INVALID_POLICY_ID);
17
+ const parseAssetName = (0, parsers_3.createParser)(parsers_3.parseBufferOfMaxLength, types_3.ASSET_NAME_MAX_LENGTH, errors_1.ParseErrorReason.INVALID_ASSET_NAME);
18
+ const parseMultiasset = (unparsedMultiasset, parseAssetValue, errMsg) => {
19
+ const multiassetMap = (0, parsers_3.parseMap)(unparsedMultiasset, parsePolicyId, (0, parsers_3.createParser)(parsers_3.parseMap, parseAssetName, parseAssetValue, errMsg), errMsg);
20
+ return Array.from(multiassetMap).map(([policyId, tokens]) => ({
21
+ policyId,
22
+ tokens: Array.from(tokens).map(([assetName, amount]) => ({ assetName, amount })),
23
+ }));
24
+ };
25
+ const parseTxInput = (unparsedTxInput) => {
26
+ const [transactionId, index] = (0, parsers_3.parseTuple)(unparsedTxInput, errors_1.ParseErrorReason.INVALID_TX_INPUTS, (0, parsers_3.createParser)(parsers_3.parseBufferOfLength, types_3.TX_ID_HASH_LENGTH, errors_1.ParseErrorReason.INVALID_TRANSACTION_ID), (0, parsers_3.createParser)(parsers_3.parseUint, errors_1.ParseErrorReason.INVALID_TX_INPUT_INDEX));
27
+ return { transactionId, index };
28
+ };
29
+ const parseAmountWithMultiasset = (unparsedAmount) => {
30
+ const [coin, multiasset] = (0, parsers_3.parseTuple)(unparsedAmount, errors_1.ParseErrorReason.INVALID_OUTPUT_AMOUNT, (0, parsers_3.createParser)(parsers_3.parseUint, errors_1.ParseErrorReason.INVALID_OUTPUT_AMOUNT), (0, parsers_3.createParser)(parseMultiasset, (0, parsers_3.createParser)(parsers_3.parseUint, errors_1.ParseErrorReason.INVALID_OUTPUT_MULTIASSET), errors_1.ParseErrorReason.INVALID_OUTPUT_MULTIASSET));
31
+ return { type: types_2.AmountType.WITH_MULTIASSET, coin, multiasset };
32
+ };
33
+ const parseAmountWithoutMultiasset = (unparsedAmount) => ({
34
+ type: types_2.AmountType.WITHOUT_MULTIASSET,
35
+ coin: (0, parsers_3.parseUint)(unparsedAmount, errors_1.ParseErrorReason.INVALID_OUTPUT_AMOUNT),
36
+ });
37
+ const parseAmount = (unparsedAmount) => (0, parsers_1.isUint)(unparsedAmount)
38
+ ? parseAmountWithoutMultiasset(unparsedAmount)
39
+ : parseAmountWithMultiasset(unparsedAmount);
40
+ const parseTxOutput = (unparsedTxOutput) => {
41
+ const [address, amount] = (0, parsers_3.parseTuple)(unparsedTxOutput, errors_1.ParseErrorReason.INVALID_TX_OUTPUT, (0, parsers_3.createParser)(parsers_3.parseBuffer, errors_1.ParseErrorReason.INVALID_OUTPUT_ADDRESS), parseAmount);
42
+ return { address, amount };
43
+ };
44
+ const parseWithdrawals = (unparsedWithdrawals) => {
45
+ const withdrawalsMap = (0, parsers_3.parseMap)(unparsedWithdrawals, parseRewardAccount, (0, parsers_3.createParser)(parsers_3.parseUint, errors_1.ParseErrorReason.INVALID_WITHDRAWAL_AMOUNT), errors_1.ParseErrorReason.INVALID_TX_WITHDRAWALS);
46
+ return Array.from(withdrawalsMap).map(([rewardAccount, amount]) => ({ rewardAccount, amount }));
47
+ };
48
+ exports.parseWithdrawals = parseWithdrawals;
49
+ const parseStakeCredentialType = (unparsedStakeCredentialType) => {
50
+ (0, parsers_3.validate)((0, parsers_3.isNumber)(unparsedStakeCredentialType), errors_1.ParseErrorReason.INVALID_STAKE_CREDENTIAL_TYPE);
51
+ (0, parsers_3.validate)(unparsedStakeCredentialType in types_3.StakeCredentialType, errors_1.ParseErrorReason.INVALID_STAKE_CREDENTIAL_TYPE);
52
+ return unparsedStakeCredentialType;
53
+ };
54
+ const parseStakeCredentialKey = (data) => ({
55
+ hash: (0, parsers_3.parseBufferOfLength)(data[0], types_3.KEY_HASH_LENGTH, errors_1.ParseErrorReason.INVALID_STAKE_CREDENTIAL_KEY_HASH),
56
+ });
57
+ const parseStakeCredentialScript = (data) => ({
58
+ hash: (0, parsers_3.parseBufferOfLength)(data[0], types_3.SCRIPT_HASH_LENGTH, errors_1.ParseErrorReason.INVALID_STAKE_CREDENTIAL_SCRIPT_HASH),
59
+ });
60
+ const parseStakeCredential = (0, parsers_3.createParser)(parsers_3.parseBasedOnType, errors_1.ParseErrorReason.INVALID_STAKE_CREDENTIAL, parseStakeCredentialType, parseStakeCredentialKey, parseStakeCredentialScript);
61
+ const parsePoolKeyHash = (0, parsers_3.createParser)(parsers_3.parseBufferOfLength, types_3.POOL_KEY_HASH_LENGTH, errors_1.ParseErrorReason.INVALID_POOL_KEY_HASH);
62
+ const parseUnitInterval = (0, parsers_3.createParser)(parsers_3.parseTuple, errors_1.ParseErrorReason.INVALID_UNIT_INTERVAL, (0, parsers_3.createParser)(parsers_3.parseUint, errors_1.ParseErrorReason.INVALID_UNIT_INTERVAL_START), (0, parsers_3.createParser)(parsers_3.parseUint, errors_1.ParseErrorReason.INVALID_UNIT_INTERVAL_END));
63
+ const parsePort = (data) => {
64
+ (0, parsers_3.validate)((0, parsers_2.isUintOfMaxSize)(data, types_1.PORT_MAX_SIZE), errors_1.ParseErrorReason.INVALID_RELAY_PORT);
65
+ return data;
66
+ };
67
+ const parseDnsName = (0, parsers_3.createParser)(parsers_3.parseStringOfMaxLength, types_3.DNS_NAME_MAX_LENGTH, errors_1.ParseErrorReason.INVALID_RELAY_DNS_NAME);
68
+ const parseRelayType = (unparsedRelayType) => {
69
+ (0, parsers_3.validate)((0, parsers_3.isNumber)(unparsedRelayType), errors_1.ParseErrorReason.INVALID_RELAY_TYPE);
70
+ (0, parsers_3.validate)(unparsedRelayType in types_3.RelayType, errors_1.ParseErrorReason.INVALID_RELAY_TYPE);
71
+ return unparsedRelayType;
72
+ };
73
+ const parseRelaySingleHostAddress = (data) => ({
74
+ port: (0, parsers_3.parseNullable)(data[0], parsePort),
75
+ ipv4: (0, parsers_3.parseNullable)(data[1], (0, parsers_3.createParser)(parsers_3.parseBufferOfLength, types_3.IPV4_LENGTH, errors_1.ParseErrorReason.INVALID_RELAY_IPV4)),
76
+ ipv6: (0, parsers_3.parseNullable)(data[2], (0, parsers_3.createParser)(parsers_3.parseBufferOfLength, types_3.IPV6_LENGTH, errors_1.ParseErrorReason.INVALID_RELAY_IPV6)),
77
+ });
78
+ const parseRelaySingleHostName = (data) => ({
79
+ port: (0, parsers_3.parseNullable)(data[0], parsePort),
80
+ dnsName: parseDnsName(data[1]),
81
+ });
82
+ const parseRelayMultiHostName = (data) => ({
83
+ dnsName: parseDnsName(data[0]),
84
+ });
85
+ const parseRelay = (0, parsers_3.createParser)(parsers_3.parseBasedOnType, errors_1.ParseErrorReason.INVALID_RELAY, parseRelayType, parseRelaySingleHostAddress, parseRelaySingleHostName, parseRelayMultiHostName);
86
+ const parsePoolMetadata = (unparsedPoolMetadata) => {
87
+ const [url, metadataHash] = (0, parsers_3.parseTuple)(unparsedPoolMetadata, errors_1.ParseErrorReason.INVALID_POOL_METADATA, (0, parsers_3.createParser)(parsers_3.parseStringOfMaxLength, types_3.URL_MAX_LENGTH, errors_1.ParseErrorReason.INVALID_POOL_METADATA_URL), (0, parsers_3.createParser)(parsers_3.parseBufferOfLength, types_3.METADATA_HASH_LENGTH, errors_1.ParseErrorReason.INVALID_POOL_METADATA_METADATA_HASH));
88
+ return { url, metadataHash };
89
+ };
90
+ const parsePoolParams = (unparsedPoolParams) => {
91
+ const [operator, vrfKeyHash, pledge, cost, margin, rewardAccount, poolOwners, relays, poolMetadata] = (0, parsers_3.parseTuple)(unparsedPoolParams, errors_1.ParseErrorReason.INVALID_POOL_PARAMS, parsePoolKeyHash, (0, parsers_3.createParser)(parsers_3.parseBufferOfLength, types_3.VRF_KEY_HASH_LENGTH, errors_1.ParseErrorReason.INVALID_VRF_KEY_HASH), parseCoin, parseCoin, parseUnitInterval, parseRewardAccount, (0, parsers_3.createParser)(parsers_3.parseArray, (0, parsers_3.createParser)(parsers_3.parseBufferOfLength, types_3.KEY_HASH_LENGTH, errors_1.ParseErrorReason.INVALID_POOL_OWNER), errors_1.ParseErrorReason.INVALID_POOL_OWNERS), (0, parsers_3.createParser)(parsers_3.parseArray, parseRelay, errors_1.ParseErrorReason.INVALID_RELAYS), (0, parsers_3.createParser)(parsers_3.parseNullable, parsePoolMetadata));
92
+ return { operator, vrfKeyHash, pledge, cost, margin, rewardAccount, poolOwners, relays, poolMetadata };
93
+ };
94
+ const parseCertificateType = (unparsedCertificateType) => {
95
+ (0, parsers_3.validate)((0, parsers_3.isNumber)(unparsedCertificateType), errors_1.ParseErrorReason.INVALID_CERTIFICATE_TYPE);
96
+ (0, parsers_3.validate)(unparsedCertificateType in types_3.CertificateType, errors_1.ParseErrorReason.INVALID_CERTIFICATE_TYPE);
97
+ return unparsedCertificateType;
98
+ };
99
+ const parseStakeRegistrationCertificate = (data) => ({
100
+ stakeCredential: parseStakeCredential(data[0]),
101
+ });
102
+ const parseStakeDeregistrationCertificate = (data) => ({
103
+ stakeCredential: parseStakeCredential(data[0]),
104
+ });
105
+ const parseStakeDelegationCertificate = (data) => ({
106
+ stakeCredential: parseStakeCredential(data[0]),
107
+ poolKeyHash: parsePoolKeyHash(data[1]),
108
+ });
109
+ const parsePoolRegistrationCertificate = (data) => ({
110
+ poolParams: parsePoolParams(data),
111
+ });
112
+ const parsePoolRetirementCertificate = (data) => ({
113
+ poolKeyHash: parsePoolKeyHash(data[0]),
114
+ epoch: parseEpoch(data[1]),
115
+ });
116
+ const parseGenesisKeyDelegation = (data) => ({
117
+ restOfData: data,
118
+ });
119
+ const parseMoveInstantaneousRewardsCertificate = (data) => ({
120
+ restOfData: data,
121
+ });
122
+ const parseCertificate = (0, parsers_3.createParser)(parsers_3.parseBasedOnType, errors_1.ParseErrorReason.INVALID_CERTIFICATE, parseCertificateType, parseStakeRegistrationCertificate, parseStakeDeregistrationCertificate, parseStakeDelegationCertificate, parsePoolRegistrationCertificate, parsePoolRetirementCertificate, parseGenesisKeyDelegation, parseMoveInstantaneousRewardsCertificate);
123
+ exports.parseInputs = (0, parsers_3.createParser)(parsers_3.parseArray, parseTxInput, errors_1.ParseErrorReason.INVALID_TX_INPUTS);
124
+ exports.parseOutputs = (0, parsers_3.createParser)(parsers_3.parseArray, parseTxOutput, errors_1.ParseErrorReason.INVALID_TX_OUTPUTS);
125
+ exports.parseFee = (0, parsers_3.createParser)(parsers_3.parseUint, errors_1.ParseErrorReason.INVALID_TX_FEE);
126
+ exports.parseTtl = (0, parsers_3.createParser)(parsers_3.parseUint, errors_1.ParseErrorReason.INVALID_TX_TTL);
127
+ exports.parseCertificates = (0, parsers_3.createParser)(parsers_3.parseArray, parseCertificate, errors_1.ParseErrorReason.INVALID_TX_CERTIFICATES);
128
+ exports.parseMetadataHash = (0, parsers_3.createParser)(parsers_3.parseBufferOfLength, types_3.METADATA_HASH_LENGTH, errors_1.ParseErrorReason.INVALID_TX_METADATA_HASH);
129
+ exports.parseValidityIntervalStart = (0, parsers_3.createParser)(parsers_3.parseUint, errors_1.ParseErrorReason.INVALID_TX_VALIDITY_INTERVAL_START);
130
+ exports.parseMint = (0, parsers_3.createParser)(parseMultiasset, (0, parsers_3.createParser)(parsers_3.parseInt, errors_1.ParseErrorReason.INVALID_MINT_AMOUNT), errors_1.ParseErrorReason.INVALID_TX_MINT);
131
+ const parseTxBody = (unparsedTxBody) => {
132
+ (0, parsers_3.validate)((0, parsers_3.isMapWithKeysOfType)(unparsedTxBody, parsers_3.isNumber), errors_1.ParseErrorReason.INVALID_TX_BODY_CBOR);
133
+ return {
134
+ inputs: (0, exports.parseInputs)(unparsedTxBody.get(0)),
135
+ outputs: (0, exports.parseOutputs)(unparsedTxBody.get(1)),
136
+ fee: (0, exports.parseFee)(unparsedTxBody.get(2)),
137
+ ttl: (0, parsers_3.parseOptional)(unparsedTxBody.get(3), exports.parseTtl),
138
+ certificates: (0, parsers_3.parseOptional)(unparsedTxBody.get(4), exports.parseCertificates),
139
+ withdrawals: (0, parsers_3.parseOptional)(unparsedTxBody.get(5), exports.parseWithdrawals),
140
+ update: unparsedTxBody.get(6),
141
+ metadataHash: (0, parsers_3.parseOptional)(unparsedTxBody.get(7), exports.parseMetadataHash),
142
+ validityIntervalStart: (0, parsers_3.parseOptional)(unparsedTxBody.get(8), exports.parseValidityIntervalStart),
143
+ mint: (0, parsers_3.parseOptional)(unparsedTxBody.get(9), exports.parseMint),
144
+ };
145
+ };
146
+ exports.parseTxBody = parseTxBody;
147
+ const parseTx = (unparsedTx) => {
148
+ const [body, witnessSet, auxiliaryData] = (0, parsers_3.parseTuple)(unparsedTx, errors_1.ParseErrorReason.INVALID_TX_CBOR, exports.parseTxBody, dontParse, dontParse);
149
+ return { body, witnessSet, auxiliaryData };
150
+ };
151
+ exports.parseTx = parseTx;
152
+ const parseRawTx = (unparsedRawTx) => {
153
+ const [body, item1, item2] = (0, parsers_3.parseTuple)(unparsedRawTx, errors_1.ParseErrorReason.INVALID_RAW_TX_CBOR, exports.parseTxBody, dontParse, dontParse);
154
+ if (item2 === undefined) {
155
+ return { body, scriptWitnesses: undefined, auxiliaryData: item1 };
156
+ }
157
+ item1.encodeCBOR = cbor_1.Encoder.encodeIndefinite;
158
+ return { body, scriptWitnesses: item1, auxiliaryData: item2 };
159
+ };
160
+ exports.parseRawTx = parseRawTx;
161
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhQYXJzZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R4UGFyc2Vycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBOEI7QUFFOUIscUNBQTJDO0FBRTNDLHVDQUFrQztBQUNsQyx1Q0FBMkM7QUFDM0MsdUNBQTBRO0FBRTFRLG1DQUE4RDtBQUM5RCxtQ0FBb0M7QUFDcEMsbUNBQXdSO0FBRXhSLE1BQU0sU0FBUyxHQUFxQixDQUFDLElBQWEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFBO0FBRTNELE1BQU0sa0JBQWtCLEdBQUcsSUFBQSxzQkFBWSxFQUFDLDZCQUFtQixFQUFFLDZCQUFxQixFQUFFLHlCQUFnQixDQUFDLHNCQUFzQixDQUFDLENBQUE7QUFDNUgsTUFBTSxTQUFTLEdBQUcsSUFBQSxzQkFBWSxFQUFDLG1CQUFTLEVBQUUseUJBQWdCLENBQUMsWUFBWSxDQUFDLENBQUE7QUFDeEUsTUFBTSxVQUFVLEdBQUcsSUFBQSxzQkFBWSxFQUFDLG1CQUFTLEVBQUUseUJBQWdCLENBQUMsWUFBWSxDQUFDLENBQUE7QUFFekUsTUFBTSxhQUFhLEdBQUcsSUFBQSxzQkFBWSxFQUFDLDZCQUFtQixFQUFFLDBCQUFrQixFQUFFLHlCQUFnQixDQUFDLGlCQUFpQixDQUFDLENBQUE7QUFDL0csTUFBTSxjQUFjLEdBQUcsSUFBQSxzQkFBWSxFQUFDLGdDQUFzQixFQUFFLDZCQUFxQixFQUFFLHlCQUFnQixDQUFDLGtCQUFrQixDQUFDLENBQUE7QUFFdkgsTUFBTSxlQUFlLEdBQUcsQ0FBSSxrQkFBMkIsRUFBRSxlQUEwQixFQUFFLE1BQXdCLEVBQWlCLEVBQUU7SUFDNUgsTUFBTSxhQUFhLEdBQUcsSUFBQSxrQkFBUSxFQUMxQixrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLElBQUEsc0JBQVksRUFDUixrQkFBUSxFQUNSLGNBQWMsRUFDZCxlQUFlLEVBQ2YsTUFBTSxDQUNULEVBQ0QsTUFBTSxDQUNULENBQUE7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
@@ -0,0 +1,5 @@
1
+ import type { RawTransaction, Transaction, TransactionBody } from './types';
2
+ export declare const serializeTxBody: (txBody: TransactionBody) => Map<number, unknown>;
3
+ export declare const serializeTx: (tx: Transaction) => unknown[];
4
+ export declare const serializeRawTx: (rawTx: RawTransaction) => unknown[];
5
+ //# sourceMappingURL=txSerializers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"txSerializers.d.ts","sourceRoot":"","sources":["../../src/txSerializers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAwF,cAAc,EAAyC,WAAW,EAAE,eAAe,EAAmD,MAAM,SAAS,CAAA;AA6EzP,eAAO,MAAM,eAAe,WAAY,eAAe,yBAWe,CAAA;AAEtE,eAAO,MAAM,WAAW,OAAQ,WAAW,cAI1C,CAAA;AAED,eAAO,MAAM,cAAc,UAAW,cAAc,cAanD,CAAA"}
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.serializeRawTx = exports.serializeTx = exports.serializeTxBody = void 0;
4
+ const cbor_1 = require("cbor");
5
+ const types_1 = require("./types");
6
+ const identity = (x) => x;
7
+ const serializeTxInput = (input) => [input.transactionId, input.index];
8
+ const serializeMultiasset = (multiasset) => new Map(multiasset.map(({ policyId, tokens }) => [
9
+ policyId,
10
+ new Map(tokens.map(({ assetName, amount }) => [assetName, amount])),
11
+ ]));
12
+ const serializeAmount = (amount) => {
13
+ switch (amount.type) {
14
+ case types_1.AmountType.WITHOUT_MULTIASSET:
15
+ return amount.coin;
16
+ case types_1.AmountType.WITH_MULTIASSET:
17
+ return [amount.coin, serializeMultiasset(amount.multiasset)];
18
+ }
19
+ };
20
+ const serializeTxOutput = (output) => [output.address, serializeAmount(output.amount)];
21
+ const serializeWithdrawals = (withdrawals) => new Map(withdrawals.map(({ rewardAccount, amount }) => [rewardAccount, amount]));
22
+ const serializeRelay = (relay) => {
23
+ switch (relay.type) {
24
+ case types_1.RelayType.SINGLE_HOST_ADDRESS:
25
+ return [relay.type, relay.port, relay.ipv4, relay.ipv6];
26
+ case types_1.RelayType.SINGLE_HOST_NAME:
27
+ return [relay.type, relay.port, relay.dnsName];
28
+ case types_1.RelayType.MULTI_HOST_NAME:
29
+ return [relay.type, relay.dnsName];
30
+ }
31
+ };
32
+ const serializePoolMetadata = (poolMetadata) => [poolMetadata.url, poolMetadata.metadataHash];
33
+ const serializePoolParams = (poolParams) => [
34
+ poolParams.operator,
35
+ poolParams.vrfKeyHash,
36
+ poolParams.pledge,
37
+ poolParams.cost,
38
+ new cbor_1.Tagged(30, poolParams.margin),
39
+ poolParams.rewardAccount,
40
+ poolParams.poolOwners,
41
+ poolParams.relays.map(serializeRelay),
42
+ poolParams.poolMetadata && serializePoolMetadata(poolParams.poolMetadata),
43
+ ];
44
+ const serializeStakeCredential = (stakeCredential) => [stakeCredential.type, stakeCredential.hash];
45
+ const serializeTxCertificate = (certificate) => {
46
+ switch (certificate.type) {
47
+ case types_1.CertificateType.STAKE_REGISTRATION:
48
+ case types_1.CertificateType.STAKE_DEREGISTRATION:
49
+ return [certificate.type, serializeStakeCredential(certificate.stakeCredential)];
50
+ case types_1.CertificateType.STAKE_DELEGATION:
51
+ return [certificate.type, serializeStakeCredential(certificate.stakeCredential), certificate.poolKeyHash];
52
+ case types_1.CertificateType.POOL_REGISTRATION:
53
+ return [certificate.type, ...serializePoolParams(certificate.poolParams)];
54
+ case types_1.CertificateType.POOL_RETIREMENT:
55
+ return [certificate.type, certificate.poolKeyHash, certificate.epoch];
56
+ case types_1.CertificateType.GENESIS_KEY_DELEGATION:
57
+ case types_1.CertificateType.MOVE_INSTANTANEOUS_REWARDS_CERT:
58
+ return [certificate.type, ...certificate.restOfData];
59
+ }
60
+ };
61
+ const serializeTxBody = (txBody) => {
62
+ var _a;
63
+ return new Map(([
64
+ [0, txBody.inputs.map(serializeTxInput)],
65
+ [1, txBody.outputs.map(serializeTxOutput)],
66
+ [2, identity(txBody.fee)],
67
+ [3, identity(txBody.ttl)],
68
+ [4, (_a = txBody.certificates) === null || _a === void 0 ? void 0 : _a.map(serializeTxCertificate)],
69
+ [5, txBody.withdrawals && serializeWithdrawals(txBody.withdrawals)],
70
+ [6, identity(txBody.update)],
71
+ [7, identity(txBody.metadataHash)],
72
+ [8, identity(txBody.validityIntervalStart)],
73
+ [9, txBody.mint && serializeMultiasset(txBody.mint)],
74
+ ]).filter(([_, value]) => value !== undefined));
75
+ };
76
+ exports.serializeTxBody = serializeTxBody;
77
+ const serializeTx = (tx) => [
78
+ (0, exports.serializeTxBody)(tx.body),
79
+ tx.witnessSet,
80
+ tx.auxiliaryData,
81
+ ];
82
+ exports.serializeTx = serializeTx;
83
+ const serializeRawTx = (rawTx) => {
84
+ if (rawTx.scriptWitnesses === undefined) {
85
+ return [
86
+ (0, exports.serializeTxBody)(rawTx.body),
87
+ rawTx.auxiliaryData,
88
+ ];
89
+ }
90
+ return [
91
+ (0, exports.serializeTxBody)(rawTx.body),
92
+ rawTx.scriptWitnesses,
93
+ rawTx.auxiliaryData,
94
+ ];
95
+ };
96
+ exports.serializeRawTx = serializeRawTx;
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhTZXJpYWxpemVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eFNlcmlhbGl6ZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUE2QjtBQUc3QixtQ0FBZ0U7QUFFaEUsTUFBTSxRQUFRLEdBQUcsQ0FBSSxDQUFJLEVBQUssRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUVsQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsS0FBdUIsRUFBRSxFQUFFLENBQ2pELENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7QUFFdEMsTUFBTSxtQkFBbUIsR0FBRyxDQUFJLFVBQXlCLEVBQW9DLEVBQUUsQ0FDM0YsSUFBSSxHQUFHLENBQ0gsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsUUFBUSxFQUFFLE1BQU0sRUFBQyxFQUFFLEVBQUUsQ0FBQztJQUNuQyxRQUFRO0lBQ1IsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0NBQ3BFLENBQUMsQ0FDTCxDQUFBO0FBRUwsTUFBTSxlQUFlLEdBQUcsQ0FBQyxNQUFjLEVBQUUsRUFBRTtJQUN2QyxRQUFRLE1BQU0sQ0FBQyxJQUFJLEVBQUU7UUFDckIsS0FBSyxrQkFBVSxDQUFDLGtCQUFrQjtZQUM5QixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUE7UUFDdEIsS0FBSyxrQkFBVSxDQUFDLGVBQWU7WUFDM0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7S0FDL0Q7QUFDTCxDQUFDLENBQUE7QUFFRCxNQUFNLGlCQUFpQixHQUFHLENBQUMsTUFBeUIsRUFBRSxFQUFFLENBQ3BELENBQUMsTUFB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
@@ -0,0 +1,5 @@
1
+ import type { RawTransaction, Transaction, TransactionBody } from './types';
2
+ export declare const transformTxBody: (txBody: TransactionBody) => TransactionBody;
3
+ export declare const transformTx: (tx: Transaction) => Transaction;
4
+ export declare const transformRawTx: (rawTx: RawTransaction) => RawTransaction;
5
+ //# sourceMappingURL=txTransformers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"txTransformers.d.ts","sourceRoot":"","sources":["../../src/txTransformers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAsB,cAAc,EAAE,WAAW,EAAE,eAAe,EAAqB,MAAM,SAAS,CAAA;AA4ClH,eAAO,MAAM,eAAe,WAAY,eAAe,KAAG,eAKxD,CAAA;AAEF,eAAO,MAAM,WAAW,OAAQ,WAAW,KAAG,WAG5C,CAAA;AAEF,eAAO,MAAM,cAAc,UAAW,cAAc,KAAG,cAGrD,CAAA"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.transformRawTx = exports.transformTx = exports.transformTxBody = void 0;
4
+ const types_1 = require("./types");
5
+ const transformOptionalList = (optionalList) => (optionalList === null || optionalList === void 0 ? void 0 : optionalList.length) === 0 ? undefined : optionalList;
6
+ const transformMultiasset = (multiasset) => multiasset === undefined ? undefined : transformOptionalList(multiasset
7
+ .map(({ policyId, tokens }) => ({ policyId, tokens: transformOptionalList(tokens) }))
8
+ .filter(({ tokens }) => tokens !== undefined));
9
+ const transformAmount = (amount) => {
10
+ switch (amount.type) {
11
+ case types_1.AmountType.WITHOUT_MULTIASSET:
12
+ return amount;
13
+ case types_1.AmountType.WITH_MULTIASSET: {
14
+ const multiasset = transformMultiasset(amount.multiasset);
15
+ if (multiasset === undefined) {
16
+ return {
17
+ type: types_1.AmountType.WITHOUT_MULTIASSET,
18
+ coin: amount.coin,
19
+ };
20
+ }
21
+ return {
22
+ type: types_1.AmountType.WITH_MULTIASSET,
23
+ coin: amount.coin,
24
+ multiasset,
25
+ };
26
+ }
27
+ }
28
+ };
29
+ const transformOutputs = (txOutputs) => txOutputs.map(({ address, amount }) => ({
30
+ address,
31
+ amount: transformAmount(amount),
32
+ }));
33
+ const transformTxBody = (txBody) => ({
34
+ ...txBody,
35
+ outputs: transformOutputs(txBody.outputs),
36
+ certificates: transformOptionalList(txBody.certificates),
37
+ withdrawals: transformOptionalList(txBody.withdrawals),
38
+ });
39
+ exports.transformTxBody = transformTxBody;
40
+ const transformTx = (tx) => ({
41
+ ...tx,
42
+ body: (0, exports.transformTxBody)(tx.body),
43
+ });
44
+ exports.transformTx = transformTx;
45
+ const transformRawTx = (rawTx) => ({
46
+ ...rawTx,
47
+ body: (0, exports.transformTxBody)(rawTx.body),
48
+ });
49
+ exports.transformRawTx = transformRawTx;
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhUcmFuc2Zvcm1lcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHhUcmFuc2Zvcm1lcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsbUNBQW9DO0FBRXBDLE1BQU0scUJBQXFCLEdBQUcsQ0FBSSxZQUFrQixFQUFtQixFQUFFLENBQ3JFLENBQUEsWUFBWSxhQUFaLFlBQVksdUJBQVosWUFBWSxDQUFFLE1BQU0sTUFBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFBO0FBRXpELE1BQU0sbUJBQW1CLEdBQUcsQ0FBSSxVQUEwQixFQUE2QixFQUFFLENBQ3JGLFVBQVUsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQ3hELFVBQVU7S0FDTCxHQUFHLENBQUMsQ0FBQyxFQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUscUJBQXFCLENBQUMsTUFBTSxDQUFDLEVBQUMsQ0FBQyxDQUFDO0tBQ2hGLE1BQU0sQ0FBQyxDQUFDLEVBQUMsTUFBTSxFQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQWtCLENBQ25FLENBQUE7QUFFTCxNQUFNLGVBQWUsR0FBRyxDQUFDLE1BQWMsRUFBVSxFQUFFO0lBQy9DLFFBQVEsTUFBTSxDQUFDLElBQUksRUFBRTtRQUNyQixLQUFLLGtCQUFVLENBQUMsa0JBQWtCO1lBQzlCLE9BQU8sTUFBTSxDQUFBO1FBQ2pCLEtBQUssa0JBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUc3QixNQUFNLFVBQVUsR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUE7WUFFekQsSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFO2dCQUMxQixPQUFPO29CQUNILElBQUksRUFBRSxrQkFBVSxDQUFDLGtCQUFrQjtvQkFDbkMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2lCQUNwQixDQUFBO2FBQ0o7WUFFRCxPQUFPO2dCQUNILElBQUksRUFBRSxrQkFBVSxDQUFDLGVBQWU7Z0JBQ2hDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtnQkFDakIsVUFBVTthQUNiLENBQUE7U0FDSjtLQUNBO0FBQ0wsQ0FBQyxDQUFBO0FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLFNBQThCLEVBQXVCLEVBQUUsQ0FDN0UsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLE9BQU87SUFDUCxNQUFNLEVBQUUsZUFBZSxDQUFDLE1BQU0sQ0FBQztDQUNsQyxDQUFDLENBQUMsQ0FBQTtBQUVBLE1BQU0sZUFBZSxHQUFHLENBQUMsTUFBdUIsRUFBbUIsRUFBRSxDQUFDLENBQUM7SUFDMUUsR0FBRyxNQUFNO0lBQ1QsT0FBTyxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7SUFDekMsWUFBWSxFQUFFLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7SUFDeEQsV0FBVyxFQUFFLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7Q0FDekQsQ0FBQyxDQUFBO0FBTFcsUUFBQSxlQUFlLG1CQUsxQjtBQUVLLE1BQU0sV0FBVyxHQUFHLENBQUMsRUFBZSxFQUFlLEVBQUUsQ0FBQyxDQUFDO0lBQzFELEdBQUcsRUFBRTtJQUNMLElBQUksRUFBRSxJQUFBLHVCQUFlLEVBQUMsRUFBRSxDQUFDLElBQUksQ0FBQztDQUNqQyxDQUFDLENBQUE7QUFIVyxRQUFBLFdBQVcsZUFHdEI7QUFFSyxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQXFCLEVBQWtCLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLEdBQUcsS0FBSztJQUNSLElBQUksRUFBRSxJQUFBLHVCQUFlLEVBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztDQUNwQyxDQUFDLENBQUE7QUFIVyxRQUFBLGNBQWMsa0JBR3pCIn0=
@@ -0,0 +1,5 @@
1
+ /// <reference types="node" />
2
+ import type { ValidationError } from './errors';
3
+ import type { TransactionBody } from './types';
4
+ export declare const validateTxCommon: (inputCbor: Buffer, canonicalCbor: Buffer, txBody: TransactionBody) => ValidationError[];
5
+ //# sourceMappingURL=txValidators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"txValidators.d.ts","sourceRoot":"","sources":["../../src/txValidators.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,eAAe,EAAC,MAAM,UAAU,CAAA;AAE9C,OAAO,KAAK,EAAqJ,eAAe,EAAyD,MAAM,SAAS,CAAA;AAqMxP,eAAO,MAAM,gBAAgB,cAAe,MAAM,iBAAiB,MAAM,UAAU,eAAe,KAAG,eAAe,EAIlH,CAAA"}
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateTxCommon = void 0;
4
+ const errors_1 = require("./errors");
5
+ const types_1 = require("./types");
6
+ const utils_1 = require("./utils");
7
+ const UINT16_MAX = 65535;
8
+ const MAX_UINT_64_STR = "18446744073709551615";
9
+ const MIN_INT_64_STR = "-9223372036854775808";
10
+ const MAX_INT_64_STR = "9223372036854775807";
11
+ function* validate(cond, err) {
12
+ if (!cond)
13
+ yield err;
14
+ }
15
+ function* validateOptional(x, validateFn) {
16
+ x === undefined || x === null ? x : yield* validateFn(x);
17
+ }
18
+ function* validateListConstraints(list, position) {
19
+ yield* validate(list.length > 0, (0, errors_1.err)(errors_1.ValidationErrorReason.OPTIONAL_EMPTY_LISTS_AND_MAPS_MUST_NOT_BE_INCLUDED, position));
20
+ yield* validate(list.length <= UINT16_MAX, (0, errors_1.err)(errors_1.ValidationErrorReason.NUMBER_OF_ELEMENTS_EXCEEDS_UINT16, position));
21
+ }
22
+ const validateUint64 = (n, position) => validate(n >= 0 && n <= BigInt(MAX_UINT_64_STR), (0, errors_1.err)(errors_1.ValidationErrorReason.UNSIGNED_INTEGER_NOT_UINT64, position));
23
+ const validateInt64 = (n, position) => validate(n >= BigInt(MIN_INT_64_STR) && n <= BigInt(MAX_INT_64_STR), (0, errors_1.err)(errors_1.ValidationErrorReason.INTEGER_NOT_INT64, position));
24
+ function* validateTxInputs(txInputs) {
25
+ yield* validateListConstraints(txInputs, 'transaction_body.inputs');
26
+ for (const [index, input] of txInputs.entries()) {
27
+ yield* validateUint64(input.index, `transaction_body.inputs[${index}].index`);
28
+ }
29
+ }
30
+ function* validateMultiasset(multiasset, validateAmount, position) {
31
+ yield* validateListConstraints(multiasset, position);
32
+ for (const { policyId, tokens } of multiasset) {
33
+ yield* validateListConstraints(tokens, `${position}[${policyId.toString('hex')}]`);
34
+ for (const { assetName, amount } of tokens) {
35
+ yield* validateAmount(amount, `${position}[${policyId.toString('hex')}][${assetName.toString('hex')}]`);
36
+ }
37
+ }
38
+ }
39
+ function* validateTxOutputs(txOutputs) {
40
+ yield* validateListConstraints(txOutputs, 'transaction_body.outputs');
41
+ for (const [index, { amount }] of txOutputs.entries()) {
42
+ switch (amount.type) {
43
+ case types_1.AmountType.WITHOUT_MULTIASSET:
44
+ yield* validateUint64(amount.coin, `transaction_body.outputs[${index}].amount`);
45
+ break;
46
+ case types_1.AmountType.WITH_MULTIASSET:
47
+ yield* validateUint64(amount.coin, `transaction_body.outputs[${index}].amount`);
48
+ yield* validate(amount.multiasset.length > 0, (0, errors_1.err)(errors_1.ValidationErrorReason.OUTPUT_WITHOUT_TOKENS_MUST_BE_A_SIMPLE_TUPLE, `transaction_body.outputs[${index}].amount`));
49
+ yield* validateMultiasset(amount.multiasset, validateUint64, `transaction_body.ouputs[${index}]`);
50
+ break;
51
+ }
52
+ }
53
+ }
54
+ function* validateCertificates(certificates) {
55
+ yield* validateListConstraints(certificates, 'transaction_body.certificates');
56
+ for (const [index, certificate] of certificates.entries()) {
57
+ switch (certificate.type) {
58
+ case types_1.CertificateType.POOL_REGISTRATION:
59
+ yield* validateUint64(certificate.poolParams.pledge, `transaction_body.certificates[${index}].pool_params.pledge`);
60
+ yield* validateUint64(certificate.poolParams.cost, `transaction_body.certificates[${index}].pool_params.cost`);
61
+ yield* validateUint64(certificate.poolParams.margin[0], `transaction_body.certificates[${index}].pool_params.margin[0]`);
62
+ yield* validateUint64(certificate.poolParams.margin[1], `transaction_body.certificates[${index}].pool_params.margin[1]`);
63
+ break;
64
+ case types_1.CertificateType.POOL_RETIREMENT:
65
+ yield* validateUint64(certificate.epoch, `transaction_body.certificates[${index}].epoch`);
66
+ break;
67
+ case types_1.CertificateType.GENESIS_KEY_DELEGATION:
68
+ yield* validate(false, (0, errors_1.err)(errors_1.ValidationErrorReason.UNSUPPORTED_CERTIFICATE_GENESIS_KEY_DELEGATION, `transaction_body.certificates[${index}]`));
69
+ break;
70
+ case types_1.CertificateType.MOVE_INSTANTANEOUS_REWARDS_CERT:
71
+ yield* validate(false, (0, errors_1.err)(errors_1.ValidationErrorReason.UNSUPPORTED_CERTIFICATE_MOVE_INSTANTANEOUS_REWARDS_CERT, `transaction_body.certificates[${index}]`));
72
+ break;
73
+ default:
74
+ break;
75
+ }
76
+ }
77
+ }
78
+ function* validateWithdrawals(withdrawals) {
79
+ yield* validateListConstraints(withdrawals, 'transaction_body.withdrawals');
80
+ for (const { rewardAccount, amount } of withdrawals) {
81
+ yield* validateUint64(amount, `transaction_body.withdrawals[${rewardAccount.toString('hex')}]`);
82
+ }
83
+ }
84
+ function* validateStakeCredentials(certificates, withdrawals) {
85
+ const certificateStakeCredentialTypes = new Set();
86
+ const withdrawalStakeCredentialTypes = new Set();
87
+ if (certificates) {
88
+ const certificatesWithStakeCredentials = certificates.filter(({ type }) => (type === types_1.CertificateType.STAKE_REGISTRATION
89
+ || type === types_1.CertificateType.STAKE_DEREGISTRATION
90
+ || type === types_1.CertificateType.STAKE_DELEGATION));
91
+ certificatesWithStakeCredentials.forEach(({ stakeCredential }) => certificateStakeCredentialTypes.add(stakeCredential.type));
92
+ yield* validate(certificateStakeCredentialTypes.size <= 1, (0, errors_1.err)(errors_1.ValidationErrorReason.WITHDRAWALS_MUST_HAVE_THE_SAME_TYPE_OF_STAKE_CREDENTIAL, 'transaction_body.certificates'));
93
+ }
94
+ if (withdrawals) {
95
+ withdrawals.forEach(({ rewardAccount }) => withdrawalStakeCredentialTypes.add((0, utils_1.getRewardAccountStakeCredentialType)(rewardAccount)));
96
+ yield* validate(withdrawalStakeCredentialTypes.size <= 1, (0, errors_1.err)(errors_1.ValidationErrorReason.WITHDRAWALS_MUST_HAVE_THE_SAME_TYPE_OF_STAKE_CREDENTIAL, 'transaction_body.withdrawals'));
97
+ }
98
+ if (certificateStakeCredentialTypes.size === 1 && withdrawalStakeCredentialTypes.size === 1) {
99
+ yield* validate([...certificateStakeCredentialTypes][0] === [...withdrawalStakeCredentialTypes][0], (0, errors_1.err)(errors_1.ValidationErrorReason.CERTIFICATES_AND_WITHDRAWALS_STAKE_CREDENTIAL_TYPES_MUST_BE_CONSISTENT, 'transaction_body'));
100
+ }
101
+ }
102
+ const validateMint = (mint) => validateMultiasset(mint, validateInt64, 'transaction_body.mint');
103
+ function* validatePoolRegistrationTransaction(txBody) {
104
+ if (!txBody.certificates || txBody.certificates.find(({ type }) => type === types_1.CertificateType.POOL_REGISTRATION) === undefined) {
105
+ return;
106
+ }
107
+ yield* validate(txBody.certificates.length === 1, (0, errors_1.err)(errors_1.ValidationErrorReason.POOL_REGISTRATION_CERTIFICATE_WITH_OTHER_CERTIFICATES, 'transaction_body.certificates'));
108
+ yield* validate(!txBody.withdrawals || txBody.withdrawals.length === 0, (0, errors_1.err)(errors_1.ValidationErrorReason.POOL_REGISTRATION_CERTIFICATE_WITH_WITHDRAWALS, 'transaction_body.withdrawals'));
109
+ yield* validate(!txBody.mint || txBody.mint.length === 0 || txBody.mint.every(({ tokens }) => tokens.length === 0), (0, errors_1.err)(errors_1.ValidationErrorReason.POOL_REGISTRATION_CERTIFICATE_WITH_MINT_ENTRY, 'transaction_body.mint'));
110
+ }
111
+ function* validateTxBody(txBody) {
112
+ yield* validateTxInputs(txBody.inputs);
113
+ yield* validateTxOutputs(txBody.outputs);
114
+ yield* validateUint64(txBody.fee, 'transaction_body.fee');
115
+ yield* validateOptional(txBody.ttl, (0, utils_1.bind)(validateUint64, 'transaction_body.ttl'));
116
+ yield* validateOptional(txBody.certificates, validateCertificates);
117
+ yield* validateOptional(txBody.withdrawals, validateWithdrawals);
118
+ yield* validateStakeCredentials(txBody.certificates, txBody.withdrawals);
119
+ yield* validate(txBody.update === undefined, (0, errors_1.err)(errors_1.ValidationErrorReason.UNSUPPORTED_TX_UPDATE, 'transaction_body.update'));
120
+ yield* validateOptional(txBody.validityIntervalStart, (0, utils_1.bind)(validateUint64, 'transaction_body.validity_interval_start'));
121
+ yield* validateOptional(txBody.mint, validateMint);
122
+ yield* validatePoolRegistrationTransaction(txBody);
123
+ }
124
+ const validateTxCommon = (inputCbor, canonicalCbor, txBody) => ([
125
+ ...validate(inputCbor.equals(canonicalCbor), (0, errors_1.err)(errors_1.ValidationErrorReason.CBOR_IS_NOT_CANONICAL, 'transaction')),
126
+ ...validateTxBody(txBody),
127
+ ]);
128
+ exports.validateTxCommon = validateTxCommon;
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhWYWxpZGF0b3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R4VmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxxQ0FBcUQ7QUFFckQsbUNBQXFEO0FBQ3JELG1DQUFtRTtBQUVuRSxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUE7QUFDeEIsTUFBTSxlQUFlLEdBQUcsc0JBQXNCLENBQUE7QUFDOUMsTUFBTSxjQUFjLEdBQUcsc0JBQXNCLENBQUE7QUFDN0MsTUFBTSxjQUFjLEdBQUcscUJBQXFCLENBQUE7QUFTNUMsUUFBUyxDQUFDLENBQUEsUUFBUSxDQUFDLElBQWEsRUFBRSxHQUFvQjtJQUNsRCxJQUFJLENBQUMsSUFBSTtRQUFFLE1BQU0sR0FBRyxDQUFBO0FBQ3hCLENBQUM7QUFLRCxRQUFTLENBQUMsQ0FBQSxnQkFBZ0IsQ0FBSSxDQUF1QixFQUFFLFVBQXlDO0lBQzVGLENBQUMsS0FBSyxTQUFTLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDNUQsQ0FBQztBQU9ELFFBQVMsQ0FBQyxDQUFBLHVCQUF1QixDQUFDLElBQVcsRUFBRSxRQUFnQjtJQUMzRCxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsSUFBQSxZQUFHLEVBQUMsOEJBQXFCLENBQUMsa0RBQWtELEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQTtJQUN6SCxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxVQUFVLEVBQUUsSUFBQSxZQUFHLEVBQUMsOEJBQXFCLENBQUMsaUNBQWlDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQTtBQUN0SCxDQUFDO0FBRUQsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFPLEVBQUUsUUFB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