Skip to content

Commit 8cb2bdb

Browse files
authored
Merge pull request #556 from NethermindEth/rc7fix
fix for rc7 corrupted receipts db
2 parents 7bb1e10 + b019e87 commit 8cb2bdb

File tree

6 files changed

+15
-5
lines changed

6 files changed

+15
-5
lines changed

src/Nethermind/Nethermind.Blockchain.Test/IntegrationTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public async Task Can_process_mined_blocks()
6666
MemDb receiptsDb = new MemDb();
6767
MemDb traceDb = new MemDb();
6868
TxPool txPool = new TxPool(NullTxStorage.Instance, Timestamp.Default, ecdsa, specProvider, new TxPoolConfig(), logManager);
69-
IReceiptStorage receiptStorage = new PersistentReceiptStorage(receiptsDb, specProvider, logManager);
69+
IReceiptStorage receiptStorage = new PersistentReceiptStorage(receiptsDb, NullDb.Instance, specProvider, logManager);
7070
BlockTree blockTree = new BlockTree(new MemDb(), new MemDb(), new MemDb(), specProvider, txPool, logManager);
7171
Timestamp timestamp = new Timestamp();
7272
DifficultyCalculator difficultyCalculator = new DifficultyCalculator(specProvider);

src/Nethermind/Nethermind.Blockchain.Test/ReceiptStorageTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public void should_add_and_fetch_receipt_from_in_memory_storage()
4747

4848
[Test]
4949
public void should_add_and_fetch_receipt_from_persistent_storage()
50-
=> TestAddAndGetReceipt(new PersistentReceiptStorage(new MemDb(), _specProvider, LimboLogs.Instance));
50+
=> TestAddAndGetReceipt(new PersistentReceiptStorage(new MemDb(), NullDb.Instance, _specProvider, LimboLogs.Instance));
5151

5252
private void TestAddAndGetReceipt(IReceiptStorage storage)
5353
{

src/Nethermind/Nethermind.Blockchain/Receipts/PersistentReceiptStorage.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,15 @@ namespace Nethermind.Blockchain.Receipts
2929
public class PersistentReceiptStorage : IReceiptStorage
3030
{
3131
private readonly IDb _database;
32+
private readonly IDb _headersFixDb;
3233
private readonly ISpecProvider _specProvider;
3334
private readonly ILogger _logger;
3435

35-
public PersistentReceiptStorage(IDb database, ISpecProvider specProvider, ILogManager logManager)
36+
public PersistentReceiptStorage(IDb receiptsDb, IDb headersFixDb, ISpecProvider specProvider, ILogManager logManager)
3637
{
3738
_logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
38-
_database = database ?? throw new ArgumentNullException(nameof(database));
39+
_database = receiptsDb ?? throw new ArgumentNullException(nameof(receiptsDb));
40+
_headersFixDb = headersFixDb ?? throw new ArgumentNullException(nameof(headersFixDb));
3941
_specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
4042

4143
byte[] lowestBytes = _database.Get(Keccak.Zero);
@@ -45,6 +47,10 @@ public PersistentReceiptStorage(IDb database, ISpecProvider specProvider, ILogMa
4547
public TxReceipt Find(Keccak hash)
4648
{
4749
var receiptData = _database.Get(hash);
50+
if (receiptData == null)
51+
{
52+
receiptData = _headersFixDb.Get(hash);
53+
}
4854

4955
return receiptData == null
5056
? null

src/Nethermind/Nethermind.Runner/Config/IInitConfig.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,5 +93,7 @@ public interface IInitConfig : IConfig
9393

9494
[ConfigItem(Description = "If set to 'false' then transaction receipts will not be stored in the database.", DefaultValue = "true")]
9595
bool StoreReceipts { get; set; }
96+
97+
bool EnableRc7Fix { get; set; }
9698
}
9799
}

src/Nethermind/Nethermind.Runner/Config/InitConfig.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,5 +45,6 @@ public class InitConfig : IInitConfig
4545
public bool StoreTraces { get; set; } = false;
4646
public bool StoreReceipts { get; set; } = false;
4747

48+
public bool EnableRc7Fix { get; set; } = false;
4849
}
4950
}

src/Nethermind/Nethermind.Runner/Runners/EthereumRunner.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,8 @@ private async Task InitBlockchain()
422422
_ethereumEcdsa,
423423
_specProvider,
424424
_txPoolConfig, _logManager);
425-
_receiptStorage = new PersistentReceiptStorage(_dbProvider.ReceiptsDb, _specProvider, _logManager);
425+
var _rc7FixDb = _initConfig.EnableRc7Fix ? _dbProvider.HeadersDb : NullDb.Instance;
426+
_receiptStorage = new PersistentReceiptStorage(_dbProvider.ReceiptsDb, _rc7FixDb, _specProvider, _logManager);
426427

427428
// IDbProvider debugRecorder = new RocksDbProvider(Path.Combine(_dbBasePath, "debug"), dbConfig);
428429
// _dbProvider = new RpcDbProvider(_jsonSerializer, new BasicJsonRpcClient(KnownRpcUris.NethVm1, _jsonSerializer, _logManager), _logManager, debugRecorder);

0 commit comments

Comments
 (0)