fix: separate Pocket API/RPC URLs, add 4-tier TX verification fallback#267
Merged
jorgecuesta merged 8 commits intostagingfrom Mar 31, 2026
Merged
Conversation
#266) - Rename DB column rpcUrl -> pocketApiUrl, add pocketRpcUrl column - Add 4-tier TX lookup: RPC tx_index -> REST API -> block scan -> supplier check - Workflows read URLs from DB, seed from POKT_RPC_URL env on first boot - Setup forms now have dual inputs for API URL and RPC URL - TX expiration: pending TXs older than 30 blocks marked as failed - Provider key recovery: stale delivered keys (>24h) checked against chain state - Add getTransaction tests with SHA256 block scan verification - Add 10 test scenario checklists for manual QA
- getTransaction activity now returns executionHeight + unsignedPayload (was dead code) - DAL update() methods scoped with WHERE clause by id (was updating all rows) - updateKey() in recovery passes MAX_SAFE_INTEGER for lastUpdatedHeight (was silent no-op) - Block scan guards results.results[i] against undefined - Top-level imports for sha256/toHex instead of dynamic imports - Remove stray console.log(applicationSettings) in Blockchain.ts - Show pocketRpcUrl in provider overview and stepper summary
- Fix TS2345: guard txs[i] and log args against undefined - Fix getTransaction activity: include executionHeight + unsignedPayload - Fix DAL update() methods: scope with WHERE clause by id - Fix remediateSupplier: return success instead of throwing when supplier not found - Move delivered/missing_stake >24h recovery into SupplierStatus (remove separate workflow) - Bootstrap seeds: backward compat with old rpcUrl field name - Bootstrap example JSONs: use pocketApiUrl + pocketRpcUrl - Settings forms: add RPC endpoint validation (/status), better error messages, disable Save during validation and when errors exist, add field descriptions, align help text with px-1 - Add ValidateRpcEndpoint server action for both apps - Update test scenarios README with pass/fail status
…in all forms - Setup + settings forms: validate RPC URL via /status endpoint with debounce - Cross-validate API and RPC chain IDs match in all 4 forms - Replace raw "fetch failed" errors with descriptive messages - Disable Next/Save buttons during validation and when errors exist - Fix middleman setup page top padding (pt-14) - Reorganize middleman setup form layout (App Identity full width, API+RPC side by side)
f799daa to
29deeb7
Compare
jorgecuesta
added a commit
that referenced
this pull request
Mar 31, 2026
* fix: separate Pocket API/RPC URLs, add 4-tier TX verification fallback (#267) * fix: separate Pocket API/RPC URLs, add 4-tier TX verification fallback (#266) - Rename DB column rpcUrl -> pocketApiUrl, add pocketRpcUrl column - Add 4-tier TX lookup: RPC tx_index -> REST API -> block scan -> supplier check - Workflows read URLs from DB, seed from POKT_RPC_URL env on first boot - Setup forms now have dual inputs for API URL and RPC URL - TX expiration: pending TXs older than 30 blocks marked as failed - Provider key recovery: stale delivered keys (>24h) checked against chain state - Add getTransaction tests with SHA256 block scan verification - Add 10 test scenario checklists for manual QA * fix: address review findings — critical bugs and quality issues - getTransaction activity now returns executionHeight + unsignedPayload (was dead code) - DAL update() methods scoped with WHERE clause by id (was updating all rows) - updateKey() in recovery passes MAX_SAFE_INTEGER for lastUpdatedHeight (was silent no-op) - Block scan guards results.results[i] against undefined - Top-level imports for sha256/toHex instead of dynamic imports - Remove stray console.log(applicationSettings) in Blockchain.ts - Show pocketRpcUrl in provider overview and stepper summary * chore: update pnpm-lock.yaml for @cosmjs/tendermint-rpc dependency * fix: review fixes, UX improvements, remove DeliveredKeyRecovery workflow - Fix TS2345: guard txs[i] and log args against undefined - Fix getTransaction activity: include executionHeight + unsignedPayload - Fix DAL update() methods: scope with WHERE clause by id - Fix remediateSupplier: return success instead of throwing when supplier not found - Move delivered/missing_stake >24h recovery into SupplierStatus (remove separate workflow) - Bootstrap seeds: backward compat with old rpcUrl field name - Bootstrap example JSONs: use pocketApiUrl + pocketRpcUrl - Settings forms: add RPC endpoint validation (/status), better error messages, disable Save during validation and when errors exist, add field descriptions, align help text with px-1 - Add ValidateRpcEndpoint server action for both apps - Update test scenarios README with pass/fail status * chore: remove test-scenarios from PR (local QA tracking only) * docs: update READMEs and bootstrap guide for dual API/RPC URL fields * docs: document LOCALNET_ENABLED env var in DEVELOP.md * fix(ui): RPC validation, chain ID cross-check, better error messages in all forms - Setup + settings forms: validate RPC URL via /status endpoint with debounce - Cross-validate API and RPC chain IDs match in all 4 forms - Replace raw "fetch failed" errors with descriptive messages - Disable Next/Save buttons during validation and when errors exist - Fix middleman setup page top padding (pt-14) - Reorganize middleman setup form layout (App Identity full width, API+RPC side by side) * chore(deploy): update staging image to a676150 * chore(release): prepare v0.9.0 mainnet overlays [skip ci] --------- Co-authored-by: Jorge S. Cuesta <jorge.s.cuesta@gmail.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
This was referenced Apr 9, 2026
Closed
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
Closes #266
Production users reported stuck transactions (perpetual "Pending") and stale delivered keys after our latest release. Root cause:
verifyTransactiondepends on CometBFT RPC tx_index which doesn't serve historical TXs on our seed nodes, plus the DB stored API URLs in a column calledrpcUrl.Changes
rpcUrl→pocketApiUrl, addpocketRpcUrlcolumnPocketBlockchain.getTransaction():StargateClient.getTx)/cosmos/tx/v1beta1/txs/{hash})block(height))POKT_RPC_URLenv on first bootDeliveredKeyRecoveryscheduled workflow for stale delivered keys (>24h)Test plan
test-scenarios/for 10 detailed QA checklists