]> git.codecow.com Git - libnemo.git/commitdiff
Set account data from account info refresh.
authorChris Duncan <chris@codecow.com>
Sat, 8 Aug 2026 18:57:15 +0000 (11:57 -0700)
committerChris Duncan <chris@codecow.com>
Sat, 8 Aug 2026 18:57:15 +0000 (11:57 -0700)
src/lib/wallet/refresh.ts

index 5b15b7764f8aa24bfb03c91c68e20f4e06b08c8e..25c1f3264112848df2ef85c772acc3aa17a8d647 100644 (file)
@@ -3,8 +3,8 @@
 
 import { Account } from '../account'
 import { Block } from '../block'
-import { BURN_PUBLIC_KEY } from '../constants'
 import { Rpc } from '../rpc'
+import { AccountInfoRequest, AccountInfoResponse } from '../rpc/account_info'
 import { Wallet } from '../wallet'
 
 export async function _refresh (wallet: Wallet, rpc: Rpc | string | URL, from: number, to: number): Promise<Map<number, Account>>
@@ -29,38 +29,42 @@ export async function _refresh (wallet: Wallet, rpc: unknown, from: unknown, to:
                        json_block: true,
                        accounts: addresses
                }
-               const { balances } = await rpc.post('accounts_balances', data)
                const { frontiers } = await rpc.post('accounts_frontiers', data)
                const { blocks } = await rpc.post('blocks_info', { json_block: true, include_not_found: true, hashes: Object.values(frontiers ?? {}) })
+
                for (const account of accounts.values()) {
-               const reqAccountInfo: AccountInfoRequest = {
-               account: account.address,
-               include_confirmed: true,
-               receivable: true,
-               representative: true,
-               weight: true
-       }
-       const accountInfo = await rpc.post('account_info', reqAccountInfo)
-       for (const [k, v] of Object.entries(accountInfo)) {
-               account[k] = v
-       }
-                       account.balance = balances?.[account.address]?.balance ?? 0
-                       account.receivable = balances?.[account.address]?.receivable ?? 0
-                       if (frontiers?.[account.address] != null) {
-                               account.frontier = frontiers[account.address]
-                               if (blocks?.[account.frontier] != null) {
-                                       const { subtype, contents: { balance, link, previous, representative, signature } } = blocks[account.frontier]
-                                       account.representative = representative
-                                       const frontierBlock = new Block(account, balance, previous, representative)
-                                       if (typeof frontierBlock[subtype] !== 'function') {
-                                               throw new TypeError('Unknown frontier block subtype', { cause: subtype })
-                                       }
-                                       const arg = subtype === 'epoch' ? account.version : subtype === 'change' ? representative : link
-                                       frontierBlock[subtype](arg, 0).signature = signature
-                                       account.frontier_block = frontierBlock
+                       const reqAccountInfo: AccountInfoRequest = {
+                               account: account.address,
+                               include_confirmed: true,
+                               receivable: true,
+                               representative: true,
+                               weight: true
+                       }
+                       let resAccountInfo: AccountInfoResponse
+                       try {
+                               resAccountInfo = await rpc.post('account_info', reqAccountInfo)
+                       } catch (err) {
+                               console.error(err)
+                               continue
+                       }
+                       const { account_version, balance, frontier, pending, receivable } = resAccountInfo
+                       account.balance = balance ?? 0
+                       account.frontier = frontier
+                       account.receivable = receivable ?? pending ?? 0
+                       account.version = account_version
+                       if (frontier != null && blocks?.[frontier] != null) {
+                               const { subtype, contents: { balance, link, previous, representative, signature } } = blocks[account.frontier]
+                               account.representative = representative
+                               const frontierBlock = new Block(account, balance, previous, representative)
+                               if (typeof frontierBlock[subtype] !== 'function') {
+                                       throw new TypeError('Unknown frontier block subtype', { cause: subtype })
                                }
+                               const arg = subtype === 'epoch' ? account.version : subtype === 'change' ? representative : link
+                               frontierBlock[subtype](arg, 0).signature = signature
+                               account.frontier_block = frontierBlock
                        }
                }
+
                return accounts
        } catch (err) {
                console.error(err)