Cryo Explorer Ethereum Mainnet

Address Contract Verified

Address 0x808688c820AB080A6Ff1019F03E5EC227D9b522B
Balance 0 ETH
Nonce 1
Code Size 3179 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

3179 bytes
0x608060405234801561000f575f80fd5b5060043610610106575f3560e01c806370a082311161009e578063a9059cbb1161006e578063a9059cbb1461026f578063c8a397a814610282578063cca6391b14610297578063d505accf146102aa578063dd62ed3e146102bd575f80fd5b806370a08231146101ea5780637a707468146102095780637ecebe001461024857806395d89b4114610267575f80fd5b806330adf81f116100d957806330adf81f14610175578063313ce5671461019c5780633644e515146101bb57806359e741d2146101e2575f80fd5b806306fdde031461010a578063095ea7b31461012857806318160ddd1461014b57806323b872dd14610162575b5f80fd5b6101126102e7565b60405161011f91906109d8565b60405180910390f35b61013b610136366004610a3f565b610372565b604051901515815260200161011f565b61015460035481565b60405190815260200161011f565b61013b610170366004610a67565b610388565b6101547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6002546101a99060ff1681565b60405160ff909116815260200161011f565b6101547f87f1549f5698892438c00511259e873e4da1dd28b6c8d01ee6da1475d4b4fcde81565b610154600881565b6101546101f8366004610aa0565b60046020525f908152604090205481565b6102307f0000000000000000000000004b520c812e8430659fc9f12f6d0c39026c83588d81565b6040516001600160a01b03909116815260200161011f565b610154610256366004610aa0565b60066020525f908152604090205481565b6101126103ff565b61013b61027d366004610a3f565b61040c565b610295610290366004610ac0565b610418565b005b6102956102a5366004610ac0565b6104c4565b6102956102b8366004610ad7565b61056a565b6101546102cb366004610b44565b600560209081525f928352604080842090915290825290205481565b5f80546102f390610b75565b80601f016020809104026020016040519081016040528092919081815260200182805461031f90610b75565b801561036a5780601f106103415761010080835404028352916020019161036a565b820191905f5260205f20905b81548152906001019060200180831161034d57829003601f168201915b505050505081565b5f61037e338484610818565b5060015b92915050565b6001600160a01b0383165f9081526005602090815260408083203384529091528120545f19146103ea576001600160a01b0384165f908152600560209081526040808320338452909152812080548492906103e4908490610bc1565b90915550505b6103f5848484610879565b5060019392505050565b600180546102f390610b75565b5f61037e338484610879565b6040516323b872dd60e01b8152336004820152306024820152604481018290527f0000000000000000000000004b520c812e8430659fc9f12f6d0c39026c83588d6001600160a01b0316906323b872dd906064016020604051808303815f875af1158015610488573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104ac9190610bd4565b506104c1336104bc600884610bf3565b6108fa565b50565b6104d8336104d3600884610bf3565b61095f565b60405163a9059cbb60e01b8152336004820152602481018290527f0000000000000000000000004b520c812e8430659fc9f12f6d0c39026c83588d6001600160a01b03169063a9059cbb906044016020604051808303815f875af1158015610542573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105669190610bd4565b5050565b428410156105bf5760405162461bcd60e51b815260206004820152601a60248201527f45524332303a205045524d49545f43414c4c5f4558504952454400000000000060448201526064015b60405180910390fd5b6001600160a01b0387165f90815260066020526040812080547f87f1549f5698892438c00511259e873e4da1dd28b6c8d01ee6da1475d4b4fcde917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918b918b918b918761062c83610c0a565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e001604051602081830303815290604052805190602001206040516020016106a592919061190160f01b81526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0825f1c111561072f5760405162461bcd60e51b815260206004820152601860248201527f546f6b656e3a20494e56414c49445f5349474e4154555245000000000000000060448201526064016105b6565b604080515f8082526020820180845284905260ff871692820192909252606081018590526080810184905260019060a0016020604051602081039080840390855afa158015610780573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b038116158015906107b65750886001600160a01b0316816001600160a01b0316145b6108025760405162461bcd60e51b815260206004820152601860248201527f45524332303a20494e56414c49445f5349474e4154555245000000000000000060448201526064016105b6565b61080d898989610818565b505050505050505050565b6001600160a01b038381165f8181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383165f9081526004602052604090205461089c908290610bc1565b6001600160a01b038481165f8181526004602090815260408083209590955592861680825290849020805486019055925184815290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161086c565b806003546109089190610c22565b6003556001600160a01b0382165f818152600460209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b6003805482900390556001600160a01b0382165f9081526004602052604090205461098b908290610bc1565b6001600160a01b0383165f818152600460205260408082209390935591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906109539085815260200190565b5f602080835283518060208501525f5b81811015610a04578581018301518582016040015282016109e8565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610a3a575f80fd5b919050565b5f8060408385031215610a50575f80fd5b610a5983610a24565b946020939093013593505050565b5f805f60608486031215610a79575f80fd5b610a8284610a24565b9250610a9060208501610a24565b9150604084013590509250925092565b5f60208284031215610ab0575f80fd5b610ab982610a24565b9392505050565b5f60208284031215610ad0575f80fd5b5035919050565b5f805f805f805f60e0888a031215610aed575f80fd5b610af688610a24565b9650610b0460208901610a24565b95506040880135945060608801359350608088013560ff81168114610b27575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b5f8060408385031215610b55575f80fd5b610b5e83610a24565b9150610b6c60208401610a24565b90509250929050565b600181811c90821680610b8957607f821691505b602082108103610ba757634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561038257610382610bad565b5f60208284031215610be4575f80fd5b81518015158114610ab9575f80fd5b808202811582820484141761038257610382610bad565b5f60018201610c1b57610c1b610bad565b5060010190565b8082018082111561038257610382610bad56fea2646970667358221220006d1fe28ca48c2661c235a88de194a00f9639b9906b157448e630eaa65f00c264736f6c63430008170033

Verified Source Code Full Match

Compiler: v0.8.23+commit.f704f362 EVM: shanghai Optimization: Yes (200 runs)
ERC20.sol 245 lines
// SPDX-License-Identifier: -- DG --

pragma solidity =0.8.23;

contract ERC20 {

    string public name;
    string public symbol;
    uint8 public decimals;

    address internal constant ZERO_ADDY = address(0x0);
    uint256 internal constant UINT256_MAX = type(uint256).max;

    uint256 public totalSupply;

    mapping(address => uint256) public balanceOf;
    mapping(address => mapping(address => uint256)) public allowance;
    mapping(address => uint256) public nonces;

    bytes32 public immutable DOMAIN_SEPARATOR;
    bytes32 public constant PERMIT_TYPEHASH = keccak256(
        "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"
    );

    event Transfer(
        address indexed from,
        address indexed to,
        uint256 value
    );

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );

    constructor(
        string memory _name,
        string memory _symbol
    ) {
        name = _name;
        symbol = _symbol;
        decimals = 18;

        DOMAIN_SEPARATOR = keccak256(
            abi.encode(
                keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
                keccak256(bytes(_name)),
                keccak256(bytes("1")),
                block.chainid,
                address(this)
            )
        );
    }

    function _mint(
        address _to,
        uint256 _value
    )
        internal
    {
        totalSupply =
        totalSupply + _value;

        unchecked {
            balanceOf[_to] =
            balanceOf[_to] + _value;
        }

        emit Transfer(
            ZERO_ADDY,
            _to,
            _value
        );
    }

    function _burn(
        address _from,
        uint256 _value
    )
        internal
    {
        unchecked {
            totalSupply =
            totalSupply - _value;
        }

        balanceOf[_from] =
        balanceOf[_from] - _value;

        emit Transfer(
            _from,
            ZERO_ADDY,
            _value
        );
    }

    function _approve(
        address _owner,
        address _spender,
        uint256 _value
    )
        private
    {
        allowance[_owner][_spender] = _value;

        emit Approval(
            _owner,
            _spender,
            _value
        );
    }

    function _transfer(
        address _from,
        address _to,
        uint256 _value
    )
        private
    {
        balanceOf[_from] =
        balanceOf[_from] - _value;

        unchecked {
            balanceOf[_to] =
            balanceOf[_to] + _value;
        }

        emit Transfer(
            _from,
            _to,
            _value
        );
    }

    function approve(
        address _spender,
        uint256 _value
    )
        external
        returns (bool)
    {
        _approve(
            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)
    {
        if (allowance[_from][msg.sender] != UINT256_MAX) {
            allowance[_from][msg.sender] -= _value;
        }

        _transfer(
            _from,
            _to,
            _value
        );

        return true;
    }

    function permit(
        address _owner,
        address _spender,
        uint256 _value,
        uint256 _deadline,
        uint8 _v,
        bytes32 _r,
        bytes32 _s
    )
        external
    {
        require(
            _deadline >= block.timestamp,
            "ERC20: PERMIT_CALL_EXPIRED"
        );

        bytes32 digest = keccak256(
            abi.encodePacked(
                "\x19\x01",
                DOMAIN_SEPARATOR,
                keccak256(
                    abi.encode(
                        PERMIT_TYPEHASH,
                        _owner,
                        _spender,
                        _value,
                        nonces[_owner]++,
                        _deadline
                    )
                )
            )
        );

        if (uint256(_s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
            revert("Token: INVALID_SIGNATURE");
        }

        address recoveredAddress = ecrecover(
            digest,
            _v,
            _r,
            _s
        );

        require(
            recoveredAddress != ZERO_ADDY &&
            recoveredAddress == _owner,
            "ERC20: INVALID_SIGNATURE"
        );

        _approve(
            _owner,
            _spender,
            _value
        );
    }
}
BAGCOIN.sol 77 lines
// SPDX-License-Identifier: ---DG----

pragma solidity =0.8.23;

import "./ERC20.sol";

interface ILightDGToken {

    function transfer(
        address _recipient,
        uint256 _amount
    )
        external
        returns (bool);

    function transferFrom(
        address _sender,
        address _recipient,
        uint256 _amount
    )
        external
        returns (bool);
}

contract BAGCOIN is ERC20 {

    ILightDGToken immutable public lightDG;
    uint256 constant public RATIO = 8;

    constructor(
        string memory _tokenName,
        string memory _tokenSymbol,
        address _lightDGTokenAddress
    )
        ERC20(
            _tokenName,
            _tokenSymbol
        )
    {
        lightDG = ILightDGToken(
            _lightDGTokenAddress
        );
    }

    function getBAGTokens(
        uint256 _lightDGAmountToDeposit
    )
        external
    {
        lightDG.transferFrom(
            msg.sender,
            address(this),
            _lightDGAmountToDeposit
        );

        _mint(
            msg.sender,
            _lightDGAmountToDeposit * RATIO
        );
    }

    function returnBAGTokens(
        uint256 _lightDGAmountToReceive
    )
        external
    {
        _burn(
            msg.sender,
            _lightDGAmountToReceive * RATIO
        );

        lightDG.transfer(
            msg.sender,
            _lightDGAmountToReceive
        );
    }
}

Read Contract

DOMAIN_SEPARATOR 0x3644e515 → bytes32
PERMIT_TYPEHASH 0x30adf81f → bytes32
RATIO 0x59e741d2 → uint256
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
decimals 0x313ce567 → uint8
lightDG 0x7a707468 → address
name 0x06fdde03 → string
nonces 0x7ecebe00 → uint256
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256

Write Contract 6 functions

These functions modify contract state and require a wallet transaction to execute.

approve 0x095ea7b3
address _spender
uint256 _value
returns: bool
getBAGTokens 0xc8a397a8
uint256 _lightDGAmountToDeposit
permit 0xd505accf
address _owner
address _spender
uint256 _value
uint256 _deadline
uint8 _v
bytes32 _r
bytes32 _s
returnBAGTokens 0xcca6391b
uint256 _lightDGAmountToReceive
transfer 0xa9059cbb
address _to
uint256 _value
returns: bool
transferFrom 0x23b872dd
address _from
address _to
uint256 _value
returns: bool

Recent Transactions

No transactions found for this address