Versions in this module Expand all Collapse all v0 v0.0.72 Sep 10, 2026 v0.0.71 Sep 3, 2026 Changes in this version + var BlocksCompared = prometheus.NewCounterVec(prometheus.CounterOpts{ ... }, []string{ ... }) + var Divergences = prometheus.NewCounterVec(prometheus.CounterOpts{ ... }, []string{ ... }) + func RenderMarkdown(r *DivergenceReport) string + type ChainSnapshot struct + Block json.RawMessage + BlockResults json.RawMessage + type Comparator struct + func NewComparator(shadowRPC, canonicalRPC string, opts ...Option) *Comparator + func (c *Comparator) BuildDivergenceReport(ctx context.Context, height int64, comparison CompareResult) (*DivergenceReport, error) + func (c *Comparator) Close() + func (c *Comparator) CompareBlock(ctx context.Context, height int64) (*CompareResult, error) + type CompareResult struct + DivergenceLayer *int + Height int64 + Layer0 Layer0Result + Layer1 *Layer1Result + Layer2 *Layer2Result + Match bool + MigrationMode bool + Timestamp string + func (r *CompareResult) Diverged() bool + type DivergenceReport struct + Canonical ChainSnapshot + Comparison CompareResult + Height int64 + Shadow ChainSnapshot + Timestamp string + func FetchReport(ctx context.Context, downloader seis3.Downloader, bucket, key string) (*DivergenceReport, error) + type FieldDivergence struct + Canonical any + Field string + Shadow any + type KeySource interface + TouchedAccounts func(ctx context.Context, height int64) ([]TouchedAccount, error) + type Layer0Result struct + AppHashMatch bool + CanonicalAppHash string + CanonicalGasUsed int64 + CanonicalLastResultsHash string + GasUsedMatch bool + LastResultsHashMatch bool + ShadowAppHash string + ShadowGasUsed int64 + ShadowLastResultsHash string + func (r Layer0Result) Match() bool + type Layer1Result struct + Divergences []TxDivergence + Error string + Indeterminate bool + TotalTxs int + TxCountMatch bool + type Layer2Result struct + AccountsChecked int + Divergences []StateDivergence + Error string + Indeterminate bool + KeysChecked int + type Option func(*Comparator) + func WithLayer2(shadowState, canonicalState StateReader, keySource KeySource) Option + func WithMigrationMode() Option + type StateDivergence struct + Addr string + Canonical string + Kind string + Shadow string + Slot string + type StateReader interface + BalanceAt func(ctx context.Context, account common.Address, blockNumber *big.Int) (*big.Int, error) + CodeAt func(ctx context.Context, account common.Address, blockNumber *big.Int) ([]byte, error) + NonceAt func(ctx context.Context, account common.Address, blockNumber *big.Int) (uint64, error) + StorageAt func(ctx context.Context, account common.Address, key common.Hash, ...) ([]byte, error) + type StaticKeySource struct + Accounts []TouchedAccount + func (s StaticKeySource) TouchedAccounts(_ context.Context, _ int64) ([]TouchedAccount, error) + type TouchedAccount struct + Addr common.Address + CheckBalance bool + CheckCode bool + CheckNonce bool + Slots []common.Hash + type TraceKeySource struct + func NewTraceKeySource(evmRPC string) (*TraceKeySource, error) + func (t *TraceKeySource) Close() + func (t *TraceKeySource) TouchedAccounts(ctx context.Context, height int64) ([]TouchedAccount, error) + type TxDivergence struct + Fields []FieldDivergence + TxIndex int