68 lines
1.7 KiB
Go
68 lines
1.7 KiB
Go
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)
|
|
}
|