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// 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