@ocap/statedb-memory
Version:
OCAP statedb adapter that uses memory as backend statedb, just for test purpose
42 lines (40 loc) • 2.03 kB
JavaScript
Object.defineProperty(exports, '__esModule', { value: true });
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
const require_table_base = require('./base.cjs');
let _ocap_statedb = require("@ocap/statedb");
let _ocap_state_lib_states_account = require("@ocap/state/lib/states/account");
//#region src/table/account.ts
/**
* Account 表
* 扩展基础表,增加账户迁移追踪功能
*/
var AccountStateDB = class extends require_table_base.default {
async _get(address, context = {}) {
const { traceMigration = true } = context;
const normalizedAddress = (0, _ocap_state_lib_states_account.ensureChecksumAddress)(address);
if (!traceMigration) return super._get(normalizedAddress, context);
return (0, _ocap_statedb.followMigrationChain)(normalizedAddress, (addr) => super._get(addr, context), _ocap_state_lib_states_account.ensureChecksumAddress);
}
async _create(key, attrs = {}, context) {
const address = (0, _ocap_state_lib_states_account.ensureChecksumAddress)(key);
const { migratedTo } = attrs;
if (migratedTo?.length) {
if (await (0, _ocap_statedb.wouldCreateMigrationCycle)(address, migratedTo, (addr) => super._get(addr, context), _ocap_state_lib_states_account.ensureChecksumAddress)) throw new Error(`Circular migration detected: ${address} -> ${migratedTo.join(", ")}`);
}
return super._create(address, {
...attrs,
[this.uniqIndex]: address
}, context);
}
async _update(key, updates, context) {
const address = (0, _ocap_state_lib_states_account.ensureChecksumAddress)(key);
const { migratedTo } = updates;
if (migratedTo?.length) {
if (await (0, _ocap_statedb.wouldCreateMigrationCycle)(address, migratedTo, (addr) => super._get(addr, context), _ocap_state_lib_states_account.ensureChecksumAddress)) throw new Error(`Circular migration detected: ${address} -> ${migratedTo.join(", ")}`);
}
return super._update(address, updates, context);
}
};
var account_default = AccountStateDB;
//#endregion
exports.default = account_default;