Rooki
ROOKI
THE FORGE

Contracts, forged in your browser.

Pick a blueprint, tune it, compile it with real solc 0.8.24 running in a worker, and deploy straight to Robinhood Chain. No toolchain, no copy-paste.

A fungible token. Optional minting, burning and a hard cap.

erc20.sol — solidity 0.8.24 · optimizer 200
// SPDX-License-Identifier: MIT
pragma solidity 0.8.24;

// Forged with ROOKI — the utility mascot of Robinhood Chain (id 4663).

contract MoonRabbit {
    string public constant name = "Moon Rabbit";
    string public constant symbol = "MOON";
    uint8 public constant decimals = 18;
    uint256 public totalSupply;

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

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

    function transfer(address to, uint256 value) external returns (bool) {
        return _transfer(msg.sender, to, value);
    }

    function approve(address spender, uint256 value) external returns (bool) {
        allowance[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        return true;
    }

    function transferFrom(address from, address to, uint256 value) external returns (bool) {
        uint256 allowed = allowance[from][msg.sender];
        if (allowed != type(uint256).max) {
            require(allowed >= value, "allowance");
            allowance[from][msg.sender] = allowed - value;
        }
        return _transfer(from, to, value);
    }

    function _transfer(address from, address to, uint256 value) internal returns (bool) {
        require(to != address(0), "zero to");
        uint256 bal = balanceOf[from];
        require(bal >= value, "balance");
        unchecked {
            balanceOf[from] = bal - value;
            balanceOf[to] += value;
        }
        emit Transfer(from, to, value);
        return true;
    }

    constructor() {
        _mint(msg.sender, 1000000000 ether);
    }

    function _mint(address to, uint256 value) internal {
        totalSupply += value;
        balanceOf[to] += value;
        emit Transfer(address(0), to, value);
    }
}