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