diff --git a/packages/protocol/contracts/test/erc20/FreeMintERC20.sol b/packages/protocol/contracts/test/erc20/FreeMintERC20.sol index 2e4328c853..b6f0025b35 100644 --- a/packages/protocol/contracts/test/erc20/FreeMintERC20.sol +++ b/packages/protocol/contracts/test/erc20/FreeMintERC20.sol @@ -11,9 +11,18 @@ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; // An ERC20 Token with a mint function anyone can call, for free, to receive // 5 tokens. contract FreeMintERC20 is ERC20 { + error HasMinted(); + + mapping(address minter => bool hasMinted) public minters; + constructor(string memory name, string memory symbol) ERC20(name, symbol) {} function mint(address to) public { - _mint(to, 5 * (10 ** decimals())); + if (minters[msg.sender]) { + revert HasMinted(); + } + + minters[msg.sender] = true; + _mint(to, 50 * (10 ** decimals())); } } diff --git a/packages/protocol/contracts/test/erc20/MayFailFreeMintERC20.sol b/packages/protocol/contracts/test/erc20/MayFailFreeMintERC20.sol index bba5df63e8..98df1dc9f2 100644 --- a/packages/protocol/contracts/test/erc20/MayFailFreeMintERC20.sol +++ b/packages/protocol/contracts/test/erc20/MayFailFreeMintERC20.sol @@ -12,10 +12,19 @@ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; // This token has 50% of failure on transfers so we can // test the bridge's error handling. contract MayFailFreeMintERC20 is ERC20 { + error HasMinted(); + + mapping(address minter => bool hasMinted) public minters; + constructor(string memory name, string memory symbol) ERC20(name, symbol) {} function mint(address to) public { - _mint(to, 5 * (10 ** decimals())); + if (minters[msg.sender]) { + revert HasMinted(); + } + + minters[msg.sender] = true; + _mint(to, 50 * (10 ** decimals())); } function transfer(