From 23887f9190a115e1f5468582694752a3a9d6818c Mon Sep 17 00:00:00 2001 From: Mark Spanbroek Date: Thu, 21 Oct 2021 10:32:29 +0200 Subject: [PATCH] Do not mark proof as missing twice --- contracts/StorageContracts.sol | 3 +++ test/StorageContracts.test.js | 10 ++++++++++ 2 files changed, 13 insertions(+) diff --git a/contracts/StorageContracts.sol b/contracts/StorageContracts.sol index 5240b74..8643b4f 100644 --- a/contracts/StorageContracts.sol +++ b/contracts/StorageContracts.sol @@ -16,6 +16,7 @@ contract StorageContracts { uint proofTimeout; // proof has to be submitted before this uint proofMarker; // indicates when a proof is required mapping(uint => bool) proofReceived; // whether proof for block was received + mapping(uint => bool) proofMissing; // whether proof for block was missing uint missingProofs; } @@ -221,6 +222,8 @@ contract StorageContracts { isProofRequired(contractId, blocknumber), "Proof was not required" ); + require(!c.proofMissing[blocknumber], "Proof already marked as missing"); + c.proofMissing[blocknumber] = true; c.missingProofs += 1; } } diff --git a/test/StorageContracts.test.js b/test/StorageContracts.test.js index 1581948..4c402f6 100644 --- a/test/StorageContracts.test.js +++ b/test/StorageContracts.test.js @@ -338,6 +338,16 @@ describe("Storage Contracts", function () { contracts.markProofAsMissing(id, blocknumber) ).to.be.revertedWith("Proof was not required") }) + + it("does not mark proof as missing twice", async function () { + await mineUntilProofIsRequired(id) + let blocknumber = await minedBlockNumber() + await mineUntilProofTimeout() + await contracts.markProofAsMissing(id, blocknumber) + await expect( + contracts.markProofAsMissing(id, blocknumber) + ).to.be.revertedWith("Proof already marked as missing") + }) }) })