Пример #1
0
        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());
        }