diff --git a/foundry.toml b/foundry.toml index e3381ae4..46d3e278 100644 --- a/foundry.toml +++ b/foundry.toml @@ -4,6 +4,7 @@ out = 'out' libs = ['lib'] solc = "0.8.27" solc-version = "0.8.27" +evm_version = "paris" via_ir = true use_literal_content = true diff --git a/src/tokens/ERC1155/presets/pack/ERC1155Pack.sol b/src/tokens/ERC1155/presets/pack/ERC1155Pack.sol index a3dcde6b..9c5586a5 100644 --- a/src/tokens/ERC1155/presets/pack/ERC1155Pack.sol +++ b/src/tokens/ERC1155/presets/pack/ERC1155Pack.sol @@ -6,7 +6,7 @@ import { ERC1155Items } from "../items/ERC1155Items.sol"; import { IERC1155ItemsFunctions } from "../items/IERC1155Items.sol"; import { IERC1155Pack } from "./IERC1155Pack.sol"; -import { MerkleProof } from "openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol"; +import { MerkleProofLib } from "solady/utils/MerkleProofLib.sol"; contract ERC1155Pack is ERC1155Items, IERC1155Pack { @@ -59,9 +59,6 @@ contract ERC1155Pack is ERC1155Items, IERC1155Pack { if (_commitments[packId][msg.sender] != 0) { revert PendingReveal(); } - if (balanceOf(msg.sender, packId) == 0) { - revert NoBalance(); - } _burn(msg.sender, packId, 1); uint256 revealAfterBlock = block.number + 1; _commitments[packId][msg.sender] = revealAfterBlock; @@ -79,7 +76,7 @@ contract ERC1155Pack is ERC1155Items, IERC1155Pack { (uint256 randomIndex, uint256 revealIdx) = _getRevealIdx(user, packId); bytes32 leaf = keccak256(abi.encode(revealIdx, packContent)); - if (!MerkleProof.verify(proof, merkleRoot[packId], leaf)) { + if (!MerkleProofLib.verify(proof, merkleRoot[packId], leaf)) { revert InvalidProof(); } @@ -106,10 +103,11 @@ contract ERC1155Pack is ERC1155Items, IERC1155Pack { /// @inheritdoc IERC1155Pack function refundPack(address user, uint256 packId) external { - if (_commitments[packId][user] == 0) { + uint256 commitment = _commitments[packId][user]; + if (commitment == 0) { revert NoCommit(); } - if (uint256(blockhash(_commitments[packId][user])) != 0 || block.number <= _commitments[packId][user]) { + if (uint256(blockhash(commitment)) != 0 || block.number <= commitment) { revert PendingReveal(); } delete _commitments[packId][user]; @@ -127,15 +125,15 @@ contract ERC1155Pack is ERC1155Items, IERC1155Pack { revert AllPacksOpened(); } - bytes32 blockHash = blockhash(_commitments[packId][user]); + uint256 commitment = _commitments[packId][user]; + if (commitment == 0) { + revert NoCommit(); + } + bytes32 blockHash = blockhash(commitment); if (uint256(blockHash) == 0) { revert InvalidCommit(); } - if (_commitments[packId][user] == 0) { - revert NoCommit(); - } - randomIdx = uint256(keccak256(abi.encode(blockHash, user))) % remainingSupply[packId]; revealIdx = _getIndexOrDefault(randomIdx, packId); return (randomIdx, revealIdx); diff --git a/src/tokens/ERC1155/presets/pack/IERC1155Pack.sol b/src/tokens/ERC1155/presets/pack/IERC1155Pack.sol index b11946cd..4ce780bf 100644 --- a/src/tokens/ERC1155/presets/pack/IERC1155Pack.sol +++ b/src/tokens/ERC1155/presets/pack/IERC1155Pack.sol @@ -25,11 +25,6 @@ interface IERC1155Pack { */ error NoCommit(); - /** - * No balance. - */ - error NoBalance(); - /** * Invalid proof. */ diff --git a/test/tokens/ERC1155/presets/ERC1155Pack.t.sol b/test/tokens/ERC1155/presets/ERC1155Pack.t.sol index c54c98de..07722881 100644 --- a/test/tokens/ERC1155/presets/ERC1155Pack.t.sol +++ b/test/tokens/ERC1155/presets/ERC1155Pack.t.sol @@ -18,6 +18,8 @@ import { IERC165 } from "openzeppelin-contracts/contracts/utils/introspection/IE import { ISignalsImplicitMode } from "signals-implicit-mode/src/helper/SignalsImplicitMode.sol"; +import { ERC1155 } from "solady/tokens/ERC1155.sol"; + contract ERC1155PackHack is ERC1155Pack { function setAllExceptOneClaimed( @@ -218,7 +220,7 @@ contract ERC1155PackTest is TestHelper, IERC1155ItemsSignals { ) public { assumeSafeAddress(user); vm.prank(user); - vm.expectRevert(IERC1155Pack.NoBalance.selector); + vm.expectRevert(ERC1155.InsufficientBalance.selector); pack.commit(0); }