Skip to content
LedgerLift

How LedgerLift works

From a wallet address to a report you can sign off, in five steps.

  1. 01

    Fetch

    Read every transaction from an indexer.

  2. 02

    Decode

    Turn contract calls into plain actions.

  3. 03

    Price

    Value each token on its day.

  4. 04

    Classify

    Your rules first, then known patterns.

  5. 05

    Export & seal

    Files for your accountant, a fingerprint on-chain.

How an entry gets its category

The first match wins.

OrderWhenCategory
1You changed itYour choice
2One of your rules matchesThe rule's category
3Both sides are your walletsOwn-wallet transfer
4Known contract callToken swap or network fees
5Known address in the directoryIts usual category
—Anything elseNeeds review

Your wallets count as one

Money moving between them is neither earned nor spent.

TreasuryOperations2,000 tUSDCNot income, not an expense

Prices at the time of the transaction

Example: 0.5 tETH on Aug 14 at $3,142.18 = $1,571.09. Network fees are valued the same way.

Sealing a report

The report's fingerprint is written on-chain. Change any entry later and the seal shows it.

For developers

The same pipeline runs on a subgraph query, paged by block range.

Show the query and export columns

Subgraph query

query WalletHistory($wallet: Bytes!, $from: BigInt!, $to: BigInt!) {
  transfers(
    where: { or: [{ from: $wallet }, { to: $wallet }],
             blockNumber_gte: $from, blockNumber_lte: $to }
    orderBy: blockNumber
    first: 1000
  ) {
    transactionHash  blockNumber  timestamp
    from  to  value
    token { symbol decimals }
    transaction { gasUsed gasPrice input }
  }
}

Ledger export columns

  • date_utc
  • wallet
  • direction
  • counterparty
  • counterparty_address
  • category
  • category_source
  • token
  • amount
  • price_usd
  • value_usd
  • fee_teth
  • fee_usd
  • tx_hash
  • block

Try it on a sample wallet

Open the demo