Files
SHiNE-server/shine-solana/shine/tests/pda-v1-2-codec.mjs
T

43 lines
1.5 KiB
JavaScript

import assert from 'node:assert/strict';
import {
parseShineUserPda,
serializeUnsignedRecordFromState,
} from '../../../shine-UI/js/services/shine-user-pda-service.js';
const bytes = (len, seed) => Uint8Array.from({ length: len }, (_, i) => (seed + i) & 0xff);
const state = {
login: 'codec_test',
createdAtMs: 1_000n,
updatedAtMs: 2_000n,
recordNumber: 4,
prevRecordHash: bytes(32, 1),
rootKey: bytes(32, 40),
clientKey: bytes(32, 80),
forks: [
{ blockchainKey: bytes(32, 120), createdAtMs: 1_000n, paidLimitBytes: 100_000n },
{ blockchainKey: bytes(32, 160), createdAtMs: 2_000n, paidLimitBytes: 200_000n },
],
serverAddresses: [
{ addressFormatType: 1, addressFormatVersion: 0, address: 'https://s.example' },
],
accessServers: ['access1'],
};
const unsigned = serializeUnsignedRecordFromState(state);
const full = new Uint8Array(unsigned.length + 64);
full.set(unsigned);
full.set(bytes(64, 200), unsigned.length);
const parsed = parseShineUserPda(full);
assert.equal(parsed.formatMajor, 1);
assert.equal(parsed.formatMinor, 2);
assert.equal(parsed.isLegacy, false);
assert.equal(parsed.recordNumber, 4);
assert.equal(parsed.forks.length, 2);
assert.equal(parsed.forks[1].createdAtMs, 2_000n);
assert.equal(parsed.forks[1].paidLimitBytes, 200_000n);
assert.equal(parsed.serverAddresses.length, 1);
assert.deepEqual(parsed.accessServers, ['access1']);
assert.equal(parsed.blockchain.blockchainName, 'codec_test-002');
console.log(`PDA 1.2 codec smoke test OK (${full.length} bytes)`);