Skip to content

Commit 3785092

Browse files
fix: plutus list now serializes using the correct encoding depending on its size
1 parent 9a7856a commit 3785092

File tree

2 files changed

+13
-10
lines changed

2 files changed

+13
-10
lines changed

packages/core/src/Serialization/PlutusData/PlutusList.ts

+4-7
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import { bytesToHex, hexToBytes } from '../../util/misc';
66
/** A list of plutus data. */
77
export class PlutusList {
88
readonly #array = new Array<PlutusData>();
9-
#useIndefiniteEncoding = false;
109

1110
/**
1211
* Serializes this PlutusList instance into its CBOR representation as a Uint8Array.
@@ -15,8 +14,9 @@ export class PlutusList {
1514
*/
1615
toCbor(): HexBlob {
1716
const writer = new CborWriter();
17+
const shouldUseIndefinite = this.#array.length > 0;
1818

19-
if (this.#useIndefiniteEncoding) {
19+
if (shouldUseIndefinite) {
2020
writer.writeStartArray();
2121
} else {
2222
writer.writeStartArray(this.#array.length);
@@ -26,7 +26,7 @@ export class PlutusList {
2626
writer.writeEncodedValue(hexToBytes(elem.toCbor()));
2727
}
2828

29-
if (this.#useIndefiniteEncoding) writer.writeEndArray();
29+
if (shouldUseIndefinite) writer.writeEndArray();
3030

3131
return HexBlob.fromBytes(writer.encode());
3232
}
@@ -41,9 +41,7 @@ export class PlutusList {
4141
const list = new PlutusList();
4242
const reader = new CborReader(cbor);
4343

44-
const length = reader.readStartArray();
45-
46-
if (length === null) list.#useIndefiniteEncoding = true;
44+
reader.readStartArray();
4745

4846
while (reader.peekState() !== CborReaderState.EndArray) {
4947
list.add(PlutusData.fromCbor(bytesToHex(reader.readEncodedValue())));
@@ -88,7 +86,6 @@ export class PlutusList {
8886
* @returns true if objects are equals; otherwise false.
8987
*/
9088
equals(other: PlutusList): boolean {
91-
if (this.#useIndefiniteEncoding !== other.#useIndefiniteEncoding) return false;
9289
if (this.#array.length !== other.#array.length) return false;
9390

9491
for (let i = 0; i < this.#array.length; ++i) {

packages/core/test/Serialization/PlutusData.test.ts

+9-3
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,12 @@ describe('PlutusData', () => {
133133
});
134134

135135
describe('List', () => {
136+
it('can encode an empty plutus list', () => {
137+
const data = new Serialization.PlutusList();
138+
139+
expect(data.toCbor()).toEqual('80');
140+
});
141+
136142
it('can encode simple plutus list', () => {
137143
const data = new Serialization.PlutusList();
138144

@@ -142,7 +148,7 @@ describe('PlutusData', () => {
142148
data.add(Serialization.PlutusData.newInteger(4n));
143149
data.add(Serialization.PlutusData.newInteger(5n));
144150

145-
expect(data.toCbor()).toEqual('850102030405');
151+
expect(data.toCbor()).toEqual('9f0102030405ff');
146152
});
147153

148154
it('can encode a list of plutus list', () => {
@@ -162,7 +168,7 @@ describe('PlutusData', () => {
162168
outer.add(Serialization.PlutusData.newList(innerList));
163169
outer.add(Serialization.PlutusData.newInteger(5n));
164170

165-
expect(outer.toCbor()).toEqual('85010285010203040585010203040505');
171+
expect(outer.toCbor()).toEqual('9f01029f0102030405ff9f0102030405ff05ff');
166172
});
167173
});
168174

@@ -292,7 +298,7 @@ describe('PlutusData', () => {
292298

293299
const data = new Serialization.ConstrPlutusData(0n, args);
294300

295-
expect(data.toCbor()).toEqual('d879850102030405');
301+
expect(data.toCbor()).toEqual('d8799f0102030405ff');
296302
});
297303
});
298304

0 commit comments

Comments
 (0)