add: (feat) balances query api

- add address utils
- return uint64 for balances instead of float
This commit is contained in:
2022-05-19 09:52:34 +03:00
parent 7d431f1c8f
commit f0690d62be
11 changed files with 170 additions and 98 deletions

View File

@@ -3,8 +3,13 @@ package main
import (
"context"
"fmt"
"github.com/ethereum/go-ethereum/common"
"strings"
batch_balance "github.com/grassrootseconomics/cic-go/batch_balance"
cic_net "github.com/grassrootseconomics/cic-go/net"
"github.com/ethereum/go-ethereum/common"
"github.com/grassrootseconomics/cic-go/provider"
"github.com/hibiken/asynq"
"github.com/jackc/pgx/v4/pgxpool"
"github.com/knadh/koanf"
@@ -12,7 +17,6 @@ import (
"github.com/knadh/koanf/providers/env"
"github.com/knadh/koanf/providers/file"
"github.com/nleof/goyesql"
"strings"
)
type config struct {
@@ -25,8 +29,9 @@ type config struct {
Cors []string `koanf:"cors"`
}
Chain struct {
RpcProvider string `koanf:"rpc"`
TokenRegistry string `koanf:"index"`
RpcProvider string `koanf:"rpc"`
TokenRegistry string `koanf:"index"`
BalanceResolver string `koanf:"balances_resolver"`
}
Syncers map[string]string `koanf:"syncers"`
}
@@ -67,16 +72,28 @@ func connectDb(dsn string) error {
return nil
}
func parseRedis(dsn string) (asynq.RedisConnOpt, error) {
rconn, err := asynq.ParseRedisURI(dsn)
func parseRedis(dsn string) error {
var err error
rClient, err = asynq.ParseRedisURI(dsn)
if err != nil {
return nil, err
return err
}
return rconn, nil
return nil
}
func connectCicNet(rpcProvider string, tokenIndex common.Address) error {
func loadProvider(rpcEndpoint string) error {
var err error
rpcProvider, err = provider.NewRpcProvider(rpcEndpoint)
if err != nil {
return err
}
return nil
}
func loadCicNet(tokenIndex common.Address) error {
var err error
cicnetClient, err = cic_net.NewCicNet(rpcProvider, tokenIndex)
@@ -87,6 +104,17 @@ func connectCicNet(rpcProvider string, tokenIndex common.Address) error {
return nil
}
func loadBatchBalance(balanceResolver common.Address) error {
var err error
batchBalance, err = batch_balance.NewBatchBalance(rpcProvider, balanceResolver)
if err != nil {
return err
}
return nil
}
func loadQueries(sqlFilesPath string) error {
coreQueries, err := goyesql.ParseFile(fmt.Sprintf("%s/core.sql", sqlFilesPath))
if err != nil {

View File

@@ -2,17 +2,21 @@ package main
import (
"context"
"os"
"os/signal"
"strings"
"time"
batch_balance "github.com/grassrootseconomics/cic-go/batch_balance"
cic_net "github.com/grassrootseconomics/cic-go/net"
"github.com/grassrootseconomics/cic-go/provider"
"github.com/hibiken/asynq"
"github.com/jackc/pgx/v4/pgxpool"
"github.com/knadh/koanf"
"github.com/lmittmann/w3"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"golang.org/x/sys/unix"
"os"
"os/signal"
"strings"
"time"
)
var (
@@ -21,7 +25,10 @@ var (
preparedQueries *queries
conf config
db *pgxpool.Pool
rpcProvider *provider.Provider
cicnetClient *cic_net.CicNet
batchBalance *batch_balance.BatchBalance
rClient asynq.RedisConnOpt
)
func init() {
@@ -39,17 +46,25 @@ func init() {
log.Fatal().Err(err).Msg("failed to connect to postgres")
}
if err := connectCicNet(conf.Chain.RpcProvider, w3.A(conf.Chain.TokenRegistry)); err != nil {
if err := loadProvider(conf.Chain.RpcProvider); err != nil {
log.Fatal().Err(err).Msg("failed to connect to postgres")
}
if err := loadCicNet(w3.A(conf.Chain.TokenRegistry)); err != nil {
log.Fatal().Err(err).Msg("failed to connect to postgres")
}
if err := loadBatchBalance(w3.A(conf.Chain.BalanceResolver)); err != nil {
log.Fatal().Err(err).Msg("failed to connect to postgres")
}
if err := parseRedis(conf.Db.Redis); err != nil {
log.Fatal().Err(err).Msg("could not parse redis connection string")
}
}
func main() {
rClient, err := parseRedis(conf.Db.Redis)
if err != nil {
log.Fatal().Err(err).Msg("could not parse redis connection string")
}
scheduler, err := bootstrapScheduler(rClient)
if err != nil {
log.Fatal().Err(err).Msg("could not bootstrap scheduler")

View File

@@ -3,6 +3,7 @@ package main
import (
"cic-dw/internal/dashboard"
"cic-dw/internal/public"
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4/middleware"
)
@@ -19,7 +20,7 @@ func initHTTPServer() *echo.Echo {
}))
dashboard.InitDashboardApi(server, db, preparedQueries.dashboard)
public.InitPublicApi(server, db, preparedQueries.public)
public.InitPublicApi(server, db, batchBalance, preparedQueries.public)
return server
}

View File

@@ -2,6 +2,7 @@ package main
import (
"cic-dw/internal/syncer"
"github.com/hibiken/asynq"
"github.com/rs/zerolog/log"
)