Compare commits
2 Commits
feat/owner
...
v2.2.0-sta
| Author | SHA1 | Date | |
|---|---|---|---|
|
16ddf2b2ce
|
|||
|
1f52616f97
|
27
README.md
27
README.md
@@ -2,18 +2,21 @@
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
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).
|
||||||
|
|||||||
@@ -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"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -1,100 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"flag"
|
|
||||||
"log/slog"
|
|
||||||
"os"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/grassrootseconomics/eth-indexer/internal/store"
|
|
||||||
"github.com/grassrootseconomics/eth-indexer/internal/util"
|
|
||||||
"github.com/grassrootseconomics/ethutils"
|
|
||||||
"github.com/jackc/pgx/v5/pgxpool"
|
|
||||||
"github.com/knadh/koanf/v2"
|
|
||||||
"github.com/lmittmann/w3"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
insertOwnerQuery = `INSERT INTO ownership_change(
|
|
||||||
new_owner
|
|
||||||
contract_address
|
|
||||||
) VALUES ($1, $2) ON CONFLICT DO NOTHING`
|
|
||||||
|
|
||||||
getTokens = `SELECT contract_address FROM tokens`
|
|
||||||
|
|
||||||
getPools = `SELECT contract_address FROM pools`
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
build = "dev"
|
|
||||||
|
|
||||||
confFlag string
|
|
||||||
migrationsFolderFlag string
|
|
||||||
queriesFlag string
|
|
||||||
|
|
||||||
lo *slog.Logger
|
|
||||||
ko *koanf.Koanf
|
|
||||||
|
|
||||||
dbPool *pgxpool.Pool
|
|
||||||
)
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
flag.StringVar(&confFlag, "config", "config.toml", "Config file location")
|
|
||||||
flag.StringVar(&migrationsFolderFlag, "migrations", "migrations/", "Migrations folder location")
|
|
||||||
flag.StringVar(&queriesFlag, "queries", "queries.sql", "Queries file location")
|
|
||||||
flag.Parse()
|
|
||||||
|
|
||||||
lo = util.InitLogger()
|
|
||||||
ko = util.InitConfig(lo, confFlag)
|
|
||||||
|
|
||||||
lo.Info("starting owners bootstrapper", "build", build)
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
var ownerGetter = w3.MustNewFunc("owner()", "address")
|
|
||||||
|
|
||||||
chainProvider := ethutils.NewProvider(ko.MustString("chain.rpc_endpoint"), ko.MustInt64("chain.chainid"))
|
|
||||||
|
|
||||||
var err error
|
|
||||||
dbPool, err = newPgStore()
|
|
||||||
if err != nil {
|
|
||||||
lo.Error("could not initialize postgres store", "error", err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), time.Minute*5)
|
|
||||||
defer cancel()
|
|
||||||
|
|
||||||
// TODO: get all tokens and pools
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
func newPgStore() (*pgxpool.Pool, error) {
|
|
||||||
store, err := store.NewPgStore(store.PgOpts{
|
|
||||||
Logg: lo,
|
|
||||||
DSN: ko.MustString("postgres.dsn"),
|
|
||||||
MigrationsFolderPath: migrationsFolderFlag,
|
|
||||||
QueriesFolderPath: queriesFlag,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
lo.Error("could not initialize postgres store", "error", err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
return store.Pool(), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func insertOwnershipChange(ctx context.Context, owner string, contractAddress string) error {
|
|
||||||
_, err := dbPool.Exec(
|
|
||||||
ctx,
|
|
||||||
insertOwnerQuery,
|
|
||||||
owner,
|
|
||||||
contractAddress,
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
2
go.mod
2
go.mod
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -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"
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user