Address Contract Verified
Address
0x6eD767EBCfF51533E5181f7bf818F2b9bD767aec
Balance
0 ETH
Nonce
1
Code Size
4976 bytes
Creator
0x763aC43a...7882 at tx 0x22155f8d...b97853
Indexed Transactions
0
Contract Bytecode
4976 bytes
0x608060405234801561001057600080fd5b506004361061014d5760003560e01c806342f6e389116100c3578063a06324611161007c578063a0632461146102ec578063a457c2d7146102ff578063a9059cbb14610312578063c312452514610325578063d505accf1461032d578063dd62ed3e1461034057600080fd5b806342f6e389146102665780635c60da1b1461028957806370a08231146102915780637ecebe00146102b157806395d89b41146102d15780639dc29fac146102d957600080fd5b806323b872dd1161011557806323b872dd146101df57806330adf81f146101f2578063313ce567146102195780633644e51514610238578063395093511461024057806340c10f191461025357600080fd5b806306fdde0314610152578063095ea7b3146101705780630c340a241461019357806318160ddd146101b35780631ed86f19146101ca575b600080fd5b61015a61036b565b6040516101679190610fa5565b60405180910390f35b61018361017e36600461100b565b6103f9565b6040519015158152602001610167565b61019b610410565b6040516001600160a01b039091168152602001610167565b6101bc60035481565b604051908152602001610167565b6101dd6101d8366004611037565b610480565b005b6101836101ed36600461105b565b61066b565b6101bc7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6002546102269060ff1681565b60405160ff9091168152602001610167565b6101bc61068d565b61018361024e36600461100b565b61073c565b6101dd61026136600461100b565b610778565b610183610274366004611037565b60076020526000908152604090205460ff1681565b61019b61081a565b6101bc61029f366004611037565b60046020526000908152604090205481565b6101bc6102bf366004611037565b60066020526000908152604090205481565b61015a61084e565b6101dd6102e736600461100b565b61085b565b6101dd6102fa366004611037565b6108f1565b61018361030d36600461100b565b610ad6565b61018361032036600461100b565b610ae3565b61019b610af0565b6101dd61033b36600461109c565b610b20565b6101bc61034e366004611113565b600560209081526000928352604080842090915290825290205481565b600080546103789061114c565b80601f01602080910402602001604051908101604052809291908181526020018280546103a49061114c565b80156103f15780601f106103c6576101008083540402835291602001916103f1565b820191906000526020600020905b8154815290600101906020018083116103d457829003601f168201915b505050505081565b6000610406338484610d9c565b5060015b92915050565b600061041a610af0565b6001600160a01b0316630c340a246040518163ffffffff1660e01b8152600401602060405180830381865afa158015610457573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047b9190611186565b905090565b610488610410565b6001600160a01b0316336001600160a01b0316146104df5760405162461bcd60e51b815260206004820152600f60248201526e26aa1d2727aa2fa3a7ab22a92727a960891b60448201526064015b60405180910390fd5b6c4d543a4144445f4d4f44554c4560981b60006104fa610af0565b90506000816001600160a01b031663fd4c5b373330866000366040518663ffffffff1660e01b81526004016105339594939291906111cc565b602060405180830381865afa158015610550573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610574919061120b565b9050806105b65760405162461bcd60e51b815260206004820152601060248201526f13550e9393d517d4d0d211511553115160821b60448201526064016104d6565b604051635ad5b6f760e11b81526001600160a01b0383169063b5ab6dee906105e99033908790600090369060040161122d565b600060405180830381600087803b15801561060357600080fd5b505af1158015610617573d6000803e3d6000fd5b5050506001600160a01b038516600081815260076020526040808220805460ff19166001179055519192507fead6a006345da1073a106d5f32372d2d2204f46cb0b4bca8f5ebafcbbed12b8a91a250505050565b6000610678843384610dfe565b610683848484610e42565b5060019392505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60006040516106bf919061125f565b60408051918290038220828201825260018352603160f81b6020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610406918590610773908690611314565b610d9c565b3360009081526007602052604090205460ff166107c95760405162461bcd60e51b815260206004820152600f60248201526e4d543a4d3a4e4f545f4d4f44554c4560881b60448201526064016104d6565b6107d38282610ec5565b816001600160a01b03167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858260405161080e91815260200190565b60405180910390a25050565b600061047b61084a60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd611327565b5490565b600180546103789061114c565b3360009081526007602052604090205460ff166108ac5760405162461bcd60e51b815260206004820152600f60248201526e4d543a423a4e4f545f4d4f44554c4560881b60448201526064016104d6565b6108b68282610f31565b816001600160a01b03167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58260405161080e91815260200190565b6108f9610410565b6001600160a01b0316336001600160a01b03161461094b5760405162461bcd60e51b815260206004820152600f60248201526e26aa1d2727aa2fa3a7ab22a92727a960891b60448201526064016104d6565b6f4d543a52454d4f56455f4d4f44554c4560801b6000610969610af0565b90506000816001600160a01b031663fd4c5b373330866000366040518663ffffffff1660e01b81526004016109a29594939291906111cc565b602060405180830381865afa1580156109bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e3919061120b565b905080610a255760405162461bcd60e51b815260206004820152601060248201526f13550e9393d517d4d0d211511553115160821b60448201526064016104d6565b604051635ad5b6f760e11b81526001600160a01b0383169063b5ab6dee90610a589033908790600090369060040161122d565b600060405180830381600087803b158015610a7257600080fd5b505af1158015610a86573d6000803e3d6000fd5b505050506001600160a01b038416600081815260076020526040808220805460ff19169055517f0a1ee69f55c33d8467c69ca59ce2007a737a88603d75392972520bf67cb513b89190a250505050565b6000610406338484610dfe565b6000610406338484610e42565b600061047b61084a60017ff4037508c8ed7f0e515b497cc593e8b40edb624ea4250275737be9ad17ecd743611327565b42841015610b625760405162461bcd60e51b815260206004820152600f60248201526e115490cc8c0e940e91561412549151608a1b60448201526064016104d6565b7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08111801590610ba257508260ff16601b1480610ba257508260ff16601c145b610be25760405162461bcd60e51b815260206004820152601160248201527045524332303a503a4d414c4c4541424c4560781b60448201526064016104d6565b6000610bec61068d565b6001600160a01b0389811660008181526006602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938c166060840152608083018b905260a083019390935260c08083018a90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa158015610d05573d6000803e3d6000fd5b505050602060405103519050886001600160a01b0316816001600160a01b0316148015610d3a57506001600160a01b03891615155b610d865760405162461bcd60e51b815260206004820152601960248201527f45524332303a503a494e56414c49445f5349474e41545552450000000000000060448201526064016104d6565b5050610d93878787610d9c565b50505050505050565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038084166000908152600560209081526040808320938616835292905220546000198114610e3c57610e3c84846107738585611327565b50505050565b6001600160a01b03831660009081526004602052604081208054839290610e6a908490611327565b90915550506001600160a01b03808316600081815260046020526040908190208054850190555190918516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610df19085815260200190565b8060036000828254610ed79190611314565b90915550506001600160a01b0382166000818152600460209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b6001600160a01b03821660009081526004602052604081208054839290610f59908490611327565b90915550506003805482900390556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610f25565b600060208083528351808285015260005b81811015610fd257858101830151858201604001528201610fb6565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461100857600080fd5b50565b6000806040838503121561101e57600080fd5b823561102981610ff3565b946020939093013593505050565b60006020828403121561104957600080fd5b813561105481610ff3565b9392505050565b60008060006060848603121561107057600080fd5b833561107b81610ff3565b9250602084013561108b81610ff3565b929592945050506040919091013590565b600080600080600080600060e0888a0312156110b757600080fd5b87356110c281610ff3565b965060208801356110d281610ff3565b95506040880135945060608801359350608088013560ff811681146110f657600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561112657600080fd5b823561113181610ff3565b9150602083013561114181610ff3565b809150509250929050565b600181811c9082168061116057607f821691505b60208210810361118057634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561119857600080fd5b815161105481610ff3565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b038681168252851660208201526040810184905260806060820181905260009061120090830184866111a3565b979650505050505050565b60006020828403121561121d57600080fd5b8151801515811461105457600080fd5b60018060a01b03851681528360208201526060604082015260006112556060830184866111a3565b9695505050505050565b600080835481600182811c91508083168061127b57607f831692505b6020808410820361129a57634e487b7160e01b86526022600452602486fd5b8180156112ae57600181146112c3576112f0565b60ff19861689528415158502890196506112f0565b60008a81526020902060005b868110156112e85781548b8201529085019083016112cf565b505084890196505b509498975050505050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561040a5761040a6112fe565b8181038181111561040a5761040a6112fe56fea26469706673582212201233062cc4e1db1cdf0940a7989811fb6af67083b9f5763a811e7222f6793dda64736f6c63430008120033
Verified Source Code Full Match
Compiler: v0.8.18+commit.87f61d96
EVM: paris
Optimization: Yes (200 runs)
MapleToken.sol 88 lines
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.18;
import { ERC20Proxied } from "../modules/erc20/contracts/ERC20Proxied.sol";
import { IGlobalsLike } from "./interfaces/Interfaces.sol";
import { IMapleToken } from "./interfaces/IMapleToken.sol";
contract MapleToken is IMapleToken, ERC20Proxied {
bytes32 internal constant GLOBALS_SLOT = bytes32(uint256(keccak256("eip1967.proxy.globals")) - 1);
bytes32 internal constant IMPLEMENTATION_SLOT = bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1);
mapping(address => bool) public isModule;
modifier onlyGovernor {
require(msg.sender == governor(), "MT:NOT_GOVERNOR");
_;
}
modifier onlyScheduled(bytes32 functionId_) {
IGlobalsLike globals_ = IGlobalsLike(globals());
bool isScheduledCall_ = globals_.isValidScheduledCall(msg.sender, address(this), functionId_, msg.data);
require(isScheduledCall_, "MT:NOT_SCHEDULED");
globals_.unscheduleCall(msg.sender, functionId_, msg.data);
_;
}
/**************************************************************************************************************************************/
/*** External Functions ***/
/**************************************************************************************************************************************/
function addModule(address module_) external onlyGovernor onlyScheduled("MT:ADD_MODULE") {
isModule[module_] = true;
emit ModuleAdded(module_);
}
function removeModule(address module_) external onlyGovernor onlyScheduled("MT:REMOVE_MODULE") {
delete isModule[module_];
emit ModuleRemoved(module_);
}
function burn(address from_, uint256 amount_) external {
require(isModule[msg.sender], "MT:B:NOT_MODULE");
_burn(from_, amount_);
emit Burn(from_, amount_);
}
function mint(address to_, uint256 amount_) external {
require(isModule[msg.sender], "MT:M:NOT_MODULE");
_mint(to_, amount_);
emit Mint(to_, amount_);
}
/**************************************************************************************************************************************/
/*** View Functions ***/
/**************************************************************************************************************************************/
function implementation() external view returns (address implementation_) {
implementation_ = _getAddress(IMPLEMENTATION_SLOT);
}
function governor() public view returns (address governor_) {
governor_ = IGlobalsLike(globals()).governor();
}
function globals() public view returns (address globals_) {
globals_ = _getAddress(GLOBALS_SLOT);
}
/**************************************************************************************************************************************/
/*** Utility Functions ***/
/**************************************************************************************************************************************/
function _getAddress(bytes32 slot_) internal view returns (address value_) {
assembly {
value_ := sload(slot_)
}
}
}
Interfaces.sol 43 lines
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.18;
interface IERC20Like {
function burn(address from, uint256 value) external;
function mint(address to, uint256 value) external;
function totalSupply() external view returns (uint256 totalSupply);
}
interface IGlobalsLike {
function governor() external view returns (address governor);
function isInstanceOf(bytes32 instanceKey, address instance) external view returns (bool isInstance);
function isValidScheduledCall(
address caller,
address target,
bytes32 functionId,
bytes calldata callData
) external view returns (bool isValidScheduledCall);
function mapleTreasury() external view returns (address mapleTreasury);
function unscheduleCall(address caller, bytes32 functionId, bytes calldata callData) external;
}
interface IMapleTokenInitializerLike {
function initialize(address migrator, address treasury) external;
}
interface IMapleTokenLike is IERC20Like {
function globals() external view returns (address globals);
}
IMapleToken.sol 93 lines
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.18;
import { IERC20 } from "../../modules/erc20/contracts/interfaces/IERC20.sol";
interface IMapleToken is IERC20 {
/**************************************************************************************************************************************/
/*** Events ***/
/**************************************************************************************************************************************/
/**
* @dev A burn was performed.
* @param from The address of the account whose tokens were burned.
* @param amount The amount of tokens that were burned.
*/
event Burn(address indexed from, uint256 amount);
/**
* @dev A mint was performed.
* @param to The address of the account whose tokens were minted.
* @param amount The amount of tokens that were minted.
*/
event Mint(address indexed to, uint256 amount);
/**
* @dev A new module was added to the MapleToken.
* @param module The address the module added.
*/
event ModuleAdded(address indexed module);
/**
* @dev A module was removed from the MapleToken.
* @param module The address the module removed.
*/
event ModuleRemoved(address indexed module);
/**************************************************************************************************************************************/
/*** Functions ***/
/**************************************************************************************************************************************/
/**
* @dev Adds a new module to the MapleToken.
* @param module The address the module to add.
*/
function addModule(address module) external;
/**
* @dev Burns a specified amount of tokens from the an account.
* @param from The address to burn tokens from.
* @param amount The amount of tokens to burn.
*/
function burn(address from, uint256 amount) external;
/**
* @dev Returns the address of the Maple Governor.
* @return governor The address of the Maple Governor.
*/
function governor() external view returns (address governor);
/**
* @dev Returns the address of the Maple Globals contract.
* @return globals The address of the Maple Globals contract.
*/
function globals() external view returns (address globals);
/**
* @dev Returns the proxy's implementation address.
* @return implementation_ The address of the implementation.
*/
function implementation() external view returns (address implementation_);
/**
* @dev Returns true if the specified module is a burner.
* @param module The address of the module to check.
* @return isModule True if the address is a valid module.
*/
function isModule(address module) external view returns (bool isModule);
/**
* @dev Mints a specified amount of tokens to an account.
* @param to The address to mint tokens to.
* @param amount The amount of tokens to mint.
*/
function mint(address to, uint256 amount) external;
/**
* @dev Removes a module from the MapleToken.
* @param module The address the module to remove.
*/
function removeModule(address module) external;
}
ERC20Proxied.sol 165 lines
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity ^0.8.7;
import { IERC20 } from "./interfaces/IERC20.sol";
/*
███████╗██████╗ ██████╗ ██████╗ ██████╗
██╔════╝██╔══██╗██╔════╝ ╚════██╗██╔═████╗
█████╗ ██████╔╝██║ █████╔╝██║██╔██║
██╔══╝ ██╔══██╗██║ ██╔═══╝ ████╔╝██║
███████╗██║ ██║╚██████╗ ███████╗╚██████╔╝
╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚══════╝ ╚═════╝
*/
/**
* @title Modern ERC-20 implementation.
* @dev Acknowledgements to Solmate, OpenZeppelin, and DSS for inspiring this code.
*/
abstract contract ERC20Proxied is IERC20 {
/**************************************************************************************************************************************/
/*** ERC-20 ***/
/**************************************************************************************************************************************/
string public override name;
string public override symbol;
uint8 public override decimals;
uint256 public override totalSupply;
mapping(address => uint256) public override balanceOf;
mapping(address => mapping(address => uint256)) public override allowance;
/**************************************************************************************************************************************/
/*** ERC-2612 ***/
/**************************************************************************************************************************************/
// PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
bytes32 public constant override PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;
mapping(address => uint256) public override nonces;
/**************************************************************************************************************************************/
/*** External Functions ***/
/**************************************************************************************************************************************/
function approve(address spender_, uint256 amount_) public virtual override returns (bool success_) {
_approve(msg.sender, spender_, amount_);
return true;
}
function decreaseAllowance(address spender_, uint256 subtractedAmount_) public virtual override returns (bool success_) {
_decreaseAllowance(msg.sender, spender_, subtractedAmount_);
return true;
}
function increaseAllowance(address spender_, uint256 addedAmount_) public virtual override returns (bool success_) {
_approve(msg.sender, spender_, allowance[msg.sender][spender_] + addedAmount_);
return true;
}
function permit(address owner_, address spender_, uint256 amount_, uint256 deadline_, uint8 v_, bytes32 r_, bytes32 s_)
public virtual override
{
require(deadline_ >= block.timestamp, "ERC20:P:EXPIRED");
// Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
// the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}.
require(
uint256(s_) <= uint256(0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) &&
(v_ == 27 || v_ == 28),
"ERC20:P:MALLEABLE"
);
// Nonce realistically cannot overflow.
unchecked {
bytes32 digest_ = keccak256(
abi.encodePacked(
"\x19\x01",
DOMAIN_SEPARATOR(),
keccak256(abi.encode(PERMIT_TYPEHASH, owner_, spender_, amount_, nonces[owner_]++, deadline_))
)
);
address recoveredAddress_ = ecrecover(digest_, v_, r_, s_);
require(recoveredAddress_ == owner_ && owner_ != address(0), "ERC20:P:INVALID_SIGNATURE");
}
_approve(owner_, spender_, amount_);
}
function transfer(address recipient_, uint256 amount_) public virtual override returns (bool success_) {
_transfer(msg.sender, recipient_, amount_);
return true;
}
function transferFrom(address owner_, address recipient_, uint256 amount_) public virtual override returns (bool success_) {
_decreaseAllowance(owner_, msg.sender, amount_);
_transfer(owner_, recipient_, amount_);
return true;
}
/**************************************************************************************************************************************/
/*** View Functions ***/
/**************************************************************************************************************************************/
function DOMAIN_SEPARATOR() public view override returns (bytes32 domainSeparator_) {
return keccak256(
abi.encode(
keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
keccak256(bytes(name)),
keccak256(bytes("1")),
block.chainid,
address(this)
)
);
}
/**************************************************************************************************************************************/
/*** Internal Functions ***/
/**************************************************************************************************************************************/
function _approve(address owner_, address spender_, uint256 amount_) internal {
emit Approval(owner_, spender_, allowance[owner_][spender_] = amount_);
}
function _burn(address owner_, uint256 amount_) internal {
balanceOf[owner_] -= amount_;
// Cannot underflow because a user's balance will never be larger than the total supply.
unchecked { totalSupply -= amount_; }
emit Transfer(owner_, address(0), amount_);
}
function _decreaseAllowance(address owner_, address spender_, uint256 subtractedAmount_) internal {
uint256 spenderAllowance = allowance[owner_][spender_]; // Cache to memory.
if (spenderAllowance != type(uint256).max) {
_approve(owner_, spender_, spenderAllowance - subtractedAmount_);
}
}
function _mint(address recipient_, uint256 amount_) internal {
totalSupply += amount_;
// Cannot overflow because totalSupply would first overflow in the statement above.
unchecked { balanceOf[recipient_] += amount_; }
emit Transfer(address(0), recipient_, amount_);
}
function _transfer(address owner_, address recipient_, uint256 amount_) internal {
balanceOf[owner_] -= amount_;
// Cannot overflow because minting prevents overflow of totalSupply, and sum of user balances == totalSupply.
unchecked { balanceOf[recipient_] += amount_; }
emit Transfer(owner_, recipient_, amount_);
}
}
IERC20.sol 152 lines
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity ^0.8.7;
/// @title Interface of the ERC20 standard as defined in the EIP, including EIP-2612 permit functionality.
interface IERC20 {
/**************************************************************************************************************************************/
/*** Events ***/
/**************************************************************************************************************************************/
/**
* @dev Emitted when one account has set the allowance of another account over their tokens.
* @param owner_ Account that tokens are approved from.
* @param spender_ Account that tokens are approved for.
* @param amount_ Amount of tokens that have been approved.
*/
event Approval(address indexed owner_, address indexed spender_, uint256 amount_);
/**
* @dev Emitted when tokens have moved from one account to another.
* @param owner_ Account that tokens have moved from.
* @param recipient_ Account that tokens have moved to.
* @param amount_ Amount of tokens that have been transferred.
*/
event Transfer(address indexed owner_, address indexed recipient_, uint256 amount_);
/**************************************************************************************************************************************/
/*** External Functions ***/
/**************************************************************************************************************************************/
/**
* @dev Function that allows one account to set the allowance of another account over their tokens.
* Emits an {Approval} event.
* @param spender_ Account that tokens are approved for.
* @param amount_ Amount of tokens that have been approved.
* @return success_ Boolean indicating whether the operation succeeded.
*/
function approve(address spender_, uint256 amount_) external returns (bool success_);
/**
* @dev Function that allows one account to decrease the allowance of another account over their tokens.
* Emits an {Approval} event.
* @param spender_ Account that tokens are approved for.
* @param subtractedAmount_ Amount to decrease approval by.
* @return success_ Boolean indicating whether the operation succeeded.
*/
function decreaseAllowance(address spender_, uint256 subtractedAmount_) external returns (bool success_);
/**
* @dev Function that allows one account to increase the allowance of another account over their tokens.
* Emits an {Approval} event.
* @param spender_ Account that tokens are approved for.
* @param addedAmount_ Amount to increase approval by.
* @return success_ Boolean indicating whether the operation succeeded.
*/
function increaseAllowance(address spender_, uint256 addedAmount_) external returns (bool success_);
/**
* @dev Approve by signature.
* @param owner_ Owner address that signed the permit.
* @param spender_ Spender of the permit.
* @param amount_ Permit approval spend limit.
* @param deadline_ Deadline after which the permit is invalid.
* @param v_ ECDSA signature v component.
* @param r_ ECDSA signature r component.
* @param s_ ECDSA signature s component.
*/
function permit(address owner_, address spender_, uint amount_, uint deadline_, uint8 v_, bytes32 r_, bytes32 s_) external;
/**
* @dev Moves an amount of tokens from `msg.sender` to a specified account.
* Emits a {Transfer} event.
* @param recipient_ Account that receives tokens.
* @param amount_ Amount of tokens that are transferred.
* @return success_ Boolean indicating whether the operation succeeded.
*/
function transfer(address recipient_, uint256 amount_) external returns (bool success_);
/**
* @dev Moves a pre-approved amount of tokens from a sender to a specified account.
* Emits a {Transfer} event.
* Emits an {Approval} event.
* @param owner_ Account that tokens are moving from.
* @param recipient_ Account that receives tokens.
* @param amount_ Amount of tokens that are transferred.
* @return success_ Boolean indicating whether the operation succeeded.
*/
function transferFrom(address owner_, address recipient_, uint256 amount_) external returns (bool success_);
/**************************************************************************************************************************************/
/*** View Functions ***/
/**************************************************************************************************************************************/
/**
* @dev Returns the allowance that one account has given another over their tokens.
* @param owner_ Account that tokens are approved from.
* @param spender_ Account that tokens are approved for.
* @return allowance_ Allowance that one account has given another over their tokens.
*/
function allowance(address owner_, address spender_) external view returns (uint256 allowance_);
/**
* @dev Returns the amount of tokens owned by a given account.
* @param account_ Account that owns the tokens.
* @return balance_ Amount of tokens owned by a given account.
*/
function balanceOf(address account_) external view returns (uint256 balance_);
/**
* @dev Returns the decimal precision used by the token.
* @return decimals_ The decimal precision used by the token.
*/
function decimals() external view returns (uint8 decimals_);
/**
* @dev Returns the signature domain separator.
* @return domainSeparator_ The signature domain separator.
*/
function DOMAIN_SEPARATOR() external view returns (bytes32 domainSeparator_);
/**
* @dev Returns the name of the token.
* @return name_ The name of the token.
*/
function name() external view returns (string memory name_);
/**
* @dev Returns the nonce for the given owner.
* @param owner_ The address of the owner account.
* @return nonce_ The nonce for the given owner.
*/
function nonces(address owner_) external view returns (uint256 nonce_);
/**
* @dev Returns the permit type hash.
* @return permitTypehash_ The permit type hash.
*/
function PERMIT_TYPEHASH() external view returns (bytes32 permitTypehash_);
/**
* @dev Returns the symbol of the token.
* @return symbol_ The symbol of the token.
*/
function symbol() external view returns (string memory symbol_);
/**
* @dev Returns the total amount of tokens in existence.
* @return totalSupply_ The total amount of tokens in existence.
*/
function totalSupply() external view returns (uint256 totalSupply_);
}
Read Contract
DOMAIN_SEPARATOR 0x3644e515 → bytes32
PERMIT_TYPEHASH 0x30adf81f → bytes32
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
decimals 0x313ce567 → uint8
globals 0xc3124525 → address
governor 0x0c340a24 → address
implementation 0x5c60da1b → address
isModule 0x42f6e389 → bool
name 0x06fdde03 → string
nonces 0x7ecebe00 → uint256
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256
Write Contract 10 functions
These functions modify contract state and require a wallet transaction to execute.
addModule 0x1ed86f19
address module_
approve 0x095ea7b3
address spender_
uint256 amount_
returns: bool
burn 0x9dc29fac
address from_
uint256 amount_
decreaseAllowance 0xa457c2d7
address spender_
uint256 subtractedAmount_
returns: bool
increaseAllowance 0x39509351
address spender_
uint256 addedAmount_
returns: bool
mint 0x40c10f19
address to_
uint256 amount_
permit 0xd505accf
address owner_
address spender_
uint256 amount_
uint256 deadline_
uint8 v_
bytes32 r_
bytes32 s_
removeModule 0xa0632461
address module_
transfer 0xa9059cbb
address recipient_
uint256 amount_
returns: bool
transferFrom 0x23b872dd
address owner_
address recipient_
uint256 amount_
returns: bool
Recent Transactions
No transactions found for this address