@ocap/statedb-fs
Version:
OCAP statedb adapter that uses fs as backend
42 lines (32 loc) • 1.2 kB
JavaScript
const FsTable = require('./base');
class BalanceTable extends FsTable {
async getBalance(address) {
const tokens = await this.collection.find({ address });
return (tokens || []).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;
}
}
module.exports = BalanceTable;