package event import ( "context" "fmt" "strconv" geEvent "github.com/grassrootseconomics/eth-tracker/pkg/event" dataserviceapi "github.com/grassrootseconomics/ussd-data-service/pkg/api" "git.grassecon.net/grassrootseconomics/common/hex" apievent "git.grassecon.net/grassrootseconomics/sarafu-api/event" ) const ( evTokenTransfer = apievent.EventTokenTransferTag // TODO: export from visedriver storage package //DATATYPE_USERSUB = 64 ) // formatter for transaction data // // TODO: current formatting is a placeholder. func formatTransaction(tag string, idx int, item any) string { if tag == apievent.EventTokenTransferTag { tx, ok := item.(dataserviceapi.Last10TxResponse) if !ok { logg.Errorf("invalid formatting object", "tag", tag) return "" } return fmt.Sprintf("%d %s %s", idx, tx.DateBlock, tx.TxHash[:10]) } logg.Warnf("unhandled formatting object", "tag", tag) return "" } // waiter to check whether object is available on dependency endpoints. func updateWait(ctx context.Context) error { return nil } // attempt to coerce event as token transfer event. func asTokenTransferEvent(gev *geEvent.Event) (*apievent.EventTokenTransfer, bool) { var err error var ok bool var ev apievent.EventTokenTransfer if gev.TxType != evTokenTransfer { return nil, false } pl := gev.Payload // we are assuming from and to are checksum addresses ev.From, ok = pl["from"].(string) if !ok { return nil, false } ev.To, ok = pl["to"].(string) if !ok { return nil, false } ev.TxHash, err = hex.NormalizeHex(gev.TxHash) if err != nil { logg.Errorf("could not decode tx hash", "tx", gev.TxHash, "err", err) return nil, false } value, ok := pl["value"].(string) if !ok { return nil, false } ev.Value, err = strconv.Atoi(value) if err != nil { logg.Errorf("could not decode value", "value", value, "err", err) return nil, false } ev.VoucherAddress = gev.ContractAddress return &ev, true }