Address Contract Partially Verified
Address
0x2b1D36f5B61AdDAf7DA7ebbd11B35FD8cfb0DE31
Balance
0 ETH
Nonce
1
Code Size
2507 bytes
Creator
0x2C47d823...8b80 at tx 0x50b34b50...e00bc3
Indexed Transactions
Index loading...
Contract Bytecode
2507 bytes
0x608060405234801561001057600080fd5b506004361061010b5760003560e01c806370a08231116100a25780639dc29fac116100715780639dc29fac14610269578063a9059cbb1461027c578063c6f4c5781461028f578063dd62ed3e146102a2578063f2fde38b146102cd57600080fd5b806370a08231146102195780637e2cbdf7146102395780638da5cb5b1461024e57806395d89b411461026157600080fd5b8063313ce567116100de578063313ce5671461017b57806340c10f19146101b457806342966c68146101c75780636f307dc3146101da57600080fd5b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015157806323b872dd14610168575b600080fd5b6101186102e0565b60405161012591906107c1565b60405180910390f35b61014161013c36600461082b565b61036e565b6040519015158152602001610125565b61015a60045481565b604051908152602001610125565b610141610176366004610855565b6103db565b6101a27f000000000000000000000000000000000000000000000000000000000000001281565b60405160ff9091168152602001610125565b6101416101c236600461082b565b6104bb565b6101416101d5366004610891565b610517565b6102017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610125565b61015a6102273660046108aa565b60056020526000908152604090205481565b61024c6102473660046108aa565b61052b565b005b600254610201906001600160a01b031681565b6101186105a0565b61014161027736600461082b565b6105ad565b61014161028a36600461082b565b6105fb565b600354610201906001600160a01b031681565b61015a6102b03660046108cc565b600660209081526000928352604080842090915290825290205481565b61024c6102db3660046108aa565b610661565b600080546102ed906108ff565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906108ff565b80156103665780601f1061033b57610100808354040283529160200191610366565b820191906000526020600020905b81548152906001019060200180831161034957829003601f168201915b505050505081565b3360008181526006602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103c99086815260200190565b60405180910390a35060015b92915050565b6001600160a01b0383166000908152600660209081526040808320338452909152812054600019811461043757610412838261094f565b6001600160a01b03861660009081526006602090815260408083203384529091529020555b6001600160a01b0385166000908152600560205260408120805485929061045f90849061094f565b90915550506001600160a01b0380851660008181526005602052604090819020805487019055519091871690600080516020610976833981519152906104a89087815260200190565b60405180910390a3506001949350505050565b60025460009081906001600160a01b03163314806104e357506003546001600160a01b031633145b905080610503576040516371d2156960e01b815260040160405180910390fd5b61050d8484610705565b5060019392505050565b6000610523338361075f565b506001919050565b6002546001600160a01b03163314610556576040516365b4837360e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0383169081179091556040517f6e39e7e49ea58fe9f9f706afa11e1680780614198cf9cfe495a765091e5e90c090600090a250565b600180546102ed906108ff565b6000806001600160a01b0384163314806105d157506003546001600160a01b031633145b9050806105f1576040516305fb1f3f60e51b815260040160405180910390fd5b61050d848461075f565b3360009081526005602052604081208054839190839061061c90849061094f565b90915550506001600160a01b03831660008181526005602052604090819020805485019055513390600080516020610976833981519152906103c99086815260200190565b6002546001600160a01b0316331461068c576040516365b4837360e01b815260040160405180910390fd5b6001600160a01b0381166106b357604051633efa09af60e01b815260040160405180910390fd5b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80600460008282546107179190610962565b90915550506001600160a01b03821660008181526005602090815260408083208054860190555184815260008051602061097683398151915291015b60405180910390a35050565b6001600160a01b0382166000908152600560205260408120805483929061078790849061094f565b90915550506004805482900390556040518181526000906001600160a01b0384169060008051602061097683398151915290602001610753565b600060208083528351808285015260005b818110156107ee578581018301518582016040015282016107d2565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461082657600080fd5b919050565b6000806040838503121561083e57600080fd5b6108478361080f565b946020939093013593505050565b60008060006060848603121561086a57600080fd5b6108738461080f565b92506108816020850161080f565b9150604084013590509250925092565b6000602082840312156108a357600080fd5b5035919050565b6000602082840312156108bc57600080fd5b6108c58261080f565b9392505050565b600080604083850312156108df57600080fd5b6108e88361080f565b91506108f66020840161080f565b90509250929050565b600181811c9082168061091357607f821691505b60208210810361093357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156103d5576103d5610939565b808201808211156103d5576103d561093956feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212202de166115da7b9e858a404bab6d92ce9bbf4db44638f76919fd125e66f6ef41464736f6c63430008110033
Verified Source Code Partial Match
Compiler: v0.8.17+commit.8df45f5f
EVM: london
Optimization: Yes (200 runs)
InterportToken.sol 166 lines
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity ^0.8.17;
contract InterportToken {
error OnlyOwnerError();
error ZeroAddressError();
error MintAccessError();
error BurnAccessError();
string public name = "Interport Token";
string public symbol = "ITP";
uint8 public immutable decimals = 18;
address public immutable underlying = address(0); // Anyswap ERC20 standard
address public owner;
address public multichainRouter;
uint256 public totalSupply;
mapping(address => uint256) public balanceOf;
mapping(address => mapping(address => uint256)) public allowance;
event Transfer(address indexed from, address indexed to, uint256 amount);
event Approval(address indexed owner, address indexed spender, uint256 amount);
event SetMultichainRouter(address indexed multichainRouter);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor() {
owner = msg.sender;
}
modifier onlyOwner {
if (msg.sender != owner) {
revert OnlyOwnerError();
}
_;
}
function approve(address spender, uint256 amount) external returns (bool) {
allowance[msg.sender][spender] = amount;
emit Approval(msg.sender, spender, amount);
return true;
}
function transfer(address to, uint256 amount) external returns (bool) {
balanceOf[msg.sender] -= amount;
// Cannot overflow because the sum of all user balances can't exceed the max uint256 value
unchecked {
balanceOf[to] += amount;
}
emit Transfer(msg.sender, to, amount);
return true;
}
function transferFrom(
address from,
address to,
uint256 amount
)
external
returns (bool)
{
uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals
if (allowed != type(uint256).max) {
allowance[from][msg.sender] = allowed - amount;
}
balanceOf[from] -= amount;
// Cannot overflow because the sum of all user balances can't exceed the max uint256 value
unchecked {
balanceOf[to] += amount;
}
emit Transfer(from, to, amount);
return true;
}
function mint(address _to, uint256 _amount) external returns (bool) {
// Minters: contract owner + Multichain router
bool condition =
msg.sender == owner ||
msg.sender == multichainRouter;
if (!condition) {
revert MintAccessError();
}
_mint(_to, _amount);
return true;
}
function burn(uint256 _amount) external returns (bool) {
// Simplified burn function for token holders
_burn(msg.sender, _amount);
return true;
}
function burn(address _from, uint256 _amount) external returns (bool) {
// Burners: token holders + Multichain router
bool condition =
_from == msg.sender ||
msg.sender == multichainRouter;
if (!condition) {
revert BurnAccessError();
}
_burn(_from, _amount);
return true;
}
function setMultichainRouter(address _multichainRouter) external onlyOwner {
// Zero address is allowed
multichainRouter = _multichainRouter;
emit SetMultichainRouter(_multichainRouter);
}
function transferOwnership(address newOwner) external onlyOwner {
if (newOwner == address(0)) {
revert ZeroAddressError();
}
address previousOwner = owner;
owner = newOwner;
emit OwnershipTransferred(previousOwner, newOwner);
}
function _mint(address to, uint256 amount) private {
totalSupply += amount;
// Cannot overflow because the sum of all user balances can't exceed the max uint256 value
unchecked {
balanceOf[to] += amount;
}
emit Transfer(address(0), to, amount);
}
function _burn(address from, uint256 amount) private {
balanceOf[from] -= amount;
// Cannot underflow because a user's balance will never be larger than the total supply
unchecked {
totalSupply -= amount;
}
emit Transfer(from, address(0), amount);
}
}
Read Contract
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
decimals 0x313ce567 → uint8
multichainRouter 0xc6f4c578 → address
name 0x06fdde03 → string
owner 0x8da5cb5b → address
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256
underlying 0x6f307dc3 → address
Write Contract 8 functions
These functions modify contract state and require a wallet transaction to execute.
approve 0x095ea7b3
address spender
uint256 amount
returns: bool
burn 0x42966c68
uint256 _amount
returns: bool
burn 0x9dc29fac
address _from
uint256 _amount
returns: bool
mint 0x40c10f19
address _to
uint256 _amount
returns: bool
setMultichainRouter 0x7e2cbdf7
address _multichainRouter
transfer 0xa9059cbb
address to
uint256 amount
returns: bool
transferFrom 0x23b872dd
address from
address to
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner
Recent Transactions
Transaction index is loading. Only unfinalized transactions are shown while the index starts up.