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") + }) }) })