Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Utilities
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// 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;
}
}
}// 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;
}// 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);
}{
"remappings": [],
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "paris",
"libraries": {},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
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"}]Contract Creation Code
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
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.