Address Contract Verified
Address
0xE48E7F98911D0311A0FcCC5b0ff3f3f412BaD16C
Balance
0 ETH
Nonce
1
Code Size
2556 bytes
Creator
0x4EC7b668...45Be at tx 0x4b50580a...7ca9c4
Indexed Transactions
1 (24,420,869 → 24,420,869)
Gas Used (indexed)
846,204
Contract Bytecode
2556 bytes
0x608060405234801561001057600080fd5b50600436106100a35760003560e01c80639dc1056611610076578063e6aa216c1161005b578063e6aa216c1461018c578063f3190c891461018c578063f763f7a6146101ce57600080fd5b80639dc10566146101b1578063abd5f95d146101b957600080fd5b806320e44e43146100a8578063679aefce1461016c5780637d7c2a1c146101825780638e7bfbc01461018c575b600080fd5b600054604080517f000000000000000000000000000000000000000000000000000000000000000a81527f0000000000000000000000000000000000000000000000000000000000015f9060208201527b0100000000000000000000000000000000000000000000000000000090920464ffffffffff16908201527f000000000000000000000000387dbc0fb00b26fb085aa658527d5be98302c84c73ffffffffffffffffffffffffffffffffffffffff1660608201526080015b60405180910390f35b6101746101d6565b604051908152602001610163565b61018a610228565b005b6000547affffffffffffffffffffffffffffffffffffffffffffffffffffff16610174565b6101746103c5565b6101c161043a565b60405161016391906107bc565b610174610449565b6000805461020690633b9aca00907affffffffffffffffffffffffffffffffffffffffffffffffffffff16610886565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff16905090565b600080547affffffffffffffffffffffffffffffffffffffffffffffffffffff16906102526105b8565b905080600003610297576040517fc82fc46500000000000000000000000000000000000000000000000000000000815261ebc260048201526024015b60405180910390fd5b6000818311156102bf5782828403620f424002816102b7576102b7610828565b0490506102e1565b828211156102e15782838303620f424002816102dd576102dd610828565b0490505b7f000000000000000000000000000000000000000000000000000000000000000a81101561033f576040517fc82fc46500000000000000000000000000000000000000000000000000000000815261ebc1600482015260240161028e565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff82167b010000000000000000000000000000000000000000000000000000004264ffffffffff16021760005560408051848152602081018490527f95f03a932c8aced8238058ac39deeaf30f8ddcbf42ade5ad3ada32f0d1338a08910160405180910390a1505050565b600080547affffffffffffffffffffffffffffffffffffffffffffffffffffff16816103ef6105b8565b9050808211156104175781818303620f4240028161040f5761040f610828565b049250505090565b818111156104355781828203620f4240028161040f5761040f610828565b505090565b6060610444610657565b905090565b6000805442906104a0907f0000000000000000000000000000000000000000000000000000000000015f90907b01000000000000000000000000000000000000000000000000000000900464ffffffffff166108e7565b101561059457600080547affffffffffffffffffffffffffffffffffffffffffffffffffffff16906104d06105b8565b905080600003610510576040517fc82fc46500000000000000000000000000000000000000000000000000000000815261ebc2600482015260240161028e565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff81167b010000000000000000000000000000000000000000000000000000004264ffffffffff16021760005560408051838152602081018390527f95f03a932c8aced8238058ac39deeaf30f8ddcbf42ade5ad3ada32f0d1338a08910160405180910390a150505b506000547affffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b60007f000000000000000000000000387dbc0fb00b26fb085aa658527d5be98302c84c73ffffffffffffffffffffffffffffffffffffffff1663679aefce6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610625573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106499190610900565b61044490633b9aca00610919565b606060005b6020811080156106c257507f455a455448203c3e204554482065786368616e67652072617465000000000000816020811061069957610699610930565b1a60f81b7fff000000000000000000000000000000000000000000000000000000000000001615155b156106d957806106d18161095f565b91505061065c565b60008167ffffffffffffffff8111156106f4576106f4610997565b6040519080825280601f01601f19166020018201604052801561071e576020820181803683370190505b50905060005b828110156107b5577f455a455448203c3e204554482065786368616e67652072617465000000000000816020811061075e5761075e610930565b1a60f81b82828151811061077457610774610930565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806107ad8161095f565b915050610724565b5092915050565b600060208083528351808285015260005b818110156107e9578581018301518582016040015282016107cd565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007affffffffffffffffffffffffffffffffffffffffffffffffffffff808416806108db577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b808201808211156108fa576108fa610857565b92915050565b60006020828403121561091257600080fd5b5051919050565b80820281158282048414176108fa576108fa610857565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361099057610990610857565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea26469706673582212200da40a02233b5a766b8f81879edaae55cc358fea641b88a3638d1795aaf4704b64736f6c63430008150033
Verified Source Code Full Match
Compiler: v0.8.21+commit.d9974bed
EVM: paris
Optimization: Yes (10000000 runs)
main.sol 26 lines
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.21;
import { IEZETHBalancerRateProvider } from "../../interfaces/external/IEZETHBalancerRateProvider.sol";
import { FluidContractRate } from "../../fluidContractRate.sol";
/// @notice This contract stores the rate of ETH for 1 ezETH in intervals to optimize gas cost.
/// @notice Properly implements all interfaces for use as IFluidCenterPrice and IFluidOracle.
/// @dev EZETH BalancerRateProvider contract; 0x387dbc0fb00b26fb085aa658527d5be98302c84c
contract EZETHContractRate is IEZETHBalancerRateProvider, FluidContractRate {
constructor(
string memory infoName_,
address rateSource_,
uint256 minUpdateDiffPercent_,
uint256 minHeartBeat_
) FluidContractRate(infoName_, rateSource_, minUpdateDiffPercent_, minHeartBeat_) {}
function _getNewRate1e27() internal view virtual override returns (uint256 exchangeRate_) {
return IEZETHBalancerRateProvider(_RATE_SOURCE).getRate() * 1e9; // scale to 1e27
}
/// @inheritdoc IEZETHBalancerRateProvider
function getRate() external view override returns (uint256) {
return _rate / 1e9; // scale to 1e18
}
}
error.sol 6 lines
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.21;
contract Error {
error FluidOracleError(uint256 errorId_);
}
errorTypes.sol 230 lines
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.21;
library ErrorTypes {
/***********************************|
| FluidOracleL2 |
|__________________________________*/
/// @notice thrown when sequencer on a L2 has an outage and grace period has not yet passed.
uint256 internal constant FluidOracleL2__SequencerOutage = 60000;
/***********************************|
| UniV3CheckCLRSOracle |
|__________________________________*/
/// @notice thrown when the delta between main price source and check rate source is exceeding the allowed delta
uint256 internal constant UniV3CheckCLRSOracle__InvalidPrice = 60001;
/// @notice thrown when an invalid parameter is passed to a method
uint256 internal constant UniV3CheckCLRSOracle__InvalidParams = 60002;
/// @notice thrown when the exchange rate is zero, even after all possible fallbacks depending on config
uint256 internal constant UniV3CheckCLRSOracle__ExchangeRateZero = 60003;
/***********************************|
| FluidOracle |
|__________________________________*/
/// @notice thrown when an invalid info name is passed into a fluid oracle (e.g. not set or too long)
uint256 internal constant FluidOracle__InvalidInfoName = 60010;
/***********************************|
| sUSDe Oracle |
|__________________________________*/
/// @notice thrown when an invalid parameter is passed to a method
uint256 internal constant SUSDeOracle__InvalidParams = 60102;
/***********************************|
| Pendle Oracle |
|__________________________________*/
/// @notice thrown when an invalid parameter is passed to a method
uint256 internal constant PendleOracle__InvalidParams = 60201;
/// @notice thrown when the Pendle market Oracle has not been initialized yet
uint256 internal constant PendleOracle__MarketNotInitialized = 60202;
/// @notice thrown when the Pendle market does not have 18 decimals
uint256 internal constant PendleOracle__MarketInvalidDecimals = 60203;
/// @notice thrown when the Pendle market returns an unexpected price
uint256 internal constant PendleOracle__InvalidPrice = 60204;
/***********************************|
| CLRS2UniV3CheckCLRSOracleL2 |
|__________________________________*/
/// @notice thrown when the exchange rate is zero, even after all possible fallbacks depending on config
uint256 internal constant CLRS2UniV3CheckCLRSOracleL2__ExchangeRateZero = 60301;
/***********************************|
| Ratio2xFallbackCLRSOracleL2 |
|__________________________________*/
/// @notice thrown when the exchange rate is zero, even after all possible fallbacks depending on config
uint256 internal constant Ratio2xFallbackCLRSOracleL2__ExchangeRateZero = 60311;
/***********************************|
| WeETHsOracle |
|__________________________________*/
/// @notice thrown when an invalid parameter is passed to a method
uint256 internal constant WeETHsOracle__InvalidParams = 60321;
/***********************************|
| DexSmartColOracle |
|__________________________________*/
/// @notice thrown when an invalid parameter is passed to a method
uint256 internal constant DexSmartColOracle__InvalidParams = 60331;
/// @notice thrown when smart col is not enabled
uint256 internal constant DexSmartColOracle__SmartColNotEnabled = 60332;
/// @notice thrown when the exchange rate is zero, even after all possible fallbacks depending on config
uint256 internal constant DexSmartColOracle__ExchangeRateZero = 60333;
/***********************************|
| DexSmartDebtOracle |
|__________________________________*/
/// @notice thrown when an invalid parameter is passed to a method
uint256 internal constant DexSmartDebtOracle__InvalidParams = 60341;
/// @notice thrown when smart debt is not enabled
uint256 internal constant DexSmartDebtOracle__SmartDebtNotEnabled = 60342;
/// @notice thrown when the exchange rate is zero, even after all possible fallbacks depending on config
uint256 internal constant DexSmartDebtOracle__ExchangeRateZero = 60343;
/***********************************|
| ContractRate |
|__________________________________*/
/// @notice thrown when an invalid parameter is passed to a method
uint256 internal constant ContractRate__InvalidParams = 60351;
/// @notice thrown when caller is not authorized
uint256 internal constant ContractRate__Unauthorized = 60352;
/// @notice thrown when minimum diff for triggering update on the stared rate is not reached
uint256 internal constant ContractRate__MinUpdateDiffNotReached = 60353;
/// @notice thrown when the external rate source returns 0 for the new rate
uint256 internal constant ContractRate__NewRateZero = 60354;
/***********************************|
| sUSDs Oracle |
|__________________________________*/
/// @notice thrown when an invalid parameter is passed to a method
uint256 internal constant SUSDsOracle__InvalidParams = 60361;
/***********************************|
| Peg Oracle |
|__________________________________*/
/// @notice thrown when an invalid parameter is passed to a method
uint256 internal constant PegOracle__InvalidParams = 60371;
/***********************************|
| DexOracle |
|__________________________________*/
/// @notice thrown when an invalid parameter is passed to a method
uint256 internal constant DexOracle__InvalidParams = 60381;
/// @notice thrown when the exchange rate is zero, even after all possible fallbacks depending on config
uint256 internal constant DexOracle__ExchangeRateZero = 60382;
/***********************************|
| GenericOracle |
|__________________________________*/
/// @notice thrown when an invalid parameter is passed to a method
uint256 internal constant GenericOracle__InvalidParams = 60401;
/// @notice thrown when reaching an unexepcted config state
uint256 internal constant GenericOracle__UnexpectedConfig = 60402;
/// @notice thrown when the exchange rate is zero
uint256 internal constant GenericOracle__RateZero = 60403;
/***********************************|
| Chainlink Oracle |
|__________________________________*/
/// @notice thrown when an invalid parameter is passed to a method
uint256 internal constant ChainlinkOracle__InvalidParams = 61001;
/***********************************|
| UniswapV3 Oracle |
|__________________________________*/
/// @notice thrown when an invalid parameter is passed to a method
uint256 internal constant UniV3Oracle__InvalidParams = 62001;
/// @notice thrown when constructor is called with invalid ordered seconds agos values
uint256 internal constant UniV3Oracle__InvalidSecondsAgos = 62002;
/// @notice thrown when constructor is called with invalid delta values > 100%
uint256 internal constant UniV3Oracle__InvalidDeltas = 62003;
/***********************************|
| WstETh Oracle |
|__________________________________*/
/// @notice thrown when an invalid parameter is passed to a method
uint256 internal constant WstETHOracle__InvalidParams = 63001;
/***********************************|
| Redstone Oracle |
|__________________________________*/
/// @notice thrown when an invalid parameter is passed to a method
uint256 internal constant RedstoneOracle__InvalidParams = 64001;
/***********************************|
| Fallback Oracle |
|__________________________________*/
/// @notice thrown when an invalid parameter is passed to a method
uint256 internal constant FallbackOracle__InvalidParams = 65001;
/***********************************|
| FallbackCLRSOracle |
|__________________________________*/
/// @notice thrown when the exchange rate is zero, even for the fallback oracle source (if enabled)
uint256 internal constant FallbackCLRSOracle__ExchangeRateZero = 66001;
/***********************************|
| WstETHCLRSOracle |
|__________________________________*/
/// @notice thrown when the exchange rate is zero, even for the fallback oracle source (if enabled)
uint256 internal constant WstETHCLRSOracle__ExchangeRateZero = 67001;
/***********************************|
| CLFallbackUniV3Oracle |
|__________________________________*/
/// @notice thrown when the exchange rate is zero, even for the uniV3 rate
uint256 internal constant CLFallbackUniV3Oracle__ExchangeRateZero = 68001;
/***********************************|
| WstETHCLRS2UniV3CheckCLRSOracle |
|__________________________________*/
/// @notice thrown when the exchange rate is zero, even for the uniV3 rate
uint256 internal constant WstETHCLRS2UniV3CheckCLRSOracle__ExchangeRateZero = 69001;
/***********************************|
| WeETh Oracle |
|__________________________________*/
/// @notice thrown when an invalid parameter is passed to a method
uint256 internal constant WeETHOracle__InvalidParams = 70001;
}
fluidCenterPrice.sol 45 lines
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.21;
import { IFluidCenterPrice } from "./interfaces/iFluidCenterPrice.sol";
import { ErrorTypes } from "./errorTypes.sol";
import { Error as OracleError } from "./error.sol";
/// @title FluidCenterPrice
/// @notice Base contract that any Fluid Center Price must implement
abstract contract FluidCenterPrice is IFluidCenterPrice, OracleError {
/// @dev short helper string to easily identify the center price oracle. E.g. token symbols
//
// using a bytes32 because string can not be immutable.
bytes32 private immutable _infoName;
constructor(string memory infoName_) {
if (bytes(infoName_).length > 32 || bytes(infoName_).length == 0) {
revert FluidOracleError(ErrorTypes.FluidOracle__InvalidInfoName);
}
// convert string to bytes32
bytes32 infoNameBytes32_;
assembly {
infoNameBytes32_ := mload(add(infoName_, 32))
}
_infoName = infoNameBytes32_;
}
/// @inheritdoc IFluidCenterPrice
function infoName() public view virtual returns (string memory) {
// convert bytes32 to string
uint256 length_;
while (length_ < 32 && _infoName[length_] != 0) {
length_++;
}
bytes memory infoNameBytes_ = new bytes(length_);
for (uint256 i; i < length_; i++) {
infoNameBytes_[i] = _infoName[i];
}
return string(infoNameBytes_);
}
/// @inheritdoc IFluidCenterPrice
function centerPrice() external virtual returns (uint256 price_);
}
fluidContractRate.sol 156 lines
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.21;
import { IFluidOracle } from "./interfaces/iFluidOracle.sol";
import { FluidCenterPrice } from "./fluidCenterPrice.sol";
import { Error as OracleError } from "./error.sol";
import { ErrorTypes } from "./errorTypes.sol";
abstract contract Events {
/// @notice emitted when rebalancer successfully changes the contract rate
event LogRebalanceRate(uint256 oldRate, uint256 newRate);
}
abstract contract Constants {
/// @dev external exchange rate source contract
address internal immutable _RATE_SOURCE;
/// @dev Minimum difference to trigger update in percent 1e4 decimals, 10000 = 1%
uint256 internal immutable _MIN_UPDATE_DIFF_PERCENT;
/// @dev Minimum time after which an update can trigger, even if it does not reach `_MIN_UPDATE_DIFF_PERCENT`
uint256 internal immutable _MIN_HEART_BEAT;
}
abstract contract Variables is Constants {
/// @dev exchange rate in 1e27 decimals
uint216 internal _rate;
/// @dev time when last update for rate happened
uint40 internal _lastUpdateTime;
}
/// @notice This contract stores an exchange rate in intervals to optimize gas cost.
/// @notice Properly implements all interfaces for use as IFluidCenterPrice and IFluidOracle.
abstract contract FluidContractRate is IFluidOracle, FluidCenterPrice, Variables, Events {
/// @dev Validates that an address is not the zero address
modifier validAddress(address value_) {
if (value_ == address(0)) {
revert FluidOracleError(ErrorTypes.ContractRate__InvalidParams);
}
_;
}
constructor(
string memory infoName_,
address rateSource_,
uint256 minUpdateDiffPercent_,
uint256 minHeartBeat_
) validAddress(rateSource_) FluidCenterPrice(infoName_) {
if (minUpdateDiffPercent_ == 0 || minUpdateDiffPercent_ > 1e5 || minHeartBeat_ == 0) {
// revert if > 10% or 0
revert FluidOracleError(ErrorTypes.ContractRate__InvalidParams);
}
_RATE_SOURCE = rateSource_;
_MIN_UPDATE_DIFF_PERCENT = minUpdateDiffPercent_;
_MIN_HEART_BEAT = minHeartBeat_;
_rate = uint216(_getNewRate1e27());
_lastUpdateTime = uint40(block.timestamp);
}
/// @dev read the exchange rate from the external contract e.g. wstETH or rsETH exchange rate, scaled to 1e27
/// To be implemented by inheriting contract
function _getNewRate1e27() internal view virtual returns (uint256 exchangeRate_);
/// @inheritdoc FluidCenterPrice
function infoName() public view override(IFluidOracle, FluidCenterPrice) returns (string memory) {
return super.infoName();
}
/// @inheritdoc IFluidOracle
function getExchangeRate() external view virtual returns (uint256 exchangeRate_) {
return _rate;
}
/// @inheritdoc IFluidOracle
function getExchangeRateOperate() external view virtual returns (uint256 exchangeRate_) {
return _rate;
}
/// @inheritdoc IFluidOracle
function getExchangeRateLiquidate() external view virtual returns (uint256 exchangeRate_) {
return _rate;
}
/// @notice Rebalance the contract rate by updating the stored rate with the current rate from the external contract.
/// @dev The rate is only updated if the difference between the current rate and the new rate is greater than or
/// equal to the minimum update difference percentage.
function rebalance() external {
uint256 curRate_ = _rate;
uint256 newRate_ = _getNewRate1e27();
if (newRate_ == 0) {
revert FluidOracleError(ErrorTypes.ContractRate__NewRateZero);
}
uint256 rateDiffPercent;
unchecked {
if (curRate_ > newRate_) {
rateDiffPercent = ((curRate_ - newRate_) * 1e6) / curRate_;
} else if (newRate_ > curRate_) {
rateDiffPercent = ((newRate_ - curRate_) * 1e6) / curRate_;
}
}
if (rateDiffPercent < _MIN_UPDATE_DIFF_PERCENT) {
revert FluidOracleError(ErrorTypes.ContractRate__MinUpdateDiffNotReached);
}
_rate = uint216(newRate_);
_lastUpdateTime = uint40(block.timestamp);
emit LogRebalanceRate(curRate_, newRate_);
}
/// @inheritdoc FluidCenterPrice
function centerPrice() external override returns (uint256 price_) {
// heart beat check update for Dex swaps
if (_lastUpdateTime + _MIN_HEART_BEAT < block.timestamp) {
uint256 curRate_ = _rate;
uint256 newRate_ = _getNewRate1e27();
if (newRate_ == 0) {
revert FluidOracleError(ErrorTypes.ContractRate__NewRateZero);
}
_rate = uint216(newRate_);
_lastUpdateTime = uint40(block.timestamp);
emit LogRebalanceRate(curRate_, newRate_);
}
return _rate;
}
/// @notice returns how much the new rate would be different from current rate in percent (10000 = 1%, 1 = 0.0001%).
function configPercentDiff() public view virtual returns (uint256 configPercentDiff_) {
uint256 curRate_ = _rate;
uint256 newRate_ = _getNewRate1e27();
unchecked {
if (curRate_ > newRate_) {
configPercentDiff_ = ((curRate_ - newRate_) * 1e6) / curRate_;
} else if (newRate_ > curRate_) {
configPercentDiff_ = ((newRate_ - curRate_) * 1e6) / curRate_;
}
}
}
/// @notice returns all config vars, last update timestamp, and external rate source oracle address
function configData()
external
view
returns (uint256 minUpdateDiffPercent_, uint256 minHeartBeat_, uint40 lastUpdateTime_, address rateSource_)
{
return (_MIN_UPDATE_DIFF_PERCENT, _MIN_HEART_BEAT, _lastUpdateTime, _RATE_SOURCE);
}
}
IEZETHBalancerRateProvider.sol 7 lines
// SPDX-License-Identifier: MIT
pragma solidity 0.8.21;
interface IEZETHBalancerRateProvider {
/// @notice Returns the current rate of ezETH in ETH
function getRate() external view returns (uint256 rate);
}
iFluidCenterPrice.sol 14 lines
// SPDX-License-Identifier: MIT
pragma solidity 0.8.21;
interface IFluidCenterPrice {
/// @notice Retrieves the center price for the pool
/// @dev This function is marked as non-constant (potentially state-changing) to allow flexibility in price fetching mechanisms.
/// While typically used as a read-only operation, this design permits write operations if needed for certain token pairs
/// (e.g., fetching up-to-date exchange rates that may require state changes).
/// @return price_ The current price ratio of token1 to token0, expressed with 27 decimal places
function centerPrice() external returns (uint256 price_);
/// @notice helper string to easily identify the oracle. E.g. token symbols
function infoName() external view returns (string memory);
}
iFluidOracle.sol 17 lines
// SPDX-License-Identifier: MIT
pragma solidity 0.8.21;
interface IFluidOracle {
/// @dev Deprecated. Use `getExchangeRateOperate()` and `getExchangeRateLiquidate()` instead. Only implemented for
/// backwards compatibility.
function getExchangeRate() external view returns (uint256 exchangeRate_);
/// @notice Get the `exchangeRate_` between the underlying asset and the peg asset in 1e27 for operates
function getExchangeRateOperate() external view returns (uint256 exchangeRate_);
/// @notice Get the `exchangeRate_` between the underlying asset and the peg asset in 1e27 for liquidations
function getExchangeRateLiquidate() external view returns (uint256 exchangeRate_);
/// @notice helper string to easily identify the oracle. E.g. token symbols
function infoName() external view returns (string memory);
}
Read Contract
configData 0x20e44e43 → uint256, uint256, uint40, address
configPercentDiff 0x9dc10566 → uint256
getExchangeRate 0xe6aa216c → uint256
getExchangeRateLiquidate 0xf3190c89 → uint256
getExchangeRateOperate 0x8e7bfbc0 → uint256
getRate 0x679aefce → uint256
infoName 0xabd5f95d → string
Write Contract 2 functions
These functions modify contract state and require a wallet transaction to execute.
centerPrice 0xf763f7a6
No parameters
returns: uint256
rebalance 0x7d7c2a1c
No parameters
Top Interactions
| Address | Txns | Sent | Received |
|---|---|---|---|
| 0xb287f8A0...Be0C | 1 | 1 |
Recent Transactions
|
| Hash | Block | Age | From/To | Value | |
|---|---|---|---|---|---|
| 0x512b6e9a...3c5676 | 24,420,869 | IN | 0xb287f8A0...Be0C | 0 ETH |