feat(token): add minimal erc20 token implementation
This commit is contained in:
1 parent
b9dcfdcf4e
commit
8c16223be5
2 files changed
+76
No files matched your search
@@ -0,0 +1,59 @@
|
|||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
pragma solidity 0.8.36;
|
||||||
|
|
||||||
|
/// @title Minimal, correct ERC20 base shared by the LP token and test tokens.
|
||||||
|
contract Erc20 {
|
||||||
|
event Transfer(address indexed from, address indexed to, uint256 value);
|
||||||
|
event Approval(address indexed owner, address indexed spender, uint256 value);
|
||||||
|
|
||||||
|
string public name;
|
||||||
|
string public symbol;
|
||||||
|
uint8 public constant decimals = 18;
|
||||||
|
|
||||||
|
uint256 public totalSupply;
|
||||||
|
mapping(address => uint256) public balanceOf;
|
||||||
|
mapping(address => mapping(address => uint256)) public allowance;
|
||||||
|
|
||||||
|
constructor(string memory tokenName, string memory tokenSymbol) {
|
||||||
|
name = tokenName;
|
||||||
|
symbol = tokenSymbol;
|
||||||
|
}
|
||||||
|
|
||||||
|
function _mint(address to, uint256 value) internal {
|
||||||
|
totalSupply += value;
|
||||||
|
balanceOf[to] += value;
|
||||||
|
emit Transfer(address(0), to, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
function _burn(address from, uint256 value) internal {
|
||||||
|
balanceOf[from] -= value;
|
||||||
|
totalSupply -= value;
|
||||||
|
emit Transfer(from, address(0), value);
|
||||||
|
}
|
||||||
|
|
||||||
|
function _transfer(address from, address to, uint256 value) internal {
|
||||||
|
balanceOf[from] -= value;
|
||||||
|
balanceOf[to] += value;
|
||||||
|
emit Transfer(from, to, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
function approve(address spender, uint256 value) external returns (bool) {
|
||||||
|
allowance[msg.sender][spender] = value;
|
||||||
|
emit Approval(msg.sender, spender, value);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function transfer(address to, uint256 value) external returns (bool) {
|
||||||
|
_transfer(msg.sender, to, value);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function transferFrom(address from, address to, uint256 value) external returns (bool) {
|
||||||
|
uint256 allowed = allowance[from][msg.sender];
|
||||||
|
if (allowed != type(uint256).max) {
|
||||||
|
allowance[from][msg.sender] = allowed - value;
|
||||||
|
}
|
||||||
|
_transfer(from, to, value);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
pragma solidity 0.8.36;
|
||||||
|
|
||||||
|
interface IErc20 {
|
||||||
|
event Transfer(address indexed from, address indexed to, uint256 value);
|
||||||
|
event Approval(address indexed owner, address indexed spender, uint256 value);
|
||||||
|
|
||||||
|
function name() external view returns (string memory);
|
||||||
|
function symbol() external view returns (string memory);
|
||||||
|
function decimals() external view returns (uint8);
|
||||||
|
function totalSupply() external view returns (uint256);
|
||||||
|
function balanceOf(address owner) external view returns (uint256);
|
||||||
|
function allowance(address owner, address spender) external view returns (uint256);
|
||||||
|
function approve(address spender, uint256 value) external returns (bool);
|
||||||
|
function transfer(address to, uint256 value) external returns (bool);
|
||||||
|
function transferFrom(address from, address to, uint256 value) external returns (bool);
|
||||||
|
}
|
||||||
Reference in new issue
Block a user