feat(claimable-balance-readiness): evaluate claim eligibility from Horizon predicates - #488
Merged
egekoca merged 2 commits intoSep 30, 2026
Conversation
|
@chainsmt Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits. You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀 |
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.
Closes #465
Summary
Adds a self-contained Claimable Balance Claim Readiness feature under
features/claimable-balance-readiness/. It answers a narrow question: at a user-chosen UTC time, does this named claimant appear eligible to claim this existing claimable balance — and why — without ever building or submitting a claim transaction.Horizon is only used to load
GET /claimable_balances/{id}. Predicate evaluation is entirely local.Motivation
Horizon already returns claimants and nested predicates, but the UI did not explain branch-by-branch readiness at an arbitrary evaluation time. Relative predicates also need creation-time context; guessing that context produces false yes/no answers. This slice makes that uncertainty explicit as indeterminate.
What this PR does
G…) before any Horizon call (invalid_balance_id,invalid_claimant,invalid_time).lib/predicate-tree.tsand evaluates them inlib/claim-evaluator.tsfor:last_modified_timepath inlib/time-context.ts. If that context cannot be established reliably, returns indeterminate instead of inventing an answer.balance_not_found(Horizon 404 / missing resource)claimableBalanceReadiness.errors.tsinto actionablecopy.tsstrings (unsupported_predicate,request_failed, etc.).Architecture notes
features/claimable-balance-readiness/. Registry routing is generated; no shared navigation edits.Result<T, Code>for expected failures; user-facing English lives only incopy.ts.BigInt-safe where displayed; secrets are never accepted.Acceptance criteria coverage
Out of scope
Test plan
npm run verify:features -- claimable-balance-readiness(35-file contract)npm test -- features/claimable-balance-readiness(55 tests)/tools/claimable-balance-readiness— eligible claimant path