@@ -596,7 +596,7 @@ func (c *Client) handleRollForward(msgGeneric protocol.Message) error {
596
596
}
597
597
}()
598
598
if firstBlockChan == nil &&
599
- (c .config == nil || c .config .RollForwardFunc == nil ) {
599
+ (c .config == nil || ( c .config .RollForwardFunc == nil && c . config . RollForwardRawFunc == nil ) ) {
600
600
return fmt .Errorf (
601
601
"received chain-sync RollForward message but no callback function is defined" ,
602
602
)
@@ -607,26 +607,21 @@ func (c *Client) handleRollForward(msgGeneric protocol.Message) error {
607
607
c .sendCurrentTip (msg .Tip )
608
608
609
609
var blockHeader ledger.BlockHeader
610
+ var blockHeaderBytes []byte
610
611
var blockType uint
611
612
blockEra := msg .WrappedHeader .Era
612
613
613
614
switch blockEra {
614
615
case ledger .BlockHeaderTypeByron :
615
616
blockType = msg .WrappedHeader .ByronType ()
616
- var err error
617
- blockHeader , err = ledger .NewBlockHeaderFromCbor (
618
- blockType ,
619
- msg .WrappedHeader .HeaderCbor (),
620
- )
621
- if err != nil {
622
- if firstBlockChan != nil {
623
- firstBlockChan <- clientPointResult {error : err }
624
- }
625
- return err
626
- }
617
+ blockHeaderBytes = msg .WrappedHeader .HeaderCbor ()
627
618
default :
628
619
// Map block header type to block type
629
620
blockType = ledger .BlockHeaderToBlockTypeMap [blockEra ]
621
+ blockHeaderBytes = msg .WrappedHeader .HeaderCbor ()
622
+ }
623
+ if firstBlockChan != nil || c .config .RollForwardFunc != nil {
624
+ // Decode header
630
625
var err error
631
626
blockHeader , err = ledger .NewBlockHeaderFromCbor (
632
627
blockType ,
@@ -650,35 +645,63 @@ func (c *Client) handleRollForward(msgGeneric protocol.Message) error {
650
645
return nil
651
646
}
652
647
// Call the user callback function
653
- callbackErr = c .config .RollForwardFunc (
654
- c .callbackContext ,
655
- blockType ,
656
- blockHeader ,
657
- msg .Tip ,
658
- )
648
+ if c .config .RollForwardRawFunc != nil {
649
+ callbackErr = c .config .RollForwardRawFunc (
650
+ c .callbackContext ,
651
+ blockType ,
652
+ blockHeaderBytes ,
653
+ msg .Tip ,
654
+ )
655
+ } else {
656
+ callbackErr = c .config .RollForwardFunc (
657
+ c .callbackContext ,
658
+ blockType ,
659
+ blockHeader ,
660
+ msg .Tip ,
661
+ )
662
+ }
659
663
} else {
660
664
msg := msgGeneric .(* MsgRollForwardNtC )
661
665
c .sendCurrentTip (msg .Tip )
662
666
663
- blk , err := ledger .NewBlockFromCbor (msg .BlockType (), msg .BlockCbor ())
664
- if err != nil {
665
- if firstBlockChan != nil {
666
- firstBlockChan <- clientPointResult {error : err }
667
+ var block ledger.Block
668
+
669
+ if firstBlockChan != nil || c .config .RollForwardFunc != nil {
670
+ var err error
671
+ block , err = ledger .NewBlockFromCbor (msg .BlockType (), msg .BlockCbor ())
672
+ if err != nil {
673
+ if firstBlockChan != nil {
674
+ firstBlockChan <- clientPointResult {error : err }
675
+ }
676
+ return err
667
677
}
668
- return err
669
678
}
670
679
if firstBlockChan != nil {
671
- blockHash , err := hex .DecodeString (blk .Hash ())
680
+ blockHash , err := hex .DecodeString (block .Hash ())
672
681
if err != nil {
673
682
firstBlockChan <- clientPointResult {error : err }
674
683
return err
675
684
}
676
- point := common .NewPoint (blk .SlotNumber (), blockHash )
685
+ point := common .NewPoint (block .SlotNumber (), blockHash )
677
686
firstBlockChan <- clientPointResult {tip : msg .Tip , point : point }
678
687
return nil
679
688
}
680
689
// Call the user callback function
681
- callbackErr = c .config .RollForwardFunc (c .callbackContext , msg .BlockType (), blk , msg .Tip )
690
+ if c .config .RollForwardRawFunc != nil {
691
+ callbackErr = c .config .RollForwardRawFunc (
692
+ c .callbackContext ,
693
+ msg .BlockType (),
694
+ msg .BlockCbor (),
695
+ msg .Tip ,
696
+ )
697
+ } else {
698
+ callbackErr = c .config .RollForwardFunc (
699
+ c .callbackContext ,
700
+ msg .BlockType (),
701
+ block ,
702
+ msg .Tip ,
703
+ )
704
+ }
682
705
}
683
706
if callbackErr != nil {
684
707
if callbackErr == StopSyncProcessError {
0 commit comments