mirror of
				https://github.com/grassrootseconomics/eth-tracker.git
				synced 2025-11-04 02:21:20 +01:00 
			
		
		
		
	feat: add limit set handler
This commit is contained in:
		
							parent
							
								
									b8870532d1
								
							
						
					
					
						commit
						3dcd3ac2c1
					
				@ -27,6 +27,7 @@ func bootstrapEventRouter(cacheProvider cache.Cache, pubCB router.Callback) *rou
 | 
			
		||||
	router.RegisterLogRoute(w3.H("0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"), handler.HandleTokenTransferLog(handlerContainer))
 | 
			
		||||
	router.RegisterLogRoute(w3.H("0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925"), handler.HandleTokenApproveLog(handlerContainer))
 | 
			
		||||
	router.RegisterLogRoute(w3.H("0x5f7542858008eeb041631f30e6109ae94b83a58e9a58261dd2c42c508850f939"), handler.HandleTokenTransferFromLog(handlerContainer))
 | 
			
		||||
	router.RegisterLogRoute(w3.H("0x8aa6856e3197c997992720c057a925dff13f6893a75f1a7228a2d4eafe117b84"), handler.HandleLimitSetLog(handlerContainer))
 | 
			
		||||
	router.RegisterLogRoute(w3.H("0x06526a30af2ff868c2686df12e95844d8ae300416bbec5d5ccc2d2f4afdb17a0"), handler.HandleQuoterUpdatedLog())
 | 
			
		||||
 | 
			
		||||
	router.RegisterInputDataRoute("63e4bff4", handler.HandleFaucetGiveInputData())
 | 
			
		||||
@ -45,6 +46,7 @@ func bootstrapEventRouter(cacheProvider cache.Cache, pubCB router.Callback) *rou
 | 
			
		||||
	router.RegisterInputDataRoute("a9059cbb", handler.HandleTokenTransferInputData(handlerContainer))
 | 
			
		||||
	router.RegisterInputDataRoute("23b872dd", handler.HandleTokenTransferInputData(handlerContainer))
 | 
			
		||||
	router.RegisterInputDataRoute("095ea7b3", handler.HandleTokenApproveInputData(handlerContainer))
 | 
			
		||||
	router.RegisterInputDataRoute("bdd55440", handler.HandleLimitSetInputData(handlerContainer))
 | 
			
		||||
	router.RegisterInputDataRoute("f912c64b", handler.HandleQuoterUpdatedInputData())
 | 
			
		||||
 | 
			
		||||
	return router
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										95
									
								
								internal/handler/limit_set.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										95
									
								
								internal/handler/limit_set.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,95 @@
 | 
			
		||||
package handler
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"math/big"
 | 
			
		||||
 | 
			
		||||
	"github.com/ethereum/go-ethereum/common"
 | 
			
		||||
	"github.com/grassrootseconomics/eth-tracker/pkg/event"
 | 
			
		||||
	"github.com/grassrootseconomics/eth-tracker/pkg/router"
 | 
			
		||||
	"github.com/lmittmann/w3"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const limitSetEventName = "LIMIT_SET"
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	limitSetEvent = w3.MustNewEvent("LimitSet(address indexed token, address indexed holder, uint256 value)")
 | 
			
		||||
	limitSetSig   = w3.MustNewFunc("setLimitFor(address, address, uint256)", "")
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func HandleLimitSetLog(hc *HandlerContainer) router.LogHandlerFunc {
 | 
			
		||||
	return func(ctx context.Context, lp router.LogPayload, c router.Callback) error {
 | 
			
		||||
		var (
 | 
			
		||||
			token  common.Address
 | 
			
		||||
			holder common.Address
 | 
			
		||||
			value  big.Int
 | 
			
		||||
		)
 | 
			
		||||
 | 
			
		||||
		if err := limitSetEvent.DecodeArgs(lp.Log, &token, &holder, &value); err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		proceed, err := hc.checkWithinNetwork(ctx, lp.Log.Address.Hex(), token.Hex(), holder.Hex())
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
		if !proceed {
 | 
			
		||||
			return nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		limitSetEvent := event.Event{
 | 
			
		||||
			Index:           lp.Log.Index,
 | 
			
		||||
			Block:           lp.Log.BlockNumber,
 | 
			
		||||
			ContractAddress: lp.Log.Address.Hex(),
 | 
			
		||||
			Success:         true,
 | 
			
		||||
			Timestamp:       lp.Timestamp,
 | 
			
		||||
			TxHash:          lp.Log.TxHash.Hex(),
 | 
			
		||||
			TxType:          limitSetEventName,
 | 
			
		||||
			Payload: map[string]any{
 | 
			
		||||
				"token":  token.Hex(),
 | 
			
		||||
				"holder": holder.Hex(),
 | 
			
		||||
				"value":  value.String(),
 | 
			
		||||
			},
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return c(ctx, limitSetEvent)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func HandleLimitSetInputData(hc *HandlerContainer) router.InputDataHandlerFunc {
 | 
			
		||||
	return func(ctx context.Context, idp router.InputDataPayload, c router.Callback) error {
 | 
			
		||||
		var (
 | 
			
		||||
			token  common.Address
 | 
			
		||||
			holder common.Address
 | 
			
		||||
			value  big.Int
 | 
			
		||||
		)
 | 
			
		||||
 | 
			
		||||
		if err := limitSetSig.DecodeArgs(w3.B(idp.InputData), &token, &holder, &value); err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		proceed, err := hc.checkWithinNetwork(ctx, idp.ContractAddress, token.Hex(), holder.Hex())
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
		if !proceed {
 | 
			
		||||
			return nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		limitSetEvent := event.Event{
 | 
			
		||||
			Block:           idp.Block,
 | 
			
		||||
			ContractAddress: idp.ContractAddress,
 | 
			
		||||
			Success:         false,
 | 
			
		||||
			Timestamp:       idp.Timestamp,
 | 
			
		||||
			TxHash:          idp.TxHash,
 | 
			
		||||
			TxType:          limitSetEventName,
 | 
			
		||||
			Payload: map[string]any{
 | 
			
		||||
				"token":  token.Hex(),
 | 
			
		||||
				"holder": holder.Hex(),
 | 
			
		||||
				"value":  value.String(),
 | 
			
		||||
			},
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return c(ctx, limitSetEvent)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user