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) ![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 ## Getting Started
### Prerequisites ### Prerequisites
* Git - Git
* Docker - Docker
* Postgres server - Postgres server
* Access to a `eth-tracker` instance - 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 ### 1. Build the Docker image
@ -34,7 +37,9 @@ For an example, see `dev/docker-compose.postgres.yaml`.
### 3. Update config values ### 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 ```bash
# Override only specific config values # Override only specific config values
@ -44,10 +49,10 @@ mv .env.example .env
Special env variables: Special env variables:
* DEV=* - DEV=*
Refer to [`config.toml`](config.toml) to understand different config value settings.
Refer to [`config.toml`](config.toml) to understand different config value
settings.
### 4. Run the indexer ### 4. Run the indexer
@ -58,4 +63,4 @@ docker compose up
## License ## License
[AGPL-3.0](LICENSE). [AGPL-3.0](LICENSE).

View File

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

View File

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

View File

@ -3,8 +3,8 @@ package handler
import ( import (
"log/slog" "log/slog"
"github.com/grassrootseconomics/eth-indexer/internal/cache" "github.com/grassrootseconomics/eth-indexer/v2/internal/cache"
"github.com/grassrootseconomics/eth-indexer/internal/store" "github.com/grassrootseconomics/eth-indexer/v2/internal/store"
"github.com/grassrootseconomics/ethutils" "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"` InsertOwnershipChange string `query:"insert-ownership-change"`
InsertToken string `query:"insert-token"` InsertToken string `query:"insert-token"`
InsertPool string `query:"insert-pool"` 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) { func (pg *Pg) insertTx(ctx context.Context, tx pgx.Tx, eventPayload event.Event) (int, error) {
var txID int var txID int
if err := tx.QueryRow( if err := tx.QueryRow(

View File

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

View File

@ -6,7 +6,7 @@ import (
"log/slog" "log/slog"
"time" "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"
"github.com/nats-io/nats.go/jetstream" "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_name,
pool_symbol pool_symbol
) VALUES ($1, $2, $3) ON CONFLICT DO NOTHING ) 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