使用near-api-py获取NEAR钱包各类余额问题求助
使用near-api-py获取NEAR钱包各类余额的解决方案
关于state['locked']和state['storage_paid_at']为0的说明
state['locked']为0:说明你的账户没有锁定资金(比如未参与质押、锁仓活动),属于正常状态。state['storage_paid_at']为0:通常是因为账户还未触发过存储付费操作,不影响存储预留余额的计算。
1. 存储预留余额(NEAR、USD)
NEAR的存储费率为1 yoctoNEAR/字节(即1e-12 NEAR/字节),可通过账户的storage_usage(已使用存储字节数)计算:
- 存储预留NEAR =
storage_usage× 1e-12 - 转换为USD:存储预留NEAR × 当前NEAR对USD汇率
代码片段:
def get_storage_reserve(storage_usage): # 计算存储预留NEAR return storage_usage * 1e-12
2. 交易预留余额(NEAR、USD)
钱包页面显示的交易预留一般为固定值0.001 NEAR,用于覆盖基础交易手续费。若需更精准的预估,可通过near-api-py的交易模拟接口计算,但日常使用固定值即可:
- 交易预留NEAR = 0.001
- 转换为USD:0.001 × 当前NEAR对USD汇率
3. 可用余额(NEAR、USD)
可用余额 = 账户总余额 - 存储预留余额 - 锁定余额,其中:
- 账户总余额:
state['amount']是yoctoNEAR单位,需转换为NEAR(总余额NEAR = state['amount'] / 1e24) - 锁定余额:
state['locked']同样是yoctoNEAR单位,转换为NEAR(锁定余额NEAR = state['locked'] / 1e24)
完整代码示例:
def get_account_detailed_balances(account_id): state = near_provider.get_account(account_id) # 转换单位:yoctoNEAR → NEAR total_near = int(state['amount']) / 1e24 locked_near = int(state['locked']) / 1e24 # 计算存储预留 storage_reserve_near = int(state['storage_usage']) * 1e-12 # 计算可用余额 available_near = total_near - storage_reserve_near - locked_near # 示例汇率,实际需从可靠数据源动态获取 near_usd_rate = 3.5 # 转换为USD total_usd = total_near * near_usd_rate locked_usd = locked_near * near_usd_rate storage_reserve_usd = storage_reserve_near * near_usd_rate available_usd = available_near * near_usd_rate transaction_reserve_usd = 0.001 * near_usd_rate return { "总余额": {"NEAR": round(total_near, 6), "USD": round(total_usd, 2)}, "锁定余额": {"NEAR": round(locked_near, 6), "USD": round(locked_usd, 2)}, "存储预留": {"NEAR": round(storage_reserve_near, 6), "USD": round(storage_reserve_usd, 2)}, "可用余额": {"NEAR": round(available_near, 6), "USD": round(available_usd, 2)}, "交易预留": {"NEAR": 0.001, "USD": round(transaction_reserve_usd, 2)} }
内容的提问来源于stack exchange,提问作者Alesya
相关产品推荐
相关产品推荐

