@ocap/statedb-fs
Version:
OCAP statedb adapter that uses fs as backend
43 lines (41 loc) • 1.33 kB
JavaScript
Object.defineProperty(exports, '__esModule', { value: true });
const require_table_base = require('./base.cjs');
//#region src/table/balance.ts
/**
* Balance 表
* 扩展基础表,增加余额管理功能
*/
var BalanceTable = class extends require_table_base.default {
async getBalance(address, _context) {
return (await this.collection.find({ address }) || []).reduce((acc, token) => {
acc[token.tokenAddress] = token.balance;
return acc;
}, {});
}
async updateBalance({ address, tokens, context = {} }, ctx) {
if (!Object.keys(tokens).length) return {};
const tokenBalances = await this.getBalance(address);
const updatedTokens = Object.keys(tokens).filter((token) => tokenBalances[token] && tokenBalances[token] !== "0" || tokens[token] && tokens[token] !== "0").filter((token) => tokenBalances[token] !== tokens[token]);
await Promise.all(updatedTokens.map(async (token) => {
const key = {
address,
tokenAddress: token
};
if (tokenBalances[token]) await this.update(key, {
...key,
balance: tokens[token],
context
}, ctx);
else await this.create(key, {
...key,
balance: tokens[token],
context
}, ctx);
tokenBalances[token] = tokens[token];
}));
return tokens;
}
};
var balance_default = BalanceTable;
//#endregion
exports.default = balance_default;