Fix Gateway balance parsing: select by domain instead of balances[0]#51
Merged
Abiorh001 merged 1 commit intoomnuron:mainfrom Apr 24, 2026
Merged
Conversation
Contributor
Author
|
Additional evidence and reproduction context from field testing:
|
Contributor
Author
|
Repro checklist (local)
Optional cross-check:
|
1 similar comment
Contributor
Author
|
Repro checklist (local)
Optional cross-check:
|
Abiorh001
approved these changes
Apr 24, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes a real balance-parsing bug in
NanopaymentClient.check_balancethat can report0even when the funded domain has balance.Problem
Circle
POST /v1/balancesreturns an array across multiple domains. The previous logic effectively relied on the first row (balances[0]).That is unsafe because row order is not guaranteed to match the requested network domain.
Observed case from live testing:
domain: 0first row hadbalance: "0"domain: 26with non-zero balanceUser-visible impact
This can cause false negatives in readiness and spending checks:
/api/v1/x402/inspectmay returnbuyer_ready: falsewith "Gateway balance is below the required amount"/api/v1/balance-detailcan showgateway_balance: 0.00while on-chain balance is non-zeroFix
In
check_balance:This preserves backward compatibility while removing the incorrect index-0 assumption.
Why this is correct
The selected balance now aligns with the network being checked, which is the value downstream logic uses for inspect/preflight decisions.