reorder ERC20 functions, clean up naming

This commit is contained in:
Noah Zinsmeister
2020-01-22 13:14:55 -05:00
parent ea5e63c427
commit 1a4837bffa
6 changed files with 30 additions and 30 deletions

View File

@ -18,14 +18,12 @@ contract UniswapV2ERC20 is IUniswapV2ERC20 {
bytes32 public constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;
mapping (address => uint) public nonces;
event Transfer(address indexed from, address indexed to, uint value);
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint value);
constructor() public {
uint chainId;
assembly { // solium-disable-line security/no-inline-assembly
chainId := chainid()
}
assembly { chainId := chainid() }
DOMAIN_SEPARATOR = keccak256(abi.encode(
keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
keccak256(bytes(name)),
@ -41,12 +39,6 @@ contract UniswapV2ERC20 is IUniswapV2ERC20 {
emit Transfer(address(0), to, value);
}
function _transfer(address from, address to, uint value) private {
balanceOf[from] = balanceOf[from].sub(value);
balanceOf[to] = balanceOf[to].add(value);
emit Transfer(from, to, value);
}
function _burn(address from, uint value) internal {
balanceOf[from] = balanceOf[from].sub(value);
totalSupply = totalSupply.sub(value);
@ -58,9 +50,10 @@ contract UniswapV2ERC20 is IUniswapV2ERC20 {
emit Approval(owner, spender, value);
}
function transfer(address to, uint value) external returns (bool) {
_transfer(msg.sender, to, value);
return true;
function _transfer(address from, address to, uint value) private {
balanceOf[from] = balanceOf[from].sub(value);
balanceOf[to] = balanceOf[to].add(value);
emit Transfer(from, to, value);
}
function approve(address spender, uint value) external returns (bool) {
@ -68,6 +61,11 @@ contract UniswapV2ERC20 is IUniswapV2ERC20 {
return true;
}
function transfer(address to, uint value) external returns (bool) {
_transfer(msg.sender, to, value);
return true;
}
function transferFrom(address from, address to, uint value) external returns (bool) {
if (allowance[from][msg.sender] != uint(-1)) {
allowance[from][msg.sender] = allowance[from][msg.sender].sub(value);
@ -81,17 +79,17 @@ contract UniswapV2ERC20 is IUniswapV2ERC20 {
)
external
{
require(nonce == nonces[owner]++, "ERC20: INVALID_NONCE");
require(deadline >= block.timestamp, "ERC20: EXPIRED"); // solium-disable-line security/no-block-members
require(v == 27 || v == 28, "ERC20: INVALID_V");
require(s <= 0x7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0, "ERC20: INVALID_S");
require(nonce == nonces[owner]++, "UniswapV2ERC20: INVALID_NONCE");
require(deadline >= block.timestamp, "UniswapV2ERC20: EXPIRED");
require(v == 27 || v == 28, "UniswapV2ERC20: INVALID_V");
require(s <= 0x7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0, "UniswapV2ERC20: INVALID_S");
bytes32 digest = keccak256(abi.encodePacked(
"\x19\x01",
DOMAIN_SEPARATOR,
keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonce, deadline))
));
address recoveredAddress = ecrecover(digest, v, r, s);
require(recoveredAddress != address(0) && recoveredAddress == owner, "ERC20: INVALID_SIGNATURE");
require(recoveredAddress != address(0) && recoveredAddress == owner, "UniswapV2ERC20: INVALID_SIGNATURE");
_approve(owner, spender, value);
}
}

View File

@ -1,8 +1,8 @@
pragma solidity =0.5.16;
interface IERC20 {
event Transfer(address indexed from, address indexed to, uint value);
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint value);
function name() external view returns (string memory);
function symbol() external view returns (string memory);
@ -11,7 +11,7 @@ interface IERC20 {
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function transfer(address to, uint value) external returns (bool);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
function transferFrom(address from, address to, uint value) external returns (bool);
}

View File

@ -1,8 +1,8 @@
pragma solidity =0.5.16;
interface IUniswapV2ERC20 {
event Transfer(address indexed from, address indexed to, uint value);
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint value);
function name() external view returns (string memory);
function symbol() external view returns (string memory);
@ -10,13 +10,15 @@ interface IUniswapV2ERC20 {
function totalSupply() external view returns (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
function transferFrom(address from, address to, uint value) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external pure returns (bytes32);
function nonces(address owner) external view returns (uint);
function transfer(address to, uint value) external returns (bool);
function approve(address spender, uint value) external returns (bool);
function transferFrom(address from, address to, uint value) external returns (bool);
function permit(
address owner, address spender, uint value, uint nonce, uint expiration, uint8 v, bytes32 r, bytes32 s
)

View File

@ -2,7 +2,7 @@ pragma solidity =0.5.16;
import "../UniswapV2ERC20.sol";
contract GenericERC20 is UniswapV2ERC20 {
contract ERC20 is UniswapV2ERC20 {
constructor(uint _totalSupply) public {
if (_totalSupply > 0) _mint(msg.sender, _totalSupply);
}