ETH Price: $1,894.34 (-0.85%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

Advanced mode:
Parent Transaction Hash Method Block
From
To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Utilities

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion
File 1 of 3 : Utilities.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

import "./interfaces/IRewards.sol";
import "./interfaces/ITokenLocker.sol";

/*
This is a utility library which is mainly used for off chain calculations
*/
contract Utilities{

    address public immutable cvxprismaStaking;
    address public immutable prismaLocker;
    address public immutable voteproxy;

    constructor(address _voteproxy, address _prismaLocker, address _staking) {
        voteproxy = _voteproxy;
        prismaLocker = _prismaLocker;
        cvxprismaStaking = _staking;
    }

    function lockedPrisma() external view returns(uint256){
        (uint256 lockedAmount,) = ITokenLocker(prismaLocker).getAccountBalances(voteproxy);
        return lockedAmount * ITokenLocker(prismaLocker).lockToTokenRatio();
    }


    //get apr with given rates and prices
    function apr(uint256 _rate, uint256 _priceOfReward, uint256 _priceOfDeposit) external pure returns(uint256 _apr){
        return _rate * 365 days * _priceOfReward / _priceOfDeposit; 
    }

    //get reward rates for each token based on weighted reward group supply and wrapper's boosted cvxcrv rates
    //%return = rate * timeFrame * price of reward / price of LP / 1e18
    function stakingRewardRates() external view returns (address[] memory tokens, uint256[] memory rates) {

        //get staked supply
        uint256 stakedSupply = IRewards(cvxprismaStaking).totalSupply();

        uint256 rewardTokens = IRewards(cvxprismaStaking).rewardTokenLength();

        tokens = new address[](rewardTokens);
        rates = new uint256[](rewardTokens);

        //loop through all reward contracts
        for (uint256 i = 0; i < rewardTokens; i++) {
            //get token
            tokens[i] = IRewards(cvxprismaStaking).rewardTokens(i);

            //get rate
            (uint256 periodFinish , uint256 rate, , ) = IRewards(cvxprismaStaking).rewardData(tokens[i]);
            
            if(block.timestamp > periodFinish){
                rate = 0;
            }

            //rate per 1 staked lp
            if(stakedSupply > 0){
                rate = rate * 1e18 / stakedSupply;
            }
            
            rates[i] = rate;
        }
    }
}

File 2 of 3 : ITokenLocker.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

interface ITokenLocker {
    struct LockData {
        uint amount;
        uint weeksToUnlock;
    }

    function lock(address _account, uint256 _amount, uint256 _weeks) external returns (bool);
    function withdrawExpiredLocks(uint256 _weeks) external returns (bool);
    function withdrawWithPenalty(uint amountToWithdraw) external returns (uint);

    function getAccountBalances(address account) external view returns (uint256 locked, uint256 unlocked);
    function getAccountActiveLocks(
        address account,
        uint minWeeks
    ) external view returns (LockData[] memory lockData, uint frozenAmount);

    function getAccountWeightAt(address account, uint week) external view returns (uint256);

    function getTotalWeightAt(uint week) external view returns (uint256);

    function getWithdrawWithPenaltyAmounts(address account, uint amountToWithdraw) external view returns (uint amountWithdrawn, uint penaltyAmountPaid);

    function lockToTokenRatio() external view returns (uint256);

    function freeze() external;
}

File 3 of 3 : IRewards.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

interface IRewards{

    struct EarnedData {
        address token;
        uint256 amount;
    }
    
    function initialize(uint256 _pid, bool _startActive) external;
    function addReward(address _rewardsToken, address _distributor) external;
    function approveRewardDistributor(
        address _rewardsToken,
        address _distributor,
        bool _approved
    ) external;
    function deposit(address _owner, uint256 _amount) external;
    function withdraw(address _owner, uint256 _amount) external;
    function getReward(address _forward) external;
    function notifyRewardAmount(address _rewardsToken, uint256 _reward) external;
    function balanceOf(address account) external view returns (uint256);
    function claimableRewards(address _account) external view returns(EarnedData[] memory userRewards);
    function rewardTokens(uint256 _rid) external view returns (address);
    function rewardTokenLength() external view returns(uint256);
    function rewardData(address _token) external view returns(uint256 periodFinish, uint256 rewardRate, uint256 lastUpdate, uint256 rewardPerTokenStored);
    function totalSupply() external view returns(uint256);
    function active() external view returns(bool);
}

Settings
{
  "remappings": [],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "evmVersion": "paris",
  "libraries": {},
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_voteproxy","type":"address"},{"internalType":"address","name":"_prismaLocker","type":"address"},{"internalType":"address","name":"_staking","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"_rate","type":"uint256"},{"internalType":"uint256","name":"_priceOfReward","type":"uint256"},{"internalType":"uint256","name":"_priceOfDeposit","type":"uint256"}],"name":"apr","outputs":[{"internalType":"uint256","name":"_apr","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"cvxprismaStaking","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockedPrisma","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prismaLocker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingRewardRates","outputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"rates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"voteproxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60e060405234801561001057600080fd5b5060405161095f38038061095f83398101604081905261002f91610068565b6001600160a01b0392831660c05290821660a052166080526100ab565b80516001600160a01b038116811461006357600080fd5b919050565b60008060006060848603121561007d57600080fd5b6100868461004c565b92506100946020850161004c565b91506100a26040850161004c565b90509250925092565b60805160a05160c05161085661010960003960008181606c015261050701526000818160d10152818161053401526105a301526000818161010e0152818161016d015281816101f30152818161032001526103ca01526108566000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80634bca41421461006757806355c3065a146100ab5780635862d907146100cc5780636f690cba146100f3578063b2b1615514610109578063b43156d514610130575b600080fd5b61008e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100be6100b9366004610633565b610138565b6040519081526020016100a2565b61008e7f000000000000000000000000000000000000000000000000000000000000000081565b6100fb610166565b6040516100a292919061065f565b61008e7f000000000000000000000000000000000000000000000000000000000000000081565b6100be6104f0565b6000818361014a866301e133806106f9565b61015491906106f9565b61015e9190610716565b949350505050565b60608060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101ed9190610738565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663857cb94a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561024f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102739190610738565b90508067ffffffffffffffff81111561028e5761028e610751565b6040519080825280602002602001820160405280156102b7578160200160208202803683370190505b5093508067ffffffffffffffff8111156102d3576102d3610751565b6040519080825280602002602001820160405280156102fc578160200160208202803683370190505b50925060005b818110156104e957604051637bb7bed160e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690637bb7bed190602401602060405180830381865afa15801561036f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103939190610767565b8582815181106103a5576103a5610797565b60200260200101906001600160a01b031690816001600160a01b0316815250506000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166348e5d9f888858151811061040957610409610797565b60200260200101516040518263ffffffff1660e01b815260040161043c91906001600160a01b0391909116815260200190565b608060405180830381865afa158015610459573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047d91906107ad565b5050915091508142111561048f575060005b84156104b557846104a882670de0b6b3a76400006106f9565b6104b29190610716565b90505b808684815181106104c8576104c8610797565b602002602001018181525050505080806104e1906107e3565b915050610302565b5050509091565b6040516367a5b10b60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260009182917f000000000000000000000000000000000000000000000000000000000000000016906367a5b10b906024016040805180830381865afa15801561057a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059e91906107fc565b5090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c5438b1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106239190610738565b61062d90826106f9565b91505090565b60008060006060848603121561064857600080fd5b505081359360208301359350604090920135919050565b604080825283519082018190526000906020906060840190828701845b828110156106a15781516001600160a01b03168452928401929084019060010161067c565b5050508381038285015284518082528583019183019060005b818110156106d6578351835292840192918401916001016106ba565b5090979650505050505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610710576107106106e3565b92915050565b60008261073357634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561074a57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561077957600080fd5b81516001600160a01b038116811461079057600080fd5b9392505050565b634e487b7160e01b600052603260045260246000fd5b600080600080608085870312156107c357600080fd5b505082516020840151604085015160609095015191969095509092509050565b6000600182016107f5576107f56106e3565b5060010190565b6000806040838503121561080f57600080fd5b50508051602090910151909290915056fea26469706673582212203dbf2c4eac9ea6cee3a24f228d88fc011fc1d14cb4d3b732f4e6e21cd31c2dcb64736f6c634300081300330000000000000000000000008ad7a9e2b3cd9214f36cb871336d8ab34ddfdd5b0000000000000000000000003f78544364c3eccdce4d9c89a630aea26122829d0000000000000000000000000c73f1cfd5c9dfc150c8707aa47acbd14f0be108

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100625760003560e01c80634bca41421461006757806355c3065a146100ab5780635862d907146100cc5780636f690cba146100f3578063b2b1615514610109578063b43156d514610130575b600080fd5b61008e7f0000000000000000000000008ad7a9e2b3cd9214f36cb871336d8ab34ddfdd5b81565b6040516001600160a01b0390911681526020015b60405180910390f35b6100be6100b9366004610633565b610138565b6040519081526020016100a2565b61008e7f0000000000000000000000003f78544364c3eccdce4d9c89a630aea26122829d81565b6100fb610166565b6040516100a292919061065f565b61008e7f0000000000000000000000000c73f1cfd5c9dfc150c8707aa47acbd14f0be10881565b6100be6104f0565b6000818361014a866301e133806106f9565b61015491906106f9565b61015e9190610716565b949350505050565b60608060007f0000000000000000000000000c73f1cfd5c9dfc150c8707aa47acbd14f0be1086001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101ed9190610738565b905060007f0000000000000000000000000c73f1cfd5c9dfc150c8707aa47acbd14f0be1086001600160a01b031663857cb94a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561024f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102739190610738565b90508067ffffffffffffffff81111561028e5761028e610751565b6040519080825280602002602001820160405280156102b7578160200160208202803683370190505b5093508067ffffffffffffffff8111156102d3576102d3610751565b6040519080825280602002602001820160405280156102fc578160200160208202803683370190505b50925060005b818110156104e957604051637bb7bed160e01b8152600481018290527f0000000000000000000000000c73f1cfd5c9dfc150c8707aa47acbd14f0be1086001600160a01b031690637bb7bed190602401602060405180830381865afa15801561036f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103939190610767565b8582815181106103a5576103a5610797565b60200260200101906001600160a01b031690816001600160a01b0316815250506000807f0000000000000000000000000c73f1cfd5c9dfc150c8707aa47acbd14f0be1086001600160a01b03166348e5d9f888858151811061040957610409610797565b60200260200101516040518263ffffffff1660e01b815260040161043c91906001600160a01b0391909116815260200190565b608060405180830381865afa158015610459573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047d91906107ad565b5050915091508142111561048f575060005b84156104b557846104a882670de0b6b3a76400006106f9565b6104b29190610716565b90505b808684815181106104c8576104c8610797565b602002602001018181525050505080806104e1906107e3565b915050610302565b5050509091565b6040516367a5b10b60e01b81526001600160a01b037f0000000000000000000000008ad7a9e2b3cd9214f36cb871336d8ab34ddfdd5b8116600483015260009182917f0000000000000000000000003f78544364c3eccdce4d9c89a630aea26122829d16906367a5b10b906024016040805180830381865afa15801561057a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059e91906107fc565b5090507f0000000000000000000000003f78544364c3eccdce4d9c89a630aea26122829d6001600160a01b031663c5438b1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106239190610738565b61062d90826106f9565b91505090565b60008060006060848603121561064857600080fd5b505081359360208301359350604090920135919050565b604080825283519082018190526000906020906060840190828701845b828110156106a15781516001600160a01b03168452928401929084019060010161067c565b5050508381038285015284518082528583019183019060005b818110156106d6578351835292840192918401916001016106ba565b5090979650505050505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610710576107106106e3565b92915050565b60008261073357634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561074a57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561077957600080fd5b81516001600160a01b038116811461079057600080fd5b9392505050565b634e487b7160e01b600052603260045260246000fd5b600080600080608085870312156107c357600080fd5b505082516020840151604085015160609095015191969095509092509050565b6000600182016107f5576107f56106e3565b5060010190565b6000806040838503121561080f57600080fd5b50508051602090910151909290915056fea26469706673582212203dbf2c4eac9ea6cee3a24f228d88fc011fc1d14cb4d3b732f4e6e21cd31c2dcb64736f6c63430008130033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000008ad7a9e2b3cd9214f36cb871336d8ab34ddfdd5b0000000000000000000000003f78544364c3eccdce4d9c89a630aea26122829d0000000000000000000000000c73f1cfd5c9dfc150c8707aa47acbd14f0be108

-----Decoded View---------------
Arg [0] : _voteproxy (address): 0x8ad7a9e2B3Cd9214f36Cb871336d8ab34DdFdD5b
Arg [1] : _prismaLocker (address): 0x3f78544364c3eCcDCe4d9C89a630AEa26122829d
Arg [2] : _staking (address): 0x0c73f1cFd5C9dFc150C8707Aa47Acbd14F0BE108

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000008ad7a9e2b3cd9214f36cb871336d8ab34ddfdd5b
Arg [1] : 0000000000000000000000003f78544364c3eccdce4d9c89a630aea26122829d
Arg [2] : 0000000000000000000000000c73f1cfd5c9dfc150c8707aa47acbd14f0be108


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.