Blockchain / Global / Address

Contract

0x1CF646bE3Bd0D3282c6d21C5535963d55dBd1d70

Balance
0 SOMI
Transactions sent
1
Type
Contract · 8,063 bytes of code

DonnieLaunchpad Verified

Compiler
solc 0.8.30+commit.73712a01
Language
Solidity
Optimization
No
EVM version
london
License
—
Verified
2026-10-12

DonnieLaunchpad.sol

Solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

/* ======== INTERFACES ======== */
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 value) external returns (bool);
    function approve(address spender, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IFactory {
    function createPool(address tokenA, address tokenB) external returns (address pool);
}

interface IAlgebraPool {
    function initialize(uint160 sqrtPriceX96) external;
}

interface IRouter {
    struct ExactInputSingleParams {
        address tokenIn;
        address tokenOut;
        address recipient;
        uint256 amountIn;
        uint256 amountOutMinimum;
        uint160 limitSqrtPrice;
    }
    function exactInputSingle(ExactInputSingleParams memory params) external payable returns (uint256 amountOut);
}

/* ======== CONTEXT & ERC20 ======== */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}

contract ERC20 is Context, IERC20 {
    string private _name;
    string private _symbol;
    uint8 private constant _decimals = 18;
    uint256 private _totalSupply;
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view returns (string memory) { return _name; }
    function symbol() public view returns (string memory) { return _symbol; }
    function decimals() public pure returns (uint8) { return _decimals; }
    function totalSupply() public view returns (uint256) { return _totalSupply; }
    function balanceOf(address account) public view returns (uint256) { return _balances[account]; }

    function transfer(address to, uint256 amount) public returns (bool) {
        _transfer(_msgSender(), to, amount);
        return true;
    }

    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address from, address to, uint256 amount) public returns (bool) {
        uint256 currentAllowance = _allowances[from][_msgSender()];
        require(currentAllowance >= amount, "ERC20: allowance too low");
        unchecked { _approve(from, _msgSender(), currentAllowance - amount); }
        _transfer(from, to, amount);
        return true;
    }

    /* ===== INTERNAL ===== */
    function _transfer(address from, address to, uint256 amount) internal {
        require(from != address(0) && to != address(0), "ERC20: zero address");
        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: insufficient balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            _balances[to] += amount;
        }
        emit Transfer(from, to, amount);
    }

    function _mint(address to, uint256 amount) internal {
        require(to != address(0), "ERC20: zero address");
        _totalSupply += amount;
        unchecked { _balances[to] += amount; }
        emit Transfer(address(0), to, amount);
    }

    function _approve(address owner, address spender, uint256 amount) internal {
        require(owner != address(0) && spender != address(0), "ERC20: zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
}

/* ===== FAIR TOKEN ===== */
contract FairToken is ERC20 {
    constructor(uint256 initialSupply, string memory name_, string memory symbol_)
        ERC20(name_, symbol_)
    {
        _mint(msg.sender, initialSupply);
    }
}

/* ===== DONNIE LAUNCHPAD ===== */
contract DonnieLaunchpad {
    address public constant DONNIE_TREASURY = 0xAe4Fb3595dfC450d870169d07881d5c2db48f34F;
    IFactory public constant factory = IFactory(0x0ccff3D02A3a200263eC4e0Fdb5E60a56721B8Ae);
    IRouter public constant router = IRouter(0x1582f6f3D26658F7208A799Be46e34b1f366CE44);
    address public constant WNATIVE = 0x4200000000000000000000000000000000000006;

    uint256 public constant LAUNCH_FEE = 5 ether; // SOMNIA native
    uint160 public constant SQRT_PRICE_X96 = 79228162514264337593543950336; // 1:1 default

    event NewDonnieLaunch(
        address indexed token,
        address indexed pool,
        address indexed creator
    );

    constructor() {}

    function fairLaunch(string memory name, string memory symbol) external payable {
        require(msg.value >= LAUNCH_FEE, "Insufficient launch fee");
        payable(DONNIE_TREASURY).transfer(LAUNCH_FEE);

        // Mint 1 million tokens to launcher
        uint256 initialSupply = 1_000_000 * 1e18;
        FairToken token = new FairToken(initialSupply, name, symbol);

        // Create pool and initialize
        address poolAddress = factory.createPool(address(token), WNATIVE);
        IAlgebraPool(poolAddress).initialize(SQRT_PRICE_X96);

        emit NewDonnieLaunch(address(token), poolAddress, msg.sender);
    }
}
ABI · 9 entries
json
[
  {
    "type": "constructor",
    "inputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "name": "NewDonnieLaunch",
    "type": "event",
    "inputs": [
      {
        "name": "token",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "pool",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "creator",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      }
    ],
    "anonymous": false
  },
  {
    "name": "DONNIE_TREASURY",
    "type": "function",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "name": "LAUNCH_FEE",
    "type": "function",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "name": "SQRT_PRICE_X96",
    "type": "function",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint160",
        "internalType": "uint160"
      }
    ],
    "stateMutability": "view"
  },
  {
    "name": "WNATIVE",
    "type": "function",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "name": "factory",
    "type": "function",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "contract IFactory"
      }
    ],
    "stateMutability": "view"
  },
  {
    "name": "fairLaunch",
    "type": "function",
    "inputs": [
      {
        "name": "name",
        "type": "string",
        "internalType": "string"
      },
      {
        "name": "symbol",
        "type": "string",
        "internalType": "string"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "name": "router",
    "type": "function",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "contract IRouter"
      }
    ],
    "stateMutability": "view"
  }
]

Send feedback

Agents: POST the same to /api/feedback.