public static ByteString ExtractCrossChainExtraDataFromCrossChainBlockData(this CrossChainBlockData crossChainBlockData) { if (crossChainBlockData.IsNullOrEmpty() || crossChainBlockData.SideChainBlockDataList.Count == 0) { return(ByteString.Empty); } var indexedSideChainBlockData = new IndexedSideChainBlockData { SideChainBlockDataList = { crossChainBlockData.SideChainBlockDataList } }; return(indexedSideChainBlockData.ExtractCrossChainExtraDataFromCrossChainBlockData()); }
public ByteString ExtractCrossChainExtraDataFromCrossChainBlockData(CrossChainBlockData crossChainBlockData) { if (crossChainBlockData.IsNullOrEmpty() || crossChainBlockData.SideChainBlockDataList.Count == 0) { return(ByteString.Empty); } var txRootHashList = crossChainBlockData.SideChainBlockDataList .Select(scb => scb.TransactionStatusMerkleTreeRoot).ToList(); var calculatedSideChainTransactionsRoot = BinaryMerkleTree.FromLeafNodes(txRootHashList).Root; Logger.LogInformation("Cross chain extra data generated."); return(new CrossChainExtraData { TransactionStatusMerkleTreeRoot = calculatedSideChainTransactionsRoot } .ToByteString()); }