diff --git a/contract/constants/amb.json b/contract/constants/amb.json index 39670aa..c26710a 100644 --- a/contract/constants/amb.json +++ b/contract/constants/amb.json @@ -877,6 +877,33 @@ "name": "AffirmationCompleted", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "name": "executor", + "type": "address" + }, + { + "indexed": false, + "name": "messageId", + "type": "bytes32" + }, + { + "indexed": false, + "name": "status", + "type": "bool" + } + ], + "name": "AffirmationCompleted", + "type": "event" + }, { "anonymous": false, "inputs": [ diff --git a/contract/contract.go b/contract/contract.go index 105397b..9cf6b18 100644 --- a/contract/contract.go +++ b/contract/contract.go @@ -54,13 +54,13 @@ func (c *Contract) ParseLog(log *entity.Log) (string, map[string]interface{}, er return "", nil, nil } m := make(map[string]interface{}) - err := event.Inputs.UnpackIntoMap(m, log.Data) - if err != nil { - return "", nil, err + if len(indexed) < len(event.Inputs) { + if err := event.Inputs.UnpackIntoMap(m, log.Data); err != nil { + return "", nil, fmt.Errorf("can't unpack data: %w", err) + } } - err = abi.ParseTopicsIntoMap(m, indexed, topics) - if err != nil { - return "", nil, err + if err := abi.ParseTopicsIntoMap(m, indexed, topics); err != nil { + return "", nil, fmt.Errorf("can't unpack topics: %w", err) } return event.Name, m, nil } diff --git a/monitor/monitor.go b/monitor/monitor.go index c1e05dc..bc9d0b6 100644 --- a/monitor/monitor.go +++ b/monitor/monitor.go @@ -76,7 +76,7 @@ func newContractMonitor(ctx context.Context, logger logging.Logger, repo *reposi blocksRangeChan: make(chan *BlocksRange, 10), logsChan: make(chan *LogsBatch, 200), contract: contract.NewContract(client, cfg.Address, constants.AMB), - eventHandlers: make(map[string]EventHandler, 6), + eventHandlers: make(map[string]EventHandler, 7), }, nil } @@ -95,6 +95,7 @@ func NewMonitor(ctx context.Context, logger logging.Logger, repo *repository.Rep homeMonitor.eventHandlers["SignedForUserRequest"] = handlers.HandleSignedForUserRequest homeMonitor.eventHandlers["SignedForAffirmation"] = handlers.HandleSignedForAffirmation homeMonitor.eventHandlers["AffirmationCompleted"] = handlers.HandleAffirmationCompleted + homeMonitor.eventHandlers["AffirmationCompleted0"] = handlers.HandleAffirmationCompleted homeMonitor.eventHandlers["CollectedSignatures"] = handlers.HandleCollectedSignatures foreignMonitor.eventHandlers["UserRequestForAffirmation"] = handlers.HandleUserRequestForAffirmation foreignMonitor.eventHandlers["UserRequestForAffirmation0"] = handlers.HandleLegacyUserRequestForAffirmation @@ -376,7 +377,7 @@ func (m *ContractMonitor) tryToProcessLogsBatch(ctx context.Context, logs *LogsB for _, log := range logs.Logs { event, data, err := m.contract.ParseLog(log) if err != nil { - return err + return fmt.Errorf("can't parse log: %w", err) } handle, ok := m.eventHandlers[event] if !ok {