synapsecns/sanguine

View on GitHub
ethergo/listener/README.md

Summary

Maintainability
Test Coverage
# Listener

![logo.png](logo.png)


```mermaid
sequenceDiagram
    participant User
    participant EthereumNode
    participant SQLiteDB
    participant Listener

    User->>Listener: Start Listener
    Listener->>SQLiteDB: Connect and Migrate Models
    Listener->>EthereumNode: Connect to Ethereum Node
    Listener->>EthereumNode: Retrieve Latest Block
    Listener->>Listener: Listen for Logs
    Listener->>User: Process Log
```


# Using Listener DB

There is a simple example [here](../examples/usdclistener).


## Migrating to ListenerDB

This guide outlines the steps to migrate your service to use the new ListenerDB interface. Follow these steps for each service that needs to be updated.

## 1. Remove Deprecated Methods

Delete any deprecated methods that are no longer needed with ListenerDB.

## 2. Update Interface Definitions
Add the `ListenerDB` interface to your `Service` interface:

```go
type Service interface {
    Reader
    Writer
    SubmitterDB() submitterDB.Service
    listenerDB.ChainListenerDB
}
```

## 3. Update GetAllModels Function

Modify the `GetAllModels` function to include ListenerDB models:

```go
func GetAllModels() (allModels []interface{}) {
    allModels = append(txdb.GetAllModels(), &YourModel{})
    allModels = append(allModels, listenerDB.GetAllModels()...)
    return allModels
}
```

## 4. Implement ListenerDB in Store

Update your `Store` struct and `NewStore` function:

```go
type Store struct {
    db             *gorm.DB
    submitterStore submitterDB.Service
    listenerDB.ChainListenerDB
}

func NewStore(db *gorm.DB, metrics metrics.Handler) *Store {
    txDB := txdb.NewTXStore(db, metrics)
    listener := listenerDB.NewChainListenerStore(db, metrics)

    return &Store{
        db:              db,
        submitterStore:  txDB,
        ChainListenerDB: listener,
    }
}
```


## 6. Refactor Usage

Replace all calls to the removed methods with the appropriate methods from the `ChainListenerDB` interface.

## 7. Testing

After making these changes, thoroughly test your service to ensure all functionality works as expected with the new ListenerDB implementation.

By following these steps, you should successfully migrate your service to use the new ListenerDB interface. Remember to replace `YourModel` with the actual model name in your implementation. If you encounter any issues or need further clarification, please refer to the ListenerDB documentation or consult with your team.