ETH Price: $2,179.01 (+2.38%)

Contract

0xC4EF2c4B4eD79CD7639AF070d4a6A82eEF5edd4f
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
Age
From
To

There are no matching entries

Please try again later

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PufMVTRateProvider

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
Yes with 100 runs

Other Settings:
cancun EvmVersion
File 1 of 6 : PufMVTRateProvider.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
import {IPufEth} from "./IPufEth.sol";
import {IStEth} from "./IStEth.sol";
import {ICurveStableSwapNG} from "./ICurveStableSwapNG.sol";
import {IRateProvider} from "./IRateProvider.sol";
import {FixedPointMathLib} from "solady/utils/FixedPointMathLib.sol";
contract PufMVTRateProvider is IRateProvider {
error RateProvider__InvalidParam();
uint256 private constant PRECISION = 1e18;
address private constant PUFETH = 0xD9A442856C234a39a81a089C06451EBAa4306a72;
address private constant STETH = 0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84;
address private constant WSTETH = 0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0;
address private constant PUFETH_WSTETH_CURVE = 0xEEda34A377dD0ca676b9511EE1324974fA8d980D;
address private constant WETH_PUFETH_CURVE = 0x39F5b252dE249790fAEd0C2F05aBead56D2088e1;
function rate(address token_) external view returns (uint256) {
if (token_ == PUFETH) {
return IPufEth(PUFETH).previewRedeem(1e18);
} else if (token_ == PUFETH_WSTETH_CURVE) {
return _curveLpTokenClFeed(token_);
} else if (token_ == WETH_PUFETH_CURVE) {
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 2 of 6 : IPufEth.sol
1
2
3
4
5
6
7
8
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
interface IPufEth {
function previewRedeem(uint256 shares) external view returns (uint256);
function totalAssets() external view returns (uint256);
function totalSupply() external view returns (uint256);
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 3 of 6 : IStEth.sol
1
2
3
4
5
6
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
interface IStEth {
function getPooledEthByShares(uint256 _shares) external view returns (uint256);
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 4 of 6 : ICurveStableSwapNG.sol
1
2
3
4
5
6
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
interface ICurveStableSwapNG {
function get_virtual_price() external view returns (uint256);
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 5 of 6 : IRateProvider.sol
1
2
3
4
5
6
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface IRateProvider {
function rate(address token) external view returns (uint256);
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 6 of 6 : FixedPointMathLib.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
/// @notice Arithmetic library with operations for fixed-point numbers.
/// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/FixedPointMathLib.sol)
/// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/FixedPointMathLib.sol)
library FixedPointMathLib {
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* CUSTOM ERRORS */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @dev The operation failed, as the output exceeds the maximum value of uint256.
error ExpOverflow();
/// @dev The operation failed, as the output exceeds the maximum value of uint256.
error FactorialOverflow();
/// @dev The operation failed, due to an overflow.
error RPowOverflow();
/// @dev The mantissa is too big to fit.
error MantissaOverflow();
/// @dev The operation failed, due to an multiplication overflow.
error MulWadFailed();
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Settings
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
"remappings": [
"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
"ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/",
"erc4626-tests/=lib/erc4626-tests/",
"forge-std/=lib/forge-std/src/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/",
"solady/=lib/solady/src/"
],
"optimizer": {
"enabled": true,
"runs": 100
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Contract Security Audit

Contract ABI

API
[{"inputs":[],"name":"RateProvider__InvalidParam","type":"error"},{"inputs":[{"internalType":"address","name":"token_","type":"address"}],"name":"rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

6080806040523461001657610484908161001b8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c630ba9d8ca14610024575f80fd5b3461005b57602036600319011261005b576004356001600160a01b038116810361005b57610053602091610095565b604051908152f35b5f80fd5b90601f8019910116810190811067ffffffffffffffff82111761008157604052565b634e487b7160e01b5f52604160045260245ffd5b73d9a442856c234a39a81a089c06451ebaa4306a72906001600160a01b03811682810361012f57505060206024916040519283809263266d6a8360e11b8252670de0b6b3a764000060048301525afa908115610124575f916100f5575090565b90506020813d60201161011c575b816101106020938361005f565b8101031261005b575190565b3d9150610103565b6040513d5f823e3d90fd5b90915073eeda34a377dd0ca676b9511ee1324974fa8d980d810361015a5750610157906101b6565b90565b7339f5b252de249790faed0c2f05abead56d2088e10361017d57610157906101b6565b6040516338a3c0cf60e01b8152600490fd5b818102929181159184041417156101a257565b634e487b7160e01b5f52601160045260245ffd5b73eeda34a377dd0ca676b9511ee1324974fa8d980d906001600160a01b031681810361034f575060409081518091630176f71760e71b825281600460209485935afa908115610345575f91610318575b508251630f451f7160e31b8152670de0b6b3a76400006004820181905293838260248173ae7ab96520de3a18e5e111b5eaab095312d7fe845afa91821561030e575f926102df575b50805163266d6a8360e11b81526004810186905293808560248173d9a442856c234a39a81a089c06451ebaa4306a725afa9182156102d657505f916102a6575b506102a2935081811090821802189061018f565b0490565b905083813d83116102cf575b6102bc818361005f565b8101031261005b576102a292515f61028e565b503d6102b2565b513d5f823e3d90fd5b9091508381813d8311610307575b6102f7818361005f565b8101031261005b5751905f61024e565b503d6102ed565b50513d5f823e3d90fd5b90508181813d831161033e575b61032f818361005f565b8101031261005b57515f610206565b503d610325565b83513d5f823e3d90fd5b7339f5b252de249790faed0c2f05abead56d2088e19150810361017d576040518091630176f71760e71b825281600460209485935afa908115610124575f91610421575b506040519063266d6a8360e11b8252670de0b6b3a764000092836004840152808360248173d9a442856c234a39a81a089c06451ebaa4306a725afa908115610124575f916103f1575b506102a292508381109084180283189061018f565b905082813d831161041a575b610407818361005f565b8101031261005b576102a291515f6103dc565b503d6103fd565b90508181813d8311610447575b610438818361005f565b8101031261005b57515f610393565b503d61042e56fea264697066735822122069164f5b389c43822b11165cc406e9e71100016067291d3917df247781ef8dee64736f6c63430008180033

Deployed Bytecode

0x60806040526004361015610011575f80fd5b5f3560e01c630ba9d8ca14610024575f80fd5b3461005b57602036600319011261005b576004356001600160a01b038116810361005b57610053602091610095565b604051908152f35b5f80fd5b90601f8019910116810190811067ffffffffffffffff82111761008157604052565b634e487b7160e01b5f52604160045260245ffd5b73d9a442856c234a39a81a089c06451ebaa4306a72906001600160a01b03811682810361012f57505060206024916040519283809263266d6a8360e11b8252670de0b6b3a764000060048301525afa908115610124575f916100f5575090565b90506020813d60201161011c575b816101106020938361005f565b8101031261005b575190565b3d9150610103565b6040513d5f823e3d90fd5b90915073eeda34a377dd0ca676b9511ee1324974fa8d980d810361015a5750610157906101b6565b90565b7339f5b252de249790faed0c2f05abead56d2088e10361017d57610157906101b6565b6040516338a3c0cf60e01b8152600490fd5b818102929181159184041417156101a257565b634e487b7160e01b5f52601160045260245ffd5b73eeda34a377dd0ca676b9511ee1324974fa8d980d906001600160a01b031681810361034f575060409081518091630176f71760e71b825281600460209485935afa908115610345575f91610318575b508251630f451f7160e31b8152670de0b6b3a76400006004820181905293838260248173ae7ab96520de3a18e5e111b5eaab095312d7fe845afa91821561030e575f926102df575b50805163266d6a8360e11b81526004810186905293808560248173d9a442856c234a39a81a089c06451ebaa4306a725afa9182156102d657505f916102a6575b506102a2935081811090821802189061018f565b0490565b905083813d83116102cf575b6102bc818361005f565b8101031261005b576102a292515f61028e565b503d6102b2565b513d5f823e3d90fd5b9091508381813d8311610307575b6102f7818361005f565b8101031261005b5751905f61024e565b503d6102ed565b50513d5f823e3d90fd5b90508181813d831161033e575b61032f818361005f565b8101031261005b57515f610206565b503d610325565b83513d5f823e3d90fd5b7339f5b252de249790faed0c2f05abead56d2088e19150810361017d576040518091630176f71760e71b825281600460209485935afa908115610124575f91610421575b506040519063266d6a8360e11b8252670de0b6b3a764000092836004840152808360248173d9a442856c234a39a81a089c06451ebaa4306a725afa908115610124575f916103f1575b506102a292508381109084180283189061018f565b905082813d831161041a575b610407818361005f565b8101031261005b576102a291515f6103dc565b503d6103fd565b90508181813d8311610447575b610438818361005f565b8101031261005b57515f610393565b503d61042e56fea264697066735822122069164f5b389c43822b11165cc406e9e71100016067291d3917df247781ef8dee64736f6c63430008180033

Block Age Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Age Amount
View All Withdrawals

Transaction Hash Block Age 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.