Added rule singleTokenBurnBurnBatchEquivalence (passing)

pull/3478/head
Thomas Adams 3 years ago
parent f74e316422
commit 38495a5026
  1. 26
      certora/specs/ERC1155Burnable.spec

@ -77,6 +77,32 @@ rule sequentialBatchBurnsEquivalentToSingleBurnBatchOfSum { // TODO implement ru
"just a placeholder that should never show up";
}
/// The result of burning a single token must be equivalent whether done via
/// burn or burnBatch.
rule singleTokenBurnBurnBatchEquivalence {
storage beforeBurn = lastStorage;
env e;
address holder;
uint256 token; uint256 burnAmount;
uint256[] tokens; uint256[] burnAmounts;
mathint startingBalance = balanceOf(holder, token);
require tokens.length == 1; require burnAmounts.length == 1;
require tokens[0] == token; require burnAmounts[0] == burnAmount;
// burning via burn
burn(e, holder, token, burnAmount) at beforeBurn;
mathint burnBalanceChange = startingBalance - balanceOf(holder, token);
// burning via burnBatch
burnBatch(e, holder, tokens, burnAmounts) at beforeBurn;
mathint burnBatchBalanceChange = startingBalance - balanceOf(holder, token);
assert burnBalanceChange == burnBatchBalanceChange,
"Burning a single token via burn or burnBatch must be equivalent";
}
/// This rule should always fail.
rule sanity {
method f; env e; calldataarg args;

Loading…
Cancel
Save