Address Contract Verified
Address
0x8E9371127FB08Ac67b703db7b359B786E1f3DdA4
Balance
0 ETH
Nonce
1
Code Size
1740 bytes
Creator
0xae95E53f...3C99 at tx 0x52fe9815...9bcc2e
Indexed Transactions
0
Contract Bytecode
1740 bytes
0x608060405234801561000f575f5ffd5b50600436106100cf575f3560e01c806370a082311161007d578063dd62ed3e11610058578063dd62ed3e146101d1578063e0737f7a146101fb578063fe6d812414610205575f5ffd5b806370a082311461017f57806395d89b411461019e578063a9059cbb146101be575f5ffd5b806323b872dd116100ad57806323b872dd146101485780632ff2e9dc1461015b578063313ce56714610170575f5ffd5b806306fdde03146100d3578063095ea7b31461010f57806318160ddd14610132575b5f5ffd5b60408051808201909152600e81526d42617374696f6e204c656761637960901b60208201525b6040516101069190610574565b60405180910390f35b61012261011d3660046105c4565b610244565b6040519015158152602001610106565b61013a5f5481565b604051908152602001610106565b6101226101563660046105ec565b6102b0565b61013a6d1314a0710eda82c3a91ec000000081565b60405160128152602001610106565b61013a61018d366004610626565b60016020525f908152604090205481565b60408051808201909152600481526342534c4760e01b60208201526100f9565b6101226101cc3660046105c4565b61033a565b61013a6101df366004610646565b600260209081525f928352604080842090915290825290205481565b61020361034f565b005b61022c7f000000000000000000000000ae95e53ff0ae7ef054969d0b289073dedc5a3c9981565b6040516001600160a01b039091168152602001610106565b335f8181526002602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061029e9086815260200190565b60405180910390a35060015b92915050565b6001600160a01b0383165f9081526002602090815260408083203384529091528120545f19811461032457828110156102fc576040516313be252b60e01b815260040160405180910390fd5b6001600160a01b0385165f908152600260209081526040808320338452909152902083820390555b61032f8585856103f1565b506001949350505050565b5f6103463384846103f1565b50600192915050565b336001600160a01b037f000000000000000000000000ae95e53ff0ae7ef054969d0b289073dedc5a3c99161461039857604051633e34a41b60e21b815260040160405180910390fd5b5f54156103b75760405162dc149f60e41b815260040160405180910390fd5b6103ef7f000000000000000000000000ae95e53ff0ae7ef054969d0b289073dedc5a3c996d1314a0710eda82c3a91ec00000006104e5565b565b6001600160a01b0382166104185760405163a38ca3d960e01b815260040160405180910390fd5b6001600160a01b03831661043f5760405163f38f85c360e01b815260040160405180910390fd5b6001600160a01b0383165f908152600160205260409020548181101561047857604051631e9acf1760e31b815260040160405180910390fd5b6001600160a01b038085165f8181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104d79086815260200190565b60405180910390a350505050565b6001600160a01b03821661050c57604051630fa894ad60e01b815260040160405180910390fd5b805f5f82825461051c9190610677565b90915550506001600160a01b0382165f818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b03811681146105bf575f5ffd5b919050565b5f5f604083850312156105d5575f5ffd5b6105de836105a9565b946020939093013593505050565b5f5f5f606084860312156105fe575f5ffd5b610607846105a9565b9250610615602085016105a9565b929592945050506040919091013590565b5f60208284031215610636575f5ffd5b61063f826105a9565b9392505050565b5f5f60408385031215610657575f5ffd5b610660836105a9565b915061066e602084016105a9565b90509250929050565b808201808211156102aa57634e487b7160e01b5f52601160045260245ffdfea26469706673582212203064686150836d9eacb56795579dcda72f4cf61f57c7077fb6a977864bb4957264736f6c634300081c0033
Verified Source Code Full Match
Compiler: v0.8.28+commit.7893614a
EVM: cancun
Optimization: Yes (300 runs)
token.sol 108 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;
contract HeliosProtocol {
/*//////////////////////////////////////////////////////////////
EVENTS
//////////////////////////////////////////////////////////////*/
event Transfer(address indexed from, address indexed to, uint256 amount);
event Approval(address indexed owner, address indexed spender, uint256 amount);
/*//////////////////////////////////////////////////////////////
ERRORS
//////////////////////////////////////////////////////////////*/
error TransferToZero();
error TransferFromZero();
error InsufficientBalance();
error InsufficientAllowance();
error AlreadyInitialized();
error NotMinter();
error MintToZero();
/*//////////////////////////////////////////////////////////////
METADATA
//////////////////////////////////////////////////////////////*/
string internal constant _NAME = "Bastion Legacy";
string internal constant _SYMBOL = "BSLG";
function name() public pure returns (string memory) { return _NAME; }
function symbol() public pure returns (string memory) { return _SYMBOL; }
function decimals() public pure returns (uint8) { return 18; }
/*//////////////////////////////////////////////////////////////
ERC20 STORAGE
//////////////////////////////////////////////////////////////*/
uint256 public totalSupply;
mapping(address => uint256) public balanceOf;
mapping(address => mapping(address => uint256)) public allowance;
/*//////////////////////////////////////////////////////////////
IMMUTABLES
//////////////////////////////////////////////////////////////*/
address public immutable MINTER;
uint256 public constant INITIAL_SUPPLY = 387000000000000 * 1e18;
/*//////////////////////////////////////////////////////////////
CONSTRUCTOR
//////////////////////////////////////////////////////////////*/
constructor(address _minter) {
MINTER = _minter;
}
/*//////////////////////////////////////////////////////////////
ERC20 LOGIC
//////////////////////////////////////////////////////////////*/
function approve(address spender, uint256 amount) public returns (bool) {
allowance[msg.sender][spender] = amount;
emit Approval(msg.sender, spender, amount);
return true;
}
function transfer(address to, uint256 amount) public returns (bool) {
_transfer(msg.sender, to, amount);
return true;
}
function transferFrom(address from, address to, uint256 amount) public returns (bool) {
uint256 allowed = allowance[from][msg.sender];
if (allowed != type(uint256).max) {
if (allowed < amount) revert InsufficientAllowance();
unchecked { allowance[from][msg.sender] = allowed - amount; }
}
_transfer(from, to, amount);
return true;
}
/*//////////////////////////////////////////////////////////////
ONE-TIME MINT
//////////////////////////////////////////////////////////////*/
function initMint() external {
if (msg.sender != MINTER) revert NotMinter();
if (totalSupply != 0) revert AlreadyInitialized();
_mint(MINTER, INITIAL_SUPPLY);
}
/*//////////////////////////////////////////////////////////////
INTERNALS: TRANSFER/MINT
//////////////////////////////////////////////////////////////*/
function _transfer(address from, address to, uint256 amount) internal {
if (to == address(0)) revert TransferToZero();
if (from == address(0)) revert TransferFromZero();
uint256 fromBal = balanceOf[from];
if (fromBal < amount) revert InsufficientBalance();
unchecked {
balanceOf[from] = fromBal - amount;
balanceOf[to] += amount;
}
emit Transfer(from, to, amount);
}
function _mint(address to, uint256 amount) internal {
if (to == address(0)) revert MintToZero();
totalSupply += amount;
unchecked { balanceOf[to] += amount; }
emit Transfer(address(0), to, amount);
}
}
Read Contract
INITIAL_SUPPLY 0x2ff2e9dc → uint256
MINTER 0xfe6d8124 → address
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
decimals 0x313ce567 → uint8
name 0x06fdde03 → string
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256
Write Contract 4 functions
These functions modify contract state and require a wallet transaction to execute.
approve 0x095ea7b3
address spender
uint256 amount
returns: bool
initMint 0xe0737f7a
No parameters
transfer 0xa9059cbb
address to
uint256 amount
returns: bool
transferFrom 0x23b872dd
address from
address to
uint256 amount
returns: bool
Recent Transactions
No transactions found for this address