UNPKG

@ocap/statedb-fs

Version:
42 lines (32 loc) 1.2 kB
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;