From c10cdf46d890325b06d63b4aaf4bc3d228c74a8e Mon Sep 17 00:00:00 2001 From: "Alisher A. Khassanov" Date: Thu, 14 Mar 2024 11:24:42 +0500 Subject: [PATCH 1/2] Pass block number and hash to events listener --- blockchain/client.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/blockchain/client.go b/blockchain/client.go index 013262b..2521f76 100644 --- a/blockchain/client.go +++ b/blockchain/client.go @@ -13,7 +13,7 @@ import ( "github.com/cerebellum-network/cere-ddc-sdk-go/blockchain/pallets" ) -type EventsListener func(*pallets.Events) +type EventsListener func(events *pallets.Events, blockNumber types.BlockNumber, blockHash types.Hash) type Client struct { *gsrpc.SubstrateAPI @@ -77,6 +77,12 @@ func (c *Client) StartEventsListening() (func(), <-chan error, error) { case <-done: return case set := <-sub.Chan(): + header, err := c.RPC.Chain.GetHeader(set.Block) + if err != nil { + c.errsListening <- fmt.Errorf("get header: %w", err) + continue + } + for _, change := range set.Changes { if !codec.Eq(change.StorageKey, key) || !change.HasStorageData { continue @@ -89,7 +95,7 @@ func (c *Client) StartEventsListening() (func(), <-chan error, error) { } for _, callback := range c.eventsListeners { - go callback(events) + go callback(events, header.Number, set.Block) } } } From d77d31a81255b6fd1764cdfd931803311ed2c1c2 Mon Sep 17 00:00:00 2001 From: "Alisher A. Khassanov" Date: Thu, 14 Mar 2024 14:15:43 +0500 Subject: [PATCH 2/2] Skip undecodable events --- blockchain/client.go | 1 + 1 file changed, 1 insertion(+) diff --git a/blockchain/client.go b/blockchain/client.go index 2521f76..6c5fe20 100644 --- a/blockchain/client.go +++ b/blockchain/client.go @@ -92,6 +92,7 @@ func (c *Client) StartEventsListening() (func(), <-chan error, error) { err = types.EventRecordsRaw(change.StorageData).DecodeEventRecords(meta, events) if err != nil { c.errsListening <- fmt.Errorf("events decoder: %w", err) + continue } for _, callback := range c.eventsListeners {