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"
}
]