mirror of
https://github.com/grassrootseconomics/eth-tracker.git
synced 2025-04-17 14:31:02 +02:00
feat: add pool, token, common and faucet handlers
This commit is contained in:
parent
6bdea033a6
commit
6353d33710
106
internal/handler/faucet.go
Normal file
106
internal/handler/faucet.go
Normal file
@ -0,0 +1,106 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"context"
|
||||
"math/big"
|
||||
|
||||
"github.com/celo-org/celo-blockchain/common"
|
||||
"github.com/grassrootseconomics/celo-tracker/internal/emitter"
|
||||
"github.com/grassrootseconomics/w3-celo"
|
||||
)
|
||||
|
||||
type (
|
||||
FaucetGiveHandler struct {
|
||||
topicHash common.Hash
|
||||
event *w3.Event
|
||||
}
|
||||
)
|
||||
|
||||
var (
|
||||
faucetGiveTopicHash = w3.H("0x26162814817e23ec5035d6a2edc6c422da2da2119e27cfca6be65cc2dc55ca4c")
|
||||
faucetGiveEvent = w3.MustNewEvent("Give(address indexed _recipient, address indexed _token, uint256 _amount)")
|
||||
faucetGiveToSig = w3.MustNewFunc("giveTo(address)", "uint256")
|
||||
faucetGimmeSig = w3.MustNewFunc("gimme()", "uint256")
|
||||
)
|
||||
|
||||
func (h *FaucetGiveHandler) HandleLog(ctx context.Context, msg LogMessage, emitter emitter.Emitter) error {
|
||||
if msg.Log.Topics[0] == faucetGiveTopicHash {
|
||||
var (
|
||||
recipient common.Address
|
||||
token common.Address
|
||||
amount big.Int
|
||||
)
|
||||
|
||||
if err := faucetGiveEvent.DecodeArgs(msg.Log, &recipient, &token, &amount); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
faucetGiveEvent := Event{
|
||||
Block: msg.Log.BlockNumber,
|
||||
ContractAddress: msg.Log.Address.Hex(),
|
||||
Success: true,
|
||||
Timestamp: msg.BlockTime,
|
||||
TxHash: msg.Log.TxHash.Hex(),
|
||||
TxType: "FAUCET_GIVE",
|
||||
Payload: map[string]any{
|
||||
"recipient": recipient.Hex(),
|
||||
"token": token.Hex(),
|
||||
"amount": amount.String(),
|
||||
},
|
||||
}
|
||||
|
||||
return emitter.Emit(ctx, faucetGiveEvent)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (h *FaucetGiveHandler) HandleRevert(ctx context.Context, msg RevertMessage, emitter emitter.Emitter) error {
|
||||
if len(msg.InputData) < 8 {
|
||||
return nil
|
||||
}
|
||||
|
||||
switch msg.InputData[:8] {
|
||||
case "63e4bff4":
|
||||
var (
|
||||
to common.Address
|
||||
)
|
||||
|
||||
if err := faucetGiveToSig.DecodeArgs(w3.B(msg.InputData), &to); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
faucetGiveEvent := Event{
|
||||
Block: msg.Block,
|
||||
ContractAddress: msg.ContractAddress,
|
||||
Success: false,
|
||||
Timestamp: msg.Timestamp,
|
||||
TxHash: msg.TxHash,
|
||||
TxType: "FAUCET_GIVE",
|
||||
Payload: map[string]any{
|
||||
"revertReason": msg.RevertReason,
|
||||
"from": msg.From,
|
||||
"to": to.Hex(),
|
||||
},
|
||||
}
|
||||
|
||||
return emitter.Emit(ctx, faucetGiveEvent)
|
||||
case "de82efb4":
|
||||
faucetGiveEvent := Event{
|
||||
Block: msg.Block,
|
||||
ContractAddress: msg.ContractAddress,
|
||||
Success: false,
|
||||
Timestamp: msg.Timestamp,
|
||||
TxHash: msg.TxHash,
|
||||
TxType: "FAUCET_GIVE",
|
||||
Payload: map[string]any{
|
||||
"revertReason": msg.RevertReason,
|
||||
"from": msg.From,
|
||||
},
|
||||
}
|
||||
|
||||
return emitter.Emit(ctx, faucetGiveEvent)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
@ -1 +0,0 @@
|
||||
package handler
|
87
internal/handler/ownership.go
Normal file
87
internal/handler/ownership.go
Normal file
@ -0,0 +1,87 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/celo-org/celo-blockchain/common"
|
||||
"github.com/grassrootseconomics/celo-tracker/internal/emitter"
|
||||
"github.com/grassrootseconomics/w3-celo"
|
||||
)
|
||||
|
||||
type (
|
||||
OwnershipHandler struct {
|
||||
topicHash common.Hash
|
||||
event *w3.Event
|
||||
}
|
||||
)
|
||||
|
||||
var (
|
||||
ownershipTopicHash = w3.H("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0")
|
||||
ownershipEvent = w3.MustNewEvent("OwnershipTransferred(address indexed previousOwner, address indexed newOwner)")
|
||||
ownershipToSig = w3.MustNewFunc("transferOwnership(address)", "bool")
|
||||
)
|
||||
|
||||
func (h *OwnershipHandler) HandleLog(ctx context.Context, msg LogMessage, emitter emitter.Emitter) error {
|
||||
if msg.Log.Topics[0] == ownershipTopicHash {
|
||||
var (
|
||||
previousOwner common.Address
|
||||
newOwner common.Address
|
||||
)
|
||||
|
||||
if err := ownershipEvent.DecodeArgs(msg.Log, &previousOwner, &newOwner); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
ownershipEvent := Event{
|
||||
Block: msg.Log.BlockNumber,
|
||||
ContractAddress: msg.Log.Address.Hex(),
|
||||
Success: true,
|
||||
Timestamp: msg.BlockTime,
|
||||
TxHash: msg.Log.TxHash.Hex(),
|
||||
TxType: "OWNERSHIP_TRANSFERRED",
|
||||
Payload: map[string]any{
|
||||
"previousOwner": previousOwner.Hex(),
|
||||
"newOwner": newOwner.Hex(),
|
||||
},
|
||||
}
|
||||
|
||||
return emitter.Emit(ctx, ownershipEvent)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (h *OwnershipHandler) HandleRevert(ctx context.Context, msg RevertMessage, emitter emitter.Emitter) error {
|
||||
if len(msg.InputData) < 8 {
|
||||
return nil
|
||||
}
|
||||
|
||||
switch msg.InputData[:8] {
|
||||
case "f2fde38b":
|
||||
var (
|
||||
newOwner common.Address
|
||||
)
|
||||
|
||||
if err := ownershipToSig.DecodeArgs(w3.B(msg.InputData), &newOwner); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
ownershipEvent := Event{
|
||||
Block: msg.Block,
|
||||
ContractAddress: msg.ContractAddress,
|
||||
Success: false,
|
||||
Timestamp: msg.Timestamp,
|
||||
TxHash: msg.TxHash,
|
||||
TxType: "ownership",
|
||||
Payload: map[string]any{
|
||||
"revertReason": msg.RevertReason,
|
||||
"previousOwner": msg.From,
|
||||
"newOwner": newOwner.Hex(),
|
||||
},
|
||||
}
|
||||
|
||||
return emitter.Emit(ctx, ownershipEvent)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
97
internal/handler/pool_deposit.go
Normal file
97
internal/handler/pool_deposit.go
Normal file
@ -0,0 +1,97 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"context"
|
||||
"math/big"
|
||||
|
||||
"github.com/celo-org/celo-blockchain/common"
|
||||
"github.com/grassrootseconomics/celo-tracker/internal/emitter"
|
||||
"github.com/grassrootseconomics/w3-celo"
|
||||
)
|
||||
|
||||
type (
|
||||
PoolDepositHandler struct {
|
||||
topicHash common.Hash
|
||||
event *w3.Event
|
||||
}
|
||||
)
|
||||
|
||||
var (
|
||||
poolDepositTopicHash = w3.H("0x5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f62")
|
||||
poolDepositEvent = w3.MustNewEvent("Deposit(address indexed initiator, address indexed tokenIn, uint256 amountIn)")
|
||||
poolDepositSig = w3.MustNewFunc("deposit(address, uint256)", "")
|
||||
)
|
||||
|
||||
func (h *PoolDepositHandler) HandleLog(ctx context.Context, msg LogMessage, emitter emitter.Emitter) error {
|
||||
if msg.Log.Topics[0] == poolDepositTopicHash {
|
||||
var (
|
||||
initiator common.Address
|
||||
tokenIn common.Address
|
||||
amountIn big.Int
|
||||
)
|
||||
|
||||
if err := poolDepositEvent.DecodeArgs(
|
||||
msg.Log,
|
||||
&initiator,
|
||||
&tokenIn,
|
||||
&amountIn,
|
||||
); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
poolDepositEvent := Event{
|
||||
Block: msg.Log.BlockNumber,
|
||||
ContractAddress: msg.Log.Address.Hex(),
|
||||
Success: true,
|
||||
Timestamp: msg.BlockTime,
|
||||
TxHash: msg.Log.TxHash.Hex(),
|
||||
TxType: "POOL_DEPOSIT",
|
||||
Payload: map[string]any{
|
||||
"initiator": initiator.Hex(),
|
||||
"tokenIn": tokenIn.Hex(),
|
||||
"amountIn": amountIn.String(),
|
||||
},
|
||||
}
|
||||
|
||||
return emitter.Emit(ctx, poolDepositEvent)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (h *PoolDepositHandler) HandleRevert(ctx context.Context, msg RevertMessage, emitter emitter.Emitter) error {
|
||||
if len(msg.InputData) < 8 {
|
||||
return nil
|
||||
}
|
||||
|
||||
switch msg.InputData[:8] {
|
||||
case "47e7ef24":
|
||||
var (
|
||||
tokenIn common.Address
|
||||
amountIn big.Int
|
||||
)
|
||||
|
||||
if err := poolDepositSig.DecodeArgs(w3.B(msg.InputData), &tokenIn, &amountIn); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
poolDepositEvent := Event{
|
||||
Block: msg.Block,
|
||||
ContractAddress: msg.ContractAddress,
|
||||
Success: false,
|
||||
Timestamp: msg.Timestamp,
|
||||
TxHash: msg.TxHash,
|
||||
TxType: "POOL_DEPOSIT",
|
||||
Payload: map[string]any{
|
||||
"revertReason": msg.RevertReason,
|
||||
"initiator": msg.From,
|
||||
"tokenIn": tokenIn.Hex(),
|
||||
"amountIn": amountIn.String(),
|
||||
},
|
||||
}
|
||||
|
||||
return emitter.Emit(ctx, poolDepositEvent)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
110
internal/handler/pool_swap.go
Normal file
110
internal/handler/pool_swap.go
Normal file
@ -0,0 +1,110 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"context"
|
||||
"math/big"
|
||||
|
||||
"github.com/celo-org/celo-blockchain/common"
|
||||
"github.com/grassrootseconomics/celo-tracker/internal/emitter"
|
||||
"github.com/grassrootseconomics/w3-celo"
|
||||
)
|
||||
|
||||
type (
|
||||
PoolSwapHandler struct {
|
||||
topicHash common.Hash
|
||||
event *w3.Event
|
||||
}
|
||||
)
|
||||
|
||||
var (
|
||||
poolSwapTopicHash = w3.H("0xd6d34547c69c5ee3d2667625c188acf1006abb93e0ee7cf03925c67cf7760413")
|
||||
poolSwapEvent = w3.MustNewEvent("Swap(address indexed initiator, address indexed tokenIn, address tokenOut, uint256 amountIn, uint256 amountOut, uint256 fee)")
|
||||
poolSwapSig = w3.MustNewFunc("withdraw(address, address, uint256)", "")
|
||||
)
|
||||
|
||||
func (h *PoolSwapHandler) HandleLog(ctx context.Context, msg LogMessage, emitter emitter.Emitter) error {
|
||||
if msg.Log.Topics[0] == poolSwapTopicHash {
|
||||
var (
|
||||
initiator common.Address
|
||||
tokenIn common.Address
|
||||
tokenOut common.Address
|
||||
amountIn big.Int
|
||||
amountOut big.Int
|
||||
fee big.Int
|
||||
)
|
||||
|
||||
if err := poolSwapEvent.DecodeArgs(
|
||||
msg.Log,
|
||||
&initiator,
|
||||
&tokenIn,
|
||||
&tokenOut,
|
||||
&amountIn,
|
||||
&amountOut,
|
||||
&fee,
|
||||
); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
poolSwapEvent := Event{
|
||||
Block: msg.Log.BlockNumber,
|
||||
ContractAddress: msg.Log.Address.Hex(),
|
||||
Success: true,
|
||||
Timestamp: msg.BlockTime,
|
||||
TxHash: msg.Log.TxHash.Hex(),
|
||||
TxType: "POOL_SWAP",
|
||||
Payload: map[string]any{
|
||||
"initiator": initiator.Hex(),
|
||||
"tokenIn": tokenIn.Hex(),
|
||||
"tokenOut": tokenOut.Hex(),
|
||||
"amountIn": amountIn.String(),
|
||||
"amountOut": amountOut.String(),
|
||||
"fee": fee.String(),
|
||||
},
|
||||
}
|
||||
|
||||
return emitter.Emit(ctx, poolSwapEvent)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (h *PoolSwapHandler) HandleRevert(ctx context.Context, msg RevertMessage, emitter emitter.Emitter) error {
|
||||
if len(msg.InputData) < 8 {
|
||||
return nil
|
||||
}
|
||||
|
||||
switch msg.InputData[:8] {
|
||||
case "d9caed12":
|
||||
var (
|
||||
tokenOut common.Address
|
||||
tokenIn common.Address
|
||||
amountIn big.Int
|
||||
)
|
||||
|
||||
if err := poolSwapSig.DecodeArgs(w3.B(msg.InputData), &tokenOut, &tokenIn, &amountIn); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
poolSwapEvent := Event{
|
||||
Block: msg.Block,
|
||||
ContractAddress: msg.ContractAddress,
|
||||
Success: false,
|
||||
Timestamp: msg.Timestamp,
|
||||
TxHash: msg.TxHash,
|
||||
TxType: "POOL_SWAP",
|
||||
Payload: map[string]any{
|
||||
"revertReason": msg.RevertReason,
|
||||
"initiator": msg.From,
|
||||
"tokenIn": tokenIn.Hex(),
|
||||
"tokenOut": tokenOut.Hex(),
|
||||
"amountIn": amountIn.String(),
|
||||
"amountOut": "0",
|
||||
"fee": "0",
|
||||
},
|
||||
}
|
||||
|
||||
return emitter.Emit(ctx, poolSwapEvent)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
87
internal/handler/seal.go
Normal file
87
internal/handler/seal.go
Normal file
@ -0,0 +1,87 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"context"
|
||||
"math/big"
|
||||
|
||||
"github.com/celo-org/celo-blockchain/common"
|
||||
"github.com/grassrootseconomics/celo-tracker/internal/emitter"
|
||||
"github.com/grassrootseconomics/w3-celo"
|
||||
)
|
||||
|
||||
type (
|
||||
SealHandler struct {
|
||||
topicHash common.Hash
|
||||
event *w3.Event
|
||||
}
|
||||
)
|
||||
|
||||
var (
|
||||
sealTopicHash = w3.H("0x6b7e2e653f93b645d4ed7292d6429f96637084363e477c8aaea1a43ed13c284e")
|
||||
sealEvent = w3.MustNewEvent("SealStateChange(bool indexed _final, uint256 _sealState)")
|
||||
sealToSig = w3.MustNewFunc("seal(uint256)", "uint256")
|
||||
)
|
||||
|
||||
func (h *SealHandler) HandleLog(ctx context.Context, msg LogMessage, emitter emitter.Emitter) error {
|
||||
if msg.Log.Topics[0] == sealTopicHash {
|
||||
var (
|
||||
final bool
|
||||
sealState big.Int
|
||||
)
|
||||
|
||||
if err := sealEvent.DecodeArgs(msg.Log, &final, &sealState); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
sealEvent := Event{
|
||||
Block: msg.Log.BlockNumber,
|
||||
ContractAddress: msg.Log.Address.Hex(),
|
||||
Success: true,
|
||||
Timestamp: msg.BlockTime,
|
||||
TxHash: msg.Log.TxHash.Hex(),
|
||||
TxType: "SEAL_STATE_CHANGE",
|
||||
Payload: map[string]any{
|
||||
"final": final,
|
||||
"sealState": sealState.String(),
|
||||
},
|
||||
}
|
||||
|
||||
return emitter.Emit(ctx, sealEvent)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (h *SealHandler) HandleRevert(ctx context.Context, msg RevertMessage, emitter emitter.Emitter) error {
|
||||
if len(msg.InputData) < 8 {
|
||||
return nil
|
||||
}
|
||||
|
||||
switch msg.InputData[:8] {
|
||||
case "86fe212d":
|
||||
var (
|
||||
sealState big.Int
|
||||
)
|
||||
|
||||
if err := sealToSig.DecodeArgs(w3.B(msg.InputData), &sealState); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
sealEvent := Event{
|
||||
Block: msg.Block,
|
||||
ContractAddress: msg.ContractAddress,
|
||||
Success: false,
|
||||
Timestamp: msg.Timestamp,
|
||||
TxHash: msg.TxHash,
|
||||
TxType: "SEAL_STATE_CHANGE",
|
||||
Payload: map[string]any{
|
||||
"revertReason": msg.RevertReason,
|
||||
"sealState": sealState.String(),
|
||||
},
|
||||
}
|
||||
|
||||
return emitter.Emit(ctx, sealEvent)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
88
internal/handler/token_burn.go
Normal file
88
internal/handler/token_burn.go
Normal file
@ -0,0 +1,88 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"context"
|
||||
"math/big"
|
||||
|
||||
"github.com/celo-org/celo-blockchain/common"
|
||||
"github.com/grassrootseconomics/celo-tracker/internal/emitter"
|
||||
"github.com/grassrootseconomics/w3-celo"
|
||||
)
|
||||
|
||||
type (
|
||||
BurnHandler struct {
|
||||
topicHash common.Hash
|
||||
event *w3.Event
|
||||
}
|
||||
)
|
||||
|
||||
var (
|
||||
burnTopicHash = w3.H("0xcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5")
|
||||
burnEvent = w3.MustNewEvent("Burn(address indexed _burner, uint256 _value)")
|
||||
burnToSig = w3.MustNewFunc("burn(uint256)", "bool")
|
||||
)
|
||||
|
||||
func (h *BurnHandler) HandleLog(ctx context.Context, msg LogMessage, emitter emitter.Emitter) error {
|
||||
if msg.Log.Topics[0] == burnTopicHash {
|
||||
var (
|
||||
burner common.Address
|
||||
value big.Int
|
||||
)
|
||||
|
||||
if err := burnEvent.DecodeArgs(msg.Log, &burner, &value); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
burnEvent := Event{
|
||||
Block: msg.Log.BlockNumber,
|
||||
ContractAddress: msg.Log.Address.Hex(),
|
||||
Success: true,
|
||||
Timestamp: msg.BlockTime,
|
||||
TxHash: msg.Log.TxHash.Hex(),
|
||||
TxType: "BURN",
|
||||
Payload: map[string]any{
|
||||
"burner": burner.Hex(),
|
||||
"value": value.String(),
|
||||
},
|
||||
}
|
||||
|
||||
return emitter.Emit(ctx, burnEvent)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (h *BurnHandler) HandleRevert(ctx context.Context, msg RevertMessage, emitter emitter.Emitter) error {
|
||||
if len(msg.InputData) < 8 {
|
||||
return nil
|
||||
}
|
||||
|
||||
switch msg.InputData[:8] {
|
||||
case "42966c68":
|
||||
var (
|
||||
value big.Int
|
||||
)
|
||||
|
||||
if err := burnToSig.DecodeArgs(w3.B(msg.InputData), &value); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
burnEvent := Event{
|
||||
Block: msg.Block,
|
||||
ContractAddress: msg.ContractAddress,
|
||||
Success: false,
|
||||
Timestamp: msg.Timestamp,
|
||||
TxHash: msg.TxHash,
|
||||
TxType: "BURN",
|
||||
Payload: map[string]any{
|
||||
"revertReason": msg.RevertReason,
|
||||
"burner": msg.From,
|
||||
"value": value.String(),
|
||||
},
|
||||
}
|
||||
|
||||
return emitter.Emit(ctx, burnEvent)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
92
internal/handler/token_mint.go
Normal file
92
internal/handler/token_mint.go
Normal file
@ -0,0 +1,92 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"context"
|
||||
"math/big"
|
||||
|
||||
"github.com/celo-org/celo-blockchain/common"
|
||||
"github.com/grassrootseconomics/celo-tracker/internal/emitter"
|
||||
"github.com/grassrootseconomics/w3-celo"
|
||||
)
|
||||
|
||||
type (
|
||||
MintHandler struct {
|
||||
topicHash common.Hash
|
||||
event *w3.Event
|
||||
}
|
||||
)
|
||||
|
||||
var (
|
||||
mintTopicHash = w3.H("0xab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f8")
|
||||
mintEvent = w3.MustNewEvent("Mint(address indexed _minter, address indexed _beneficiary, uint256 _value)")
|
||||
mintToSig = w3.MustNewFunc("mintTo(address, uint256)", "bool")
|
||||
)
|
||||
|
||||
func (h *MintHandler) HandleLog(ctx context.Context, msg LogMessage, emitter emitter.Emitter) error {
|
||||
if msg.Log.Topics[0] == mintTopicHash {
|
||||
var (
|
||||
minter common.Address
|
||||
to common.Address
|
||||
value big.Int
|
||||
)
|
||||
|
||||
if err := mintEvent.DecodeArgs(msg.Log, &minter, &to, &value); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
mintEvent := Event{
|
||||
Block: msg.Log.BlockNumber,
|
||||
ContractAddress: msg.Log.Address.Hex(),
|
||||
Success: true,
|
||||
Timestamp: msg.BlockTime,
|
||||
TxHash: msg.Log.TxHash.Hex(),
|
||||
TxType: "MINT",
|
||||
Payload: map[string]any{
|
||||
"minter": minter.Hex(),
|
||||
"to": to.Hex(),
|
||||
"value": value.String(),
|
||||
},
|
||||
}
|
||||
|
||||
return emitter.Emit(ctx, mintEvent)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (h *MintHandler) HandleRevert(ctx context.Context, msg RevertMessage, emitter emitter.Emitter) error {
|
||||
if len(msg.InputData) < 8 {
|
||||
return nil
|
||||
}
|
||||
|
||||
switch msg.InputData[:8] {
|
||||
case "449a52f8":
|
||||
var (
|
||||
to common.Address
|
||||
value big.Int
|
||||
)
|
||||
|
||||
if err := mintToSig.DecodeArgs(w3.B(msg.InputData), &to, &value); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
mintEvent := Event{
|
||||
Block: msg.Block,
|
||||
ContractAddress: msg.ContractAddress,
|
||||
Success: false,
|
||||
Timestamp: msg.Timestamp,
|
||||
TxHash: msg.TxHash,
|
||||
TxType: "MINT",
|
||||
Payload: map[string]any{
|
||||
"revertReason": msg.RevertReason,
|
||||
"minter": msg.From,
|
||||
"to": to.Hex(),
|
||||
"value": value.String(),
|
||||
},
|
||||
}
|
||||
|
||||
return emitter.Emit(ctx, mintEvent)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
Loading…
Reference in New Issue
Block a user