FrothMemeProtocolDeployer03

0x672e7ae0009b58ceb1c8de40f89d9663c9d3f685

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

Contract information

Address
0x672e7ae0009b58ceb1c8de40f89d9663c9d3f685
Chain
Robinhood Chain (4663)
Compiler
v0.8.28+commit.7893614a
Optimization
Enabled
Creation tx
0xd61934806e…fd2c19be3f

Token

Not a token

This contract does not expose ERC-20 metadata.

Read contract (16)

BPS_DENOMINATOR()uint256
CREATE_MEME_TOKEN_FEE_KEY()bytes32
CREATOR_FEES_ON_BUYING_KEY()bytes32
CREATOR_FEES_ON_SELLING_KEY()bytes32
DEFAULT_MIN_CONTRIBUTION_AMOUNT()uint256
GRADUATION_FEE_KEY()bytes32
MAX_TOTAL_CONTRIBUTION()uint256
MEME_TOKEN_CAP()uint256
MEME_TOKEN_LIQUIDITY_AMOUNT()uint256
RUG_FEE_KEY()bytes32
TRADE_BUY_FEE_KEY()bytes32
TRADE_SELL_FEE_KEY()bytes32
configure(tuple, tuple)
deploy(tuple, tuple)tuple
toString(uint256)string
toString(bytes32)string

ABI

[
  {
    "inputs": [],
    "name": "FactoryDeploymentFailed",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "FactoryInitCodeRequired",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "caller",
        "type": "address"
      }
    ],
    "name": "UnauthorizedOrchestrator",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "BPS_DENOMINATOR",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "CREATE_MEME_TOKEN_FEE_KEY",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "CREATOR_FEES_ON_BUYING_KEY",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "CREATOR_FEES_ON_SELLING_KEY",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "DEFAULT_MIN_CONTRIBUTION_AMOUNT",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "GRADUATION_FEE_KEY",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "MAX_TOTAL_CONTRIBUTION",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "MEME_TOKEN_CAP",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "MEME_TOKEN_LIQUIDITY_AMOUNT",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "RUG_FEE_KEY",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "TRADE_BUY_FEE_KEY",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "TRADE_SELL_FEE_KEY",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "initialAdminAndOperator",
            "type": "address"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "finalAdmin",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "finalOperator",
                "type": "address"
              }
            ],
            "internalType": "struct BaseFrothMemeProtocolDeployer.BondingCurveFactoryParams",
            "name": "bondingCurveFactoryParams",
            "type": "tuple"
          },
          {
            "components": [
              {
                "internalType": "uint256",
                "name": "initialVirtualNative",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "initialVirtualTokens",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "maxTokensSold",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "targetGraduation",
                "type": "uint256"
              }
            ],
            "internalType": "struct BaseFrothMemeProtocolDeployer.BondingCurveParams",
            "name": "bondingCurveParams",
            "type": "tuple"
          },
          {
            "internalType": "uint256",
            "name": "A",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "B",
            "type": "uint256"
          },
          {
            "internalType": "address",
            "name": "wrappedNative",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "routerV2",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "frothSwapV1Router",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "uniswapV3SwapRouter",
            "type": "address"
          },
          {
            "internalType": "uint24",
            "name": "frothV3FeeTier",
            "type": "uint24"
          },
          {
            "internalType": "address",
            "name": "froth",
            "type": "address"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "finalAdmin",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "finalOperator",
                "type": "address"
              },
              {
                "components": [
                  {
                    "internalType": "uint256",
                    "name": "mintFee",
                    "type": "uint256"
                  },
                  {
                    "internalType": "uint256",
                    "name": "creatorFeesOnBuyingFee",
                    "type": "uint256"
                  },
                  {
                    "internalType": "uint256",
                    "name": "creatorFeesOnSellingFee",
                    "type": "uint256"
                  },
                  {
                    "internalType": "uint256",
                    "name": "tradeBuyFee",
                    "type": "uint256"
                  },
                  {
                    "internalType": "uint256",
                    "name": "tradeSellFee",
                    "type": "uint256"
                  },
                  {
                    "internalType": "uint256",
                    "name": "graduationFee",
                    "type": "uint256"
                  },
                  {
                    "internalType": "uint256",
                    "name": "rugFee",
                    "type": "uint256"
                  }
                ],
                "internalType": "struct BaseFrothMemeProtocolDeployer.FeeParams",
                "name": "feeParams",
                "type": "tuple"
              },
              {
                "internalType": "address",
                "name": "twapPool",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "teamWallet",
                "type": "address"
              }
            ],
            "internalType": "struct BaseFrothMemeProtocolDeployer.FeeDistributorParams",
            "name": "feeDistributorParams",
            "type": "tuple"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "finalAdmin",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "finalOperator",
                "type": "address"
              }
            ],
            "internalType": "struct BaseFrothMemeProtocolDeployer.SaleMemeTokenManagerParams",
            "name": "saleMemeTokenManagerParams",
            "type": "tuple"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "finalAdmin",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "finalOperator",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "paymentToken",
                "type": "address"
              },
              {
                "internalType": "uint256",
                "name": "paymentAmount",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "memeExpirationTime",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "minContributionAmount",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "maxTotalContribution",
                "type": "uint256"
              }
            ],
            "internalType": "struct BaseFrothMemeProtocolDeployer.FrothMemeFactoryParams",
            "name": "frothMemeFactoryParams",
            "type": "tuple"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "finalAdmin",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "finalOperator",
                "type": "address"
              }
            ],
            "internalType": "struct BaseFrothMemeProtocolDeployer.CreatorFeesClaimerParams",
            "name": "creatorFeesClaimerParams",
            "type": "tuple"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "finalAdmin",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "finalOperator",
                "type": "address"
              },
              {
                "internalType": "uint256",
                "name": "minNativeAmount",
                "type": "uint256"
              }
            ],
            "internalType": "struct BaseFrothMemeProtocolDeployer.FrothBurnerParams",
            "name": "frothBurnerParams",
            "type": "tuple"
          }
        ],
        "internalType": "struct BaseFrothMemeProtocolDeployer.InputParams",
        "name": "",
        "type": "tuple"
      },
      {
        "components": [
          {
            "internalType": "address",
            "name": "bondingCurveFactory",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "bondingCurve",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "feeDistributor",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "twapPool",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "saleMemeTokenManager",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "frothMemeFactory",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "creatorFeesClaimer",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "frothBurner",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "uniswapV3SwapAdapter",
            "type": "address"
          }
        ],
        "internalType": "struct BaseFrothMemeProtocolDeployer.OutputParams",
        "name": "",
        "type": "tuple"
      }
    ],
    "name": "configure",
    "outputs": [],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "initialAdminAndOperator",
            "type": "address"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "finalAdmin",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "finalOperator",
                "type": "address"
              }
            ],
            "internalType": "struct BaseFrothMemeProtocolDeployer.BondingCurveFactoryParams",
            "name": "bondingCurveFactoryParams",
            "type": "tuple"
          },
          {
            "components": [
              {
                "internalType": "uint256",
                "name": "initialVirtualNative",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "initialVirtualTokens",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "maxTokensSold",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "targetGraduation",
                "type": "uint256"
              }
            ],
            "internalType": "struct BaseFrothMemeProtocolDeployer.BondingCurveParams",
            "name": "bondingCurveParams",
            "type": "tuple"
          },
          {
            "internalType": "uint256",
            "name": "A",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "B",
            "type": "uint256"
          },
          {
            "internalType": "address",
            "name": "wrappedNative",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "routerV2",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "frothSwapV1Router",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "uniswapV3SwapRouter",
            "type": "address"
          },
          {
            "internalType": "uint24",
            "name": "frothV3FeeTier",
            "type": "uint24"
          },
          {
            "internalType": "address",
            "name": "froth",
            "type": "address"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "finalAdmin",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "finalOperator",
                "type": "address"
              },
              {
                "components": [
                  {
                    "internalType": "uint256",
                    "name": "mintFee",
                    "type": "uint256"
                  },
                  {
                    "internalType": "uint256",
                    "name": "creatorFeesOnBuyingFee",
                    "type": "uint256"
                  },
                  {
                    "internalType": "uint256",
                    "name": "creatorFeesOnSellingFee",
                    "type": "uint256"
                  },
                  {
                    "internalType": "uint256",
                    "name": "tradeBuyFee",
                    "type": "uint256"
                  },
                  {
                    "internalType": "uint256",
                    "name": "tradeSellFee",
                    "type": "uint256"
                  },
                  {
                    "internalType": "uint256",
                    "name": "graduationFee",
                    "type": "uint256"
                  },
                  {
                    "internalType": "uint256",
                    "name": "rugFee",
                    "type": "uint256"
                  }
                ],
                "internalType": "struct BaseFrothMemeProtocolDeployer.FeeParams",
                "name": "feeParams",
                "type": "tuple"
              },
              {
                "internalType": "address",
                "name": "twapPool",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "teamWallet",
                "type": "address"
              }
            ],
            "internalType": "struct BaseFrothMemeProtocolDeployer.FeeDistributorParams",
            "name": "feeDistributorParams",
            "type": "tuple"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "finalAdmin",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "finalOperator",
                "type": "address"
              }
            ],
            "internalType": "struct BaseFrothMemeProtocolDeployer.SaleMemeTokenManagerParams",
            "name": "saleMemeTokenManagerParams",
            "type": "tuple"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "finalAdmin",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "finalOperator",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "paymentToken",
                "type": "address"
              },
              {
                "internalType": "uint256",
                "name": "paymentAmount",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "memeExpirationTime",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "minContributionAmount",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "maxTotalContribution",
                "type": "uint256"
              }
            ],
            "internalType": "struct BaseFrothMemeProtocolDeployer.FrothMemeFactoryParams",
            "name": "frothMemeFactoryParams",
            "type": "tuple"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "finalAdmin",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "finalOperator",
                "type": "address"
              }
            ],
            "internalType": "struct BaseFrothMemeProtocolDeployer.CreatorFeesClaimerParams",
            "name": "creatorFeesClaimerParams",
            "type": "tuple"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "finalAdmin",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "finalOperator",
                "type": "address"
              },
              {
                "internalType": "uint256",
                "name": "minNativeAmount",
                "type": "uint256"
              }
            ],
            "internalType": "struct BaseFrothMemeProtocolDeployer.FrothBurnerParams",
            "name": "frothBurnerParams",
            "type": "tuple"
          }
        ],
        "internalType": "struct BaseFrothMemeProtocolDeployer.InputParams",
        "name": "",
        "type": "tuple"
      },
      {
        "components": [
          {
            "internalType": "address",
            "name": "bondingCurveFactory",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "bondingCurve",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "feeDistributor",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "twapPool",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "saleMemeTokenManager",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "frothMemeFactory",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "creatorFeesClaimer",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "frothBurner",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "uniswapV3SwapAdapter",
            "type": "address"
          }
        ],
        "internalType": "struct BaseFrothMemeProtocolDeployer.OutputParams",
        "name": "",
        "type": "tuple"
      }
    ],
    "name": "deploy",
    "outputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "bondingCurveFactory",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "bondingCurve",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "feeDistributor",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "twapPool",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "saleMemeTokenManager",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "frothMemeFactory",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "creatorFeesClaimer",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "frothBurner",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "uniswapV3SwapAdapter",
            "type": "address"
          }
        ],
        "internalType": "struct BaseFrothMemeProtocolDeployer.OutputParams",
        "name": "",
        "type": "tuple"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes",
        "name": "initCode",
        "type": "bytes"
      },
      {
        "components": [
          {
            "internalType": "address",
            "name": "bondingCurveFactory",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "bondingCurve",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "feeDistributor",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "twapPool",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "saleMemeTokenManager",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "frothMemeFactory",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "creatorFeesClaimer",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "frothBurner",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "uniswapV3SwapAdapter",
            "type": "address"
          }
        ],
        "internalType": "struct BaseFrothMemeProtocolDeployer.OutputParams",
        "name": "outputParams",
        "type": "tuple"
      }
    ],
    "name": "deployFactory",
    "outputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "bondingCurveFactory",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "bondingCurve",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "feeDistributor",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "twapPool",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "saleMemeTokenManager",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "frothMemeFactory",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "creatorFeesClaimer",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "frothBurner",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "uniswapV3SwapAdapter",
            "type": "address"
          }
        ],
        "internalType": "struct BaseFrothMemeProtocolDeployer.OutputParams",
        "name": "",
        "type": "tuple"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_uint256",
        "type": "uint256"
      }
    ],
    "name": "toString",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "pure",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "_bytes32",
        "type": "bytes32"
      }
    ],
    "name": "toString",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "pure",
    "type": "function"
  }
]

Source code

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

import {BaseFrothMemeProtocolDeployer} from "./BaseFrothMemeProtocolDeployer.sol";

/// @notice Authenticated CREATE forwarder for the meme factory. The factory initcode is
///         supplied as calldata so this helper does not embed a ~21 KB copy in its own
///         runtime and remains safely below EIP-170.
contract FrothMemeProtocolDeployer03 is BaseFrothMemeProtocolDeployer {
    error FactoryInitCodeRequired();
    error FactoryDeploymentFailed();

    /// @dev The factory needs its initcode supplied separately; retaining this override
    ///      makes accidental use of the common deploy entry point fail loudly.
    function deploy(InputParams memory, OutputParams memory)
        external
        view
        override
        onlyOrchestrator
        returns (OutputParams memory)
    {
        revert FactoryInitCodeRequired();
    }

    function deployFactory(bytes calldata initCode, OutputParams memory outputParams)
        external
        onlyOrchestrator
        returns (OutputParams memory)
    {
        if (initCode.length == 0) revert FactoryInitCodeRequired();
        bytes memory creationCode = initCode;
        address factory;
        assembly ("memory-safe") {
            factory := create(0, add(creationCode, 0x20), mload(creationCode))
        }
        if (factory == address(0) || factory.code.length == 0) revert FactoryDeploymentFailed();
        outputParams.frothMemeFactory = factory;
        return outputParams;
    }

    function configure(InputParams calldata, OutputParams calldata) external view override onlyOrchestrator {}
}
Chain explorer4635msChain node89ms