diff --git a/packages/snap/CHANGELOG.md b/packages/snap/CHANGELOG.md index 4df611fd..aa106e44 100644 --- a/packages/snap/CHANGELOG.md +++ b/packages/snap/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Changed + +- Add `rawAmount` to balance responses and events for precision in balance calculations ([#573](https://github.com/MetaMask/snap-bitcoin-wallet/pull/573)) + ## [1.8.0] ### Changed diff --git a/packages/snap/integration-test/keyring.test.ts b/packages/snap/integration-test/keyring.test.ts index b092ae3c..a5a671c4 100644 --- a/packages/snap/integration-test/keyring.test.ts +++ b/packages/snap/integration-test/keyring.test.ts @@ -459,6 +459,7 @@ describe('Keyring', () => { [Caip19Asset.Regtest]: { amount: '500', unit: CurrencyUnit.Regtest, + rawAmount: '50000000000', }, }); }); diff --git a/packages/snap/src/handlers/KeyringHandler.test.ts b/packages/snap/src/handlers/KeyringHandler.test.ts index b2f0047f..29f3959e 100644 --- a/packages/snap/src/handlers/KeyringHandler.test.ts +++ b/packages/snap/src/handlers/KeyringHandler.test.ts @@ -64,7 +64,9 @@ describe('KeyringHandler', () => { const mockAccount = mock({ id: 'some-id', addressType: 'p2wpkh', - balance: { trusted_spendable: { to_btc: () => 1 } }, + balance: { + trusted_spendable: { to_btc: () => 1, to_sat: () => BigInt(100000000) }, + }, network: 'bitcoin', derivationPath: ['myEntropy', "84'", "0'", "0'"], entropySource: 'myEntropy', @@ -500,6 +502,7 @@ describe('KeyringHandler', () => { [Caip19Asset.Bitcoin]: { amount: '1', unit: 'BTC', + rawAmount: '100000000', }, }; diff --git a/packages/snap/src/handlers/KeyringHandler.ts b/packages/snap/src/handlers/KeyringHandler.ts index 8f1fbfff..345263f0 100644 --- a/packages/snap/src/handlers/KeyringHandler.ts +++ b/packages/snap/src/handlers/KeyringHandler.ts @@ -306,12 +306,15 @@ export class KeyringHandler implements Keyring { id: string, ): Promise> { const account = await this.#accountsUseCases.get(id); - const balance = account.balance.trusted_spendable.to_btc().toString(); + const trustedSpendable = account.balance.trusted_spendable; + const balance = trustedSpendable.to_btc().toString(); + const rawBalance = trustedSpendable.to_sat().toString(); return { [networkToCaip19[account.network]]: { amount: balance, unit: networkToCurrencyUnit[account.network], + rawAmount: rawBalance, }, }; } diff --git a/packages/snap/src/infra/SnapClientAdapter.ts b/packages/snap/src/infra/SnapClientAdapter.ts index f7d27310..72977c9c 100644 --- a/packages/snap/src/infra/SnapClientAdapter.ts +++ b/packages/snap/src/infra/SnapClientAdapter.ts @@ -104,13 +104,16 @@ export class SnapClientAdapter implements SnapClient { async emitAccountBalancesUpdatedEvent( account: BitcoinAccount, ): Promise { - const balance = account.balance.trusted_spendable.to_btc().toString(); + const trustedSpendable = account.balance.trusted_spendable; + const balance = trustedSpendable.to_btc().toString(); + const rawBalance = trustedSpendable.to_sat().toString(); return emitSnapKeyringEvent(snap, KeyringEvent.AccountBalancesUpdated, { balances: { [account.id]: { [networkToCaip19[account.network]]: { amount: balance, unit: networkToCurrencyUnit[account.network], + rawAmount: rawBalance, }, }, },