diff --git a/packages/ssz/src/type/vectorBasic.ts b/packages/ssz/src/type/vectorBasic.ts index 497d73af..e280bb0a 100644 --- a/packages/ssz/src/type/vectorBasic.ts +++ b/packages/ssz/src/type/vectorBasic.ts @@ -1,4 +1,5 @@ import {HashComputationLevel, Node, Tree} from "@chainsafe/persistent-merkle-tree"; +import type {ArrayLike} from "../interface.ts"; import {maxChunksToDepth} from "../util/merkleize.ts"; import {namedClass} from "../util/named.ts"; import {Require} from "../util/types.ts"; @@ -76,6 +77,10 @@ export class VectorBasicType> return new ArrayBasicTreeView(this, tree); } + toView(value: ArrayLike>): ArrayBasicTreeView { + return super.toView(value as ValueOf[]); + } + getViewDU(node: Node, cache?: unknown): ArrayBasicTreeViewDU { // cache type should be validated (if applicate) in the view @@ -100,6 +105,10 @@ export class VectorBasicType> return view.cache; } + toViewDU(value: ArrayLike>): ArrayBasicTreeViewDU { + return super.toViewDU(value as ValueOf[]); + } + // Serialization + deserialization value_serializedSize(): number { diff --git a/packages/ssz/test/unit/byType/vectorBasic/tree.test.ts b/packages/ssz/test/unit/byType/vectorBasic/tree.test.ts index ef7df15f..65dea07c 100644 --- a/packages/ssz/test/unit/byType/vectorBasic/tree.test.ts +++ b/packages/ssz/test/unit/byType/vectorBasic/tree.test.ts @@ -65,3 +65,17 @@ describe("VectorBasicType batchHashTreeRoot", () => { expect(viewDU.batchHashTreeRoot()).toEqual(expectedRoot); }); }); + +describe("VectorBasicType array-like values", () => { + const uint32VectorType = new VectorBasicType(new UintNumberType(4), 4); + const typedValue = new Uint32Array([11, 22, 33, 44]); + const arrayValue = [11, 22, 33, 44]; + + it("accepts Uint32Array in toView", () => { + expect(uint32VectorType.toView(typedValue).toValue()).toEqual(arrayValue); + }); + + it("accepts Uint32Array in toViewDU", () => { + expect(uint32VectorType.toViewDU(typedValue).toValue()).toEqual(arrayValue); + }); +});