Does nearBindgen not support child classes?

Viewed 58

When I try to store an instance of a class that is the child of a different class in a PersistentVector or PersistentSet, when I read the same data, the instance fields have their default values.

The same doesn't happen when storing a regular class.

Is this a known issue?

Minimal reproduceable code:

// index.ts

import { PersistentVector } from "near-sdk-as";

@nearBindgen
class Base {
    constructor(
        public value1: u64
    ) { }
}

@nearBindgen
class Child extends Base {
    constructor(
        value1: u64,
        public value2: u64
    ) {
        super(value1);
    }
}


@nearBindgen
export class Contract {
    private pers: PersistentVector<Base> = new PersistentVector<Base>("vec");

    add(value1: u64, value2: u64): Child {
        const c = new Child(value1, value2);
        this.pers.pushBack(c);
        return c;
    }

    get(): Array<Base> {
        const res: Array<Base> = [];

        for (let i = 0; i < this.pers.length; i++) {
            res.push(this.pers[i]);
        }
        return res;
    }
}

// index.unit.spec.ts

import { Contract } from "../assembly/index";

let cont: Contract

beforeEach(() => {
    cont = new Contract();
})

describe("Contract", () => {

    it("add returns correct value", () => {
        const result = cont.add(7, 3);
        expect(result.value1).toBe(7);
        expect(result.value2).toBe(3);
    });

    it("get after add returns 1 correct value", () => {
        cont.add(7, 3);

        const results = cont.get();
        expect(results).toHaveLength(1);
        const result = results[0];
        expect(result.value1).toBe(7);
    });
})

It produces the following test output:

[Describe]: Contract

 [Success]: ✔ add returns correct value
    [Fail]: ✖ get after add returns 1 correct value
  [Actual]: 0 as u64
[Expected]: 7 as u64
   [Stack]: RuntimeError: unreachable
            at node_modules/@as-pect/assembly/assembly/internal/assert/assert (wasm://wasm/00023e6a:wasm-function[52]:0xde9)
            at node_modules/@as-pect/assembly/assembly/internal/Expectation/Expectation<u64>#toBe (wasm://wasm/00023e6a:wasm-function[138]:0x2d9c)
            at start:src/minimal/__tests__/index.unit.spec~anonymous|1~anonymous|1 (wasm://wasm/00023e6a:wasm-function[176]:0x466a)
            at node_modules/@as-pect/assembly/assembly/internal/call/__call (wasm://wasm/00023e6a:wasm-function[179]:0x4690)

    [File]: src/minimal/__tests__/index.unit.spec.ts
  [Groups]: 2 pass, 2 total
  [Result]: ✖ FAIL
[Snapshot]: 0 total, 0 added, 0 removed, 0 different
 [Summary]: 1 pass,  1 fail, 2 total
    [Time]: 2.333ms
0 Answers
Related