Investment Ledger · one module, on its own

Reconcile a token book you already have

Your platform's ledger records what it issued. This derives ownership from what actually happened on chain — lot by lot, with lineage — and reports where the two disagree. It runs against the contracts and the index you already have.

Every tokenization platform has an internal ledger. It knows what it issued because it issued it. That is a record the platform writes. The chain is a record of what happened. The two coincide exactly as long as the platform is the only thing that ever moves tokens.

A platform cannot audit itself with the record it is being audited against.

Where an internal ledger stops matching the chain

Transfers you did not initiate

An investor transfers to another investor directly, or moves to self-custody, or moves between their own wallets. The tokens moved; your ledger was not asked.

Venues you do not operate

A transfer executes somewhere other than your platform. The position changed and nothing in your systems recorded why.

Administrative corrections

Someone with the role makes a correction on chain — a freeze, a forced transfer, a recovery. Correct on chain, invisible to the book that is supposed to describe it.

Migrated holders

An instrument arrives from elsewhere with holders whose history you never saw. Their positions are asserted rather than derived.

Each of those leaves the internal ledger holding a claim. Reconciliation is what tells you the claim is wrong, and which position it is wrong about.

Positions are not lots

Most platforms track a position: how many units an investor holds. That answers how much and nothing else. This tracks lots with provenance — which issuance a unit came from, consumed oldest first, with lineage preserved across an ownership transfer.

  • cost basis & holding periods
  • corporate actions per issuance
  • regulatory lineage
  • redemption against a tranche

The distinction the chain cannot make

Two transfers can be identical on chain and mean opposite things. Nothing in the log separates them; the difference lives in the wallet-to-investor mapping, which comes from your systems.

On chainWho the wallets belong toWhat it means
0xAAA → 0xBBB, 100 units Same investor, two wallets Reallocation — custody changed, ownership did not
0xAAA → 0xCCC, 100 units Different investors Ownership transfer — a disposal, with lineage to preserve

Reporting the first as a disposal is a reporting error. Missing the second is a worse one. A wallet with no mapping is modelled as its own economic owner rather than guessed at, so an unrecognised holder is a visible state rather than a silent misattribution — and naming it later re-derives the affected history.

It runs against the stack you have

Your contracts stay yours

Nothing is redeployed and nothing is migrated. The service reads transfers for tokens that already exist, whoever issued them and whatever standard they implement.

Your index stays yours

Transfers arrive through a single interface rather than an RPC endpoint. Feeding that interface from an index you already run is an adapter, not a re-architecture; adapters onto a customer's own index are scoped per deployment.

It holds no keys

The service reads. It signs nothing, holds no key, moves no tokens and cannot. Vendor risk review is a shorter conversation than it is for anything that transacts.

Your investor mapping is the input

Identity and eligibility stay in your systems. This consumes the wallet-to-investor mapping and nothing else about your investors.

When you do not need this

Worth saying plainly. Reconciliation earns its place in proportion to how much moves outside your control, and how expensive it is to be wrong about ownership.

Tokens never move outside your platform

If that is true today and will stay true, your ledger and the chain will not drift. The question is whether it stays true once investors self-custody.

Positions are all you owe anyone

No cost-basis, tranche or lineage requirement, and no auditor asking which issuance a unit came from. Lots are a narrower claim than positions and you may not need them.

Questions

How is this different from the ledger our platform already has?

Yours is a record your platform writes from what it did. This derives ownership independently from chain state and compares the two. They agree until something moves tokens that your platform did not initiate — an investor-to-investor transfer, a move to self-custody, a venue you do not operate, an on-chain administrative correction. It is assurance over your ledger, not a replacement for it.

Can it run against our existing indexer or subgraph?

The engine consumes transfers through one interface rather than talking to an RPC node, so the source is swappable by design. An adapter onto your own index — a subgraph, Ponder, or a log reader — is scoped as part of the deployment. What it needs from any source is ordered, canonical transfers with block hash, transaction hash, from, to and amount.

Do we have to migrate anything?

No. It derives the book from chain history for the tokens you point it at. Nothing is redeployed, no holder records move, and your platform keeps writing its own ledger exactly as it does now.

Does it need access to our keys or our custody?

No. It reads. It holds no key, signs nothing and cannot move a token. That is also why it carries none of the smart-contract risk that a signing or issuance component would bring into a vendor review.

What happens when a wallet we do not recognise receives tokens?

It becomes its own economic owner in the ledger, and is visible as unmapped rather than silently attributed to somebody. When you later map it to an investor, the affected history is re-derived rather than patched.

How do we know today whether our records still match the chain?

If the answer is a spreadsheet, a script or a person who checks, that is what this replaces. If the answer is that nothing has ever moved outside the platform, you may genuinely not need it yet.

Related

Can you prove the chain agrees?

Your ledger says an investor holds 1,050 units. Show us the book and we will tell you what it takes to derive the same number from chain state.

Reconcile your book