From d04637da50e157e7fd583df2b13201a01972b6eb Mon Sep 17 00:00:00 2001 From: Jacob Lindahl Date: Wed, 29 Mar 2023 21:05:56 +0900 Subject: [PATCH] Fix: rosetta zero balance accounts (#8830) * fix: add zero-balance account check to rosetta * fix: slightly less magic-numbery --------- Co-authored-by: near-bulldozer[bot] <73298989+near-bulldozer[bot]@users.noreply.github.com> --- chain/rosetta-rpc/src/utils.rs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/chain/rosetta-rpc/src/utils.rs b/chain/rosetta-rpc/src/utils.rs index 2ebffe84d2e..ea431038d5d 100644 --- a/chain/rosetta-rpc/src/utils.rs +++ b/chain/rosetta-rpc/src/utils.rs @@ -269,14 +269,23 @@ where } } +/// Zero-balance account (NEP-448) +fn is_zero_balance_account(account: &near_primitives::account::Account) -> bool { + account.storage_usage() <= 770 +} + /// Tokens not locked due to staking (=liquid) but reserved for state. fn get_liquid_balance_for_storage( account: &near_primitives::account::Account, storage_amount_per_byte: near_primitives::types::Balance, ) -> near_primitives::types::Balance { - let required_amount = - near_primitives::types::Balance::from(account.storage_usage()) * storage_amount_per_byte; - required_amount.saturating_sub(account.locked()) + let staked_for_storage = if is_zero_balance_account(account) { + 0 + } else { + near_primitives::types::Balance::from(account.storage_usage()) * storage_amount_per_byte + }; + + staked_for_storage.saturating_sub(account.locked()) } pub(crate) struct RosettaAccountBalances {