Cryo Explorer Ethereum Mainnet

Address Contract Verified

Address 0x1E3F3f7528020f3CA1E5d1A90a92ab9dC49CFbd4
Balance 0 ETH
Nonce 1
Code Size 2212 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

2212 bytes
0x6080604090808252600480361015610029575b505050361561001f575f80fd5b6100276104be565b005b5f3560e01c918263122a0a52146104365750816333e1a48e146103f3578163576e17b81461020557816366d003ac146101c2578163797a6815146101885781638da5cb5b14610145578163ba3bb489146100ea57508063d46784d1146100d75763e889806b1461009a578080610012565b346100d3575f3660031901126100d357602090517f00000000000000000000000000000000000000000052b7d2dcc80cd2e40000008152f35b5f80fd5b5f3660031901126100d3576100276104be565b82346100d3575f3660031901126100d3577f0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000905f548203918211610132576020925051908152f35b601183634e487b7160e01b5f525260245ffd5b82346100d3575f3660031901126100d357517f000000000000000000000000b7cfa0de6975311dd0fff05f71fd2110cac0b2276001600160a01b03168152602090f35b82346100d3575f3660031901126100d357602090517f0000000000000000000000000000000000000000033b2e3c9fd0803ce80000008152f35b82346100d3575f3660031901126100d357517f000000000000000000000000b7cfa0de6975311dd0fff05f71fd2110cac0b2276001600160a01b03168152602090f35b9050346100d3576020806003193601126100d35781356001600160a01b0381811693908483036100d357807f000000000000000000000000b7cfa0de6975311dd0fff05f71fd2110cac0b2271633036103c45785516370a0823160e01b81523083820152907f0000000000000000000000003ce1a70b2fa66bddc7d2e870af47838863915051168482602481845afa9384156103ba5785925f95610387575b50875163a9059cbb60e01b81526001600160a01b0390911684820190815260208101869052909291839182905f9082906040015b03925af190811561037d575f91610350575b501561031b57507f418aae9de8f7ab4df1c137475770ff373eb33fd62a060544e9f4fc90f3cdb1a4929351908152a2005b845162461bcd60e51b8152908101839052600f60248201526e15da5d1a191c985dc819985a5b1959608a1b6044820152606490fd5b6103709150843d8611610376575b610368818361044f565b810190610485565b5f6102ea565b503d61035e565b86513d5f823e3d90fd5b9194509181813d81116103b3575b61039f818361044f565b810103126100d357519284916102d86102a4565b503d610395565b87513d5f823e3d90fd5b855162461bcd60e51b815280830185905260096024820152682737ba1037bbb732b960b91b6044820152606490fd5b82346100d3575f3660031901126100d357517f0000000000000000000000003ce1a70b2fa66bddc7d2e870af478388639150516001600160a01b03168152602090f35b346100d3575f3660031901126100d3576020905f548152f35b90601f8019910116810190811067ffffffffffffffff82111761047157604052565b634e487b7160e01b5f52604160045260245ffd5b908160209103126100d3575180151581036100d35790565b919082018092116104aa57565b634e487b7160e01b5f52601160045260245ffd5b341561083b576040805163313ce56760e01b81527f0000000000000000000000003ce1a70b2fa66bddc7d2e870af478388639150516001600160a01b0316929160209160049083818381895afa801561073857610807575b507f00000000000000000000000000000000000000000052b7d2dcc80cd2e400000080340290348204036107f457670de0b6b3a764000090049461055b865f5461049d565b7f0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000106107bf5782516370a0823160e01b815230838201528481602481855afa9081156107b5579087915f91610784575b501061074257825163a9059cbb60e01b815233838201908152602081018890529091859183919082905f90829060400103925af1908115610738575f9161071b575b50156106e3575f808080347f000000000000000000000000b7cfa0de6975311dd0fff05f71fd2110cac0b2275af13d156106de573d67ffffffffffffffff81116106cb57835190610647601f8201601f191687018361044f565b81525f853d92013e5b156106955750836106857ff761777482b4b40d2bcc0d050cfba6829900a2d8b3484bd0244ec0feeb3db5049394955f5461049d565b5f558151933485528401523392a2565b82606492519162461bcd60e51b8352820152601260248201527111551208199bdc9dd85c990819985a5b195960721b6044820152fd5b604183634e487b7160e01b5f525260245ffd5b610650565b82606492519162461bcd60e51b8352820152601460248201527311149651081d1c985b9cd9995c8819985a5b195960621b6044820152fd5b6107329150843d861161037657610368818361044f565b5f6105ed565b83513d5f823e3d90fd5b5082606492519162461bcd60e51b8352820152601a60248201527f4e6f7420656e6f756768204452594420696e2070726573616c650000000000006044820152fd5b809250868092503d83116107ae575b61079d818361044f565b810103126100d3578690515f6105ab565b503d610793565b84513d5f823e3d90fd5b5082606492519162461bcd60e51b8352820152601060248201526f141c995cd85b19481cdbdb19081bdd5d60821b6044820152fd5b601182634e487b7160e01b5f525260245ffd5b8381813d8311610834575b61081c818361044f565b810103126100d3575160ff8116036100d3575f610516565b503d610812565b60405162461bcd60e51b815260206004820152600b60248201526a139bc8115512081cd95b9d60aa1b6044820152606490fdfea2646970667358221220f36e30909f7ff9f2fd67f4500c8ae7d35b5270b484202063a340ddfed0895e7864736f6c63430008180033

Verified Source Code Full Match

Compiler: v0.8.24+commit.e11b9ed9 EVM: shanghai Optimization: Yes (200 runs)
DryadPresale.sol 80 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

/// @notice Minimal ERC20 interface
interface IERC20 {
    function transfer(address to, uint256 amount) external returns (bool);
    function decimals() external view returns (uint8);
    function balanceOf(address account) external view returns (uint256);
}

contract DryadPresale {
    address public immutable DRYD_TOKEN;
    address public immutable recipient;
    uint256 public immutable DRYD_PER_ETH; // DRYD tokens per 1 ETH (token units!)
    uint256 public immutable MAX_DRYD_SOLD; // max in token's smallest units (e.g., 1_000_000_000e18)
    uint256 public drydSold; // in token's smallest units
    address public immutable owner;

    event Purchased(address indexed buyer, uint256 ethSpent, uint256 drydSent);
    event EmergencyWithdrawal(uint256 drydAmount, address indexed to);

    constructor(
        address drydToken_,
        address recipient_,
        uint256 drydPerEth_,
        uint256 maxDrydSold_
    ) {
        require(drydToken_ != address(0) && recipient_ != address(0), "Zero addr");
        DRYD_TOKEN = drydToken_;
        recipient = recipient_;
        DRYD_PER_ETH = drydPerEth_; // e.g. 100_000_000e18 (if 18 decimals)
        MAX_DRYD_SOLD = maxDrydSold_; // e.g. 1_000_000_000e18
        owner = msg.sender;
    }

    receive() external payable {
        buyDryd();
    }

    function buyDryd() public payable {
        require(msg.value > 0, "No ETH sent");

        uint8 decimals = IERC20(DRYD_TOKEN).decimals();
        // Compute DRYD amount in token's smallest units
        // Formula: msg.value * DRYD_PER_ETH / 1 ether
        uint256 drydAmount = (msg.value * DRYD_PER_ETH) / 1 ether;

        require(drydSold + drydAmount <= MAX_DRYD_SOLD, "Presale sold out");

        // Contract must be funded with at least MAX_DRYD_SOLD DRYD tokens (in smallest units)
        require(
            IERC20(DRYD_TOKEN).balanceOf(address(this)) >= drydAmount,
            "Not enough DRYD in presale"
        );

        // Transfer DRYD to buyer
        require(IERC20(DRYD_TOKEN).transfer(msg.sender, drydAmount), "DRYD transfer failed");

        // Forward ETH to recipient
        (bool ok, ) = recipient.call{value: msg.value}("");
        require(ok, "ETH forward failed");

        drydSold += drydAmount;

        emit Purchased(msg.sender, msg.value, drydAmount);
    }

    /// @notice How much DRYD is left for sale (in token units)
    function presaleLeft() external view returns (uint256) {
        return MAX_DRYD_SOLD - drydSold;
    }

    /// @notice Allow owner to withdraw any remaining DRYD after presale ends
    function withdrawRemainingDryd(address to) external {
        require(msg.sender == owner, "Not owner");
        uint256 bal = IERC20(DRYD_TOKEN).balanceOf(address(this));
        require(IERC20(DRYD_TOKEN).transfer(to, bal), "Withdraw failed");
        emit EmergencyWithdrawal(bal, to);
    }
}

Read Contract

DRYD_PER_ETH 0xe889806b → uint256
DRYD_TOKEN 0x33e1a48e → address
MAX_DRYD_SOLD 0x797a6815 → uint256
drydSold 0x122a0a52 → uint256
owner 0x8da5cb5b → address
presaleLeft 0xba3bb489 → uint256
recipient 0x66d003ac → address

Write Contract 2 functions

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

buyDryd 0xd46784d1
No parameters
withdrawRemainingDryd 0x576e17b8
address to

Recent Transactions

No transactions found for this address