From 6c1f3cea61f50cc0c014832b4c0cf3aaaa5617ab Mon Sep 17 00:00:00 2001 From: Udit Yadav Date: Wed, 10 Dec 2025 11:44:26 +0530 Subject: [PATCH 1/6] added erc20Supra smart contract and test cases --- .../automation_registry/src/ERC20Supra.sol | 70 ++++++ .../test/ERC20SupraTest.t.sol | 223 ++++++++++++++++++ 2 files changed, 293 insertions(+) create mode 100644 solidity/automation_registry/src/ERC20Supra.sol create mode 100644 solidity/automation_registry/test/ERC20SupraTest.t.sol diff --git a/solidity/automation_registry/src/ERC20Supra.sol b/solidity/automation_registry/src/ERC20Supra.sol new file mode 100644 index 0000000000..0ef2c9d8e1 --- /dev/null +++ b/solidity/automation_registry/src/ERC20Supra.sol @@ -0,0 +1,70 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import {ERC20Burnable} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol"; +import {ERC20Permit} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol"; +import "@openzeppelin/contracts/access/Ownable2Step.sol"; + +contract ERC20Supra is ERC20, ERC20Burnable, Ownable2Step, ERC20Permit { + + /// @notice Error thrown if user has insufficient balance. + error InsufficientBalance(); + /// @notice Error thrown if 0 is passed as amount. + error InvalidAmount(); + /// @notice Error thrown if tokens are sent to the token contract itself. + error InvalidTransfer(); + /// @notice Error thrown if low level call fails. + error TransferFailed(); + + /// @notice Emitted when native token is deposited. + /// @param account Address of the depositer. + /// @param amount Amount deposited. + event Deposit(address indexed account, uint256 indexed amount); + + /// @notice Emitted when native token is withdrawn, + /// @param account Address withdrawing. + /// @param amount Amount withdrawn. + event Withdrawal(address indexed account, uint256 indexed amount); + + constructor(address _initialOwner) + ERC20("ERC20Supra", "SUPRA") + Ownable(_initialOwner) + ERC20Permit("ERC20Supra") + {} + + /// @notice Deposit native token → Mint ERC20Supra 1:1 + function deposit() external payable { + if (msg.value == 0) revert InvalidAmount(); + _mint(msg.sender, msg.value); + + emit Deposit(msg.sender, msg.value); + } + + /// @notice Withdraw native token → Burn ERC20Supra 1:1 + /// @param _amount Amount of native tokens to withdraw. + function withdraw(uint256 _amount) external { + if (_amount == 0) revert InvalidAmount(); + if (balanceOf(msg.sender) < _amount) revert InsufficientBalance(); + + _burn(msg.sender, _amount); + emit Withdrawal(msg.sender, _amount); + + (bool sent, ) = payable(msg.sender).call{value: _amount}(""); + if (!sent) revert TransferFailed(); + } + + /// @notice Allows a user to send native tokens directly. + receive() external payable { + if (msg.value == 0) revert InvalidAmount(); + + _mint(msg.sender, msg.value); + emit Deposit(msg.sender, msg.value); + } + + /// @notice Disallows sending tokens to the token contract itself. This prevents accidental locking of tokens. + function _update(address _from, address _to, uint256 _value) internal override { + if (_to == address(this)) revert InvalidTransfer(); + super._update(_from, _to, _value); + } +} diff --git a/solidity/automation_registry/test/ERC20SupraTest.t.sol b/solidity/automation_registry/test/ERC20SupraTest.t.sol new file mode 100644 index 0000000000..86faccb504 --- /dev/null +++ b/solidity/automation_registry/test/ERC20SupraTest.t.sol @@ -0,0 +1,223 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +import {Test} from "forge-std/Test.sol"; +import {ERC20Supra} from "../src/ERC20Supra.sol"; + +contract ERC20SupraTest is Test { + ERC20Supra token; + + address owner = address(0x123); + address alice = address(0x456); + address bob = address(0x789); + + function setUp() public { + vm.deal(alice, 100 ether); + vm.deal(bob, 50 ether); + vm.deal(owner, 10 ether); + + token = new ERC20Supra(owner); + } + + function testDeployment() public view { + assertEq(token.owner(), owner); + assertEq(token.name(), "ERC20Supra"); + assertEq(token.symbol(), "SUPRA"); + assertEq(token.decimals(), 18); + } + + function testDepositMintsTokens() public { + vm.prank(alice); + token.deposit{value: 5 ether}(); + + assertEq(token.balanceOf(alice), 5 ether); + assertEq(address(token).balance, 5 ether); + assertEq(address(token).balance, token.totalSupply()); + assertEq(alice.balance, 95 ether); + } + + function testDepositZeroReverts() public { + vm.expectRevert(ERC20Supra.InvalidAmount.selector); + + vm.prank(alice); + token.deposit{value: 0}(); + } + + function testReceiveMintsTokens() public { + vm.prank(alice); + (bool success, ) = address(token).call{value: 3 ether}(""); + require(success); + + assertEq(token.balanceOf(alice), 3 ether); + assertEq(address(token).balance, 3 ether); + assertEq(alice.balance, 97 ether); + } + + function testReceiveZeroReverts() public { + vm.expectRevert(ERC20Supra.InvalidAmount.selector); + + vm.prank(alice); + address(token).call{value: 0}(""); + } + + function testWithdrawBurnsAndSends() public { + // Alice deposits 5 SUPRA → gets 5 * 10 ** 18 ERC20Supra tokens + testDepositMintsTokens(); + + // Alice withdraws 3 SUPRA → burns 3 * 10 ** 18 ERC20Supra tokens + vm.prank(alice); + token.withdraw(3 ether); + + assertEq(token.balanceOf(alice), 2 ether); + assertEq(address(alice).balance, 98 ether); + assertEq(address(token).balance, 2 ether); + assertEq(address(token).balance, token.totalSupply()); + } + + function testWithdrawRevertsIfInsufficientBalance() public { + vm.expectRevert(ERC20Supra.InsufficientBalance.selector); + + vm.prank(alice); + token.withdraw(1 ether); + } + + function testWithdrawRevertsInvalidAmount() public { + vm.expectRevert(ERC20Supra.InvalidAmount.selector); + + vm.prank(alice); + token.withdraw(0); + } + + function testWithdrawRevertsIfNativeTransferFails() public { + // Mint tokens + vm.prank(alice); + token.deposit{value: 1 ether}(); + + RejectReceive rejector = new RejectReceive(); + + // Transfer tokens to the rejecting contract + vm.prank(alice); + token.transfer(address(rejector), 1 ether); + + // Attempt withdrawal → should revert + vm.expectRevert(ERC20Supra.TransferFailed.selector); + + vm.prank(address(rejector)); + token.withdraw(1 ether); + + assertEq(token.balanceOf(address(rejector)), 1 ether); + } + + function testCannotTransferToContract() public { + vm.prank(alice); + token.deposit{value: 1 ether}(); + + vm.expectRevert(ERC20Supra.InvalidTransfer.selector); + + vm.prank(alice); + token.transfer(address(token), 1 ether); + } + + function testMintToContractReverts() public { + vm.deal(address(token), 1 ether); + + vm.expectRevert(ERC20Supra.InvalidTransfer.selector); + + vm.prank(address(token)); + token.deposit{value: 1 ether}(); + } + + // Additional test cases for ERC20Supra + function testTransferBetweenUsers() public { + vm.prank(alice); + token.deposit{value: 5 ether}(); + + assertEq(token.balanceOf(alice) , 5 ether); + + vm.prank(alice); + token.transfer(bob, 2 ether); + + assertEq(token.balanceOf(alice), 3 ether); + assertEq(token.balanceOf(bob), 2 ether); + } + + function testTransferFromAllowance() public { + vm.prank(alice); + token.deposit{value: 5 ether}(); + + vm.prank(alice); + token.approve(bob, 3 ether); + + vm.prank(bob); + token.transferFrom(alice, bob, 2 ether); + + assertEq(token.balanceOf(alice), 3 ether); + assertEq(token.balanceOf(bob), 2 ether); + assertEq(token.allowance(alice, bob), 1 ether); + } + + function testBurnFromReducesBalance() public { + vm.prank(alice); + token.deposit{value: 5 ether}(); + + vm.prank(alice); + token.approve(bob, 3 ether); + + vm.prank(bob); + token.burnFrom(alice, 2 ether); + + assertEq(token.balanceOf(alice), 3 ether); + assertEq(token.allowance(alice, bob), 1 ether); + assertEq(token.totalSupply(), 3 ether); + } + + function testTotalSupplyEqualsContractBalance() public { + vm.prank(alice); + token.deposit{value: 3 ether}(); + vm.prank(bob); + token.deposit{value: 2 ether}(); + + vm.prank(alice); + token.withdraw(1 ether); + vm.prank(bob); + token.withdraw(2 ether); + + assertEq(address(token).balance, token.totalSupply()); + assertEq(token.totalSupply(), 2 ether); + assertEq(token.balanceOf(alice), 2 ether); + assertEq(token.balanceOf(bob), 0); + } + + function testDepositEmitsEvent() public { + vm.expectEmit(true, true, false, false); + emit ERC20Supra.Deposit(alice, 5 ether); + + vm.prank(alice); + token.deposit{value: 5 ether}(); + } + + function testReceiveEmitsEvent() public { + vm.expectEmit(true, true, false, false); + emit ERC20Supra.Deposit(alice, 3 ether); + + vm.prank(alice); + (bool success, ) = address(token).call{value: 3 ether}(""); + require(success); + } + + function testWithdrawEmitsEvent() public { + vm.prank(alice); + token.deposit{value: 5 ether}(); + + vm.expectEmit(true, true, false, false); + emit ERC20Supra.Withdrawal(alice, 2 ether); + + vm.prank(alice); + token.withdraw(2 ether); + } +} + +contract RejectReceive { + fallback() external payable { revert(); } + receive() external payable { revert(); } +} From c5e6b379004a62cbcc831a85a1d4865224c35ec4 Mon Sep 17 00:00:00 2001 From: Aregnaz Harutyunyan <> Date: Tue, 16 Dec 2025 19:31:35 +0400 Subject: [PATCH 2/6] moved SC and tests to supra_contracts --- .../{automation_registry => supra_contracts}/src/ERC20Supra.sol | 0 .../test/ERC20SupraTest.t.sol | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename solidity/{automation_registry => supra_contracts}/src/ERC20Supra.sol (100%) rename solidity/{automation_registry => supra_contracts}/test/ERC20SupraTest.t.sol (100%) diff --git a/solidity/automation_registry/src/ERC20Supra.sol b/solidity/supra_contracts/src/ERC20Supra.sol similarity index 100% rename from solidity/automation_registry/src/ERC20Supra.sol rename to solidity/supra_contracts/src/ERC20Supra.sol diff --git a/solidity/automation_registry/test/ERC20SupraTest.t.sol b/solidity/supra_contracts/test/ERC20SupraTest.t.sol similarity index 100% rename from solidity/automation_registry/test/ERC20SupraTest.t.sol rename to solidity/supra_contracts/test/ERC20SupraTest.t.sol From e286a7325e108821d6424c276a840052a6492610 Mon Sep 17 00:00:00 2001 From: Udit Yadav Date: Wed, 17 Dec 2025 12:27:22 +0530 Subject: [PATCH 3/6] updated .gitignore and added deployment script --- .gitignore | 7 +++++- .../script/DeployERC20Supra.s.sol | 23 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 solidity/supra_contracts/script/DeployERC20Supra.s.sol diff --git a/.gitignore b/.gitignore index 10e3bcae4d..a6604dc95b 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,11 @@ target .vscode .idea pkg/ +cache +out +broadcast +.env +all-chain.json bins/revme/temp_folder bins/revme/tests @@ -25,4 +30,4 @@ rustc-ice-* /index.html # Fixtures -/test-fixtures +/test-fixtures \ No newline at end of file diff --git a/solidity/supra_contracts/script/DeployERC20Supra.s.sol b/solidity/supra_contracts/script/DeployERC20Supra.s.sol new file mode 100644 index 0000000000..e4434dfc60 --- /dev/null +++ b/solidity/supra_contracts/script/DeployERC20Supra.s.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +import {Script, console} from "forge-std/Script.sol"; +import {ERC20Supra} from "../src/ERC20Supra.sol"; + +contract DeployERC20Supra is Script { + address owner; + + function setUp() public { + owner = vm.envAddress("OWNER"); + } + + function run() public { + vm.startBroadcast(); + + // Deploy ERC20Supra + ERC20Supra erc20Supra = new ERC20Supra(owner); + console.log("ERC20Supra deployed at: ", address(erc20Supra)); + + vm.stopBroadcast(); + } +} \ No newline at end of file From 1e11d5ec5d48a8d21fd82c0350ca384380b4c594 Mon Sep 17 00:00:00 2001 From: Udit Yadav Date: Wed, 17 Dec 2025 14:49:08 +0530 Subject: [PATCH 4/6] renamed test file --- .../test/{ERC20SupraTest.t.sol => ERC20Supra.t.sol} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename solidity/supra_contracts/test/{ERC20SupraTest.t.sol => ERC20Supra.t.sol} (100%) diff --git a/solidity/supra_contracts/test/ERC20SupraTest.t.sol b/solidity/supra_contracts/test/ERC20Supra.t.sol similarity index 100% rename from solidity/supra_contracts/test/ERC20SupraTest.t.sol rename to solidity/supra_contracts/test/ERC20Supra.t.sol From 69db948936ac7121281e98476f45f484e43bf1eb Mon Sep 17 00:00:00 2001 From: Udit Yadav Date: Fri, 19 Dec 2025 12:34:47 +0530 Subject: [PATCH 5/6] renamed events and functions --- solidity/supra_contracts/src/ERC20Supra.sol | 20 +++--- .../supra_contracts/test/ERC20Supra.t.sol | 66 +++++++++---------- 2 files changed, 43 insertions(+), 43 deletions(-) diff --git a/solidity/supra_contracts/src/ERC20Supra.sol b/solidity/supra_contracts/src/ERC20Supra.sol index 0ef2c9d8e1..94886e8a55 100644 --- a/solidity/supra_contracts/src/ERC20Supra.sol +++ b/solidity/supra_contracts/src/ERC20Supra.sol @@ -17,15 +17,15 @@ contract ERC20Supra is ERC20, ERC20Burnable, Ownable2Step, ERC20Permit { /// @notice Error thrown if low level call fails. error TransferFailed(); - /// @notice Emitted when native token is deposited. + /// @notice Emitted when native token is deposited and ERC20Supra is minted. /// @param account Address of the depositer. /// @param amount Amount deposited. - event Deposit(address indexed account, uint256 indexed amount); + event NativeToERC20Supra(address indexed account, uint256 indexed amount); - /// @notice Emitted when native token is withdrawn, + /// @notice Emitted when native token is withdrawn and ERC20Supra gets burnt. /// @param account Address withdrawing. /// @param amount Amount withdrawn. - event Withdrawal(address indexed account, uint256 indexed amount); + event ERC20SupraToNative(address indexed account, uint256 indexed amount); constructor(address _initialOwner) ERC20("ERC20Supra", "SUPRA") @@ -34,32 +34,32 @@ contract ERC20Supra is ERC20, ERC20Burnable, Ownable2Step, ERC20Permit { {} /// @notice Deposit native token → Mint ERC20Supra 1:1 - function deposit() external payable { + function nativeToErc20Supra() external payable { if (msg.value == 0) revert InvalidAmount(); _mint(msg.sender, msg.value); - emit Deposit(msg.sender, msg.value); + emit NativeToERC20Supra(msg.sender, msg.value); } /// @notice Withdraw native token → Burn ERC20Supra 1:1 /// @param _amount Amount of native tokens to withdraw. - function withdraw(uint256 _amount) external { + function erc20SupraToNative(uint256 _amount) external { if (_amount == 0) revert InvalidAmount(); if (balanceOf(msg.sender) < _amount) revert InsufficientBalance(); _burn(msg.sender, _amount); - emit Withdrawal(msg.sender, _amount); + emit ERC20SupraToNative(msg.sender, _amount); (bool sent, ) = payable(msg.sender).call{value: _amount}(""); if (!sent) revert TransferFailed(); } - /// @notice Allows a user to send native tokens directly. + /// @notice Allows a user to send native tokens directly and get ERC20Supra. receive() external payable { if (msg.value == 0) revert InvalidAmount(); _mint(msg.sender, msg.value); - emit Deposit(msg.sender, msg.value); + emit NativeToERC20Supra(msg.sender, msg.value); } /// @notice Disallows sending tokens to the token contract itself. This prevents accidental locking of tokens. diff --git a/solidity/supra_contracts/test/ERC20Supra.t.sol b/solidity/supra_contracts/test/ERC20Supra.t.sol index 86faccb504..2d69615373 100644 --- a/solidity/supra_contracts/test/ERC20Supra.t.sol +++ b/solidity/supra_contracts/test/ERC20Supra.t.sol @@ -26,9 +26,9 @@ contract ERC20SupraTest is Test { assertEq(token.decimals(), 18); } - function testDepositMintsTokens() public { + function testNativeToErc20Supra() public { vm.prank(alice); - token.deposit{value: 5 ether}(); + token.nativeToErc20Supra{value: 5 ether}(); assertEq(token.balanceOf(alice), 5 ether); assertEq(address(token).balance, 5 ether); @@ -36,14 +36,14 @@ contract ERC20SupraTest is Test { assertEq(alice.balance, 95 ether); } - function testDepositZeroReverts() public { + function testNativeToErc20SupraRevertsIfAmountZero() public { vm.expectRevert(ERC20Supra.InvalidAmount.selector); vm.prank(alice); - token.deposit{value: 0}(); + token.nativeToErc20Supra{value: 0}(); } - function testReceiveMintsTokens() public { + function testReceiveMintsERC20Supra() public { vm.prank(alice); (bool success, ) = address(token).call{value: 3 ether}(""); require(success); @@ -53,20 +53,20 @@ contract ERC20SupraTest is Test { assertEq(alice.balance, 97 ether); } - function testReceiveZeroReverts() public { + function testReceiveRevertsIfAmountZero() public { vm.expectRevert(ERC20Supra.InvalidAmount.selector); vm.prank(alice); address(token).call{value: 0}(""); } - function testWithdrawBurnsAndSends() public { + function testErc20SupraToNative() public { // Alice deposits 5 SUPRA → gets 5 * 10 ** 18 ERC20Supra tokens - testDepositMintsTokens(); + testNativeToErc20Supra(); // Alice withdraws 3 SUPRA → burns 3 * 10 ** 18 ERC20Supra tokens vm.prank(alice); - token.withdraw(3 ether); + token.erc20SupraToNative(3 ether); assertEq(token.balanceOf(alice), 2 ether); assertEq(address(alice).balance, 98 ether); @@ -74,24 +74,24 @@ contract ERC20SupraTest is Test { assertEq(address(token).balance, token.totalSupply()); } - function testWithdrawRevertsIfInsufficientBalance() public { + function testErc20SupraToNativeRevertsIfInsufficientBalance() public { vm.expectRevert(ERC20Supra.InsufficientBalance.selector); vm.prank(alice); - token.withdraw(1 ether); + token.erc20SupraToNative(1 ether); } - function testWithdrawRevertsInvalidAmount() public { + function testErc20SupraToNativeRevertsIfAmountZero() public { vm.expectRevert(ERC20Supra.InvalidAmount.selector); vm.prank(alice); - token.withdraw(0); + token.erc20SupraToNative(0); } - function testWithdrawRevertsIfNativeTransferFails() public { + function testErc20SupraToNativeRevertsIfNativeTransferFails() public { // Mint tokens vm.prank(alice); - token.deposit{value: 1 ether}(); + token.nativeToErc20Supra{value: 1 ether}(); RejectReceive rejector = new RejectReceive(); @@ -103,14 +103,14 @@ contract ERC20SupraTest is Test { vm.expectRevert(ERC20Supra.TransferFailed.selector); vm.prank(address(rejector)); - token.withdraw(1 ether); + token.erc20SupraToNative(1 ether); assertEq(token.balanceOf(address(rejector)), 1 ether); } function testCannotTransferToContract() public { vm.prank(alice); - token.deposit{value: 1 ether}(); + token.nativeToErc20Supra{value: 1 ether}(); vm.expectRevert(ERC20Supra.InvalidTransfer.selector); @@ -124,13 +124,13 @@ contract ERC20SupraTest is Test { vm.expectRevert(ERC20Supra.InvalidTransfer.selector); vm.prank(address(token)); - token.deposit{value: 1 ether}(); + token.nativeToErc20Supra{value: 1 ether}(); } // Additional test cases for ERC20Supra function testTransferBetweenUsers() public { vm.prank(alice); - token.deposit{value: 5 ether}(); + token.nativeToErc20Supra{value: 5 ether}(); assertEq(token.balanceOf(alice) , 5 ether); @@ -143,7 +143,7 @@ contract ERC20SupraTest is Test { function testTransferFromAllowance() public { vm.prank(alice); - token.deposit{value: 5 ether}(); + token.nativeToErc20Supra{value: 5 ether}(); vm.prank(alice); token.approve(bob, 3 ether); @@ -158,7 +158,7 @@ contract ERC20SupraTest is Test { function testBurnFromReducesBalance() public { vm.prank(alice); - token.deposit{value: 5 ether}(); + token.nativeToErc20Supra{value: 5 ether}(); vm.prank(alice); token.approve(bob, 3 ether); @@ -173,14 +173,14 @@ contract ERC20SupraTest is Test { function testTotalSupplyEqualsContractBalance() public { vm.prank(alice); - token.deposit{value: 3 ether}(); + token.nativeToErc20Supra{value: 3 ether}(); vm.prank(bob); - token.deposit{value: 2 ether}(); + token.nativeToErc20Supra{value: 2 ether}(); vm.prank(alice); - token.withdraw(1 ether); + token.erc20SupraToNative(1 ether); vm.prank(bob); - token.withdraw(2 ether); + token.erc20SupraToNative(2 ether); assertEq(address(token).balance, token.totalSupply()); assertEq(token.totalSupply(), 2 ether); @@ -188,32 +188,32 @@ contract ERC20SupraTest is Test { assertEq(token.balanceOf(bob), 0); } - function testDepositEmitsEvent() public { + function testNativeToErc20SupraEmitsEvent() public { vm.expectEmit(true, true, false, false); - emit ERC20Supra.Deposit(alice, 5 ether); + emit ERC20Supra.NativeToERC20Supra(alice, 5 ether); vm.prank(alice); - token.deposit{value: 5 ether}(); + token.nativeToErc20Supra{value: 5 ether}(); } function testReceiveEmitsEvent() public { vm.expectEmit(true, true, false, false); - emit ERC20Supra.Deposit(alice, 3 ether); + emit ERC20Supra.NativeToERC20Supra(alice, 3 ether); vm.prank(alice); (bool success, ) = address(token).call{value: 3 ether}(""); require(success); } - function testWithdrawEmitsEvent() public { + function testErc20SupraToNativeEmitsEvent() public { vm.prank(alice); - token.deposit{value: 5 ether}(); + token.nativeToErc20Supra{value: 5 ether}(); vm.expectEmit(true, true, false, false); - emit ERC20Supra.Withdrawal(alice, 2 ether); + emit ERC20Supra.ERC20SupraToNative(alice, 2 ether); vm.prank(alice); - token.withdraw(2 ether); + token.erc20SupraToNative(2 ether); } } From 5a1d6dc980e810e0eebdb34ae7d321892f3c86db Mon Sep 17 00:00:00 2001 From: Udit Yadav Date: Mon, 22 Dec 2025 15:04:35 +0530 Subject: [PATCH 6/6] updated comments --- solidity/supra_contracts/src/ERC20Supra.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/solidity/supra_contracts/src/ERC20Supra.sol b/solidity/supra_contracts/src/ERC20Supra.sol index 94886e8a55..3e0f1371b9 100644 --- a/solidity/supra_contracts/src/ERC20Supra.sol +++ b/solidity/supra_contracts/src/ERC20Supra.sol @@ -17,12 +17,12 @@ contract ERC20Supra is ERC20, ERC20Burnable, Ownable2Step, ERC20Permit { /// @notice Error thrown if low level call fails. error TransferFailed(); - /// @notice Emitted when native token is deposited and ERC20Supra is minted. + /// @notice Emitted when native tokens are deposited to mint and receive ERC20Supra tokens. /// @param account Address of the depositer. /// @param amount Amount deposited. event NativeToERC20Supra(address indexed account, uint256 indexed amount); - /// @notice Emitted when native token is withdrawn and ERC20Supra gets burnt. + /// @notice Emitted when native tokens are withdrawn by burning ERC20Supra tokens. /// @param account Address withdrawing. /// @param amount Amount withdrawn. event ERC20SupraToNative(address indexed account, uint256 indexed amount);