breaking: use event router, adsd telegram notifier, update indexer schema
This commit is contained in:
67
internal/handler/add_contract.go
Normal file
67
internal/handler/add_contract.go
Normal file
@@ -0,0 +1,67 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/grassrootseconomics/eth-tracker/pkg/event"
|
||||
"github.com/lmittmann/w3"
|
||||
"github.com/lmittmann/w3/module/eth"
|
||||
)
|
||||
|
||||
var (
|
||||
nameGetter = w3.MustNewFunc("name()", "string")
|
||||
symbolGetter = w3.MustNewFunc("symbol()", "string")
|
||||
decimalsGetter = w3.MustNewFunc("decimals()", "uint8")
|
||||
sinkAddressGetter = w3.MustNewFunc("sinkAddress", "address")
|
||||
)
|
||||
|
||||
func (h *Handler) AddToken(ctx context.Context, event event.Event) error {
|
||||
if h.cache.Get(event.ContractAddress) {
|
||||
return nil
|
||||
}
|
||||
|
||||
var (
|
||||
tokenName string
|
||||
tokenSymbol string
|
||||
tokenDecimals uint8
|
||||
sinkAddress common.Address
|
||||
)
|
||||
|
||||
contractAddress := w3.A(event.ContractAddress)
|
||||
|
||||
if err := h.chainProvider.Client.CallCtx(
|
||||
ctx,
|
||||
eth.CallFunc(contractAddress, nameGetter).Returns(&tokenName),
|
||||
eth.CallFunc(contractAddress, symbolGetter).Returns(&tokenSymbol),
|
||||
eth.CallFunc(contractAddress, decimalsGetter).Returns(&tokenDecimals),
|
||||
eth.CallFunc(contractAddress, sinkAddressGetter).Returns(&sinkAddress),
|
||||
); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return h.store.InsertToken(ctx, event.ContractAddress, tokenName, tokenSymbol, tokenDecimals, sinkAddress.Hex())
|
||||
}
|
||||
|
||||
func (h *Handler) AddPool(ctx context.Context, event event.Event) error {
|
||||
if h.cache.Get(event.ContractAddress) {
|
||||
return nil
|
||||
}
|
||||
|
||||
var (
|
||||
tokenName string
|
||||
tokenSymbol string
|
||||
)
|
||||
|
||||
contractAddress := w3.A(event.ContractAddress)
|
||||
|
||||
if err := h.chainProvider.Client.CallCtx(
|
||||
ctx,
|
||||
eth.CallFunc(contractAddress, nameGetter).Returns(&tokenName),
|
||||
eth.CallFunc(contractAddress, symbolGetter).Returns(&tokenSymbol),
|
||||
); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return h.store.InsertPool(ctx, event.ContractAddress, tokenName, tokenSymbol)
|
||||
}
|
||||
35
internal/handler/faucet_give.go
Normal file
35
internal/handler/faucet_give.go
Normal file
@@ -0,0 +1,35 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"math/big"
|
||||
|
||||
"github.com/grassrootseconomics/eth-indexer/internal/telegram"
|
||||
"github.com/grassrootseconomics/eth-tracker/pkg/event"
|
||||
"github.com/lmittmann/w3"
|
||||
"github.com/lmittmann/w3/module/eth"
|
||||
)
|
||||
|
||||
const balanceThreshold = 50
|
||||
|
||||
func (h *Handler) IndexFaucetGive(ctx context.Context, event event.Event) error {
|
||||
return h.store.InsertFaucetGive(ctx, event)
|
||||
}
|
||||
|
||||
func (h *Handler) FaucetHealthCheck(ctx context.Context, event event.Event) error {
|
||||
var balance *big.Int
|
||||
|
||||
if err := h.chainProvider.Client.CallCtx(
|
||||
ctx,
|
||||
eth.Balance(w3.A(event.ContractAddress), nil).Returns(&balance),
|
||||
); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if balance.Cmp(new(big.Int).Mul(w3.BigEther, big.NewInt(balanceThreshold))) < 0 {
|
||||
return h.telegram.Notify(ctx, fmt.Sprintf("%s: %s", event.ContractAddress, telegram.NOTIFY_LOW_BALANCE_ON_GAS_FAUCET))
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -1,52 +1,38 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"log/slog"
|
||||
|
||||
"github.com/grassrootseconomics/eth-indexer/internal/cache"
|
||||
"github.com/grassrootseconomics/eth-indexer/internal/store"
|
||||
"github.com/grassrootseconomics/eth-tracker/pkg/event"
|
||||
"github.com/grassrootseconomics/eth-indexer/internal/telegram"
|
||||
"github.com/grassrootseconomics/ethutils"
|
||||
)
|
||||
|
||||
type (
|
||||
HandlerOpts struct {
|
||||
Store store.Store
|
||||
Store store.Store
|
||||
Cache *cache.Cache
|
||||
ChainProvider *ethutils.Provider
|
||||
Telegram *telegram.Telegram
|
||||
Logg *slog.Logger
|
||||
}
|
||||
|
||||
Handler struct {
|
||||
store store.Store
|
||||
store store.Store
|
||||
cache *cache.Cache
|
||||
chainProvider *ethutils.Provider
|
||||
telegram *telegram.Telegram
|
||||
logg *slog.Logger
|
||||
}
|
||||
)
|
||||
|
||||
func NewHandler(o HandlerOpts) *Handler {
|
||||
return &Handler{
|
||||
store: o.Store,
|
||||
store: o.Store,
|
||||
cache: o.Cache,
|
||||
chainProvider: o.ChainProvider,
|
||||
telegram: o.Telegram,
|
||||
logg: o.Logg,
|
||||
}
|
||||
}
|
||||
|
||||
func (h *Handler) Handle(ctx context.Context, msgSubject string, msgData []byte) error {
|
||||
var chainEvent event.Event
|
||||
|
||||
if err := json.Unmarshal(msgData, &chainEvent); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
switch msgSubject {
|
||||
case "TRACKER.TOKEN_TRANSFER":
|
||||
return h.store.InsertTokenTransfer(ctx, chainEvent)
|
||||
case "TRACKER.POOL_SWAP":
|
||||
return h.store.InsertPoolSwap(ctx, chainEvent)
|
||||
case "TRACKER.FAUCET_GIVE":
|
||||
return h.store.InsertFaucetGive(ctx, chainEvent)
|
||||
case "TRACKER.POOL_DEPOSIT":
|
||||
return h.store.InsertPoolDeposit(ctx, chainEvent)
|
||||
case "TRACKER.TOKEN_MINT":
|
||||
return h.store.InsertTokenMint(ctx, chainEvent)
|
||||
case "TRACKER.TOKEN_BURN":
|
||||
return h.store.InsertTokenBurn(ctx, chainEvent)
|
||||
case "TRACKER.QUOTER_PRICE_INDEX_UPDATED":
|
||||
return h.store.InsertPriceQuoteUpdate(ctx, chainEvent)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
11
internal/handler/pool_deposit.go
Normal file
11
internal/handler/pool_deposit.go
Normal file
@@ -0,0 +1,11 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/grassrootseconomics/eth-tracker/pkg/event"
|
||||
)
|
||||
|
||||
func (h *Handler) IndexPoolDeposit(ctx context.Context, event event.Event) error {
|
||||
return h.store.InsertPoolDeposit(ctx, event)
|
||||
}
|
||||
11
internal/handler/pool_swap.go
Normal file
11
internal/handler/pool_swap.go
Normal file
@@ -0,0 +1,11 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/grassrootseconomics/eth-tracker/pkg/event"
|
||||
)
|
||||
|
||||
func (h *Handler) IndexPoolSwap(ctx context.Context, event event.Event) error {
|
||||
return h.store.InsertPoolSwap(ctx, event)
|
||||
}
|
||||
11
internal/handler/token_burn.go
Normal file
11
internal/handler/token_burn.go
Normal file
@@ -0,0 +1,11 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/grassrootseconomics/eth-tracker/pkg/event"
|
||||
)
|
||||
|
||||
func (h *Handler) IndexTokenBurn(ctx context.Context, event event.Event) error {
|
||||
return h.store.InsertTokenBurn(ctx, event)
|
||||
}
|
||||
11
internal/handler/token_mint.go
Normal file
11
internal/handler/token_mint.go
Normal file
@@ -0,0 +1,11 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/grassrootseconomics/eth-tracker/pkg/event"
|
||||
)
|
||||
|
||||
func (h *Handler) IndexTokenMint(ctx context.Context, event event.Event) error {
|
||||
return h.store.InsertTokenMint(ctx, event)
|
||||
}
|
||||
11
internal/handler/transfer.go
Normal file
11
internal/handler/transfer.go
Normal file
@@ -0,0 +1,11 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/grassrootseconomics/eth-tracker/pkg/event"
|
||||
)
|
||||
|
||||
func (h *Handler) IndexTransfer(ctx context.Context, event event.Event) error {
|
||||
return h.store.InsertTokenTransfer(ctx, event)
|
||||
}
|
||||
Reference in New Issue
Block a user