From 9b1917ab2b04a6af4035ab7cdd25956faabb90d6 Mon Sep 17 00:00:00 2001 From: Nico Flaig Date: Tue, 17 Mar 2026 09:22:14 +0000 Subject: [PATCH 1/4] fix: allow array-like input for VectorBasicType views --- packages/ssz/src/type/vectorBasic.ts | 15 ++++++++++----- .../ssz/test/unit/byType/vectorBasic/tree.test.ts | 14 ++++++++++++++ 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/packages/ssz/src/type/vectorBasic.ts b/packages/ssz/src/type/vectorBasic.ts index 497d73af..0868cdb3 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"; @@ -41,11 +42,7 @@ export class VectorBasicType> readonly isViewMutable = true; protected readonly defaultLen: number; - constructor( - readonly elementType: ElementType, - readonly length: number, - opts?: VectorBasicOpts - ) { + constructor(readonly elementType: ElementType, readonly length: number, opts?: VectorBasicOpts) { super(elementType); if (!elementType.isBasic) throw Error("elementType must be basic"); @@ -76,6 +73,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 +101,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); + }); +}); From c1e6c66156d94862726b30159096fb3e63f06764 Mon Sep 17 00:00:00 2001 From: Nico Flaig Date: Tue, 17 Mar 2026 09:26:03 +0000 Subject: [PATCH 2/4] Revert constructor change --- packages/ssz/src/type/vectorBasic.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/ssz/src/type/vectorBasic.ts b/packages/ssz/src/type/vectorBasic.ts index 0868cdb3..e280bb0a 100644 --- a/packages/ssz/src/type/vectorBasic.ts +++ b/packages/ssz/src/type/vectorBasic.ts @@ -42,7 +42,11 @@ export class VectorBasicType> readonly isViewMutable = true; protected readonly defaultLen: number; - constructor(readonly elementType: ElementType, readonly length: number, opts?: VectorBasicOpts) { + constructor( + readonly elementType: ElementType, + readonly length: number, + opts?: VectorBasicOpts + ) { super(elementType); if (!elementType.isBasic) throw Error("elementType must be basic"); From 336574f0772071739a37ca5174548583b0a879af Mon Sep 17 00:00:00 2001 From: Nico Flaig Date: Tue, 17 Mar 2026 09:35:59 +0000 Subject: [PATCH 3/4] Fix lint --- packages/ssz/src/type/vectorBasic.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/ssz/src/type/vectorBasic.ts b/packages/ssz/src/type/vectorBasic.ts index e280bb0a..0868cdb3 100644 --- a/packages/ssz/src/type/vectorBasic.ts +++ b/packages/ssz/src/type/vectorBasic.ts @@ -42,11 +42,7 @@ export class VectorBasicType> readonly isViewMutable = true; protected readonly defaultLen: number; - constructor( - readonly elementType: ElementType, - readonly length: number, - opts?: VectorBasicOpts - ) { + constructor(readonly elementType: ElementType, readonly length: number, opts?: VectorBasicOpts) { super(elementType); if (!elementType.isBasic) throw Error("elementType must be basic"); From 804165e75686cba06e88659eba6c80276836092d Mon Sep 17 00:00:00 2001 From: Nico Flaig Date: Tue, 17 Mar 2026 09:43:25 +0000 Subject: [PATCH 4/4] lint again --- packages/ssz/src/type/vectorBasic.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/ssz/src/type/vectorBasic.ts b/packages/ssz/src/type/vectorBasic.ts index 0868cdb3..e280bb0a 100644 --- a/packages/ssz/src/type/vectorBasic.ts +++ b/packages/ssz/src/type/vectorBasic.ts @@ -42,7 +42,11 @@ export class VectorBasicType> readonly isViewMutable = true; protected readonly defaultLen: number; - constructor(readonly elementType: ElementType, readonly length: number, opts?: VectorBasicOpts) { + constructor( + readonly elementType: ElementType, + readonly length: number, + opts?: VectorBasicOpts + ) { super(elementType); if (!elementType.isBasic) throw Error("elementType must be basic");