Skip to content

Documentation / @etherfold/core / EthereumIndexer

Class: EthereumIndexer<ABI, ProcessResultType>

Defined in: packages/core/src/indexer.ts:66

Type Parameters

ABI

ABI extends Abi

ProcessResultType

ProcessResultType = void

Constructors

Constructor

new EthereumIndexer<ABI, ProcessResultType>(provider, processor, source, config?): EthereumIndexer<ABI, ProcessResultType>

Defined in: packages/core/src/indexer.ts:139

Parameters

provider

EIP1193ProviderWithoutEvents

processor

EventProcessor<ABI, ProcessResultType>

source

IndexingSource<ABI>

config?

ProvidedIndexerConfig<ABI> = {}

Returns

EthereumIndexer<ABI, ProcessResultType>

Properties

_feed

protected _feed: object

Defined in: packages/core/src/indexer.ts:125

ifNotExecuting

ifNotExecuting: (args) => Promise<LastSync<ABI>>

Parameters
args
lastSyncFetched

LastSync<ABI>

newEvents

LogEvent<ABI>[]

Returns

Promise<LastSync<ABI>>

next

next: (args) => Promise<LastSync<ABI>>

Parameters
args
lastSyncFetched

LastSync<ABI>

newEvents

LogEvent<ABI>[]

Returns

Promise<LastSync<ABI>>

now

now: (args) => Promise<LastSync<ABI>>

Parameters
args
lastSyncFetched

LastSync<ABI>

newEvents

LogEvent<ABI>[]

Returns

Promise<LastSync<ABI>>

once

once: (args) => Promise<LastSync<ABI>>

Parameters
args
lastSyncFetched

LastSync<ABI>

newEvents

LogEvent<ABI>[]

Returns

Promise<LastSync<ABI>>

executing

Get Signature

get executing(): Promise<T> | undefined

Returns

Promise<T> | undefined

block()

block(): void

Returns

void

cancel()

cancel(): void

Returns

void

getContext()

getContext(): undefined

Returns

undefined

reset()

reset(): void

Returns

void

setContext()

setContext(context): void

Parameters
context

undefined

Returns

void

unblock()

unblock(): void

Returns

void


_index

protected _index: object

Defined in: packages/core/src/indexer.ts:124

ifNotExecuting

ifNotExecuting: () => Promise<LastSync<ABI>>

Returns

Promise<LastSync<ABI>>

next

next: () => Promise<LastSync<ABI>>

Returns

Promise<LastSync<ABI>>

now

now: () => Promise<LastSync<ABI>>

Returns

Promise<LastSync<ABI>>

once

once: () => Promise<LastSync<ABI>>

Returns

Promise<LastSync<ABI>>

executing

Get Signature

get executing(): Promise<T> | undefined

Returns

Promise<T> | undefined

block()

block(): void

Returns

void

cancel()

cancel(): void

Returns

void

getContext()

getContext(): undefined

Returns

undefined

reset()

reset(): void

Returns

void

setContext()

setContext(context): void

Parameters
context

undefined

Returns

void

unblock()

unblock(): void

Returns

void


_load

protected _load: object

Defined in: packages/core/src/indexer.ts:128

ifNotExecuting

ifNotExecuting: () => Promise<LastSync<ABI>>

Returns

Promise<LastSync<ABI>>

next

next: () => Promise<LastSync<ABI>>

Returns

Promise<LastSync<ABI>>

now

now: () => Promise<LastSync<ABI>>

Returns

Promise<LastSync<ABI>>

once

once: () => Promise<LastSync<ABI>>

Returns

Promise<LastSync<ABI>>

executing

Get Signature

get executing(): Promise<T> | undefined

Returns

Promise<T> | undefined

block()

block(): void

Returns

void

cancel()

cancel(): void

Returns

void

getContext()

getContext(): undefined

Returns

undefined

reset()

reset(): void

Returns

void

setContext()

setContext(context): void

Parameters
context

undefined

Returns

void

unblock()

unblock(): void

Returns

void


_save

protected _save: object

Defined in: packages/core/src/indexer.ts:129

ifNotExecuting

ifNotExecuting: (args) => Promise<void>

Parameters
args
eventStream

LogEvent<ABI>[]

lastSync

LastSync<ABI>

source

IndexingSource<ABI>

Returns

Promise<void>

next

next: (args) => Promise<void>

Parameters
args
eventStream

LogEvent<ABI>[]

lastSync

LastSync<ABI>

source

IndexingSource<ABI>

Returns

Promise<void>

now

now: (args) => Promise<void>

Parameters
args
eventStream

LogEvent<ABI>[]

lastSync

LastSync<ABI>

source

IndexingSource<ABI>

Returns

Promise<void>

once

once: (args) => Promise<void>

Parameters
args
eventStream

LogEvent<ABI>[]

lastSync

LastSync<ABI>

source

IndexingSource<ABI>

Returns

Promise<void>

executing

Get Signature

get executing(): Promise<T> | undefined

Returns

Promise<T> | undefined

block()

block(): void

Returns

void

cancel()

cancel(): void

Returns

void

getContext()

getContext(): LogEvent<ABI>[] | undefined

Returns

LogEvent<ABI>[] | undefined

reset()

reset(): void

Returns

void

setContext()

setContext(context): void

Parameters
context

LogEvent<ABI>[]

Returns

void

unblock()

unblock(): void

Returns

void


blockTimestampCache

protected blockTimestampCache: Map<string, { number: number; timestamp: number; }>

Defined in: packages/core/src/indexer.ts:119

Block timestamps already fetched, so the unconfirmed window is not re-fetched every round.

Only ever populated on the fallback path, for nodes that do not put blockTimestamp on the log. Those nodes cost one eth_getBlockByHash per block, and getFromBlock deliberately re-scans back to latestBlock - finality on every round to catch reorgs, so without a cache the same unconfirmed blocks are fetched again on every single round.

Keyed by block HASH, and that is what makes it safe. A hash uniquely determines a block, so a cached timestamp cannot become wrong: a reorged-out block's hash simply never appears again. Keying by NUMBER would be silently wrong across exactly the reorgs the re-scan exists to detect, since the same height would return the dead branch's timestamp.


config

protected config: UsedIndexerConfig<ABI>

Defined in: packages/core/src/indexer.ts:93


defaultFromBlock

readonly defaultFromBlock: number

Defined in: packages/core/src/indexer.ts:71


finality

protected finality: number

Defined in: packages/core/src/indexer.ts:94


lastSync

protected lastSync: LastSync<ABI> | undefined

Defined in: packages/core/src/indexer.ts:101


logEventFetcher

protected logEventFetcher: LogEventFetcher<ABI>

Defined in: packages/core/src/indexer.ts:99


onLastSyncUpdated

onLastSyncUpdated: ((lastSync) => void) | undefined

Defined in: packages/core/src/indexer.ts:74


onLoad

onLoad: ((state) => Promise<void>) | undefined

Defined in: packages/core/src/indexer.ts:72


onProcessorDrift

onProcessorDrift: ((report) => void) | undefined

Defined in: packages/core/src/indexer.ts:85

Called when the processor's declared version is unchanged but its code is not: the "author edited a handler and forgot to bump version" case.

The report is ALSO logged at error level through named-logs, so a host that sets nothing is never silent; this exists because a log line is hard to alert on, and routing a drift to a pager or a CI failure is a decision only the host can make. Set strictProcessorDrift in the config to refuse to start instead.


onStateUpdated

onStateUpdated: ((state) => void) | undefined

Defined in: packages/core/src/indexer.ts:73


processor

protected processor: EventProcessor<ABI, ProcessResultType>

Defined in: packages/core/src/indexer.ts:141


provider

protected provider: EIP1193ProviderWithoutEvents

Defined in: packages/core/src/indexer.ts:90


source

protected source: IndexingSource<ABI>

Defined in: packages/core/src/indexer.ts:91


sourceHashes

protected sourceHashes: object[]

Defined in: packages/core/src/indexer.ts:96

hash

hash: string

startBlock

startBlock: number


streamConfigHash

protected streamConfigHash: string

Defined in: packages/core/src/indexer.ts:97

Methods

_onLastSyncUpdated()

protected _onLastSyncUpdated(): void

Defined in: packages/core/src/indexer.ts:892

Returns

void


_onLoad()

protected _onLoad(state): Promise<void>

Defined in: packages/core/src/indexer.ts:902

Parameters

state

LoadingState

Returns

Promise<void>


_onStateUpdated()

protected _onStateUpdated(outcome): void

Defined in: packages/core/src/indexer.ts:882

Parameters

outcome

ProcessResultType

Returns

void


disableProcessing()

disableProcessing(): void

Defined in: packages/core/src/indexer.ts:229

Returns

void


feed()

feed(eventStream, lastSyncFetched?): Promise<LastSync<ABI>>

Defined in: packages/core/src/indexer.ts:196

Parameters

eventStream

LogEvent<ABI>[]

lastSyncFetched?

LastSync<ABI>

Returns

Promise<LastSync<ABI>>


fetchLogsFromProvider()

fetchLogsFromProvider<ABI>(lastSync, unlessCancelled): Promise<{ eventStream: LogEvent<ABI>[]; lastSync: LastSync<ABI>; }>

Defined in: packages/core/src/indexer.ts:633

Type Parameters

ABI

ABI extends Abi

Parameters

lastSync

LastSync<ABI>

unlessCancelled

<T>(p) => Promise<T>

Returns

Promise<{ eventStream: LogEvent<ABI>[]; lastSync: LastSync<ABI>; }>


freshLastSync()

protected freshLastSync(processorHash): LastSync<ABI>

Defined in: packages/core/src/indexer.ts:861

Parameters

processorHash

string

Returns

LastSync<ABI>


getBlocks()

protected getBlocks(blockHashes, unlessCancelled): Promise<object[]>

Defined in: packages/core/src/indexer.ts:782

Parameters

blockHashes

string[]

unlessCancelled

<T>(p) => Promise<T>

Returns

Promise<object[]>


getTransactions()

protected getTransactions(transactionHashes, unlessCancelled): Promise<LogTransactionData[]>

Defined in: packages/core/src/indexer.ts:799

Parameters

transactionHashes

string[]

unlessCancelled

<T>(p) => Promise<T>

Returns

Promise<LogTransactionData[]>


indexerMatches()

protected indexerMatches(lastToBlock, context): boolean

Defined in: packages/core/src/indexer.ts:817

Parameters

lastToBlock

number

context

ContextIdentifier

Returns

boolean


indexMore()

indexMore(): Promise<LastSync<ABI>>

Defined in: packages/core/src/indexer.ts:214

Returns

Promise<LastSync<ABI>>


load()

load(): Promise<LastSync<ABI>>

Defined in: packages/core/src/indexer.ts:183

Returns

Promise<LastSync<ABI>>


promiseToFeed()

protected promiseToFeed(params, __namedParameters): Promise<LastSync<ABI>>

Defined in: packages/core/src/indexer.ts:480

Parameters

params
lastSyncFetched

LastSync<ABI>

newEvents

LogEvent<ABI>[]

__namedParameters

CancelOperations

Returns

Promise<LastSync<ABI>>


promiseToIndex()

protected promiseToIndex(__namedParameters): Promise<LastSync<ABI>>

Defined in: packages/core/src/indexer.ts:576

Parameters

__namedParameters

CancelOperations

Returns

Promise<LastSync<ABI>>


promiseToLoad()

protected promiseToLoad(): Promise<LastSync<ABI>>

Defined in: packages/core/src/indexer.ts:364

Returns

Promise<LastSync<ABI>>


promiseToSave()

protected promiseToSave(params): Promise<void>

Defined in: packages/core/src/indexer.ts:550

Parameters

params
eventStream

LogEvent<ABI>[]

lastSync

LastSync<ABI>

source

IndexingSource<ABI>

Returns

Promise<void>


reenableProcessing()

reenableProcessing(): void

Defined in: packages/core/src/indexer.ts:237

Returns

void


reinit()

reinit(provider, source, config): void

Defined in: packages/core/src/indexer.ts:148

Parameters

provider

EIP1193ProviderWithoutEvents

source

IndexingSource<ABI>

config

ProvidedIndexerConfig<ABI>

Returns

void


reportProcessorDriftIfAny()

protected reportProcessorDriftIfAny(context, processorHash): void

Defined in: packages/core/src/indexer.ts:832

Compare the fingerprint of the code that computed the persisted state with the code loaded now, and report if they differ.

Either side missing means "unknown", never "drifted": a cursor written before this field existed, or a processor that cannot fingerprint itself, must not report on every boot. The stored fingerprint is deliberately NOT refreshed afterwards, because it describes the code that produced the state, so the report repeats every boot until the author bumps version (which discards the state) rather than going quiet after being seen once.

Parameters

context

ContextIdentifier

processorHash

string

Returns

void


reset()

reset(): Promise<void>

Defined in: packages/core/src/indexer.ts:343

Returns

Promise<void>


save()

protected save(source, eventStream, lastSync): Promise<void>

Defined in: packages/core/src/indexer.ts:360

Parameters

source

IndexingSource<ABI>

eventStream

LogEvent<ABI>[]

lastSync

LastSync<ABI>

Returns

Promise<void>


updateIndexer()

updateIndexer(update): Promise<void>

Defined in: packages/core/src/indexer.ts:241

Parameters

update
provider?

EIP1193ProviderWithoutEvents

source?

IndexingSource<ABI>

streamConfig?

ProvidedStreamConfig

Returns

Promise<void>


updateProcessor()

updateProcessor(newProcessor, options?): Promise<void>

Defined in: packages/core/src/indexer.ts:308

Parameters

newProcessor

EventProcessor<ABI, ProcessResultType>

options?
force?

boolean

Returns

Promise<void>