Skip to content

Commit

Permalink
fail on low
Browse files Browse the repository at this point in the history
  • Loading branch information
gpylypchuk committed Feb 19, 2024
1 parent c668e70 commit 39b4296
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 2 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/slither.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ jobs:
with:
node-version: 16
sarif: results.sarif
fail-on: all
fail-on: low
target: 'src/'

- name: Upload SARIF file
Expand Down
4 changes: 4 additions & 0 deletions slither.config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"filter_paths": "openzeppelin",
"detectors_to_exclude": "timestamp"
}
1 change: 1 addition & 0 deletions src/NftReward.sol
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,7 @@ contract NftReward is Initializable, ERC721Upgradeable, OwnableUpgradeable, Paus
// validation
require(recover(mintRequest, signature) == minter, "Signed not by minter");
require(msg.sender == mintRequest.beneficiary, "Not eligible");
require(block.timestamp < mintRequest.deadline, "Signature expired");
require(!nonceRedeemed[mintRequest.nonce], "Already minted");
require(mintRequest.keys.length == mintRequest.values.length, "Key/value length mismatch");

Expand Down
29 changes: 28 additions & 1 deletion test/NftReward.t.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;
pragma solidity ^0.8.20;

import {Test, console} from "forge-std/Test.sol";
import {NftReward} from "../src/NftReward.sol";
Expand Down Expand Up @@ -245,6 +245,33 @@ contract NftRewardTest is Test {
nftReward.safeMint(mintRequest, signature);
}

function testSafeMint_ShouldRevert_IfSignatureExpired() public {
// prepare arbitrary data keys
bytes32[] memory keys = new bytes32[](1);
keys[0] = keccak256("GITHUB_ORGANIZATION_NAME");
// prepare arbitrary data values
string[] memory values = new string[](1);
values[0] = "ubiquity";
// prepare mint request
NftReward.MintRequest memory mintRequest = NftReward.MintRequest({
beneficiary: user1,
deadline: block.timestamp - 1, // set expired signature
keys: keys,
nonce: 1,
values: values
});
// get mint request digest which should be signed
bytes32 digest = nftReward.getMintRequestDigest(mintRequest);
// minter signs mint request digest
(uint8 v, bytes32 r, bytes32 s) = vm.sign(minterPrivateKey, digest);
// get minter's signature
bytes memory signature = abi.encodePacked(r, s, v);

vm.prank(user1);
vm.expectRevert('Signature expired');
nftReward.safeMint(mintRequest, signature);
}

function testSafeMint_ShouldRevert_IfNonceAlreadyUsed() public {
// prepare arbitrary data keys
bytes32[] memory keys = new bytes32[](1);
Expand Down

0 comments on commit 39b4296

Please sign in to comment.