@@ -900,91 +900,67 @@ func (sp *serverPeer) OnGetUtreexoHeader(_ *peer.Peer, msg *wire.MsgGetUtreexoHe
900
900
return
901
901
}
902
902
903
- if ! cfg .NoUtreexo {
904
- height , err := sp .server .chain .BlockHeightByHash (& msg .BlockHash )
905
- if err != nil {
906
- chanLog .Debugf ("Unable to fetch height for block hash %v: %v" ,
907
- msg .BlockHash , err )
908
- return
909
- }
910
-
911
- // If we're pruned and the requested block is beyond the point where pruned blocks
912
- // are able to serve blocks, just ignore the message.
913
- if cfg .Prune != 0 && height >= sp .server .chain .BestSnapshot ().Height - 288 {
914
- return
915
- }
916
-
917
- var blockBytes []byte
918
- err = sp .server .db .View (func (dbTx database.Tx ) error {
919
- var err error
920
- blockBytes , err = dbTx .FetchBlock (& msg .BlockHash )
921
- return err
922
- })
923
- if err != nil {
924
- chanLog .Debugf ("Unable to fetch block %v: %v" ,
925
- msg .BlockHash , err )
926
- return
927
- }
928
- var msgBlock wire.MsgBlock
929
- err = msgBlock .Deserialize (bytes .NewReader (blockBytes ))
930
- if err != nil {
931
- chanLog .Debugf ("Unable to deserialize block with hash %v: %v" ,
932
- msg .BlockHash , err )
933
- return
934
- }
935
-
936
- targets := msgBlock .UData .AccProof .Targets
903
+ height , err := sp .server .chain .BlockHeightByHash (& msg .BlockHash )
904
+ if err != nil {
905
+ chanLog .Debugf ("Unable to fetch height for block hash %v: %v" ,
906
+ msg .BlockHash , err )
907
+ return
908
+ }
937
909
938
- var blockHeader wire.MsgUtreexoHeader
939
- blockHeader .BlockHash = msg .BlockHash
940
- blockHeader .NumAdds = uint16 (len (msgBlock .UData .LeafDatas ))
941
- blockHeader .Targets = make ([]uint64 , len (targets ))
942
- copy (blockHeader .Targets , targets )
943
- sp .QueueMessage (& blockHeader , nil )
910
+ // If we're pruned and the requested block is beyond the point where pruned blocks
911
+ // are able to serve blocks, just ignore the message.
912
+ if cfg .Prune != 0 && height >= sp .server .chain .BestSnapshot ().Height - 288 {
913
+ return
914
+ }
944
915
916
+ // Fetch adds.
917
+ block , err := sp .server .chain .BlockByHash (& msg .BlockHash )
918
+ if err != nil {
919
+ chanLog .Debugf ("Unable to fetch block for block hash %v: %v" ,
920
+ msg .BlockHash , err )
921
+ return
922
+ }
923
+ adds , err := blockchain .ExtractAccumulatorAdds (block , []uint32 {})
924
+ if err != nil {
925
+ chanLog .Debugf ("Unable to extract adds for block hash %v: %v" ,
926
+ msg .BlockHash , err )
945
927
return
946
928
}
947
929
930
+ // Fetch targets.
931
+ var targets []uint64
932
+ if ! cfg .NoUtreexo {
933
+ targets = block .MsgBlock ().UData .AccProof .Targets
934
+ }
948
935
if sp .server .utreexoProofIndex != nil {
949
936
udata , err := sp .server .utreexoProofIndex .FetchUtreexoProof (& msg .BlockHash )
950
937
if err != nil {
951
938
chanLog .Debugf ("Unable to fetch utreexo proof for block hash %v: %v" ,
952
939
msg .BlockHash , err )
953
940
return
954
941
}
955
-
956
- var blockHeader wire.MsgUtreexoHeader
957
- blockHeader .BlockHash = msg .BlockHash
958
- blockHeader .NumAdds = uint16 (len (udata .LeafDatas ))
959
- blockHeader .Targets = make ([]uint64 , len (udata .AccProof .Targets ))
960
- copy (blockHeader .Targets , udata .AccProof .Targets )
961
- sp .QueueMessage (& blockHeader , nil )
962
- return
942
+ targets = udata .AccProof .Targets
963
943
}
964
-
965
944
if sp .server .flatUtreexoProofIndex != nil {
966
- height , err := sp .server .chain .BlockHeightByHash (& msg .BlockHash )
967
- if err != nil {
968
- chanLog .Debugf ("Unable to fetch height for block hash %v: %v" ,
969
- msg .BlockHash , err )
970
- return
971
- }
972
-
973
945
udata , err := sp .server .flatUtreexoProofIndex .FetchUtreexoProof (height )
974
946
if err != nil {
975
947
chanLog .Debugf ("Unable to fetch utreexo proof for block hash %v: %v" ,
976
948
msg .BlockHash , err )
977
949
return
978
950
}
951
+ targets = udata .AccProof .Targets
952
+ }
979
953
980
- var blockHeader wire.MsgUtreexoHeader
981
- blockHeader .BlockHash = msg .BlockHash
982
- blockHeader .NumAdds = uint16 (len (udata .LeafDatas ))
983
- blockHeader .Targets = make ([]uint64 , len (udata .AccProof .Targets ))
984
- copy (blockHeader .Targets , udata .AccProof .Targets )
985
- sp .QueueMessage (& blockHeader , nil )
986
- return
954
+ // Construct the utreexo header.
955
+ blockHeader := wire.MsgUtreexoHeader {
956
+ BlockHash : msg .BlockHash ,
957
+ NumAdds : uint16 (len (adds )),
958
+ Targets : make ([]uint64 , len (targets )),
987
959
}
960
+ copy (blockHeader .Targets , targets )
961
+ sp .QueueMessage (& blockHeader , nil )
962
+
963
+ return
988
964
}
989
965
990
966
// OnGetCFilters is invoked when a peer receives a getcfilters bitcoin message.
0 commit comments