SushiConfig
0xef394346a53da57524d1fa7e97e4810ebf106b61
Verification
Verified
v0.8.26+commit.8a97fa7a
Type
Contract
2,071 bytes
ABI entries
41
21 read · 8 write
License
none
Contract information
- Address
- 0xef394346a53da57524d1fa7e97e4810ebf106b61
- Chain
- Robinhood Chain (4663)
- Compiler
- v0.8.26+commit.8a97fa7a
- Optimization
- Enabled
- Creator
- 0x7B7DE29bc1…C6b0DaB694
- Creation tx
- 0xe8a9642b1c…7571ebb601
Token
Not a token
This contract does not expose ERC-20 metadata.
Read contract (21)
BPS() → uint256
EXTENDED_BPS() → uint256
MAX_PLATFORM_SHARE_BPS_LIMIT() → uint256
MIN_BOOTSTRAP_ETH() → uint256
POSITION_1_ALLOCATION_BPS() → uint256
POSITION_2_ALLOCATION_BPS() → uint256
POSITION_3_ALLOCATION_BPS() → uint256
POSITION_4_ALLOCATION_BPS() → uint256
POSITION_5_ALLOCATION_BPS() → uint256
POSITION_MCAP_MULTIPLIER() → uint256
POSITION_OVERLAP_BPS() → uint256
RETIREMENT_OFFSET() → uint256
calculateFees(uint256) → uint256, uint256, uint256
factory() → address
isOperational() → bool
kitchen() → address
maxPlatformShareBps() → uint256
owner() → address
paused() → bool
platformShareBps() → uint256
treasury() → address
Events (7)
FactoryUpdatedKitchenUpdatedMaxPlatformShareBpsUpdatedOwnershipTransferredPausedUpdatedPlatformShareBpsUpdatedTreasuryUpdated
ABI
[
{
"inputs": [
{
"internalType": "address",
"name": "_treasury",
"type": "address"
},
{
"internalType": "address",
"name": "_owner",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "InvalidAddress",
"type": "error"
},
{
"inputs": [],
"name": "InvalidShare",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "OwnableInvalidOwner",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "OwnableUnauthorizedAccount",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "oldFactory",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newFactory",
"type": "address"
}
],
"name": "FactoryUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "oldKitchen",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newKitchen",
"type": "address"
}
],
"name": "KitchenUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "oldMax",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "newMax",
"type": "uint256"
}
],
"name": "MaxPlatformShareBpsUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "bool",
"name": "paused",
"type": "bool"
}
],
"name": "PausedUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "oldShare",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "newShare",
"type": "uint256"
}
],
"name": "PlatformShareBpsUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "oldTreasury",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newTreasury",
"type": "address"
}
],
"name": "TreasuryUpdated",
"type": "event"
},
{
"inputs": [],
"name": "BPS",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "EXTENDED_BPS",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "MAX_PLATFORM_SHARE_BPS_LIMIT",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "MIN_BOOTSTRAP_ETH",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "POSITION_1_ALLOCATION_BPS",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "POSITION_2_ALLOCATION_BPS",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "POSITION_3_ALLOCATION_BPS",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "POSITION_4_ALLOCATION_BPS",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "POSITION_5_ALLOCATION_BPS",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "POSITION_MCAP_MULTIPLIER",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "POSITION_OVERLAP_BPS",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "RETIREMENT_OFFSET",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "calculateFees",
"outputs": [
{
"internalType": "uint256",
"name": "totalFee",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "beneficiaryShare",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "platformShare",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "factory",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "isOperational",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "kitchen",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "maxPlatformShareBps",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "paused",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "platformShareBps",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_factory",
"type": "address"
}
],
"name": "setFactory",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_kitchen",
"type": "address"
}
],
"name": "setKitchen",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_maxShareBps",
"type": "uint256"
}
],
"name": "setMaxPlatformShareBps",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bool",
"name": "_paused",
"type": "bool"
}
],
"name": "setPaused",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_shareBps",
"type": "uint256"
}
],
"name": "setPlatformShareBps",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_treasury",
"type": "address"
}
],
"name": "setTreasury",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "treasury",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
}
]Source code
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
/// @title SushiConfig
/// @notice Treasury / fee-split / bootstrap configuration for the Sushi V3
/// launcher. Ported from SteakhouseConfig (DIRECT); pure Solidity, no
/// AMM coupling. Platform takes 20% of collected LP fees by default;
/// creator/beneficiary gets 80%. Cap defaults to the 50% hard limit.
contract SushiConfig is Ownable {
uint256 public constant BPS = 10000;
uint256 public constant EXTENDED_BPS = 100000;
uint256 public constant MAX_PLATFORM_SHARE_BPS_LIMIT = 5000;
/// @notice Minimum ETH bootstrapped into the pool at launch. Sushi V3 needs a
/// bit more than the V4 dust minimum to seed a real concentrated
/// position, so this is raised vs. DIRECT's 0.00003 ether.
uint256 public constant MIN_BOOTSTRAP_ETH = 0.001 ether;
uint256 public constant POSITION_OVERLAP_BPS = 500;
uint256 public constant POSITION_1_ALLOCATION_BPS = 75000;
uint256 public constant POSITION_2_ALLOCATION_BPS = 18750;
uint256 public constant POSITION_3_ALLOCATION_BPS = 4688;
uint256 public constant POSITION_4_ALLOCATION_BPS = 1172;
uint256 public constant POSITION_5_ALLOCATION_BPS = 390;
uint256 public constant RETIREMENT_OFFSET = 2;
uint256 public constant POSITION_MCAP_MULTIPLIER = 16;
address public treasury;
uint256 public platformShareBps;
uint256 public maxPlatformShareBps;
address public factory;
/// @notice The KitchenSushi controller, authorized to launch on behalf of a
/// creator (createLaunchFor). Set once after Kitchen is deployed.
address public kitchen;
bool public paused;
event TreasuryUpdated(address indexed oldTreasury, address indexed newTreasury);
event PlatformShareBpsUpdated(uint256 oldShare, uint256 newShare);
event MaxPlatformShareBpsUpdated(uint256 oldMax, uint256 newMax);
event FactoryUpdated(address indexed oldFactory, address indexed newFactory);
event KitchenUpdated(address indexed oldKitchen, address indexed newKitchen);
event PausedUpdated(bool paused);
error InvalidAddress();
error InvalidShare();
constructor(address _treasury, address _owner) Ownable(_owner) {
if (_treasury == address(0)) revert InvalidAddress();
treasury = _treasury;
// Platform takes 20% of collected LP fees; creator/beneficiary gets 80%.
// Kept lower than the V4 DIRECT stack's 35% because the Sushi V3 pool fee
// is only 1% (vs the 1.2-10% the V4 pool could charge), so a smaller cut
// still leaves the creator a fair share. Owner can dial 0..maxPlatformShareBps.
platformShareBps = 2000;
maxPlatformShareBps = 5000;
}
function setTreasury(address _treasury) external onlyOwner {
if (_treasury == address(0)) revert InvalidAddress();
emit TreasuryUpdated(treasury, _treasury);
treasury = _treasury;
}
function setPlatformShareBps(uint256 _shareBps) external onlyOwner {
if (_shareBps > maxPlatformShareBps) revert InvalidShare();
emit PlatformShareBpsUpdated(platformShareBps, _shareBps);
platformShareBps = _shareBps;
}
function setMaxPlatformShareBps(uint256 _maxShareBps) external onlyOwner {
if (_maxShareBps > MAX_PLATFORM_SHARE_BPS_LIMIT) revert InvalidShare();
emit MaxPlatformShareBpsUpdated(maxPlatformShareBps, _maxShareBps);
maxPlatformShareBps = _maxShareBps;
}
function setFactory(address _factory) external onlyOwner {
if (_factory == address(0)) revert InvalidAddress();
emit FactoryUpdated(factory, _factory);
factory = _factory;
}
function setKitchen(address _kitchen) external onlyOwner {
if (_kitchen == address(0)) revert InvalidAddress();
emit KitchenUpdated(kitchen, _kitchen);
kitchen = _kitchen;
}
function setPaused(bool _paused) external onlyOwner {
emit PausedUpdated(_paused);
paused = _paused;
}
function calculateFees(uint256 amount)
external
view
returns (uint256 totalFee, uint256 beneficiaryShare, uint256 platformShare)
{
totalFee = amount;
platformShare = (totalFee * platformShareBps) / BPS;
beneficiaryShare = totalFee - platformShare;
}
function isOperational() external view returns (bool) {
return !paused;
}
}
Chain explorer4513msChain node95ms