66 lines
1.8 KiB
Go
66 lines
1.8 KiB
Go
package shreder
|
|
|
|
import (
|
|
"log/slog"
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/shopspring/decimal"
|
|
)
|
|
|
|
const (
|
|
TokenDecimals = 6
|
|
SolDecimals = 9
|
|
)
|
|
|
|
var (
|
|
logger *slog.Logger
|
|
)
|
|
|
|
func init() {
|
|
handler := slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{Level: slog.LevelInfo})
|
|
logger = slog.New(handler)
|
|
}
|
|
|
|
func SetLogLevel(level slog.Level) {
|
|
handler := slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{Level: level})
|
|
logger = slog.New(handler)
|
|
}
|
|
|
|
type TxSignal struct {
|
|
Source string `json:"source"`
|
|
Label string `json:"label"`
|
|
TxHash string `json:"tx_hash"`
|
|
Maker string `json:"maker"`
|
|
Token0Address string `json:"token0_address"`
|
|
Token1Address string `json:"token1_address"`
|
|
Token0Amount decimal.Decimal `json:"token0_amount"`
|
|
Token1Amount decimal.Decimal `json:"token1_amount"`
|
|
Block uint64 `json:"block"`
|
|
BlockAt time.Time `json:"block_at"`
|
|
BlockIndex uint64 `json:"block_index"`
|
|
Event string `json:"event"`
|
|
Program string `json:"program"`
|
|
IsProcessed bool `json:"is_processed"`
|
|
IsToken2022 bool `json:"is_token2022"`
|
|
IsMayhemMode bool `json:"is_mayhem_mode"`
|
|
TxFee decimal.Decimal `json:"tx_fee"`
|
|
|
|
ExactSOL bool `json:"exact_in"`
|
|
|
|
// parsed values
|
|
Token0AmountUint64 uint64 `json:"-"`
|
|
Token1AmountUint64 uint64 `json:"-"`
|
|
|
|
ParseStart time.Time `json:"parse_start"`
|
|
ParseEnd time.Time `json:"parse_end"`
|
|
}
|
|
|
|
func (t *TxSignal) Parse() *TxSignal {
|
|
t.Token0AmountUint64 = t.Token0Amount.Mul(decimal.New(1, TokenDecimals)).BigInt().Uint64()
|
|
t.Token1AmountUint64 = t.Token1Amount.Mul(decimal.New(1, SolDecimals)).BigInt().Uint64()
|
|
return t
|
|
}
|
|
|
|
type TxSignalBatch = []*TxSignal
|