Robinhood MainnetChain ID: 4663
Contract detail

SoftStakingVaultDeployer

SoftStakingVaultDeployer is a verified Robinhood Chain smart contract at 0x49eea510…ca382c90 with 0 indexed transactions.

Address type
Smart contract
Transactions
0
History coverage
No indexed activity found
Verification
Verified
Compiler
v0.8.26+commit.8a97fa7a
Verification match
full
Creation transaction
0xa1637c8e…d1d78885
Created at block
#28476508
Language
solidity
EVM version
cancun
License
mit
Compiler optimization
Enabled · 200 runs
Verified contract

Contract source code

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

import {CollectionToken} from "../market/CollectionToken.sol";
import {TokenEscrowReserve} from "../market/TokenEscrowReserve.sol";
import {NFTAMMVault} from "../vaults/NFTAMMVault.sol";
import {ERC1155AMMVault} from "../vaults/ERC1155AMMVault.sol";
import {NFTStakingVault} from "../vaults/NFTStakingVault.sol";
import {SoftStakingVault} from "../vaults/SoftStakingVault.sol";
import {LoanVault} from "../vaults/LoanVault.sol";
import {MarketGovernor} from "../governance/MarketGovernor.sol";

contract CollectionTokenDeployer {
    function deploy(string calldata name, string calldata symbol, uint256 totalSupply, address initialHolder)
        external
        returns (address)
    {
        return address(new CollectionToken(name, symbol, totalSupply, initialHolder));
    }
}

contract TokenEscrowDeployer {
    function deploy(address token, uint256 ammCap, uint256 loanCap, uint256 rewardCap, address admin)
        external
        returns (address)
    {
        return address(new TokenEscrowReserve(token, ammCap, loanCap, rewardCap, admin));
    }
}

contract NFTStakingVaultDeployer {
    function deploy(address token, address collection, uint256 cooldownPeriod, address admin) external returns (address) {
        return address(new NFTStakingVault(token, collection, cooldownPeriod, admin));
    }
}

/// @notice Drop-in replacement for NFTStakingVaultDeployer that deploys the
/// non-custodial SoftStakingVault instead. Same `deploy` signature so the
/// factory source is untouched — the factory's `cooldownPeriod` arg is IGNORED
/// and replaced by the fixed 72h claim lock (per launch decision), and the
/// protocol treasury (StonkBroker treasury on Robinhood Chain) is burned in
/// here so the 5% activation-fee cut has a fixed destination.
contract SoftStakingVaultDeployer {
    uint256 public constant CLAIM_LOCK = 72 hours;
    address public constant PROTOCOL_TREASURY = 0xb668382cF44038a3E8140E789060F6A809787CDa;

    function deploy(address token, address collection, uint256, address admin) external returns (address) {
        return address(new SoftStakingVault(token, collection, CLAIM_LOCK, admin, PROTOCOL_TREASURY));
    }
}

contract NFTAMMVaultDeployer {
    function deploy(
        address token,
        address collection,
        address escrow,
        address treasury,
        address burnWallet,
        address stakingVault,
        uint256 tokensPerNFT,
        uint16 randomFeeBps,
        uint16 specificFeeBps
    ) external returns (address) {
        NFTAMMVault vault = new NFTAMMVault(
            token,
            collection,
            escrow,
            treasury,
            burnWallet,
            stakingVault,
            tokensPerNFT,
            randomFeeBps,
            specificFeeBps
        );
        vault.grantRole(vault.DEFAULT_ADMIN_ROLE(), msg.sender);
        vault.grantRole(vault.PAUSER_ROLE(), msg.sender);
        vault.renounceRole(vault.DEFAULT_ADMIN_ROLE(), address(this));
        return address(vault);
    }
}

contract LoanVaultDeployer {
    function deploy(
        address token,
        address collection,
        address escrow,
        address ammVault,
        address stakingVault,
        uint256 tokensPerNFT,
        uint16 borrowAPYBps,
        uint64 minDuration,
        uint64 maxDuration,
        uint64 gracePeriod,
        uint16 liquidationIncentiveBps,
        uint8 maxActiveLoansPerWallet,
        address admin
    ) external returns (address) {
        return address(
            new LoanVault(
                token,
                collection,
                escrow,
                ammVault,
                stakingVault,
                tokensPerNFT,
                borrowAPYBps,
                minDuration,
                maxDuration,
                gracePeriod,
                liquidationIncentiveBps,
                maxActiveLoansPerWallet,
                admin
            )
        );
    }
}

contract ERC1155AMMVaultDeployer {
    function deploy(
        address token,
        address collection,
        address escrow,
        address treasury,
        address stakingVault,
        uint256 tokensPerNFT,
        uint16 randomFeeBps,
        uint16 specificFeeBps
    ) external returns (address) {
        ERC1155AMMVault vault = new ERC1155AMMVault(
            token,
            collection,
            escrow,
            treasury,
            stakingVault,
            tokensPerNFT,
            randomFeeBps,
            specificFeeBps
        );
        vault.grantRole(vault.DEFAULT_ADMIN_ROLE(), msg.sender);
        vault.grantRole(vault.PAUSER_ROLE(), msg.sender);
        vault.renounceRole(vault.DEFAULT_ADMIN_ROLE(), address(this));
        return address(vault);
    }
}

contract MarketGovernorDeployer {
    function deploy(address token, address governedContract, address treasury, uint256 proposalFee, address admin)
        external
        returns (address)
    {
        return address(new MarketGovernor(token, governedContract, treasury, proposalFee, admin));
    }
}