Address Contract Verified
Address
0x8E2f2b5395eB4f0ccEa53Dc8601a2bFd2EdE0a02
Balance
0 ETH
Nonce
1
Code Size
1739 bytes
Creator
0xBa72157E...ef61 at tx 0x675341af...d0e98a
Indexed Transactions
0 (1 on-chain, 0% indexed)
Contract Bytecode
1739 bytes
0x608060405234801561000f575f5ffd5b50600436106100cf575f3560e01c806370a082311161007d578063dd62ed3e11610058578063dd62ed3e146101d0578063e0737f7a146101fa578063fe6d812414610204575f5ffd5b806370a082311461017e57806395d89b411461019d578063a9059cbb146101bd575f5ffd5b806323b872dd116100ad57806323b872dd146101475780632ff2e9dc1461015a578063313ce5671461016f575f5ffd5b806306fdde03146100d3578063095ea7b31461010e57806318160ddd14610131575b5f5ffd5b60408051808201909152600d81526c109d5b1dd85c9ac811dd585c99609a1b60208201525b6040516101059190610573565b60405180910390f35b61012161011c3660046105c3565b610243565b6040519015158152602001610105565b6101395f5481565b604051908152602001610105565b6101216101553660046105eb565b6102af565b6101396d01090ea8dd15c79784374000000081565b60405160128152602001610105565b61013961018c366004610625565b60016020525f908152604090205481565b604080518082019091526004815263424c574b60e01b60208201526100f8565b6101216101cb3660046105c3565b610339565b6101396101de366004610645565b600260209081525f928352604080842090915290825290205481565b61020261034e565b005b61022b7f000000000000000000000000ba72157e6f11da9bed682ba886e7e6d201e8ef6181565b6040516001600160a01b039091168152602001610105565b335f8181526002602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061029d9086815260200190565b60405180910390a35060015b92915050565b6001600160a01b0383165f9081526002602090815260408083203384529091528120545f19811461032357828110156102fb576040516313be252b60e01b815260040160405180910390fd5b6001600160a01b0385165f908152600260209081526040808320338452909152902083820390555b61032e8585856103f0565b506001949350505050565b5f6103453384846103f0565b50600192915050565b336001600160a01b037f000000000000000000000000ba72157e6f11da9bed682ba886e7e6d201e8ef61161461039757604051633e34a41b60e21b815260040160405180910390fd5b5f54156103b65760405162dc149f60e41b815260040160405180910390fd5b6103ee7f000000000000000000000000ba72157e6f11da9bed682ba886e7e6d201e8ef616d01090ea8dd15c7978437400000006104e4565b565b6001600160a01b0382166104175760405163a38ca3d960e01b815260040160405180910390fd5b6001600160a01b03831661043e5760405163f38f85c360e01b815260040160405180910390fd5b6001600160a01b0383165f908152600160205260409020548181101561047757604051631e9acf1760e31b815260040160405180910390fd5b6001600160a01b038085165f8181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104d69086815260200190565b60405180910390a350505050565b6001600160a01b03821661050b57604051630fa894ad60e01b815260040160405180910390fd5b805f5f82825461051b9190610676565b90915550506001600160a01b0382165f818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b03811681146105be575f5ffd5b919050565b5f5f604083850312156105d4575f5ffd5b6105dd836105a8565b946020939093013593505050565b5f5f5f606084860312156105fd575f5ffd5b610606846105a8565b9250610614602085016105a8565b929592945050506040919091013590565b5f60208284031215610635575f5ffd5b61063e826105a8565b9392505050565b5f5f60408385031215610656575f5ffd5b61065f836105a8565b915061066d602084016105a8565b90509250929050565b808201808211156102a957634e487b7160e01b5f52601160045260245ffdfea2646970667358221220dd514a361fc09ca04ebbd6a8158638ed6bbd90e464ffb330082c17f0b551c1b464736f6c634300081c0033
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 AlphaProtocol {
/*//////////////////////////////////////////////////////////////
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 = "Bulwark Guard";
string internal constant _SYMBOL = "BLWK";
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 = 21000000000000 * 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
This address has 1 on-chain transactions, but only 0% of the chain is indexed. Transactions will appear as indexing progresses. View on Etherscan →