private void PrepareReceiptsResponse(ReceiptsSyncBatch receiptSyncBatch, LatencySyncPeerMock syncPeer, IBlockTree tree) { receiptSyncBatch.Response = new TxReceipt[receiptSyncBatch.Request.Length][]; for (int i = 0; i < receiptSyncBatch.Request.Length; i++) { Block block = tree.FindBlock(receiptSyncBatch.Request[i], false); receiptSyncBatch.Response[i] = new TxReceipt[block.Transactions.Length]; for (int j = 0; j < block.Transactions.Length; j++) { receiptSyncBatch.Response[i][j] = _remoteReceiptStorage.Find(block.Transactions[j].Hash); } } }
private void PrepareReceiptsResponse(ReceiptsSyncBatch receiptSyncBatch, LatencySyncPeerMock syncPeer, IBlockTree tree) { receiptSyncBatch.Response = new TxReceipt[receiptSyncBatch.Request.Length][]; for (int i = 0; i < receiptSyncBatch.Request.Length; i++) { Block block = tree.FindBlock(receiptSyncBatch.Request[i], BlockTreeLookupOptions.None); receiptSyncBatch.Response[i] = new TxReceipt[block.Transactions.Length]; for (int j = 0; j < block.Transactions.Length; j++) { receiptSyncBatch.Response[i][j] = _remoteReceiptStorage.Find(block.Transactions[j].Hash); if (i < 10 && j == 0 && _maliciousByInvalidReceipts.Contains(syncPeer)) { receiptSyncBatch.Response[i][j] = new TxReceipt(); receiptSyncBatch.Response[i][j].StatusCode = (byte)(1 - receiptSyncBatch.Response[i][j].StatusCode); receiptSyncBatch.Response[i][j].PostTransactionState = Keccak.Compute(receiptSyncBatch.Response[i][j].PostTransactionState?.Bytes ?? new byte[] { 1 }); } } } }
private void AssertTreeSynced(IBlockTree tree, bool bodiesSync = false, bool receiptSync = false) { Keccak nextHash = tree.Head.Hash; for (int i = 0; i < tree.Head.Number; i++) { BlockHeader header = _localBlockTree.FindHeader(nextHash, BlockTreeLookupOptions.None); Assert.NotNull(header, $"header {tree.Head.Number - i}"); if (bodiesSync) { Block expectedBlock = _localBlockTree.FindBlock(nextHash, BlockTreeLookupOptions.None); Assert.AreEqual(nextHash, expectedBlock?.Hash, $"hash difference {tree.Head.Number - i}"); if (expectedBlock != null) { Block actualBlock = tree.FindBlock(expectedBlock.Hash, BlockTreeLookupOptions.None); Rlp saved = Rlp.Encode(actualBlock); Rlp expected = Rlp.Encode(expectedBlock); Assert.AreEqual(expected, saved, $"body {tree.Head.Number - i}"); if (receiptSync) { int txIndex = 0; foreach (Transaction transaction in expectedBlock.Transactions) { Assert.NotNull(_localReceiptStorage.Find(transaction.Hash), $"receipt {expectedBlock.Number}.{txIndex}"); txIndex++; } } } } nextHash = header.ParentHash; } Assert.True(_feed.IsFinished); }