@@ -114,29 +114,16 @@ func (tzkt *TzKT) Blocks() <-chan BlockMessage {
114114func (tzkt * TzKT ) handleBlockMessage (msg events.Message ) error {
115115 switch msg .Type {
116116 case events .MessageTypeData :
117- data , ok := msg .Body .([]interface {})
118- if ! ok {
119- return errors .Wrapf (ErrInvalidBlockType , "%v" , msg .Body )
120- }
121- if len (data ) == 0 {
117+ if msg .Body == nil {
122118 return nil
123119 }
124- blockData , ok := data [0 ].(map [string ]interface {})
125- if ! ok {
126- return errors .Wrapf (ErrInvalidBlockType , "%v" , data [0 ])
127- }
128- hash , err := getString (blockData , "hash" )
129- if err != nil {
130- return err
131- }
132- level , err := getUint64 (blockData , "level" )
133- if err != nil {
134- return err
135- }
136- tzkt .blocks <- BlockMessage {
137- Hash : hash ,
138- Level : level ,
139- Type : msg .Type ,
120+ blocks := msg .Body .([]events.Block )
121+ for i := range blocks {
122+ tzkt .blocks <- BlockMessage {
123+ Hash : blocks [i ].Hash ,
124+ Level : blocks [i ].Level ,
125+ Type : msg .Type ,
126+ }
140127 }
141128 case events .MessageTypeState , events .MessageTypeReorg :
142129 tzkt .blocks <- BlockMessage {
@@ -153,7 +140,11 @@ func (tzkt *TzKT) handleBlockMessage(msg events.Message) error {
153140func (tzkt * TzKT ) handleOperationMessage (msg events.Message ) error {
154141 switch msg .Type {
155142 case events .MessageTypeData :
156- return tzkt .handleUpdateMessage (msg )
143+ if msg .Body == nil {
144+ return nil
145+ }
146+ operations := msg .Body .([]interface {})
147+ return tzkt .handleUpdateMessage (operations )
157148 case events .MessageTypeState , events .MessageTypeReorg :
158149 default :
159150 return errors .Wrapf (ErrUnknownMessageType , "%d" , msg .Type )
@@ -162,19 +153,11 @@ func (tzkt *TzKT) handleOperationMessage(msg events.Message) error {
162153 return nil
163154}
164155
165- func (tzkt * TzKT ) handleUpdateMessage (msg events. Message ) error {
156+ func (tzkt * TzKT ) handleUpdateMessage (operations [] interface {} ) error {
166157 message := newOperationMessage ()
167158
168- body , ok := msg .Body .([]interface {})
169- if ! ok {
170- return errors .Wrapf (ErrInvalidBodyType , "%T" , msg .Body )
171- }
172- for i := range body {
173- operation , ok := body [i ].(map [string ]interface {})
174- if ! ok {
175- return errors .Wrapf (ErrInvalidOperationType , "%T" , body [i ])
176- }
177- if err := tzkt .processOperation (operation , & message ); err != nil {
159+ for i := range operations {
160+ if err := tzkt .processOperation (operations [i ], & message ); err != nil {
178161 return err
179162 }
180163 }
@@ -184,33 +167,81 @@ func (tzkt *TzKT) handleUpdateMessage(msg events.Message) error {
184167 return nil
185168}
186169
187- func getString (data map [string ]interface {}, key string ) (string , error ) {
188- value , ok := data [key ]
189- if ! ok {
190- return "" , errors .Wrapf (ErrOperationDoesNotContain , "field=%s data=%v" , key , data )
191- }
192- s , ok := value .(string )
193- if ! ok {
194- return "" , errors .Wrapf (ErrInvalidFieldType , "field=%s expected_type=string type=%T data=%v" , key , value , value )
195- }
196- return s , nil
197- }
170+ func (tzkt * TzKT ) getAPIOperation (data interface {}) (api.Operation , error ) {
171+ switch operation := data .(type ) {
172+
173+ case * events.Delegation :
174+ tx := api.Operation {
175+ ID : operation .ID ,
176+ Level : operation .Level ,
177+ Hash : operation .Hash ,
178+ Kind : toNodeKinds [operation .Type ],
179+ Block : operation .Block ,
180+ GasUsed : & operation .GasUsed ,
181+ BakerFee : & operation .BakerFee ,
182+ }
183+ if operation .NewDelegate != nil {
184+ tx .Delegate = & api.Address {
185+ Alias : operation .NewDelegate .Alias ,
186+ Address : operation .NewDelegate .Address ,
187+ }
188+ }
189+ return tx , nil
190+
191+ case * events.Origination :
192+ tx := api.Operation {
193+ ID : operation .ID ,
194+ Level : operation .Level ,
195+ Hash : operation .Hash ,
196+ Kind : toNodeKinds [operation .Type ],
197+ Block : operation .Block ,
198+ GasUsed : & operation .GasUsed ,
199+ BakerFee : & operation .BakerFee ,
200+ }
201+ return tx , nil
202+
203+ case * events.Reveal :
204+ tx := api.Operation {
205+ ID : operation .ID ,
206+ Level : operation .Level ,
207+ Hash : operation .Hash ,
208+ Kind : toNodeKinds [operation .Type ],
209+ Block : operation .Block ,
210+ GasUsed : & operation .GasUsed ,
211+ BakerFee : & operation .BakerFee ,
212+ }
213+ return tx , nil
214+
215+ case * events.Transaction :
216+ tx := api.Operation {
217+ ID : operation .ID ,
218+ Level : operation .Level ,
219+ Hash : operation .Hash ,
220+ Kind : toNodeKinds [operation .Type ],
221+ Block : operation .Block ,
222+ GasUsed : & operation .GasUsed ,
223+ BakerFee : & operation .BakerFee ,
224+ }
225+ if operation .Parameter != nil {
226+ tx .Parameters = & api.Parameters {
227+ Entrypoint : operation .Parameter .Entrypoint ,
228+ Value : operation .Parameter .Value ,
229+ }
230+ }
231+ return tx , nil
198232
199- func getUint64 (data map [string ]interface {}, key string ) (uint64 , error ) {
200- value , ok := data [key ]
201- if ! ok {
202- return 0 , errors .Wrapf (ErrOperationDoesNotContain , "field=%s data=%v" , key , data )
203- }
204- f , ok := value .(float64 )
205- if ! ok {
206- return 0 , errors .Wrapf (ErrInvalidFieldType , "field=%s expected_type=float64 type=%T data=%v" , key , value , value )
233+ case map [string ]interface {}:
234+ var general api.Operation
235+ err := mapstructure .Decode (data , & general )
236+ return general , err
237+ default :
238+ return api.Operation {}, errors .Wrapf (ErrInvalidOperationType , "%T" , data )
207239 }
208- return uint64 (f ), nil
209240}
210241
211- func (tzkt * TzKT ) processOperation (data map [ string ] interface {}, message * OperationMessage ) error {
212- var operation api. Operation
213- if err := mapstructure . Decode ( data , & operation ); err != nil {
242+ func (tzkt * TzKT ) processOperation (data interface {}, message * OperationMessage ) error {
243+ operation , err := tzkt . getAPIOperation ( data )
244+ if err != nil {
214245 return err
215246 }
216247 operation .Kind = toNodeKinds [operation .Kind ]
0 commit comments