Compare commits

...

3 Commits

11 changed files with 84 additions and 23 deletions

View File

@ -2,18 +2,21 @@
![GitHub Tag](https://img.shields.io/github/v/tag/grassrootseconomics/eth-indexer)
A lightweight Postgres chain indexer designed to couple with [eth-tracker](https://github.com/grassrootseconomics/eth-tracker) to index all relevant GE related blockchain data on any EVM chain.
A lightweight Postgres chain indexer designed to couple with
[eth-tracker](https://github.com/grassrootseconomics/eth-tracker) to index all
relevant GE related blockchain data on any EVM chain.
## Getting Started
### Prerequisites
* Git
* Docker
* Postgres server
* Access to a `eth-tracker` instance
- Git
- Docker
- Postgres server
- Access to a `eth-tracker` instance
See [docker-compose.yaml](dev/docker-compose.yaml) for an example on how to run and deploy a single instance.
See [docker-compose.yaml](dev/docker-compose.yaml) for an example on how to run
and deploy a single instance.
### 1. Build the Docker image
@ -34,7 +37,9 @@ For an example, see `dev/docker-compose.postgres.yaml`.
### 3. Update config values
See `.env.example` on how to override default values defined in `config.toml` using env variables. Alternatively, mount your own config.toml either during build time or Docker runtime.
See `.env.example` on how to override default values defined in `config.toml`
using env variables. Alternatively, mount your own config.toml either during
build time or Docker runtime.
```bash
# Override only specific config values
@ -44,10 +49,10 @@ mv .env.example .env
Special env variables:
* DEV=*
Refer to [`config.toml`](config.toml) to understand different config value settings.
- DEV=*
Refer to [`config.toml`](config.toml) to understand different config value
settings.
### 4. Run the indexer
@ -58,4 +63,4 @@ docker compose up
## License
[AGPL-3.0](LICENSE).
[AGPL-3.0](LICENSE).

View File

@ -12,12 +12,12 @@ import (
"syscall"
"time"
"github.com/grassrootseconomics/eth-indexer/internal/api"
"github.com/grassrootseconomics/eth-indexer/internal/cache"
"github.com/grassrootseconomics/eth-indexer/internal/handler"
"github.com/grassrootseconomics/eth-indexer/internal/store"
"github.com/grassrootseconomics/eth-indexer/internal/sub"
"github.com/grassrootseconomics/eth-indexer/internal/util"
"github.com/grassrootseconomics/eth-indexer/v2/internal/api"
"github.com/grassrootseconomics/eth-indexer/v2/internal/cache"
"github.com/grassrootseconomics/eth-indexer/v2/internal/handler"
"github.com/grassrootseconomics/eth-indexer/v2/internal/store"
"github.com/grassrootseconomics/eth-indexer/v2/internal/sub"
"github.com/grassrootseconomics/eth-indexer/v2/internal/util"
"github.com/grassrootseconomics/ethutils"
"github.com/knadh/koanf/v2"
)

View File

@ -1,8 +1,8 @@
package main
import (
"github.com/grassrootseconomics/eth-indexer/internal/handler"
"github.com/grassrootseconomics/eth-indexer/pkg/router"
"github.com/grassrootseconomics/eth-indexer/v2/internal/handler"
"github.com/grassrootseconomics/eth-indexer/v2/pkg/router"
)
func bootstrapRouter(handlerContainer *handler.Handler) *router.Router {
@ -43,5 +43,10 @@ func bootstrapRouter(handlerContainer *handler.Handler) *router.Router {
handlerContainer.IndexOwnershipChange,
)
router.RegisterRoute(
"TRACKER.INDEX_REMOVE",
handlerContainer.IndexRemove,
)
return router
}

2
go.mod
View File

@ -1,4 +1,4 @@
module github.com/grassrootseconomics/eth-indexer
module github.com/grassrootseconomics/eth-indexer/v2
go 1.23.3

View File

@ -3,8 +3,8 @@ package handler
import (
"log/slog"
"github.com/grassrootseconomics/eth-indexer/internal/cache"
"github.com/grassrootseconomics/eth-indexer/internal/store"
"github.com/grassrootseconomics/eth-indexer/v2/internal/cache"
"github.com/grassrootseconomics/eth-indexer/v2/internal/store"
"github.com/grassrootseconomics/ethutils"
)

View File

@ -0,0 +1,11 @@
package handler
import (
"context"
"github.com/grassrootseconomics/eth-tracker/pkg/event"
)
func (h *Handler) IndexRemove(ctx context.Context, event event.Event) error {
return h.store.RemoveContractAddress(ctx, event)
}

View File

@ -39,6 +39,8 @@ type (
InsertOwnershipChange string `query:"insert-ownership-change"`
InsertToken string `query:"insert-token"`
InsertPool string `query:"insert-pool"`
RemovePool string `query:"remove-pool"`
RemoveToken string `query:"remove-token"`
}
)
@ -247,6 +249,30 @@ func (pg *Pg) InsertPool(ctx context.Context, contractAddress string, name strin
})
}
func (pg *Pg) RemoveContractAddress(ctx context.Context, eventPayload event.Event) error {
return pg.executeTransaction(ctx, func(tx pgx.Tx) error {
_, err := tx.Exec(
ctx,
pg.queries.RemovePool,
eventPayload.Payload["address"].(string),
)
if err != nil {
return err
}
_, err = tx.Exec(
ctx,
pg.queries.RemoveToken,
eventPayload.Payload["address"].(string),
)
if err != nil {
return err
}
return nil
})
}
func (pg *Pg) insertTx(ctx context.Context, tx pgx.Tx, eventPayload event.Event) (int, error) {
var txID int
if err := tx.QueryRow(

View File

@ -18,6 +18,7 @@ type (
InsertOwnershipChange(context.Context, event.Event) error
InsertToken(context.Context, string, string, string, uint8, string) error
InsertPool(context.Context, string, string, string) error
RemoveContractAddress(context.Context, event.Event) error
Pool() *pgxpool.Pool
Close()
}

View File

@ -6,7 +6,7 @@ import (
"log/slog"
"time"
"github.com/grassrootseconomics/eth-indexer/pkg/router"
"github.com/grassrootseconomics/eth-indexer/v2/pkg/router"
"github.com/nats-io/nats.go"
"github.com/nats-io/nats.go/jetstream"
)

View File

@ -0,0 +1,5 @@
ALTER TABLE tokens
ADD COLUMN removed BOOLEAN NOT NULL DEFAULT false;
ALTER TABLE pools
ADD COLUMN removed BOOLEAN NOT NULL DEFAULT false;

View File

@ -139,3 +139,11 @@ INSERT INTO pools(
pool_name,
pool_symbol
) VALUES ($1, $2, $3) ON CONFLICT DO NOTHING
--name: remove-pool
-- $1: contract_address
UPDATE pools SET removed = true WHERE contract_address = $1
--name: remove-token
-- $1: contract_address
UPDATE tokens SET removed = true WHERE contract_address = $1