c, err = nft.NewContract(common.HexToAddress(contractAddr), client)
if err != nil {
return err
}
query := ethereum.FilterQuery{
FromBlock: big.NewInt(number + 1),
ToBlock: big.NewInt(toBlock),
Addresses: []common.Address{common.HexToAddress(contractAddr)},
}
vLogs, err = client.FilterLogs(context.Background(), query)
if err != nil {
return err
}
for _, vLog := range vLogs {
event, data, err := nft.ParseEventLog(_abi, c, vLog)
if err != nil {
return err
}
if event != "" {
err = OnEvent(context.Background(), event, vLog.TxHash.Hex(), vLog.Index, data)
if err != nil {
return err
}
}
}
func ParseEventLog(abiInstance abi.ABI, c *Contract, vLog types.Log) (event string, data interface{},
err error) {
switch vLog.Topics[0].Hex() {
case abiInstance.Events[EventApproval].ID.Hex():
event = EventApproval
data, err = c.ParseApproval(vLog)
return}