SPB Git

spb/os-vault Public

Self-custody, multi-chain crypto wallet for macOS. One recovery phrase, six chain families, zero API keys — nothing leaves your Mac.

Swift 96% Shell 3.4% Makefile 0.6%
1.2 KB · 39 lines swift
Raw Blame History
1//2//  BalanceService.swift3//  OS Vault4//5//  Author: Simon-Pierre Boucher6//  Mail: contact@spboucher.ai7//89import Foundation10import BigInt1112/// Fetches the native ETH balance (gas money) plus every registered13/// stablecoin's `balanceOf` for the current network.14public struct Balances: Sendable {15    public var ethWei: BigUInt16    public var tokenUnits: [String: BigUInt]   // keyed by token symbol1718    public init(ethWei: BigUInt = 0, tokenUnits: [String: BigUInt] = [:]) {19        self.ethWei = ethWei20        self.tokenUnits = tokenUnits21    }22}2324public enum BalanceService {2526    public static func fetch(address: String, network: Network, rpc: RPCService) async throws -> Balances {27        var balances = Balances()28        balances.ethWei = try await rpc.balance(of: address)2930        for token in Token.available(on: network) {31            guard let contract = token.address(on: network),32                  let calldata = Hex.erc20BalanceOfData(owner: address) else { continue }33            let result = try await rpc.call(to: contract, data: calldata)34            balances.tokenUnits[token.symbol] = Hex.toBigUInt(result) ?? 035        }36        return balances37    }38}39