UNPKG

@ocap/statedb-memory

Version:

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

43 lines (34 loc) 1.37 kB
const { ensureChecksumAddress } = require('@ocap/state/lib/states/account'); const MemoryStateDB = require('./base'); class BalanceTable extends MemoryStateDB { async getBalance(address) { const tokens = await this.collection.find({ address: ensureChecksumAddress(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]); // eslint-disable-next-line array-callback-return 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;