October DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsWindows FixRecommendedWindows errors stealing your time? Find the fix fastScan stability, cleanup and performance issues.Fix NowOctober DealsAmazon USDeal season is back - check today's better picksAmazon US: current deals, useful picks and tech finds.See Picks×
Skip to content
World desk4 min

The First Bugs My Reconciliation Tool Caught Were Its Own

A live balance mismatch exposed bugs in the reconciliation tool itself: truncated history, provider failures mislabeled as unreadable tokens, and precision loss.
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

A wallet-history reconciliation tool is supposed to answer a simple question: does the balance reconstructed from a wallet’s transaction history match what the chain reports at the same block? In his account of building onchain-tieout, Am0MuK says the first live mismatch did not expose a wallet problem. It exposed defects in the tool: incomplete pagination, misclassified provider failures, and output that could look plausible while being wrong.

What the tool was meant to check

Am0MuK’s September 27, 2026 DEV Community article describes onchain-tieout, an open-source Python tool intended to reconstruct a wallet’s balance from transaction history and compare it with the balance reported on-chain at the same block. The point of that comparison is not merely to find discrepancies in a wallet ledger. It can also test whether the software collecting and interpreting the history is complete and trustworthy.

As an Amazon Associate I earn from qualifying purchases.

The author reports that an initial live mismatch was caused by the reconciliation pipeline itself. Offline tests had passed, but their mocked API behavior repeated the same mistaken assumption as the implementation.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

How pagination silently dropped history

The assumed page size

Am0MuK says the client expected a result window of 10,000 rows and treated a shorter response as the end of the history. In the live run described, Etherscan V2 returned 1,000 rows. The client stopped there, leaving part of the transaction history out of the reconstructed balance.

Because the mocks encoded the same 10,000-row assumption, the offline tests did not reveal the mismatch. This is a practical limit of mock-based testing: a mock can verify that code behaves as modeled, but it cannot establish that the model matches the external service. As the author puts it, “A mock can only confirm what you already believe about the system behind it.”

When a single block fills a page

The author also describes a boundary problem in pagination by block. Advancing the block cursor can work until a single block contains more transfers than fit in one page. In that case, the cursor cannot move past the block without risking omitted records.

The reported fix handles that edge case separately: fetch the oversized block by page number, up to the API’s stated 10,000-row window, and stop with an explicit failure if the limit is exceeded. That is safer than quietly inferring that the returned records are complete. The general lesson from these two bugs is to define what the client does at a page boundary and at its configured limit, then make incompleteness visible rather than returning a convincing partial result.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Why a provider outage looked like unreadable token data

Am0MuK reports that about 9,700 tokens were initially marked as having unreadable balances. Sampling showed that most of those failures were HTTP 429 responses from the RPC provider: rate limiting, not evidence that the token itself could not return a balance.

The described correction separates transport failures from contract-call outcomes. The tool retries problems such as 429 responses, 5xx responses, and timeouts with backoff, then aborts if they persist. It reserves an unreadable-balance result for an actual call revert or empty result. This distinction matters because a busy provider and an unreadable contract imply different things and call for different next steps.

Other ways plausible output concealed defects

A malformed response became an empty history

During code review, the author found a path where a response with status: "1" but a non-list result was converted into an empty history. That is not the same as confirming that the account has no records: it is an unexpected response shape. Treating it as valid emptiness can make a broken request appear successful.

Decimal formatting lost useful precision

The author says Python’s default Decimal context rounded very large spam-token amounts and displayed tiny values in scientific notation. The reported change used integer arithmetic for formatting. That avoids relying on default decimal precision for values whose exact token-unit representation matters in a reconciliation report.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

What the corrected run did—and did not—show

For a fixed run on the wallet identified as vitalik.eth, Am0MuK reports 10,476 balance rows, of which 8,281 tied out exactly. The author says ETH, DAI, USDC, and USDT matched to the last unit in that run. These are figures from the author’s reported execution, not an independently reproduced benchmark or a guarantee for other wallets, blocks, or assets.

The remaining differences were not all evidence of a faulty history fetch. The author says many involved spam airdrops and token contracts whose Transfer events disagreed with their own balanceOf results. The account also identifies two specific asset behaviors:

  • stETH: the reported balance differed because it rebases without transfers.
  • WETH: the difference matched the wallet’s own deposit-minus-withdraw activity, which, according to the author, did not emit a Transfer event.

These examples show why “history does not tie out” is a diagnostic result, not a complete explanation. A mismatch can arise from a defect in fetching or interpreting data, or from token behavior that makes a simple event-based reconstruction differ from the contract’s reported balance.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

What this debugging account suggests for reconciliation tools

The failures point to a few concrete design checks for anyone building or evaluating a similar pipeline:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • Validate the external contract, not just the mock. Compare assumptions about page sizes, response shapes, and limits with observed provider behavior.
  • Handle dense boundaries explicitly. A block-based cursor needs a strategy when one block alone exceeds a page.
  • Fail visibly at limits. If the client cannot establish completeness within the API window, report that rather than presenting a partial history as complete.
  • Keep transport errors separate from data outcomes. Retry transient provider failures; do not label them as token properties.
  • Preserve exact values in output. Formatting must not round large balances or obscure small ones.

Am0MuK summarizes the testing distinction this way: “Offline tests prove the code matches your assumptions. Only a run against the real system tests the assumptions.” The article identifies onchain-tieout as open-source Python software under the MIT license and links to its GitHub repository. The implementation details and results above are the author’s account; the repository and claims have not been independently verified here.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More from the Wire

  1. World desk4 min
    How to Spot an AI Voice Scam Before Sending MoneyDon’t rely on how a caller sounds. Pause, call back through a known number, and verify the emergency with another trusted person before sending money.
  2. Mountain View desk4 min
    Google’s SynthID Detector: How to Check AI-Generated Images, Video and AudioGoogle’s SynthID Detector looks for an embedded watermark in supported images, video and audio. Here is what its results do—and do not—show.
  3. Redmond desk20 min
    How to create a link to File or Folder in Windows 11Windows 11 gives you several ways to point to a file or folder without moving or duplicating it. You can create a desktop shortcut,…
Recommended PC Tool
Recommended PC Tool
Windows Errors? Fix Them Before They SpreadFree repair scan
Outdated Drivers Are Slowing You DownFree scan - exact matches

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.