mirror of
https://github.com/grassrootseconomics/eth-tracker.git
synced 2025-04-26 01:51:02 +02:00
56 lines
979 B
Go
56 lines
979 B
Go
package handler
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"math/big"
|
|
|
|
"github.com/celo-org/celo-blockchain/common"
|
|
"github.com/celo-org/celo-blockchain/core/types"
|
|
"github.com/grassrootseconomics/w3-celo"
|
|
)
|
|
|
|
type (
|
|
TransferHandler struct {
|
|
topicHash common.Hash
|
|
event *w3.Event
|
|
}
|
|
|
|
TransferEvent struct {
|
|
Contract string
|
|
From string
|
|
To string
|
|
Value uint64
|
|
}
|
|
)
|
|
|
|
func (h *TransferHandler) Handle(ctx context.Context, log *types.Log, emitFn EmitterEmitFunc) error {
|
|
if log.Topics[0] == h.topicHash {
|
|
var (
|
|
from common.Address
|
|
to common.Address
|
|
value big.Int
|
|
)
|
|
|
|
if err := h.event.DecodeArgs(log, &from, &to, &value); err != nil {
|
|
return err
|
|
}
|
|
|
|
transferEvent := &TransferEvent{
|
|
Contract: log.Address.Hex(),
|
|
From: from.Hex(),
|
|
To: to.Hex(),
|
|
Value: value.Uint64(),
|
|
}
|
|
|
|
jsonData, err := json.Marshal(transferEvent)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return emitFn(ctx, jsonData)
|
|
}
|
|
|
|
return nil
|
|
}
|