DegenHoodTokenDeployer

0x0b2804acd2c052b3ae00ac9125486b90e1e767f5

Verification
Verified
v0.8.28+commit.7893614a
Type
Contract
7,650 bytes
ABI entries
7
3 read · 1 write
License
none

Contract information

Address
0x0b2804acd2c052b3ae00ac9125486b90e1e767f5
Chain
Robinhood Chain (4663)
Compiler
v0.8.28+commit.7893614a
Optimization
Enabled
Creation tx
0x7ab85901ec…ef127aa519

Token

Not a token

This contract does not expose ERC-20 metadata.

Read contract (3)

creationCodeHash()bytes32
kernel()address
predict(bytes32, tuple)address

ABI

[
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "kernel_",
        "type": "address"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "inputs": [],
    "name": "InvalidKernel",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "caller",
        "type": "address"
      }
    ],
    "name": "UnauthorizedKernel",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "creationCodeHash",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "pure",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "salt",
        "type": "bytes32"
      },
      {
        "components": [
          {
            "internalType": "string",
            "name": "name",
            "type": "string"
          },
          {
            "internalType": "string",
            "name": "symbol",
            "type": "string"
          },
          {
            "internalType": "address",
            "name": "module",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "tokenAdmin",
            "type": "address"
          },
          {
            "internalType": "string",
            "name": "contractURI",
            "type": "string"
          },
          {
            "internalType": "string",
            "name": "imageURI",
            "type": "string"
          }
        ],
        "internalType": "struct DegenHoodTokenDeployer.TokenArgs",
        "name": "args",
        "type": "tuple"
      }
    ],
    "name": "deploy",
    "outputs": [
      {
        "internalType": "address",
        "name": "token",
        "type": "address"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "kernel",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "salt",
        "type": "bytes32"
      },
      {
        "components": [
          {
            "internalType": "string",
            "name": "name",
            "type": "string"
          },
          {
            "internalType": "string",
            "name": "symbol",
            "type": "string"
          },
          {
            "internalType": "address",
            "name": "module",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "tokenAdmin",
            "type": "address"
          },
          {
            "internalType": "string",
            "name": "contractURI",
            "type": "string"
          },
          {
            "internalType": "string",
            "name": "imageURI",
            "type": "string"
          }
        ],
        "internalType": "struct DegenHoodTokenDeployer.TokenArgs",
        "name": "args",
        "type": "tuple"
      }
    ],
    "name": "predict",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  }
]

Source code

// SPDX-License-Identifier: MIT
pragma solidity 0.8.28;

import {DegenHoodTokenV4} from "../token/DegenHoodTokenV4.sol";

/// @title DegenHoodTokenDeployer
/// @notice Immutable, kernel-only CREATE2 deployer for the fixed DegenHood token implementation.
contract DegenHoodTokenDeployer {
    struct TokenArgs {
        string name;
        string symbol;
        address module;
        address tokenAdmin;
        string contractURI;
        string imageURI;
    }

    error InvalidKernel();
    error UnauthorizedKernel(address caller);

    address public immutable kernel;

    constructor(address kernel_) {
        if (kernel_ == address(0)) revert InvalidKernel();
        kernel = kernel_;
    }

    function deploy(bytes32 salt, TokenArgs calldata args) external returns (address token) {
        if (msg.sender != kernel) revert UnauthorizedKernel(msg.sender);

        token = address(
            new DegenHoodTokenV4{salt: salt}(
                args.name,
                args.symbol,
                args.module,
                args.tokenAdmin,
                args.contractURI,
                args.imageURI
            )
        );
    }

    function predict(bytes32 salt, TokenArgs calldata args) external view returns (address) {
        bytes32 initCodeHash = _initCodeHash(args);
        return address(
            uint160(
                uint256(
                    keccak256(abi.encodePacked(bytes1(0xff), address(this), salt, initCodeHash))
                )
            )
        );
    }

    function creationCodeHash() external pure returns (bytes32) {
        return keccak256(type(DegenHoodTokenV4).creationCode);
    }

    function _initCodeHash(TokenArgs calldata args) private pure returns (bytes32) {
        return keccak256(
            abi.encodePacked(
                type(DegenHoodTokenV4).creationCode,
                abi.encode(
                    args.name,
                    args.symbol,
                    args.module,
                    args.tokenAdmin,
                    args.contractURI,
                    args.imageURI
                )
            )
        );
    }
}
Chain explorer1915msChain node83ms