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
- Creator
- 0x3f96366920…bFf337C9B8
- 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