UNPKG

@ocap/statedb-memory

Version:

OCAP statedb adapter that uses memory as backend statedb, just for test purpose

40 lines (38 loc) 1.64 kB
import base_default from "./base.mjs"; import { followMigrationChain, wouldCreateMigrationCycle } from "@ocap/statedb"; import { ensureChecksumAddress } from "@ocap/state/lib/states/account"; //#region src/table/account.ts /** * Account 表 * 扩展基础表,增加账户迁移追踪功能 */ var AccountStateDB = class extends base_default { async _get(address, context = {}) { const { traceMigration = true } = context; const normalizedAddress = ensureChecksumAddress(address); if (!traceMigration) return super._get(normalizedAddress, context); return followMigrationChain(normalizedAddress, (addr) => super._get(addr, context), ensureChecksumAddress); } async _create(key, attrs = {}, context) { const address = ensureChecksumAddress(key); const { migratedTo } = attrs; if (migratedTo?.length) { if (await wouldCreateMigrationCycle(address, migratedTo, (addr) => super._get(addr, context), 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 = ensureChecksumAddress(key); const { migratedTo } = updates; if (migratedTo?.length) { if (await wouldCreateMigrationCycle(address, migratedTo, (addr) => super._get(addr, context), ensureChecksumAddress)) throw new Error(`Circular migration detected: ${address} -> ${migratedTo.join(", ")}`); } return super._update(address, updates, context); } }; var account_default = AccountStateDB; //#endregion export { account_default as default };